8900 commited on
Update setup-hf-config.mjs
Browse files- setup-hf-config.mjs +53 -53
setup-hf-config.mjs
CHANGED
|
@@ -1,57 +1,57 @@
|
|
| 1 |
-
import fs from
|
| 2 |
-
import path from
|
| 3 |
-
import https from
|
| 4 |
|
| 5 |
-
var HOME = process.env.OPENCLAW_HOME || process.env.HOME ||
|
| 6 |
-
var STATE_DIR = path.join(HOME,
|
| 7 |
-
var CONFIG_PATH = path.join(STATE_DIR,
|
| 8 |
|
| 9 |
-
console.log(
|
| 10 |
|
| 11 |
function parseList(val) {
|
| 12 |
if (!val || !val.trim()) return [];
|
| 13 |
-
return val.split(
|
| 14 |
}
|
| 15 |
|
| 16 |
-
var gatewayToken = (process.env.OPENCLAW_GATEWAY_TOKEN ||
|
| 17 |
-
var gatewayPassword = (process.env.OPENCLAW_GATEWAY_PASSWORD ||
|
| 18 |
|
| 19 |
if (!gatewayToken && !gatewayPassword) {
|
| 20 |
-
console.error(
|
| 21 |
process.exit(0);
|
| 22 |
}
|
| 23 |
|
| 24 |
// FIX 1: default model uses correct google/ prefix
|
| 25 |
-
var defaultModel = (process.env.OPENCLAW_HF_DEFAULT_MODEL ||
|
| 26 |
-
|
| 27 |
|
| 28 |
// FIX 2: read GOOGLE_API_KEY first, GEMINI_API_KEY as alias
|
| 29 |
-
var geminiKey = (process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY ||
|
| 30 |
-
var groqKey = (process.env.GROQ_API_KEY ||
|
| 31 |
-
var anthropicKey = (process.env.ANTHROPIC_API_KEY ||
|
| 32 |
-
var openaiKey = (process.env.OPENAI_API_KEY ||
|
| 33 |
-
var openrouterKey = (process.env.OPENROUTER_API_KEY ||
|
| 34 |
-
var telegramToken = (process.env.TELEGRAM_BOT_TOKEN ||
|
| 35 |
|
| 36 |
var envProxies = parseList(process.env.OPENCLAW_GATEWAY_TRUSTED_PROXIES);
|
| 37 |
var trustedProxies = envProxies.length > 0 ? envProxies : [
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
];
|
| 44 |
|
| 45 |
var config = {
|
| 46 |
gateway: {
|
| 47 |
auth: gatewayToken
|
| 48 |
-
? { mode:
|
| 49 |
-
: { mode:
|
| 50 |
controlUi: {
|
| 51 |
dangerouslyDisableDeviceAuth: true,
|
| 52 |
allowInsecureAuth: true,
|
| 53 |
dangerouslyAllowHostHeaderOriginFallback: true,
|
| 54 |
-
allowedOrigins: [
|
| 55 |
},
|
| 56 |
trustedProxies: trustedProxies
|
| 57 |
},
|
|
@@ -79,36 +79,36 @@ for (var i = 0; i < nodes.length; i++) {
|
|
| 79 |
var node = nodes[i];
|
| 80 |
try {
|
| 81 |
await new Promise(function(resolve, reject) {
|
| 82 |
-
var req = https.get(node +
|
| 83 |
if (res.statusCode === 200) resolve(true);
|
| 84 |
-
else reject(new Error(
|
| 85 |
});
|
| 86 |
-
req.on(
|
| 87 |
-
req.setTimeout(4000, function() { req.destroy(); reject(new Error(
|
| 88 |
});
|
| 89 |
-
console.log(
|
| 90 |
-
// FIX 3: correct regex, was //$/ (broken) now //$/ (correct)
|
| 91 |
-
return node.replace(//$/,
|
| 92 |
} catch (e) {
|
| 93 |
-
console.log(
|
| 94 |
}
|
| 95 |
}
|
| 96 |
return null;
|
| 97 |
}
|
| 98 |
|
| 99 |
var telegramNodes = [
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
];
|
| 104 |
|
| 105 |
async function setupTelegram() {
|
| 106 |
if (!telegramToken) {
|
| 107 |
-
console.log(
|
| 108 |
return;
|
| 109 |
}
|
| 110 |
var apiRoot = await detectTelegramNode(telegramNodes);
|
| 111 |
-
var finalRoot = apiRoot ||
|
| 112 |
config.channels = {
|
| 113 |
telegram: {
|
| 114 |
enabled: true,
|
|
@@ -117,7 +117,7 @@ main: { botToken: telegramToken, apiRoot: finalRoot }
|
|
| 117 |
}
|
| 118 |
}
|
| 119 |
};
|
| 120 |
-
console.log(
|
| 121 |
}
|
| 122 |
|
| 123 |
(async function main() {
|
|
@@ -126,23 +126,23 @@ await setupTelegram();
|
|
| 126 |
try {
|
| 127 |
fs.mkdirSync(STATE_DIR, { recursive: true });
|
| 128 |
if (fs.existsSync(CONFIG_PATH)) {
|
| 129 |
-
fs.copyFileSync(CONFIG_PATH, CONFIG_PATH +
|
| 130 |
}
|
| 131 |
-
fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2),
|
| 132 |
-
console.log(
|
| 133 |
} catch (e) {
|
| 134 |
-
console.error(
|
| 135 |
process.exit(0);
|
| 136 |
}
|
| 137 |
|
| 138 |
-
console.log(
|
| 139 |
-
console.log(
|
| 140 |
-
console.log(
|
| 141 |
-
console.log(
|
| 142 |
-
console.log(
|
| 143 |
-
console.log(
|
| 144 |
-
console.log(
|
| 145 |
})().catch(function(err) {
|
| 146 |
-
console.error(
|
| 147 |
process.exit(0);
|
| 148 |
});
|
|
|
|
| 1 |
+
import fs from "node:fs";
|
| 2 |
+
import path from "node:path";
|
| 3 |
+
import https from "node:https";
|
| 4 |
|
| 5 |
+
var HOME = process.env.OPENCLAW_HOME || process.env.HOME || "/home/user";
|
| 6 |
+
var STATE_DIR = path.join(HOME, ".openclaw");
|
| 7 |
+
var CONFIG_PATH = path.join(STATE_DIR, "openclaw.json");
|
| 8 |
|
| 9 |
+
console.log("[setup] Starting⦠HOME=" + HOME);
|
| 10 |
|
| 11 |
function parseList(val) {
|
| 12 |
if (!val || !val.trim()) return [];
|
| 13 |
+
return val.split(",").map(function(s) { return s.trim(); }).filter(Boolean);
|
| 14 |
}
|
| 15 |
|
| 16 |
+
var gatewayToken = (process.env.OPENCLAW_GATEWAY_TOKEN || "").trim();
|
| 17 |
+
var gatewayPassword = (process.env.OPENCLAW_GATEWAY_PASSWORD || "").trim();
|
| 18 |
|
| 19 |
if (!gatewayToken && !gatewayPassword) {
|
| 20 |
+
console.error("[setup] ERROR: No OPENCLAW_GATEWAY_TOKEN or OPENCLAW_GATEWAY_PASSWORD");
|
| 21 |
process.exit(0);
|
| 22 |
}
|
| 23 |
|
| 24 |
// FIX 1: default model uses correct google/ prefix
|
| 25 |
+
var defaultModel = (process.env.OPENCLAW_HF_DEFAULT_MODEL || "").trim() ||
|
| 26 |
+
"google/gemini-2.0-flash";
|
| 27 |
|
| 28 |
// FIX 2: read GOOGLE_API_KEY first, GEMINI_API_KEY as alias
|
| 29 |
+
var geminiKey = (process.env.GOOGLE_API_KEY || process.env.GEMINI_API_KEY || "").trim();
|
| 30 |
+
var groqKey = (process.env.GROQ_API_KEY || "").trim();
|
| 31 |
+
var anthropicKey = (process.env.ANTHROPIC_API_KEY || "").trim();
|
| 32 |
+
var openaiKey = (process.env.OPENAI_API_KEY || "").trim();
|
| 33 |
+
var openrouterKey = (process.env.OPENROUTER_API_KEY || "").trim();
|
| 34 |
+
var telegramToken = (process.env.TELEGRAM_BOT_TOKEN || "").trim();
|
| 35 |
|
| 36 |
var envProxies = parseList(process.env.OPENCLAW_GATEWAY_TRUSTED_PROXIES);
|
| 37 |
var trustedProxies = envProxies.length > 0 ? envProxies : [
|
| 38 |
+
"10.16.4.123", "10.16.7.92", "10.16.18.232",
|
| 39 |
+
"10.16.34.155","10.16.43.133","10.16.1.206",
|
| 40 |
+
"10.20.1.9", "10.20.1.222",
|
| 41 |
+
"10.20.26.157","10.20.31.87",
|
| 42 |
+
"10.20.0.1", "172.17.0.1"
|
| 43 |
];
|
| 44 |
|
| 45 |
var config = {
|
| 46 |
gateway: {
|
| 47 |
auth: gatewayToken
|
| 48 |
+
? { mode: "token", token: gatewayToken }
|
| 49 |
+
: { mode: "password", password: gatewayPassword },
|
| 50 |
controlUi: {
|
| 51 |
dangerouslyDisableDeviceAuth: true,
|
| 52 |
allowInsecureAuth: true,
|
| 53 |
dangerouslyAllowHostHeaderOriginFallback: true,
|
| 54 |
+
allowedOrigins: ["*"]
|
| 55 |
},
|
| 56 |
trustedProxies: trustedProxies
|
| 57 |
},
|
|
|
|
| 79 |
var node = nodes[i];
|
| 80 |
try {
|
| 81 |
await new Promise(function(resolve, reject) {
|
| 82 |
+
var req = https.get(node + "/bot" + telegramToken + "/getMe", function(res) {
|
| 83 |
if (res.statusCode === 200) resolve(true);
|
| 84 |
+
else reject(new Error("Status " + res.statusCode));
|
| 85 |
});
|
| 86 |
+
req.on("error", reject);
|
| 87 |
+
req.setTimeout(4000, function() { req.destroy(); reject(new Error("Timeout")); });
|
| 88 |
});
|
| 89 |
+
console.log("[setup] Telegram node OK: " + node);
|
| 90 |
+
// FIX 3: correct regex, was //$/ (broken) now /\/$/ (correct)
|
| 91 |
+
return node.replace(/\/$/, "");
|
| 92 |
} catch (e) {
|
| 93 |
+
console.log("[setup] Telegram node failed: " + node + " (" + e.message + ")");
|
| 94 |
}
|
| 95 |
}
|
| 96 |
return null;
|
| 97 |
}
|
| 98 |
|
| 99 |
var telegramNodes = [
|
| 100 |
+
"https://api.telegram.org",
|
| 101 |
+
"https://tg-api.vercel.app",
|
| 102 |
+
"https://telegram-bot-api.vercel.app"
|
| 103 |
];
|
| 104 |
|
| 105 |
async function setupTelegram() {
|
| 106 |
if (!telegramToken) {
|
| 107 |
+
console.log("[setup] Telegram disabled (no token)");
|
| 108 |
return;
|
| 109 |
}
|
| 110 |
var apiRoot = await detectTelegramNode(telegramNodes);
|
| 111 |
+
var finalRoot = apiRoot || "https://api.telegram.org";
|
| 112 |
config.channels = {
|
| 113 |
telegram: {
|
| 114 |
enabled: true,
|
|
|
|
| 117 |
}
|
| 118 |
}
|
| 119 |
};
|
| 120 |
+
console.log("[setup] Telegram enabled, apiRoot=" + finalRoot);
|
| 121 |
}
|
| 122 |
|
| 123 |
(async function main() {
|
|
|
|
| 126 |
try {
|
| 127 |
fs.mkdirSync(STATE_DIR, { recursive: true });
|
| 128 |
if (fs.existsSync(CONFIG_PATH)) {
|
| 129 |
+
fs.copyFileSync(CONFIG_PATH, CONFIG_PATH + ".bak");
|
| 130 |
}
|
| 131 |
+
fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), "utf-8");
|
| 132 |
+
console.log("[setup] Config written -> " + CONFIG_PATH);
|
| 133 |
} catch (e) {
|
| 134 |
+
console.error("[setup] Write failed: " + e.message);
|
| 135 |
process.exit(0);
|
| 136 |
}
|
| 137 |
|
| 138 |
+
console.log("[setup] auth=" + (gatewayToken ? "token" : "password"));
|
| 139 |
+
console.log("[setup] model=" + defaultModel);
|
| 140 |
+
console.log("[setup] gemini=" + !!geminiKey);
|
| 141 |
+
console.log("[setup] groq=" + !!groqKey);
|
| 142 |
+
console.log("[setup] anthropic=" + !!anthropicKey);
|
| 143 |
+
console.log("[setup] openai=" + !!openaiKey);
|
| 144 |
+
console.log("[setup] telegram=" + !!telegramToken);
|
| 145 |
})().catch(function(err) {
|
| 146 |
+
console.error("[setup] Fatal: " + err.message);
|
| 147 |
process.exit(0);
|
| 148 |
});
|