const ALLOWED_ACTIONS = new Set([ "gateway-status", "gateway-restart", "sessions-list", "cron-list", "health-check", "clear-stale-sessions", ]); function executeAction(action, deps) { const { runOpenClaw, extractJSON, PORT } = deps; const results = { success: false, action, output: "", error: null }; if (!ALLOWED_ACTIONS.has(action)) { results.error = `Unknown action: ${action}`; return results; } try { switch (action) { case "gateway-status": results.output = runOpenClaw("gateway status 2>&1") || "Unknown"; results.success = true; break; case "gateway-restart": results.output = "To restart gateway, run: openclaw gateway restart"; results.success = true; results.note = "Dashboard cannot restart gateway for safety"; break; case "sessions-list": results.output = runOpenClaw("sessions 2>&1") || "No sessions"; results.success = true; break; case "cron-list": results.output = runOpenClaw("cron list 2>&1") || "No cron jobs"; results.success = true; break; case "health-check": { const gateway = runOpenClaw("gateway status 2>&1"); const sessions = runOpenClaw("sessions --json 2>&1"); let sessionCount = 0; try { const data = JSON.parse(sessions); sessionCount = data.sessions?.length || 0; } catch (e) {} results.output = [ `Gateway: ${gateway?.includes("running") ? "OK Running" : "NOT Running"}`, `Sessions: ${sessionCount}`, `Dashboard: OK Running on port ${PORT}`, ].join("\n"); results.success = true; break; } case "clear-stale-sessions": { const staleOutput = runOpenClaw("sessions --json 2>&1"); let staleCount = 0; try { const staleJson = extractJSON(staleOutput); if (staleJson) { const data = JSON.parse(staleJson); staleCount = (data.sessions || []).filter((s) => s.ageMs > 24 * 60 * 60 * 1000).length; } } catch (e) {} results.output = `Found ${staleCount} stale sessions (>24h old).\nTo clean: openclaw sessions prune`; results.success = true; break; } } } catch (e) { results.error = e.message; } return results; } module.exports = { executeAction, ALLOWED_ACTIONS };