8900 commited on
Update setup-hf-config.mjs
Browse files- setup-hf-config.mjs +122 -101
setup-hf-config.mjs
CHANGED
|
@@ -1,122 +1,143 @@
|
|
| 1 |
-
import fs
|
| 2 |
import path from "node:path";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
|
| 4 |
-
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
console.log("[setup] Starting... HOME=" + HOME);
|
| 9 |
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
}
|
|
|
|
|
|
|
| 14 |
|
| 15 |
-
function
|
| 16 |
-
|
|
|
|
| 17 |
}
|
| 18 |
|
| 19 |
-
|
| 20 |
-
|
|
|
|
| 21 |
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
}
|
| 26 |
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
|
|
|
|
|
|
| 31 |
|
| 32 |
-
function
|
| 33 |
-
|
| 34 |
-
if (k.indexOf(EXCLUDE_PREFIXES[i]) === 0) return false;
|
| 35 |
-
}
|
| 36 |
-
for (var i = 0; i < INCLUDE_SUFFIXES.length; i++) {
|
| 37 |
-
var s = INCLUDE_SUFFIXES[i];
|
| 38 |
-
if (k.length > s.length && k.indexOf(s) === k.length - s.length) return true;
|
| 39 |
-
}
|
| 40 |
-
return false;
|
| 41 |
}
|
| 42 |
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
|
| 46 |
-
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 50 |
}
|
| 51 |
-
providerKeys.sort();
|
| 52 |
|
| 53 |
-
|
| 54 |
-
|
|
|
|
| 55 |
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
"10.20.1.9", "10.20.1.222", "10.20.26.157", "10.20.31.87", "10.20.0.1", "172.17.0.1"
|
| 61 |
-
];
|
| 62 |
|
| 63 |
-
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
| 71 |
-
},
|
| 72 |
-
trustedProxies: trustedProxies
|
| 73 |
-
},
|
| 74 |
-
agents: {
|
| 75 |
-
defaults: { model: defaultModel }
|
| 76 |
-
},
|
| 77 |
-
env: { vars: {} }
|
| 78 |
-
};
|
| 79 |
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
});
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
botToken: envStr("TELEGRAM_BOT_TOKEN")
|
| 95 |
-
}
|
| 96 |
-
},
|
| 97 |
-
webhook: {
|
| 98 |
-
enabled: true,
|
| 99 |
-
host: "0.0.0.0",
|
| 100 |
-
port: 0,
|
| 101 |
-
path: "/telegram-webhook",
|
| 102 |
-
secret: webhookSecret,
|
| 103 |
-
url: webhookBaseUrl + "/telegram-webhook"
|
| 104 |
-
}
|
| 105 |
-
}
|
| 106 |
-
};
|
| 107 |
-
console.log("[setup] Telegram: enabled in WEBHOOK mode, url=" + webhookBaseUrl + "/telegram-webhook");
|
| 108 |
-
} else {
|
| 109 |
-
console.warn("[setup] WEBHOOK_BASE_URL not set in Secrets, webhook disabled");
|
| 110 |
}
|
| 111 |
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
|
|
|
|
|
|
| 115 |
}
|
| 116 |
-
fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), "utf-8");
|
| 117 |
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import fs from "node:fs";
|
| 2 |
import path from "node:path";
|
| 3 |
+
import http from "node:http";
|
| 4 |
+
import https from "node:https";
|
| 5 |
+
import { execSync } from "node:child_process";
|
| 6 |
+
|
| 7 |
+
// ============================================================
|
| 8 |
+
// Config
|
| 9 |
+
// ============================================================
|
| 10 |
+
|
| 11 |
+
var OPENCLAW_DIR = path.join(
|
| 12 |
+
process.env.OPENCLAW_HOME || process.env.HOME || "/home/user",
|
| 13 |
+
".openclaw"
|
| 14 |
+
);
|
| 15 |
+
var BOT_TOKEN = (process.env.TELEGRAM_BOT_TOKEN || "").trim();
|
| 16 |
+
var HF_TOKEN = (process.env.HF_TOKEN || "").trim();
|
| 17 |
+
var DATASET_ID = (process.env.HF_DATASET_ID || "").trim();
|
| 18 |
+
var ADMIN_CHAT_ID = (process.env.SYNC_ADMIN_CHAT_ID || "").trim();
|
| 19 |
+
var LOOP_INTERVAL = 30 * 1000;
|
| 20 |
+
var PROXY_PORT = 7861;
|
| 21 |
+
|
| 22 |
+
var REPO_DIR = "/tmp/hf-sync-repo";
|
| 23 |
+
var STATE_FILE = path.join(OPENCLAW_DIR, ".sync-state.json");
|
| 24 |
+
|
| 25 |
+
var ALWAYS_EXCLUDE = [".sync-state.json", ".git", "openclaw.json.bak"];
|
| 26 |
+
var LOG_PATTERNS = [".log", ".log.", ".tmp", ".bak"];
|
| 27 |
+
|
| 28 |
+
var SYNC_COMMANDS = [
|
| 29 |
+
"/sync_all", "/sync_settings", "/sync_memory",
|
| 30 |
+
"/pull_all", "/pull_settings", "/pull_memory",
|
| 31 |
+
"/pause_all", "/pause_settings", "/pause_memory",
|
| 32 |
+
"/pause_pull_settings", "/pause_pull_memory",
|
| 33 |
+
"/resume_all", "/resume_settings", "/resume_memory",
|
| 34 |
+
"/progress"
|
| 35 |
+
];
|
| 36 |
|
| 37 |
+
// ============================================================
|
| 38 |
+
// Task registry
|
| 39 |
+
// ============================================================
|
|
|
|
|
|
|
| 40 |
|
| 41 |
+
var tasks = {
|
| 42 |
+
settings_upload: { active: false, timer: null, lastMsg: "idle" },
|
| 43 |
+
settings_pull: { active: false, timer: null, lastMsg: "idle" },
|
| 44 |
+
memory_upload: { active: false, timer: null, lastMsg: "idle" },
|
| 45 |
+
memory_pull: { active: false, timer: null, lastMsg: "idle" }
|
| 46 |
+
};
|
| 47 |
|
| 48 |
+
function setTaskMsg(key, msg) {
|
| 49 |
+
tasks[key].lastMsg = msg;
|
| 50 |
+
console.log("[sync:" + key + "] " + msg);
|
| 51 |
}
|
| 52 |
|
| 53 |
+
// ============================================================
|
| 54 |
+
// State
|
| 55 |
+
// ============================================================
|
| 56 |
|
| 57 |
+
function loadState() {
|
| 58 |
+
try {
|
| 59 |
+
if (fs.existsSync(STATE_FILE)) {
|
| 60 |
+
return JSON.parse(fs.readFileSync(STATE_FILE, "utf-8"));
|
| 61 |
+
}
|
| 62 |
+
} catch (e) {}
|
| 63 |
+
return {
|
| 64 |
+
settings: { lastUpload: null, lastPull: null },
|
| 65 |
+
memory: { lastUpload: null, lastPull: null }
|
| 66 |
+
};
|
| 67 |
}
|
| 68 |
|
| 69 |
+
function saveState(state) {
|
| 70 |
+
try {
|
| 71 |
+
fs.mkdirSync(OPENCLAW_DIR, { recursive: true });
|
| 72 |
+
fs.writeFileSync(STATE_FILE, JSON.stringify(state, null, 2), "utf-8");
|
| 73 |
+
} catch (e) {}
|
| 74 |
+
}
|
| 75 |
|
| 76 |
+
function nowTs() {
|
| 77 |
+
return new Date().toISOString().replace("T", " ").substring(0, 19);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
}
|
| 79 |
|
| 80 |
+
// ============================================================
|
| 81 |
+
// Progress bar
|
| 82 |
+
// ============================================================
|
| 83 |
+
|
| 84 |
+
function bar(done, total) {
|
| 85 |
+
var width = 10;
|
| 86 |
+
var filled = total > 0 ? Math.round((done / total) * width) : 0;
|
| 87 |
+
var pct = total > 0 ? Math.round((done / total) * 100) : 0;
|
| 88 |
+
var b = "";
|
| 89 |
+
for (var i = 0; i < width; i++) b += i < filled ? "=" : "-";
|
| 90 |
+
return "[" + b + "] " + pct + "% (" + done + "/" + total + ")";
|
| 91 |
}
|
|
|
|
| 92 |
|
| 93 |
+
// ============================================================
|
| 94 |
+
// Git helpers
|
| 95 |
+
// ============================================================
|
| 96 |
|
| 97 |
+
function repoUrl() {
|
| 98 |
+
return "https://user:" + HF_TOKEN +
|
| 99 |
+
"@huggingface.co/datasets/" + DATASET_ID;
|
| 100 |
+
}
|
|
|
|
|
|
|
| 101 |
|
| 102 |
+
function git(args, cwd) {
|
| 103 |
+
return execSync("git " + args, {
|
| 104 |
+
cwd: cwd || REPO_DIR,
|
| 105 |
+
stdio: "pipe",
|
| 106 |
+
timeout: 60000,
|
| 107 |
+
env: Object.assign({}, process.env, { GIT_TERMINAL_PROMPT: "0" })
|
| 108 |
+
}).toString().trim();
|
| 109 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 110 |
|
| 111 |
+
function ensureRepo() {
|
| 112 |
+
if (fs.existsSync(path.join(REPO_DIR, ".git"))) return;
|
| 113 |
+
execSync("rm -rf " + REPO_DIR, { stdio: "pipe" });
|
| 114 |
+
try {
|
| 115 |
+
git("clone --depth 1 " + repoUrl() + " " + REPO_DIR, "/tmp");
|
| 116 |
+
} catch (e) {
|
| 117 |
+
fs.mkdirSync(REPO_DIR, { recursive: true });
|
| 118 |
+
git("init", REPO_DIR);
|
| 119 |
+
git("remote add origin " + repoUrl(), REPO_DIR);
|
| 120 |
+
}
|
| 121 |
+
try {
|
| 122 |
+
git("config user.email openclaw@hf.space");
|
| 123 |
+
git("config user.name OpenClaw-Sync");
|
| 124 |
+
} catch (e) {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 125 |
}
|
| 126 |
|
| 127 |
+
function pullLatest() {
|
| 128 |
+
try { git("pull --quiet --no-rebase origin main"); }
|
| 129 |
+
catch (e) {
|
| 130 |
+
try { git("pull --quiet --no-rebase origin master"); } catch (e2) {}
|
| 131 |
+
}
|
| 132 |
}
|
|
|
|
| 133 |
|
| 134 |
+
function commitAndPush(msg) {
|
| 135 |
+
git("add -A");
|
| 136 |
+
var changed = git("diff --cached --name-only");
|
| 137 |
+
if (!changed) return 0;
|
| 138 |
+
var count = changed.split("\n").filter(Boolean).length;
|
| 139 |
+
git('commit -m "' + msg + '"');
|
| 140 |
+
try { git("push --quiet origin HEAD:main"); }
|
| 141 |
+
catch (e) { git("push --quiet origin HEAD:master"); }
|
| 142 |
+
return count;
|
| 143 |
+
}
|