88 lines
3.1 KiB
JavaScript
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);
|
|
});
|