import { Router } from 'express'; import { callAgent } from '../agentClient.js'; const router = Router(); const unavailable = { status: 'unavailable', summary: null, message: 'Unavailable', }; const adaptHealthSummary = (raw) => { if (raw?.status !== 'ok' || !raw.service || !raw.version) { return null; } return { status: raw.status, service: raw.service, version: raw.version, }; }; router.get('/status', async (req, res) => { let health; try { const rawHealth = await callAgent('get_health', {}); const summary = adaptHealthSummary(rawHealth); if (summary) { health = { status: 'success', summary, message: 'Available' }; } else { health = unavailable; console.warn('[Console API] Platform health data has an unexpected shape.'); } } catch (error) { console.warn('[Console API] Platform health data is unavailable.'); health = unavailable; } res.json({ health, buildStatus: unavailable, platformState: unavailable, }); }); router.get('/projects', (req, res) => { res.json({ status: 'unavailable', message: 'No project registry configured yet.', projects: [], }); }); router.get('/work-queue', (req, res) => { res.json({ status: 'unavailable', message: 'No ticket read model configured yet.', tickets: [], }); }); router.get('/approvals', (req, res) => { res.json({ status: 'unavailable', message: 'No approval read model configured yet.', approvals: [], }); }); router.post('/emma/chat', async (req, res) => { const { message, session_id, ticket_number } = req.body; if (!message || typeof message !== 'string' || message.length > 4096) { return res.status(400).json({ status: 'error', message: 'Invalid message.'}); } if (ticket_number && (typeof ticket_number !== 'number' || !Number.isInteger(ticket_number) || ticket_number <= 0)) { return res.status(400).json({ status: 'error', message: 'Invalid ticket number.'}); } try { const emmaData = await callAgent('run_emma', { prompt: message, history: [] }); res.json({ status: 'success', reply: emmaData.response, session_id, ticket_number, model_label: 'Emma Local', message: 'Message processed by Emma.', }); } catch (e) { res.status(500).json({ status: 'error', message: 'Could not connect to Emma.' }); } }); import { capabilities } from '../capabilityRegistry.js'; router.get('/capabilities', (req, res) => { res.json(capabilities); }); router.get('/emma/status', async (req, res) => { try { await callAgent('get_health', {}); res.json({ status: 'ready', label: 'Emma Local', message: 'Emma is ready.' }); } catch (e) { res.status(500).json({ status: 'unavailable', label: 'Emma Local', message: 'Emma is unavailable.' }); } }); export default router;