8900 commited on
Commit
66b9e6c
Β·
verified Β·
1 Parent(s): 8a58dbf

Update setup-hf-config.mjs

Browse files
Files changed (1) hide show
  1. setup-hf-config.mjs +71 -71
setup-hf-config.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import fs from β€œnode:fs”;
2
- import path from β€œnode:path”;
3
- import https from β€œnode:https”;
4
 
5
  // ============================================================
6
  // OpenClaw HF Spaces - Production Config Writer
@@ -8,47 +8,47 @@ import https from β€œnode:https”;
8
  // Always writes fresh config from env vars on first boot.
9
  // ============================================================
10
 
11
- var HOME = process.env.OPENCLAW_HOME || process.env.HOME || β€œ/home/user”;
12
- var STATE_DIR = path.join(HOME, β€œ.openclaw”);
13
- var CONFIG_PATH = path.join(STATE_DIR, β€œopenclaw.json”);
14
- var WORKSPACE = path.join(STATE_DIR, β€œworkspace”);
15
- var SPACE_HOST = (process.env.SPACE_HOST || β€œβ€).trim();
16
 
17
- console.log(”[setup] Starting… HOME=” + HOME);
18
 
19
  function parseList(val) {
20
  if (!val || !val.trim()) return [];
21
- return val.split(”,”).map(function(s) { return s.trim(); }).filter(Boolean);
22
  }
23
 
24
  function envStr(key) {
25
- return (process.env[key] || β€œβ€).trim();
26
  }
27
 
28
  // –– auth –––––––––––––––––––––––––
29
 
30
- var gatewayToken = envStr(β€œOPENCLAW_GATEWAY_TOKEN”);
31
- var gatewayPassword = envStr(β€œOPENCLAW_GATEWAY_PASSWORD”);
32
 
33
  if (!gatewayToken && !gatewayPassword) {
34
- console.error(”[setup] FATAL: set OPENCLAW_GATEWAY_TOKEN or OPENCLAW_GATEWAY_PASSWORD”);
35
  process.exit(0);
36
  }
37
 
38
  // –– model ———————————————––
39
 
40
- var defaultModel = envStr(β€œOPENCLAW_HF_DEFAULT_MODEL”) || β€œgoogle/gemini-2.0-flash”;
41
 
42
  // –– provider keys —————————————–
43
 
44
  var EXCLUDE_PREFIXES = [
45
- β€œOPENCLAW_”, β€œSPACE_”, β€œSYSTEM_”, β€œHF_”,
46
- β€œNODE_”, β€œPATH”, β€œHOME”, β€œUSER”, β€œPWD”, β€œLANG”, β€œLC_”,
47
- β€œnpm_”, β€œHOSTNAME”, β€œSHELL”, β€œTERM”, β€œSHLVL”
48
  ];
49
  var INCLUDE_SUFFIXES = [
50
- β€œ_API_KEY”, β€œ_SECRET_KEY”, β€œ_ACCESS_TOKEN”,
51
- β€œ_BOT_TOKEN”, β€œ_AUTH_TOKEN”, β€œ_APP_KEY”
52
  ];
53
 
54
  function isProviderKey(k) {
@@ -64,27 +64,27 @@ return false;
64
  }
65
 
66
  var providerKeys = Object.keys(process.env).filter(function(k) {
67
- return isProviderKey(k) && (process.env[k] || β€œβ€).trim();
68
  }).sort();
69
 
70
- console.log(”[setup] Detected provider keys (” + providerKeys.length + β€œ):”);
71
- providerKeys.forEach(function(k) { console.log(” + β€œ + k); });
72
 
73
  // –– trusted proxies β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”
74
 
75
- var envProxies = parseList(envStr(β€œOPENCLAW_GATEWAY_TRUSTED_PROXIES”));
76
  var trustedProxies = envProxies.length > 0 ? envProxies : [
77
- β€œ10.0.0.0/8”,
78
- β€œ172.16.0.0/12”,
79
- β€œ192.168.0.0/16”,
80
- β€œ10.16.0.0/12”, β€œ10.20.0.0/12”,
81
- β€œ10.16.4.123”, β€œ10.16.7.92”, β€œ10.16.18.232”,
82
- β€œ10.16.34.155”, β€œ10.16.43.133”, β€œ10.16.1.206”,
83
- β€œ10.16.37.110”, β€œ10.16.43.246”,
84
- β€œ10.20.1.9”, β€œ10.20.1.222”,
85
- β€œ10.20.26.157”, β€œ10.20.31.87”,
86
- β€œ10.20.0.1”, β€œ172.17.0.1”,
87
- β€œ127.0.0.1”
88
  ];
89
 
90
  // –– build config β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”
@@ -92,11 +92,11 @@ var trustedProxies = envProxies.length > 0 ? envProxies : [
92
  var config = {
93
  gateway: {
94
  auth: gatewayToken
95
- ? { mode: β€œtoken”, token: gatewayToken }
96
- : { mode: β€œpassword”, password: gatewayPassword },
97
  controlUi: {
98
  allowInsecureAuth: true,
99
- allowedOrigins: [”*”],
100
  dangerouslyDisableDeviceAuth: true,
101
  dangerouslyAllowHostHeaderOriginFallback: true
102
  },
@@ -112,7 +112,7 @@ env: { vars: {} }
112
  };
113
 
114
  providerKeys.forEach(function(pk) {
115
- config.env.vars[pk] = (process.env[pk] || β€œβ€).trim();
116
  });
117
 
118
  // –– Telegram –––––––––––––––––––––––
@@ -121,21 +121,21 @@ function tgRequest(token, method, body) {
121
  return new Promise(function(resolve) {
122
  var data = JSON.stringify(body || {});
123
  var req = https.request({
124
- hostname: β€œapi.telegram.org”,
125
- path: β€œ/bot” + token + β€œ/” + method,
126
- method: β€œPOST”,
127
  headers: {
128
- β€œContent-Type”: β€œapplication/json”,
129
- β€œContent-Length”: Buffer.byteLength(data)
130
  }
131
  }, function(res) {
132
- var buf = β€œβ€;
133
- res.on(β€œdata”, function(c) { buf += c; });
134
- res.on(β€œend”, function() {
135
  try { resolve(JSON.parse(buf)); } catch (e) { resolve(null); }
136
  });
137
  });
138
- req.on(β€œerror”, function() { resolve(null); });
139
  req.setTimeout(8000, function() { req.destroy(); resolve(null); });
140
  req.write(data);
141
  req.end();
@@ -143,40 +143,40 @@ req.end();
143
  }
144
 
145
  async function setupTelegram() {
146
- var token = envStr(β€œTELEGRAM_BOT_TOKEN”);
147
  if (!token) {
148
- console.log(”[setup] Telegram: disabled (no TELEGRAM_BOT_TOKEN)”);
149
  return;
150
  }
151
 
152
  if (SPACE_HOST) {
153
- var webhookUrl = β€œhttps://” + SPACE_HOST + β€œ/tg-webhook”;
154
- var r = await tgRequest(token, β€œsetWebhook”, {
155
  url: webhookUrl,
156
  drop_pending_updates: true,
157
  max_connections: 10
158
  });
159
  if (r && r.ok) {
160
- console.log(”[setup] Telegram: webhook registered -> β€œ + webhookUrl);
161
  } else {
162
- console.log(”[setup] Telegram: auto-registration failed”);
163
- console.log(”[setup] Open this URL in your browser once:”);
164
- console.log(” https://api.telegram.org/bot” + token +
165
- β€œ/setWebhook?url=” + webhookUrl + β€œ&drop_pending_updates=true”);
166
  }
167
  } else {
168
- console.log(”[setup] Telegram: set SPACE_HOST for auto webhook”);
169
  }
170
 
171
  config.channels = {
172
  telegram: {
173
  enabled: true,
174
  accounts: {
175
- main: { botToken: token, apiRoot: β€œhttps://api.telegram.org” }
176
  }
177
  }
178
  };
179
- console.log(”[setup] Telegram: configured”);
180
  }
181
 
182
  // –– main –––––––––––––––––––––––––
@@ -184,23 +184,23 @@ console.log(”[setup] Telegram: configured”);
184
  (async function() {
185
  fs.mkdirSync(STATE_DIR, { recursive: true });
186
  fs.mkdirSync(WORKSPACE, { recursive: true });
187
- fs.mkdirSync(path.join(WORKSPACE, β€œmemory”), { recursive: true });
188
 
189
  await setupTelegram();
190
 
191
  if (fs.existsSync(CONFIG_PATH)) {
192
- fs.copyFileSync(CONFIG_PATH, CONFIG_PATH + β€œ.bak”);
193
  }
194
- fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), β€œutf-8”);
195
 
196
- console.log(”[setup] Done.”);
197
- console.log(”[setup] auth = β€œ + (gatewayToken ? β€œtoken” : β€œpassword”));
198
- console.log(”[setup] model = β€œ + defaultModel);
199
- console.log(”[setup] workspace = β€œ + WORKSPACE);
200
- console.log(”[setup] proxies = β€œ + trustedProxies.length);
201
- console.log(”[setup] env.vars = β€œ + providerKeys.length);
202
- console.log(”[setup] config = β€œ + CONFIG_PATH);
203
  })().catch(function(e) {
204
- console.error(”[setup] Fatal: β€œ + e.message);
205
  process.exit(0);
206
  });
 
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import https from "node:https";
4
 
5
  // ============================================================
6
  // OpenClaw HF Spaces - Production Config Writer
 
8
  // Always writes fresh config from env vars on first boot.
9
  // ============================================================
10
 
11
+ var HOME = process.env.OPENCLAW_HOME || process.env.HOME || "/home/user";
12
+ var STATE_DIR = path.join(HOME, ".openclaw");
13
+ var CONFIG_PATH = path.join(STATE_DIR, "openclaw.json");
14
+ var WORKSPACE = path.join(STATE_DIR, "workspace");
15
+ var SPACE_HOST = (process.env.SPACE_HOST || "").trim();
16
 
17
+ console.log("[setup] Starting… HOME=" + HOME);
18
 
19
  function parseList(val) {
20
  if (!val || !val.trim()) return [];
21
+ return val.split(",").map(function(s) { return s.trim(); }).filter(Boolean);
22
  }
23
 
24
  function envStr(key) {
25
+ return (process.env[key] || "").trim();
26
  }
27
 
28
  // –– auth –––––––––––––––––––––––––
29
 
30
+ var gatewayToken = envStr("OPENCLAW_GATEWAY_TOKEN");
31
+ var gatewayPassword = envStr("OPENCLAW_GATEWAY_PASSWORD");
32
 
33
  if (!gatewayToken && !gatewayPassword) {
34
+ console.error("[setup] FATAL: set OPENCLAW_GATEWAY_TOKEN or OPENCLAW_GATEWAY_PASSWORD");
35
  process.exit(0);
36
  }
37
 
38
  // –– model ———————————————––
39
 
40
+ var defaultModel = envStr("OPENCLAW_HF_DEFAULT_MODEL") || "google/gemini-2.0-flash";
41
 
42
  // –– provider keys —————————————–
43
 
44
  var EXCLUDE_PREFIXES = [
45
+ "OPENCLAW_", "SPACE_", "SYSTEM_", "HF_",
46
+ "NODE_", "PATH", "HOME", "USER", "PWD", "LANG", "LC_",
47
+ "npm_", "HOSTNAME", "SHELL", "TERM", "SHLVL"
48
  ];
49
  var INCLUDE_SUFFIXES = [
50
+ "_API_KEY", "_SECRET_KEY", "_ACCESS_TOKEN",
51
+ "_BOT_TOKEN", "_AUTH_TOKEN", "_APP_KEY"
52
  ];
53
 
54
  function isProviderKey(k) {
 
64
  }
65
 
66
  var providerKeys = Object.keys(process.env).filter(function(k) {
67
+ return isProviderKey(k) && (process.env[k] || "").trim();
68
  }).sort();
69
 
70
+ console.log("[setup] Detected provider keys (" + providerKeys.length + "):");
71
+ providerKeys.forEach(function(k) { console.log(" + " + k); });
72
 
73
  // –– trusted proxies β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”
74
 
75
+ var envProxies = parseList(envStr("OPENCLAW_GATEWAY_TRUSTED_PROXIES"));
76
  var trustedProxies = envProxies.length > 0 ? envProxies : [
77
+ "10.0.0.0/8",
78
+ "172.16.0.0/12",
79
+ "192.168.0.0/16",
80
+ "10.16.0.0/12", "10.20.0.0/12",
81
+ "10.16.4.123", "10.16.7.92", "10.16.18.232",
82
+ "10.16.34.155", "10.16.43.133", "10.16.1.206",
83
+ "10.16.37.110", "10.16.43.246",
84
+ "10.20.1.9", "10.20.1.222",
85
+ "10.20.26.157", "10.20.31.87",
86
+ "10.20.0.1", "172.17.0.1",
87
+ "127.0.0.1"
88
  ];
89
 
90
  // –– build config β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”β€”
 
92
  var config = {
93
  gateway: {
94
  auth: gatewayToken
95
+ ? { mode: "token", token: gatewayToken }
96
+ : { mode: "password", password: gatewayPassword },
97
  controlUi: {
98
  allowInsecureAuth: true,
99
+ allowedOrigins: ["*"],
100
  dangerouslyDisableDeviceAuth: true,
101
  dangerouslyAllowHostHeaderOriginFallback: true
102
  },
 
112
  };
113
 
114
  providerKeys.forEach(function(pk) {
115
+ config.env.vars[pk] = (process.env[pk] || "").trim();
116
  });
117
 
118
  // –– Telegram –––––––––––––––––––––––
 
121
  return new Promise(function(resolve) {
122
  var data = JSON.stringify(body || {});
123
  var req = https.request({
124
+ hostname: "api.telegram.org",
125
+ path: "/bot" + token + "/" + method,
126
+ method: "POST",
127
  headers: {
128
+ "Content-Type": "application/json",
129
+ "Content-Length": Buffer.byteLength(data)
130
  }
131
  }, function(res) {
132
+ var buf = "";
133
+ res.on("data", function(c) { buf += c; });
134
+ res.on("end", function() {
135
  try { resolve(JSON.parse(buf)); } catch (e) { resolve(null); }
136
  });
137
  });
138
+ req.on("error", function() { resolve(null); });
139
  req.setTimeout(8000, function() { req.destroy(); resolve(null); });
140
  req.write(data);
141
  req.end();
 
143
  }
144
 
145
  async function setupTelegram() {
146
+ var token = envStr("TELEGRAM_BOT_TOKEN");
147
  if (!token) {
148
+ console.log("[setup] Telegram: disabled (no TELEGRAM_BOT_TOKEN)");
149
  return;
150
  }
151
 
152
  if (SPACE_HOST) {
153
+ var webhookUrl = "https://" + SPACE_HOST + "/tg-webhook";
154
+ var r = await tgRequest(token, "setWebhook", {
155
  url: webhookUrl,
156
  drop_pending_updates: true,
157
  max_connections: 10
158
  });
159
  if (r && r.ok) {
160
+ console.log("[setup] Telegram: webhook registered -> " + webhookUrl);
161
  } else {
162
+ console.log("[setup] Telegram: auto-registration failed");
163
+ console.log("[setup] Open this URL in your browser once:");
164
+ console.log(" https://api.telegram.org/bot" + token +
165
+ "/setWebhook?url=" + webhookUrl + "&drop_pending_updates=true");
166
  }
167
  } else {
168
+ console.log("[setup] Telegram: set SPACE_HOST for auto webhook");
169
  }
170
 
171
  config.channels = {
172
  telegram: {
173
  enabled: true,
174
  accounts: {
175
+ main: { botToken: token, apiRoot: "https://api.telegram.org" }
176
  }
177
  }
178
  };
179
+ console.log("[setup] Telegram: configured");
180
  }
181
 
182
  // –– main –––––––––––––––––––––––––
 
184
  (async function() {
185
  fs.mkdirSync(STATE_DIR, { recursive: true });
186
  fs.mkdirSync(WORKSPACE, { recursive: true });
187
+ fs.mkdirSync(path.join(WORKSPACE, "memory"), { recursive: true });
188
 
189
  await setupTelegram();
190
 
191
  if (fs.existsSync(CONFIG_PATH)) {
192
+ fs.copyFileSync(CONFIG_PATH, CONFIG_PATH + ".bak");
193
  }
194
+ fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), "utf-8");
195
 
196
+ console.log("[setup] Done.");
197
+ console.log("[setup] auth = " + (gatewayToken ? "token" : "password"));
198
+ console.log("[setup] model = " + defaultModel);
199
+ console.log("[setup] workspace = " + WORKSPACE);
200
+ console.log("[setup] proxies = " + trustedProxies.length);
201
+ console.log("[setup] env.vars = " + providerKeys.length);
202
+ console.log("[setup] config = " + CONFIG_PATH);
203
  })().catch(function(e) {
204
+ console.error("[setup] Fatal: " + e.message);
205
  process.exit(0);
206
  });