 fc0eec91ef
			
		
	
	fc0eec91ef
	
	
	
		
			
			Major Features Added: - Fix Socket.IO connectivity by updating Dockerfile to use socket_app - Resolve distributed workflows API to return arrays instead of errors - Expand agent coverage from 3 to 7 agents (added OAK and ROSEWOOD) - Create comprehensive systemd service for MCP server with auto-discovery - Add daemon mode with periodic agent discovery every 5 minutes - Implement comprehensive test suite with 100% pass rate Infrastructure Improvements: - Enhanced database connection handling with retry logic - Improved agent registration with persistent storage - Added proper error handling for distributed workflows endpoint - Created management scripts for service lifecycle operations Agent Cluster Expansion: - ACACIA: deepseek-r1:7b (kernel_dev) - WALNUT: starcoder2:15b (pytorch_dev) - IRONWOOD: deepseek-coder-v2 (profiler) - OAK: codellama:latest (docs_writer) - OAK-TESTER: deepseek-r1:latest (tester) - ROSEWOOD: deepseek-coder-v2:latest (kernel_dev) - ROSEWOOD-VISION: llama3.2-vision:11b (tester) System Status: All 7 agents healthy, Socket.IO operational, MCP server fully functional 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
		
			
				
	
	
		
			45 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| from fastapi import APIRouter, Depends, HTTPException
 | |
| from typing import Dict, Any, List
 | |
| from app.core.auth import get_current_user
 | |
| from app.services.project_service import ProjectService
 | |
| 
 | |
| router = APIRouter()
 | |
| project_service = ProjectService()
 | |
| 
 | |
| @router.get("/projects")
 | |
| async def get_projects(current_user: dict = Depends(get_current_user)) -> List[Dict[str, Any]]:
 | |
|     """Get all projects from the local filesystem."""
 | |
|     try:
 | |
|         return project_service.get_all_projects()
 | |
|     except Exception as e:
 | |
|         raise HTTPException(status_code=500, detail=str(e))
 | |
| 
 | |
| @router.get("/projects/{project_id}")
 | |
| async def get_project(project_id: str, current_user: dict = Depends(get_current_user)) -> Dict[str, Any]:
 | |
|     """Get a specific project by ID."""
 | |
|     try:
 | |
|         project = project_service.get_project_by_id(project_id)
 | |
|         if not project:
 | |
|             raise HTTPException(status_code=404, detail="Project not found")
 | |
|         return project
 | |
|     except Exception as e:
 | |
|         raise HTTPException(status_code=500, detail=str(e))
 | |
| 
 | |
| @router.get("/projects/{project_id}/metrics")
 | |
| async def get_project_metrics(project_id: str, current_user: dict = Depends(get_current_user)) -> Dict[str, Any]:
 | |
|     """Get detailed metrics for a project."""
 | |
|     try:
 | |
|         metrics = project_service.get_project_metrics(project_id)
 | |
|         if not metrics:
 | |
|             raise HTTPException(status_code=404, detail="Project not found")
 | |
|         return metrics
 | |
|     except Exception as e:
 | |
|         raise HTTPException(status_code=500, detail=str(e))
 | |
| 
 | |
| @router.get("/projects/{project_id}/tasks")
 | |
| async def get_project_tasks(project_id: str, current_user: dict = Depends(get_current_user)) -> List[Dict[str, Any]]:
 | |
|     """Get tasks for a project (from GitHub issues and TODOS.md)."""
 | |
|     try:
 | |
|         return project_service.get_project_tasks(project_id)
 | |
|     except Exception as e:
 | |
|         raise HTTPException(status_code=500, detail=str(e)) |