learngraph 0.7.0 → 0.8.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 (74) hide show
  1. package/dist/cjs/components/SkillGraph.js +224 -23
  2. package/dist/cjs/components/SkillGraph.js.map +1 -1
  3. package/dist/cjs/components/hooks.js +10 -0
  4. package/dist/cjs/components/hooks.js.map +1 -1
  5. package/dist/cjs/embeddings/base.js +104 -0
  6. package/dist/cjs/embeddings/base.js.map +1 -0
  7. package/dist/cjs/embeddings/index.js +91 -0
  8. package/dist/cjs/embeddings/index.js.map +1 -0
  9. package/dist/cjs/embeddings/local.js +224 -0
  10. package/dist/cjs/embeddings/local.js.map +1 -0
  11. package/dist/cjs/embeddings/openai.js +169 -0
  12. package/dist/cjs/embeddings/openai.js.map +1 -0
  13. package/dist/cjs/index.js +25 -1
  14. package/dist/cjs/index.js.map +1 -1
  15. package/dist/cjs/llm/graphrag-orchestrator.js +1004 -0
  16. package/dist/cjs/llm/graphrag-orchestrator.js.map +1 -0
  17. package/dist/cjs/llm/index.js +7 -1
  18. package/dist/cjs/llm/index.js.map +1 -1
  19. package/dist/cjs/storage/index.js +15 -1
  20. package/dist/cjs/storage/index.js.map +1 -1
  21. package/dist/cjs/storage/neo4j-graphrag.js +596 -0
  22. package/dist/cjs/storage/neo4j-graphrag.js.map +1 -0
  23. package/dist/cjs/types/graphrag.js +11 -0
  24. package/dist/cjs/types/graphrag.js.map +1 -0
  25. package/dist/esm/components/SkillGraph.js +226 -25
  26. package/dist/esm/components/SkillGraph.js.map +1 -1
  27. package/dist/esm/components/hooks.js +10 -0
  28. package/dist/esm/components/hooks.js.map +1 -1
  29. package/dist/esm/embeddings/base.js +99 -0
  30. package/dist/esm/embeddings/base.js.map +1 -0
  31. package/dist/esm/embeddings/index.js +79 -0
  32. package/dist/esm/embeddings/index.js.map +1 -0
  33. package/dist/esm/embeddings/local.js +219 -0
  34. package/dist/esm/embeddings/local.js.map +1 -0
  35. package/dist/esm/embeddings/openai.js +164 -0
  36. package/dist/esm/embeddings/openai.js.map +1 -0
  37. package/dist/esm/index.js +16 -0
  38. package/dist/esm/index.js.map +1 -1
  39. package/dist/esm/llm/graphrag-orchestrator.js +999 -0
  40. package/dist/esm/llm/graphrag-orchestrator.js.map +1 -0
  41. package/dist/esm/llm/index.js +4 -0
  42. package/dist/esm/llm/index.js.map +1 -1
  43. package/dist/esm/storage/index.js +8 -0
  44. package/dist/esm/storage/index.js.map +1 -1
  45. package/dist/esm/storage/neo4j-graphrag.js +591 -0
  46. package/dist/esm/storage/neo4j-graphrag.js.map +1 -0
  47. package/dist/esm/types/graphrag.js +10 -0
  48. package/dist/esm/types/graphrag.js.map +1 -0
  49. package/dist/types/components/SkillGraph.d.ts.map +1 -1
  50. package/dist/types/components/hooks.d.ts.map +1 -1
  51. package/dist/types/embeddings/base.d.ts +51 -0
  52. package/dist/types/embeddings/base.d.ts.map +1 -0
  53. package/dist/types/embeddings/index.d.ts +48 -0
  54. package/dist/types/embeddings/index.d.ts.map +1 -0
  55. package/dist/types/embeddings/local.d.ts +82 -0
  56. package/dist/types/embeddings/local.d.ts.map +1 -0
  57. package/dist/types/embeddings/openai.d.ts +48 -0
  58. package/dist/types/embeddings/openai.d.ts.map +1 -0
  59. package/dist/types/index.d.ts +2 -0
  60. package/dist/types/index.d.ts.map +1 -1
  61. package/dist/types/llm/graphrag-orchestrator.d.ts +280 -0
  62. package/dist/types/llm/graphrag-orchestrator.d.ts.map +1 -0
  63. package/dist/types/llm/index.d.ts +2 -0
  64. package/dist/types/llm/index.d.ts.map +1 -1
  65. package/dist/types/mcp/tools.d.ts +6 -6
  66. package/dist/types/storage/index.d.ts +2 -0
  67. package/dist/types/storage/index.d.ts.map +1 -1
  68. package/dist/types/storage/neo4j-graphrag.d.ts +106 -0
  69. package/dist/types/storage/neo4j-graphrag.d.ts.map +1 -0
  70. package/dist/types/types/graphrag.d.ts +335 -0
  71. package/dist/types/types/graphrag.d.ts.map +1 -0
  72. package/dist/types/types/index.d.ts +1 -0
  73. package/dist/types/types/index.d.ts.map +1 -1
  74. package/package.json +1 -1
@@ -0,0 +1,596 @@
1
+ "use strict";
2
+ /**
3
+ * Neo4j GraphRAG Storage
4
+ *
5
+ * Extends Neo4jStorage with vector embedding and semantic search capabilities
6
+ * using Neo4j 5.x's native vector index support.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.Neo4jGraphRAGStorage = exports.GRAPHRAG_DEFAULTS = void 0;
12
+ exports.createNeo4jGraphRAGStorage = createNeo4jGraphRAGStorage;
13
+ const neo4j_js_1 = require("./neo4j.js");
14
+ const errors_js_1 = require("./errors.js");
15
+ /**
16
+ * Default GraphRAG configuration
17
+ */
18
+ exports.GRAPHRAG_DEFAULTS = {
19
+ /** Default limit for vector search results */
20
+ searchLimit: 10,
21
+ /** Default minimum similarity score */
22
+ minScore: 0.5,
23
+ /** Default graph traversal depth */
24
+ graphDepth: 2,
25
+ /** Default weight for vector similarity in combined score */
26
+ vectorWeight: 0.7,
27
+ /** Default similarity metric */
28
+ metric: 'cosine',
29
+ /** Batch size for embedding operations */
30
+ embeddingBatchSize: 50,
31
+ };
32
+ /**
33
+ * Neo4j GraphRAG Storage
34
+ *
35
+ * Provides vector embedding storage and semantic search using Neo4j 5.x
36
+ * native vector indexes combined with graph traversal for enhanced context.
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * import { Neo4jGraphRAGStorage, createOpenAIEmbeddingAdapter } from 'learngraph';
41
+ *
42
+ * const storage = new Neo4jGraphRAGStorage();
43
+ * await storage.connect({
44
+ * backend: 'neo4j',
45
+ * uri: 'bolt://localhost:7687',
46
+ * username: 'neo4j',
47
+ * password: 'password',
48
+ * });
49
+ *
50
+ * // Set embedding adapter
51
+ * const embedding = createOpenAIEmbeddingAdapter();
52
+ * storage.setEmbeddingAdapter(embedding);
53
+ *
54
+ * // Create vector index
55
+ * await storage.createVectorIndex({ dimensions: 1536 });
56
+ *
57
+ * // Embed all skills
58
+ * await storage.embedAllSkills();
59
+ *
60
+ * // Semantic search with graph context
61
+ * const results = await storage.searchWithGraphContext('learn JavaScript functions');
62
+ * ```
63
+ */
64
+ class Neo4jGraphRAGStorage extends neo4j_js_1.Neo4jStorage {
65
+ embeddingAdapter = null;
66
+ vectorIndexName = 'skill_embedding_index';
67
+ vectorIndexDimensions = null;
68
+ // ─────────────────────────────────────────────────────────────────────────────
69
+ // Embedding Adapter Management
70
+ // ─────────────────────────────────────────────────────────────────────────────
71
+ setEmbeddingAdapter(adapter) {
72
+ this.embeddingAdapter = adapter;
73
+ this.vectorIndexDimensions = adapter.dimensions;
74
+ }
75
+ getEmbeddingAdapter() {
76
+ return this.embeddingAdapter;
77
+ }
78
+ requireEmbeddingAdapter() {
79
+ if (!this.embeddingAdapter) {
80
+ throw new Error('Embedding adapter not set. Call setEmbeddingAdapter() first.');
81
+ }
82
+ return this.embeddingAdapter;
83
+ }
84
+ // ─────────────────────────────────────────────────────────────────────────────
85
+ // Skill Embedding
86
+ // ─────────────────────────────────────────────────────────────────────────────
87
+ /**
88
+ * Generate text representation for embedding
89
+ */
90
+ getEmbeddingText(skill) {
91
+ const parts = [skill.name, skill.description];
92
+ if (skill.tags.length > 0) {
93
+ parts.push(`Tags: ${skill.tags.join(', ')}`);
94
+ }
95
+ if (skill.domain) {
96
+ parts.push(`Domain: ${skill.domain}`);
97
+ }
98
+ if (skill.bloomLevel) {
99
+ parts.push(`Bloom level: ${skill.bloomLevel}`);
100
+ }
101
+ return parts.join('. ');
102
+ }
103
+ async embedSkill(skillId) {
104
+ const adapter = this.requireEmbeddingAdapter();
105
+ const skill = await this.getSkill(skillId);
106
+ if (!skill) {
107
+ throw new Error(`Skill not found: ${skillId}`);
108
+ }
109
+ const text = this.getEmbeddingText(skill);
110
+ const result = await adapter.embed(text);
111
+ // Store embedding in Neo4j
112
+ const session = this.getSession();
113
+ try {
114
+ await session.run(`
115
+ MATCH (s:Skill {id: $id})
116
+ SET s.embedding = $embedding,
117
+ s.embeddedText = $embeddedText,
118
+ s.embeddedAt = datetime()
119
+ `, {
120
+ id: skillId,
121
+ embedding: result.vector,
122
+ embeddedText: text,
123
+ });
124
+ }
125
+ finally {
126
+ await session.close();
127
+ }
128
+ }
129
+ async embedAllSkills(options) {
130
+ const adapter = this.requireEmbeddingAdapter();
131
+ const batchSize = options?.batchSize ?? exports.GRAPHRAG_DEFAULTS.embeddingBatchSize;
132
+ // Get all skills
133
+ const skills = await this.findSkills({});
134
+ const total = skills.length;
135
+ let embedded = 0;
136
+ let failed = 0;
137
+ // Process in batches
138
+ for (let i = 0; i < skills.length; i += batchSize) {
139
+ const batch = skills.slice(i, i + batchSize);
140
+ const texts = batch.map((skill) => this.getEmbeddingText(skill));
141
+ try {
142
+ const result = await adapter.embedBatch(texts);
143
+ // Store embeddings
144
+ const session = this.getSession();
145
+ try {
146
+ for (let j = 0; j < batch.length; j++) {
147
+ const skill = batch[j];
148
+ const embedding = result.embeddings[j];
149
+ if (embedding) {
150
+ await session.run(`
151
+ MATCH (s:Skill {id: $id})
152
+ SET s.embedding = $embedding,
153
+ s.embeddedText = $embeddedText,
154
+ s.embeddedAt = datetime()
155
+ `, {
156
+ id: skill.id,
157
+ embedding: embedding.vector,
158
+ embeddedText: texts[j],
159
+ });
160
+ embedded++;
161
+ }
162
+ }
163
+ }
164
+ finally {
165
+ await session.close();
166
+ }
167
+ }
168
+ catch (error) {
169
+ console.error(`Failed to embed batch starting at ${i}:`, error);
170
+ failed += batch.length;
171
+ }
172
+ if (options?.onProgress) {
173
+ options.onProgress(Math.min(i + batchSize, total), total);
174
+ }
175
+ }
176
+ return { embedded, failed };
177
+ }
178
+ async hasEmbedding(skillId) {
179
+ const session = this.getSession();
180
+ try {
181
+ const result = await session.run(`
182
+ MATCH (s:Skill {id: $id})
183
+ RETURN s.embedding IS NOT NULL as hasEmbedding
184
+ `, { id: skillId });
185
+ const record = result.records[0];
186
+ return record ? record.get('hasEmbedding') : false;
187
+ }
188
+ finally {
189
+ await session.close();
190
+ }
191
+ }
192
+ async getSkillWithEmbedding(skillId) {
193
+ const session = this.getSession();
194
+ try {
195
+ const result = await session.run(`
196
+ MATCH (s:Skill {id: $id})
197
+ RETURN s {.*} as skill
198
+ `, { id: skillId });
199
+ const record = result.records[0];
200
+ if (!record)
201
+ return null;
202
+ const data = record.get('skill');
203
+ const skill = this.recordToSkill(data);
204
+ return {
205
+ ...skill,
206
+ embedding: data.embedding,
207
+ embeddedText: data.embeddedText,
208
+ };
209
+ }
210
+ finally {
211
+ await session.close();
212
+ }
213
+ }
214
+ // ─────────────────────────────────────────────────────────────────────────────
215
+ // Vector Search
216
+ // ─────────────────────────────────────────────────────────────────────────────
217
+ async searchByVector(query, options) {
218
+ const adapter = this.requireEmbeddingAdapter();
219
+ // Generate query embedding
220
+ const result = await adapter.embed(query);
221
+ return this.searchByEmbedding(result.vector, options);
222
+ }
223
+ async searchByEmbedding(embedding, options) {
224
+ const limit = options?.limit ?? exports.GRAPHRAG_DEFAULTS.searchLimit;
225
+ const minScore = options?.minScore ?? exports.GRAPHRAG_DEFAULTS.minScore;
226
+ const metric = options?.metric ?? exports.GRAPHRAG_DEFAULTS.metric;
227
+ const session = this.getSession();
228
+ try {
229
+ // Build filter conditions
230
+ const filters = [];
231
+ const params = {
232
+ embedding,
233
+ limit,
234
+ minScore,
235
+ };
236
+ if (options?.tags && options.tags.length > 0) {
237
+ filters.push('any(tag IN s.tags WHERE tag IN $filterTags)');
238
+ params.filterTags = options.tags;
239
+ }
240
+ if (options?.domain) {
241
+ filters.push('s.domain = $filterDomain');
242
+ params.filterDomain = options.domain;
243
+ }
244
+ if (options?.bloomLevel) {
245
+ filters.push('s.bloomLevel = $filterBloomLevel');
246
+ params.filterBloomLevel = options.bloomLevel;
247
+ }
248
+ const filterClause = filters.length > 0 ? `AND ${filters.join(' AND ')}` : '';
249
+ // Use Neo4j vector index if available, otherwise fallback to brute force
250
+ const hasIndex = await this.hasVectorIndex();
251
+ let query;
252
+ if (hasIndex) {
253
+ // Use vector index
254
+ query = `
255
+ CALL db.index.vector.queryNodes($indexName, $limit, $embedding)
256
+ YIELD node as s, score
257
+ WHERE score >= $minScore ${filterClause}
258
+ RETURN s {.*} as skill, score
259
+ ORDER BY score DESC
260
+ LIMIT $limit
261
+ `;
262
+ params.indexName = this.vectorIndexName;
263
+ }
264
+ else {
265
+ // Brute force cosine similarity
266
+ query = `
267
+ MATCH (s:Skill)
268
+ WHERE s.embedding IS NOT NULL ${filterClause}
269
+ WITH s, gds.similarity.cosine(s.embedding, $embedding) as score
270
+ WHERE score >= $minScore
271
+ RETURN s {.*} as skill, score
272
+ ORDER BY score DESC
273
+ LIMIT $limit
274
+ `;
275
+ }
276
+ const result = await session.run(query, params);
277
+ return result.records.map((record) => {
278
+ const data = record.get('skill');
279
+ const skill = this.recordToSkill(data);
280
+ return {
281
+ skill,
282
+ score: record.get('score'),
283
+ metric,
284
+ };
285
+ });
286
+ }
287
+ finally {
288
+ await session.close();
289
+ }
290
+ }
291
+ async findSimilarSkills(skillId, options) {
292
+ const skill = await this.getSkillWithEmbedding(skillId);
293
+ if (!skill || !skill.embedding) {
294
+ throw new Error(`Skill ${skillId} not found or has no embedding`);
295
+ }
296
+ // Search excluding the source skill
297
+ const results = await this.searchByEmbedding(skill.embedding, {
298
+ ...options,
299
+ limit: (options?.limit ?? exports.GRAPHRAG_DEFAULTS.searchLimit) + 1,
300
+ });
301
+ return results.filter((r) => r.skill.id !== skillId);
302
+ }
303
+ // ─────────────────────────────────────────────────────────────────────────────
304
+ // GraphRAG Operations
305
+ // ─────────────────────────────────────────────────────────────────────────────
306
+ async searchWithGraphContext(query, options) {
307
+ const vectorResults = await this.searchByVector(query, options);
308
+ const graphDepth = options?.graphDepth ?? exports.GRAPHRAG_DEFAULTS.graphDepth;
309
+ const vectorWeight = options?.vectorWeight ?? exports.GRAPHRAG_DEFAULTS.vectorWeight;
310
+ const results = [];
311
+ for (const vectorResult of vectorResults) {
312
+ const skillId = vectorResult.skill.id;
313
+ // Get graph context
314
+ const [prerequisites, dependents] = await Promise.all([
315
+ options?.includePrerequisites !== false
316
+ ? this.getPrerequisitesOf(skillId)
317
+ : Promise.resolve([]),
318
+ options?.includeDependents !== false
319
+ ? this.getDependentsOf(skillId)
320
+ : Promise.resolve([]),
321
+ ]);
322
+ // Get related skills via graph traversal
323
+ let relatedSkills = [];
324
+ if (options?.includeRelated !== false) {
325
+ const subgraph = await this.getSubgraph(skillId, graphDepth);
326
+ relatedSkills = subgraph.nodes.filter((n) => n.id !== skillId &&
327
+ !prerequisites.some((p) => p.id === n.id) &&
328
+ !dependents.some((d) => d.id === n.id));
329
+ }
330
+ // Calculate graph relevance based on connectivity
331
+ const totalConnections = prerequisites.length + dependents.length + relatedSkills.length;
332
+ const graphRelevance = Math.min(totalConnections / 10, 1); // Normalize to 0-1
333
+ // Calculate combined score
334
+ const graphWeight = 1 - vectorWeight;
335
+ const combinedScore = vectorResult.score * vectorWeight + graphRelevance * graphWeight;
336
+ results.push({
337
+ ...vectorResult,
338
+ prerequisites,
339
+ dependents,
340
+ relatedSkills,
341
+ graphRelevance,
342
+ combinedScore,
343
+ });
344
+ }
345
+ // Sort by combined score
346
+ return results.sort((a, b) => b.combinedScore - a.combinedScore);
347
+ }
348
+ async buildRAGContext(query, options) {
349
+ const results = await this.searchWithGraphContext(query, options);
350
+ // Collect all unique skills
351
+ const allPrereqs = new Map();
352
+ const allDeps = new Map();
353
+ const allRelated = new Map();
354
+ for (const result of results) {
355
+ for (const prereq of result.prerequisites) {
356
+ allPrereqs.set(prereq.id, prereq);
357
+ }
358
+ for (const dep of result.dependents) {
359
+ allDeps.set(dep.id, dep);
360
+ }
361
+ for (const rel of result.relatedSkills) {
362
+ allRelated.set(rel.id, rel);
363
+ }
364
+ }
365
+ // Get edges between context skills
366
+ const skillIds = [
367
+ ...results.map((r) => r.skill.id),
368
+ ...Array.from(allPrereqs.keys()),
369
+ ...Array.from(allDeps.keys()),
370
+ ...Array.from(allRelated.keys()),
371
+ ];
372
+ const edges = await this.findPrerequisites({});
373
+ const contextEdges = edges.filter((e) => skillIds.includes(e.sourceId) &&
374
+ skillIds.includes(e.targetId));
375
+ // Build formatted context string for LLM
376
+ const formattedContext = this.formatContextForLLM(results, contextEdges);
377
+ return {
378
+ primaryMatches: results.map((r) => ({
379
+ skill: r.skill,
380
+ score: r.score,
381
+ metric: r.metric,
382
+ })),
383
+ prerequisites: Array.from(allPrereqs.values()),
384
+ dependents: Array.from(allDeps.values()),
385
+ related: Array.from(allRelated.values()),
386
+ edges: contextEdges,
387
+ formattedContext,
388
+ };
389
+ }
390
+ formatContextForLLM(results, edges) {
391
+ const lines = ['## Relevant Skills'];
392
+ for (const result of results) {
393
+ lines.push(`\n### ${result.skill.name}`);
394
+ lines.push(`- **Description**: ${result.skill.description}`);
395
+ lines.push(`- **Bloom Level**: ${result.skill.bloomLevel}`);
396
+ lines.push(`- **Difficulty**: ${(result.skill.difficulty * 100).toFixed(0)}%`);
397
+ lines.push(`- **Relevance Score**: ${(result.combinedScore * 100).toFixed(1)}%`);
398
+ if (result.prerequisites.length > 0) {
399
+ lines.push(`- **Prerequisites**: ${result.prerequisites.map((p) => p.name).join(', ')}`);
400
+ }
401
+ if (result.dependents.length > 0) {
402
+ lines.push(`- **Leads to**: ${result.dependents.map((d) => d.name).join(', ')}`);
403
+ }
404
+ }
405
+ if (edges.length > 0) {
406
+ lines.push('\n## Prerequisite Relationships');
407
+ for (const edge of edges.slice(0, 20)) {
408
+ const source = results.find((r) => r.skill.id === edge.sourceId)?.skill;
409
+ const target = results.find((r) => r.skill.id === edge.targetId)?.skill;
410
+ if (source && target) {
411
+ lines.push(`- ${source.name} → ${target.name} (${edge.type}, strength: ${edge.strength})`);
412
+ }
413
+ }
414
+ }
415
+ return lines.join('\n');
416
+ }
417
+ async generateLearningPathRAG(request) {
418
+ // Search for skills matching the goal
419
+ const searchResults = await this.searchWithGraphContext(request.goal, {
420
+ limit: 10,
421
+ includePrerequisites: true,
422
+ includeDependents: true,
423
+ includeRelated: true,
424
+ });
425
+ if (searchResults.length === 0) {
426
+ return {
427
+ path: [],
428
+ edges: [],
429
+ estimatedMinutes: 0,
430
+ reasoning: 'No matching skills found for the learning goal.',
431
+ };
432
+ }
433
+ // Build learning path using topological sort
434
+ const targetSkill = searchResults[0].skill;
435
+ const allPrereqs = new Map();
436
+ const skillOrder = [];
437
+ // Recursively gather prerequisites
438
+ const gatherPrereqs = async (skillId) => {
439
+ const prereqs = await this.getPrerequisitesOf(skillId);
440
+ for (const prereq of prereqs) {
441
+ if (!allPrereqs.has(prereq.id)) {
442
+ allPrereqs.set(prereq.id, prereq);
443
+ await gatherPrereqs(prereq.id);
444
+ }
445
+ }
446
+ };
447
+ await gatherPrereqs(targetSkill.id);
448
+ // Filter by mastery if provided
449
+ let unmastered = Array.from(allPrereqs.values());
450
+ if (request.currentMastery) {
451
+ unmastered = unmastered.filter((skill) => {
452
+ const mastery = request.currentMastery.get(skill.id);
453
+ return mastery === undefined || mastery < skill.masteryThreshold;
454
+ });
455
+ }
456
+ // Sort by difficulty (simpler topological ordering)
457
+ unmastered.sort((a, b) => a.difficulty - b.difficulty);
458
+ // Apply preferences
459
+ if (request.preferences?.style === 'practical') {
460
+ unmastered.sort((a, b) => (a.bloomLevel >= 'apply' ? -1 : 1) - (b.bloomLevel >= 'apply' ? -1 : 1));
461
+ }
462
+ else if (request.preferences?.style === 'theoretical') {
463
+ unmastered.sort((a, b) => (a.bloomLevel <= 'understand' ? -1 : 1) -
464
+ (b.bloomLevel <= 'understand' ? -1 : 1));
465
+ }
466
+ // Limit path length
467
+ const maxSteps = request.maxSteps ?? 20;
468
+ skillOrder.push(...unmastered.slice(0, maxSteps - 1), targetSkill);
469
+ // Get edges for the path
470
+ const pathIds = skillOrder.map((s) => s.id);
471
+ const allEdges = await this.findPrerequisites({});
472
+ const pathEdges = allEdges.filter((e) => pathIds.includes(e.sourceId) &&
473
+ pathIds.includes(e.targetId));
474
+ // Calculate estimated time
475
+ const estimatedMinutes = skillOrder.reduce((sum, s) => sum + s.estimatedMinutes, 0);
476
+ // Generate reasoning
477
+ const reasoning = [
478
+ `Found "${targetSkill.name}" as the best match for your goal.`,
479
+ unmastered.length > 0
480
+ ? `Identified ${unmastered.length} prerequisite skills to learn first.`
481
+ : 'No prerequisites needed.',
482
+ `Total learning path: ${skillOrder.length} skills, approximately ${Math.round(estimatedMinutes / 60)} hours.`,
483
+ ].join(' ');
484
+ return {
485
+ path: skillOrder,
486
+ edges: pathEdges,
487
+ estimatedMinutes,
488
+ reasoning,
489
+ };
490
+ }
491
+ // ─────────────────────────────────────────────────────────────────────────────
492
+ // Vector Index Management
493
+ // ─────────────────────────────────────────────────────────────────────────────
494
+ async createVectorIndex(options) {
495
+ if (!this.isConnected()) {
496
+ throw new errors_js_1.ConnectionError('Not connected to Neo4j');
497
+ }
498
+ const dimensions = options?.dimensions ??
499
+ this.vectorIndexDimensions ??
500
+ this.embeddingAdapter?.dimensions ??
501
+ 1536;
502
+ const metric = options?.metric ?? exports.GRAPHRAG_DEFAULTS.metric;
503
+ const similarityFunction = metric === 'cosine' ? 'cosine' : 'euclidean';
504
+ const session = this.getSession();
505
+ try {
506
+ // Create vector index using Neo4j 5.x syntax
507
+ await session.run(`
508
+ CREATE VECTOR INDEX ${this.vectorIndexName} IF NOT EXISTS
509
+ FOR (s:Skill)
510
+ ON (s.embedding)
511
+ OPTIONS {
512
+ indexConfig: {
513
+ \`vector.dimensions\`: $dimensions,
514
+ \`vector.similarity_function\`: $similarityFunction
515
+ }
516
+ }
517
+ `, { dimensions, similarityFunction });
518
+ this.vectorIndexDimensions = dimensions;
519
+ }
520
+ finally {
521
+ await session.close();
522
+ }
523
+ }
524
+ async dropVectorIndex() {
525
+ if (!this.isConnected()) {
526
+ throw new errors_js_1.ConnectionError('Not connected to Neo4j');
527
+ }
528
+ const session = this.getSession();
529
+ try {
530
+ await session.run(`DROP INDEX ${this.vectorIndexName} IF EXISTS`);
531
+ this.vectorIndexDimensions = null;
532
+ }
533
+ finally {
534
+ await session.close();
535
+ }
536
+ }
537
+ async hasVectorIndex() {
538
+ if (!this.isConnected()) {
539
+ return false;
540
+ }
541
+ const session = this.getSession();
542
+ try {
543
+ const result = await session.run(`
544
+ SHOW INDEXES
545
+ WHERE name = $indexName
546
+ RETURN count(*) as count
547
+ `, { indexName: this.vectorIndexName });
548
+ const record = result.records[0];
549
+ const count = record?.get('count');
550
+ if (!count)
551
+ return false;
552
+ return typeof count === 'number' ? count > 0 : count.low > 0;
553
+ }
554
+ finally {
555
+ await session.close();
556
+ }
557
+ }
558
+ async getVectorIndexStats() {
559
+ const exists = await this.hasVectorIndex();
560
+ const stats = await this.getStats();
561
+ // Count skills with embeddings
562
+ const session = this.getSession();
563
+ let indexedCount = 0;
564
+ try {
565
+ const result = await session.run(`
566
+ MATCH (s:Skill)
567
+ WHERE s.embedding IS NOT NULL
568
+ RETURN count(s) as count
569
+ `);
570
+ const record = result.records[0];
571
+ indexedCount = record
572
+ ? typeof record.get('count') === 'number'
573
+ ? record.get('count')
574
+ : record.get('count').low
575
+ : 0;
576
+ }
577
+ finally {
578
+ await session.close();
579
+ }
580
+ return {
581
+ exists,
582
+ dimensions: this.vectorIndexDimensions ?? undefined,
583
+ metric: exists ? exports.GRAPHRAG_DEFAULTS.metric : undefined,
584
+ indexedCount,
585
+ totalSkills: stats.nodeCount,
586
+ };
587
+ }
588
+ }
589
+ exports.Neo4jGraphRAGStorage = Neo4jGraphRAGStorage;
590
+ /**
591
+ * Create a Neo4j GraphRAG storage instance
592
+ */
593
+ function createNeo4jGraphRAGStorage() {
594
+ return new Neo4jGraphRAGStorage();
595
+ }
596
+ //# sourceMappingURL=neo4j-graphrag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"neo4j-graphrag.js","sourceRoot":"","sources":["../../../src/storage/neo4j-graphrag.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ /**
3
+ * GraphRAG Types
4
+ *
5
+ * Types for Graph-based Retrieval-Augmented Generation.
6
+ * Combines vector embeddings with graph traversal for semantic search.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ //# sourceMappingURL=graphrag.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphrag.js","sourceRoot":"","sources":["../../../src/types/graphrag.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG"}