const fs = require("fs"); const path = require("path"); const { getArchiveDb, getIntelligenceDb, runMigrations, seedCompanies } = require("./db"); const { runQueueFeeder } = require("./queueFeeder"); const { runAugorWorker } = require("./augorWorker"); const { ensureCompanyEmbeddings } = require("./embeddings"); const configPath = path.resolve(__dirname, "../config.json"); const configDir = path.dirname(configPath); const rawConfig = JSON.parse(fs.readFileSync(configPath, "utf8")); function resolvePath(p, fallback) { if (!p) return fallback; return path.isAbsolute(p) ? p : path.resolve(configDir, p); } const config = { duriin_db: resolvePath(rawConfig.duriin_db, path.resolve(configDir, "archive.sqlite")), intelligence_db: resolvePath(rawConfig.intelligence_db, path.resolve(configDir, "intelligence.sqlite")), llm: rawConfig.llm || {}, workers: rawConfig.workers || {}, openRouter: rawConfig.openRouter || {}, intelligence: rawConfig.intelligence || {}, }; console.log("[intelligence] starting up"); console.log(`[intelligence] archive: ${config.duriin_db}`); console.log(`[intelligence] intelligence: ${config.intelligence_db}`); const archiveDb = getArchiveDb(config.duriin_db); const intelligenceDb = getIntelligenceDb(config.intelligence_db); runMigrations(intelligenceDb); seedCompanies(intelligenceDb); ensureCompanyEmbeddings(intelligenceDb, config.openRouter).then(() => { console.log("[intelligence] company embeddings ready"); }).catch(err => { console.error("[intelligence] company embedding generation failed:", err.message); }); runQueueFeeder(archiveDb, intelligenceDb, config).catch(err => { console.error("[feeder] fatal:", err); process.exit(1); }); runAugorWorker(archiveDb, intelligenceDb, config).catch(err => { console.error("[augor] fatal:", err); process.exit(1); }); process.on("SIGINT", () => { console.log("[intelligence] shutting down"); process.exit(0); }); process.on("SIGTERM", () => { console.log("[intelligence] shutting down"); process.exit(0); });