import { config } from "dotenv"; config(); import { getDb, registerAgent, logActivity } from "./core/database.js"; import { startApiServer } from "./api/server.js"; import { startTelegram, notifyFounder } from "./channels/telegram.js"; import { AGENT_ROSTER } from "./agents/definitions.js"; import { runAgent } from "./core/agent-runner.js"; import { logger } from "./utils/logger.js"; async function main() { logger.info(` ╔══════════════════════════════════════════════╗ ║ Верный вектор — Agent Hub v0.2.0 ║ ║ AI-first Software Development Company ║ ╚══════════════════════════════════════════════╝`); // 1. БД logger.info("Initializing database..."); getDb(); // 2. Регистрация агентов logger.info(`Registering ${AGENT_ROSTER.length} agents...`); for (const agent of AGENT_ROSTER) { registerAgent(agent); logger.info(` + ${agent.name} (${agent.id})`); } // 3. API const port = parseInt(process.env.API_PORT || "18800"); startApiServer(port); // 4. Telegram startTelegram(); // 5. Планировщик startScheduler(); logActivity("system", "hub:start", undefined, "Agent Hub v0.2.0 started"); logger.info("All systems operational."); // Уведомляем основателя setTimeout(() => { notifyFounder("Верный вектор запущен. Все агенты на месте. Жду команд."); }, 3000); process.on("SIGINT", () => { logger.info("Shutdown"); process.exit(0); }); process.on("SIGTERM", () => { logger.info("Shutdown"); process.exit(0); }); } function startScheduler() { // DevOps: каждые 30 мин setInterval(async () => { try { const result = await runAgent("devops-agent", "Проверь здоровье сервера: CPU, RAM, диск, Docker, сервисы. Если проблемы — алерт.", "Плановая проверка" ); if (result.response.toLowerCase().includes("критич") || result.response.toLowerCase().includes("ошибк")) { await notifyFounder("⚠️ DevOps нашёл проблему:\n\n" + result.response); } } catch (e: any) { logger.error("DevOps check failed", { error: e.message }); } }, 30 * 60 * 1000); // Координатор: каждый час setInterval(async () => { try { await runAgent("coordinator", "Обзор: статус проектов, незавершённые задачи, новые сообщения. Если есть блокеры — прими меры.", "Плановый обзор" ); } catch (e: any) { logger.error("Coordinator review failed", { error: e.message }); } }, 60 * 60 * 1000); logger.info("Scheduler: DevOps/30min, Coordinator/60min"); } main().catch((err) => { logger.error("Fatal", { error: err.message, stack: err.stack }); process.exit(1); });