From 1cb01ee6c2a340d68f23f6f41cb2cb3b4378b02f Mon Sep 17 00:00:00 2001 From: ZGaetano Date: Thu, 16 Apr 2026 12:14:44 -0400 Subject: [PATCH] Fix: use native fetch instead of curl for status proxy and trigger --- server.js | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/server.js b/server.js index de24ee7..3a4cdfc 100644 --- a/server.js +++ b/server.js @@ -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 }); } });