Files
bot/apps/macos/Sources/Bot/BotPaths.swift
zeekay 4bdc9ee3e4 chore: rebrand openclaw → hanzo-bot for bridge merge
Comprehensive rename of all openclaw references to hanzo-bot equivalents:
- Package: openclaw → @hanzo/bot
- Binary: openclaw → hanzo-bot
- Types: OpenClaw* → Bot*
- Env vars: OPENCLAW_* → BOT_*
- Android: ai.openclaw.android → ai.hanzo.bot.android
- iOS/macOS: ai.openclaw.* → ai.hanzo.*
- Swift modules: OpenClaw* → Bot*
- Plugins: openclaw.plugin.json → bot.plugin.json
- Paths: .openclaw/ → .hanzo/bot/
- URLs: github.com/openclaw → github.com/hanzoai
2026-02-26 22:36:01 -08:00

54 lines
1.6 KiB
Swift

import Foundation
enum BotEnv {
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 BotPaths {
private static let configPathEnv = ["BOT_CONFIG_PATH"]
private static let stateDirEnv = ["BOT_STATE_DIR"]
static var stateDirURL: URL {
for key in self.stateDirEnv {
if let override = BotEnv.path(key) {
return URL(fileURLWithPath: override, isDirectory: true)
}
}
let home = FileManager().homeDirectoryForCurrentUser
return home.appendingPathComponent(".bot", isDirectory: true)
}
private static func resolveConfigCandidate(in dir: URL) -> URL? {
let candidates = [
dir.appendingPathComponent("bot.json"),
]
return candidates.first(where: { FileManager().fileExists(atPath: $0.path) })
}
static var configURL: URL {
for key in self.configPathEnv {
if let override = BotEnv.path(key) {
return URL(fileURLWithPath: override)
}
}
let stateDir = self.stateDirURL
if let existing = self.resolveConfigCandidate(in: stateDir) {
return existing
}
return stateDir.appendingPathComponent("bot.json")
}
static var workspaceURL: URL {
self.stateDirURL.appendingPathComponent("workspace", isDirectory: true)
}
}