agentq_demo / db.js
Pepguy's picture
Update db.js
ea4a035 verified
const { createClient } = require('@supabase/supabase-js');
const MiniSearch = require('minisearch');
// require('dotenv').config();
// 1. Initialize Supabase
const supabaseUrl = process.env.SUPABASE_URL;
const supabaseKey = process.env.SUPABASE_KEY;
const supabase = createClient(supabaseUrl, supabaseKey);
// 2. Initialize In-Memory Search Engine
const searchEngine = new MiniSearch({
fields: ['name', 'description', 'keywords'],
storeFields: ['id', 'name', 'description', 'url', 'install_command', 'stars', 'reputation_score'],
searchOptions: { fuzzy: 0.2, prefix: true }
});
// 3. Hydrate RAM from Supabase
async function hydrateMemory() {
console.log("💧 Hydrating In-Memory Index from Supabase...");
try {
const { data, error } = await supabase
.from('mcp_tools')
.select('*');
if (error) throw error;
searchEngine.removeAll();
if (data && data.length > 0) {
searchEngine.addAll(data);
}
console.log(`✅ Loaded ${data.length} tools into RAM.`);
} catch (error) {
console.error("❌ Hydration Failed:", error.message);
}
}
function searchTools(query) {
if (searchEngine.documentCount === 0) return [];
return searchEngine.search(query);
}
module.exports = { supabase, searchEngine, hydrateMemory, searchTools };