diff --git a/.github/workflows/pr-check.yml b/.github/workflows/pr-check.yml index f72af0f..00d2ba6 100644 --- a/.github/workflows/pr-check.yml +++ b/.github/workflows/pr-check.yml @@ -3,6 +3,11 @@ name: PR Check on: pull_request: types: [opened, synchronize, reopened, edited] + pull_request_target: + types: [opened, synchronize, reopened, edited] + +permissions: + pull-requests: read jobs: pr-validation: diff --git a/README.md b/README.md index 02002ad..e0beffa 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ [![Benchmark](https://github.com/mithun50/CortexFlow/actions/workflows/benchmark.yml/badge.svg)](https://github.com/mithun50/CortexFlow/actions/workflows/benchmark.yml) [![Token Savings](https://img.shields.io/badge/token%20savings-56%25-brightgreen)](benchmarks/results/BENCHMARK.md) [![Compression](https://img.shields.io/badge/compression-5.2x-green)](benchmarks/results/BENCHMARK.md) -[![Memory](https://img.shields.io/badge/memory-116MB-green)](benchmarks/results/BENCHMARK.md) +[![Memory](https://img.shields.io/badge/memory-121MB-green)](benchmarks/results/BENCHMARK.md) [![πŸ“– Documentation](https://img.shields.io/badge/πŸ“–_Docs-Preview-2ea44f)](https://mithun50.github.io/CortexFlow/) @@ -27,6 +27,7 @@
Performance Metrics (click to expand) +> _Auto-updated by CI_ > _Last updated: 2025-12-28_ ### Summary @@ -35,8 +36,8 @@ | --------------------- | ---------- | | Avg Token Savings | **56%** | | Avg Compression Ratio | **5.2x** | -| Peak Memory | **116 MB** | -| Avg Ops/Second | **95.4K** | +| Peak Memory | **121 MB** | +| Avg Ops/Second | **56.8K** | [View Full Benchmark Report](benchmarks/results/BENCHMARK.md) @@ -184,6 +185,130 @@ Every time you switch between AI assistants, you lose context: | **AI Prompt Templates** | Pre-built prompts for planning, debugging, review | βœ… Available | | **Multi-AI Export** | Export context for Claude, Gemini, ChatGPT, Cursor | βœ… Available | | **Productivity Dashboard** | Daily digest, streaks, productivity stats | βœ… Available | +| **RAG (Semantic Search)** | Index documents, vector search, context retrieval | βœ… Available | + +## RAG (Retrieval-Augmented Generation) + +CortexFlow includes a powerful RAG module for semantic search and document retrieval. Index project context or custom documents and retrieve relevant information using vector or keyword search. + +### RAG Features + +| Feature | Description | +| --------------------------- | ------------------------------------------------------- | +| **Document Indexing** | Index documents with automatic chunking | +| **Vector Search** | Semantic similarity search using embeddings | +| **Keyword Search** | Full-text search using SQLite FTS5 | +| **Hybrid Search** | Combined vector (70%) + keyword (30%) for best results | +| **Configurable Embeddings** | Local (transformers.js) or API (OpenAI, Voyage, Cohere) | +| **Chunking Strategies** | Paragraph, sentence, fixed-size, or semantic chunking | +| **Project Context RAG** | Automatically index project tasks, notes, and decisions | + +### RAG MCP Tools + +| Tool | Description | +| --------------------- | ------------------------------------------------ | +| `rag_index_document` | Index a custom document with optional metadata | +| `rag_index_project` | Index entire project context for semantic search | +| `rag_search` | Search with vector, keyword, or hybrid mode | +| `rag_query_context` | Get formatted context for AI prompts | +| `rag_list_documents` | List all indexed documents | +| `rag_delete_document` | Remove a document from the index | +| `rag_get_stats` | Get RAG statistics (docs, chunks, config) | +| `rag_configure` | Configure embedding provider and chunking | + +### RAG HTTP Endpoints + +```bash +# Index a document +curl -X POST http://localhost:3210/api/rag/index-document \ + -H "Content-Type: application/json" \ + -d '{"title":"API Guide","content":"Your document content here..."}' + +# Index project context +curl -X POST http://localhost:3210/api/rag/index-project + +# Search documents +curl "http://localhost:3210/api/rag/search?query=authentication&type=hybrid&limit=5" + +# Get context for prompts +curl "http://localhost:3210/api/rag/context?query=how%20to%20implement%20auth" + +# List indexed documents +curl http://localhost:3210/api/rag/documents + +# Get RAG stats +curl http://localhost:3210/api/rag/stats + +# Configure RAG +curl -X PUT http://localhost:3210/api/rag/config \ + -H "Content-Type: application/json" \ + -d '{"embedding":{"provider":"openai"},"search":{"topK":10}}' +``` + +### Embedding Providers + +| Provider | Model | Dimensions | API Key Required | +| -------- | ----------------------- | ---------- | ---------------- | +| `local` | Xenova/all-MiniLM-L6-v2 | 384 | No | +| `openai` | text-embedding-3-small | 1536 | Yes | +| `voyage` | voyage-2 | 1024 | Yes | +| `cohere` | embed-english-v3.0 | 1024 | Yes | +| `custom` | Any endpoint | Custom | Depends | + +### Chunking Strategies + +| Strategy | Description | Best For | +| ----------- | ----------------------------------------- | -------------------- | +| `paragraph` | Split on double newlines | General text | +| `sentence` | Split on sentence boundaries | Q&A, detailed search | +| `fixed` | Fixed character size with overlap | Uniform chunks | +| `semantic` | Split on markdown headers and code blocks | Technical docs | + +### RAG Example Workflow + +```bash +# 1. Start the server +cortexflow --http + +# 2. Index your project documentation +curl -X POST http://localhost:3210/api/rag/index-document \ + -d '{"title":"Architecture","content":"# System Architecture\n\nOur API uses..."}' + +# 3. Index project context (tasks, notes, decisions) +curl -X POST http://localhost:3210/api/rag/index-project + +# 4. Query for relevant context +curl "http://localhost:3210/api/rag/context?query=authentication%20flow" + +# Response includes relevant chunks formatted for AI prompts +``` + +### RAG Configuration + +```json +{ + "embedding": { + "provider": "local", + "model": "Xenova/all-MiniLM-L6-v2", + "dimensions": 384, + "batchSize": 10 + }, + "chunking": { + "strategy": "semantic", + "chunkSize": 500, + "chunkOverlap": 50, + "minChunkSize": 50, + "maxChunkSize": 2000 + }, + "search": { + "topK": 5, + "minScore": 0.5, + "hybridAlpha": 0.7 + } +} +``` + +> **Note:** RAG requires `better-sqlite3` native module. It will gracefully degrade on platforms without native module support. ## Alternatives & Comparison @@ -199,7 +324,8 @@ CortexFlow isn't the only solution. Here's how it compares: | **Note Categories** | βœ… 4 types | ❌ | ❌ | ❌ | | **Storage** | JSON files | JSON files | SQLite | SQLite | | **Setup Complexity** | Simple | Simple | Moderate | Moderate | -| **Primary Focus** | Task handoff | Doc handoff | Memory/RAG | Code context | +| **Primary Focus** | Task handoff + RAG | Doc handoff | Memory/RAG | Code context | +| **RAG/Embeddings** | βœ… Full RAG | ❌ | βœ… Memory focus | ❌ | ### When to Use CortexFlow @@ -208,12 +334,12 @@ CortexFlow isn't the only solution. Here's how it compares: - HTTP API for ChatGPT/web clients - Structured task management with priorities - Agent role tracking (who did what) +- RAG with semantic and keyword search +- Configurable embedding providers (local or API) - Simple JSON storage you can inspect -- Minimal dependencies ❌ **Consider alternatives if you need:** -- Semantic memory/RAG ([OpenMemory](https://mem0.ai/blog/introducing-openmemory-mcp)) - Deep code understanding ([Context Sync](https://www.producthunt.com/products/context-sync-local-mcp-server)) - Complex handoff documents ([mcp-handoff-server](https://github.com/dazeb/mcp-handoff-server)) @@ -755,11 +881,26 @@ interface AgentNote { ``` cortexflow/ β”œβ”€β”€ src/ -β”‚ β”œβ”€β”€ models.ts # Data types and schemas -β”‚ β”œβ”€β”€ storage.ts # JSON file persistence -β”‚ β”œβ”€β”€ server.ts # MCP server (stdio) -β”‚ β”œβ”€β”€ http-server.ts # HTTP REST API -β”‚ └── index.ts # Entry point +β”‚ β”œβ”€β”€ models.ts # Data types and schemas +β”‚ β”œβ”€β”€ storage.ts # JSON file persistence +β”‚ β”œβ”€β”€ server.ts # MCP server (stdio) +β”‚ β”œβ”€β”€ http-server.ts # HTTP REST API +β”‚ β”œβ”€β”€ intelligent-features.ts # Smart queue, health score, compression +β”‚ β”œβ”€β”€ productivity-features.ts # Personal todos, time tracking, exports +β”‚ β”œβ”€β”€ index.ts # Entry point +β”‚ └── rag/ # RAG module +β”‚ β”œβ”€β”€ rag-storage.ts # SQLite vector storage +β”‚ β”œβ”€β”€ rag-features.ts # High-level RAG operations +β”‚ β”œβ”€β”€ embeddings.ts # Configurable embedding providers +β”‚ β”œβ”€β”€ chunking.ts # Document chunking strategies +β”‚ └── index.ts # RAG module exports +β”œβ”€β”€ tests/ # Test files +β”‚ β”œβ”€β”€ rag.test.ts # RAG tests +β”‚ β”œβ”€β”€ chunking.test.ts # Chunking tests +β”‚ β”œβ”€β”€ embeddings.test.ts # Embedding tests +β”‚ └── ... +β”œβ”€β”€ benchmarks/ # Performance benchmarks +β”‚ └── index.ts # Benchmark suite β”œβ”€β”€ config/ β”‚ β”œβ”€β”€ claude-code/ # Claude Code config β”‚ β”œβ”€β”€ claude-desktop/ # Claude Desktop config diff --git a/benchmarks/index.ts b/benchmarks/index.ts index e41d731..4a65b65 100644 --- a/benchmarks/index.ts +++ b/benchmarks/index.ts @@ -1078,6 +1078,223 @@ ${report.memoryResults.map((r) => `| ${r.name} | ${formatBytes(r.heapUsedDelta)} console.log(`\nResults saved to: ${outputDir}/`); } +// ============================================================================ +// RAG Benchmarks +// ============================================================================ + +async function runRAGBenchmarks(): Promise<{ + results: BenchmarkResult[]; + efficiency: EfficiencyResult[]; +}> { + const results: BenchmarkResult[] = []; + const efficiency: EfficiencyResult[] = []; + + // Import chunking module (doesn't require SQLite) + const chunking = await import('../dist/rag/chunking.js'); + + // Test text for chunking benchmarks + const testTexts = { + small: 'Hello world. This is a test. Multiple sentences here.', + medium: `# Introduction + +This is a medium-sized document with multiple paragraphs. + +## Section One + +Content for section one with some detailed information about the topic. +This paragraph continues with more details and examples. + +## Section Two + +Another section with different content. This helps test semantic chunking. +More text follows to fill out the document. + +## Conclusion + +Final thoughts and summary of the document.`, + large: `# Comprehensive Technical Documentation + +## Overview + +This is a large document used for benchmarking the RAG chunking system. +It contains multiple sections, code examples, and varied content types. + +${Array.from({ length: 20 }, (_, i) => ` +### Section ${i + 1} + +This is section ${i + 1} of the documentation. It contains important information +about feature ${i + 1} and how it integrates with the rest of the system. + +Key points for this section: +- Point one with detailed explanation +- Point two with examples +- Point three with considerations + +\`\`\`typescript +function feature${i + 1}() { + console.log('Implementing feature ${i + 1}'); + return { success: true, id: ${i + 1} }; +} +\`\`\` + +Additional notes and considerations for implementation follow here. +`).join('\n')} + +## Final Summary + +This concludes the comprehensive documentation.`, + }; + + const chunkConfigs = [ + { name: 'Paragraph', strategy: 'paragraph' as const }, + { name: 'Sentence', strategy: 'sentence' as const }, + { name: 'Fixed', strategy: 'fixed' as const }, + { name: 'Semantic', strategy: 'semantic' as const }, + ]; + + // Chunking benchmarks for each strategy + for (const config of chunkConfigs) { + const chunkConfig = { + strategy: config.strategy, + chunkSize: 500, + chunkOverlap: 50, + minChunkSize: 50, + maxChunkSize: 2000, + }; + + // Small text + results.push( + await runBenchmark( + `Chunk Small (${config.name})`, + 'RAG Chunking', + () => { + chunking.chunkDocument(testTexts.small, chunkConfig); + }, + 1000 + ) + ); + + // Medium text + results.push( + await runBenchmark( + `Chunk Medium (${config.name})`, + 'RAG Chunking', + () => { + chunking.chunkDocument(testTexts.medium, chunkConfig); + }, + 500 + ) + ); + + // Large text + results.push( + await runBenchmark( + `Chunk Large (${config.name})`, + 'RAG Chunking', + () => { + chunking.chunkDocument(testTexts.large, chunkConfig); + }, + 200 + ) + ); + } + + // Token estimation benchmarks + results.push( + await runBenchmark( + 'Estimate Tokens (Small)', + 'RAG Token Estimation', + () => { + chunking.estimateTokenCount(testTexts.small); + }, + 5000 + ) + ); + + results.push( + await runBenchmark( + 'Estimate Tokens (Large)', + 'RAG Token Estimation', + () => { + chunking.estimateTokenCount(testTexts.large); + }, + 1000 + ) + ); + + // Chunk merging benchmarks + const testChunks = Array.from({ length: 50 }, (_, i) => ({ + content: `Chunk ${i} with some content`, + startOffset: i * 30, + endOffset: (i + 1) * 30, + index: i, + })); + + results.push( + await runBenchmark( + 'Merge Small Chunks (50)', + 'RAG Chunk Processing', + () => { + chunking.mergeSmallChunks(testChunks, 100); + }, + 1000 + ) + ); + + // Split oversized chunk benchmark + const oversizedChunk = { + content: 'A'.repeat(5000), + startOffset: 0, + endOffset: 5000, + index: 0, + }; + + results.push( + await runBenchmark( + 'Split Oversized Chunk', + 'RAG Chunk Processing', + () => { + chunking.splitOversizedChunk(oversizedChunk, 500); + }, + 1000 + ) + ); + + // Efficiency metrics for chunking + for (const config of chunkConfigs) { + const chunkConfig = { + strategy: config.strategy, + chunkSize: 500, + chunkOverlap: 50, + minChunkSize: 50, + maxChunkSize: 2000, + }; + + const chunks = chunking.chunkDocument(testTexts.large, chunkConfig); + const originalTokens = chunking.estimateTokenCount(testTexts.large); + const chunkedTokens = chunks.reduce( + (sum, c) => sum + chunking.estimateTokenCount(c.content), + 0 + ); + + efficiency.push({ + name: `${config.name} Chunking Overhead`, + category: 'RAG Efficiency', + originalSize: originalTokens, + compressedSize: chunkedTokens, + savings: originalTokens - chunkedTokens, + savingsPercent: ((originalTokens - chunkedTokens) / originalTokens) * 100, + metadata: { + chunkCount: chunks.length, + avgChunkSize: Math.round(chunkedTokens / chunks.length), + strategy: config.strategy, + }, + }); + } + + return { results, efficiency }; +} + // ============================================================================ // Main // ============================================================================ @@ -1097,6 +1314,7 @@ async function main(): Promise { const runTokens = args.includes('--tokens') || runAll; const runHandoff = args.includes('--handoff') || runAll; const runMemory = args.includes('--memory') || runAll; + const runRAG = args.includes('--rag') || runAll; // Storage benchmarks if (runStorage) { @@ -1140,6 +1358,15 @@ async function main(): Promise { console.log(` βœ“ Completed ${memoryResults.length} memory benchmarks`); } + // RAG benchmarks + if (runRAG) { + console.log('πŸ” Running RAG Benchmarks...'); + const { results, efficiency } = await runRAGBenchmarks(); + allResults.push(...results); + allEfficiency.push(...efficiency); + console.log(` βœ“ Completed ${results.length} RAG benchmarks`); + } + // HTTP benchmarks if (runHttp) { console.log('🌐 Running HTTP API Benchmarks...'); diff --git a/dist/advanced-storage.d.ts b/dist/advanced-storage.d.ts index 1c4fa25..f71bf0b 100644 --- a/dist/advanced-storage.d.ts +++ b/dist/advanced-storage.d.ts @@ -5,6 +5,7 @@ * Extends the base storage with advanced features. */ import { Webhook, ProjectSnapshot, ProjectTemplate, AuditEntry, WebhookEvent, EventType } from './models.js'; +import { RAGStorage } from './rag/rag-storage.js'; export interface WebhookStorage { listWebhooks(): Promise; getWebhook(id: string): Promise; @@ -50,6 +51,7 @@ export interface AdvancedStorage { templates: TemplateStorage; audit: AuditStorage; events: EventDispatcher; + rag: RAGStorage; } export declare function getAdvancedStorage(): Promise; //# sourceMappingURL=advanced-storage.d.ts.map \ No newline at end of file diff --git a/dist/advanced-storage.d.ts.map b/dist/advanced-storage.d.ts.map index eab06ba..bb9435c 100644 --- a/dist/advanced-storage.d.ts.map +++ b/dist/advanced-storage.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"advanced-storage.d.ts","sourceRoot":"","sources":["../src/advanced-storage.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"advanced-storage.d.ts","sourceRoot":"","sources":["../src/advanced-storage.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,EACL,OAAO,EACP,eAAe,EACf,eAAe,EACf,UAAU,EACV,YAAY,EACZ,SAAS,EAGV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAiB,MAAM,sBAAsB,CAAC;AA4BjE,MAAM,WAAW,cAAc;IAC7B,YAAY,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAChD,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAgBD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,cAAc,CAAC,CAmDpE;AAMD,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC9D,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IACzD,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;CACvE;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,eAAe,CAAC,CA8DtE;AAMD,MAAM,WAAW,eAAe;IAC9B,aAAa,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;IAC5C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IACzD,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3C;AAgBD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,eAAe,CAAC,CA2DtE;AAMD,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,OAAO,CAAC,EAAE;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,YAAY,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD;AAkBD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,YAAY,CAAC,CA2ChE;AAMD,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7F;AAED,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,eAAe,CAAC,CAkDtE;AAMD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,eAAe,CAAC;IAC3B,SAAS,EAAE,eAAe,CAAC;IAC3B,KAAK,EAAE,YAAY,CAAC;IACpB,MAAM,EAAE,eAAe,CAAC;IACxB,GAAG,EAAE,UAAU,CAAC;CACjB;AAID,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,eAAe,CAAC,CAYnE"} \ No newline at end of file diff --git a/dist/advanced-storage.js b/dist/advanced-storage.js index 1a5fe98..c6adc33 100644 --- a/dist/advanced-storage.js +++ b/dist/advanced-storage.js @@ -7,6 +7,7 @@ import { readFile, writeFile, readdir, rm, mkdir } from 'fs/promises'; import { join } from 'path'; import { BUILT_IN_TEMPLATES, createWebhookEvent, } from './models.js'; +import { getRAGStorage } from './rag/rag-storage.js'; // ============================================================================ // Storage Paths // ============================================================================ @@ -324,6 +325,7 @@ export async function getAdvancedStorage() { templates: await createTemplateStorage(), audit: await createAuditStorage(), events: await createEventDispatcher(), + rag: await getRAGStorage(), }; } return advancedStorageInstance; diff --git a/dist/advanced-storage.js.map b/dist/advanced-storage.js.map index b233c49..6873dff 100644 --- a/dist/advanced-storage.js.map +++ b/dist/advanced-storage.js.map @@ -1 +1 @@ -{"version":3,"file":"advanced-storage.js","sourceRoot":"","sources":["../src/advanced-storage.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"advanced-storage.js","sourceRoot":"","sources":["../src/advanced-storage.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/http-server.d.ts.map b/dist/http-server.d.ts.map index 758674c..543575c 100644 --- a/dist/http-server.d.ts.map +++ b/dist/http-server.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAo/CH,wBAAgB,aAAa,IAAI,IAAI,CAuDpC"} \ No newline at end of file +{"version":3,"file":"http-server.d.ts","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA6vDH,wBAAgB,aAAa,IAAI,IAAI,CAmEpC"} \ No newline at end of file diff --git a/dist/http-server.js b/dist/http-server.js index 6504b66..0a91a75 100644 --- a/dist/http-server.js +++ b/dist/http-server.js @@ -15,6 +15,8 @@ import { getAdvancedStorage } from './advanced-storage.js'; import { analyzeCriticalPath, getSmartPriorityQueue, compressContext, getCompressionStats, calculateHealthScore, executeBatchOperations, generateTaskSuggestions, } from './intelligent-features.js'; import { addPersonalTodo, listPersonalTodos, completeTodo, listDids, setDailyGoals, setWeeklyGoals, getGoals, remember, recall, listMemories, forget, startTimeTracking, stopTimeTracking, getTimeStats, listPromptTemplates, generatePromptFromContext, generateClaudeMd, saveClaudeMd, getDailyDigest, getProductivityStats, } from './productivity-features.js'; import { TaskStatus, AgentRole, createProject, addTask, addNote, updateTaskStatus, updateTaskNote, setPhase, getTask, getPendingTasks, getProjectSummary, getProjectAnalytics, exportToMarkdown, cloneProject, createWebhook, createSnapshot, createProjectFromTemplate, restoreFromSnapshot, } from './models.js'; +import { indexDocument, indexProjectContext, search, buildContextFromSearch, deleteDocument, listDocuments, getRAGStats, getRAGConfig, updateRAGConfig, } from './rag/index.js'; +import { resetEmbeddingProvider } from './rag/embeddings.js'; const PORT = parseInt(process.env.CORTEXFLOW_PORT ?? '3210', 10); // ============================================================================ // HTTP Utilities @@ -964,6 +966,207 @@ async function handleProductivityStats(req, res) { error(res, 'Method not allowed', 405); } // ============================================================================ +// RAG Handlers +// ============================================================================ +async function handleRAGDocuments(req, res) { + const url = new URL(req.url ?? '/', `http://localhost:${PORT}`); + const parts = url.pathname.split('/'); + // DELETE /api/rag/documents/:id + if (parts.length >= 5 && req.method === 'DELETE') { + const documentId = parts[4]; + const deleted = await deleteDocument(documentId); + if (deleted) { + json(res, { success: true, documentId }); + } + else { + error(res, 'Document not found', 404); + } + return; + } + // GET /api/rag/documents - List documents + if (req.method === 'GET') { + const projectId = url.searchParams.get('project_id') ?? undefined; + const sourceType = url.searchParams.get('source_type') ?? undefined; + const limit = parseInt(url.searchParams.get('limit') ?? '50', 10); + const docs = await listDocuments({ projectId, sourceType, limit }); + json(res, { documents: docs, count: docs.length }); + return; + } + error(res, 'Method not allowed', 405); +} +async function handleRAGIndex(req, res) { + const url = new URL(req.url ?? '/', `http://localhost:${PORT}`); + // POST /api/rag/index/document - Index a document + if (url.pathname.endsWith('/document') && req.method === 'POST') { + const body = await parseBody(req); + if (!body.title || !body.content) { + error(res, 'title and content are required', 400); + return; + } + const doc = await indexDocument(body.title, body.content, { + projectId: body.project_id, + sourceType: 'custom_document', + metadata: body.metadata, + }); + json(res, doc, 201); + return; + } + // POST /api/rag/index/project - Index a project + if (url.pathname.endsWith('/project') && req.method === 'POST') { + const body = await parseBody(req); + const projectId = body.project_id; + const storage = await getStorage(); + let project; + if (projectId) { + project = await storage.loadProject(projectId); + } + else { + project = await storage.getActiveProject(); + } + if (!project) { + error(res, 'No project found', 404); + return; + } + const result = await indexProjectContext(project); + json(res, { + project: project.name, + projectId: project.id, + documentsCreated: result.documents.length, + totalChunks: result.totalChunks, + }, 201); + return; + } + error(res, 'Method not allowed', 405); +} +async function handleRAGSearch(req, res) { + const url = new URL(req.url ?? '/', `http://localhost:${PORT}`); + if (req.method === 'GET' || req.method === 'POST') { + let query; + let projectId; + let searchType; + let topK; + let minScore; + if (req.method === 'GET') { + query = url.searchParams.get('query') ?? ''; + projectId = url.searchParams.get('project_id') ?? undefined; + searchType = url.searchParams.get('search_type') ?? undefined; + topK = url.searchParams.get('top_k') + ? parseInt(url.searchParams.get('top_k'), 10) + : undefined; + minScore = url.searchParams.get('min_score') + ? parseFloat(url.searchParams.get('min_score')) + : undefined; + } + else { + const body = await parseBody(req); + query = body.query; + projectId = body.project_id; + searchType = body.search_type; + topK = body.top_k; + minScore = body.min_score; + } + if (!query) { + error(res, 'query is required', 400); + return; + } + const result = await search(query, { + projectId, + searchType, + topK, + minScore, + }); + json(res, result); + return; + } + error(res, 'Method not allowed', 405); +} +async function handleRAGContext(req, res) { + const url = new URL(req.url ?? '/', `http://localhost:${PORT}`); + if (req.method === 'GET' || req.method === 'POST') { + let query; + let projectId; + let maxContextLength; + let includeMetadata; + if (req.method === 'GET') { + query = url.searchParams.get('query') ?? ''; + projectId = url.searchParams.get('project_id') ?? undefined; + maxContextLength = url.searchParams.get('max_context_length') + ? parseInt(url.searchParams.get('max_context_length'), 10) + : undefined; + includeMetadata = url.searchParams.get('include_metadata') !== 'false'; + } + else { + const body = await parseBody(req); + query = body.query; + projectId = body.project_id; + maxContextLength = body.max_context_length; + includeMetadata = body.include_metadata; + } + if (!query) { + error(res, 'query is required', 400); + return; + } + const result = await buildContextFromSearch(query, { + projectId, + maxContextLength, + includeMetadata, + }); + json(res, result); + return; + } + error(res, 'Method not allowed', 405); +} +async function handleRAGStats(req, res) { + if (req.method === 'GET') { + const stats = await getRAGStats(); + json(res, stats); + return; + } + error(res, 'Method not allowed', 405); +} +async function handleRAGConfig(req, res) { + if (req.method === 'GET') { + const config = await getRAGConfig(); + json(res, config); + return; + } + if (req.method === 'PUT' || req.method === 'POST') { + const body = await parseBody(req); + const updates = {}; + if (body.embedding) { + const e = body.embedding; + updates.embedding = { + provider: e.provider, + model: e.model, + apiKey: e.api_key, + apiEndpoint: e.api_endpoint, + }; + resetEmbeddingProvider(); + } + if (body.chunking) { + const c = body.chunking; + updates.chunking = { + strategy: c.strategy, + chunkSize: c.chunk_size, + chunkOverlap: c.chunk_overlap, + }; + } + if (body.search) { + const s = body.search; + updates.search = { + topK: s.top_k, + minScore: s.min_score, + hybridVectorWeight: s.hybrid_vector_weight, + }; + } + await updateRAGConfig(updates); + const config = await getRAGConfig(); + json(res, config); + return; + } + error(res, 'Method not allowed', 405); +} +// ============================================================================ // OpenAPI Spec (for ChatGPT Actions / OpenAI Plugins) // ============================================================================ function getOpenAPISpec() { @@ -1294,6 +1497,24 @@ async function handleRequest(req, res) { else if (url.pathname.startsWith('/api/productivity-stats')) { await handleProductivityStats(req, res); } + else if (url.pathname.startsWith('/api/rag/index')) { + await handleRAGIndex(req, res); + } + else if (url.pathname.startsWith('/api/rag/search')) { + await handleRAGSearch(req, res); + } + else if (url.pathname.startsWith('/api/rag/context')) { + await handleRAGContext(req, res); + } + else if (url.pathname.startsWith('/api/rag/documents')) { + await handleRAGDocuments(req, res); + } + else if (url.pathname.startsWith('/api/rag/stats')) { + await handleRAGStats(req, res); + } + else if (url.pathname.startsWith('/api/rag/config')) { + await handleRAGConfig(req, res); + } else { error(res, 'Not found', 404); } @@ -1359,6 +1580,18 @@ export function runHttpServer() { console.log(' GET /api/export-md - Export for AI (claude/gemini/chatgpt)'); console.log(' GET /api/digest - Get daily digest'); console.log(' GET /api/productivity-stats - Get productivity stats'); + console.log(''); + console.log('RAG (Retrieval-Augmented Generation):'); + console.log(' POST /api/rag/index/document - Index a document'); + console.log(' POST /api/rag/index/project - Index project context'); + console.log(' GET /api/rag/search - Semantic/hybrid search'); + console.log(' POST /api/rag/search - Search with body'); + console.log(' GET /api/rag/context - Get context for prompts'); + console.log(' GET /api/rag/documents - List indexed documents'); + console.log(' DELETE /api/rag/documents/:id- Delete document'); + console.log(' GET /api/rag/stats - Get RAG statistics'); + console.log(' GET /api/rag/config - Get RAG configuration'); + console.log(' PUT /api/rag/config - Update RAG configuration'); }); } //# sourceMappingURL=http-server.js.map \ No newline at end of file diff --git a/dist/http-server.js.map b/dist/http-server.js.map index e16d951..36a9cfb 100644 --- a/dist/http-server.js.map +++ b/dist/http-server.js.map @@ -1 +1 @@ -{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"http-server.js","sourceRoot":"","sources":["../src/http-server.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/models.d.ts b/dist/models.d.ts index 2b45db8..b871289 100644 --- a/dist/models.d.ts +++ b/dist/models.d.ts @@ -214,4 +214,97 @@ export declare function filterAuditLog(entries: AuditEntry[], options: { until?: string; limit?: number; }): AuditEntry[]; +export type RAGSourceType = 'project_context' | 'task' | 'note' | 'custom_document'; +export type EmbeddingProvider = 'local' | 'openai' | 'voyage' | 'cohere' | 'custom'; +export type ChunkingStrategy = 'fixed' | 'sentence' | 'paragraph' | 'semantic'; +export type RAGSearchType = 'vector' | 'keyword' | 'hybrid'; +export interface RAGDocument { + id: string; + projectId: string | null; + sourceType: RAGSourceType; + sourceId: string | null; + title: string; + content: string; + metadata: Record; + chunkCount: number; + createdAt: string; + updatedAt: string; +} +export interface RAGChunk { + id: string; + documentId: string; + content: string; + embedding: number[] | null; + chunkIndex: number; + startOffset: number; + endOffset: number; + metadata: Record; + createdAt: string; +} +export interface RAGSearchResult { + chunk: RAGChunk; + document: RAGDocument; + score: number; + highlights: string[]; +} +export interface RAGQueryResult { + query: string; + results: RAGSearchResult[]; + totalFound: number; + searchTimeMs: number; + embeddingProvider: string; +} +export interface EmbeddingConfig { + provider: EmbeddingProvider; + model: string; + dimensions: number; + apiKey?: string; + apiEndpoint?: string; + batchSize: number; +} +export interface ChunkingConfig { + strategy: ChunkingStrategy; + chunkSize: number; + chunkOverlap: number; + minChunkSize: number; + maxChunkSize: number; +} +export interface RAGSearchConfig { + topK: number; + minScore: number; + rerank: boolean; + hybridVectorWeight: number; +} +export interface RAGIndexingConfig { + autoIndex: boolean; + indexOnCreate: boolean; + batchSize: number; +} +export interface RAGConfig { + embedding: EmbeddingConfig; + chunking: ChunkingConfig; + search: RAGSearchConfig; + indexing: RAGIndexingConfig; +} +export interface RAGStats { + totalDocuments: number; + totalChunks: number; + indexedChunks: number; + projectBreakdown: Record; + embeddingProvider: string; + embeddingDimensions: number; +} +/** + * Deep partial type for RAG configuration updates. + * Allows partial updates to nested configuration objects. + */ +export interface RAGConfigUpdate { + embedding?: Partial; + chunking?: Partial; + search?: Partial; + indexing?: Partial; +} +export declare function createRAGDocument(title: string, content: string, options?: Partial>): RAGDocument; +export declare function createRAGChunk(documentId: string, content: string, chunkIndex: number, options?: Partial>): RAGChunk; +export declare function getDefaultRAGConfig(): RAGConfig; //# sourceMappingURL=models.d.ts.map \ No newline at end of file diff --git a/dist/models.d.ts.map b/dist/models.d.ts.map index f758ad8..b9a3bca 100644 --- a/dist/models.d.ts.map +++ b/dist/models.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,oBAAY,KAAK;IACf,QAAQ,aAAa;IACrB,SAAS,cAAc;IACvB,MAAM,WAAW;IACjB,SAAS,cAAc;CACxB;AAED,oBAAY,UAAU;IACpB,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC3B,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,SAAS,cAAc;CACxB;AAED,oBAAY,SAAS;IACnB,OAAO,YAAY,CAAE,6BAA6B;IAClD,QAAQ,aAAa,CAAE,0BAA0B;IACjD,QAAQ,aAAa,CAAE,yBAAyB;IAChD,MAAM,WAAW,CAAE,gBAAgB;IACnC,UAAU,eAAe,CAAE,sBAAsB;IACjD,QAAQ,aAAa;CACtB;AAGD,oBAAY,SAAS;IACnB,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;IACnC,eAAe,oBAAoB;IACnC,aAAa,kBAAkB;IAC/B,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,cAAc,mBAAmB;IACjC,YAAY,iBAAiB;IAC7B,UAAU,eAAe;IACzB,aAAa,kBAAkB;IAC/B,gBAAgB,qBAAqB;CACtC;AAGD,oBAAY,WAAW;IACrB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,MAAM,WAAW;IACjB,OAAO,YAAY;CACpB;AAMD,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,GAAG,IAAI,CAAC;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;CAC1D;AAED,MAAM,WAAW,cAAc;IAE7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IAGpB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAGhB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAGlB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,SAAS,EAAE,CAAC;IAGnB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAGD,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC,CAAC;IACH,YAAY,EAAE,KAAK,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,SAAS,GAAG,QAAQ,CAAC;CACjC;AAGD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,OAAO,CAAC;QAClB,QAAQ,EAAE,OAAO,CAAC;KACnB,EAAE,CAAC;IACJ,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAGD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAcD,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC,CAAM,GAC5F,IAAI,CAeN;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,SAAS,CAAC,UAAU,CAAa,GAC1C,SAAS,CAQX;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAO,CACd,IAAI,CAAC,cAAc,EAAE,IAAI,GAAG,MAAM,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC,CAC3E,GACL,cAAc,CAehB;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,SAAS,EAAE,EACnB,OAAO,GAAE,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,KAAK,GAAG,QAAQ,GAAG,WAAW,CAAC,CAAM,GAC1E,OAAO,CAWT;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,EAC/B,OAAO,GAAE,OAAO,CACd,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,WAAW,CAAC,CACxE,GACL,eAAe,CAYjB;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,SAAS,GAAG,QAAmB,GACzC,eAAe,CAWjB;AAED,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,EACnB,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,EACpC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,UAAU,CAAC,OAAO,CAAC,EAC1B,OAAO,EAAE,UAAU,CAAC,SAAS,CAAC,EAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,UAAU,CAYZ;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,SAAS,EACf,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,YAAY,CAQd;AAMD,eAAO,MAAM,kBAAkB,EAAE,eAAe,EAiM/C,CAAC;AAMF,wBAAgB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc,CAMnE;AAED,wBAAgB,OAAO,CACrB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,GAAG,aAAa,GAAG,WAAW,GAAG,WAAW,CAAC,CAAM,GAC5F;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,IAAI,CAAA;CAAE,CAOzC;AAED,wBAAgB,OAAO,CACrB,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,SAAS,CAAC,UAAU,CAAa,GAC1C;IAAE,OAAO,EAAE,cAAc,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAO9C;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,GACjB,cAAc,CAchB;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GACX,cAAc,CAahB;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,GAAG,cAAc,CAE9E;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAEjF;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,EAAE,CAI/D;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAUjE;AAMD,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,SAAS,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,UAAU,EAAE,CAAC;IACzB,YAAY,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpD,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,gBAAgB,CAgE7E;AAMD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAuEhE;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3D,cAAc,CA2BhB;AAMD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAEhE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAE/D;AAMD,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,eAAe,EACzB,WAAW,EAAE,MAAM,EACnB,kBAAkB,CAAC,EAAE,MAAM,GAC1B,cAAc,CA2ChB;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAE/E;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,EAAE,CAE1E;AAMD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,GAAG,cAAc,CAK7E;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,eAAe,GACrB;IACD,UAAU,EAAE,IAAI,EAAE,CAAC;IACnB,YAAY,EAAE,IAAI,EAAE,CAAC;IACrB,aAAa,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC5D,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;CACvB,CA8BA;AAMD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,UAAU,EAAE,EACrB,OAAO,EAAE;IACP,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GACA,UAAU,EAAE,CA8Bd"} \ No newline at end of file +{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/models.js b/dist/models.js index 0ddf84a..6698fa8 100644 --- a/dist/models.js +++ b/dist/models.js @@ -715,4 +715,63 @@ export function filterAuditLog(entries, options) { } return filtered; } +// ============================================================================ +// RAG Factory Functions +// ============================================================================ +export function createRAGDocument(title, content, options = {}) { + const now = new Date().toISOString(); + return { + id: randomUUID().slice(0, 8), + projectId: options.projectId ?? null, + sourceType: options.sourceType ?? 'custom_document', + sourceId: options.sourceId ?? null, + title, + content, + metadata: options.metadata ?? {}, + chunkCount: options.chunkCount ?? 0, + createdAt: now, + updatedAt: now, + }; +} +export function createRAGChunk(documentId, content, chunkIndex, options = {}) { + return { + id: randomUUID().slice(0, 8), + documentId, + content, + embedding: options.embedding ?? null, + chunkIndex, + startOffset: options.startOffset ?? 0, + endOffset: options.endOffset ?? content.length, + metadata: options.metadata ?? {}, + createdAt: new Date().toISOString(), + }; +} +export function getDefaultRAGConfig() { + return { + embedding: { + provider: 'local', + model: 'Xenova/all-MiniLM-L6-v2', + dimensions: 384, + batchSize: 32, + }, + chunking: { + strategy: 'paragraph', + chunkSize: 512, + chunkOverlap: 50, + minChunkSize: 100, + maxChunkSize: 2000, + }, + search: { + topK: 10, + minScore: 0.5, + rerank: false, + hybridVectorWeight: 0.7, + }, + indexing: { + autoIndex: true, + indexOnCreate: true, + batchSize: 100, + }, + }; +} //# sourceMappingURL=models.js.map \ No newline at end of file diff --git a/dist/models.js.map b/dist/models.js.map index 7e86eec..3cf97d4 100644 --- a/dist/models.js.map +++ b/dist/models.js.map @@ -1 +1 @@ -{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"models.js","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/rag/chunking.d.ts b/dist/rag/chunking.d.ts new file mode 100644 index 0000000..761de6f --- /dev/null +++ b/dist/rag/chunking.d.ts @@ -0,0 +1,34 @@ +/** + * CortexFlow - Document Chunking Strategies + * + * Provides different strategies for splitting documents into chunks + * suitable for embedding and retrieval. + */ +import { ChunkingConfig } from '../models.js'; +export interface ChunkResult { + content: string; + startOffset: number; + endOffset: number; + index: number; +} +/** + * Chunk document using specified strategy + */ +export declare function chunkDocument(text: string, config: ChunkingConfig): ChunkResult[]; +/** + * Estimate token count (rough approximation: ~4 chars per token) + */ +export declare function estimateTokenCount(text: string): number; +/** + * Get recommended chunk size for a given embedding model + */ +export declare function getRecommendedChunkSize(model: string): number; +/** + * Merge small consecutive chunks + */ +export declare function mergeSmallChunks(chunks: ChunkResult[], minSize: number): ChunkResult[]; +/** + * Split oversized chunk into smaller pieces + */ +export declare function splitOversizedChunk(chunk: ChunkResult, maxSize: number): ChunkResult[]; +//# sourceMappingURL=chunking.d.ts.map \ No newline at end of file diff --git a/dist/rag/chunking.d.ts.map b/dist/rag/chunking.d.ts.map new file mode 100644 index 0000000..14520d8 --- /dev/null +++ b/dist/rag/chunking.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"chunking.d.ts","sourceRoot":"","sources":["../../src/rag/chunking.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAM9C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAsPD;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,GAAG,WAAW,EAAE,CAoBjF;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAc7D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAiCtF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CA+BtF"} \ No newline at end of file diff --git a/dist/rag/chunking.js b/dist/rag/chunking.js new file mode 100644 index 0000000..a1e0c90 --- /dev/null +++ b/dist/rag/chunking.js @@ -0,0 +1,329 @@ +/** + * CortexFlow - Document Chunking Strategies + * + * Provides different strategies for splitting documents into chunks + * suitable for embedding and retrieval. + */ +// ============================================================================ +// Paragraph Chunking +// ============================================================================ +/** + * Split text by paragraphs (double newlines) + * Groups small paragraphs together to meet minimum chunk size + */ +function chunkByParagraph(text, config) { + const paragraphs = text.split(/\n\s*\n/); + const chunks = []; + let currentChunk = ''; + let currentStart = 0; + let chunkIndex = 0; + for (const para of paragraphs) { + const trimmed = para.trim(); + if (!trimmed) + continue; + // Find the actual position in original text + const paraStart = text.indexOf(para, currentStart); + if (currentChunk.length + trimmed.length > config.maxChunkSize && currentChunk.length > 0) { + // Current chunk is full, save it + if (currentChunk.length >= config.minChunkSize) { + const chunkStart = text.indexOf(currentChunk.trim()); + chunks.push({ + content: currentChunk.trim(), + startOffset: chunkStart >= 0 ? chunkStart : currentStart, + endOffset: chunkStart >= 0 ? chunkStart + currentChunk.trim().length : paraStart, + index: chunkIndex++, + }); + } + currentChunk = trimmed; + currentStart = paraStart; + } + else { + currentChunk += (currentChunk ? '\n\n' : '') + trimmed; + } + } + // Don't forget the last chunk + if (currentChunk.length >= config.minChunkSize) { + const chunkStart = text.indexOf(currentChunk.trim(), currentStart); + chunks.push({ + content: currentChunk.trim(), + startOffset: chunkStart >= 0 ? chunkStart : currentStart, + endOffset: chunkStart >= 0 ? chunkStart + currentChunk.trim().length : text.length, + index: chunkIndex, + }); + } + return chunks; +} +// ============================================================================ +// Sentence Chunking +// ============================================================================ +/** + * Split text by sentences + * Groups sentences together until target chunk size + */ +function chunkBySentence(text, config) { + // Match sentences (including ending punctuation) + const sentenceRegex = /[^.!?]+[.!?]+\s*/g; + const sentences = []; + let match; + while ((match = sentenceRegex.exec(text)) !== null) { + sentences.push(match[0]); + } + // Handle text without sentence terminators + if (sentences.length === 0) { + sentences.push(text); + } + const chunks = []; + let currentChunk = ''; + let currentStart = 0; + let chunkIndex = 0; + let offset = 0; + for (const sentence of sentences) { + const trimmed = sentence.trim(); + if (!trimmed) { + offset += sentence.length; + continue; + } + if (currentChunk.length + trimmed.length > config.chunkSize && currentChunk.length > 0) { + // Current chunk is full + if (currentChunk.length >= config.minChunkSize) { + chunks.push({ + content: currentChunk.trim(), + startOffset: currentStart, + endOffset: offset, + index: chunkIndex++, + }); + } + currentChunk = trimmed; + currentStart = offset; + } + else { + currentChunk += (currentChunk ? ' ' : '') + trimmed; + } + offset += sentence.length; + } + // Last chunk + if (currentChunk.length >= config.minChunkSize) { + chunks.push({ + content: currentChunk.trim(), + startOffset: currentStart, + endOffset: text.length, + index: chunkIndex, + }); + } + return chunks; +} +// ============================================================================ +// Fixed Size Chunking +// ============================================================================ +/** + * Split text into fixed-size chunks with overlap + */ +function chunkByFixed(text, config) { + const chunks = []; + let start = 0; + let chunkIndex = 0; + while (start < text.length) { + let end = Math.min(start + config.chunkSize, text.length); + // Try to break at word boundary + if (end < text.length) { + const lastSpace = text.lastIndexOf(' ', end); + if (lastSpace > start + config.minChunkSize) { + end = lastSpace; + } + } + const chunk = text.slice(start, end).trim(); + if (chunk.length >= config.minChunkSize) { + chunks.push({ + content: chunk, + startOffset: start, + endOffset: end, + index: chunkIndex++, + }); + } + // Move start with overlap + start = end - config.chunkOverlap; + if (start >= text.length - config.minChunkSize) { + break; + } + } + return chunks; +} +// ============================================================================ +// Semantic Chunking +// ============================================================================ +/** + * Split text by semantic boundaries (headers, sections) + * Falls back to paragraph chunking for unstructured text + */ +function chunkBySemantic(text, config) { + // Detect markdown headers + const headerRegex = /^#{1,6}\s+.+$/gm; + const headers = []; + let match; + while ((match = headerRegex.exec(text)) !== null) { + headers.push({ match: match[0], index: match.index }); + } + // If no headers, try detecting other section markers + if (headers.length === 0) { + // Try double-newline separated sections + return chunkByParagraph(text, config); + } + // Split by headers + const chunks = []; + let chunkIndex = 0; + for (let i = 0; i < headers.length; i++) { + const start = headers[i].index; + const end = i < headers.length - 1 ? headers[i + 1].index : text.length; + const section = text.slice(start, end).trim(); + // If section is too large, sub-chunk it + if (section.length > config.maxChunkSize) { + const subChunks = chunkByParagraph(section, config); + for (const subChunk of subChunks) { + chunks.push({ + content: subChunk.content, + startOffset: start + subChunk.startOffset, + endOffset: start + subChunk.endOffset, + index: chunkIndex++, + }); + } + } + else if (section.length >= config.minChunkSize) { + chunks.push({ + content: section, + startOffset: start, + endOffset: end, + index: chunkIndex++, + }); + } + } + // Handle text before first header + if (headers.length > 0 && headers[0].index > config.minChunkSize) { + const preamble = text.slice(0, headers[0].index).trim(); + if (preamble.length >= config.minChunkSize) { + chunks.unshift({ + content: preamble, + startOffset: 0, + endOffset: headers[0].index, + index: 0, + }); + // Re-index all chunks + for (let i = 1; i < chunks.length; i++) { + chunks[i].index = i; + } + } + } + return chunks; +} +// ============================================================================ +// Main Chunking Function +// ============================================================================ +/** + * Chunk document using specified strategy + */ +export function chunkDocument(text, config) { + if (!text || text.trim().length === 0) { + return []; + } + // Normalize whitespace + const normalizedText = text.replace(/\r\n/g, '\n'); + switch (config.strategy) { + case 'paragraph': + return chunkByParagraph(normalizedText, config); + case 'sentence': + return chunkBySentence(normalizedText, config); + case 'fixed': + return chunkByFixed(normalizedText, config); + case 'semantic': + return chunkBySemantic(normalizedText, config); + default: + return chunkByParagraph(normalizedText, config); + } +} +// ============================================================================ +// Utility Functions +// ============================================================================ +/** + * Estimate token count (rough approximation: ~4 chars per token) + */ +export function estimateTokenCount(text) { + return Math.ceil(text.length / 4); +} +/** + * Get recommended chunk size for a given embedding model + */ +export function getRecommendedChunkSize(model) { + // Most embedding models have max token limits + const modelLimits = { + 'text-embedding-3-small': 8191, + 'text-embedding-3-large': 8191, + 'text-embedding-ada-002': 8191, + 'Xenova/all-MiniLM-L6-v2': 512, + 'voyage-2': 4000, + 'embed-english-v3.0': 512, + }; + const maxTokens = modelLimits[model] || 512; + // Use ~80% of max to leave room for special tokens + return Math.floor(maxTokens * 0.8 * 4); // Convert tokens to chars +} +/** + * Merge small consecutive chunks + */ +export function mergeSmallChunks(chunks, minSize) { + const merged = []; + let current = null; + for (const chunk of chunks) { + if (!current) { + current = { ...chunk }; + continue; + } + if (current.content.length < minSize && + current.content.length + chunk.content.length < minSize * 3) { + // Merge chunks + current = { + content: current.content + '\n\n' + chunk.content, + startOffset: current.startOffset, + endOffset: chunk.endOffset, + index: current.index, + }; + } + else { + merged.push(current); + current = { ...chunk, index: merged.length }; + } + } + if (current) { + current.index = merged.length; + merged.push(current); + } + return merged; +} +/** + * Split oversized chunk into smaller pieces + */ +export function splitOversizedChunk(chunk, maxSize) { + if (chunk.content.length <= maxSize) { + return [chunk]; + } + const pieces = []; + let start = 0; + let pieceIndex = 0; + while (start < chunk.content.length) { + let end = Math.min(start + maxSize, chunk.content.length); + // Try to break at word boundary + if (end < chunk.content.length) { + const lastSpace = chunk.content.lastIndexOf(' ', end); + if (lastSpace > start) { + end = lastSpace; + } + } + pieces.push({ + content: chunk.content.slice(start, end).trim(), + startOffset: chunk.startOffset + start, + endOffset: chunk.startOffset + end, + index: pieceIndex++, + }); + start = end; + } + return pieces; +} +//# sourceMappingURL=chunking.js.map \ No newline at end of file diff --git a/dist/rag/chunking.js.map b/dist/rag/chunking.js.map new file mode 100644 index 0000000..7e2f5dc --- /dev/null +++ b/dist/rag/chunking.js.map @@ -0,0 +1 @@ +{"version":3,"file":"chunking.js","sourceRoot":"","sources":["../../src/rag/chunking.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/rag/embeddings.d.ts b/dist/rag/embeddings.d.ts new file mode 100644 index 0000000..17fe0c1 --- /dev/null +++ b/dist/rag/embeddings.d.ts @@ -0,0 +1,36 @@ +/** + * CortexFlow - Embedding Providers + * + * Configurable embedding system supporting: + * - Local models via transformers.js (optional dependency) + * - OpenAI API + * - Voyage AI API + * - Cohere API + * - Custom endpoints + */ +import { EmbeddingConfig, EmbeddingProvider as EmbeddingProviderType } from '../models.js'; +export interface EmbeddingProviderInstance { + name: string; + dimensions: number; + maxBatchSize: number; + embed(text: string): Promise; + embedBatch(texts: string[]): Promise; + isAvailable(): Promise; +} +export declare function createLocalEmbeddingProvider(config: EmbeddingConfig): EmbeddingProviderInstance; +export declare function createOpenAIEmbeddingProvider(config: EmbeddingConfig): EmbeddingProviderInstance; +export declare function createVoyageEmbeddingProvider(config: EmbeddingConfig): EmbeddingProviderInstance; +export declare function createCohereEmbeddingProvider(config: EmbeddingConfig): EmbeddingProviderInstance; +export declare function createCustomEmbeddingProvider(config: EmbeddingConfig): EmbeddingProviderInstance; +export declare function createEmbeddingProvider(config: EmbeddingConfig): EmbeddingProviderInstance; +export declare function getEmbeddingProvider(config?: EmbeddingConfig): Promise; +export declare function resetEmbeddingProvider(): void; +/** + * Get available embedding providers based on environment + */ +export declare function getAvailableProviders(): Promise; +/** + * Get default dimensions for a provider + */ +export declare function getProviderDimensions(provider: EmbeddingProviderType, model?: string): number; +//# sourceMappingURL=embeddings.d.ts.map \ No newline at end of file diff --git a/dist/rag/embeddings.d.ts.map b/dist/rag/embeddings.d.ts.map new file mode 100644 index 0000000..d24365b --- /dev/null +++ b/dist/rag/embeddings.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/rag/embeddings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,eAAe,EAAE,iBAAiB,IAAI,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAM3F,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IAErB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;CACjC;AAyBD,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,eAAe,GAAG,yBAAyB,CAwC/F;AAMD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,eAAe,GAAG,yBAAyB,CA2DhG;AAMD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,eAAe,GAAG,yBAAyB,CA2DhG;AAMD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,eAAe,GAAG,yBAAyB,CA4DhG;AAMD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,eAAe,GAAG,yBAAyB,CA+DhG;AAMD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,eAAe,GAAG,yBAAyB,CAe1F;AASD,wBAAsB,oBAAoB,CACxC,MAAM,CAAC,EAAE,eAAe,GACvB,OAAO,CAAC,yBAAyB,CAAC,CA0BpC;AAED,wBAAgB,sBAAsB,IAAI,IAAI,CAI7C;AAMD;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAuB9E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,qBAAqB,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAkB7F"} \ No newline at end of file diff --git a/dist/rag/embeddings.js b/dist/rag/embeddings.js new file mode 100644 index 0000000..db3d7ee --- /dev/null +++ b/dist/rag/embeddings.js @@ -0,0 +1,373 @@ +/** + * CortexFlow - Embedding Providers + * + * Configurable embedding system supporting: + * - Local models via transformers.js (optional dependency) + * - OpenAI API + * - Voyage AI API + * - Cohere API + * - Custom endpoints + */ +// ============================================================================ +// Local Embedding Provider (transformers.js) +// ============================================================================ +let localPipeline = null; +async function getLocalPipeline(model) { + if (!localPipeline) { + try { + // Dynamic import to avoid loading if not used + const transformers = await import('@xenova/transformers'); + localPipeline = await transformers.pipeline('feature-extraction', model, { + quantized: true, + }); + } + catch (error) { + throw new Error(`Failed to load local embedding model. Ensure @xenova/transformers is installed: ${error}`); + } + } + return localPipeline; +} +export function createLocalEmbeddingProvider(config) { + const model = config.model || 'Xenova/all-MiniLM-L6-v2'; + return { + name: 'local', + dimensions: config.dimensions || 384, + maxBatchSize: config.batchSize || 32, + async embed(text) { + const pipe = (await getLocalPipeline(model)); + const output = await pipe(text, { pooling: 'mean', normalize: true }); + return Array.from(output.data); + }, + async embedBatch(texts) { + const results = []; + for (let i = 0; i < texts.length; i += this.maxBatchSize) { + const batch = texts.slice(i, i + this.maxBatchSize); + for (const text of batch) { + const embedding = await this.embed(text); + results.push(embedding); + } + } + return results; + }, + async isAvailable() { + try { + await getLocalPipeline(model); + return true; + } + catch { + return false; + } + }, + }; +} +// ============================================================================ +// OpenAI Embedding Provider +// ============================================================================ +export function createOpenAIEmbeddingProvider(config) { + const apiKey = config.apiKey || process.env.OPENAI_API_KEY; + const model = config.model || 'text-embedding-3-small'; + const endpoint = config.apiEndpoint || 'https://api.openai.com/v1/embeddings'; + async function callOpenAI(texts) { + if (!apiKey) { + throw new Error('OpenAI API key not configured'); + } + const response = await fetch(endpoint, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${apiKey}`, + }, + body: JSON.stringify({ + model, + input: texts, + }), + }); + if (!response.ok) { + const error = await response.text(); + throw new Error(`OpenAI API error: ${response.status} - ${error}`); + } + const data = (await response.json()); + return data.data.map((item) => item.embedding); + } + return { + name: 'openai', + dimensions: config.dimensions || 1536, + maxBatchSize: config.batchSize || 100, + async embed(text) { + const results = await callOpenAI([text]); + return results[0]; + }, + async embedBatch(texts) { + const results = []; + for (let i = 0; i < texts.length; i += this.maxBatchSize) { + const batch = texts.slice(i, i + this.maxBatchSize); + const batchResults = await callOpenAI(batch); + results.push(...batchResults); + } + return results; + }, + async isAvailable() { + return !!apiKey; + }, + }; +} +// ============================================================================ +// Voyage AI Embedding Provider +// ============================================================================ +export function createVoyageEmbeddingProvider(config) { + const apiKey = config.apiKey || process.env.VOYAGE_API_KEY; + const model = config.model || 'voyage-2'; + const endpoint = config.apiEndpoint || 'https://api.voyageai.com/v1/embeddings'; + async function callVoyage(texts) { + if (!apiKey) { + throw new Error('Voyage API key not configured'); + } + const response = await fetch(endpoint, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${apiKey}`, + }, + body: JSON.stringify({ + model, + input: texts, + }), + }); + if (!response.ok) { + const error = await response.text(); + throw new Error(`Voyage API error: ${response.status} - ${error}`); + } + const data = (await response.json()); + return data.data.map((item) => item.embedding); + } + return { + name: 'voyage', + dimensions: config.dimensions || 1024, + maxBatchSize: config.batchSize || 128, + async embed(text) { + const results = await callVoyage([text]); + return results[0]; + }, + async embedBatch(texts) { + const results = []; + for (let i = 0; i < texts.length; i += this.maxBatchSize) { + const batch = texts.slice(i, i + this.maxBatchSize); + const batchResults = await callVoyage(batch); + results.push(...batchResults); + } + return results; + }, + async isAvailable() { + return !!apiKey; + }, + }; +} +// ============================================================================ +// Cohere Embedding Provider +// ============================================================================ +export function createCohereEmbeddingProvider(config) { + const apiKey = config.apiKey || process.env.COHERE_API_KEY; + const model = config.model || 'embed-english-v3.0'; + const endpoint = config.apiEndpoint || 'https://api.cohere.ai/v1/embed'; + async function callCohere(texts) { + if (!apiKey) { + throw new Error('Cohere API key not configured'); + } + const response = await fetch(endpoint, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${apiKey}`, + }, + body: JSON.stringify({ + model, + texts, + input_type: 'search_document', + }), + }); + if (!response.ok) { + const error = await response.text(); + throw new Error(`Cohere API error: ${response.status} - ${error}`); + } + const data = (await response.json()); + return data.embeddings; + } + return { + name: 'cohere', + dimensions: config.dimensions || 1024, + maxBatchSize: config.batchSize || 96, + async embed(text) { + const results = await callCohere([text]); + return results[0]; + }, + async embedBatch(texts) { + const results = []; + for (let i = 0; i < texts.length; i += this.maxBatchSize) { + const batch = texts.slice(i, i + this.maxBatchSize); + const batchResults = await callCohere(batch); + results.push(...batchResults); + } + return results; + }, + async isAvailable() { + return !!apiKey; + }, + }; +} +// ============================================================================ +// Custom Endpoint Provider +// ============================================================================ +export function createCustomEmbeddingProvider(config) { + const configuredEndpoint = config.apiEndpoint; + const apiKey = config.apiKey; + if (!configuredEndpoint) { + throw new Error('Custom provider requires apiEndpoint'); + } + // Store in const after validation to satisfy TypeScript + const endpoint = configuredEndpoint; + async function callCustom(texts) { + const headers = { + 'Content-Type': 'application/json', + }; + if (apiKey) { + headers['Authorization'] = `Bearer ${apiKey}`; + } + const response = await fetch(endpoint, { + method: 'POST', + headers, + body: JSON.stringify({ texts }), + }); + if (!response.ok) { + const error = await response.text(); + throw new Error(`Custom API error: ${response.status} - ${error}`); + } + const data = (await response.json()); + return data.embeddings; + } + return { + name: 'custom', + dimensions: config.dimensions || 768, + maxBatchSize: config.batchSize || 32, + async embed(text) { + const results = await callCustom([text]); + return results[0]; + }, + async embedBatch(texts) { + const results = []; + for (let i = 0; i < texts.length; i += this.maxBatchSize) { + const batch = texts.slice(i, i + this.maxBatchSize); + const batchResults = await callCustom(batch); + results.push(...batchResults); + } + return results; + }, + async isAvailable() { + return !!endpoint; + }, + }; +} +// ============================================================================ +// Provider Factory +// ============================================================================ +export function createEmbeddingProvider(config) { + switch (config.provider) { + case 'local': + return createLocalEmbeddingProvider(config); + case 'openai': + return createOpenAIEmbeddingProvider(config); + case 'voyage': + return createVoyageEmbeddingProvider(config); + case 'cohere': + return createCohereEmbeddingProvider(config); + case 'custom': + return createCustomEmbeddingProvider(config); + default: + throw new Error(`Unknown embedding provider: ${config.provider}`); + } +} +// ============================================================================ +// Singleton Instance (uses RAG config) +// ============================================================================ +let embeddingProviderInstance = null; +let currentProviderConfig = null; +export async function getEmbeddingProvider(config) { + // If config provided, check if we need to recreate the provider + if (config) { + const configChanged = !currentProviderConfig || + currentProviderConfig.provider !== config.provider || + currentProviderConfig.model !== config.model || + currentProviderConfig.apiKey !== config.apiKey || + currentProviderConfig.apiEndpoint !== config.apiEndpoint; + if (configChanged) { + embeddingProviderInstance = createEmbeddingProvider(config); + currentProviderConfig = config; + } + } + // If no instance, get config from RAG storage + if (!embeddingProviderInstance) { + const { getRAGStorage } = await import('./rag-storage.js'); + const storage = await getRAGStorage(); + const ragConfig = await storage.getConfig(); + embeddingProviderInstance = createEmbeddingProvider(ragConfig.embedding); + currentProviderConfig = ragConfig.embedding; + } + return embeddingProviderInstance; +} +export function resetEmbeddingProvider() { + embeddingProviderInstance = null; + currentProviderConfig = null; + localPipeline = null; +} +// ============================================================================ +// Utility Functions +// ============================================================================ +/** + * Get available embedding providers based on environment + */ +export async function getAvailableProviders() { + const available = []; + // Check local + try { + await import('@xenova/transformers'); + available.push('local'); + } + catch { + // transformers.js not installed + } + // Check API keys + if (process.env.OPENAI_API_KEY) { + available.push('openai'); + } + if (process.env.VOYAGE_API_KEY) { + available.push('voyage'); + } + if (process.env.COHERE_API_KEY) { + available.push('cohere'); + } + return available; +} +/** + * Get default dimensions for a provider + */ +export function getProviderDimensions(provider, model) { + switch (provider) { + case 'local': + // Most Xenova models use 384 dimensions + return 384; + case 'openai': + if (model === 'text-embedding-3-large') + return 3072; + if (model === 'text-embedding-ada-002') + return 1536; + return 1536; // text-embedding-3-small default + case 'voyage': + return 1024; + case 'cohere': + return 1024; + case 'custom': + return 768; + default: + return 768; + } +} +//# sourceMappingURL=embeddings.js.map \ No newline at end of file diff --git a/dist/rag/embeddings.js.map b/dist/rag/embeddings.js.map new file mode 100644 index 0000000..4fe633f --- /dev/null +++ b/dist/rag/embeddings.js.map @@ -0,0 +1 @@ +{"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/rag/embeddings.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/rag/index.d.ts b/dist/rag/index.d.ts new file mode 100644 index 0000000..32ec8f5 --- /dev/null +++ b/dist/rag/index.d.ts @@ -0,0 +1,14 @@ +/** + * CortexFlow - RAG Module + * + * Exports all RAG functionality for use by other modules. + */ +export { getRAGStorage, resetRAGStorage, cosineSimilarity, isSqliteAvailable, } from './rag-storage.js'; +export type { RAGStorage } from './rag-storage.js'; +export { getEmbeddingProvider, resetEmbeddingProvider, createEmbeddingProvider, getAvailableProviders, getProviderDimensions, } from './embeddings.js'; +export type { EmbeddingProviderInstance } from './embeddings.js'; +export { chunkDocument, estimateTokenCount, getRecommendedChunkSize, mergeSmallChunks, splitOversizedChunk, } from './chunking.js'; +export type { ChunkResult } from './chunking.js'; +export { indexDocument, indexProjectContext, search, buildContextFromSearch, deleteDocument, deleteProjectDocuments, reindexDocument, updateDocumentEmbeddings, listDocuments, getDocument, getRAGStats, getRAGConfig, updateRAGConfig, rebuildFTSIndex, vacuumDatabase, reindexAll, } from './rag-features.js'; +export type { IndexDocumentOptions, SearchOptions, QueryWithContextOptions, } from './rag-features.js'; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/dist/rag/index.d.ts.map b/dist/rag/index.d.ts.map new file mode 100644 index 0000000..a5a6e6f --- /dev/null +++ b/dist/rag/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rag/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EACL,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAGnD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAGjE,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,EAEL,aAAa,EACb,mBAAmB,EAEnB,MAAM,EACN,sBAAsB,EAEtB,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,WAAW,EAEX,WAAW,EAEX,YAAY,EACZ,eAAe,EAEf,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,oBAAoB,EACpB,aAAa,EACb,uBAAuB,GACxB,MAAM,mBAAmB,CAAC"} \ No newline at end of file diff --git a/dist/rag/index.js b/dist/rag/index.js new file mode 100644 index 0000000..9252621 --- /dev/null +++ b/dist/rag/index.js @@ -0,0 +1,26 @@ +/** + * CortexFlow - RAG Module + * + * Exports all RAG functionality for use by other modules. + */ +// Storage +export { getRAGStorage, resetRAGStorage, cosineSimilarity, isSqliteAvailable, } from './rag-storage.js'; +// Embeddings +export { getEmbeddingProvider, resetEmbeddingProvider, createEmbeddingProvider, getAvailableProviders, getProviderDimensions, } from './embeddings.js'; +// Chunking +export { chunkDocument, estimateTokenCount, getRecommendedChunkSize, mergeSmallChunks, splitOversizedChunk, } from './chunking.js'; +// Features (main API) +export { +// Indexing +indexDocument, indexProjectContext, +// Search +search, buildContextFromSearch, +// Document management +deleteDocument, deleteProjectDocuments, reindexDocument, updateDocumentEmbeddings, listDocuments, getDocument, +// Statistics +getRAGStats, +// Configuration +getRAGConfig, updateRAGConfig, +// Maintenance +rebuildFTSIndex, vacuumDatabase, reindexAll, } from './rag-features.js'; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/dist/rag/index.js.map b/dist/rag/index.js.map new file mode 100644 index 0000000..e8cbdc4 --- /dev/null +++ b/dist/rag/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rag/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,UAAU;AACV,OAAO,EACL,aAAa,EACb,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAG1B,aAAa;AACb,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAGzB,WAAW;AACX,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,uBAAuB,EACvB,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,eAAe,CAAC;AAGvB,sBAAsB;AACtB,OAAO;AACL,WAAW;AACX,aAAa,EACb,mBAAmB;AACnB,SAAS;AACT,MAAM,EACN,sBAAsB;AACtB,sBAAsB;AACtB,cAAc,EACd,sBAAsB,EACtB,eAAe,EACf,wBAAwB,EACxB,aAAa,EACb,WAAW;AACX,aAAa;AACb,WAAW;AACX,gBAAgB;AAChB,YAAY,EACZ,eAAe;AACf,cAAc;AACd,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,mBAAmB,CAAC"} \ No newline at end of file diff --git a/dist/rag/rag-features.d.ts b/dist/rag/rag-features.d.ts new file mode 100644 index 0000000..ec18542 --- /dev/null +++ b/dist/rag/rag-features.d.ts @@ -0,0 +1,114 @@ +/** + * CortexFlow - RAG Features Module + * + * High-level RAG operations: + * - Document indexing + * - Semantic search + * - Project context RAG + * - Query with context + */ +import { getRAGStorage } from './rag-storage.js'; +import { RAGDocument, RAGQueryResult, RAGStats, RAGSearchType, ProjectContext } from '../models.js'; +export interface IndexDocumentOptions { + projectId?: string; + sourceType?: RAGDocument['sourceType']; + sourceId?: string; + metadata?: Record; + skipEmbedding?: boolean; +} +/** + * Index a single document + */ +export declare function indexDocument(title: string, content: string, options?: IndexDocumentOptions): Promise; +/** + * Index an entire project context + */ +export declare function indexProjectContext(project: ProjectContext): Promise<{ + documents: RAGDocument[]; + totalChunks: number; +}>; +export interface SearchOptions { + projectId?: string; + topK?: number; + minScore?: number; + searchType?: RAGSearchType; + vectorWeight?: number; +} +/** + * Search indexed documents + */ +export declare function search(query: string, options?: SearchOptions): Promise; +export interface QueryWithContextOptions extends SearchOptions { + maxContextLength?: number; + includeMetadata?: boolean; +} +/** + * Build context string from search results + */ +export declare function buildContextFromSearch(query: string, options?: QueryWithContextOptions): Promise<{ + context: string; + sources: Array<{ + title: string; + score: number; + documentId: string; + }>; + searchResult: RAGQueryResult; +}>; +/** + * Delete a document and its chunks + */ +export declare function deleteDocument(documentId: string): Promise; +/** + * Delete all documents for a project + */ +export declare function deleteProjectDocuments(projectId: string): Promise; +/** + * Reindex a document (regenerate chunks and embeddings) + */ +export declare function reindexDocument(documentId: string): Promise; +/** + * Update embeddings for a document (without re-chunking) + */ +export declare function updateDocumentEmbeddings(documentId: string): Promise; +/** + * Get RAG system statistics + */ +export declare function getRAGStats(): Promise; +/** + * List all indexed documents + */ +export declare function listDocuments(options?: { + projectId?: string; + sourceType?: string; + limit?: number; +}): Promise; +/** + * Get a single document by ID + */ +export declare function getDocument(documentId: string): Promise; +/** + * Get current RAG configuration + */ +export declare function getRAGConfig(): Promise; +/** + * Update RAG configuration + */ +export declare function updateRAGConfig(updates: Parameters>['updateConfig']>[0]): Promise; +/** + * Rebuild full-text search index + */ +export declare function rebuildFTSIndex(): Promise; +/** + * Vacuum the database to reclaim space + */ +export declare function vacuumDatabase(): Promise; +/** + * Reindex all documents (regenerate embeddings) + */ +export declare function reindexAll(options?: { + projectId?: string; +}): Promise<{ + documentsProcessed: number; + chunksUpdated: number; +}>; +//# sourceMappingURL=rag-features.d.ts.map \ No newline at end of file diff --git a/dist/rag/rag-features.d.ts.map b/dist/rag/rag-features.d.ts.map new file mode 100644 index 0000000..2479b8a --- /dev/null +++ b/dist/rag/rag-features.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"rag-features.d.ts","sourceRoot":"","sources":["../../src/rag/rag-features.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,EACL,WAAW,EAEX,cAAc,EAEd,QAAQ,EACR,aAAa,EAGb,cAAc,EACf,MAAM,cAAc,CAAC;AAMtB,MAAM,WAAW,oBAAoB;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,WAAW,CAAC,CAkDtB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;IAC1E,SAAS,EAAE,WAAW,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAsFD;AAMD,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,aAAa,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,cAAc,CAAC,CA+ChG;AAMD,MAAM,WAAW,uBAAwB,SAAQ,aAAa;IAC5D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC;IACT,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,YAAY,EAAE,cAAc,CAAC;CAC9B,CAAC,CA4CD;AAMD;;GAEG;AACH,wBAAsB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAGzE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAY/E;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAmBrF;AAED;;GAEG;AACH,wBAAsB,wBAAwB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAelF;AAMD;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,CAUrD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,CAAC,EAAE;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAGzB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAGjF;AAMD;;GAEG;AACH,wBAAsB,YAAY,8CAGjC;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,GAChF,OAAO,CAAC,IAAI,CAAC,CAGf;AAMD;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAGrD;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAGpD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC;IAC1E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC,CAgBD"} \ No newline at end of file diff --git a/dist/rag/rag-features.js b/dist/rag/rag-features.js new file mode 100644 index 0000000..faacef4 --- /dev/null +++ b/dist/rag/rag-features.js @@ -0,0 +1,372 @@ +/** + * CortexFlow - RAG Features Module + * + * High-level RAG operations: + * - Document indexing + * - Semantic search + * - Project context RAG + * - Query with context + */ +import { getRAGStorage } from './rag-storage.js'; +import { getEmbeddingProvider } from './embeddings.js'; +import { chunkDocument } from './chunking.js'; +import { createRAGDocument, createRAGChunk, } from '../models.js'; +/** + * Index a single document + */ +export async function indexDocument(title, content, options = {}) { + const storage = await getRAGStorage(); + const config = await storage.getConfig(); + // Create document + const doc = createRAGDocument(title, content, { + projectId: options.projectId ?? null, + sourceType: options.sourceType ?? 'custom_document', + sourceId: options.sourceId ?? null, + metadata: options.metadata ?? {}, + }); + // Chunk content + const chunkResults = chunkDocument(content, config.chunking); + doc.chunkCount = chunkResults.length; + // Save document + await storage.saveDocument(doc); + // Create chunks + const chunks = chunkResults.map((result) => createRAGChunk(doc.id, result.content, result.index, { + startOffset: result.startOffset, + endOffset: result.endOffset, + metadata: { documentTitle: title }, + })); + // Save chunks + if (chunks.length > 0) { + await storage.saveChunks(chunks); + } + // Generate embeddings (if not skipped) + if (!options.skipEmbedding && chunks.length > 0) { + try { + const embedder = await getEmbeddingProvider(); + const texts = chunks.map((c) => c.content); + const embeddings = await embedder.embedBatch(texts); + for (let i = 0; i < chunks.length; i++) { + await storage.updateChunkEmbedding(chunks[i].id, embeddings[i]); + } + } + catch (error) { + // Embedding failed, document is still indexed without vectors + console.warn(`Embedding generation failed: ${error}`); + } + } + return doc; +} +/** + * Index an entire project context + */ +export async function indexProjectContext(project) { + const documents = []; + let totalChunks = 0; + // Index project description + const projectContent = [ + `# Project: ${project.name}`, + '', + project.description, + '', + `Phase: ${project.phase}`, + `Tags: ${project.tags.join(', ') || 'none'}`, + `Version: ${project.version}`, + ].join('\n'); + const projectDoc = await indexDocument(`Project: ${project.name}`, projectContent, { + projectId: project.id, + sourceType: 'project_context', + sourceId: project.id, + metadata: { + phase: project.phase, + tags: project.tags, + version: project.version, + }, + }); + documents.push(projectDoc); + totalChunks += projectDoc.chunkCount; + // Index each task + for (const task of project.tasks) { + const taskContent = [ + `# Task: ${task.title}`, + '', + task.description, + '', + `Status: ${task.status}`, + `Priority: ${task.priority}`, + task.assignedTo ? `Assigned to: ${task.assignedTo}` : '', + task.dependencies.length > 0 ? `Dependencies: ${task.dependencies.join(', ')}` : '', + '', + task.notes.length > 0 ? '## Notes\n' + task.notes.map((n) => `- ${n}`).join('\n') : '', + ] + .filter((line) => line !== '') + .join('\n'); + const taskDoc = await indexDocument(`Task: ${task.title}`, taskContent, { + projectId: project.id, + sourceType: 'task', + sourceId: task.id, + metadata: { + status: task.status, + priority: task.priority, + assignedTo: task.assignedTo, + }, + }); + documents.push(taskDoc); + totalChunks += taskDoc.chunkCount; + } + // Index significant notes (longer than 50 chars) + for (const note of project.notes) { + if (note.content.length > 50) { + const noteContent = [ + `# Note by ${note.agent}`, + '', + `Category: ${note.category}`, + `Timestamp: ${note.timestamp}`, + '', + note.content, + ].join('\n'); + const noteDoc = await indexDocument(`Note: ${note.category} by ${note.agent}`, noteContent, { + projectId: project.id, + sourceType: 'note', + sourceId: note.id, + metadata: { + agent: note.agent, + category: note.category, + }, + }); + documents.push(noteDoc); + totalChunks += noteDoc.chunkCount; + } + } + return { documents, totalChunks }; +} +/** + * Search indexed documents + */ +export async function search(query, options = {}) { + const startTime = Date.now(); + const storage = await getRAGStorage(); + const config = await storage.getConfig(); + const searchType = options.searchType ?? 'hybrid'; + const topK = options.topK ?? config.search.topK; + const minScore = options.minScore ?? config.search.minScore; + let results; + let embeddingProvider = 'none'; + if (searchType === 'keyword') { + results = await storage.keywordSearch(query, { + projectId: options.projectId, + limit: topK, + }); + } + else { + // Generate query embedding + const embedder = await getEmbeddingProvider(); + embeddingProvider = embedder.name; + const queryEmbedding = await embedder.embed(query); + if (searchType === 'vector') { + results = await storage.vectorSearch(queryEmbedding, { + projectId: options.projectId, + topK, + minScore, + }); + } + else { + // Hybrid search + results = await storage.hybridSearch(query, queryEmbedding, { + projectId: options.projectId, + topK, + minScore, + vectorWeight: options.vectorWeight, + }); + } + } + return { + query, + results, + totalFound: results.length, + searchTimeMs: Date.now() - startTime, + embeddingProvider, + }; +} +/** + * Build context string from search results + */ +export async function buildContextFromSearch(query, options = {}) { + const maxContextLength = options.maxContextLength ?? 4000; + const includeMetadata = options.includeMetadata ?? true; + const searchResult = await search(query, options); + const contextParts = []; + const sources = []; + let currentLength = 0; + for (const result of searchResult.results) { + const chunkText = result.chunk.content; + const docTitle = result.document.title; + let contextEntry = `--- ${docTitle} ---\n${chunkText}\n`; + if (includeMetadata && Object.keys(result.document.metadata).length > 0) { + const metadataStr = Object.entries(result.document.metadata) + .filter(([, v]) => v !== null && v !== undefined) + .map(([k, v]) => `${k}: ${v}`) + .join(', '); + if (metadataStr) { + contextEntry += `[${metadataStr}]\n`; + } + } + if (currentLength + contextEntry.length > maxContextLength) { + break; + } + contextParts.push(contextEntry); + sources.push({ + title: docTitle, + score: result.score, + documentId: result.document.id, + }); + currentLength += contextEntry.length; + } + return { + context: contextParts.join('\n'), + sources, + searchResult, + }; +} +// ============================================================================ +// Document Management +// ============================================================================ +/** + * Delete a document and its chunks + */ +export async function deleteDocument(documentId) { + const storage = await getRAGStorage(); + return storage.deleteDocument(documentId); +} +/** + * Delete all documents for a project + */ +export async function deleteProjectDocuments(projectId) { + const storage = await getRAGStorage(); + const docs = await storage.listDocuments({ projectId }); + let deleted = 0; + for (const doc of docs) { + if (await storage.deleteDocument(doc.id)) { + deleted++; + } + } + return deleted; +} +/** + * Reindex a document (regenerate chunks and embeddings) + */ +export async function reindexDocument(documentId) { + const storage = await getRAGStorage(); + const doc = await storage.getDocument(documentId); + if (!doc) + return null; + // Delete existing chunks + await storage.deleteChunks(documentId); + // Delete the document itself + await storage.deleteDocument(documentId); + // Reindex with same properties + return indexDocument(doc.title, doc.content, { + projectId: doc.projectId ?? undefined, + sourceType: doc.sourceType, + sourceId: doc.sourceId ?? undefined, + metadata: doc.metadata, + }); +} +/** + * Update embeddings for a document (without re-chunking) + */ +export async function updateDocumentEmbeddings(documentId) { + const storage = await getRAGStorage(); + const chunks = await storage.getChunks(documentId); + if (chunks.length === 0) + return 0; + const embedder = await getEmbeddingProvider(); + const texts = chunks.map((c) => c.content); + const embeddings = await embedder.embedBatch(texts); + for (let i = 0; i < chunks.length; i++) { + await storage.updateChunkEmbedding(chunks[i].id, embeddings[i]); + } + return chunks.length; +} +// ============================================================================ +// Statistics +// ============================================================================ +/** + * Get RAG system statistics + */ +export async function getRAGStats() { + const storage = await getRAGStorage(); + const embedder = await getEmbeddingProvider(); + const stats = await storage.getStats(); + return { + ...stats, + embeddingProvider: embedder.name, + embeddingDimensions: embedder.dimensions, + }; +} +/** + * List all indexed documents + */ +export async function listDocuments(options) { + const storage = await getRAGStorage(); + return storage.listDocuments(options); +} +/** + * Get a single document by ID + */ +export async function getDocument(documentId) { + const storage = await getRAGStorage(); + return storage.getDocument(documentId); +} +// ============================================================================ +// Configuration +// ============================================================================ +/** + * Get current RAG configuration + */ +export async function getRAGConfig() { + const storage = await getRAGStorage(); + return storage.getConfig(); +} +/** + * Update RAG configuration + */ +export async function updateRAGConfig(updates) { + const storage = await getRAGStorage(); + await storage.updateConfig(updates); +} +// ============================================================================ +// Maintenance +// ============================================================================ +/** + * Rebuild full-text search index + */ +export async function rebuildFTSIndex() { + const storage = await getRAGStorage(); + await storage.rebuildFTS(); +} +/** + * Vacuum the database to reclaim space + */ +export async function vacuumDatabase() { + const storage = await getRAGStorage(); + await storage.vacuum(); +} +/** + * Reindex all documents (regenerate embeddings) + */ +export async function reindexAll(options) { + const storage = await getRAGStorage(); + const docs = await storage.listDocuments({ + projectId: options?.projectId, + limit: 10000, // Process up to 10k documents + }); + let chunksUpdated = 0; + for (const doc of docs) { + chunksUpdated += await updateDocumentEmbeddings(doc.id); + } + return { + documentsProcessed: docs.length, + chunksUpdated, + }; +} +//# sourceMappingURL=rag-features.js.map \ No newline at end of file diff --git a/dist/rag/rag-features.js.map b/dist/rag/rag-features.js.map new file mode 100644 index 0000000..2756f78 --- /dev/null +++ b/dist/rag/rag-features.js.map @@ -0,0 +1 @@ +{"version":3,"file":"rag-features.js","sourceRoot":"","sources":["../../src/rag/rag-features.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/rag/rag-storage.d.ts b/dist/rag/rag-storage.d.ts new file mode 100644 index 0000000..f050a53 --- /dev/null +++ b/dist/rag/rag-storage.d.ts @@ -0,0 +1,59 @@ +/** + * CortexFlow - RAG Vector Storage Layer + * + * SQLite-based vector storage using better-sqlite3. + * Supports vector similarity search with pure JS cosine similarity. + * Includes FTS5 for keyword search fallback. + */ +import { RAGDocument, RAGChunk, RAGSearchResult, RAGConfig, RAGConfigUpdate } from '../models.js'; +export declare function isSqliteAvailable(): boolean; +/** + * Calculate cosine similarity between two vectors + */ +export declare function cosineSimilarity(a: number[], b: number[]): number; +export interface RAGStorage { + saveDocument(doc: RAGDocument): Promise; + getDocument(id: string): Promise; + listDocuments(options?: { + projectId?: string; + sourceType?: string; + limit?: number; + }): Promise; + deleteDocument(id: string): Promise; + updateDocument(id: string, updates: Partial>): Promise; + saveChunks(chunks: RAGChunk[]): Promise; + getChunks(documentId: string): Promise; + getChunkById(id: string): Promise; + updateChunkEmbedding(chunkId: string, embedding: number[]): Promise; + deleteChunks(documentId: string): Promise; + vectorSearch(embedding: number[], options?: { + projectId?: string; + topK?: number; + minScore?: number; + }): Promise; + keywordSearch(query: string, options?: { + projectId?: string; + limit?: number; + }): Promise; + hybridSearch(query: string, embedding: number[], options?: { + projectId?: string; + topK?: number; + minScore?: number; + vectorWeight?: number; + }): Promise; + getStats(): Promise<{ + totalDocuments: number; + totalChunks: number; + indexedChunks: number; + projectBreakdown: Record; + }>; + getConfig(): Promise; + updateConfig(config: RAGConfigUpdate): Promise; + vacuum(): Promise; + rebuildFTS(): Promise; + close(): void; +} +export declare function createRAGStorage(): Promise; +export declare function getRAGStorage(): Promise; +export declare function resetRAGStorage(): void; +//# sourceMappingURL=rag-storage.d.ts.map \ No newline at end of file diff --git a/dist/rag/rag-storage.d.ts.map b/dist/rag/rag-storage.d.ts.map new file mode 100644 index 0000000..f9d8087 --- /dev/null +++ b/dist/rag/rag-storage.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"rag-storage.d.ts","sourceRoot":"","sources":["../../src/rag/rag-storage.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/rag/rag-storage.js b/dist/rag/rag-storage.js new file mode 100644 index 0000000..62a183c --- /dev/null +++ b/dist/rag/rag-storage.js @@ -0,0 +1,526 @@ +/** + * CortexFlow - RAG Vector Storage Layer + * + * SQLite-based vector storage using better-sqlite3. + * Supports vector similarity search with pure JS cosine similarity. + * Includes FTS5 for keyword search fallback. + */ +import { join } from 'path'; +import { homedir } from 'os'; +import { mkdir } from 'fs/promises'; +import { getDefaultRAGConfig, } from '../models.js'; +// Dynamic import for better-sqlite3 (native module that may not be available) +let Database = null; +let sqliteAvailable = false; +async function loadSqlite() { + if (Database !== null) + return sqliteAvailable; + try { + const module = await import('better-sqlite3'); + Database = module.default; + sqliteAvailable = true; + } + catch { + sqliteAvailable = false; + } + return sqliteAvailable; +} +// Export function to check availability +export function isSqliteAvailable() { + return sqliteAvailable; +} +const DATA_DIR = process.env.CORTEXFLOW_DATA_DIR ?? join(homedir(), '.cortexflow', 'data'); +const RAG_DB_PATH = join(DATA_DIR, 'rag.sqlite'); +// ============================================================================ +// Schema Definition +// ============================================================================ +const SCHEMA = ` +-- RAG Documents table +CREATE TABLE IF NOT EXISTS rag_documents ( + id TEXT PRIMARY KEY, + project_id TEXT, + source_type TEXT NOT NULL DEFAULT 'custom_document', + source_id TEXT, + title TEXT NOT NULL, + content TEXT NOT NULL, + metadata TEXT DEFAULT '{}', + chunk_count INTEGER DEFAULT 0, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL +); + +-- RAG Chunks table (stores vectors as JSON array of floats) +CREATE TABLE IF NOT EXISTS rag_chunks ( + id TEXT PRIMARY KEY, + document_id TEXT NOT NULL, + content TEXT NOT NULL, + embedding TEXT, + chunk_index INTEGER NOT NULL, + start_offset INTEGER NOT NULL, + end_offset INTEGER NOT NULL, + metadata TEXT DEFAULT '{}', + created_at TEXT NOT NULL, + FOREIGN KEY (document_id) REFERENCES rag_documents(id) ON DELETE CASCADE +); + +-- RAG Configuration table +CREATE TABLE IF NOT EXISTS rag_config ( + key TEXT PRIMARY KEY, + value TEXT NOT NULL, + updated_at TEXT NOT NULL +); + +-- Indexes for performance +CREATE INDEX IF NOT EXISTS idx_chunks_document ON rag_chunks(document_id); +CREATE INDEX IF NOT EXISTS idx_documents_project ON rag_documents(project_id); +CREATE INDEX IF NOT EXISTS idx_documents_source ON rag_documents(source_type, source_id); +CREATE INDEX IF NOT EXISTS idx_chunks_index ON rag_chunks(document_id, chunk_index); +`; +const FTS_SCHEMA = ` +-- Full-text search (FTS5) for keyword fallback +CREATE VIRTUAL TABLE IF NOT EXISTS rag_chunks_fts USING fts5( + content, + content='rag_chunks', + content_rowid='rowid' +); +`; +const FTS_TRIGGERS = ` +-- Triggers to keep FTS in sync +CREATE TRIGGER IF NOT EXISTS rag_chunks_ai AFTER INSERT ON rag_chunks BEGIN + INSERT INTO rag_chunks_fts(rowid, content) VALUES (NEW.rowid, NEW.content); +END; + +CREATE TRIGGER IF NOT EXISTS rag_chunks_ad AFTER DELETE ON rag_chunks BEGIN + INSERT INTO rag_chunks_fts(rag_chunks_fts, rowid, content) VALUES('delete', OLD.rowid, OLD.content); +END; + +CREATE TRIGGER IF NOT EXISTS rag_chunks_au AFTER UPDATE ON rag_chunks BEGIN + INSERT INTO rag_chunks_fts(rag_chunks_fts, rowid, content) VALUES('delete', OLD.rowid, OLD.content); + INSERT INTO rag_chunks_fts(rowid, content) VALUES (NEW.rowid, NEW.content); +END; +`; +// ============================================================================ +// Vector Operations (Pure JS - no native extensions required) +// ============================================================================ +/** + * Calculate cosine similarity between two vectors + */ +export function cosineSimilarity(a, b) { + if (a.length !== b.length || a.length === 0) + return 0; + let dotProduct = 0; + let normA = 0; + let normB = 0; + for (let i = 0; i < a.length; i++) { + dotProduct += a[i] * b[i]; + normA += a[i] * a[i]; + normB += b[i] * b[i]; + } + const magnitude = Math.sqrt(normA) * Math.sqrt(normB); + return magnitude === 0 ? 0 : dotProduct / magnitude; +} +/** + * Brute-force vector search (optimized for small-medium datasets) + * For larger datasets (>100K chunks), consider adding sqlite-vss extension + */ +function vectorSearch(queryEmbedding, chunks, topK, minScore) { + const scored = chunks + .map((chunk) => ({ + id: chunk.id, + score: cosineSimilarity(queryEmbedding, chunk.embedding), + })) + .filter((result) => result.score >= minScore) + .sort((a, b) => b.score - a.score) + .slice(0, topK); + return scored; +} +function rowToDocument(row) { + return { + id: row.id, + projectId: row.project_id, + sourceType: row.source_type, + sourceId: row.source_id, + title: row.title, + content: row.content, + metadata: JSON.parse(row.metadata || '{}'), + chunkCount: row.chunk_count, + createdAt: row.created_at, + updatedAt: row.updated_at, + }; +} +function rowToChunk(row) { + return { + id: row.id, + documentId: row.document_id, + content: row.content, + embedding: row.embedding ? JSON.parse(row.embedding) : null, + chunkIndex: row.chunk_index, + startOffset: row.start_offset, + endOffset: row.end_offset, + metadata: JSON.parse(row.metadata || '{}'), + createdAt: row.created_at, + }; +} +// ============================================================================ +// Storage Factory +// ============================================================================ +export async function createRAGStorage() { + // Ensure SQLite is available + if (!Database) { + throw new Error('SQLite not loaded. Call getRAGStorage() instead of createRAGStorage()'); + } + // Ensure directory exists + await mkdir(DATA_DIR, { recursive: true }).catch(() => { }); + // Initialize database + const db = Database(RAG_DB_PATH); + db.pragma('journal_mode = WAL'); + db.pragma('foreign_keys = ON'); + db.exec(SCHEMA); + // Try to create FTS tables (may fail in some SQLite builds) + try { + db.exec(FTS_SCHEMA); + db.exec(FTS_TRIGGERS); + } + catch { + // FTS5 not available, keyword search will use LIKE fallback + } + // Prepared statements for performance + const stmts = { + insertDoc: db.prepare(` + INSERT OR REPLACE INTO rag_documents + (id, project_id, source_type, source_id, title, content, metadata, chunk_count, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + `), + getDoc: db.prepare('SELECT * FROM rag_documents WHERE id = ?'), + listDocs: db.prepare('SELECT * FROM rag_documents ORDER BY updated_at DESC LIMIT ?'), + listDocsByProject: db.prepare('SELECT * FROM rag_documents WHERE project_id = ? ORDER BY updated_at DESC LIMIT ?'), + listDocsByType: db.prepare('SELECT * FROM rag_documents WHERE source_type = ? ORDER BY updated_at DESC LIMIT ?'), + listDocsByProjectAndType: db.prepare('SELECT * FROM rag_documents WHERE project_id = ? AND source_type = ? ORDER BY updated_at DESC LIMIT ?'), + deleteDoc: db.prepare('DELETE FROM rag_documents WHERE id = ?'), + updateDoc: db.prepare(` + UPDATE rag_documents SET title = ?, content = ?, metadata = ?, updated_at = ? + WHERE id = ? + `), + insertChunk: db.prepare(` + INSERT INTO rag_chunks (id, document_id, content, embedding, chunk_index, start_offset, end_offset, metadata, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) + `), + getChunks: db.prepare('SELECT * FROM rag_chunks WHERE document_id = ? ORDER BY chunk_index'), + getChunkById: db.prepare('SELECT * FROM rag_chunks WHERE id = ?'), + updateEmbedding: db.prepare('UPDATE rag_chunks SET embedding = ? WHERE id = ?'), + deleteChunks: db.prepare('DELETE FROM rag_chunks WHERE document_id = ?'), + getAllEmbeddings: db.prepare(` + SELECT c.id, c.embedding, c.document_id, d.project_id + FROM rag_chunks c + JOIN rag_documents d ON c.document_id = d.id + WHERE c.embedding IS NOT NULL + `), + getAllEmbeddingsByProject: db.prepare(` + SELECT c.id, c.embedding, c.document_id, d.project_id + FROM rag_chunks c + JOIN rag_documents d ON c.document_id = d.id + WHERE c.embedding IS NOT NULL AND d.project_id = ? + `), + getConfig: db.prepare('SELECT value FROM rag_config WHERE key = ?'), + setConfig: db.prepare('INSERT OR REPLACE INTO rag_config (key, value, updated_at) VALUES (?, ?, ?)'), + stats: db.prepare(` + SELECT + (SELECT COUNT(*) FROM rag_documents) as total_documents, + (SELECT COUNT(*) FROM rag_chunks) as total_chunks, + (SELECT COUNT(*) FROM rag_chunks WHERE embedding IS NOT NULL) as indexed_chunks + `), + projectBreakdown: db.prepare(` + SELECT project_id, COUNT(*) as count + FROM rag_documents + GROUP BY project_id + `), + }; + // Check if FTS is available + let ftsAvailable = false; + try { + db.prepare('SELECT 1 FROM rag_chunks_fts LIMIT 1').get(); + ftsAvailable = true; + } + catch { + ftsAvailable = false; + } + const storage = { + async saveDocument(doc) { + stmts.insertDoc.run(doc.id, doc.projectId, doc.sourceType, doc.sourceId, doc.title, doc.content, JSON.stringify(doc.metadata), doc.chunkCount, doc.createdAt, doc.updatedAt); + }, + async getDocument(id) { + const row = stmts.getDoc.get(id); + return row ? rowToDocument(row) : null; + }, + async listDocuments(options = {}) { + const limit = options.limit ?? 100; + let rows; + if (options.projectId && options.sourceType) { + rows = stmts.listDocsByProjectAndType.all(options.projectId, options.sourceType, limit); + } + else if (options.projectId) { + rows = stmts.listDocsByProject.all(options.projectId, limit); + } + else if (options.sourceType) { + rows = stmts.listDocsByType.all(options.sourceType, limit); + } + else { + rows = stmts.listDocs.all(limit); + } + return rows.map(rowToDocument); + }, + async deleteDocument(id) { + const result = stmts.deleteDoc.run(id); + return result.changes > 0; + }, + async updateDocument(id, updates) { + const doc = await storage.getDocument(id); + if (!doc) + return false; + const newTitle = updates.title ?? doc.title; + const newContent = updates.content ?? doc.content; + const newMetadata = updates.metadata ?? doc.metadata; + const result = stmts.updateDoc.run(newTitle, newContent, JSON.stringify(newMetadata), new Date().toISOString(), id); + return result.changes > 0; + }, + async saveChunks(chunks) { + const insertMany = db.transaction((...args) => { + const inputChunks = args[0]; + for (const chunk of inputChunks) { + stmts.insertChunk.run(chunk.id, chunk.documentId, chunk.content, chunk.embedding ? JSON.stringify(chunk.embedding) : null, chunk.chunkIndex, chunk.startOffset, chunk.endOffset, JSON.stringify(chunk.metadata), chunk.createdAt); + } + }); + insertMany(chunks); + }, + async getChunks(documentId) { + const rows = stmts.getChunks.all(documentId); + return rows.map(rowToChunk); + }, + async getChunkById(id) { + const row = stmts.getChunkById.get(id); + return row ? rowToChunk(row) : null; + }, + async updateChunkEmbedding(chunkId, embedding) { + stmts.updateEmbedding.run(JSON.stringify(embedding), chunkId); + }, + async deleteChunks(documentId) { + const result = stmts.deleteChunks.run(documentId); + return result.changes; + }, + async vectorSearch(embedding, options = {}) { + const topK = options.topK ?? 10; + const minScore = options.minScore ?? 0.5; + // Get all embeddings (optionally filtered by project) + const rows = options.projectId + ? stmts.getAllEmbeddingsByProject.all(options.projectId) + : stmts.getAllEmbeddings.all(); + const chunks = rows.map((row) => ({ + id: row.id, + embedding: JSON.parse(row.embedding), + documentId: row.document_id, + })); + // Perform vector search + const results = vectorSearch(embedding, chunks, topK, minScore); + // Enrich results with full data + const enriched = []; + for (const result of results) { + const chunk = await storage.getChunkById(result.id); + if (chunk) { + const doc = await storage.getDocument(chunk.documentId); + if (doc) { + enriched.push({ + chunk, + document: doc, + score: result.score, + highlights: [ + chunk.content.substring(0, 200) + (chunk.content.length > 200 ? '...' : ''), + ], + }); + } + } + } + return enriched; + }, + async keywordSearch(query, options = {}) { + const limit = options.limit ?? 10; + try { + let rows; + if (ftsAvailable) { + // Use FTS5 search + const ftsQuery = query + .split(/\s+/) + .filter((w) => w.length > 0) + .map((w) => `"${w.replace(/"/g, '""')}"`) + .join(' OR '); + if (!ftsQuery) + return []; + const ftsStmt = options.projectId + ? db.prepare(` + SELECT c.*, d.project_id + FROM rag_chunks_fts fts + JOIN rag_chunks c ON fts.rowid = c.rowid + JOIN rag_documents d ON c.document_id = d.id + WHERE rag_chunks_fts MATCH ? AND d.project_id = ? + ORDER BY rank + LIMIT ? + `) + : db.prepare(` + SELECT c.* + FROM rag_chunks_fts fts + JOIN rag_chunks c ON fts.rowid = c.rowid + WHERE rag_chunks_fts MATCH ? + ORDER BY rank + LIMIT ? + `); + rows = options.projectId + ? ftsStmt.all(ftsQuery, options.projectId, limit) + : ftsStmt.all(ftsQuery, limit); + } + else { + // Fallback to LIKE search + const likePattern = `%${query}%`; + const likeStmt = options.projectId + ? db.prepare(` + SELECT c.* + FROM rag_chunks c + JOIN rag_documents d ON c.document_id = d.id + WHERE c.content LIKE ? AND d.project_id = ? + LIMIT ? + `) + : db.prepare(` + SELECT * FROM rag_chunks WHERE content LIKE ? LIMIT ? + `); + rows = options.projectId + ? likeStmt.all(likePattern, options.projectId, limit) + : likeStmt.all(likePattern, limit); + } + const results = []; + for (const row of rows) { + const chunk = rowToChunk(row); + const doc = await storage.getDocument(chunk.documentId); + if (doc) { + results.push({ + chunk, + document: doc, + score: 0.5, // Fixed score for keyword search + highlights: [ + chunk.content.substring(0, 200) + (chunk.content.length > 200 ? '...' : ''), + ], + }); + } + } + return results; + } + catch { + return []; // Query failed + } + }, + async hybridSearch(query, embedding, options = {}) { + const vectorWeight = options.vectorWeight ?? 0.7; + const topK = options.topK ?? 10; + // Run both searches + const [vectorResults, keywordResults] = await Promise.all([ + storage.vectorSearch(embedding, { ...options, topK: topK * 2 }), + storage.keywordSearch(query, { ...options, limit: topK * 2 }), + ]); + // Combine and deduplicate by chunk ID + const scoreMap = new Map(); + for (const result of vectorResults) { + scoreMap.set(result.chunk.id, { + result, + vectorScore: result.score, + keywordScore: 0, + }); + } + for (const result of keywordResults) { + const existing = scoreMap.get(result.chunk.id); + if (existing) { + existing.keywordScore = result.score; + } + else { + scoreMap.set(result.chunk.id, { + result, + vectorScore: 0, + keywordScore: result.score, + }); + } + } + // Calculate hybrid scores + const hybridResults = Array.from(scoreMap.values()) + .map(({ result, vectorScore, keywordScore }) => ({ + ...result, + score: vectorWeight * vectorScore + (1 - vectorWeight) * keywordScore, + })) + .sort((a, b) => b.score - a.score) + .slice(0, topK); + return hybridResults; + }, + async getStats() { + const stats = stmts.stats.get(); + const breakdown = stmts.projectBreakdown.all(); + const projectBreakdown = {}; + for (const row of breakdown) { + projectBreakdown[row.project_id || 'standalone'] = row.count; + } + return { + totalDocuments: stats.total_documents, + totalChunks: stats.total_chunks, + indexedChunks: stats.indexed_chunks, + projectBreakdown, + }; + }, + async getConfig() { + const configRow = stmts.getConfig.get('main'); + if (configRow) { + return JSON.parse(configRow.value); + } + return getDefaultRAGConfig(); + }, + async updateConfig(config) { + const current = await storage.getConfig(); + const merged = { + ...current, + ...config, + embedding: { ...current.embedding, ...(config.embedding ?? {}) }, + chunking: { ...current.chunking, ...(config.chunking ?? {}) }, + search: { ...current.search, ...(config.search ?? {}) }, + indexing: { ...current.indexing, ...(config.indexing ?? {}) }, + }; + stmts.setConfig.run('main', JSON.stringify(merged), new Date().toISOString()); + }, + async vacuum() { + db.exec('VACUUM'); + }, + async rebuildFTS() { + if (ftsAvailable) { + db.exec("INSERT INTO rag_chunks_fts(rag_chunks_fts) VALUES('rebuild')"); + } + }, + close() { + db.close(); + }, + }; + return storage; +} +// ============================================================================ +// Singleton Instance +// ============================================================================ +let ragStorageInstance = null; +export async function getRAGStorage() { + // Ensure SQLite is loaded + const available = await loadSqlite(); + if (!available) { + throw new Error('RAG storage requires better-sqlite3. Install it with: npm install better-sqlite3'); + } + if (!ragStorageInstance) { + ragStorageInstance = await createRAGStorage(); + } + return ragStorageInstance; +} +export function resetRAGStorage() { + if (ragStorageInstance) { + ragStorageInstance.close(); + ragStorageInstance = null; + } +} +//# sourceMappingURL=rag-storage.js.map \ No newline at end of file diff --git a/dist/rag/rag-storage.js.map b/dist/rag/rag-storage.js.map new file mode 100644 index 0000000..c7b494d --- /dev/null +++ b/dist/rag/rag-storage.js.map @@ -0,0 +1 @@ +{"version":3,"file":"rag-storage.js","sourceRoot":"","sources":["../../src/rag/rag-storage.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/server.d.ts.map b/dist/server.d.ts.map index b70344a..f06e5cf 100644 --- a/dist/server.d.ts.map +++ b/dist/server.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AA69EnE,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CA2LpD;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAK/C"} \ No newline at end of file +{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAk/FnE,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CA6MpD;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAK/C"} \ No newline at end of file diff --git a/dist/server.js b/dist/server.js index 8dffb57..73d2a27 100644 --- a/dist/server.js +++ b/dist/server.js @@ -13,6 +13,8 @@ import { getStorage } from './storage.js'; import { getAdvancedStorage } from './advanced-storage.js'; import { analyzeCriticalPath, getSmartPriorityQueue, compressContext, getCompressionStats, calculateHealthScore, executeBatchOperations, generateTaskSuggestions, } from './intelligent-features.js'; import { addPersonalTodo, listPersonalTodos, completeTodo, listDids, setDailyGoals, setWeeklyGoals, getGoals, remember, recall, listMemories, forget, startTimeTracking, stopTimeTracking, getTimeStats, listPromptTemplates, generatePromptFromContext, generateClaudeMd, saveClaudeMd, getDailyDigest, getProductivityStats, } from './productivity-features.js'; +import { indexDocument, indexProjectContext, search, buildContextFromSearch, deleteDocument as deleteRAGDocument, listDocuments, getRAGStats, getRAGConfig, updateRAGConfig, } from './rag/index.js'; +import { resetEmbeddingProvider } from './rag/embeddings.js'; import { Phase, TaskStatus, AgentRole, EventType, AuditAction, createProject, addTask, addNote, updateTaskStatus, updateTaskNote, setPhase, getTask, getProjectSummary, getProjectAnalytics, exportToMarkdown, cloneProject, createWebhook, createSnapshot, createAuditEntry, createProjectFromTemplate, restoreFromSnapshot, } from './models.js'; // ============================================================================ // Tool Definitions @@ -1102,6 +1104,258 @@ Shows: }, }, }, + // ============================================================================ + // RAG (Retrieval-Augmented Generation) Tools + // ============================================================================ + { + name: 'rag_index_document', + description: `Index a custom document for semantic search. + +Use this to add external documents, notes, or any text content to the RAG system. +Documents are chunked and embedded for later retrieval. + +Returns the indexed document with chunk count.`, + inputSchema: { + type: 'object', + properties: { + title: { + type: 'string', + description: 'Document title for identification', + }, + content: { + type: 'string', + description: 'Full text content to index', + }, + project_id: { + type: 'string', + description: 'Associate with specific project (optional)', + }, + metadata: { + type: 'object', + description: 'Additional metadata to store with document', + }, + }, + required: ['title', 'content'], + }, + }, + { + name: 'rag_index_project', + description: `Index an entire project context for semantic search. + +Indexes the project description, all tasks, and significant notes. +Useful for making project knowledge searchable. + +Returns count of documents and chunks created.`, + inputSchema: { + type: 'object', + properties: { + project_id: { + type: 'string', + description: 'Project ID to index. Uses active project if omitted.', + }, + }, + }, + }, + { + name: 'rag_search', + description: `Search indexed documents using semantic, keyword, or hybrid search. + +Search types: +- vector: Pure semantic search using embeddings +- keyword: Full-text keyword search +- hybrid: Combined vector + keyword (default, best results) + +Returns ranked results with relevance scores.`, + inputSchema: { + type: 'object', + properties: { + query: { + type: 'string', + description: 'Search query text', + }, + project_id: { + type: 'string', + description: 'Limit search to specific project (optional)', + }, + search_type: { + type: 'string', + enum: ['vector', 'keyword', 'hybrid'], + description: 'Search method. Default: hybrid', + }, + top_k: { + type: 'number', + description: 'Number of results to return. Default: 5', + }, + min_score: { + type: 'number', + description: 'Minimum relevance score (0-1). Default: 0.3', + }, + }, + required: ['query'], + }, + }, + { + name: 'rag_query_context', + description: `Get formatted context for prompts based on a query. + +Performs semantic search and formats results into a context string +suitable for including in LLM prompts. + +Returns context string and source references.`, + inputSchema: { + type: 'object', + properties: { + query: { + type: 'string', + description: 'Query to find relevant context for', + }, + project_id: { + type: 'string', + description: 'Limit to specific project (optional)', + }, + max_context_length: { + type: 'number', + description: 'Maximum context length in characters. Default: 4000', + }, + include_metadata: { + type: 'boolean', + description: 'Include document metadata in context. Default: true', + }, + }, + required: ['query'], + }, + }, + { + name: 'rag_list_documents', + description: `List all indexed documents. + +Shows document titles, source types, chunk counts, and project associations. +Useful for understanding what content is available for search.`, + inputSchema: { + type: 'object', + properties: { + project_id: { + type: 'string', + description: 'Filter by project (optional)', + }, + source_type: { + type: 'string', + enum: ['project_context', 'task', 'note', 'custom_document'], + description: 'Filter by source type (optional)', + }, + limit: { + type: 'number', + description: 'Maximum documents to return. Default: 50', + }, + }, + }, + }, + { + name: 'rag_delete_document', + description: `Delete an indexed document and its chunks. + +Removes the document from the search index. +Use rag_list_documents to find document IDs.`, + inputSchema: { + type: 'object', + properties: { + document_id: { + type: 'string', + description: 'Document ID to delete', + }, + }, + required: ['document_id'], + }, + }, + { + name: 'rag_get_stats', + description: `Get RAG system statistics. + +Shows: +- Total documents and chunks +- Indexed vs unindexed chunks +- Documents per project +- Embedding provider and dimensions`, + inputSchema: { + type: 'object', + properties: {}, + }, + }, + { + name: 'rag_configure', + description: `Configure RAG system settings. + +Configure embedding provider, chunking strategy, and search parameters. +Changes take effect for new indexing operations. + +Embedding providers: local, openai, voyage, cohere, custom +Chunking strategies: paragraph, sentence, fixed, semantic`, + inputSchema: { + type: 'object', + properties: { + embedding: { + type: 'object', + description: 'Embedding configuration', + properties: { + provider: { + type: 'string', + enum: ['local', 'openai', 'voyage', 'cohere', 'custom'], + description: 'Embedding provider', + }, + model: { + type: 'string', + description: 'Model name (provider-specific)', + }, + api_key: { + type: 'string', + description: 'API key for cloud providers', + }, + api_endpoint: { + type: 'string', + description: 'Custom API endpoint URL', + }, + }, + }, + chunking: { + type: 'object', + description: 'Chunking configuration', + properties: { + strategy: { + type: 'string', + enum: ['paragraph', 'sentence', 'fixed', 'semantic'], + description: 'Chunking strategy', + }, + chunk_size: { + type: 'number', + description: 'Target chunk size in characters', + }, + chunk_overlap: { + type: 'number', + description: 'Overlap between chunks', + }, + }, + }, + search: { + type: 'object', + description: 'Search configuration', + properties: { + top_k: { + type: 'number', + description: 'Default number of results', + }, + min_score: { + type: 'number', + description: 'Default minimum score', + }, + hybrid_vector_weight: { + type: 'number', + description: 'Vector weight in hybrid search (0-1)', + }, + }, + }, + }, + }, + }, ]; function success(text) { return { content: [{ type: 'text', text }] }; @@ -2153,6 +2407,224 @@ async function handleGetProductivityStats(args) { ${topTags}`); } // ============================================================================ +// RAG Tool Handlers +// ============================================================================ +async function handleRAGIndexDocument(args) { + const title = args.title; + const content = args.content; + const projectId = args.project_id; + const metadata = args.metadata; + if (!title || !content) { + return error('Title and content are required'); + } + const doc = await indexDocument(title, content, { + projectId, + sourceType: 'custom_document', + metadata, + }); + return success(`πŸ“„ Document indexed successfully! + +ID: ${doc.id} +Title: ${doc.title} +Chunks: ${doc.chunkCount} +Project: ${doc.projectId ?? 'none'} +Created: ${doc.createdAt}`); +} +async function handleRAGIndexProject(args) { + const projectId = args.project_id; + const storage = await getStorage(); + let project; + if (projectId) { + project = await storage.loadProject(projectId); + } + else { + project = await storage.getActiveProject(); + } + if (!project) { + return error('No project found. Specify project_id or set an active project.'); + } + const result = await indexProjectContext(project); + return success(`πŸ“š Project indexed successfully! + +Project: ${project.name} +Documents created: ${result.documents.length} +Total chunks: ${result.totalChunks} + +Indexed: +- 1 project context +- ${project.tasks.length} tasks +- ${result.documents.length - 1 - project.tasks.length} significant notes`); +} +async function handleRAGSearch(args) { + const query = args.query; + const projectId = args.project_id; + const searchType = args.search_type; + const topK = args.top_k; + const minScore = args.min_score; + if (!query) { + return error('Query is required'); + } + const result = await search(query, { + projectId, + searchType, + topK, + minScore, + }); + if (result.results.length === 0) { + return success(`πŸ” No results found for: "${query}" + +Try: +- Different search terms +- Lowering min_score threshold +- Using keyword search for exact matches +- Indexing more documents`); + } + const resultList = result.results + .map((r, i) => `${i + 1}. [${(r.score * 100).toFixed(1)}%] ${r.document.title} + ${r.chunk.content.substring(0, 150)}${r.chunk.content.length > 150 ? '...' : ''}`) + .join('\n\n'); + return success(`πŸ” Search Results for: "${query}" + +Found: ${result.totalFound} results +Search time: ${result.searchTimeMs}ms +Embedding provider: ${result.embeddingProvider} + +${resultList}`); +} +async function handleRAGQueryContext(args) { + const query = args.query; + const projectId = args.project_id; + const maxContextLength = args.max_context_length; + const includeMetadata = args.include_metadata; + if (!query) { + return error('Query is required'); + } + const result = await buildContextFromSearch(query, { + projectId, + maxContextLength, + includeMetadata, + }); + if (result.sources.length === 0) { + return success(`πŸ“‹ No relevant context found for: "${query}" + +Try indexing more documents or using different search terms.`); + } + const sourceList = result.sources + .map((s) => `- ${s.title} (${(s.score * 100).toFixed(1)}%)`) + .join('\n'); + return success(`πŸ“‹ Context for: "${query}" + +Sources (${result.sources.length}): +${sourceList} + +--- CONTEXT START --- +${result.context} +--- CONTEXT END --- + +Search time: ${result.searchResult.searchTimeMs}ms +Context length: ${result.context.length} characters`); +} +async function handleRAGListDocuments(args) { + const projectId = args.project_id; + const sourceType = args.source_type; + const limit = args.limit; + const docs = await listDocuments({ + projectId, + sourceType, + limit: limit ?? 50, + }); + if (docs.length === 0) { + return success(`πŸ“„ No documents indexed yet. + +Use rag_index_document or rag_index_project to add content.`); + } + const docList = docs + .map((d) => `- [${d.id.substring(0, 8)}] ${d.title} + Type: ${d.sourceType} | Chunks: ${d.chunkCount} | Project: ${d.projectId ?? 'none'}`) + .join('\n'); + return success(`πŸ“„ Indexed Documents (${docs.length}) + +${docList}`); +} +async function handleRAGDeleteDocument(args) { + const documentId = args.document_id; + if (!documentId) { + return error('document_id is required'); + } + const deleted = await deleteRAGDocument(documentId); + if (deleted) { + return success(`πŸ—‘οΈ Document deleted: ${documentId}`); + } + else { + return error(`Document not found: ${documentId}`); + } +} +async function handleRAGGetStats() { + const stats = await getRAGStats(); + const projectBreakdown = Object.entries(stats.projectBreakdown) + .map(([pid, count]) => ` ${pid}: ${count} documents`) + .join('\n') || ' (no project associations)'; + return success(`πŸ“Š RAG System Statistics + +Documents: ${stats.totalDocuments} +Chunks: ${stats.totalChunks} +Indexed chunks: ${stats.indexedChunks} (${((stats.indexedChunks / Math.max(stats.totalChunks, 1)) * 100).toFixed(1)}%) + +Embedding Provider: ${stats.embeddingProvider} +Embedding Dimensions: ${stats.embeddingDimensions} + +Documents by Project: +${projectBreakdown}`); +} +async function handleRAGConfigure(args) { + const embeddingConfig = args.embedding; + const chunkingConfig = args.chunking; + const searchConfig = args.search; + const updates = {}; + if (embeddingConfig) { + updates.embedding = { + provider: embeddingConfig.provider, + model: embeddingConfig.model, + apiKey: embeddingConfig.api_key, + apiEndpoint: embeddingConfig.api_endpoint, + }; + // Reset embedding provider to pick up new config + resetEmbeddingProvider(); + } + if (chunkingConfig) { + updates.chunking = { + strategy: chunkingConfig.strategy, + chunkSize: chunkingConfig.chunk_size, + chunkOverlap: chunkingConfig.chunk_overlap, + }; + } + if (searchConfig) { + updates.search = { + topK: searchConfig.top_k, + minScore: searchConfig.min_score, + hybridVectorWeight: searchConfig.hybrid_vector_weight, + }; + } + await updateRAGConfig(updates); + const config = await getRAGConfig(); + return success(`βš™οΈ RAG Configuration Updated + +Embedding: + Provider: ${config.embedding.provider} + Model: ${config.embedding.model} + Dimensions: ${config.embedding.dimensions} + +Chunking: + Strategy: ${config.chunking.strategy} + Chunk size: ${config.chunking.chunkSize} + Overlap: ${config.chunking.chunkOverlap} + +Search: + Top K: ${config.search.topK} + Min score: ${config.search.minScore} + Hybrid vector weight: ${config.search.hybridVectorWeight}`); +} +// ============================================================================ // Server Setup // ============================================================================ export async function createServer() { @@ -2277,6 +2749,23 @@ export async function createServer() { return await handleGetDailyDigest(args ?? {}); case 'get_productivity_stats': return await handleGetProductivityStats(args ?? {}); + // RAG (Retrieval-Augmented Generation) + case 'rag_index_document': + return await handleRAGIndexDocument(args ?? {}); + case 'rag_index_project': + return await handleRAGIndexProject(args ?? {}); + case 'rag_search': + return await handleRAGSearch(args ?? {}); + case 'rag_query_context': + return await handleRAGQueryContext(args ?? {}); + case 'rag_list_documents': + return await handleRAGListDocuments(args ?? {}); + case 'rag_delete_document': + return await handleRAGDeleteDocument(args ?? {}); + case 'rag_get_stats': + return await handleRAGGetStats(); + case 'rag_configure': + return await handleRAGConfigure(args ?? {}); default: return error(`Unknown tool: ${name}`); } diff --git a/dist/server.js.map b/dist/server.js.map index 0502a3e..0d652f9 100644 --- a/dist/server.js.map +++ b/dist/server.js.map @@ -1 +1 @@ -{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/docs/API.md b/docs/API.md index 64099dd..1b6f859 100644 --- a/docs/API.md +++ b/docs/API.md @@ -775,3 +775,212 @@ curl -X POST http://localhost:3210/api/memory \ # Recall later curl "http://localhost:3210/api/memory?key=code_style" ``` + +--- + +## RAG (Retrieval-Augmented Generation) + +CortexFlow includes a RAG module for semantic document search and context retrieval. + +### RAG MCP Tools + +#### rag_index_document + +Index a document for semantic search. + +**Parameters:** + +- `title` (required): Document title +- `content` (required): Document content +- `source_type` (optional): custom_document | project_task | project_note | project_decision +- `project_id` (optional): Associate with project +- `metadata` (optional): Additional metadata object +- `skip_embedding` (optional): Skip embedding generation (for testing) + +**Returns:** Indexed document with ID and chunk count. + +--- + +#### rag_index_project + +Index entire project context for semantic search. + +**Parameters:** + +- `project_id` (optional): Project ID. Defaults to active project. +- `include_tasks` (optional): Include tasks. Default: true +- `include_notes` (optional): Include notes. Default: true +- `include_decisions` (optional): Include decisions. Default: true + +**Returns:** Array of indexed documents. + +--- + +#### rag_search + +Search indexed documents. + +**Parameters:** + +- `query` (required): Search query +- `search_type` (optional): vector | keyword | hybrid. Default: hybrid +- `limit` (optional): Max results. Default: 5 +- `min_score` (optional): Minimum relevance score (0-1) +- `project_id` (optional): Filter by project +- `source_type` (optional): Filter by source type + +**Returns:** Search results with relevance scores. + +--- + +#### rag_query_context + +Get formatted context for AI prompts. + +**Parameters:** + +- `query` (required): Search query +- `search_type` (optional): vector | keyword | hybrid +- `limit` (optional): Max chunks to include +- `max_tokens` (optional): Maximum token budget + +**Returns:** Formatted context string and source references. + +--- + +#### rag_list_documents + +List all indexed documents. + +**Parameters:** + +- `project_id` (optional): Filter by project +- `source_type` (optional): Filter by source type +- `limit` (optional): Max documents + +**Returns:** Array of document summaries. + +--- + +#### rag_delete_document + +Delete a document from the index. + +**Parameters:** + +- `document_id` (required): Document ID to delete + +**Returns:** Success confirmation. + +--- + +#### rag_get_stats + +Get RAG statistics. + +**Returns:** Document count, chunk count, embedding provider info, configuration. + +--- + +#### rag_configure + +Configure RAG settings. + +**Parameters:** + +- `embedding` (optional): Embedding configuration + - `provider`: local | openai | voyage | cohere | custom + - `model`: Model name + - `dimensions`: Vector dimensions + - `batchSize`: Batch size for embedding + - `apiKey`: API key (for remote providers) + - `endpoint`: Custom endpoint URL +- `chunking` (optional): Chunking configuration + - `strategy`: paragraph | sentence | fixed | semantic + - `chunkSize`: Target chunk size + - `chunkOverlap`: Overlap between chunks + - `minChunkSize`: Minimum chunk size + - `maxChunkSize`: Maximum chunk size +- `search` (optional): Search configuration + - `topK`: Default result limit + - `minScore`: Default minimum score + - `hybridAlpha`: Vector weight in hybrid search (0-1) + +**Returns:** Updated configuration. + +--- + +### RAG HTTP Endpoints + +| Method | Endpoint | Description | +| ------ | ------------------------- | --------------------- | +| POST | `/api/rag/index-document` | Index a document | +| POST | `/api/rag/index-project` | Index project context | +| GET | `/api/rag/search` | Search documents | +| POST | `/api/rag/search` | Search (POST) | +| GET | `/api/rag/context` | Get formatted context | +| POST | `/api/rag/context` | Get context (POST) | +| GET | `/api/rag/documents` | List documents | +| DELETE | `/api/rag/documents/:id` | Delete document | +| GET | `/api/rag/stats` | Get RAG statistics | +| GET | `/api/rag/config` | Get configuration | +| PUT | `/api/rag/config` | Update configuration | + +### RAG Example Workflow + +```bash +# 1. Index documentation +curl -X POST http://localhost:3210/api/rag/index-document \ + -H "Content-Type: application/json" \ + -d '{ + "title": "Authentication Guide", + "content": "# Authentication\n\nUse JWT tokens for API authentication...", + "source_type": "custom_document", + "metadata": {"category": "security", "version": "1.0"} + }' + +# 2. Index project context +curl -X POST http://localhost:3210/api/rag/index-project + +# 3. Search for relevant information +curl "http://localhost:3210/api/rag/search?query=authentication&type=hybrid&limit=5" + +# 4. Get formatted context for prompts +curl "http://localhost:3210/api/rag/context?query=how%20to%20implement%20authentication" + +# 5. View statistics +curl http://localhost:3210/api/rag/stats + +# 6. Configure embedding provider +curl -X PUT http://localhost:3210/api/rag/config \ + -H "Content-Type: application/json" \ + -d '{ + "embedding": { + "provider": "openai", + "model": "text-embedding-3-small", + "apiKey": "sk-..." + }, + "search": {"topK": 10, "hybridAlpha": 0.7} + }' +``` + +### Embedding Providers + +| Provider | Model | Dimensions | Requires API Key | +| -------- | ----------------------- | ---------- | ---------------- | +| local | Xenova/all-MiniLM-L6-v2 | 384 | No | +| openai | text-embedding-3-small | 1536 | Yes | +| voyage | voyage-2 | 1024 | Yes | +| cohere | embed-english-v3.0 | 1024 | Yes | +| custom | Any | Custom | Depends | + +### Chunking Strategies + +| Strategy | Description | Use Case | +| --------- | --------------------------------- | -------------- | +| paragraph | Split on double newlines | General text | +| sentence | Split on sentence boundaries | Q&A, detailed | +| fixed | Fixed character size with overlap | Uniform chunks | +| semantic | Split on headers and code blocks | Technical docs | + +> **Note:** RAG requires `better-sqlite3` native module. Functions will throw errors on platforms without native module support. diff --git a/package.json b/package.json index 8c275c7..e6e6563 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,8 @@ "bench:storage": "tsx benchmarks/index.ts --storage", "bench:intelligent": "tsx benchmarks/index.ts --intelligent", "bench:http": "tsx benchmarks/index.ts --http", - "bench:ci": "tsx benchmarks/index.ts --storage --intelligent --tokens --handoff --memory" + "bench:rag": "tsx benchmarks/index.ts --rag", + "bench:ci": "tsx benchmarks/index.ts --storage --intelligent --tokens --handoff --memory --rag" }, "keywords": [ "mcp", @@ -58,7 +59,11 @@ "context-sharing", "task-management", "ai-collaboration", - "ai-agents" + "ai-agents", + "rag", + "retrieval-augmented-generation", + "semantic-search", + "vector-search" ], "author": { "name": "Mithun Gowda B", @@ -71,9 +76,14 @@ "url": "https://github.com/sponsors/mithun50" }, "dependencies": { - "@modelcontextprotocol/sdk": "^1.0.0" + "@modelcontextprotocol/sdk": "^1.0.0", + "better-sqlite3": "^11.6.0" + }, + "optionalDependencies": { + "@xenova/transformers": "^2.17.0" }, "devDependencies": { + "@types/better-sqlite3": "^7.6.11", "@eslint/js": "^9.0.0", "@types/jest": "^29.5.12", "@types/node": "^20.10.0", diff --git a/src/advanced-storage.ts b/src/advanced-storage.ts index 99cff06..0c89a4b 100644 --- a/src/advanced-storage.ts +++ b/src/advanced-storage.ts @@ -17,6 +17,7 @@ import { BUILT_IN_TEMPLATES, createWebhookEvent, } from './models.js'; +import { RAGStorage, getRAGStorage } from './rag/rag-storage.js'; // ============================================================================ // Storage Paths @@ -428,6 +429,7 @@ export interface AdvancedStorage { templates: TemplateStorage; audit: AuditStorage; events: EventDispatcher; + rag: RAGStorage; } let advancedStorageInstance: AdvancedStorage | null = null; @@ -440,6 +442,7 @@ export async function getAdvancedStorage(): Promise { templates: await createTemplateStorage(), audit: await createAuditStorage(), events: await createEventDispatcher(), + rag: await getRAGStorage(), }; } return advancedStorageInstance; diff --git a/src/http-server.ts b/src/http-server.ts index e5736c7..1932cff 100644 --- a/src/http-server.ts +++ b/src/http-server.ts @@ -50,6 +50,8 @@ import { TaskStatus, AgentRole, EventType, + EmbeddingProvider, + ChunkingStrategy, createProject, addTask, addNote, @@ -67,6 +69,18 @@ import { createProjectFromTemplate, restoreFromSnapshot, } from './models.js'; +import { + indexDocument, + indexProjectContext, + search, + buildContextFromSearch, + deleteDocument, + listDocuments, + getRAGStats, + getRAGConfig, + updateRAGConfig, +} from './rag/index.js'; +import { resetEmbeddingProvider } from './rag/embeddings.js'; const PORT = parseInt(process.env.CORTEXFLOW_PORT ?? '3210', 10); @@ -1209,6 +1223,245 @@ async function handleProductivityStats(req: IncomingMessage, res: ServerResponse error(res, 'Method not allowed', 405); } +// ============================================================================ +// RAG Handlers +// ============================================================================ + +async function handleRAGDocuments(req: IncomingMessage, res: ServerResponse): Promise { + const url = new URL(req.url ?? '/', `http://localhost:${PORT}`); + const parts = url.pathname.split('/'); + + // DELETE /api/rag/documents/:id + if (parts.length >= 5 && req.method === 'DELETE') { + const documentId = parts[4]; + const deleted = await deleteDocument(documentId); + if (deleted) { + json(res, { success: true, documentId }); + } else { + error(res, 'Document not found', 404); + } + return; + } + + // GET /api/rag/documents - List documents + if (req.method === 'GET') { + const projectId = url.searchParams.get('project_id') ?? undefined; + const sourceType = url.searchParams.get('source_type') ?? undefined; + const limit = parseInt(url.searchParams.get('limit') ?? '50', 10); + + const docs = await listDocuments({ projectId, sourceType, limit }); + json(res, { documents: docs, count: docs.length }); + return; + } + + error(res, 'Method not allowed', 405); +} + +async function handleRAGIndex(req: IncomingMessage, res: ServerResponse): Promise { + const url = new URL(req.url ?? '/', `http://localhost:${PORT}`); + + // POST /api/rag/index/document - Index a document + if (url.pathname.endsWith('/document') && req.method === 'POST') { + const body = await parseBody(req); + if (!body.title || !body.content) { + error(res, 'title and content are required', 400); + return; + } + + const doc = await indexDocument(body.title as string, body.content as string, { + projectId: body.project_id as string | undefined, + sourceType: 'custom_document', + metadata: body.metadata as Record | undefined, + }); + + json(res, doc, 201); + return; + } + + // POST /api/rag/index/project - Index a project + if (url.pathname.endsWith('/project') && req.method === 'POST') { + const body = await parseBody(req); + const projectId = body.project_id as string | undefined; + + const storage = await getStorage(); + let project; + if (projectId) { + project = await storage.loadProject(projectId); + } else { + project = await storage.getActiveProject(); + } + + if (!project) { + error(res, 'No project found', 404); + return; + } + + const result = await indexProjectContext(project); + json( + res, + { + project: project.name, + projectId: project.id, + documentsCreated: result.documents.length, + totalChunks: result.totalChunks, + }, + 201 + ); + return; + } + + error(res, 'Method not allowed', 405); +} + +async function handleRAGSearch(req: IncomingMessage, res: ServerResponse): Promise { + const url = new URL(req.url ?? '/', `http://localhost:${PORT}`); + + if (req.method === 'GET' || req.method === 'POST') { + let query: string; + let projectId: string | undefined; + let searchType: 'vector' | 'keyword' | 'hybrid' | undefined; + let topK: number | undefined; + let minScore: number | undefined; + + if (req.method === 'GET') { + query = url.searchParams.get('query') ?? ''; + projectId = url.searchParams.get('project_id') ?? undefined; + searchType = (url.searchParams.get('search_type') as any) ?? undefined; + topK = url.searchParams.get('top_k') + ? parseInt(url.searchParams.get('top_k')!, 10) + : undefined; + minScore = url.searchParams.get('min_score') + ? parseFloat(url.searchParams.get('min_score')!) + : undefined; + } else { + const body = await parseBody(req); + query = body.query as string; + projectId = body.project_id as string | undefined; + searchType = body.search_type as any; + topK = body.top_k as number | undefined; + minScore = body.min_score as number | undefined; + } + + if (!query) { + error(res, 'query is required', 400); + return; + } + + const result = await search(query, { + projectId, + searchType, + topK, + minScore, + }); + + json(res, result); + return; + } + + error(res, 'Method not allowed', 405); +} + +async function handleRAGContext(req: IncomingMessage, res: ServerResponse): Promise { + const url = new URL(req.url ?? '/', `http://localhost:${PORT}`); + + if (req.method === 'GET' || req.method === 'POST') { + let query: string; + let projectId: string | undefined; + let maxContextLength: number | undefined; + let includeMetadata: boolean | undefined; + + if (req.method === 'GET') { + query = url.searchParams.get('query') ?? ''; + projectId = url.searchParams.get('project_id') ?? undefined; + maxContextLength = url.searchParams.get('max_context_length') + ? parseInt(url.searchParams.get('max_context_length')!, 10) + : undefined; + includeMetadata = url.searchParams.get('include_metadata') !== 'false'; + } else { + const body = await parseBody(req); + query = body.query as string; + projectId = body.project_id as string | undefined; + maxContextLength = body.max_context_length as number | undefined; + includeMetadata = body.include_metadata as boolean | undefined; + } + + if (!query) { + error(res, 'query is required', 400); + return; + } + + const result = await buildContextFromSearch(query, { + projectId, + maxContextLength, + includeMetadata, + }); + + json(res, result); + return; + } + + error(res, 'Method not allowed', 405); +} + +async function handleRAGStats(req: IncomingMessage, res: ServerResponse): Promise { + if (req.method === 'GET') { + const stats = await getRAGStats(); + json(res, stats); + return; + } + + error(res, 'Method not allowed', 405); +} + +async function handleRAGConfig(req: IncomingMessage, res: ServerResponse): Promise { + if (req.method === 'GET') { + const config = await getRAGConfig(); + json(res, config); + return; + } + + if (req.method === 'PUT' || req.method === 'POST') { + const body = await parseBody(req); + const updates: Parameters[0] = {}; + + if (body.embedding) { + const e = body.embedding as Record; + updates.embedding = { + provider: e.provider as EmbeddingProvider | undefined, + model: e.model as string | undefined, + apiKey: e.api_key as string | undefined, + apiEndpoint: e.api_endpoint as string | undefined, + }; + resetEmbeddingProvider(); + } + + if (body.chunking) { + const c = body.chunking as Record; + updates.chunking = { + strategy: c.strategy as ChunkingStrategy | undefined, + chunkSize: c.chunk_size as number | undefined, + chunkOverlap: c.chunk_overlap as number | undefined, + }; + } + + if (body.search) { + const s = body.search as Record; + updates.search = { + topK: s.top_k as number | undefined, + minScore: s.min_score as number | undefined, + hybridVectorWeight: s.hybrid_vector_weight as number | undefined, + }; + } + + await updateRAGConfig(updates); + const config = await getRAGConfig(); + json(res, config); + return; + } + + error(res, 'Method not allowed', 405); +} + // ============================================================================ // OpenAPI Spec (for ChatGPT Actions / OpenAI Plugins) // ============================================================================ @@ -1519,6 +1772,18 @@ async function handleRequest(req: IncomingMessage, res: ServerResponse): Promise await handleDigest(req, res); } else if (url.pathname.startsWith('/api/productivity-stats')) { await handleProductivityStats(req, res); + } else if (url.pathname.startsWith('/api/rag/index')) { + await handleRAGIndex(req, res); + } else if (url.pathname.startsWith('/api/rag/search')) { + await handleRAGSearch(req, res); + } else if (url.pathname.startsWith('/api/rag/context')) { + await handleRAGContext(req, res); + } else if (url.pathname.startsWith('/api/rag/documents')) { + await handleRAGDocuments(req, res); + } else if (url.pathname.startsWith('/api/rag/stats')) { + await handleRAGStats(req, res); + } else if (url.pathname.startsWith('/api/rag/config')) { + await handleRAGConfig(req, res); } else { error(res, 'Not found', 404); } @@ -1586,5 +1851,17 @@ export function runHttpServer(): void { console.log(' GET /api/export-md - Export for AI (claude/gemini/chatgpt)'); console.log(' GET /api/digest - Get daily digest'); console.log(' GET /api/productivity-stats - Get productivity stats'); + console.log(''); + console.log('RAG (Retrieval-Augmented Generation):'); + console.log(' POST /api/rag/index/document - Index a document'); + console.log(' POST /api/rag/index/project - Index project context'); + console.log(' GET /api/rag/search - Semantic/hybrid search'); + console.log(' POST /api/rag/search - Search with body'); + console.log(' GET /api/rag/context - Get context for prompts'); + console.log(' GET /api/rag/documents - List indexed documents'); + console.log(' DELETE /api/rag/documents/:id- Delete document'); + console.log(' GET /api/rag/stats - Get RAG statistics'); + console.log(' GET /api/rag/config - Get RAG configuration'); + console.log(' PUT /api/rag/config - Update RAG configuration'); }); } diff --git a/src/models.ts b/src/models.ts index c869953..88119b0 100644 --- a/src/models.ts +++ b/src/models.ts @@ -1015,3 +1015,186 @@ export function filterAuditLog( return filtered; } + +// ============================================================================ +// RAG Types +// ============================================================================ + +export type RAGSourceType = 'project_context' | 'task' | 'note' | 'custom_document'; + +export type EmbeddingProvider = 'local' | 'openai' | 'voyage' | 'cohere' | 'custom'; + +export type ChunkingStrategy = 'fixed' | 'sentence' | 'paragraph' | 'semantic'; + +export type RAGSearchType = 'vector' | 'keyword' | 'hybrid'; + +export interface RAGDocument { + id: string; + projectId: string | null; + sourceType: RAGSourceType; + sourceId: string | null; + title: string; + content: string; + metadata: Record; + chunkCount: number; + createdAt: string; + updatedAt: string; +} + +export interface RAGChunk { + id: string; + documentId: string; + content: string; + embedding: number[] | null; + chunkIndex: number; + startOffset: number; + endOffset: number; + metadata: Record; + createdAt: string; +} + +export interface RAGSearchResult { + chunk: RAGChunk; + document: RAGDocument; + score: number; + highlights: string[]; +} + +export interface RAGQueryResult { + query: string; + results: RAGSearchResult[]; + totalFound: number; + searchTimeMs: number; + embeddingProvider: string; +} + +export interface EmbeddingConfig { + provider: EmbeddingProvider; + model: string; + dimensions: number; + apiKey?: string; + apiEndpoint?: string; + batchSize: number; +} + +export interface ChunkingConfig { + strategy: ChunkingStrategy; + chunkSize: number; + chunkOverlap: number; + minChunkSize: number; + maxChunkSize: number; +} + +export interface RAGSearchConfig { + topK: number; + minScore: number; + rerank: boolean; + hybridVectorWeight: number; +} + +export interface RAGIndexingConfig { + autoIndex: boolean; + indexOnCreate: boolean; + batchSize: number; +} + +export interface RAGConfig { + embedding: EmbeddingConfig; + chunking: ChunkingConfig; + search: RAGSearchConfig; + indexing: RAGIndexingConfig; +} + +export interface RAGStats { + totalDocuments: number; + totalChunks: number; + indexedChunks: number; + projectBreakdown: Record; + embeddingProvider: string; + embeddingDimensions: number; +} + +/** + * Deep partial type for RAG configuration updates. + * Allows partial updates to nested configuration objects. + */ +export interface RAGConfigUpdate { + embedding?: Partial; + chunking?: Partial; + search?: Partial; + indexing?: Partial; +} + +// ============================================================================ +// RAG Factory Functions +// ============================================================================ + +export function createRAGDocument( + title: string, + content: string, + options: Partial> = {} +): RAGDocument { + const now = new Date().toISOString(); + return { + id: randomUUID().slice(0, 8), + projectId: options.projectId ?? null, + sourceType: options.sourceType ?? 'custom_document', + sourceId: options.sourceId ?? null, + title, + content, + metadata: options.metadata ?? {}, + chunkCount: options.chunkCount ?? 0, + createdAt: now, + updatedAt: now, + }; +} + +export function createRAGChunk( + documentId: string, + content: string, + chunkIndex: number, + options: Partial< + Omit + > = {} +): RAGChunk { + return { + id: randomUUID().slice(0, 8), + documentId, + content, + embedding: options.embedding ?? null, + chunkIndex, + startOffset: options.startOffset ?? 0, + endOffset: options.endOffset ?? content.length, + metadata: options.metadata ?? {}, + createdAt: new Date().toISOString(), + }; +} + +export function getDefaultRAGConfig(): RAGConfig { + return { + embedding: { + provider: 'local', + model: 'Xenova/all-MiniLM-L6-v2', + dimensions: 384, + batchSize: 32, + }, + chunking: { + strategy: 'paragraph', + chunkSize: 512, + chunkOverlap: 50, + minChunkSize: 100, + maxChunkSize: 2000, + }, + search: { + topK: 10, + minScore: 0.5, + rerank: false, + hybridVectorWeight: 0.7, + }, + indexing: { + autoIndex: true, + indexOnCreate: true, + batchSize: 100, + }, + }; +} diff --git a/src/rag/chunking.ts b/src/rag/chunking.ts new file mode 100644 index 0000000..e4c6013 --- /dev/null +++ b/src/rag/chunking.ts @@ -0,0 +1,392 @@ +/** + * CortexFlow - Document Chunking Strategies + * + * Provides different strategies for splitting documents into chunks + * suitable for embedding and retrieval. + */ + +import { ChunkingConfig } from '../models.js'; + +// ============================================================================ +// Chunking Interface +// ============================================================================ + +export interface ChunkResult { + content: string; + startOffset: number; + endOffset: number; + index: number; +} + +// ============================================================================ +// Paragraph Chunking +// ============================================================================ + +/** + * Split text by paragraphs (double newlines) + * Groups small paragraphs together to meet minimum chunk size + */ +function chunkByParagraph(text: string, config: ChunkingConfig): ChunkResult[] { + const paragraphs = text.split(/\n\s*\n/); + const chunks: ChunkResult[] = []; + let currentChunk = ''; + let currentStart = 0; + let chunkIndex = 0; + + for (const para of paragraphs) { + const trimmed = para.trim(); + if (!trimmed) continue; + + // Find the actual position in original text + const paraStart = text.indexOf(para, currentStart); + + if (currentChunk.length + trimmed.length > config.maxChunkSize && currentChunk.length > 0) { + // Current chunk is full, save it + if (currentChunk.length >= config.minChunkSize) { + const chunkStart = text.indexOf(currentChunk.trim()); + chunks.push({ + content: currentChunk.trim(), + startOffset: chunkStart >= 0 ? chunkStart : currentStart, + endOffset: chunkStart >= 0 ? chunkStart + currentChunk.trim().length : paraStart, + index: chunkIndex++, + }); + } + currentChunk = trimmed; + currentStart = paraStart; + } else { + currentChunk += (currentChunk ? '\n\n' : '') + trimmed; + } + } + + // Don't forget the last chunk + if (currentChunk.length >= config.minChunkSize) { + const chunkStart = text.indexOf(currentChunk.trim(), currentStart); + chunks.push({ + content: currentChunk.trim(), + startOffset: chunkStart >= 0 ? chunkStart : currentStart, + endOffset: chunkStart >= 0 ? chunkStart + currentChunk.trim().length : text.length, + index: chunkIndex, + }); + } + + return chunks; +} + +// ============================================================================ +// Sentence Chunking +// ============================================================================ + +/** + * Split text by sentences + * Groups sentences together until target chunk size + */ +function chunkBySentence(text: string, config: ChunkingConfig): ChunkResult[] { + // Match sentences (including ending punctuation) + const sentenceRegex = /[^.!?]+[.!?]+\s*/g; + const sentences: string[] = []; + let match; + + while ((match = sentenceRegex.exec(text)) !== null) { + sentences.push(match[0]); + } + + // Handle text without sentence terminators + if (sentences.length === 0) { + sentences.push(text); + } + + const chunks: ChunkResult[] = []; + let currentChunk = ''; + let currentStart = 0; + let chunkIndex = 0; + let offset = 0; + + for (const sentence of sentences) { + const trimmed = sentence.trim(); + if (!trimmed) { + offset += sentence.length; + continue; + } + + if (currentChunk.length + trimmed.length > config.chunkSize && currentChunk.length > 0) { + // Current chunk is full + if (currentChunk.length >= config.minChunkSize) { + chunks.push({ + content: currentChunk.trim(), + startOffset: currentStart, + endOffset: offset, + index: chunkIndex++, + }); + } + currentChunk = trimmed; + currentStart = offset; + } else { + currentChunk += (currentChunk ? ' ' : '') + trimmed; + } + + offset += sentence.length; + } + + // Last chunk + if (currentChunk.length >= config.minChunkSize) { + chunks.push({ + content: currentChunk.trim(), + startOffset: currentStart, + endOffset: text.length, + index: chunkIndex, + }); + } + + return chunks; +} + +// ============================================================================ +// Fixed Size Chunking +// ============================================================================ + +/** + * Split text into fixed-size chunks with overlap + */ +function chunkByFixed(text: string, config: ChunkingConfig): ChunkResult[] { + const chunks: ChunkResult[] = []; + let start = 0; + let chunkIndex = 0; + + while (start < text.length) { + let end = Math.min(start + config.chunkSize, text.length); + + // Try to break at word boundary + if (end < text.length) { + const lastSpace = text.lastIndexOf(' ', end); + if (lastSpace > start + config.minChunkSize) { + end = lastSpace; + } + } + + const chunk = text.slice(start, end).trim(); + + if (chunk.length >= config.minChunkSize) { + chunks.push({ + content: chunk, + startOffset: start, + endOffset: end, + index: chunkIndex++, + }); + } + + // Move start with overlap + start = end - config.chunkOverlap; + if (start >= text.length - config.minChunkSize) { + break; + } + } + + return chunks; +} + +// ============================================================================ +// Semantic Chunking +// ============================================================================ + +/** + * Split text by semantic boundaries (headers, sections) + * Falls back to paragraph chunking for unstructured text + */ +function chunkBySemantic(text: string, config: ChunkingConfig): ChunkResult[] { + // Detect markdown headers + const headerRegex = /^#{1,6}\s+.+$/gm; + const headers: { match: string; index: number }[] = []; + let match; + + while ((match = headerRegex.exec(text)) !== null) { + headers.push({ match: match[0], index: match.index }); + } + + // If no headers, try detecting other section markers + if (headers.length === 0) { + // Try double-newline separated sections + return chunkByParagraph(text, config); + } + + // Split by headers + const chunks: ChunkResult[] = []; + let chunkIndex = 0; + + for (let i = 0; i < headers.length; i++) { + const start = headers[i].index; + const end = i < headers.length - 1 ? headers[i + 1].index : text.length; + const section = text.slice(start, end).trim(); + + // If section is too large, sub-chunk it + if (section.length > config.maxChunkSize) { + const subChunks = chunkByParagraph(section, config); + for (const subChunk of subChunks) { + chunks.push({ + content: subChunk.content, + startOffset: start + subChunk.startOffset, + endOffset: start + subChunk.endOffset, + index: chunkIndex++, + }); + } + } else if (section.length >= config.minChunkSize) { + chunks.push({ + content: section, + startOffset: start, + endOffset: end, + index: chunkIndex++, + }); + } + } + + // Handle text before first header + if (headers.length > 0 && headers[0].index > config.minChunkSize) { + const preamble = text.slice(0, headers[0].index).trim(); + if (preamble.length >= config.minChunkSize) { + chunks.unshift({ + content: preamble, + startOffset: 0, + endOffset: headers[0].index, + index: 0, + }); + // Re-index all chunks + for (let i = 1; i < chunks.length; i++) { + chunks[i].index = i; + } + } + } + + return chunks; +} + +// ============================================================================ +// Main Chunking Function +// ============================================================================ + +/** + * Chunk document using specified strategy + */ +export function chunkDocument(text: string, config: ChunkingConfig): ChunkResult[] { + if (!text || text.trim().length === 0) { + return []; + } + + // Normalize whitespace + const normalizedText = text.replace(/\r\n/g, '\n'); + + switch (config.strategy) { + case 'paragraph': + return chunkByParagraph(normalizedText, config); + case 'sentence': + return chunkBySentence(normalizedText, config); + case 'fixed': + return chunkByFixed(normalizedText, config); + case 'semantic': + return chunkBySemantic(normalizedText, config); + default: + return chunkByParagraph(normalizedText, config); + } +} + +// ============================================================================ +// Utility Functions +// ============================================================================ + +/** + * Estimate token count (rough approximation: ~4 chars per token) + */ +export function estimateTokenCount(text: string): number { + return Math.ceil(text.length / 4); +} + +/** + * Get recommended chunk size for a given embedding model + */ +export function getRecommendedChunkSize(model: string): number { + // Most embedding models have max token limits + const modelLimits: Record = { + 'text-embedding-3-small': 8191, + 'text-embedding-3-large': 8191, + 'text-embedding-ada-002': 8191, + 'Xenova/all-MiniLM-L6-v2': 512, + 'voyage-2': 4000, + 'embed-english-v3.0': 512, + }; + + const maxTokens = modelLimits[model] || 512; + // Use ~80% of max to leave room for special tokens + return Math.floor(maxTokens * 0.8 * 4); // Convert tokens to chars +} + +/** + * Merge small consecutive chunks + */ +export function mergeSmallChunks(chunks: ChunkResult[], minSize: number): ChunkResult[] { + const merged: ChunkResult[] = []; + let current: ChunkResult | null = null; + + for (const chunk of chunks) { + if (!current) { + current = { ...chunk }; + continue; + } + + if ( + current.content.length < minSize && + current.content.length + chunk.content.length < minSize * 3 + ) { + // Merge chunks + current = { + content: current.content + '\n\n' + chunk.content, + startOffset: current.startOffset, + endOffset: chunk.endOffset, + index: current.index, + }; + } else { + merged.push(current); + current = { ...chunk, index: merged.length }; + } + } + + if (current) { + current.index = merged.length; + merged.push(current); + } + + return merged; +} + +/** + * Split oversized chunk into smaller pieces + */ +export function splitOversizedChunk(chunk: ChunkResult, maxSize: number): ChunkResult[] { + if (chunk.content.length <= maxSize) { + return [chunk]; + } + + const pieces: ChunkResult[] = []; + let start = 0; + let pieceIndex = 0; + + while (start < chunk.content.length) { + let end = Math.min(start + maxSize, chunk.content.length); + + // Try to break at word boundary + if (end < chunk.content.length) { + const lastSpace = chunk.content.lastIndexOf(' ', end); + if (lastSpace > start) { + end = lastSpace; + } + } + + pieces.push({ + content: chunk.content.slice(start, end).trim(), + startOffset: chunk.startOffset + start, + endOffset: chunk.startOffset + end, + index: pieceIndex++, + }); + + start = end; + } + + return pieces; +} diff --git a/src/rag/embeddings.ts b/src/rag/embeddings.ts new file mode 100644 index 0000000..2424d44 --- /dev/null +++ b/src/rag/embeddings.ts @@ -0,0 +1,475 @@ +/** + * CortexFlow - Embedding Providers + * + * Configurable embedding system supporting: + * - Local models via transformers.js (optional dependency) + * - OpenAI API + * - Voyage AI API + * - Cohere API + * - Custom endpoints + */ + +import { EmbeddingConfig, EmbeddingProvider as EmbeddingProviderType } from '../models.js'; + +// ============================================================================ +// Embedding Provider Interface +// ============================================================================ + +export interface EmbeddingProviderInstance { + name: string; + dimensions: number; + maxBatchSize: number; + + embed(text: string): Promise; + embedBatch(texts: string[]): Promise; + isAvailable(): Promise; +} + +// ============================================================================ +// Local Embedding Provider (transformers.js) +// ============================================================================ + +let localPipeline: unknown = null; + +async function getLocalPipeline(model: string): Promise { + if (!localPipeline) { + try { + // Dynamic import to avoid loading if not used + const transformers = await import('@xenova/transformers'); + localPipeline = await transformers.pipeline('feature-extraction', model, { + quantized: true, + }); + } catch (error) { + throw new Error( + `Failed to load local embedding model. Ensure @xenova/transformers is installed: ${error}` + ); + } + } + return localPipeline; +} + +export function createLocalEmbeddingProvider(config: EmbeddingConfig): EmbeddingProviderInstance { + const model = config.model || 'Xenova/all-MiniLM-L6-v2'; + + return { + name: 'local', + dimensions: config.dimensions || 384, + maxBatchSize: config.batchSize || 32, + + async embed(text: string): Promise { + const pipe = (await getLocalPipeline(model)) as ( + text: string, + opts: { pooling: string; normalize: boolean } + ) => Promise<{ data: Float32Array }>; + const output = await pipe(text, { pooling: 'mean', normalize: true }); + return Array.from(output.data); + }, + + async embedBatch(texts: string[]): Promise { + const results: number[][] = []; + + for (let i = 0; i < texts.length; i += this.maxBatchSize) { + const batch = texts.slice(i, i + this.maxBatchSize); + for (const text of batch) { + const embedding = await this.embed(text); + results.push(embedding); + } + } + + return results; + }, + + async isAvailable(): Promise { + try { + await getLocalPipeline(model); + return true; + } catch { + return false; + } + }, + }; +} + +// ============================================================================ +// OpenAI Embedding Provider +// ============================================================================ + +export function createOpenAIEmbeddingProvider(config: EmbeddingConfig): EmbeddingProviderInstance { + const apiKey = config.apiKey || process.env.OPENAI_API_KEY; + const model = config.model || 'text-embedding-3-small'; + const endpoint = config.apiEndpoint || 'https://api.openai.com/v1/embeddings'; + + async function callOpenAI(texts: string[]): Promise { + if (!apiKey) { + throw new Error('OpenAI API key not configured'); + } + + const response = await fetch(endpoint, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${apiKey}`, + }, + body: JSON.stringify({ + model, + input: texts, + }), + }); + + if (!response.ok) { + const error = await response.text(); + throw new Error(`OpenAI API error: ${response.status} - ${error}`); + } + + const data = (await response.json()) as { + data: Array<{ embedding: number[] }>; + }; + return data.data.map((item) => item.embedding); + } + + return { + name: 'openai', + dimensions: config.dimensions || 1536, + maxBatchSize: config.batchSize || 100, + + async embed(text: string): Promise { + const results = await callOpenAI([text]); + return results[0]; + }, + + async embedBatch(texts: string[]): Promise { + const results: number[][] = []; + + for (let i = 0; i < texts.length; i += this.maxBatchSize) { + const batch = texts.slice(i, i + this.maxBatchSize); + const batchResults = await callOpenAI(batch); + results.push(...batchResults); + } + + return results; + }, + + async isAvailable(): Promise { + return !!apiKey; + }, + }; +} + +// ============================================================================ +// Voyage AI Embedding Provider +// ============================================================================ + +export function createVoyageEmbeddingProvider(config: EmbeddingConfig): EmbeddingProviderInstance { + const apiKey = config.apiKey || process.env.VOYAGE_API_KEY; + const model = config.model || 'voyage-2'; + const endpoint = config.apiEndpoint || 'https://api.voyageai.com/v1/embeddings'; + + async function callVoyage(texts: string[]): Promise { + if (!apiKey) { + throw new Error('Voyage API key not configured'); + } + + const response = await fetch(endpoint, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${apiKey}`, + }, + body: JSON.stringify({ + model, + input: texts, + }), + }); + + if (!response.ok) { + const error = await response.text(); + throw new Error(`Voyage API error: ${response.status} - ${error}`); + } + + const data = (await response.json()) as { + data: Array<{ embedding: number[] }>; + }; + return data.data.map((item) => item.embedding); + } + + return { + name: 'voyage', + dimensions: config.dimensions || 1024, + maxBatchSize: config.batchSize || 128, + + async embed(text: string): Promise { + const results = await callVoyage([text]); + return results[0]; + }, + + async embedBatch(texts: string[]): Promise { + const results: number[][] = []; + + for (let i = 0; i < texts.length; i += this.maxBatchSize) { + const batch = texts.slice(i, i + this.maxBatchSize); + const batchResults = await callVoyage(batch); + results.push(...batchResults); + } + + return results; + }, + + async isAvailable(): Promise { + return !!apiKey; + }, + }; +} + +// ============================================================================ +// Cohere Embedding Provider +// ============================================================================ + +export function createCohereEmbeddingProvider(config: EmbeddingConfig): EmbeddingProviderInstance { + const apiKey = config.apiKey || process.env.COHERE_API_KEY; + const model = config.model || 'embed-english-v3.0'; + const endpoint = config.apiEndpoint || 'https://api.cohere.ai/v1/embed'; + + async function callCohere(texts: string[]): Promise { + if (!apiKey) { + throw new Error('Cohere API key not configured'); + } + + const response = await fetch(endpoint, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${apiKey}`, + }, + body: JSON.stringify({ + model, + texts, + input_type: 'search_document', + }), + }); + + if (!response.ok) { + const error = await response.text(); + throw new Error(`Cohere API error: ${response.status} - ${error}`); + } + + const data = (await response.json()) as { + embeddings: number[][]; + }; + return data.embeddings; + } + + return { + name: 'cohere', + dimensions: config.dimensions || 1024, + maxBatchSize: config.batchSize || 96, + + async embed(text: string): Promise { + const results = await callCohere([text]); + return results[0]; + }, + + async embedBatch(texts: string[]): Promise { + const results: number[][] = []; + + for (let i = 0; i < texts.length; i += this.maxBatchSize) { + const batch = texts.slice(i, i + this.maxBatchSize); + const batchResults = await callCohere(batch); + results.push(...batchResults); + } + + return results; + }, + + async isAvailable(): Promise { + return !!apiKey; + }, + }; +} + +// ============================================================================ +// Custom Endpoint Provider +// ============================================================================ + +export function createCustomEmbeddingProvider(config: EmbeddingConfig): EmbeddingProviderInstance { + const configuredEndpoint = config.apiEndpoint; + const apiKey = config.apiKey; + + if (!configuredEndpoint) { + throw new Error('Custom provider requires apiEndpoint'); + } + + // Store in const after validation to satisfy TypeScript + const endpoint: string = configuredEndpoint; + + async function callCustom(texts: string[]): Promise { + const headers: Record = { + 'Content-Type': 'application/json', + }; + + if (apiKey) { + headers['Authorization'] = `Bearer ${apiKey}`; + } + + const response = await fetch(endpoint, { + method: 'POST', + headers, + body: JSON.stringify({ texts }), + }); + + if (!response.ok) { + const error = await response.text(); + throw new Error(`Custom API error: ${response.status} - ${error}`); + } + + const data = (await response.json()) as { + embeddings: number[][]; + }; + return data.embeddings; + } + + return { + name: 'custom', + dimensions: config.dimensions || 768, + maxBatchSize: config.batchSize || 32, + + async embed(text: string): Promise { + const results = await callCustom([text]); + return results[0]; + }, + + async embedBatch(texts: string[]): Promise { + const results: number[][] = []; + + for (let i = 0; i < texts.length; i += this.maxBatchSize) { + const batch = texts.slice(i, i + this.maxBatchSize); + const batchResults = await callCustom(batch); + results.push(...batchResults); + } + + return results; + }, + + async isAvailable(): Promise { + return !!endpoint; + }, + }; +} + +// ============================================================================ +// Provider Factory +// ============================================================================ + +export function createEmbeddingProvider(config: EmbeddingConfig): EmbeddingProviderInstance { + switch (config.provider) { + case 'local': + return createLocalEmbeddingProvider(config); + case 'openai': + return createOpenAIEmbeddingProvider(config); + case 'voyage': + return createVoyageEmbeddingProvider(config); + case 'cohere': + return createCohereEmbeddingProvider(config); + case 'custom': + return createCustomEmbeddingProvider(config); + default: + throw new Error(`Unknown embedding provider: ${config.provider}`); + } +} + +// ============================================================================ +// Singleton Instance (uses RAG config) +// ============================================================================ + +let embeddingProviderInstance: EmbeddingProviderInstance | null = null; +let currentProviderConfig: EmbeddingConfig | null = null; + +export async function getEmbeddingProvider( + config?: EmbeddingConfig +): Promise { + // If config provided, check if we need to recreate the provider + if (config) { + const configChanged = + !currentProviderConfig || + currentProviderConfig.provider !== config.provider || + currentProviderConfig.model !== config.model || + currentProviderConfig.apiKey !== config.apiKey || + currentProviderConfig.apiEndpoint !== config.apiEndpoint; + + if (configChanged) { + embeddingProviderInstance = createEmbeddingProvider(config); + currentProviderConfig = config; + } + } + + // If no instance, get config from RAG storage + if (!embeddingProviderInstance) { + const { getRAGStorage } = await import('./rag-storage.js'); + const storage = await getRAGStorage(); + const ragConfig = await storage.getConfig(); + embeddingProviderInstance = createEmbeddingProvider(ragConfig.embedding); + currentProviderConfig = ragConfig.embedding; + } + + return embeddingProviderInstance; +} + +export function resetEmbeddingProvider(): void { + embeddingProviderInstance = null; + currentProviderConfig = null; + localPipeline = null; +} + +// ============================================================================ +// Utility Functions +// ============================================================================ + +/** + * Get available embedding providers based on environment + */ +export async function getAvailableProviders(): Promise { + const available: EmbeddingProviderType[] = []; + + // Check local + try { + await import('@xenova/transformers'); + available.push('local'); + } catch { + // transformers.js not installed + } + + // Check API keys + if (process.env.OPENAI_API_KEY) { + available.push('openai'); + } + if (process.env.VOYAGE_API_KEY) { + available.push('voyage'); + } + if (process.env.COHERE_API_KEY) { + available.push('cohere'); + } + + return available; +} + +/** + * Get default dimensions for a provider + */ +export function getProviderDimensions(provider: EmbeddingProviderType, model?: string): number { + switch (provider) { + case 'local': + // Most Xenova models use 384 dimensions + return 384; + case 'openai': + if (model === 'text-embedding-3-large') return 3072; + if (model === 'text-embedding-ada-002') return 1536; + return 1536; // text-embedding-3-small default + case 'voyage': + return 1024; + case 'cohere': + return 1024; + case 'custom': + return 768; + default: + return 768; + } +} diff --git a/src/rag/index.ts b/src/rag/index.ts new file mode 100644 index 0000000..b01412d --- /dev/null +++ b/src/rag/index.ts @@ -0,0 +1,65 @@ +/** + * CortexFlow - RAG Module + * + * Exports all RAG functionality for use by other modules. + */ + +// Storage +export { + getRAGStorage, + resetRAGStorage, + cosineSimilarity, + isSqliteAvailable, +} from './rag-storage.js'; +export type { RAGStorage } from './rag-storage.js'; + +// Embeddings +export { + getEmbeddingProvider, + resetEmbeddingProvider, + createEmbeddingProvider, + getAvailableProviders, + getProviderDimensions, +} from './embeddings.js'; +export type { EmbeddingProviderInstance } from './embeddings.js'; + +// Chunking +export { + chunkDocument, + estimateTokenCount, + getRecommendedChunkSize, + mergeSmallChunks, + splitOversizedChunk, +} from './chunking.js'; +export type { ChunkResult } from './chunking.js'; + +// Features (main API) +export { + // Indexing + indexDocument, + indexProjectContext, + // Search + search, + buildContextFromSearch, + // Document management + deleteDocument, + deleteProjectDocuments, + reindexDocument, + updateDocumentEmbeddings, + listDocuments, + getDocument, + // Statistics + getRAGStats, + // Configuration + getRAGConfig, + updateRAGConfig, + // Maintenance + rebuildFTSIndex, + vacuumDatabase, + reindexAll, +} from './rag-features.js'; +export type { + IndexDocumentOptions, + SearchOptions, + QueryWithContextOptions, +} from './rag-features.js'; diff --git a/src/rag/rag-features.ts b/src/rag/rag-features.ts new file mode 100644 index 0000000..3df46c1 --- /dev/null +++ b/src/rag/rag-features.ts @@ -0,0 +1,496 @@ +/** + * CortexFlow - RAG Features Module + * + * High-level RAG operations: + * - Document indexing + * - Semantic search + * - Project context RAG + * - Query with context + */ + +import { getRAGStorage } from './rag-storage.js'; +import { getEmbeddingProvider } from './embeddings.js'; +import { chunkDocument, ChunkResult } from './chunking.js'; +import { + RAGDocument, + RAGChunk, + RAGQueryResult, + RAGSearchResult, + RAGStats, + RAGSearchType, + createRAGDocument, + createRAGChunk, + ProjectContext, +} from '../models.js'; + +// ============================================================================ +// Indexing Operations +// ============================================================================ + +export interface IndexDocumentOptions { + projectId?: string; + sourceType?: RAGDocument['sourceType']; + sourceId?: string; + metadata?: Record; + skipEmbedding?: boolean; +} + +/** + * Index a single document + */ +export async function indexDocument( + title: string, + content: string, + options: IndexDocumentOptions = {} +): Promise { + const storage = await getRAGStorage(); + const config = await storage.getConfig(); + + // Create document + const doc = createRAGDocument(title, content, { + projectId: options.projectId ?? null, + sourceType: options.sourceType ?? 'custom_document', + sourceId: options.sourceId ?? null, + metadata: options.metadata ?? {}, + }); + + // Chunk content + const chunkResults = chunkDocument(content, config.chunking); + doc.chunkCount = chunkResults.length; + + // Save document + await storage.saveDocument(doc); + + // Create chunks + const chunks: RAGChunk[] = chunkResults.map((result) => + createRAGChunk(doc.id, result.content, result.index, { + startOffset: result.startOffset, + endOffset: result.endOffset, + metadata: { documentTitle: title }, + }) + ); + + // Save chunks + if (chunks.length > 0) { + await storage.saveChunks(chunks); + } + + // Generate embeddings (if not skipped) + if (!options.skipEmbedding && chunks.length > 0) { + try { + const embedder = await getEmbeddingProvider(); + const texts = chunks.map((c) => c.content); + const embeddings = await embedder.embedBatch(texts); + + for (let i = 0; i < chunks.length; i++) { + await storage.updateChunkEmbedding(chunks[i].id, embeddings[i]); + } + } catch (error) { + // Embedding failed, document is still indexed without vectors + console.warn(`Embedding generation failed: ${error}`); + } + } + + return doc; +} + +/** + * Index an entire project context + */ +export async function indexProjectContext(project: ProjectContext): Promise<{ + documents: RAGDocument[]; + totalChunks: number; +}> { + const documents: RAGDocument[] = []; + let totalChunks = 0; + + // Index project description + const projectContent = [ + `# Project: ${project.name}`, + '', + project.description, + '', + `Phase: ${project.phase}`, + `Tags: ${project.tags.join(', ') || 'none'}`, + `Version: ${project.version}`, + ].join('\n'); + + const projectDoc = await indexDocument(`Project: ${project.name}`, projectContent, { + projectId: project.id, + sourceType: 'project_context', + sourceId: project.id, + metadata: { + phase: project.phase, + tags: project.tags, + version: project.version, + }, + }); + documents.push(projectDoc); + totalChunks += projectDoc.chunkCount; + + // Index each task + for (const task of project.tasks) { + const taskContent = [ + `# Task: ${task.title}`, + '', + task.description, + '', + `Status: ${task.status}`, + `Priority: ${task.priority}`, + task.assignedTo ? `Assigned to: ${task.assignedTo}` : '', + task.dependencies.length > 0 ? `Dependencies: ${task.dependencies.join(', ')}` : '', + '', + task.notes.length > 0 ? '## Notes\n' + task.notes.map((n) => `- ${n}`).join('\n') : '', + ] + .filter((line) => line !== '') + .join('\n'); + + const taskDoc = await indexDocument(`Task: ${task.title}`, taskContent, { + projectId: project.id, + sourceType: 'task', + sourceId: task.id, + metadata: { + status: task.status, + priority: task.priority, + assignedTo: task.assignedTo, + }, + }); + documents.push(taskDoc); + totalChunks += taskDoc.chunkCount; + } + + // Index significant notes (longer than 50 chars) + for (const note of project.notes) { + if (note.content.length > 50) { + const noteContent = [ + `# Note by ${note.agent}`, + '', + `Category: ${note.category}`, + `Timestamp: ${note.timestamp}`, + '', + note.content, + ].join('\n'); + + const noteDoc = await indexDocument(`Note: ${note.category} by ${note.agent}`, noteContent, { + projectId: project.id, + sourceType: 'note', + sourceId: note.id, + metadata: { + agent: note.agent, + category: note.category, + }, + }); + documents.push(noteDoc); + totalChunks += noteDoc.chunkCount; + } + } + + return { documents, totalChunks }; +} + +// ============================================================================ +// Search Operations +// ============================================================================ + +export interface SearchOptions { + projectId?: string; + topK?: number; + minScore?: number; + searchType?: RAGSearchType; + vectorWeight?: number; +} + +/** + * Search indexed documents + */ +export async function search(query: string, options: SearchOptions = {}): Promise { + const startTime = Date.now(); + const storage = await getRAGStorage(); + const config = await storage.getConfig(); + + const searchType = options.searchType ?? 'hybrid'; + const topK = options.topK ?? config.search.topK; + const minScore = options.minScore ?? config.search.minScore; + + let results: RAGSearchResult[]; + let embeddingProvider = 'none'; + + if (searchType === 'keyword') { + results = await storage.keywordSearch(query, { + projectId: options.projectId, + limit: topK, + }); + } else { + // Generate query embedding + const embedder = await getEmbeddingProvider(); + embeddingProvider = embedder.name; + const queryEmbedding = await embedder.embed(query); + + if (searchType === 'vector') { + results = await storage.vectorSearch(queryEmbedding, { + projectId: options.projectId, + topK, + minScore, + }); + } else { + // Hybrid search + results = await storage.hybridSearch(query, queryEmbedding, { + projectId: options.projectId, + topK, + minScore, + vectorWeight: options.vectorWeight, + }); + } + } + + return { + query, + results, + totalFound: results.length, + searchTimeMs: Date.now() - startTime, + embeddingProvider, + }; +} + +// ============================================================================ +// Context Building +// ============================================================================ + +export interface QueryWithContextOptions extends SearchOptions { + maxContextLength?: number; + includeMetadata?: boolean; +} + +/** + * Build context string from search results + */ +export async function buildContextFromSearch( + query: string, + options: QueryWithContextOptions = {} +): Promise<{ + context: string; + sources: Array<{ title: string; score: number; documentId: string }>; + searchResult: RAGQueryResult; +}> { + const maxContextLength = options.maxContextLength ?? 4000; + const includeMetadata = options.includeMetadata ?? true; + + const searchResult = await search(query, options); + + const contextParts: string[] = []; + const sources: Array<{ title: string; score: number; documentId: string }> = []; + let currentLength = 0; + + for (const result of searchResult.results) { + const chunkText = result.chunk.content; + const docTitle = result.document.title; + + let contextEntry = `--- ${docTitle} ---\n${chunkText}\n`; + + if (includeMetadata && Object.keys(result.document.metadata).length > 0) { + const metadataStr = Object.entries(result.document.metadata) + .filter(([, v]) => v !== null && v !== undefined) + .map(([k, v]) => `${k}: ${v}`) + .join(', '); + if (metadataStr) { + contextEntry += `[${metadataStr}]\n`; + } + } + + if (currentLength + contextEntry.length > maxContextLength) { + break; + } + + contextParts.push(contextEntry); + sources.push({ + title: docTitle, + score: result.score, + documentId: result.document.id, + }); + currentLength += contextEntry.length; + } + + return { + context: contextParts.join('\n'), + sources, + searchResult, + }; +} + +// ============================================================================ +// Document Management +// ============================================================================ + +/** + * Delete a document and its chunks + */ +export async function deleteDocument(documentId: string): Promise { + const storage = await getRAGStorage(); + return storage.deleteDocument(documentId); +} + +/** + * Delete all documents for a project + */ +export async function deleteProjectDocuments(projectId: string): Promise { + const storage = await getRAGStorage(); + const docs = await storage.listDocuments({ projectId }); + + let deleted = 0; + for (const doc of docs) { + if (await storage.deleteDocument(doc.id)) { + deleted++; + } + } + + return deleted; +} + +/** + * Reindex a document (regenerate chunks and embeddings) + */ +export async function reindexDocument(documentId: string): Promise { + const storage = await getRAGStorage(); + const doc = await storage.getDocument(documentId); + + if (!doc) return null; + + // Delete existing chunks + await storage.deleteChunks(documentId); + + // Delete the document itself + await storage.deleteDocument(documentId); + + // Reindex with same properties + return indexDocument(doc.title, doc.content, { + projectId: doc.projectId ?? undefined, + sourceType: doc.sourceType, + sourceId: doc.sourceId ?? undefined, + metadata: doc.metadata, + }); +} + +/** + * Update embeddings for a document (without re-chunking) + */ +export async function updateDocumentEmbeddings(documentId: string): Promise { + const storage = await getRAGStorage(); + const chunks = await storage.getChunks(documentId); + + if (chunks.length === 0) return 0; + + const embedder = await getEmbeddingProvider(); + const texts = chunks.map((c) => c.content); + const embeddings = await embedder.embedBatch(texts); + + for (let i = 0; i < chunks.length; i++) { + await storage.updateChunkEmbedding(chunks[i].id, embeddings[i]); + } + + return chunks.length; +} + +// ============================================================================ +// Statistics +// ============================================================================ + +/** + * Get RAG system statistics + */ +export async function getRAGStats(): Promise { + const storage = await getRAGStorage(); + const embedder = await getEmbeddingProvider(); + const stats = await storage.getStats(); + + return { + ...stats, + embeddingProvider: embedder.name, + embeddingDimensions: embedder.dimensions, + }; +} + +/** + * List all indexed documents + */ +export async function listDocuments(options?: { + projectId?: string; + sourceType?: string; + limit?: number; +}): Promise { + const storage = await getRAGStorage(); + return storage.listDocuments(options); +} + +/** + * Get a single document by ID + */ +export async function getDocument(documentId: string): Promise { + const storage = await getRAGStorage(); + return storage.getDocument(documentId); +} + +// ============================================================================ +// Configuration +// ============================================================================ + +/** + * Get current RAG configuration + */ +export async function getRAGConfig() { + const storage = await getRAGStorage(); + return storage.getConfig(); +} + +/** + * Update RAG configuration + */ +export async function updateRAGConfig( + updates: Parameters>['updateConfig']>[0] +): Promise { + const storage = await getRAGStorage(); + await storage.updateConfig(updates); +} + +// ============================================================================ +// Maintenance +// ============================================================================ + +/** + * Rebuild full-text search index + */ +export async function rebuildFTSIndex(): Promise { + const storage = await getRAGStorage(); + await storage.rebuildFTS(); +} + +/** + * Vacuum the database to reclaim space + */ +export async function vacuumDatabase(): Promise { + const storage = await getRAGStorage(); + await storage.vacuum(); +} + +/** + * Reindex all documents (regenerate embeddings) + */ +export async function reindexAll(options?: { projectId?: string }): Promise<{ + documentsProcessed: number; + chunksUpdated: number; +}> { + const storage = await getRAGStorage(); + const docs = await storage.listDocuments({ + projectId: options?.projectId, + limit: 10000, // Process up to 10k documents + }); + + let chunksUpdated = 0; + for (const doc of docs) { + chunksUpdated += await updateDocumentEmbeddings(doc.id); + } + + return { + documentsProcessed: docs.length, + chunksUpdated, + }; +} diff --git a/src/rag/rag-storage.ts b/src/rag/rag-storage.ts new file mode 100644 index 0000000..2c6b7cd --- /dev/null +++ b/src/rag/rag-storage.ts @@ -0,0 +1,781 @@ +/** + * CortexFlow - RAG Vector Storage Layer + * + * SQLite-based vector storage using better-sqlite3. + * Supports vector similarity search with pure JS cosine similarity. + * Includes FTS5 for keyword search fallback. + */ + +import { join } from 'path'; +import { homedir } from 'os'; +import { mkdir } from 'fs/promises'; +import { + RAGDocument, + RAGChunk, + RAGSearchResult, + RAGConfig, + RAGConfigUpdate, + getDefaultRAGConfig, +} from '../models.js'; + +// Dynamic import for better-sqlite3 (native module that may not be available) +let Database: typeof import('better-sqlite3').default | null = null; +let sqliteAvailable = false; + +async function loadSqlite(): Promise { + if (Database !== null) return sqliteAvailable; + try { + const module = await import('better-sqlite3'); + Database = module.default; + sqliteAvailable = true; + } catch { + sqliteAvailable = false; + } + return sqliteAvailable; +} + +// Export function to check availability +export function isSqliteAvailable(): boolean { + return sqliteAvailable; +} + +const DATA_DIR = process.env.CORTEXFLOW_DATA_DIR ?? join(homedir(), '.cortexflow', 'data'); +const RAG_DB_PATH = join(DATA_DIR, 'rag.sqlite'); + +// ============================================================================ +// Schema Definition +// ============================================================================ + +const SCHEMA = ` +-- RAG Documents table +CREATE TABLE IF NOT EXISTS rag_documents ( + id TEXT PRIMARY KEY, + project_id TEXT, + source_type TEXT NOT NULL DEFAULT 'custom_document', + source_id TEXT, + title TEXT NOT NULL, + content TEXT NOT NULL, + metadata TEXT DEFAULT '{}', + chunk_count INTEGER DEFAULT 0, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL +); + +-- RAG Chunks table (stores vectors as JSON array of floats) +CREATE TABLE IF NOT EXISTS rag_chunks ( + id TEXT PRIMARY KEY, + document_id TEXT NOT NULL, + content TEXT NOT NULL, + embedding TEXT, + chunk_index INTEGER NOT NULL, + start_offset INTEGER NOT NULL, + end_offset INTEGER NOT NULL, + metadata TEXT DEFAULT '{}', + created_at TEXT NOT NULL, + FOREIGN KEY (document_id) REFERENCES rag_documents(id) ON DELETE CASCADE +); + +-- RAG Configuration table +CREATE TABLE IF NOT EXISTS rag_config ( + key TEXT PRIMARY KEY, + value TEXT NOT NULL, + updated_at TEXT NOT NULL +); + +-- Indexes for performance +CREATE INDEX IF NOT EXISTS idx_chunks_document ON rag_chunks(document_id); +CREATE INDEX IF NOT EXISTS idx_documents_project ON rag_documents(project_id); +CREATE INDEX IF NOT EXISTS idx_documents_source ON rag_documents(source_type, source_id); +CREATE INDEX IF NOT EXISTS idx_chunks_index ON rag_chunks(document_id, chunk_index); +`; + +const FTS_SCHEMA = ` +-- Full-text search (FTS5) for keyword fallback +CREATE VIRTUAL TABLE IF NOT EXISTS rag_chunks_fts USING fts5( + content, + content='rag_chunks', + content_rowid='rowid' +); +`; + +const FTS_TRIGGERS = ` +-- Triggers to keep FTS in sync +CREATE TRIGGER IF NOT EXISTS rag_chunks_ai AFTER INSERT ON rag_chunks BEGIN + INSERT INTO rag_chunks_fts(rowid, content) VALUES (NEW.rowid, NEW.content); +END; + +CREATE TRIGGER IF NOT EXISTS rag_chunks_ad AFTER DELETE ON rag_chunks BEGIN + INSERT INTO rag_chunks_fts(rag_chunks_fts, rowid, content) VALUES('delete', OLD.rowid, OLD.content); +END; + +CREATE TRIGGER IF NOT EXISTS rag_chunks_au AFTER UPDATE ON rag_chunks BEGIN + INSERT INTO rag_chunks_fts(rag_chunks_fts, rowid, content) VALUES('delete', OLD.rowid, OLD.content); + INSERT INTO rag_chunks_fts(rowid, content) VALUES (NEW.rowid, NEW.content); +END; +`; + +// ============================================================================ +// Vector Operations (Pure JS - no native extensions required) +// ============================================================================ + +/** + * Calculate cosine similarity between two vectors + */ +export function cosineSimilarity(a: number[], b: number[]): number { + if (a.length !== b.length || a.length === 0) return 0; + + let dotProduct = 0; + let normA = 0; + let normB = 0; + + for (let i = 0; i < a.length; i++) { + dotProduct += a[i] * b[i]; + normA += a[i] * a[i]; + normB += b[i] * b[i]; + } + + const magnitude = Math.sqrt(normA) * Math.sqrt(normB); + return magnitude === 0 ? 0 : dotProduct / magnitude; +} + +/** + * Brute-force vector search (optimized for small-medium datasets) + * For larger datasets (>100K chunks), consider adding sqlite-vss extension + */ +function vectorSearch( + queryEmbedding: number[], + chunks: Array<{ id: string; embedding: number[] }>, + topK: number, + minScore: number +): Array<{ id: string; score: number }> { + const scored = chunks + .map((chunk) => ({ + id: chunk.id, + score: cosineSimilarity(queryEmbedding, chunk.embedding), + })) + .filter((result) => result.score >= minScore) + .sort((a, b) => b.score - a.score) + .slice(0, topK); + + return scored; +} + +// ============================================================================ +// RAG Storage Interface +// ============================================================================ + +export interface RAGStorage { + // Document operations + saveDocument(doc: RAGDocument): Promise; + getDocument(id: string): Promise; + listDocuments(options?: { + projectId?: string; + sourceType?: string; + limit?: number; + }): Promise; + deleteDocument(id: string): Promise; + updateDocument( + id: string, + updates: Partial> + ): Promise; + + // Chunk operations + saveChunks(chunks: RAGChunk[]): Promise; + getChunks(documentId: string): Promise; + getChunkById(id: string): Promise; + updateChunkEmbedding(chunkId: string, embedding: number[]): Promise; + deleteChunks(documentId: string): Promise; + + // Search operations + vectorSearch( + embedding: number[], + options?: { + projectId?: string; + topK?: number; + minScore?: number; + } + ): Promise; + + keywordSearch( + query: string, + options?: { + projectId?: string; + limit?: number; + } + ): Promise; + + hybridSearch( + query: string, + embedding: number[], + options?: { + projectId?: string; + topK?: number; + minScore?: number; + vectorWeight?: number; + } + ): Promise; + + // Statistics + getStats(): Promise<{ + totalDocuments: number; + totalChunks: number; + indexedChunks: number; + projectBreakdown: Record; + }>; + + // Configuration + getConfig(): Promise; + updateConfig(config: RAGConfigUpdate): Promise; + + // Maintenance + vacuum(): Promise; + rebuildFTS(): Promise; + close(): void; +} + +// ============================================================================ +// Row Converters +// ============================================================================ + +interface DocumentRow { + id: string; + project_id: string | null; + source_type: string; + source_id: string | null; + title: string; + content: string; + metadata: string; + chunk_count: number; + created_at: string; + updated_at: string; +} + +interface ChunkRow { + id: string; + document_id: string; + content: string; + embedding: string | null; + chunk_index: number; + start_offset: number; + end_offset: number; + metadata: string; + created_at: string; + rowid?: number; +} + +function rowToDocument(row: DocumentRow): RAGDocument { + return { + id: row.id, + projectId: row.project_id, + sourceType: row.source_type as RAGDocument['sourceType'], + sourceId: row.source_id, + title: row.title, + content: row.content, + metadata: JSON.parse(row.metadata || '{}'), + chunkCount: row.chunk_count, + createdAt: row.created_at, + updatedAt: row.updated_at, + }; +} + +function rowToChunk(row: ChunkRow): RAGChunk { + return { + id: row.id, + documentId: row.document_id, + content: row.content, + embedding: row.embedding ? JSON.parse(row.embedding) : null, + chunkIndex: row.chunk_index, + startOffset: row.start_offset, + endOffset: row.end_offset, + metadata: JSON.parse(row.metadata || '{}'), + createdAt: row.created_at, + }; +} + +// ============================================================================ +// Storage Factory +// ============================================================================ + +export async function createRAGStorage(): Promise { + // Ensure SQLite is available + if (!Database) { + throw new Error('SQLite not loaded. Call getRAGStorage() instead of createRAGStorage()'); + } + + // Ensure directory exists + await mkdir(DATA_DIR, { recursive: true }).catch(() => {}); + + // Initialize database + const db = Database(RAG_DB_PATH); + db.pragma('journal_mode = WAL'); + db.pragma('foreign_keys = ON'); + db.exec(SCHEMA); + + // Try to create FTS tables (may fail in some SQLite builds) + try { + db.exec(FTS_SCHEMA); + db.exec(FTS_TRIGGERS); + } catch { + // FTS5 not available, keyword search will use LIKE fallback + } + + // Prepared statements for performance + const stmts = { + insertDoc: db.prepare(` + INSERT OR REPLACE INTO rag_documents + (id, project_id, source_type, source_id, title, content, metadata, chunk_count, created_at, updated_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + `), + getDoc: db.prepare('SELECT * FROM rag_documents WHERE id = ?'), + listDocs: db.prepare('SELECT * FROM rag_documents ORDER BY updated_at DESC LIMIT ?'), + listDocsByProject: db.prepare( + 'SELECT * FROM rag_documents WHERE project_id = ? ORDER BY updated_at DESC LIMIT ?' + ), + listDocsByType: db.prepare( + 'SELECT * FROM rag_documents WHERE source_type = ? ORDER BY updated_at DESC LIMIT ?' + ), + listDocsByProjectAndType: db.prepare( + 'SELECT * FROM rag_documents WHERE project_id = ? AND source_type = ? ORDER BY updated_at DESC LIMIT ?' + ), + deleteDoc: db.prepare('DELETE FROM rag_documents WHERE id = ?'), + updateDoc: db.prepare(` + UPDATE rag_documents SET title = ?, content = ?, metadata = ?, updated_at = ? + WHERE id = ? + `), + + insertChunk: db.prepare(` + INSERT INTO rag_chunks (id, document_id, content, embedding, chunk_index, start_offset, end_offset, metadata, created_at) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?) + `), + getChunks: db.prepare('SELECT * FROM rag_chunks WHERE document_id = ? ORDER BY chunk_index'), + getChunkById: db.prepare('SELECT * FROM rag_chunks WHERE id = ?'), + updateEmbedding: db.prepare('UPDATE rag_chunks SET embedding = ? WHERE id = ?'), + deleteChunks: db.prepare('DELETE FROM rag_chunks WHERE document_id = ?'), + + getAllEmbeddings: db.prepare(` + SELECT c.id, c.embedding, c.document_id, d.project_id + FROM rag_chunks c + JOIN rag_documents d ON c.document_id = d.id + WHERE c.embedding IS NOT NULL + `), + getAllEmbeddingsByProject: db.prepare(` + SELECT c.id, c.embedding, c.document_id, d.project_id + FROM rag_chunks c + JOIN rag_documents d ON c.document_id = d.id + WHERE c.embedding IS NOT NULL AND d.project_id = ? + `), + + getConfig: db.prepare('SELECT value FROM rag_config WHERE key = ?'), + setConfig: db.prepare( + 'INSERT OR REPLACE INTO rag_config (key, value, updated_at) VALUES (?, ?, ?)' + ), + + stats: db.prepare(` + SELECT + (SELECT COUNT(*) FROM rag_documents) as total_documents, + (SELECT COUNT(*) FROM rag_chunks) as total_chunks, + (SELECT COUNT(*) FROM rag_chunks WHERE embedding IS NOT NULL) as indexed_chunks + `), + + projectBreakdown: db.prepare(` + SELECT project_id, COUNT(*) as count + FROM rag_documents + GROUP BY project_id + `), + }; + + // Check if FTS is available + let ftsAvailable = false; + try { + db.prepare('SELECT 1 FROM rag_chunks_fts LIMIT 1').get(); + ftsAvailable = true; + } catch { + ftsAvailable = false; + } + + const storage: RAGStorage = { + async saveDocument(doc: RAGDocument): Promise { + stmts.insertDoc.run( + doc.id, + doc.projectId, + doc.sourceType, + doc.sourceId, + doc.title, + doc.content, + JSON.stringify(doc.metadata), + doc.chunkCount, + doc.createdAt, + doc.updatedAt + ); + }, + + async getDocument(id: string): Promise { + const row = stmts.getDoc.get(id) as DocumentRow | undefined; + return row ? rowToDocument(row) : null; + }, + + async listDocuments(options = {}): Promise { + const limit = options.limit ?? 100; + let rows: DocumentRow[]; + + if (options.projectId && options.sourceType) { + rows = stmts.listDocsByProjectAndType.all( + options.projectId, + options.sourceType, + limit + ) as DocumentRow[]; + } else if (options.projectId) { + rows = stmts.listDocsByProject.all(options.projectId, limit) as DocumentRow[]; + } else if (options.sourceType) { + rows = stmts.listDocsByType.all(options.sourceType, limit) as DocumentRow[]; + } else { + rows = stmts.listDocs.all(limit) as DocumentRow[]; + } + + return rows.map(rowToDocument); + }, + + async deleteDocument(id: string): Promise { + const result = stmts.deleteDoc.run(id); + return result.changes > 0; + }, + + async updateDocument( + id: string, + updates: Partial> + ): Promise { + const doc = await storage.getDocument(id); + if (!doc) return false; + + const newTitle = updates.title ?? doc.title; + const newContent = updates.content ?? doc.content; + const newMetadata = updates.metadata ?? doc.metadata; + + const result = stmts.updateDoc.run( + newTitle, + newContent, + JSON.stringify(newMetadata), + new Date().toISOString(), + id + ); + + return result.changes > 0; + }, + + async saveChunks(chunks: RAGChunk[]): Promise { + const insertMany = db.transaction((...args: unknown[]) => { + const inputChunks = args[0] as RAGChunk[]; + for (const chunk of inputChunks) { + stmts.insertChunk.run( + chunk.id, + chunk.documentId, + chunk.content, + chunk.embedding ? JSON.stringify(chunk.embedding) : null, + chunk.chunkIndex, + chunk.startOffset, + chunk.endOffset, + JSON.stringify(chunk.metadata), + chunk.createdAt + ); + } + }); + insertMany(chunks); + }, + + async getChunks(documentId: string): Promise { + const rows = stmts.getChunks.all(documentId) as ChunkRow[]; + return rows.map(rowToChunk); + }, + + async getChunkById(id: string): Promise { + const row = stmts.getChunkById.get(id) as ChunkRow | undefined; + return row ? rowToChunk(row) : null; + }, + + async updateChunkEmbedding(chunkId: string, embedding: number[]): Promise { + stmts.updateEmbedding.run(JSON.stringify(embedding), chunkId); + }, + + async deleteChunks(documentId: string): Promise { + const result = stmts.deleteChunks.run(documentId); + return result.changes; + }, + + async vectorSearch(embedding: number[], options = {}): Promise { + const topK = options.topK ?? 10; + const minScore = options.minScore ?? 0.5; + + // Get all embeddings (optionally filtered by project) + const rows = options.projectId + ? (stmts.getAllEmbeddingsByProject.all(options.projectId) as Array<{ + id: string; + embedding: string; + document_id: string; + }>) + : (stmts.getAllEmbeddings.all() as Array<{ + id: string; + embedding: string; + document_id: string; + }>); + + const chunks = rows.map((row) => ({ + id: row.id, + embedding: JSON.parse(row.embedding) as number[], + documentId: row.document_id, + })); + + // Perform vector search + const results = vectorSearch(embedding, chunks, topK, minScore); + + // Enrich results with full data + const enriched: RAGSearchResult[] = []; + for (const result of results) { + const chunk = await storage.getChunkById(result.id); + if (chunk) { + const doc = await storage.getDocument(chunk.documentId); + if (doc) { + enriched.push({ + chunk, + document: doc, + score: result.score, + highlights: [ + chunk.content.substring(0, 200) + (chunk.content.length > 200 ? '...' : ''), + ], + }); + } + } + } + + return enriched; + }, + + async keywordSearch(query: string, options = {}): Promise { + const limit = options.limit ?? 10; + + try { + let rows: ChunkRow[]; + + if (ftsAvailable) { + // Use FTS5 search + const ftsQuery = query + .split(/\s+/) + .filter((w) => w.length > 0) + .map((w) => `"${w.replace(/"/g, '""')}"`) + .join(' OR '); + + if (!ftsQuery) return []; + + const ftsStmt = options.projectId + ? db.prepare(` + SELECT c.*, d.project_id + FROM rag_chunks_fts fts + JOIN rag_chunks c ON fts.rowid = c.rowid + JOIN rag_documents d ON c.document_id = d.id + WHERE rag_chunks_fts MATCH ? AND d.project_id = ? + ORDER BY rank + LIMIT ? + `) + : db.prepare(` + SELECT c.* + FROM rag_chunks_fts fts + JOIN rag_chunks c ON fts.rowid = c.rowid + WHERE rag_chunks_fts MATCH ? + ORDER BY rank + LIMIT ? + `); + + rows = options.projectId + ? (ftsStmt.all(ftsQuery, options.projectId, limit) as ChunkRow[]) + : (ftsStmt.all(ftsQuery, limit) as ChunkRow[]); + } else { + // Fallback to LIKE search + const likePattern = `%${query}%`; + + const likeStmt = options.projectId + ? db.prepare(` + SELECT c.* + FROM rag_chunks c + JOIN rag_documents d ON c.document_id = d.id + WHERE c.content LIKE ? AND d.project_id = ? + LIMIT ? + `) + : db.prepare(` + SELECT * FROM rag_chunks WHERE content LIKE ? LIMIT ? + `); + + rows = options.projectId + ? (likeStmt.all(likePattern, options.projectId, limit) as ChunkRow[]) + : (likeStmt.all(likePattern, limit) as ChunkRow[]); + } + + const results: RAGSearchResult[] = []; + for (const row of rows) { + const chunk = rowToChunk(row); + const doc = await storage.getDocument(chunk.documentId); + if (doc) { + results.push({ + chunk, + document: doc, + score: 0.5, // Fixed score for keyword search + highlights: [ + chunk.content.substring(0, 200) + (chunk.content.length > 200 ? '...' : ''), + ], + }); + } + } + + return results; + } catch { + return []; // Query failed + } + }, + + async hybridSearch( + query: string, + embedding: number[], + options = {} + ): Promise { + const vectorWeight = options.vectorWeight ?? 0.7; + const topK = options.topK ?? 10; + + // Run both searches + const [vectorResults, keywordResults] = await Promise.all([ + storage.vectorSearch(embedding, { ...options, topK: topK * 2 }), + storage.keywordSearch(query, { ...options, limit: topK * 2 }), + ]); + + // Combine and deduplicate by chunk ID + const scoreMap = new Map< + string, + { result: RAGSearchResult; vectorScore: number; keywordScore: number } + >(); + + for (const result of vectorResults) { + scoreMap.set(result.chunk.id, { + result, + vectorScore: result.score, + keywordScore: 0, + }); + } + + for (const result of keywordResults) { + const existing = scoreMap.get(result.chunk.id); + if (existing) { + existing.keywordScore = result.score; + } else { + scoreMap.set(result.chunk.id, { + result, + vectorScore: 0, + keywordScore: result.score, + }); + } + } + + // Calculate hybrid scores + const hybridResults = Array.from(scoreMap.values()) + .map(({ result, vectorScore, keywordScore }) => ({ + ...result, + score: vectorWeight * vectorScore + (1 - vectorWeight) * keywordScore, + })) + .sort((a, b) => b.score - a.score) + .slice(0, topK); + + return hybridResults; + }, + + async getStats(): Promise<{ + totalDocuments: number; + totalChunks: number; + indexedChunks: number; + projectBreakdown: Record; + }> { + const stats = stmts.stats.get() as { + total_documents: number; + total_chunks: number; + indexed_chunks: number; + }; + + const breakdown = stmts.projectBreakdown.all() as Array<{ + project_id: string | null; + count: number; + }>; + + const projectBreakdown: Record = {}; + for (const row of breakdown) { + projectBreakdown[row.project_id || 'standalone'] = row.count; + } + + return { + totalDocuments: stats.total_documents, + totalChunks: stats.total_chunks, + indexedChunks: stats.indexed_chunks, + projectBreakdown, + }; + }, + + async getConfig(): Promise { + const configRow = stmts.getConfig.get('main') as { value: string } | undefined; + if (configRow) { + return JSON.parse(configRow.value); + } + return getDefaultRAGConfig(); + }, + + async updateConfig(config: RAGConfigUpdate): Promise { + const current = await storage.getConfig(); + const merged = { + ...current, + ...config, + embedding: { ...current.embedding, ...(config.embedding ?? {}) }, + chunking: { ...current.chunking, ...(config.chunking ?? {}) }, + search: { ...current.search, ...(config.search ?? {}) }, + indexing: { ...current.indexing, ...(config.indexing ?? {}) }, + }; + stmts.setConfig.run('main', JSON.stringify(merged), new Date().toISOString()); + }, + + async vacuum(): Promise { + db.exec('VACUUM'); + }, + + async rebuildFTS(): Promise { + if (ftsAvailable) { + db.exec("INSERT INTO rag_chunks_fts(rag_chunks_fts) VALUES('rebuild')"); + } + }, + + close(): void { + db.close(); + }, + }; + + return storage; +} + +// ============================================================================ +// Singleton Instance +// ============================================================================ + +let ragStorageInstance: RAGStorage | null = null; + +export async function getRAGStorage(): Promise { + // Ensure SQLite is loaded + const available = await loadSqlite(); + if (!available) { + throw new Error( + 'RAG storage requires better-sqlite3. Install it with: npm install better-sqlite3' + ); + } + + if (!ragStorageInstance) { + ragStorageInstance = await createRAGStorage(); + } + return ragStorageInstance; +} + +export function resetRAGStorage(): void { + if (ragStorageInstance) { + ragStorageInstance.close(); + ragStorageInstance = null; + } +} diff --git a/src/rag/types.d.ts b/src/rag/types.d.ts new file mode 100644 index 0000000..c47ed8f --- /dev/null +++ b/src/rag/types.d.ts @@ -0,0 +1,97 @@ +/** + * Type declarations for external RAG dependencies + */ + +// better-sqlite3 types +declare module 'better-sqlite3' { + interface Statement { + run(...params: unknown[]): Database.RunResult; + get(...params: unknown[]): unknown; + all(...params: unknown[]): unknown[]; + iterate(...params: unknown[]): IterableIterator; + pluck(toggle?: boolean): this; + expand(toggle?: boolean): this; + raw(toggle?: boolean): this; + bind(...params: unknown[]): this; + columns(): Database.ColumnDefinition[]; + safeIntegers(toggle?: boolean): this; + } + + interface RunResult { + changes: number; + lastInsertRowid: number | bigint; + } + + interface ColumnDefinition { + name: string; + column: string | null; + table: string | null; + database: string | null; + type: string | null; + } + + interface Database { + prepare(sql: string): Statement; + exec(sql: string): this; + close(): void; + pragma(str: string, options?: { simple?: boolean }): unknown; + transaction unknown>(fn: T): T; + readonly name: string; + readonly open: boolean; + readonly inTransaction: boolean; + readonly readonly: boolean; + readonly memory: boolean; + } + + interface DatabaseConstructor { + new (filename: string, options?: DatabaseConstructorOptions): Database; + (filename: string, options?: DatabaseConstructorOptions): Database; + } + + interface DatabaseConstructorOptions { + readonly?: boolean; + fileMustExist?: boolean; + timeout?: number; + verbose?: (message?: unknown, ...additionalArgs: unknown[]) => void; + nativeBinding?: string; + } + + const Database: DatabaseConstructor; + export default Database; + export { Database, Statement, RunResult, ColumnDefinition, DatabaseConstructorOptions }; +} + +// @xenova/transformers types (minimal for our usage) +declare module '@xenova/transformers' { + export class AutoTokenizer { + static from_pretrained(modelId: string, options?: unknown): Promise; + encode(text: string): { input_ids: number[] }; + } + + export class AutoModel { + static from_pretrained(modelId: string, options?: unknown): Promise; + } + + export function pipeline( + task: string, + model?: string, + options?: unknown + ): Promise; + + export interface FeatureExtractionPipeline { + ( + texts: string | string[], + options?: { pooling?: string; normalize?: boolean } + ): Promise<{ + tolist(): number[][]; + data: Float32Array; + dims: number[]; + }>; + } + + export const env: { + allowLocalModels: boolean; + useBrowserCache: boolean; + cacheDir?: string; + }; +} diff --git a/src/server.ts b/src/server.ts index dbc116d..bf8647c 100644 --- a/src/server.ts +++ b/src/server.ts @@ -56,6 +56,18 @@ import { getDailyDigest, getProductivityStats, } from './productivity-features.js'; +import { + indexDocument, + indexProjectContext, + search, + buildContextFromSearch, + deleteDocument as deleteRAGDocument, + listDocuments, + getRAGStats, + getRAGConfig, + updateRAGConfig, +} from './rag/index.js'; +import { resetEmbeddingProvider } from './rag/embeddings.js'; import { ProjectContext, Phase, @@ -63,6 +75,8 @@ import { AgentRole, EventType, AuditAction, + EmbeddingProvider, + ChunkingStrategy, createProject, addTask, addNote, @@ -1186,6 +1200,259 @@ Shows: }, }, }, + + // ============================================================================ + // RAG (Retrieval-Augmented Generation) Tools + // ============================================================================ + { + name: 'rag_index_document', + description: `Index a custom document for semantic search. + +Use this to add external documents, notes, or any text content to the RAG system. +Documents are chunked and embedded for later retrieval. + +Returns the indexed document with chunk count.`, + inputSchema: { + type: 'object', + properties: { + title: { + type: 'string', + description: 'Document title for identification', + }, + content: { + type: 'string', + description: 'Full text content to index', + }, + project_id: { + type: 'string', + description: 'Associate with specific project (optional)', + }, + metadata: { + type: 'object', + description: 'Additional metadata to store with document', + }, + }, + required: ['title', 'content'], + }, + }, + { + name: 'rag_index_project', + description: `Index an entire project context for semantic search. + +Indexes the project description, all tasks, and significant notes. +Useful for making project knowledge searchable. + +Returns count of documents and chunks created.`, + inputSchema: { + type: 'object', + properties: { + project_id: { + type: 'string', + description: 'Project ID to index. Uses active project if omitted.', + }, + }, + }, + }, + { + name: 'rag_search', + description: `Search indexed documents using semantic, keyword, or hybrid search. + +Search types: +- vector: Pure semantic search using embeddings +- keyword: Full-text keyword search +- hybrid: Combined vector + keyword (default, best results) + +Returns ranked results with relevance scores.`, + inputSchema: { + type: 'object', + properties: { + query: { + type: 'string', + description: 'Search query text', + }, + project_id: { + type: 'string', + description: 'Limit search to specific project (optional)', + }, + search_type: { + type: 'string', + enum: ['vector', 'keyword', 'hybrid'], + description: 'Search method. Default: hybrid', + }, + top_k: { + type: 'number', + description: 'Number of results to return. Default: 5', + }, + min_score: { + type: 'number', + description: 'Minimum relevance score (0-1). Default: 0.3', + }, + }, + required: ['query'], + }, + }, + { + name: 'rag_query_context', + description: `Get formatted context for prompts based on a query. + +Performs semantic search and formats results into a context string +suitable for including in LLM prompts. + +Returns context string and source references.`, + inputSchema: { + type: 'object', + properties: { + query: { + type: 'string', + description: 'Query to find relevant context for', + }, + project_id: { + type: 'string', + description: 'Limit to specific project (optional)', + }, + max_context_length: { + type: 'number', + description: 'Maximum context length in characters. Default: 4000', + }, + include_metadata: { + type: 'boolean', + description: 'Include document metadata in context. Default: true', + }, + }, + required: ['query'], + }, + }, + { + name: 'rag_list_documents', + description: `List all indexed documents. + +Shows document titles, source types, chunk counts, and project associations. +Useful for understanding what content is available for search.`, + inputSchema: { + type: 'object', + properties: { + project_id: { + type: 'string', + description: 'Filter by project (optional)', + }, + source_type: { + type: 'string', + enum: ['project_context', 'task', 'note', 'custom_document'], + description: 'Filter by source type (optional)', + }, + limit: { + type: 'number', + description: 'Maximum documents to return. Default: 50', + }, + }, + }, + }, + { + name: 'rag_delete_document', + description: `Delete an indexed document and its chunks. + +Removes the document from the search index. +Use rag_list_documents to find document IDs.`, + inputSchema: { + type: 'object', + properties: { + document_id: { + type: 'string', + description: 'Document ID to delete', + }, + }, + required: ['document_id'], + }, + }, + { + name: 'rag_get_stats', + description: `Get RAG system statistics. + +Shows: +- Total documents and chunks +- Indexed vs unindexed chunks +- Documents per project +- Embedding provider and dimensions`, + inputSchema: { + type: 'object', + properties: {}, + }, + }, + { + name: 'rag_configure', + description: `Configure RAG system settings. + +Configure embedding provider, chunking strategy, and search parameters. +Changes take effect for new indexing operations. + +Embedding providers: local, openai, voyage, cohere, custom +Chunking strategies: paragraph, sentence, fixed, semantic`, + inputSchema: { + type: 'object', + properties: { + embedding: { + type: 'object', + description: 'Embedding configuration', + properties: { + provider: { + type: 'string', + enum: ['local', 'openai', 'voyage', 'cohere', 'custom'], + description: 'Embedding provider', + }, + model: { + type: 'string', + description: 'Model name (provider-specific)', + }, + api_key: { + type: 'string', + description: 'API key for cloud providers', + }, + api_endpoint: { + type: 'string', + description: 'Custom API endpoint URL', + }, + }, + }, + chunking: { + type: 'object', + description: 'Chunking configuration', + properties: { + strategy: { + type: 'string', + enum: ['paragraph', 'sentence', 'fixed', 'semantic'], + description: 'Chunking strategy', + }, + chunk_size: { + type: 'number', + description: 'Target chunk size in characters', + }, + chunk_overlap: { + type: 'number', + description: 'Overlap between chunks', + }, + }, + }, + search: { + type: 'object', + description: 'Search configuration', + properties: { + top_k: { + type: 'number', + description: 'Default number of results', + }, + min_score: { + type: 'number', + description: 'Default minimum score', + }, + hybrid_vector_weight: { + type: 'number', + description: 'Vector weight in hybrid search (0-1)', + }, + }, + }, + }, + }, + }, ]; // ============================================================================ @@ -2528,6 +2795,272 @@ async function handleGetProductivityStats(args: Record): Promis ${topTags}`); } +// ============================================================================ +// RAG Tool Handlers +// ============================================================================ + +async function handleRAGIndexDocument(args: Record): Promise { + const title = args.title as string; + const content = args.content as string; + const projectId = args.project_id as string | undefined; + const metadata = args.metadata as Record | undefined; + + if (!title || !content) { + return error('Title and content are required'); + } + + const doc = await indexDocument(title, content, { + projectId, + sourceType: 'custom_document', + metadata, + }); + + return success(`πŸ“„ Document indexed successfully! + +ID: ${doc.id} +Title: ${doc.title} +Chunks: ${doc.chunkCount} +Project: ${doc.projectId ?? 'none'} +Created: ${doc.createdAt}`); +} + +async function handleRAGIndexProject(args: Record): Promise { + const projectId = args.project_id as string | undefined; + + const storage = await getStorage(); + let project: ProjectContext | null; + + if (projectId) { + project = await storage.loadProject(projectId); + } else { + project = await storage.getActiveProject(); + } + + if (!project) { + return error('No project found. Specify project_id or set an active project.'); + } + + const result = await indexProjectContext(project); + + return success(`πŸ“š Project indexed successfully! + +Project: ${project.name} +Documents created: ${result.documents.length} +Total chunks: ${result.totalChunks} + +Indexed: +- 1 project context +- ${project.tasks.length} tasks +- ${result.documents.length - 1 - project.tasks.length} significant notes`); +} + +async function handleRAGSearch(args: Record): Promise { + const query = args.query as string; + const projectId = args.project_id as string | undefined; + const searchType = args.search_type as 'vector' | 'keyword' | 'hybrid' | undefined; + const topK = args.top_k as number | undefined; + const minScore = args.min_score as number | undefined; + + if (!query) { + return error('Query is required'); + } + + const result = await search(query, { + projectId, + searchType, + topK, + minScore, + }); + + if (result.results.length === 0) { + return success(`πŸ” No results found for: "${query}" + +Try: +- Different search terms +- Lowering min_score threshold +- Using keyword search for exact matches +- Indexing more documents`); + } + + const resultList = result.results + .map( + (r, i) => + `${i + 1}. [${(r.score * 100).toFixed(1)}%] ${r.document.title} + ${r.chunk.content.substring(0, 150)}${r.chunk.content.length > 150 ? '...' : ''}` + ) + .join('\n\n'); + + return success(`πŸ” Search Results for: "${query}" + +Found: ${result.totalFound} results +Search time: ${result.searchTimeMs}ms +Embedding provider: ${result.embeddingProvider} + +${resultList}`); +} + +async function handleRAGQueryContext(args: Record): Promise { + const query = args.query as string; + const projectId = args.project_id as string | undefined; + const maxContextLength = args.max_context_length as number | undefined; + const includeMetadata = args.include_metadata as boolean | undefined; + + if (!query) { + return error('Query is required'); + } + + const result = await buildContextFromSearch(query, { + projectId, + maxContextLength, + includeMetadata, + }); + + if (result.sources.length === 0) { + return success(`πŸ“‹ No relevant context found for: "${query}" + +Try indexing more documents or using different search terms.`); + } + + const sourceList = result.sources + .map((s) => `- ${s.title} (${(s.score * 100).toFixed(1)}%)`) + .join('\n'); + + return success(`πŸ“‹ Context for: "${query}" + +Sources (${result.sources.length}): +${sourceList} + +--- CONTEXT START --- +${result.context} +--- CONTEXT END --- + +Search time: ${result.searchResult.searchTimeMs}ms +Context length: ${result.context.length} characters`); +} + +async function handleRAGListDocuments(args: Record): Promise { + const projectId = args.project_id as string | undefined; + const sourceType = args.source_type as string | undefined; + const limit = args.limit as number | undefined; + + const docs = await listDocuments({ + projectId, + sourceType, + limit: limit ?? 50, + }); + + if (docs.length === 0) { + return success(`πŸ“„ No documents indexed yet. + +Use rag_index_document or rag_index_project to add content.`); + } + + const docList = docs + .map( + (d) => + `- [${d.id.substring(0, 8)}] ${d.title} + Type: ${d.sourceType} | Chunks: ${d.chunkCount} | Project: ${d.projectId ?? 'none'}` + ) + .join('\n'); + + return success(`πŸ“„ Indexed Documents (${docs.length}) + +${docList}`); +} + +async function handleRAGDeleteDocument(args: Record): Promise { + const documentId = args.document_id as string; + + if (!documentId) { + return error('document_id is required'); + } + + const deleted = await deleteRAGDocument(documentId); + + if (deleted) { + return success(`πŸ—‘οΈ Document deleted: ${documentId}`); + } else { + return error(`Document not found: ${documentId}`); + } +} + +async function handleRAGGetStats(): Promise { + const stats = await getRAGStats(); + + const projectBreakdown = + Object.entries(stats.projectBreakdown) + .map(([pid, count]) => ` ${pid}: ${count} documents`) + .join('\n') || ' (no project associations)'; + + return success(`πŸ“Š RAG System Statistics + +Documents: ${stats.totalDocuments} +Chunks: ${stats.totalChunks} +Indexed chunks: ${stats.indexedChunks} (${((stats.indexedChunks / Math.max(stats.totalChunks, 1)) * 100).toFixed(1)}%) + +Embedding Provider: ${stats.embeddingProvider} +Embedding Dimensions: ${stats.embeddingDimensions} + +Documents by Project: +${projectBreakdown}`); +} + +async function handleRAGConfigure(args: Record): Promise { + const embeddingConfig = args.embedding as Record | undefined; + const chunkingConfig = args.chunking as Record | undefined; + const searchConfig = args.search as Record | undefined; + + const updates: Parameters[0] = {}; + + if (embeddingConfig) { + updates.embedding = { + provider: embeddingConfig.provider as EmbeddingProvider | undefined, + model: embeddingConfig.model as string | undefined, + apiKey: embeddingConfig.api_key as string | undefined, + apiEndpoint: embeddingConfig.api_endpoint as string | undefined, + }; + // Reset embedding provider to pick up new config + resetEmbeddingProvider(); + } + + if (chunkingConfig) { + updates.chunking = { + strategy: chunkingConfig.strategy as ChunkingStrategy | undefined, + chunkSize: chunkingConfig.chunk_size as number | undefined, + chunkOverlap: chunkingConfig.chunk_overlap as number | undefined, + }; + } + + if (searchConfig) { + updates.search = { + topK: searchConfig.top_k as number | undefined, + minScore: searchConfig.min_score as number | undefined, + hybridVectorWeight: searchConfig.hybrid_vector_weight as number | undefined, + }; + } + + await updateRAGConfig(updates); + + const config = await getRAGConfig(); + + return success(`βš™οΈ RAG Configuration Updated + +Embedding: + Provider: ${config.embedding.provider} + Model: ${config.embedding.model} + Dimensions: ${config.embedding.dimensions} + +Chunking: + Strategy: ${config.chunking.strategy} + Chunk size: ${config.chunking.chunkSize} + Overlap: ${config.chunking.chunkOverlap} + +Search: + Top K: ${config.search.topK} + Min score: ${config.search.minScore} + Hybrid vector weight: ${config.search.hybridVectorWeight}`); +} + // ============================================================================ // Server Setup // ============================================================================ @@ -2667,6 +3200,24 @@ export async function createServer(): Promise { case 'get_productivity_stats': return await handleGetProductivityStats(args ?? {}); + // RAG (Retrieval-Augmented Generation) + case 'rag_index_document': + return await handleRAGIndexDocument(args ?? {}); + case 'rag_index_project': + return await handleRAGIndexProject(args ?? {}); + case 'rag_search': + return await handleRAGSearch(args ?? {}); + case 'rag_query_context': + return await handleRAGQueryContext(args ?? {}); + case 'rag_list_documents': + return await handleRAGListDocuments(args ?? {}); + case 'rag_delete_document': + return await handleRAGDeleteDocument(args ?? {}); + case 'rag_get_stats': + return await handleRAGGetStats(); + case 'rag_configure': + return await handleRAGConfigure(args ?? {}); + default: return error(`Unknown tool: ${name}`); } diff --git a/tests/chunking.test.ts b/tests/chunking.test.ts new file mode 100644 index 0000000..3a4e85e --- /dev/null +++ b/tests/chunking.test.ts @@ -0,0 +1,500 @@ +/** + * Comprehensive Tests for CortexFlow RAG Chunking Module + * Tests chunking strategies, token estimation, and chunk merging + */ + +describe('RAG Chunking Module', () => { + let chunking: typeof import('../src/rag/chunking.js'); + + beforeAll(async () => { + chunking = await import('../src/rag/chunking.js'); + }); + + // ============================================================================ + // Paragraph Chunking Tests + // ============================================================================ + + describe('Paragraph Chunking', () => { + const paragraphConfig = { + strategy: 'paragraph' as const, + chunkSize: 500, + chunkOverlap: 50, + minChunkSize: 20, + maxChunkSize: 1000, + }; + + it('should split text by double newlines', () => { + const text = `First paragraph here. + +Second paragraph here. + +Third paragraph here.`; + + const chunks = chunking.chunkDocument(text, paragraphConfig); + + expect(chunks.length).toBe(3); + expect(chunks[0].content).toContain('First'); + expect(chunks[1].content).toContain('Second'); + expect(chunks[2].content).toContain('Third'); + }); + + it('should handle single paragraph text', () => { + const text = 'Single paragraph without any double newlines.'; + const chunks = chunking.chunkDocument(text, paragraphConfig); + + expect(chunks.length).toBe(1); + expect(chunks[0].content).toBe(text); + }); + + it('should handle multiple consecutive newlines', () => { + const text = `First paragraph. + + + +Second paragraph after many newlines.`; + + const chunks = chunking.chunkDocument(text, paragraphConfig); + expect(chunks.length).toBeGreaterThanOrEqual(2); + }); + + it('should preserve chunk indices', () => { + const text = `Para 1. + +Para 2. + +Para 3. + +Para 4.`; + + const chunks = chunking.chunkDocument(text, paragraphConfig); + + chunks.forEach((chunk, i) => { + expect(chunk.index).toBe(i); + }); + }); + + it('should track start and end offsets', () => { + const text = `First paragraph. + +Second paragraph.`; + + const chunks = chunking.chunkDocument(text, paragraphConfig); + + expect(chunks[0].startOffset).toBe(0); + expect(chunks[0].endOffset).toBeGreaterThan(0); + expect(chunks[1].startOffset).toBeGreaterThan(chunks[0].endOffset); + }); + }); + + // ============================================================================ + // Sentence Chunking Tests + // ============================================================================ + + describe('Sentence Chunking', () => { + const sentenceConfig = { + strategy: 'sentence' as const, + chunkSize: 100, + chunkOverlap: 20, + minChunkSize: 10, + maxChunkSize: 200, + }; + + it('should split text by sentence boundaries', () => { + const text = 'First sentence. Second sentence. Third sentence.'; + const chunks = chunking.chunkDocument(text, sentenceConfig); + + expect(chunks.length).toBeGreaterThanOrEqual(1); + chunks.forEach((chunk) => { + expect(chunk.content.length).toBeGreaterThan(0); + }); + }); + + it('should handle question marks', () => { + const text = 'Is this a question? Yes it is. What about this?'; + const chunks = chunking.chunkDocument(text, sentenceConfig); + + expect(chunks.length).toBeGreaterThanOrEqual(1); + }); + + it('should handle exclamation marks', () => { + const text = 'Wow! Amazing! This is great.'; + const chunks = chunking.chunkDocument(text, sentenceConfig); + + expect(chunks.length).toBeGreaterThanOrEqual(1); + }); + + it('should handle abbreviations with periods', () => { + const text = 'Dr. Smith went to the U.S.A. for a conference. It was great.'; + const chunks = chunking.chunkDocument(text, sentenceConfig); + + // Should not split on abbreviation periods + expect(chunks.length).toBeGreaterThanOrEqual(1); + }); + + it('should group sentences to meet chunk size', () => { + const text = 'A. B. C. D. E. F. G. H. I. J.'; + const chunks = chunking.chunkDocument(text, { + ...sentenceConfig, + chunkSize: 20, + minChunkSize: 5, + }); + + // Sentences should be grouped together + expect(chunks.length).toBeGreaterThanOrEqual(1); + }); + }); + + // ============================================================================ + // Fixed Size Chunking Tests + // ============================================================================ + + describe('Fixed Size Chunking', () => { + const fixedConfig = { + strategy: 'fixed' as const, + chunkSize: 100, + chunkOverlap: 20, + minChunkSize: 10, + maxChunkSize: 150, + }; + + it('should create chunks of approximately equal size', () => { + const text = 'A'.repeat(500); + const chunks = chunking.chunkDocument(text, fixedConfig); + + expect(chunks.length).toBeGreaterThanOrEqual(4); + chunks.forEach((chunk) => { + expect(chunk.content.length).toBeLessThanOrEqual(fixedConfig.maxChunkSize); + }); + }); + + it('should apply overlap between chunks', () => { + const text = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.repeat(20); + const chunks = chunking.chunkDocument(text, { + ...fixedConfig, + chunkOverlap: 10, + }); + + // Adjacent chunks should have some overlap + if (chunks.length > 1) { + const lastPartOfFirst = chunks[0].content.slice(-10); + const firstPartOfSecond = chunks[1].content.slice(0, 20); + // There should be some character overlap + expect(chunks.length).toBeGreaterThan(1); + } + }); + + it('should handle text shorter than chunk size', () => { + const text = 'Short text'; + const chunks = chunking.chunkDocument(text, fixedConfig); + + expect(chunks.length).toBe(1); + expect(chunks[0].content).toBe(text); + }); + + it('should handle exact chunk size text', () => { + const text = 'X'.repeat(100); + const chunks = chunking.chunkDocument(text, fixedConfig); + + expect(chunks.length).toBeGreaterThanOrEqual(1); + }); + }); + + // ============================================================================ + // Semantic Chunking Tests + // ============================================================================ + + describe('Semantic Chunking', () => { + const semanticConfig = { + strategy: 'semantic' as const, + chunkSize: 500, + chunkOverlap: 50, + minChunkSize: 20, + maxChunkSize: 1000, + }; + + it('should split on markdown headers', () => { + const text = `# Header 1 + +Content under header 1. + +## Header 2 + +Content under header 2. + +### Header 3 + +Content under header 3.`; + + const chunks = chunking.chunkDocument(text, semanticConfig); + + expect(chunks.length).toBeGreaterThanOrEqual(2); + }); + + it('should handle code blocks', () => { + const text = `Some text here. + +\`\`\`javascript +function hello() { + console.log('Hello'); +} +\`\`\` + +More text after code.`; + + const chunks = chunking.chunkDocument(text, semanticConfig); + expect(chunks.length).toBeGreaterThanOrEqual(1); + }); + + it('should handle mixed content', () => { + const text = `# Introduction + +This is the introduction paragraph. + +## Features + +- Feature 1 +- Feature 2 +- Feature 3 + +## Code Example + +\`\`\` +code here +\`\`\` + +## Conclusion + +Final thoughts.`; + + const chunks = chunking.chunkDocument(text, semanticConfig); + expect(chunks.length).toBeGreaterThanOrEqual(2); + }); + }); + + // ============================================================================ + // Token Estimation Tests + // ============================================================================ + + describe('Token Estimation', () => { + it('should estimate tokens for simple text', () => { + const text = 'Hello world'; + const tokens = chunking.estimateTokenCount(text); + + expect(tokens).toBeGreaterThan(0); + expect(tokens).toBeLessThan(text.length); + }); + + it('should estimate more tokens for longer text', () => { + const short = 'Hello'; + const long = 'Hello world, this is a much longer piece of text.'; + + const shortTokens = chunking.estimateTokenCount(short); + const longTokens = chunking.estimateTokenCount(long); + + expect(longTokens).toBeGreaterThan(shortTokens); + }); + + it('should handle empty string', () => { + const tokens = chunking.estimateTokenCount(''); + expect(tokens).toBe(0); + }); + + it('should handle special characters', () => { + const text = '!@#$%^&*()_+-=[]{}|;:\'",.<>?/`~'; + const tokens = chunking.estimateTokenCount(text); + + expect(tokens).toBeGreaterThan(0); + }); + + it('should handle unicode', () => { + const text = 'Hello δΈ–η•Œ 🌍'; + const tokens = chunking.estimateTokenCount(text); + + expect(tokens).toBeGreaterThan(0); + }); + }); + + // ============================================================================ + // Recommended Chunk Size Tests + // ============================================================================ + + describe('Recommended Chunk Size', () => { + it('should return appropriate size for OpenAI models', () => { + const size = chunking.getRecommendedChunkSize('text-embedding-3-small'); + expect(size).toBeGreaterThan(0); + expect(size).toBeLessThan(10000); + }); + + it('should return appropriate size for text-embedding-3-large', () => { + const size = chunking.getRecommendedChunkSize('text-embedding-3-large'); + expect(size).toBeGreaterThan(0); + }); + + it('should return appropriate size for ada model', () => { + const size = chunking.getRecommendedChunkSize('text-embedding-ada-002'); + expect(size).toBeGreaterThan(0); + }); + + it('should return default size for unknown models', () => { + const size = chunking.getRecommendedChunkSize('unknown-model'); + expect(size).toBeGreaterThan(0); + }); + + it('should return appropriate size for local models', () => { + const size = chunking.getRecommendedChunkSize('Xenova/all-MiniLM-L6-v2'); + expect(size).toBeGreaterThan(0); + }); + }); + + // ============================================================================ + // Chunk Merging Tests + // ============================================================================ + + describe('Chunk Merging', () => { + it('should merge small adjacent chunks', () => { + const chunks = [ + { content: 'Small', startOffset: 0, endOffset: 5, index: 0 }, + { content: 'Tiny', startOffset: 6, endOffset: 10, index: 1 }, + { content: 'This is a larger chunk', startOffset: 11, endOffset: 33, index: 2 }, + ]; + + const merged = chunking.mergeSmallChunks(chunks, 15); + + expect(merged.length).toBeLessThanOrEqual(chunks.length); + }); + + it('should not merge chunks above minimum size', () => { + const chunks = [ + { content: 'This is a sufficiently large chunk', startOffset: 0, endOffset: 35, index: 0 }, + { content: 'Another sufficiently large chunk', startOffset: 36, endOffset: 68, index: 1 }, + ]; + + const merged = chunking.mergeSmallChunks(chunks, 10); + + expect(merged.length).toBe(chunks.length); + }); + + it('should update indices after merging', () => { + const chunks = [ + { content: 'A', startOffset: 0, endOffset: 1, index: 0 }, + { content: 'B', startOffset: 2, endOffset: 3, index: 1 }, + { content: 'C', startOffset: 4, endOffset: 5, index: 2 }, + ]; + + const merged = chunking.mergeSmallChunks(chunks, 10); + + merged.forEach((chunk, i) => { + expect(chunk.index).toBe(i); + }); + }); + + it('should handle empty chunk array', () => { + const merged = chunking.mergeSmallChunks([], 10); + expect(merged).toEqual([]); + }); + + it('should handle single chunk', () => { + const chunks = [{ content: 'Single', startOffset: 0, endOffset: 6, index: 0 }]; + + const merged = chunking.mergeSmallChunks(chunks, 10); + + expect(merged.length).toBe(1); + }); + }); + + // ============================================================================ + // Split Oversized Chunk Tests + // ============================================================================ + + describe('Split Oversized Chunk', () => { + it('should split chunks exceeding max size', () => { + const chunk = { + content: 'A'.repeat(500), + startOffset: 0, + endOffset: 500, + index: 0, + }; + + const result = chunking.splitOversizedChunk(chunk, 100); + + expect(result.length).toBeGreaterThan(1); + result.forEach((c) => { + expect(c.content.length).toBeLessThanOrEqual(150); // Some tolerance + }); + }); + + it('should not split chunks within max size', () => { + const chunk = { + content: 'Short text', + startOffset: 0, + endOffset: 10, + index: 0, + }; + + const result = chunking.splitOversizedChunk(chunk, 100); + + expect(result.length).toBe(1); + expect(result[0].content).toBe(chunk.content); + }); + + it('should update offsets correctly', () => { + const chunk = { + content: 'ABCDEFGHIJ'.repeat(10), + startOffset: 100, + endOffset: 200, + index: 0, + }; + + const result = chunking.splitOversizedChunk(chunk, 20); + + expect(result[0].startOffset).toBe(100); + if (result.length > 1) { + expect(result[1].startOffset).toBeGreaterThan(result[0].startOffset); + } + }); + }); + + // ============================================================================ + // Edge Cases + // ============================================================================ + + describe('Edge Cases', () => { + const defaultConfig = { + strategy: 'paragraph' as const, + chunkSize: 100, + chunkOverlap: 10, + minChunkSize: 5, + maxChunkSize: 200, + }; + + it('should handle empty text', () => { + const chunks = chunking.chunkDocument('', defaultConfig); + expect(chunks).toEqual([]); + }); + + it('should handle whitespace only text', () => { + const chunks = chunking.chunkDocument(' \n\n ', defaultConfig); + expect(chunks.length).toBeLessThanOrEqual(1); + }); + + it('should handle very long single word', () => { + const text = 'A'.repeat(1000); + const chunks = chunking.chunkDocument(text, defaultConfig); + + expect(chunks.length).toBeGreaterThanOrEqual(1); + }); + + it('should handle text with only newlines', () => { + const text = '\n\n\n\n\n'; + const chunks = chunking.chunkDocument(text, defaultConfig); + expect(chunks.length).toBeLessThanOrEqual(1); + }); + + it('should handle mixed line endings', () => { + const text = 'Line 1\r\nLine 2\nLine 3\rLine 4'; + const chunks = chunking.chunkDocument(text, defaultConfig); + + expect(chunks.length).toBeGreaterThanOrEqual(1); + }); + }); +}); diff --git a/tests/embeddings.test.ts b/tests/embeddings.test.ts new file mode 100644 index 0000000..f3f0037 --- /dev/null +++ b/tests/embeddings.test.ts @@ -0,0 +1,288 @@ +/** + * Comprehensive Tests for CortexFlow Embedding Providers + * Tests embedding provider creation, configuration, and batch processing + */ + +describe('Embedding Providers Module', () => { + let embeddings: typeof import('../src/rag/embeddings.js'); + + beforeAll(async () => { + embeddings = await import('../src/rag/embeddings.js'); + }); + + // ============================================================================ + // Provider Availability Tests + // ============================================================================ + + describe('Provider Availability', () => { + it('should return list of available providers', async () => { + const providers = await embeddings.getAvailableProviders(); + + expect(Array.isArray(providers)).toBe(true); + // At minimum, the structure should be an array + }); + + it('should indicate local provider availability', async () => { + const providers = await embeddings.getAvailableProviders(); + + // Local provider may or may not be available depending on transformers.js + expect(providers.length).toBeGreaterThanOrEqual(0); + }); + }); + + // ============================================================================ + // Provider Dimensions Tests + // ============================================================================ + + describe('Provider Dimensions', () => { + it('should return correct dimensions for local provider', () => { + const dims = embeddings.getProviderDimensions('local'); + expect(dims).toBe(384); + }); + + it('should return correct dimensions for OpenAI provider', () => { + const dims = embeddings.getProviderDimensions('openai'); + expect(dims).toBe(1536); + }); + + it('should return correct dimensions for Voyage provider', () => { + const dims = embeddings.getProviderDimensions('voyage'); + expect(dims).toBe(1024); + }); + + it('should return correct dimensions for Cohere provider', () => { + const dims = embeddings.getProviderDimensions('cohere'); + expect(dims).toBe(1024); + }); + + it('should return default dimensions for unknown provider', () => { + const dims = embeddings.getProviderDimensions('unknown' as any); + expect(dims).toBeGreaterThan(0); + }); + + it('should return correct dimensions for custom provider', () => { + const dims = embeddings.getProviderDimensions('custom'); + // Custom provider should have a default dimension + expect(dims).toBeGreaterThan(0); + }); + }); + + // ============================================================================ + // Provider Creation Tests + // ============================================================================ + + describe('Provider Creation', () => { + it('should create a local embedding provider', async () => { + const provider = await embeddings.createEmbeddingProvider({ + provider: 'local', + model: 'Xenova/all-MiniLM-L6-v2', + dimensions: 384, + batchSize: 10, + }); + + expect(provider).toBeDefined(); + expect(provider.name).toBe('local'); + expect(provider.dimensions).toBe(384); + }); + + it('should have required methods on provider', async () => { + const provider = await embeddings.createEmbeddingProvider({ + provider: 'local', + model: 'Xenova/all-MiniLM-L6-v2', + dimensions: 384, + batchSize: 10, + }); + + expect(typeof provider.embed).toBe('function'); + expect(typeof provider.embedBatch).toBe('function'); + expect(typeof provider.isAvailable).toBe('function'); + }); + + it('should check provider availability', async () => { + const provider = await embeddings.createEmbeddingProvider({ + provider: 'local', + model: 'Xenova/all-MiniLM-L6-v2', + dimensions: 384, + batchSize: 10, + }); + + const available = await provider.isAvailable(); + expect(typeof available).toBe('boolean'); + }); + + it('should create OpenAI provider config', async () => { + const provider = await embeddings.createEmbeddingProvider({ + provider: 'openai', + model: 'text-embedding-3-small', + dimensions: 1536, + batchSize: 100, + apiKey: 'test-key', + }); + + expect(provider).toBeDefined(); + expect(provider.name).toBe('openai'); + expect(provider.dimensions).toBe(1536); + }); + + it('should create Voyage provider config', async () => { + const provider = await embeddings.createEmbeddingProvider({ + provider: 'voyage', + model: 'voyage-2', + dimensions: 1024, + batchSize: 50, + apiKey: 'test-key', + }); + + expect(provider).toBeDefined(); + expect(provider.name).toBe('voyage'); + expect(provider.dimensions).toBe(1024); + }); + + it('should create Cohere provider config', async () => { + const provider = await embeddings.createEmbeddingProvider({ + provider: 'cohere', + model: 'embed-english-v3.0', + dimensions: 1024, + batchSize: 50, + apiKey: 'test-key', + }); + + expect(provider).toBeDefined(); + expect(provider.name).toBe('cohere'); + expect(provider.dimensions).toBe(1024); + }); + + it('should create custom provider config', async () => { + const provider = await embeddings.createEmbeddingProvider({ + provider: 'custom', + model: 'custom-model', + dimensions: 512, + batchSize: 20, + endpoint: 'http://localhost:8080/embed', + }); + + expect(provider).toBeDefined(); + expect(provider.name).toBe('custom'); + expect(provider.dimensions).toBe(512); + }); + }); + + // ============================================================================ + // Singleton Provider Tests + // ============================================================================ + + describe('Singleton Provider', () => { + beforeEach(() => { + embeddings.resetEmbeddingProvider(); + }); + + it('should get embedding provider singleton', async () => { + const provider = await embeddings.getEmbeddingProvider(); + + expect(provider).toBeDefined(); + expect(provider.name).toBeDefined(); + }); + + it('should return same instance on multiple calls', async () => { + const provider1 = await embeddings.getEmbeddingProvider(); + const provider2 = await embeddings.getEmbeddingProvider(); + + expect(provider1).toBe(provider2); + }); + + it('should reset and create new provider', async () => { + const provider1 = await embeddings.getEmbeddingProvider(); + embeddings.resetEmbeddingProvider(); + const provider2 = await embeddings.getEmbeddingProvider(); + + // After reset, should still work (may or may not be same instance) + expect(provider2).toBeDefined(); + }); + }); + + // ============================================================================ + // Embedding Config Tests + // ============================================================================ + + describe('Embedding Configuration', () => { + it('should accept valid provider names', async () => { + const providers = ['local', 'openai', 'voyage', 'cohere', 'custom']; + + for (const providerName of providers) { + const provider = await embeddings.createEmbeddingProvider({ + provider: providerName as any, + model: 'test-model', + dimensions: 384, + batchSize: 10, + }); + + expect(provider.name).toBe(providerName); + } + }); + + it('should use specified dimensions', async () => { + const dimensions = [128, 256, 384, 512, 768, 1024, 1536]; + + for (const dim of dimensions) { + const provider = await embeddings.createEmbeddingProvider({ + provider: 'custom', + model: 'test-model', + dimensions: dim, + batchSize: 10, + }); + + expect(provider.dimensions).toBe(dim); + } + }); + + it('should use specified batch size', async () => { + const provider = await embeddings.createEmbeddingProvider({ + provider: 'local', + model: 'test-model', + dimensions: 384, + batchSize: 50, + }); + + expect(provider).toBeDefined(); + }); + }); + + // ============================================================================ + // Edge Cases + // ============================================================================ + + describe('Edge Cases', () => { + it('should handle empty model name', async () => { + const provider = await embeddings.createEmbeddingProvider({ + provider: 'local', + model: '', + dimensions: 384, + batchSize: 10, + }); + + expect(provider).toBeDefined(); + }); + + it('should handle zero batch size', async () => { + const provider = await embeddings.createEmbeddingProvider({ + provider: 'local', + model: 'test-model', + dimensions: 384, + batchSize: 0, + }); + + expect(provider).toBeDefined(); + }); + + it('should handle large dimensions', async () => { + const provider = await embeddings.createEmbeddingProvider({ + provider: 'custom', + model: 'large-model', + dimensions: 4096, + batchSize: 10, + }); + + expect(provider.dimensions).toBe(4096); + }); + }); +}); diff --git a/tests/rag.test.ts b/tests/rag.test.ts new file mode 100644 index 0000000..60a8948 --- /dev/null +++ b/tests/rag.test.ts @@ -0,0 +1,529 @@ +/** + * Tests for CortexFlow RAG (Retrieval-Augmented Generation) Module + */ + +import { mkdtemp, rm, readdir } from 'fs/promises'; +import { tmpdir } from 'os'; +import { join } from 'path'; + +// Check if better-sqlite3 is available (native dependency) +let sqliteAvailable = true; +try { + await import('better-sqlite3'); +} catch { + sqliteAvailable = false; +} + +// We need to mock the data directory before importing RAG modules +const originalEnv = process.env.CORTEXFLOW_DATA_DIR; +let testDataDir: string; + +// Separate imports for modules that don't need SQLite +async function getChunkingModule() { + return import('../src/rag/chunking.js'); +} + +async function getEmbeddingsModule() { + return import('../src/rag/embeddings.js'); +} + +// Dynamic imports for modules that depend on SQLite +async function getRAGModules() { + const [storage, features, chunking, embeddings] = await Promise.all([ + import('../src/rag/rag-storage.js'), + import('../src/rag/rag-features.js'), + import('../src/rag/chunking.js'), + import('../src/rag/embeddings.js'), + ]); + return { storage, features, chunking, embeddings }; +} + +// Conditionally run tests that require SQLite +const describeWithSqlite = sqliteAvailable ? describe : describe.skip; + +describe('RAG Module', () => { + beforeAll(async () => { + testDataDir = await mkdtemp(join(tmpdir(), 'cortexflow-rag-test-')); + process.env.CORTEXFLOW_DATA_DIR = testDataDir; + }); + + afterAll(async () => { + if (originalEnv) { + process.env.CORTEXFLOW_DATA_DIR = originalEnv; + } else { + delete process.env.CORTEXFLOW_DATA_DIR; + } + + try { + await rm(testDataDir, { recursive: true, force: true }); + } catch { + // Ignore cleanup errors + } + }); + + beforeEach(async () => { + if (!sqliteAvailable) return; + + try { + const files = await readdir(testDataDir); + for (const file of files) { + await rm(join(testDataDir, file), { recursive: true, force: true }); + } + } catch { + // Directory might not exist yet + } + + // Reset singletons between tests + const { storage, embeddings } = await getRAGModules(); + storage.resetRAGStorage(); + embeddings.resetEmbeddingProvider(); + }); + + // ============================================================================ + // Chunking Tests + // ============================================================================ + + describe('Chunking', () => { + it('should chunk text by paragraphs', async () => { + const chunking = await getChunkingModule(); + + const text = `First paragraph with some content. + +Second paragraph with different content. + +Third paragraph to complete the test.`; + + const config = { + strategy: 'paragraph' as const, + chunkSize: 1000, + chunkOverlap: 100, + minChunkSize: 10, + maxChunkSize: 2000, + }; + + const chunks = chunking.chunkDocument(text, config); + + expect(chunks.length).toBeGreaterThan(0); + expect(chunks[0].content).toBeTruthy(); + expect(chunks[0].index).toBe(0); + }); + + it('should chunk text by sentences', async () => { + const chunking = await getChunkingModule(); + + const text = + 'First sentence here. Second sentence follows. Third sentence ends it.'; + + const config = { + strategy: 'sentence' as const, + chunkSize: 50, + chunkOverlap: 10, + minChunkSize: 10, + maxChunkSize: 100, + }; + + const chunks = chunking.chunkDocument(text, config); + + expect(chunks.length).toBeGreaterThan(0); + }); + + it('should chunk text by fixed size', async () => { + const chunking = await getChunkingModule(); + + const text = 'A'.repeat(500); + + const config = { + strategy: 'fixed' as const, + chunkSize: 100, + chunkOverlap: 20, + minChunkSize: 10, + maxChunkSize: 200, + }; + + const chunks = chunking.chunkDocument(text, config); + + expect(chunks.length).toBeGreaterThanOrEqual(3); + }); + + it('should handle semantic chunking with markdown headers', async () => { + const chunking = await getChunkingModule(); + + const text = `# Introduction + +Some introductory content here. + +## Section One + +Content for section one. + +## Section Two + +Content for section two.`; + + const config = { + strategy: 'semantic' as const, + chunkSize: 500, + chunkOverlap: 50, + minChunkSize: 10, + maxChunkSize: 1000, + }; + + const chunks = chunking.chunkDocument(text, config); + + expect(chunks.length).toBeGreaterThan(0); + }); + + it('should return empty array for empty text', async () => { + const chunking = await getChunkingModule(); + + const config = { + strategy: 'paragraph' as const, + chunkSize: 100, + chunkOverlap: 10, + minChunkSize: 10, + maxChunkSize: 200, + }; + + const chunks = chunking.chunkDocument('', config); + + expect(chunks).toEqual([]); + }); + + it('should estimate token count', async () => { + const chunking = await getChunkingModule(); + + const text = 'Hello world'; + const tokens = chunking.estimateTokenCount(text); + + // ~4 chars per token + expect(tokens).toBeGreaterThan(0); + expect(tokens).toBeLessThan(text.length); + }); + + it('should get recommended chunk size for models', async () => { + const chunking = await getChunkingModule(); + + const size = chunking.getRecommendedChunkSize('text-embedding-3-small'); + + expect(size).toBeGreaterThan(0); + expect(size).toBeLessThan(50000); + }); + + it('should merge small chunks', async () => { + const chunking = await getChunkingModule(); + + const chunks = [ + { content: 'Small', startOffset: 0, endOffset: 5, index: 0 }, + { content: 'Tiny', startOffset: 6, endOffset: 10, index: 1 }, + { content: 'A much longer chunk that exceeds minimum', startOffset: 11, endOffset: 51, index: 2 }, + ]; + + const merged = chunking.mergeSmallChunks(chunks, 20); + + expect(merged.length).toBeLessThanOrEqual(chunks.length); + }); + }); + + // ============================================================================ + // RAG Storage Tests (requires better-sqlite3) + // ============================================================================ + + describeWithSqlite('RAG Storage', () => { + it('should create storage instance', async () => { + const { storage } = await getRAGModules(); + const ragStorage = await storage.getRAGStorage(); + + expect(ragStorage).toBeDefined(); + expect(typeof ragStorage.saveDocument).toBe('function'); + expect(typeof ragStorage.getDocument).toBe('function'); + expect(typeof ragStorage.deleteDocument).toBe('function'); + expect(typeof ragStorage.vectorSearch).toBe('function'); + expect(typeof ragStorage.keywordSearch).toBe('function'); + expect(typeof ragStorage.hybridSearch).toBe('function'); + }); + + it('should save and retrieve a document', async () => { + const { storage } = await getRAGModules(); + const ragStorage = await storage.getRAGStorage(); + + // Import models for factory function + const models = await import('../src/models.js'); + const doc = models.createRAGDocument('Test Document', 'Test content here', { + sourceType: 'custom_document', + metadata: { testKey: 'testValue' }, + }); + + await ragStorage.saveDocument(doc); + const retrieved = await ragStorage.getDocument(doc.id); + + expect(retrieved).toBeDefined(); + expect(retrieved?.title).toBe('Test Document'); + expect(retrieved?.content).toBe('Test content here'); + expect(retrieved?.metadata.testKey).toBe('testValue'); + }); + + it('should list documents', async () => { + const { storage } = await getRAGModules(); + const ragStorage = await storage.getRAGStorage(); + const models = await import('../src/models.js'); + + const doc1 = models.createRAGDocument('Doc 1', 'Content 1'); + const doc2 = models.createRAGDocument('Doc 2', 'Content 2'); + + await ragStorage.saveDocument(doc1); + await ragStorage.saveDocument(doc2); + + const docs = await ragStorage.listDocuments({}); + + expect(docs.length).toBe(2); + }); + + it('should delete a document', async () => { + const { storage } = await getRAGModules(); + const ragStorage = await storage.getRAGStorage(); + const models = await import('../src/models.js'); + + const doc = models.createRAGDocument('To Delete', 'Delete me'); + await ragStorage.saveDocument(doc); + + const deleted = await ragStorage.deleteDocument(doc.id); + expect(deleted).toBe(true); + + const retrieved = await ragStorage.getDocument(doc.id); + expect(retrieved).toBeNull(); + }); + + it('should save and retrieve chunks', async () => { + const { storage } = await getRAGModules(); + const ragStorage = await storage.getRAGStorage(); + const models = await import('../src/models.js'); + + const doc = models.createRAGDocument('Test Doc', 'Test content'); + await ragStorage.saveDocument(doc); + + const chunk = models.createRAGChunk(doc.id, 'Chunk content', 0, { + startOffset: 0, + endOffset: 13, + }); + + await ragStorage.saveChunks([chunk]); + const chunks = await ragStorage.getChunks(doc.id); + + expect(chunks.length).toBe(1); + expect(chunks[0].content).toBe('Chunk content'); + }); + + it('should perform keyword search', async () => { + const { storage } = await getRAGModules(); + const ragStorage = await storage.getRAGStorage(); + const models = await import('../src/models.js'); + + const doc = models.createRAGDocument('Searchable Doc', 'Contains unique keyword here'); + doc.chunkCount = 1; + await ragStorage.saveDocument(doc); + + const chunk = models.createRAGChunk(doc.id, 'Contains unique keyword here', 0); + await ragStorage.saveChunks([chunk]); + await ragStorage.rebuildFTS(); + + const results = await ragStorage.keywordSearch('unique keyword', { limit: 10 }); + + expect(results.length).toBeGreaterThan(0); + }); + + it('should compute cosine similarity correctly', async () => { + const { storage } = await getRAGModules(); + + const vec1 = [1, 0, 0]; + const vec2 = [1, 0, 0]; + const vec3 = [0, 1, 0]; + + expect(storage.cosineSimilarity(vec1, vec2)).toBeCloseTo(1, 5); + expect(storage.cosineSimilarity(vec1, vec3)).toBeCloseTo(0, 5); + }); + + it('should get RAG statistics', async () => { + const { storage } = await getRAGModules(); + const ragStorage = await storage.getRAGStorage(); + const models = await import('../src/models.js'); + + const doc = models.createRAGDocument('Stats Test', 'Content for stats'); + await ragStorage.saveDocument(doc); + + const stats = await ragStorage.getStats(); + + expect(stats.totalDocuments).toBe(1); + expect(typeof stats.totalChunks).toBe('number'); + }); + + it('should get and update config', async () => { + const { storage } = await getRAGModules(); + const ragStorage = await storage.getRAGStorage(); + + const config = await ragStorage.getConfig(); + + expect(config.embedding).toBeDefined(); + expect(config.chunking).toBeDefined(); + expect(config.search).toBeDefined(); + + await ragStorage.updateConfig({ + search: { topK: 10 }, + }); + + const updated = await ragStorage.getConfig(); + expect(updated.search.topK).toBe(10); + }); + }); + + // ============================================================================ + // Embedding Provider Tests + // ============================================================================ + + describe('Embedding Providers', () => { + it('should get available providers', async () => { + const embeddings = await getEmbeddingsModule(); + + const providers = await embeddings.getAvailableProviders(); + + expect(Array.isArray(providers)).toBe(true); + // Note: local provider may not be available without transformers.js + // expect(providers.length).toBeGreaterThan(0); + }); + + it('should get provider dimensions', async () => { + const embeddings = await getEmbeddingsModule(); + + const localDims = embeddings.getProviderDimensions('local'); + expect(localDims).toBe(384); + + const openaiDims = embeddings.getProviderDimensions('openai'); + expect(openaiDims).toBe(1536); + }); + + it('should create embedding provider', async () => { + const embeddings = await getEmbeddingsModule(); + + const provider = await embeddings.createEmbeddingProvider({ + provider: 'local', + model: 'Xenova/all-MiniLM-L6-v2', + dimensions: 384, + batchSize: 10, + }); + + expect(provider).toBeDefined(); + expect(provider.name).toBe('local'); + expect(provider.dimensions).toBe(384); + }); + }); + + // ============================================================================ + // RAG Features (Integration) Tests + // ============================================================================ + + describeWithSqlite('RAG Features', () => { + it('should index a document', async () => { + const { features } = await getRAGModules(); + + const doc = await features.indexDocument('Test Document', 'This is test content for indexing', { + sourceType: 'custom_document', + skipEmbedding: true, // Skip for faster tests + }); + + expect(doc).toBeDefined(); + expect(doc.title).toBe('Test Document'); + expect(doc.chunkCount).toBeGreaterThan(0); + }); + + it('should list indexed documents', async () => { + const { features } = await getRAGModules(); + + await features.indexDocument('Doc 1', 'Content 1', { skipEmbedding: true }); + await features.indexDocument('Doc 2', 'Content 2', { skipEmbedding: true }); + + const docs = await features.listDocuments(); + + expect(docs.length).toBe(2); + }); + + it('should delete a document', async () => { + const { features } = await getRAGModules(); + + const doc = await features.indexDocument('To Delete', 'Delete content', { + skipEmbedding: true, + }); + + const deleted = await features.deleteDocument(doc.id); + expect(deleted).toBe(true); + + const retrieved = await features.getDocument(doc.id); + expect(retrieved).toBeNull(); + }); + + it('should perform search', async () => { + const { features, storage } = await getRAGModules(); + + await features.indexDocument('Searchable', 'Contains searchable content keyword', { + skipEmbedding: true, + }); + + // Rebuild FTS for keyword search + const ragStorage = await storage.getRAGStorage(); + await ragStorage.rebuildFTS(); + + const result = await features.search('searchable content', { + searchType: 'keyword', + }); + + expect(result).toBeDefined(); + expect(result.query).toBe('searchable content'); + }); + + it('should get RAG stats', async () => { + const { features } = await getRAGModules(); + + await features.indexDocument('Stats Doc', 'Content for statistics', { + skipEmbedding: true, + }); + + const stats = await features.getRAGStats(); + + expect(stats.totalDocuments).toBe(1); + expect(stats.embeddingProvider).toBeDefined(); + }); + + it('should get and update RAG config', async () => { + const { features } = await getRAGModules(); + + const config = await features.getRAGConfig(); + + expect(config).toBeDefined(); + expect(config.embedding).toBeDefined(); + + await features.updateRAGConfig({ + search: { topK: 15 }, + }); + + const updated = await features.getRAGConfig(); + expect(updated.search.topK).toBe(15); + }); + + it('should build context from search', async () => { + const { features, storage } = await getRAGModules(); + + await features.indexDocument('Context Doc', 'Important context information here', { + skipEmbedding: true, + }); + + const ragStorage = await storage.getRAGStorage(); + await ragStorage.rebuildFTS(); + + const result = await features.buildContextFromSearch('context information', { + searchType: 'keyword', + }); + + expect(result).toBeDefined(); + expect(result.context).toBeDefined(); + expect(result.sources).toBeDefined(); + }); + }); +});