Skip to main content
Use VectoriaDB with Enclave for semantic search in sandboxed environments.

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);
});
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']);

FrontMCP

FrontMCP integration

Express

Express integration

Next.js

Next.js integration