






















@@ -1406,29 +1406,31 @@ if [ -z "\${$API_KEY_ENV:-}" ]; then
14061406fi
14071407cd "\$HOME"
14081408scrub_future_plugin_entries() {
1409- /opt/homebrew/bin/python3 - <<'PY' || true
1410-import json
1411-from pathlib import Path
1412-1413-config_path = Path.home() / ".openclaw" / "openclaw.json"
1414-if not config_path.exists():
1415- raise SystemExit(0)
1416-try:
1417- config = json.loads(config_path.read_text())
1418-except Exception:
1419- raise SystemExit(0)
1420-plugins = config.get("plugins")
1421-if not isinstance(plugins, dict):
1422- raise SystemExit(0)
1423-entries = plugins.get("entries")
1424-if isinstance(entries, dict):
1425- for plugin_id in ("feishu", "whatsapp"):
1426- entries.pop(plugin_id, None)
1427-allow = plugins.get("allow")
1428-if isinstance(allow, list):
1429- plugins["allow"] = [plugin_id for plugin_id in allow if plugin_id not in {"feishu", "whatsapp"}]
1430-config_path.write_text(json.dumps(config, indent=2) + "\n")
1431-PY
1409+ node - <<'JS' || true
1410+const fs = require("fs");
1411+const os = require("os");
1412+const path = require("path");
1413+1414+const configPath = path.join(os.homedir(), ".openclaw", "openclaw.json");
1415+if (!fs.existsSync(configPath)) process.exit(0);
1416+let config;
1417+try {
1418+ config = JSON.parse(fs.readFileSync(configPath, "utf8"));
1419+} catch {
1420+ process.exit(0);
1421+}
1422+const plugins = config?.plugins;
1423+if (!plugins || typeof plugins !== "object" || Array.isArray(plugins)) process.exit(0);
1424+const entries = plugins.entries;
1425+if (entries && typeof entries === "object" && !Array.isArray(entries)) {
1426+ delete entries.feishu;
1427+ delete entries.whatsapp;
1428+}
1429+if (Array.isArray(plugins.allow)) {
1430+ plugins.allow = plugins.allow.filter((pluginId) => pluginId !== "feishu" && pluginId !== "whatsapp");
1431+}
1432+fs.writeFileSync(configPath, `${JSON.stringify(config, null, 2)}\n`);
1433+JS
14321434}
14331435stop_openclaw_gateway_processes() {
14341436 /opt/homebrew/bin/openclaw gateway stop >/dev/null 2>&1 || true
@@ -1530,29 +1532,31 @@ set -euo pipefail
15301532export HOME=/root
15311533cd "\$HOME"
15321534scrub_future_plugin_entries() {
1533- python3 - <<'PY' || true
1534-import json
1535-from pathlib import Path
1536-1537-config_path = Path.home() / ".openclaw" / "openclaw.json"
1538-if not config_path.exists():
1539- raise SystemExit(0)
1540-try:
1541- config = json.loads(config_path.read_text())
1542-except Exception:
1543- raise SystemExit(0)
1544-plugins = config.get("plugins")
1545-if not isinstance(plugins, dict):
1546- raise SystemExit(0)
1547-entries = plugins.get("entries")
1548-if isinstance(entries, dict):
1549- for plugin_id in ("feishu", "whatsapp"):
1550- entries.pop(plugin_id, None)
1551-allow = plugins.get("allow")
1552-if isinstance(allow, list):
1553- plugins["allow"] = [plugin_id for plugin_id in allow if plugin_id not in {"feishu", "whatsapp"}]
1554-config_path.write_text(json.dumps(config, indent=2) + "\n")
1555-PY
1535+ node - <<'JS' || true
1536+const fs = require("fs");
1537+const os = require("os");
1538+const path = require("path");
1539+1540+const configPath = path.join(os.homedir(), ".openclaw", "openclaw.json");
1541+if (!fs.existsSync(configPath)) process.exit(0);
1542+let config;
1543+try {
1544+ config = JSON.parse(fs.readFileSync(configPath, "utf8"));
1545+} catch {
1546+ process.exit(0);
1547+}
1548+const plugins = config?.plugins;
1549+if (!plugins || typeof plugins !== "object" || Array.isArray(plugins)) process.exit(0);
1550+const entries = plugins.entries;
1551+if (entries && typeof entries === "object" && !Array.isArray(entries)) {
1552+ delete entries.feishu;
1553+ delete entries.whatsapp;
1554+}
1555+if (Array.isArray(plugins.allow)) {
1556+ plugins.allow = plugins.allow.filter((pluginId) => pluginId !== "feishu" && pluginId !== "whatsapp");
1557+}
1558+fs.writeFileSync(configPath, `${JSON.stringify(config, null, 2)}\n`);
1559+JS
15561560}
15571561stop_openclaw_gateway_processes() {
15581562 openclaw gateway stop >/dev/null 2>&1 || true
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。