cursor-recursive-rag 0.2.0-alpha.2 → 0.2.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 (210) hide show
  1. package/README.md +179 -203
  2. package/dist/adapters/llm/anthropic.d.ts +27 -0
  3. package/dist/adapters/llm/anthropic.d.ts.map +1 -0
  4. package/dist/adapters/llm/anthropic.js +287 -0
  5. package/dist/adapters/llm/anthropic.js.map +1 -0
  6. package/dist/adapters/llm/base.d.ts +62 -0
  7. package/dist/adapters/llm/base.d.ts.map +1 -0
  8. package/dist/adapters/llm/base.js +140 -0
  9. package/dist/adapters/llm/base.js.map +1 -0
  10. package/dist/adapters/llm/deepseek.d.ts +24 -0
  11. package/dist/adapters/llm/deepseek.d.ts.map +1 -0
  12. package/dist/adapters/llm/deepseek.js +228 -0
  13. package/dist/adapters/llm/deepseek.js.map +1 -0
  14. package/dist/adapters/llm/groq.d.ts +25 -0
  15. package/dist/adapters/llm/groq.d.ts.map +1 -0
  16. package/dist/adapters/llm/groq.js +265 -0
  17. package/dist/adapters/llm/groq.js.map +1 -0
  18. package/dist/adapters/llm/index.d.ts +62 -0
  19. package/dist/adapters/llm/index.d.ts.map +1 -0
  20. package/dist/adapters/llm/index.js +380 -0
  21. package/dist/adapters/llm/index.js.map +1 -0
  22. package/dist/adapters/llm/ollama.d.ts +23 -0
  23. package/dist/adapters/llm/ollama.d.ts.map +1 -0
  24. package/dist/adapters/llm/ollama.js +261 -0
  25. package/dist/adapters/llm/ollama.js.map +1 -0
  26. package/dist/adapters/llm/openai.d.ts +22 -0
  27. package/dist/adapters/llm/openai.d.ts.map +1 -0
  28. package/dist/adapters/llm/openai.js +232 -0
  29. package/dist/adapters/llm/openai.js.map +1 -0
  30. package/dist/adapters/llm/openrouter.d.ts +27 -0
  31. package/dist/adapters/llm/openrouter.d.ts.map +1 -0
  32. package/dist/adapters/llm/openrouter.js +305 -0
  33. package/dist/adapters/llm/openrouter.js.map +1 -0
  34. package/dist/adapters/vector/index.d.ts.map +1 -1
  35. package/dist/adapters/vector/index.js +8 -0
  36. package/dist/adapters/vector/index.js.map +1 -1
  37. package/dist/adapters/vector/redis-native.d.ts +35 -0
  38. package/dist/adapters/vector/redis-native.d.ts.map +1 -0
  39. package/dist/adapters/vector/redis-native.js +170 -0
  40. package/dist/adapters/vector/redis-native.js.map +1 -0
  41. package/dist/cli/commands/chat.d.ts +4 -0
  42. package/dist/cli/commands/chat.d.ts.map +1 -0
  43. package/dist/cli/commands/chat.js +374 -0
  44. package/dist/cli/commands/chat.js.map +1 -0
  45. package/dist/cli/commands/maintenance.d.ts +4 -0
  46. package/dist/cli/commands/maintenance.d.ts.map +1 -0
  47. package/dist/cli/commands/maintenance.js +237 -0
  48. package/dist/cli/commands/maintenance.js.map +1 -0
  49. package/dist/cli/commands/rules.d.ts +9 -0
  50. package/dist/cli/commands/rules.d.ts.map +1 -0
  51. package/dist/cli/commands/rules.js +639 -0
  52. package/dist/cli/commands/rules.js.map +1 -0
  53. package/dist/cli/commands/setup.js +5 -4
  54. package/dist/cli/commands/setup.js.map +1 -1
  55. package/dist/cli/index.js +6 -0
  56. package/dist/cli/index.js.map +1 -1
  57. package/dist/config/memoryConfig.d.ts +427 -0
  58. package/dist/config/memoryConfig.d.ts.map +1 -0
  59. package/dist/config/memoryConfig.js +258 -0
  60. package/dist/config/memoryConfig.js.map +1 -0
  61. package/dist/config/rulesConfig.d.ts +486 -0
  62. package/dist/config/rulesConfig.d.ts.map +1 -0
  63. package/dist/config/rulesConfig.js +345 -0
  64. package/dist/config/rulesConfig.js.map +1 -0
  65. package/dist/dashboard/coreTools.d.ts +14 -0
  66. package/dist/dashboard/coreTools.d.ts.map +1 -0
  67. package/dist/dashboard/coreTools.js +413 -0
  68. package/dist/dashboard/coreTools.js.map +1 -0
  69. package/dist/dashboard/public/index.html +1982 -13
  70. package/dist/dashboard/server.d.ts +1 -8
  71. package/dist/dashboard/server.d.ts.map +1 -1
  72. package/dist/dashboard/server.js +846 -13
  73. package/dist/dashboard/server.js.map +1 -1
  74. package/dist/dashboard/toolRegistry.d.ts +192 -0
  75. package/dist/dashboard/toolRegistry.d.ts.map +1 -0
  76. package/dist/dashboard/toolRegistry.js +322 -0
  77. package/dist/dashboard/toolRegistry.js.map +1 -0
  78. package/dist/proxy/index.d.ts +1 -1
  79. package/dist/proxy/index.d.ts.map +1 -1
  80. package/dist/proxy/index.js +9 -6
  81. package/dist/proxy/index.js.map +1 -1
  82. package/dist/server/index.js +21 -0
  83. package/dist/server/index.js.map +1 -1
  84. package/dist/server/tools/crawl.d.ts.map +1 -1
  85. package/dist/server/tools/crawl.js +8 -0
  86. package/dist/server/tools/crawl.js.map +1 -1
  87. package/dist/server/tools/index.d.ts.map +1 -1
  88. package/dist/server/tools/index.js +19 -1
  89. package/dist/server/tools/index.js.map +1 -1
  90. package/dist/server/tools/ingest.d.ts.map +1 -1
  91. package/dist/server/tools/ingest.js +5 -0
  92. package/dist/server/tools/ingest.js.map +1 -1
  93. package/dist/server/tools/memory.d.ts +250 -0
  94. package/dist/server/tools/memory.d.ts.map +1 -0
  95. package/dist/server/tools/memory.js +472 -0
  96. package/dist/server/tools/memory.js.map +1 -0
  97. package/dist/server/tools/recursive-query.d.ts.map +1 -1
  98. package/dist/server/tools/recursive-query.js +6 -0
  99. package/dist/server/tools/recursive-query.js.map +1 -1
  100. package/dist/server/tools/search.d.ts.map +1 -1
  101. package/dist/server/tools/search.js +6 -0
  102. package/dist/server/tools/search.js.map +1 -1
  103. package/dist/services/activity-log.d.ts +10 -0
  104. package/dist/services/activity-log.d.ts.map +1 -0
  105. package/dist/services/activity-log.js +53 -0
  106. package/dist/services/activity-log.js.map +1 -0
  107. package/dist/services/categoryManager.d.ts +110 -0
  108. package/dist/services/categoryManager.d.ts.map +1 -0
  109. package/dist/services/categoryManager.js +549 -0
  110. package/dist/services/categoryManager.js.map +1 -0
  111. package/dist/services/contextEnvironment.d.ts +206 -0
  112. package/dist/services/contextEnvironment.d.ts.map +1 -0
  113. package/dist/services/contextEnvironment.js +481 -0
  114. package/dist/services/contextEnvironment.js.map +1 -0
  115. package/dist/services/conversationProcessor.d.ts +99 -0
  116. package/dist/services/conversationProcessor.d.ts.map +1 -0
  117. package/dist/services/conversationProcessor.js +311 -0
  118. package/dist/services/conversationProcessor.js.map +1 -0
  119. package/dist/services/cursorChatReader.d.ts +129 -0
  120. package/dist/services/cursorChatReader.d.ts.map +1 -0
  121. package/dist/services/cursorChatReader.js +419 -0
  122. package/dist/services/cursorChatReader.js.map +1 -0
  123. package/dist/services/decayCalculator.d.ts +85 -0
  124. package/dist/services/decayCalculator.d.ts.map +1 -0
  125. package/dist/services/decayCalculator.js +182 -0
  126. package/dist/services/decayCalculator.js.map +1 -0
  127. package/dist/services/enhancedVectorStore.d.ts +102 -0
  128. package/dist/services/enhancedVectorStore.d.ts.map +1 -0
  129. package/dist/services/enhancedVectorStore.js +245 -0
  130. package/dist/services/enhancedVectorStore.js.map +1 -0
  131. package/dist/services/hybridScorer.d.ts +120 -0
  132. package/dist/services/hybridScorer.d.ts.map +1 -0
  133. package/dist/services/hybridScorer.js +334 -0
  134. package/dist/services/hybridScorer.js.map +1 -0
  135. package/dist/services/knowledgeExtractor.d.ts +45 -0
  136. package/dist/services/knowledgeExtractor.d.ts.map +1 -0
  137. package/dist/services/knowledgeExtractor.js +436 -0
  138. package/dist/services/knowledgeExtractor.js.map +1 -0
  139. package/dist/services/knowledgeStorage.d.ts +102 -0
  140. package/dist/services/knowledgeStorage.d.ts.map +1 -0
  141. package/dist/services/knowledgeStorage.js +383 -0
  142. package/dist/services/knowledgeStorage.js.map +1 -0
  143. package/dist/services/maintenanceScheduler.d.ts +89 -0
  144. package/dist/services/maintenanceScheduler.d.ts.map +1 -0
  145. package/dist/services/maintenanceScheduler.js +479 -0
  146. package/dist/services/maintenanceScheduler.js.map +1 -0
  147. package/dist/services/memoryMetadataStore.d.ts +62 -0
  148. package/dist/services/memoryMetadataStore.d.ts.map +1 -0
  149. package/dist/services/memoryMetadataStore.js +570 -0
  150. package/dist/services/memoryMetadataStore.js.map +1 -0
  151. package/dist/services/recursiveRetrieval.d.ts +122 -0
  152. package/dist/services/recursiveRetrieval.d.ts.map +1 -0
  153. package/dist/services/recursiveRetrieval.js +443 -0
  154. package/dist/services/recursiveRetrieval.js.map +1 -0
  155. package/dist/services/relationshipGraph.d.ts +77 -0
  156. package/dist/services/relationshipGraph.d.ts.map +1 -0
  157. package/dist/services/relationshipGraph.js +411 -0
  158. package/dist/services/relationshipGraph.js.map +1 -0
  159. package/dist/services/rlmSafeguards.d.ts +273 -0
  160. package/dist/services/rlmSafeguards.d.ts.map +1 -0
  161. package/dist/services/rlmSafeguards.js +705 -0
  162. package/dist/services/rlmSafeguards.js.map +1 -0
  163. package/dist/services/rulesAnalyzer.d.ts +119 -0
  164. package/dist/services/rulesAnalyzer.d.ts.map +1 -0
  165. package/dist/services/rulesAnalyzer.js +768 -0
  166. package/dist/services/rulesAnalyzer.js.map +1 -0
  167. package/dist/services/rulesMerger.d.ts +75 -0
  168. package/dist/services/rulesMerger.d.ts.map +1 -0
  169. package/dist/services/rulesMerger.js +404 -0
  170. package/dist/services/rulesMerger.js.map +1 -0
  171. package/dist/services/rulesParser.d.ts +127 -0
  172. package/dist/services/rulesParser.d.ts.map +1 -0
  173. package/dist/services/rulesParser.js +594 -0
  174. package/dist/services/rulesParser.js.map +1 -0
  175. package/dist/services/smartChunker.d.ts +110 -0
  176. package/dist/services/smartChunker.d.ts.map +1 -0
  177. package/dist/services/smartChunker.js +520 -0
  178. package/dist/services/smartChunker.js.map +1 -0
  179. package/dist/types/categories.d.ts +105 -0
  180. package/dist/types/categories.d.ts.map +1 -0
  181. package/dist/types/categories.js +108 -0
  182. package/dist/types/categories.js.map +1 -0
  183. package/dist/types/extractedKnowledge.d.ts +233 -0
  184. package/dist/types/extractedKnowledge.d.ts.map +1 -0
  185. package/dist/types/extractedKnowledge.js +56 -0
  186. package/dist/types/extractedKnowledge.js.map +1 -0
  187. package/dist/types/index.d.ts +9 -2
  188. package/dist/types/index.d.ts.map +1 -1
  189. package/dist/types/index.js +12 -1
  190. package/dist/types/index.js.map +1 -1
  191. package/dist/types/llmProvider.d.ts +282 -0
  192. package/dist/types/llmProvider.d.ts.map +1 -0
  193. package/dist/types/llmProvider.js +48 -0
  194. package/dist/types/llmProvider.js.map +1 -0
  195. package/dist/types/memory.d.ts +227 -0
  196. package/dist/types/memory.d.ts.map +1 -0
  197. package/dist/types/memory.js +76 -0
  198. package/dist/types/memory.js.map +1 -0
  199. package/dist/types/relationships.d.ts +167 -0
  200. package/dist/types/relationships.d.ts.map +1 -0
  201. package/dist/types/relationships.js +106 -0
  202. package/dist/types/relationships.js.map +1 -0
  203. package/dist/types/rulesOptimizer.d.ts +345 -0
  204. package/dist/types/rulesOptimizer.d.ts.map +1 -0
  205. package/dist/types/rulesOptimizer.js +22 -0
  206. package/dist/types/rulesOptimizer.js.map +1 -0
  207. package/docs/cursor-recursive-rag-memory-spec.md +4569 -0
  208. package/docs/cursor-recursive-rag-tasks.md +1355 -0
  209. package/package.json +6 -3
  210. package/restart-rag.sh +16 -0
@@ -0,0 +1,411 @@
1
+ import { DEFAULT_TRAVERSAL_OPTIONS, isBidirectional, getReverseType, } from '../types/relationships.js';
2
+ import { ChunkType, RelationshipType } from '../types/memory.js';
3
+ import { getMemoryMetadataStore } from './memoryMetadataStore.js';
4
+ /**
5
+ * Graph operations for relationship-based retrieval
6
+ *
7
+ * This service provides graph traversal, contradiction detection, and
8
+ * relationship management capabilities for the knowledge base.
9
+ */
10
+ export class RelationshipGraph {
11
+ metadataStore;
12
+ constructor(metadataStore) {
13
+ this.metadataStore = metadataStore || getMemoryMetadataStore();
14
+ }
15
+ /**
16
+ * Add a relationship between two chunks
17
+ */
18
+ addRelationship(fromId, toId, type, options) {
19
+ const strength = options?.strength ?? 0.5;
20
+ const shouldBeBidirectional = options?.bidirectional ?? isBidirectional(type);
21
+ this.metadataStore.addRelationship(fromId, toId, type, strength, options?.metadata);
22
+ if (shouldBeBidirectional) {
23
+ const reverseType = getReverseType(type);
24
+ this.metadataStore.addRelationship(toId, fromId, reverseType, strength, options?.metadata);
25
+ }
26
+ }
27
+ /**
28
+ * Add multiple relationships in a batch
29
+ */
30
+ addRelationshipBatch(batch) {
31
+ const result = {
32
+ created: 0,
33
+ updated: 0,
34
+ failed: 0,
35
+ errors: [],
36
+ };
37
+ for (let i = 0; i < batch.relationships.length; i++) {
38
+ const rel = batch.relationships[i];
39
+ try {
40
+ this.addRelationship(rel.fromChunkId, rel.toChunkId, rel.type, {
41
+ strength: rel.strength,
42
+ bidirectional: rel.bidirectional,
43
+ metadata: rel.metadata,
44
+ });
45
+ result.created++;
46
+ }
47
+ catch (error) {
48
+ result.failed++;
49
+ result.errors?.push({
50
+ index: i,
51
+ error: error instanceof Error ? error.message : String(error),
52
+ });
53
+ }
54
+ }
55
+ return result;
56
+ }
57
+ /**
58
+ * Remove a relationship between two chunks
59
+ */
60
+ removeRelationship(fromId, toId, type) {
61
+ this.metadataStore.deleteRelationship(fromId, toId, type);
62
+ if (isBidirectional(type)) {
63
+ const reverseType = getReverseType(type);
64
+ this.metadataStore.deleteRelationship(toId, fromId, reverseType);
65
+ }
66
+ }
67
+ /**
68
+ * Traverse the graph from a starting chunk using BFS
69
+ */
70
+ traverse(startChunkId, options = {}) {
71
+ const opts = { ...DEFAULT_TRAVERSAL_OPTIONS, ...options };
72
+ const visited = new Set();
73
+ const results = [];
74
+ let maxDepthReached = 0;
75
+ const queue = [{ chunkId: startChunkId, depth: 0, path: [] }];
76
+ while (queue.length > 0) {
77
+ const current = queue.shift();
78
+ if (visited.has(current.chunkId) || current.depth > opts.maxDepth) {
79
+ continue;
80
+ }
81
+ visited.add(current.chunkId);
82
+ maxDepthReached = Math.max(maxDepthReached, current.depth);
83
+ if (current.depth > 0) {
84
+ results.push({
85
+ chunkId: current.chunkId,
86
+ depth: current.depth,
87
+ path: current.path,
88
+ relationshipType: current.viaType,
89
+ strength: current.viaStrength,
90
+ });
91
+ }
92
+ const relationships = this.metadataStore.getRelationships(current.chunkId, opts.direction || 'both');
93
+ for (const rel of relationships) {
94
+ const relType = rel.relationshipType;
95
+ if (opts.relationshipTypes && opts.relationshipTypes.length > 0) {
96
+ if (!opts.relationshipTypes.includes(relType)) {
97
+ continue;
98
+ }
99
+ }
100
+ if (opts.minStrength && rel.strength < opts.minStrength) {
101
+ continue;
102
+ }
103
+ const targetId = rel.sourceChunkId === current.chunkId
104
+ ? rel.targetChunkId
105
+ : rel.sourceChunkId;
106
+ if (visited.has(targetId)) {
107
+ continue;
108
+ }
109
+ if (opts.excludeArchived) {
110
+ const metadata = this.metadataStore.getChunkMetadata(targetId);
111
+ if (metadata?.isArchived) {
112
+ continue;
113
+ }
114
+ }
115
+ queue.push({
116
+ chunkId: targetId,
117
+ depth: current.depth + 1,
118
+ path: [...current.path, current.chunkId],
119
+ viaType: relType,
120
+ viaStrength: rel.strength,
121
+ });
122
+ }
123
+ }
124
+ return {
125
+ startChunkId,
126
+ nodes: results,
127
+ totalNodes: results.length,
128
+ maxDepthReached,
129
+ truncated: false,
130
+ };
131
+ }
132
+ /**
133
+ * Find all chunks related to a given chunk
134
+ */
135
+ findRelated(chunkId, options = {}) {
136
+ const results = [];
137
+ const seen = new Set();
138
+ const directRelationships = this.metadataStore.getRelationships(chunkId, 'both');
139
+ for (const rel of directRelationships) {
140
+ const relType = rel.relationshipType;
141
+ if (options.types && options.types.length > 0) {
142
+ if (!options.types.includes(relType)) {
143
+ continue;
144
+ }
145
+ }
146
+ if (options.minStrength && rel.strength < options.minStrength) {
147
+ continue;
148
+ }
149
+ const targetId = rel.sourceChunkId === chunkId
150
+ ? rel.targetChunkId
151
+ : rel.sourceChunkId;
152
+ if (!seen.has(targetId)) {
153
+ seen.add(targetId);
154
+ results.push({
155
+ chunkId: targetId,
156
+ relationshipType: relType,
157
+ strength: rel.strength,
158
+ isTransitive: false,
159
+ });
160
+ }
161
+ }
162
+ if (options.includeTransitive && options.transitiveDepth && options.transitiveDepth > 1) {
163
+ const traversalResult = this.traverse(chunkId, {
164
+ maxDepth: options.transitiveDepth,
165
+ relationshipTypes: options.types,
166
+ minStrength: options.minStrength,
167
+ });
168
+ for (const node of traversalResult.nodes) {
169
+ if (!seen.has(node.chunkId)) {
170
+ seen.add(node.chunkId);
171
+ results.push({
172
+ chunkId: node.chunkId,
173
+ relationshipType: node.relationshipType,
174
+ strength: node.strength,
175
+ isTransitive: node.depth > 1,
176
+ path: node.path,
177
+ });
178
+ }
179
+ }
180
+ }
181
+ if (options.maxResults) {
182
+ results.sort((a, b) => b.strength - a.strength);
183
+ return results.slice(0, options.maxResults);
184
+ }
185
+ return results;
186
+ }
187
+ /**
188
+ * Find known contradictions for a chunk
189
+ */
190
+ findContradictions(chunkId) {
191
+ const contradictions = [];
192
+ const rels = this.metadataStore.getRelationships(chunkId, 'both');
193
+ for (const rel of rels) {
194
+ const relType = rel.relationshipType;
195
+ let contradictionType = null;
196
+ if (relType === RelationshipType.CONTRADICTS) {
197
+ contradictionType = 'contradiction';
198
+ }
199
+ else if (relType === RelationshipType.INVALIDATED_BY) {
200
+ contradictionType = 'invalidation';
201
+ }
202
+ else if (relType === RelationshipType.SUPERSEDES) {
203
+ if (rel.targetChunkId === chunkId) {
204
+ contradictionType = 'superseded';
205
+ }
206
+ }
207
+ if (contradictionType) {
208
+ const targetId = rel.sourceChunkId === chunkId
209
+ ? rel.targetChunkId
210
+ : rel.sourceChunkId;
211
+ contradictions.push({
212
+ chunkId: targetId,
213
+ type: contradictionType,
214
+ strength: rel.strength,
215
+ metadata: rel.metadata,
216
+ });
217
+ }
218
+ }
219
+ return contradictions;
220
+ }
221
+ /**
222
+ * Detect potential contradictions for a new chunk based on similarity and temporal factors
223
+ */
224
+ detectPotentialContradictions(newChunkId, newChunkType, newChunkCreatedAt, similarChunks) {
225
+ const potentialContradictions = [];
226
+ const CONTRADICTION_TYPES = [
227
+ ChunkType.SOLUTION,
228
+ ChunkType.DECISION,
229
+ ChunkType.PATTERN,
230
+ ChunkType.STANDARD,
231
+ ];
232
+ if (!CONTRADICTION_TYPES.includes(newChunkType)) {
233
+ return potentialContradictions;
234
+ }
235
+ for (const candidate of similarChunks) {
236
+ if (candidate.similarity < 0.85)
237
+ continue;
238
+ if (!CONTRADICTION_TYPES.includes(candidate.chunkType))
239
+ continue;
240
+ const candidateDate = new Date(candidate.createdAt);
241
+ const timeDiff = Math.abs(newChunkCreatedAt.getTime() - candidateDate.getTime());
242
+ const daysDiff = timeDiff / (1000 * 60 * 60 * 24);
243
+ let suggestedAction = 'review';
244
+ let reason = 'High semantic similarity detected';
245
+ if (daysDiff > 30) {
246
+ suggestedAction = 'supersede';
247
+ reason = `High similarity but ${Math.round(daysDiff)} days apart - likely an update`;
248
+ }
249
+ else if (daysDiff < 1 && candidate.similarity > 0.95) {
250
+ suggestedAction = 'merge';
251
+ reason = 'Very high similarity within same day - likely duplicate';
252
+ }
253
+ else if (candidate.similarity < 0.9) {
254
+ suggestedAction = 'ignore';
255
+ reason = 'Moderate similarity - may be related but not contradictory';
256
+ }
257
+ potentialContradictions.push({
258
+ existingChunkId: candidate.id,
259
+ newChunkId,
260
+ similarity: candidate.similarity,
261
+ reason,
262
+ suggestedAction,
263
+ });
264
+ }
265
+ return potentialContradictions;
266
+ }
267
+ /**
268
+ * Mark a chunk as superseding another
269
+ */
270
+ markSupersedes(newChunkId, oldChunkId, strength = 0.8) {
271
+ this.addRelationship(newChunkId, oldChunkId, RelationshipType.SUPERSEDES, {
272
+ strength,
273
+ metadata: {
274
+ supersededAt: new Date().toISOString(),
275
+ },
276
+ });
277
+ }
278
+ /**
279
+ * Mark two chunks as contradicting each other
280
+ */
281
+ markContradiction(chunkId1, chunkId2, strength = 0.7, metadata) {
282
+ this.addRelationship(chunkId1, chunkId2, RelationshipType.CONTRADICTS, {
283
+ strength,
284
+ bidirectional: true,
285
+ metadata: {
286
+ detectedAt: new Date().toISOString(),
287
+ ...metadata,
288
+ },
289
+ });
290
+ }
291
+ /**
292
+ * Find all chunks that supersede a given chunk (chain of updates)
293
+ */
294
+ findSupersessionChain(chunkId) {
295
+ const chain = [];
296
+ let currentId = chunkId;
297
+ const visited = new Set();
298
+ while (true) {
299
+ if (visited.has(currentId))
300
+ break;
301
+ visited.add(currentId);
302
+ const rels = this.metadataStore.getRelationships(currentId, 'to');
303
+ const supersedingRel = rels.find(r => r.relationshipType === RelationshipType.SUPERSEDES);
304
+ if (!supersedingRel)
305
+ break;
306
+ currentId = supersedingRel.sourceChunkId;
307
+ chain.push(currentId);
308
+ }
309
+ return chain;
310
+ }
311
+ /**
312
+ * Get the latest version in a supersession chain
313
+ */
314
+ getLatestVersion(chunkId) {
315
+ const chain = this.findSupersessionChain(chunkId);
316
+ return chain.length > 0 ? chain[chain.length - 1] : chunkId;
317
+ }
318
+ /**
319
+ * Get graph statistics
320
+ */
321
+ getStats() {
322
+ const allChunks = this.metadataStore.getAllChunkMetadata({ includeArchived: true });
323
+ const relationshipsByType = {};
324
+ for (const type of Object.values(RelationshipType)) {
325
+ relationshipsByType[type] = 0;
326
+ }
327
+ let totalRelationships = 0;
328
+ const connectionCounts = new Map();
329
+ const chunksWithRelationships = new Set();
330
+ for (const chunk of allChunks) {
331
+ const rels = this.metadataStore.getRelationships(chunk.chunkId, 'both');
332
+ const count = rels.length;
333
+ if (count > 0) {
334
+ chunksWithRelationships.add(chunk.chunkId);
335
+ connectionCounts.set(chunk.chunkId, count);
336
+ for (const rel of rels) {
337
+ const type = rel.relationshipType;
338
+ if (relationshipsByType[type] !== undefined) {
339
+ relationshipsByType[type]++;
340
+ }
341
+ totalRelationships++;
342
+ }
343
+ }
344
+ }
345
+ totalRelationships = Math.floor(totalRelationships / 2);
346
+ const sortedConnections = Array.from(connectionCounts.entries())
347
+ .sort((a, b) => b[1] - a[1])
348
+ .slice(0, 10)
349
+ .map(([chunkId, connections]) => ({ chunkId, connections }));
350
+ const isolatedChunks = allChunks.length - chunksWithRelationships.size;
351
+ const avgRelationships = chunksWithRelationships.size > 0
352
+ ? totalRelationships / chunksWithRelationships.size
353
+ : 0;
354
+ let maxDepth = 0;
355
+ const sampleChunks = Array.from(chunksWithRelationships).slice(0, 5);
356
+ for (const chunkId of sampleChunks) {
357
+ const result = this.traverse(chunkId, { maxDepth: 10 });
358
+ maxDepth = Math.max(maxDepth, result.maxDepthReached);
359
+ }
360
+ return {
361
+ totalRelationships,
362
+ relationshipsByType,
363
+ avgRelationshipsPerChunk: avgRelationships,
364
+ maxDepth,
365
+ isolatedChunks,
366
+ mostConnectedChunks: sortedConnections,
367
+ };
368
+ }
369
+ /**
370
+ * Find strongly connected components (clusters of related knowledge)
371
+ */
372
+ findClusters(minClusterSize = 3) {
373
+ const allChunks = this.metadataStore.getAllChunkMetadata({ includeArchived: false });
374
+ const visited = new Set();
375
+ const clusters = [];
376
+ for (const chunk of allChunks) {
377
+ if (visited.has(chunk.chunkId))
378
+ continue;
379
+ const cluster = [];
380
+ const queue = [chunk.chunkId];
381
+ while (queue.length > 0) {
382
+ const currentId = queue.shift();
383
+ if (visited.has(currentId))
384
+ continue;
385
+ visited.add(currentId);
386
+ cluster.push(currentId);
387
+ const related = this.metadataStore.getRelatedChunkIds(currentId);
388
+ for (const relatedId of related) {
389
+ if (!visited.has(relatedId)) {
390
+ queue.push(relatedId);
391
+ }
392
+ }
393
+ }
394
+ if (cluster.length >= minClusterSize) {
395
+ clusters.push(cluster);
396
+ }
397
+ }
398
+ return clusters.sort((a, b) => b.length - a.length);
399
+ }
400
+ }
401
+ let instance = null;
402
+ export function getRelationshipGraph(metadataStore) {
403
+ if (!instance) {
404
+ instance = new RelationshipGraph(metadataStore);
405
+ }
406
+ return instance;
407
+ }
408
+ export function resetRelationshipGraph() {
409
+ instance = null;
410
+ }
411
+ //# sourceMappingURL=relationshipGraph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relationshipGraph.js","sourceRoot":"","sources":["../../src/services/relationshipGraph.ts"],"names":[],"mappings":"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"}