文件预览

actions.js

查看 Openclaw Command Center 技能包中的文件内容。

文件内容

src/actions.js

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 };