Fix: use native fetch instead of curl for status proxy and trigger

This commit is contained in:
Zac Gaetano 2026-04-16 12:14:44 -04:00
parent a4e5e16270
commit 1cb01ee6c2

View file

@ -8,6 +8,7 @@ const app = express();
const PORT = 3233;
const AGENTS_DIR = '/agents';
const HERDCTL_CONTAINER = 'herdctl';
const HERDCTL_API = 'http://herdctl:3232';
app.use(express.json({ limit: '1mb' }));
app.use(express.static('public'));
@ -85,22 +86,24 @@ app.post('/api/agents', (req, res) => {
});
// Trigger agent immediately via herdctl API
app.post('/api/agents/:filename/trigger', (req, res) => {
app.post('/api/agents/:filename/trigger', async (req, res) => {
try {
const filename = path.basename(req.params.filename);
const content = fs.readFileSync(path.join(AGENTS_DIR, filename), 'utf8');
const parsed = yaml.load(content);
const agentName = parsed.name || filename.replace(/\.ya?ml$/, '');
execSync(`curl -s -X POST http://herdctl:3232/api/agents/${agentName}/trigger`, { timeout: 10000 });
res.json({ success: true, message: `Triggered ${agentName}` });
const r = await fetch(`${HERDCTL_API}/api/agents/${agentName}/trigger`, { method: 'POST' });
const body = await r.text();
res.json({ success: true, message: `Triggered ${agentName}`, response: body });
} catch (err) { res.status(500).json({ error: err.message }); }
});
// Proxy herdctl agent status
app.get('/api/status', (req, res) => {
app.get('/api/status', async (req, res) => {
try {
const result = execSync('curl -s http://herdctl:3232/api/agents', { timeout: 5000 }).toString();
res.json(JSON.parse(result));
const r = await fetch(`${HERDCTL_API}/api/agents`);
const data = await r.json();
res.json(data);
} catch (err) { res.status(500).json({ error: err.message }); }
});