114 lines
2.9 KiB
JavaScript
114 lines
2.9 KiB
JavaScript
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;
|