Duriin-API/workers/index.js

88 lines
3.1 KiB
JavaScript

const fs = require("fs");
const path = require("path");
const { getArchiveDb, getIntelligenceDb, runMigrations, runColumnMigrations, seedCompanies } = require("./db");
const { runQueueFeeder } = require("./queueFeeder");
const { runAugorWorker } = require("./augorWorker");
const { ensureCompanyEmbeddings } = require("./embeddings");
const { runConsolidationWorker } = require("./consolidationWorker");
const { runGraphWorker } = require("./graphWorker");
const { runSignalWorker } = require("./signalWorker");
require("dotenv").config({ path: path.resolve(__dirname, "../.env") });
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 openRouter = { ...rawConfig.openRouter };
if (process.env.OPEN_ROUTER_API_KEY) openRouter.apiKey = process.env.OPEN_ROUTER_API_KEY;
if (process.env.OPEN_ROUTER_LLM_MODEL) openRouter.llmModel = process.env.OPEN_ROUTER_LLM_MODEL;
if (process.env.OPEN_ROUTER_EMBED_MODEL) openRouter.embeddingModel = process.env.OPEN_ROUTER_EMBED_MODEL;
const config = {
duriin_db: process.env.DURIIN_DB || resolvePath(rawConfig.duriin_db, path.resolve(configDir, "archive.sqlite")),
intelligence_db: process.env.INTELLIGENCE_DB || resolvePath(rawConfig.intelligence_db, path.resolve(configDir, "intelligence.sqlite")),
llm: rawConfig.llm || {},
workers: rawConfig.workers || {},
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);
runColumnMigrations(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);
});
runConsolidationWorker(archiveDb, intelligenceDb, config).catch(err => {
console.error("[consolidation] fatal:", err);
process.exit(1);
});
runGraphWorker(archiveDb, intelligenceDb, config).catch(err => {
console.error("[graph] fatal:", err);
process.exit(1);
});
runSignalWorker(archiveDb, intelligenceDb, config).catch(err => {
console.error("[signal] 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);
});