fix(openclaw): always set gateway.origin when updating claw subdomain

- Regex-only replace missed empty/new JSON without existing *.claw.cutos.ai URL
- Also replace wss://*.claw.cutos.ai in string fields

Made-with: Cursor
This commit is contained in:
stswangzhiping
2026-03-27 14:42:05 +08:00
parent 12366790d2
commit 69ac075e8c

View File

@@ -419,9 +419,11 @@ class ClawClient {
const raw = readFileSync(configFile, 'utf8');
const config = JSON.parse(raw);
const newOrigin = `https://${targetId}.claw.cutos.ai`;
const re = /https:\/\/[^"'\s]+\.claw\.cutos\.ai/g;
const newOriginWss = `wss://${targetId}.claw.cutos.ai`;
const reHttps = /https:\/\/[^"'\s]+\.claw\.cutos\.ai/g;
const reWss = /wss:\/\/[^"'\s]+\.claw\.cutos\.ai/g;
/** 与原 YAML 全文替换等价:遍历 JSON 内所有字符串替换匹配的 origin */
/** 遍历 JSON 内字符串替换已存在的 claw 子域 URL兼容旧 YAML 全文替换习惯) */
const replaceOriginStrings = (node) => {
let changed = false;
if (typeof node === 'string') {
@@ -431,7 +433,7 @@ class ClawClient {
for (let i = 0; i < node.length; i++) {
const v = node[i];
if (typeof v === 'string') {
const next = v.replace(re, newOrigin);
const next = v.replace(reHttps, newOrigin).replace(reWss, newOriginWss);
if (next !== v) {
node[i] = next;
changed = true;
@@ -446,7 +448,7 @@ class ClawClient {
for (const k of Object.keys(node)) {
const v = node[k];
if (typeof v === 'string') {
const next = v.replace(re, newOrigin);
const next = v.replace(reHttps, newOrigin).replace(reWss, newOriginWss);
if (next !== v) {
node[k] = next;
changed = true;
@@ -460,7 +462,18 @@ class ClawClient {
return false;
};
if (!replaceOriginStrings(config)) {
let changed = replaceOriginStrings(config);
// openclaw.json 可能没有旧 URL 可替换(空配置或仅 token必须写入 gateway.origin
if (!config.gateway || typeof config.gateway !== 'object') {
config.gateway = {};
}
if (config.gateway.origin !== newOrigin) {
config.gateway.origin = newOrigin;
changed = true;
}
if (!changed) {
log.info('clawd', `openclaw origin 已是 ${newOrigin},无需变更`);
return;
}