UNPKG

contaigents

Version:

Modular AI Content Ecosystem with Audio Generation

248 lines (247 loc) 8.06 kB
import express from 'express'; import { AgentCLI } from '../agents/AgentCLI.js'; import { ProjectContextService } from '../services/ProjectContextService.js'; const router = express.Router(); const agentCLI = new AgentCLI(); const projectContextService = new ProjectContextService(); // GET /api/project-context - Get comprehensive project context router.get('/project-context', async (req, res) => { try { const forceRefresh = req.query.refresh === 'true'; const projectContext = await agentCLI.buildProjectContext(forceRefresh); res.json({ success: true, data: projectContext, metadata: { timestamp: Date.now(), forceRefresh } }); } catch (error) { console.error('Error getting project context:', error); res.status(500).json({ success: false, error: error.message }); } }); // GET /api/project-context/summary - Get project context summary router.get('/project-context/summary', async (req, res) => { try { const summary = await agentCLI.getProjectContextSummary(); res.json({ success: true, data: summary, metadata: { timestamp: Date.now() } }); } catch (error) { console.error('Error getting project context summary:', error); res.status(500).json({ success: false, error: error.message }); } }); // GET /api/project-context/related/:filePath - Get files related to a specific file router.get('/project-context/related/*', async (req, res) => { try { const filePath = req.params[0]; // Get the full path after /related/ const maxResults = parseInt(req.query.maxResults) || 10; if (!filePath) { return res.status(400).json({ success: false, error: 'File path is required' }); } const relatedFiles = await agentCLI.getRelatedFiles(filePath, maxResults); res.json({ success: true, data: relatedFiles, metadata: { filePath, maxResults, timestamp: Date.now() } }); } catch (error) { console.error('Error getting related files:', error); res.status(500).json({ success: false, error: error.message }); } }); // POST /api/project-context/dependencies - Analyze project dependencies router.post('/project-context/dependencies', async (req, res) => { try { const { files, includeTransitive = true, maxDepth = 5, analysisType = 'all' } = req.body; const result = await agentCLI.analyzeProjectDependencies({ files, includeTransitive, maxDepth, analysisType }); res.json(result); } catch (error) { console.error('Error analyzing dependencies:', error); res.status(500).json({ success: false, error: error.message }); } }); // POST /api/project-context/semantic-relationships - Analyze semantic relationships router.post('/project-context/semantic-relationships', async (req, res) => { try { const { files, relationshipTypes = ['conceptual', 'functional', 'hierarchical', 'temporal', 'thematic'], minConfidence = 0.3, maxRelationships = 100, includeKeywords = true } = req.body; const result = await agentCLI.analyzeSemanticRelationships({ files, relationshipTypes, minConfidence, maxRelationships, includeKeywords }); res.json(result); } catch (error) { console.error('Error analyzing semantic relationships:', error); res.status(500).json({ success: false, error: error.message }); } }); // GET /api/project-context/overview - Get enhanced project overview router.get('/project-context/overview', async (req, res) => { try { const overview = await agentCLI.getProjectOverview(); res.json({ success: true, data: overview, metadata: { timestamp: Date.now() } }); } catch (error) { console.error('Error getting project overview:', error); res.status(500).json({ success: false, error: error.message }); } }); // DELETE /api/project-context/cache - Clear project context cache router.delete('/project-context/cache', async (req, res) => { try { await agentCLI.clearProjectContextCache(); res.json({ success: true, message: 'Project context cache cleared successfully', metadata: { timestamp: Date.now() } }); } catch (error) { console.error('Error clearing cache:', error); res.status(500).json({ success: false, error: error.message }); } }); // POST /api/project-context/analyze-batch - Analyze multiple files with context router.post('/project-context/analyze-batch', async (req, res) => { try { const { files, analysisType = 'general', includeContext = true } = req.body; if (!files || !Array.isArray(files) || files.length === 0) { return res.status(400).json({ success: false, error: 'Files array is required and must not be empty' }); } // Get project context if requested let projectContext = null; if (includeContext) { projectContext = await agentCLI.buildProjectContext(); } // Analyze files const analyses = await agentCLI.analyzeFiles(files, analysisType); const classifications = await agentCLI.classifyFiles(files, true); // Get related files for each analyzed file const relatedFilesMap = {}; if (includeContext) { for (const file of files) { try { relatedFilesMap[file] = await agentCLI.getRelatedFiles(file, 5); } catch (error) { relatedFilesMap[file] = { error: error.message }; } } } res.json({ success: true, data: { analyses, classifications, relatedFiles: relatedFilesMap, projectContext: includeContext ? projectContext : null }, metadata: { analyzedFiles: files.length, analysisType, includeContext, timestamp: Date.now() } }); } catch (error) { console.error('Error in batch analysis:', error); res.status(500).json({ success: false, error: error.message }); } }); // GET /api/project-context/health - Health check for project context services router.get('/project-context/health', async (req, res) => { try { const summary = await agentCLI.getProjectContextSummary(); res.json({ success: true, data: { status: 'healthy', services: { projectContextService: 'operational', agentCLI: 'operational', llmProvider: 'configured' // Could be enhanced to check actual LLM status }, summary }, metadata: { timestamp: Date.now() } }); } catch (error) { res.status(500).json({ success: false, data: { status: 'unhealthy', error: error.message }, metadata: { timestamp: Date.now() } }); } }); export default router;