arcadiasuite/server/autonomous/routes.ts

137 lines
3.3 KiB
TypeScript

/**
* Arcadia Suite - Autonomous Development Routes
*
* Rotas da API para o sistema de desenvolvimento autônomo.
*
* @author Arcadia Development Team
* @version 1.0.0
*/
import { Router, Request, Response, NextFunction } from "express";
import { orchestrator } from "./agents";
import { toolManager } from "./tools";
const router = Router();
function requireAdmin(req: Request, res: Response, next: NextFunction) {
if (!req.isAuthenticated || !req.isAuthenticated()) {
return res.status(401).json({
success: false,
error: "Autenticação necessária",
});
}
if ((req.user as any)?.role !== "admin") {
return res.status(403).json({
success: false,
error: "Permissão negada. Apenas administradores.",
});
}
next();
}
router.get("/status", async (_req: Request, res: Response) => {
try {
const agents = orchestrator.getAgentStatus();
const tools = toolManager.listTools();
res.json({
success: true,
agents,
tools: tools.map(t => ({ name: t.name, category: t.category })),
toolCount: tools.length
});
} catch (error: any) {
res.status(500).json({ success: false, error: error.message });
}
});
router.post("/preview", async (req: Request, res: Response) => {
try {
const { description } = req.body;
if (!description) {
return res.status(400).json({
success: false,
error: "Parâmetro 'description' é obrigatório"
});
}
const result = await orchestrator.preview(description);
res.json({
success: true,
spec: result.spec,
log: result.log
});
} catch (error: any) {
res.status(500).json({ success: false, error: error.message });
}
});
router.post("/develop", async (req: Request, res: Response) => {
try {
const { description, autoCommit, targetBranch } = req.body;
if (!description) {
return res.status(400).json({
success: false,
error: "Parâmetro 'description' é obrigatório"
});
}
const result = await orchestrator.develop({
description,
autoCommit: autoCommit || false,
targetBranch: targetBranch || "main"
});
res.json({
success: result.success,
phase: result.phase,
spec: result.spec,
files: result.files?.map(f => ({ path: f.path, type: f.type })),
validation: result.validation,
commitUrl: result.commitUrl,
error: result.error,
log: result.log
});
} catch (error: any) {
res.status(500).json({ success: false, error: error.message });
}
});
router.get("/tools", async (_req: Request, res: Response) => {
try {
const tools = toolManager.listTools();
const categories = toolManager.listCategories();
res.json({
success: true,
categories,
tools
});
} catch (error: any) {
res.status(500).json({ success: false, error: error.message });
}
});
router.post("/tools/:name/execute", requireAdmin, async (req: Request, res: Response) => {
try {
const { name } = req.params;
const params = req.body;
const result = await toolManager.execute(name, params);
res.json({
success: result.success,
result: result.result,
data: result.data,
error: result.error
});
} catch (error: any) {
res.status(500).json({ success: false, error: error.message });
}
});
export default router;