← back to Dw Boardroom V2
src/api/routes/agents.ts
68 lines
// ═══════════════════════════════════════════════
// DW Boardroom V2 — Agent Routes
// ═══════════════════════════════════════════════
import { Router } from 'express';
import { TEAM_AGENTS, EXECUTIVES, getAgent, getExec, getAgentsByDept, getTeamsByExec, DEPARTMENT_GROUPS } from '../../agents/registry';
import { generateDialogue } from '../../engine/agentDialogue';
const router = Router();
// GET /api/agents — full roster
router.get('/', (req, res) => {
const dept = req.query.dept as string | undefined;
let agents = dept ? getAgentsByDept(dept) : TEAM_AGENTS;
res.json({
agents,
executives: EXECUTIVES,
total: agents.length,
departments: Object.keys(DEPARTMENT_GROUPS),
});
});
// GET /api/agents/teams — grouped by exec
router.get('/teams', (req, res) => {
const teams = getTeamsByExec();
res.json(teams);
});
// GET /api/agents/:name — agent detail
router.get('/:name', (req, res) => {
const agent = getAgent(req.params.name) || getExec(req.params.name);
if (!agent) {
res.status(404).json({ error: 'Agent not found' });
return;
}
res.json(agent);
});
// POST /api/agents/:name/speak — generate dialogue
router.post('/:name/speak', async (req, res) => {
try {
const agent = getAgent(req.params.name);
const exec = getExec(req.params.name);
const entity = agent || exec;
if (!entity) {
res.status(404).json({ error: 'Agent not found' });
return;
}
const { topic, phase, meetingType } = req.body;
const dialogue = await generateDialogue(
entity.id || req.params.name,
entity.name,
entity.role,
phase || 'current_business',
topic || 'General discussion',
meetingType || 'strategic'
);
res.json({ agent: entity.name, dialogue });
} catch (err: any) {
res.status(500).json({ error: err.message });
}
});
export default router;