Setup
src/enclave/document-search.ts
import { VectoriaDB, DocumentMetadata } from 'vectoriadb';
import { Enclave } from 'enclave';
interface DocumentMeta extends DocumentMetadata {
title: string;
category: string;
createdAt: string;
}
// Create search index
const documentIndex = new VectoriaDB<DocumentMeta>({
defaultSimilarityThreshold: 0.35,
useHNSW: true,
});
// Initialize in Enclave context
export async function initializeSearch(enclave: Enclave) {
await documentIndex.initialize();
// Index documents from Enclave storage
const documents = await enclave.listDocuments();
for (const doc of documents) {
await documentIndex.add(doc.id, doc.content, {
id: doc.id,
title: doc.title,
category: doc.category,
createdAt: doc.createdAt,
});
}
}
// Search documents
export async function searchDocuments(query: string, category?: string) {
return documentIndex.search(query, {
topK: 10,
filter: category ? (m) => m.category === category : undefined,
});
}
Sync with Enclave Events
src/enclave/sync.ts
// Keep index in sync with Enclave changes
enclave.on('document:created', async (doc) => {
await documentIndex.add(doc.id, doc.content, {
id: doc.id,
title: doc.title,
category: doc.category,
createdAt: doc.createdAt,
});
});
enclave.on('document:updated', async (doc) => {
await documentIndex.update(doc.id, {
text: doc.content,
metadata: {
id: doc.id,
title: doc.title,
category: doc.category,
createdAt: doc.createdAt,
},
});
});
enclave.on('document:deleted', async (docId) => {
documentIndex.remove(docId);
});
Category-based Search
src/enclave/category-search.ts
// Search within specific categories
export async function searchByCategory(
query: string,
categories: string[]
) {
return documentIndex.search(query, {
topK: 20,
filter: (m) => categories.includes(m.category),
});
}
// Usage
const codeResults = await searchByCategory('authentication', ['code', 'snippets']);
const docResults = await searchByCategory('getting started', ['documentation']);
Related
FrontMCP
FrontMCP integration
Express
Express integration
Next.js
Next.js integration