77 lines · 2.6 KB · TypeScript
RawDownload
/** * HTTP route handlers for Subagent Operations. * * Routes: * - GET /api/projects/:projectId/sessions/:sessionId/subagents/:subagentId - Subagent detail */ import { createLogger } from '@shared/utils/logger'; import { validateProjectId, validateSessionId, validateSubagentId } from '../ipc/guards'; import type { HttpServices } from './index';import type { FastifyInstance } from 'fastify'; const logger = createLogger('HTTP:subagents'); export function registerSubagentRoutes(app: FastifyInstance, services: HttpServices): void {  app.get<{ Params: { projectId: string; sessionId: string; subagentId: string } }>(    '/api/projects/:projectId/sessions/:sessionId/subagents/:subagentId',    async (request) => {      try {        const validatedProject = validateProjectId(request.params.projectId);        const validatedSession = validateSessionId(request.params.sessionId);        const validatedSubagent = validateSubagentId(request.params.subagentId);        if (!validatedProject.valid || !validatedSession.valid || !validatedSubagent.valid) {          logger.error(            `GET subagent-detail rejected: ${              validatedProject.error ??              validatedSession.error ??              validatedSubagent.error ??              'Invalid parameters'            }`          );          return null;        }         const safeProjectId = validatedProject.value!;        const safeSessionId = validatedSession.value!;        const safeSubagentId = validatedSubagent.value!;         const cacheKey = `subagent-${safeProjectId}-${safeSessionId}-${safeSubagentId}`;         // Check cache first        let subagentDetail = services.dataCache.getSubagent(cacheKey);        if (subagentDetail) {          return subagentDetail;        }         const fsProvider = services.projectScanner.getFileSystemProvider();        const projectsDir = services.projectScanner.getProjectsDir();         const builtDetail = await services.chunkBuilder.buildSubagentDetail(          safeProjectId,          safeSessionId,          safeSubagentId,          services.sessionParser,          services.subagentResolver,          fsProvider,          projectsDir        );         if (!builtDetail) {          logger.error(`Subagent not found: ${safeSubagentId}`);          return null;        }         subagentDetail = builtDetail;        services.dataCache.setSubagent(cacheKey, subagentDetail);         return subagentDetail;      } catch (error) {        logger.error(`Error in GET subagent-detail for ${request.params.subagentId}:`, error);        return null;      }    }  );}