mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 00:50:22 +00:00
refactor: rename to openclaw
This commit is contained in:
@@ -1,28 +1,28 @@
|
||||
import fs from "node:fs";
|
||||
import os from "node:os";
|
||||
import path from "node:path";
|
||||
import type { MoltbotConfig } from "./types.js";
|
||||
import type { OpenClawConfig } from "./types.js";
|
||||
|
||||
/**
|
||||
* Nix mode detection: When CLAWDBOT_NIX_MODE=1, the gateway is running under Nix.
|
||||
* Nix mode detection: When OPENCLAW_NIX_MODE=1, the gateway is running under Nix.
|
||||
* In this mode:
|
||||
* - No auto-install flows should be attempted
|
||||
* - Missing dependencies should produce actionable Nix-specific error messages
|
||||
* - Config is managed externally (read-only from Nix perspective)
|
||||
*/
|
||||
export function resolveIsNixMode(env: NodeJS.ProcessEnv = process.env): boolean {
|
||||
return env.CLAWDBOT_NIX_MODE === "1";
|
||||
return env.OPENCLAW_NIX_MODE === "1";
|
||||
}
|
||||
|
||||
export const isNixMode = resolveIsNixMode();
|
||||
|
||||
const LEGACY_STATE_DIRNAME = ".clawdbot";
|
||||
const NEW_STATE_DIRNAME = ".moltbot";
|
||||
const CONFIG_FILENAME = "moltbot.json";
|
||||
const LEGACY_CONFIG_FILENAME = "clawdbot.json";
|
||||
const LEGACY_STATE_DIRNAMES = [] as const;
|
||||
const NEW_STATE_DIRNAME = ".openclaw";
|
||||
const CONFIG_FILENAME = "openclaw.json";
|
||||
const LEGACY_CONFIG_FILENAMES = [] as const;
|
||||
|
||||
function legacyStateDir(homedir: () => string = os.homedir): string {
|
||||
return path.join(homedir(), LEGACY_STATE_DIRNAME);
|
||||
function legacyStateDirs(homedir: () => string = os.homedir): string[] {
|
||||
return LEGACY_STATE_DIRNAMES.map((dir) => path.join(homedir(), dir));
|
||||
}
|
||||
|
||||
function newStateDir(homedir: () => string = os.homedir): string {
|
||||
@@ -30,7 +30,11 @@ function newStateDir(homedir: () => string = os.homedir): string {
|
||||
}
|
||||
|
||||
export function resolveLegacyStateDir(homedir: () => string = os.homedir): string {
|
||||
return legacyStateDir(homedir);
|
||||
return legacyStateDirs(homedir)[0] ?? newStateDir(homedir);
|
||||
}
|
||||
|
||||
export function resolveLegacyStateDirs(homedir: () => string = os.homedir): string[] {
|
||||
return legacyStateDirs(homedir);
|
||||
}
|
||||
|
||||
export function resolveNewStateDir(homedir: () => string = os.homedir): string {
|
||||
@@ -39,22 +43,28 @@ export function resolveNewStateDir(homedir: () => string = os.homedir): string {
|
||||
|
||||
/**
|
||||
* State directory for mutable data (sessions, logs, caches).
|
||||
* Can be overridden via MOLTBOT_STATE_DIR (preferred) or CLAWDBOT_STATE_DIR (legacy).
|
||||
* Default: ~/.clawdbot (legacy default for compatibility)
|
||||
* If ~/.moltbot exists and ~/.clawdbot does not, prefer ~/.moltbot.
|
||||
* Can be overridden via OPENCLAW_STATE_DIR.
|
||||
* Default: ~/.openclaw
|
||||
*/
|
||||
export function resolveStateDir(
|
||||
env: NodeJS.ProcessEnv = process.env,
|
||||
homedir: () => string = os.homedir,
|
||||
): string {
|
||||
const override = env.MOLTBOT_STATE_DIR?.trim() || env.CLAWDBOT_STATE_DIR?.trim();
|
||||
const override = env.OPENCLAW_STATE_DIR?.trim() || env.CLAWDBOT_STATE_DIR?.trim();
|
||||
if (override) return resolveUserPath(override);
|
||||
const legacyDir = legacyStateDir(homedir);
|
||||
const newDir = newStateDir(homedir);
|
||||
const hasLegacy = fs.existsSync(legacyDir);
|
||||
const legacyDirs = legacyStateDirs(homedir);
|
||||
const hasNew = fs.existsSync(newDir);
|
||||
if (!hasLegacy && hasNew) return newDir;
|
||||
return legacyDir;
|
||||
if (hasNew) return newDir;
|
||||
const existingLegacy = legacyDirs.find((dir) => {
|
||||
try {
|
||||
return fs.existsSync(dir);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
if (existingLegacy) return existingLegacy;
|
||||
return newDir;
|
||||
}
|
||||
|
||||
function resolveUserPath(input: string): string {
|
||||
@@ -71,21 +81,21 @@ export const STATE_DIR = resolveStateDir();
|
||||
|
||||
/**
|
||||
* Config file path (JSON5).
|
||||
* Can be overridden via MOLTBOT_CONFIG_PATH (preferred) or CLAWDBOT_CONFIG_PATH (legacy).
|
||||
* Default: ~/.clawdbot/moltbot.json (or $*_STATE_DIR/moltbot.json)
|
||||
* Can be overridden via OPENCLAW_CONFIG_PATH.
|
||||
* Default: ~/.openclaw/openclaw.json (or $OPENCLAW_STATE_DIR/openclaw.json)
|
||||
*/
|
||||
export function resolveCanonicalConfigPath(
|
||||
env: NodeJS.ProcessEnv = process.env,
|
||||
stateDir: string = resolveStateDir(env, os.homedir),
|
||||
): string {
|
||||
const override = env.MOLTBOT_CONFIG_PATH?.trim() || env.CLAWDBOT_CONFIG_PATH?.trim();
|
||||
const override = env.OPENCLAW_CONFIG_PATH?.trim() || env.CLAWDBOT_CONFIG_PATH?.trim();
|
||||
if (override) return resolveUserPath(override);
|
||||
return path.join(stateDir, CONFIG_FILENAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve the active config path by preferring existing config candidates
|
||||
* (new/legacy filenames) before falling back to the canonical path.
|
||||
* before falling back to the canonical path.
|
||||
*/
|
||||
export function resolveConfigPathCandidate(
|
||||
env: NodeJS.ProcessEnv = process.env,
|
||||
@@ -104,19 +114,19 @@ export function resolveConfigPathCandidate(
|
||||
}
|
||||
|
||||
/**
|
||||
* Active config path (prefers existing legacy/new config files).
|
||||
* Active config path (prefers existing config files).
|
||||
*/
|
||||
export function resolveConfigPath(
|
||||
env: NodeJS.ProcessEnv = process.env,
|
||||
stateDir: string = resolveStateDir(env, os.homedir),
|
||||
homedir: () => string = os.homedir,
|
||||
): string {
|
||||
const override = env.MOLTBOT_CONFIG_PATH?.trim() || env.CLAWDBOT_CONFIG_PATH?.trim();
|
||||
const override = env.OPENCLAW_CONFIG_PATH?.trim();
|
||||
if (override) return resolveUserPath(override);
|
||||
const stateOverride = env.MOLTBOT_STATE_DIR?.trim() || env.CLAWDBOT_STATE_DIR?.trim();
|
||||
const stateOverride = env.OPENCLAW_STATE_DIR?.trim();
|
||||
const candidates = [
|
||||
path.join(stateDir, CONFIG_FILENAME),
|
||||
path.join(stateDir, LEGACY_CONFIG_FILENAME),
|
||||
...LEGACY_CONFIG_FILENAMES.map((name) => path.join(stateDir, name)),
|
||||
];
|
||||
const existing = candidates.find((candidate) => {
|
||||
try {
|
||||
@@ -137,32 +147,29 @@ export function resolveConfigPath(
|
||||
export const CONFIG_PATH = resolveConfigPathCandidate();
|
||||
|
||||
/**
|
||||
* Resolve default config path candidates across new + legacy locations.
|
||||
* Order: explicit config path → state-dir-derived paths → new default → legacy default.
|
||||
* Resolve default config path candidates across default locations.
|
||||
* Order: explicit config path → state-dir-derived paths → new default.
|
||||
*/
|
||||
export function resolveDefaultConfigCandidates(
|
||||
env: NodeJS.ProcessEnv = process.env,
|
||||
homedir: () => string = os.homedir,
|
||||
): string[] {
|
||||
const explicit = env.MOLTBOT_CONFIG_PATH?.trim() || env.CLAWDBOT_CONFIG_PATH?.trim();
|
||||
const explicit = env.OPENCLAW_CONFIG_PATH?.trim() || env.CLAWDBOT_CONFIG_PATH?.trim();
|
||||
if (explicit) return [resolveUserPath(explicit)];
|
||||
|
||||
const candidates: string[] = [];
|
||||
const moltbotStateDir = env.MOLTBOT_STATE_DIR?.trim();
|
||||
if (moltbotStateDir) {
|
||||
candidates.push(path.join(resolveUserPath(moltbotStateDir), CONFIG_FILENAME));
|
||||
candidates.push(path.join(resolveUserPath(moltbotStateDir), LEGACY_CONFIG_FILENAME));
|
||||
}
|
||||
const legacyStateDirOverride = env.CLAWDBOT_STATE_DIR?.trim();
|
||||
if (legacyStateDirOverride) {
|
||||
candidates.push(path.join(resolveUserPath(legacyStateDirOverride), CONFIG_FILENAME));
|
||||
candidates.push(path.join(resolveUserPath(legacyStateDirOverride), LEGACY_CONFIG_FILENAME));
|
||||
const openclawStateDir = env.OPENCLAW_STATE_DIR?.trim() || env.CLAWDBOT_STATE_DIR?.trim();
|
||||
if (openclawStateDir) {
|
||||
const resolved = resolveUserPath(openclawStateDir);
|
||||
candidates.push(path.join(resolved, CONFIG_FILENAME));
|
||||
candidates.push(...LEGACY_CONFIG_FILENAMES.map((name) => path.join(resolved, name)));
|
||||
}
|
||||
|
||||
candidates.push(path.join(newStateDir(homedir), CONFIG_FILENAME));
|
||||
candidates.push(path.join(newStateDir(homedir), LEGACY_CONFIG_FILENAME));
|
||||
candidates.push(path.join(legacyStateDir(homedir), CONFIG_FILENAME));
|
||||
candidates.push(path.join(legacyStateDir(homedir), LEGACY_CONFIG_FILENAME));
|
||||
const defaultDirs = [newStateDir(homedir), ...legacyStateDirs(homedir)];
|
||||
for (const dir of defaultDirs) {
|
||||
candidates.push(path.join(dir, CONFIG_FILENAME));
|
||||
candidates.push(...LEGACY_CONFIG_FILENAMES.map((name) => path.join(dir, name)));
|
||||
}
|
||||
return candidates;
|
||||
}
|
||||
|
||||
@@ -170,12 +177,12 @@ export const DEFAULT_GATEWAY_PORT = 18789;
|
||||
|
||||
/**
|
||||
* Gateway lock directory (ephemeral).
|
||||
* Default: os.tmpdir()/moltbot-<uid> (uid suffix when available).
|
||||
* Default: os.tmpdir()/openclaw-<uid> (uid suffix when available).
|
||||
*/
|
||||
export function resolveGatewayLockDir(tmpdir: () => string = os.tmpdir): string {
|
||||
const base = tmpdir();
|
||||
const uid = typeof process.getuid === "function" ? process.getuid() : undefined;
|
||||
const suffix = uid != null ? `moltbot-${uid}` : "moltbot";
|
||||
const suffix = uid != null ? `openclaw-${uid}` : "openclaw";
|
||||
return path.join(base, suffix);
|
||||
}
|
||||
|
||||
@@ -185,15 +192,14 @@ const OAUTH_FILENAME = "oauth.json";
|
||||
* OAuth credentials storage directory.
|
||||
*
|
||||
* Precedence:
|
||||
* - `CLAWDBOT_OAUTH_DIR` (explicit override)
|
||||
* - `OPENCLAW_OAUTH_DIR` (explicit override)
|
||||
* - `$*_STATE_DIR/credentials` (canonical server/default)
|
||||
* - `~/.clawdbot/credentials` (legacy default)
|
||||
*/
|
||||
export function resolveOAuthDir(
|
||||
env: NodeJS.ProcessEnv = process.env,
|
||||
stateDir: string = resolveStateDir(env, os.homedir),
|
||||
): string {
|
||||
const override = env.CLAWDBOT_OAUTH_DIR?.trim();
|
||||
const override = env.OPENCLAW_OAUTH_DIR?.trim();
|
||||
if (override) return resolveUserPath(override);
|
||||
return path.join(stateDir, "credentials");
|
||||
}
|
||||
@@ -206,10 +212,10 @@ export function resolveOAuthPath(
|
||||
}
|
||||
|
||||
export function resolveGatewayPort(
|
||||
cfg?: MoltbotConfig,
|
||||
cfg?: OpenClawConfig,
|
||||
env: NodeJS.ProcessEnv = process.env,
|
||||
): number {
|
||||
const envRaw = env.CLAWDBOT_GATEWAY_PORT?.trim();
|
||||
const envRaw = env.OPENCLAW_GATEWAY_PORT?.trim() || env.CLAWDBOT_GATEWAY_PORT?.trim();
|
||||
if (envRaw) {
|
||||
const parsed = Number.parseInt(envRaw, 10);
|
||||
if (Number.isFinite(parsed) && parsed > 0) return parsed;
|
||||
|
||||
Reference in New Issue
Block a user