Files
Moltbot/apps/macos/Sources/OpenClaw/OpenClawPaths.swift
2026-01-30 03:16:21 +01:00

55 lines
1.7 KiB
Swift

import Foundation
enum OpenClawEnv {
static func path(_ key: String) -> String? {
// Normalize env overrides once so UI + file IO stay consistent.
guard let raw = getenv(key) else { return nil }
let value = String(cString: raw).trimmingCharacters(in: .whitespacesAndNewlines)
guard !value.isEmpty
else {
return nil
}
return value
}
}
enum OpenClawPaths {
private static let configPathEnv = ["OPENCLAW_CONFIG_PATH"]
private static let stateDirEnv = ["OPENCLAW_STATE_DIR"]
static var stateDirURL: URL {
for key in self.stateDirEnv {
if let override = OpenClawEnv.path(key) {
return URL(fileURLWithPath: override, isDirectory: true)
}
}
let home = FileManager().homeDirectoryForCurrentUser
let preferred = home.appendingPathComponent(".openclaw", isDirectory: true)
return preferred
}
private static func resolveConfigCandidate(in dir: URL) -> URL? {
let candidates = [
dir.appendingPathComponent("openclaw.json"),
]
return candidates.first(where: { FileManager().fileExists(atPath: $0.path) })
}
static var configURL: URL {
for key in self.configPathEnv {
if let override = OpenClawEnv.path(key) {
return URL(fileURLWithPath: override)
}
}
let stateDir = self.stateDirURL
if let existing = self.resolveConfigCandidate(in: stateDir) {
return existing
}
return stateDir.appendingPathComponent("openclaw.json")
}
static var workspaceURL: URL {
self.stateDirURL.appendingPathComponent("workspace", isDirectory: true)
}
}