lorehub
Version:
Capture and surface the collective wisdom of your codebase
201 lines (157 loc) • 4.71 kB
Markdown
# Competitive Analysis: LoreHub vs Competitor
## Embeddings & Semantic Search Comparison
### Their Implementation
- **Model**: `all-MiniLM-L6-v2` via `@xenova/transformers`
- **Storage**: Local JSON files (`vectors/memory-index.json`, `vectors/task-index.json`)
- **Strategy**: Hybrid search (keywords + semantic)
- **Scale**: In-memory for thousands of items
### LoreHub Implementation
- **Model**: Same `all-MiniLM-L6-v2` via `@xenova/transformers`
- **Storage**: SQLite with `sqlite-vec` extension
- **Strategy**: Both traditional and semantic search
- **Scale**: Optimized for larger datasets with SQL indexing
## Key Differences
### 1. Storage Architecture
**Their Approach**:
```javascript
// JSON files for vector storage
vectors/memory-index.json
vectors/task-index.json
```
**LoreHub Approach**:
```sql
-- Native SQL with vector extension
CREATE VIRTUAL TABLE lores_vec USING vec0(
lore_id TEXT PRIMARY KEY,
embedding FLOAT[384]
)
```
### 2. Scalability
| Aspect | Competitor | LoreHub |
|--------|-----------|---------|
| Max Items | ~10K (in-memory) | 100K+ (indexed) |
| Query Speed | O(n) full scan | O(log n) indexed |
| Memory Usage | Loads all vectors | Loads on demand |
| Persistence | JSON files | Database with ACID |
### 3. Search Capabilities
**Competitor**:
- Hybrid search (keywords + semantic)
- Top-K results only
- Project filtering
**LoreHub**:
- Multiple search modes:
- Traditional SQL wildcards
- Semantic search (`--semantic`)
- Similar lores navigation
- Advanced filtering:
- By type, province, realm
- By confidence score
- By date ranges
- Relationship traversal
### 4. Integration Approach
**Competitor**:
- TaskMemoryLinker for connecting tasks to memories
- In-process only
**LoreHub**:
- MCP server for LLM integration
- CLI for human interaction
- Can work across processes
## Advantages We Have
### 1. **Better Scalability**
```sql
-- LoreHub uses proper database indexing
CREATE INDEX idx_lores_vec_embedding ON lores_vec(embedding);
-- Can handle 100K+ lores efficiently
```
### 2. **Richer Data Model**
```typescript
// LoreHub tracks more context
interface Lore {
content: string
why?: string // Reasoning
confidence: number
provinces: string[] // Monorepo support
source: Source // Provenance
// ... relationships, etc
}
```
### 3. **Production Features**
- ACID transactions
- Backup/restore with export/import
- Soft delete (archiving)
- Migration support
- Relationship tracking
### 4. **Better UX**
- Alternative screen mode
- Dynamic terminal sizing
- Similar lores navigation with history
- Fixed-width formatting
## Advantages They Have
### 1. **Simpler Setup**
- No SQLite dependency
- Pure JavaScript/JSON
### 2. **Task Integration**
- TaskMemoryLinker concept
- Direct task-to-memory connections
### 3. **Lighter Weight**
- No database process
- Smaller install size
## What We Could Learn
### 1. **Hybrid Search Scoring**
Their weighted scoring approach:
```javascript
// Combine keyword + semantic scores
const combinedScore = 0.3 * keywordScore + 0.7 * semanticScore
```
We could add this to our semantic search.
### 2. **Abstraction Layer**
```javascript
class VectorStorage {
// Abstract interface
}
class QdrantVectorStorage extends VectorStorage {
// Easy to swap backends
}
```
We're tied to sqlite-vec, could add abstraction.
### 3. **Memory Categories**
They seem to have "memory" and "task" as separate concepts. We could add:
- Fact categories beyond our types
- Task-specific lores
- Memory lifecycle management
## Our Unique Strengths
### 1. **Monorepo Support**
- Province-level tracking
- Cross-province insights
- 70+ provinces tested
### 2. **MCP Integration**
- 14 MCP tools
- Full CRUD via LLM
- Relationship management
### 3. **Professional CLI**
- Ink-based UI
- Keyboard shortcuts
- Export formats (JSON/Markdown)
### 4. **Lore Relationships**
- supersedes, contradicts, supports
- Relationship strength
- Traversal capabilities
## Migration Path for Their Users
If someone wanted to migrate from their system to LoreHub:
```bash
# 1. Export their data (they'd need to implement)
node export-memories.js > memories.json
# 2. Transform to our format
node transform-to-lorehub.js memories.json > lores.json
# 3. Import to LoreHub
lh import lores.json
# 4. Generate embeddings
lh migrate-embeddings
```
## Conclusion
While they have a simpler, lighter-weight approach that's great for small projects, LoreHub is designed for:
- Production use at scale
- Complex codebases (monorepos)
- Long-term knowledge retention
- Team collaboration via MCP
Their focus seems to be on task management with memory, while ours is on organizational knowledge management.