|
|
@@ -1,58 +1 @@
|
|
|
-import fs from "fs/promises"
|
|
|
-import { xdgData, xdgCache, xdgConfig, xdgState } from "xdg-basedir"
|
|
|
-import path from "path"
|
|
|
-import os from "os"
|
|
|
-import { Filesystem } from "../util/filesystem"
|
|
|
-import { Flock } from "@opencode-ai/shared/util/flock"
|
|
|
-
|
|
|
-const app = "opencode"
|
|
|
-
|
|
|
-const data = path.join(xdgData!, app)
|
|
|
-const cache = path.join(xdgCache!, app)
|
|
|
-const config = path.join(xdgConfig!, app)
|
|
|
-const state = path.join(xdgState!, app)
|
|
|
-
|
|
|
-export namespace Global {
|
|
|
- export const Path = {
|
|
|
- // Allow override via OPENCODE_TEST_HOME for test isolation
|
|
|
- get home() {
|
|
|
- return process.env.OPENCODE_TEST_HOME || os.homedir()
|
|
|
- },
|
|
|
- data,
|
|
|
- bin: path.join(cache, "bin"),
|
|
|
- log: path.join(data, "log"),
|
|
|
- cache,
|
|
|
- config,
|
|
|
- state,
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-// Initialize Flock with global state path
|
|
|
-Flock.setGlobal({ state })
|
|
|
-
|
|
|
-await Promise.all([
|
|
|
- fs.mkdir(Global.Path.data, { recursive: true }),
|
|
|
- fs.mkdir(Global.Path.config, { recursive: true }),
|
|
|
- fs.mkdir(Global.Path.state, { recursive: true }),
|
|
|
- fs.mkdir(Global.Path.log, { recursive: true }),
|
|
|
- fs.mkdir(Global.Path.bin, { recursive: true }),
|
|
|
-])
|
|
|
-
|
|
|
-const CACHE_VERSION = "21"
|
|
|
-
|
|
|
-const version = await Filesystem.readText(path.join(Global.Path.cache, "version")).catch(() => "0")
|
|
|
-
|
|
|
-if (version !== CACHE_VERSION) {
|
|
|
- try {
|
|
|
- const contents = await fs.readdir(Global.Path.cache)
|
|
|
- await Promise.all(
|
|
|
- contents.map((item) =>
|
|
|
- fs.rm(path.join(Global.Path.cache, item), {
|
|
|
- recursive: true,
|
|
|
- force: true,
|
|
|
- }),
|
|
|
- ),
|
|
|
- )
|
|
|
- } catch {}
|
|
|
- await Filesystem.write(path.join(Global.Path.cache, "version"), CACHE_VERSION)
|
|
|
-}
|
|
|
+export * as Global from "./global"
|