agent-hub/src/index.ts
Верный вектор a87896a6f0 feat: инициализация agent-hub — платформа мультиагентного взаимодействия
Исходный код agent-hub: API-сервер, ядро запуска агентов, Telegram-канал,
база данных, определения агентов. Настроен .gitignore для node_modules,
dist, data и .env.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-10 18:56:19 +07:00

86 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
});