42 lines
2 KiB
TypeScript
42 lines
2 KiB
TypeScript
import { Flag } from "@opencode-ai/core/flag/flag"
|
|
import { Effect } from "effect"
|
|
import path from "path"
|
|
|
|
const preserveExerciseGlobalRoot = !!process.env.OPENCODE_HTTPAPI_EXERCISE_GLOBAL
|
|
export const exerciseGlobalRoot =
|
|
process.env.OPENCODE_HTTPAPI_EXERCISE_GLOBAL ??
|
|
path.join(process.env.TMPDIR ?? "/tmp", `opencode-httpapi-global-${process.pid}`)
|
|
process.env.XDG_DATA_HOME = path.join(exerciseGlobalRoot, "data")
|
|
process.env.XDG_CONFIG_HOME = path.join(exerciseGlobalRoot, "config")
|
|
process.env.XDG_STATE_HOME = path.join(exerciseGlobalRoot, "state")
|
|
process.env.XDG_CACHE_HOME = path.join(exerciseGlobalRoot, "cache")
|
|
process.env.OPENCODE_DISABLE_SHARE = "true"
|
|
export const exerciseConfigDirectory = path.join(exerciseGlobalRoot, "config", "opencode")
|
|
export const exerciseDataDirectory = path.join(exerciseGlobalRoot, "data", "opencode")
|
|
|
|
const preserveExerciseDatabase = !!process.env.OPENCODE_HTTPAPI_EXERCISE_DB
|
|
export const exerciseDatabasePath =
|
|
process.env.OPENCODE_HTTPAPI_EXERCISE_DB ??
|
|
path.join(process.env.TMPDIR ?? "/tmp", `opencode-httpapi-exercise-${process.pid}.db`)
|
|
// Must run before the first Effect Config read anywhere in the process: the
|
|
// default ConfigProvider snapshots process.env on first use, so a Config read
|
|
// during an earlier module import would freeze the wrong database path.
|
|
process.env.OPENCODE_DB = exerciseDatabasePath
|
|
|
|
export const original = {
|
|
OPENCODE_SERVER_PASSWORD: Flag.OPENCODE_SERVER_PASSWORD,
|
|
OPENCODE_SERVER_USERNAME: Flag.OPENCODE_SERVER_USERNAME,
|
|
}
|
|
|
|
export const cleanupExercisePaths = Effect.promise(async () => {
|
|
const fs = await import("fs/promises")
|
|
if (!preserveExerciseDatabase) {
|
|
await Promise.all(
|
|
[exerciseDatabasePath, `${exerciseDatabasePath}-wal`, `${exerciseDatabasePath}-shm`].map((file) =>
|
|
fs.rm(file, { force: true }).catch(() => undefined),
|
|
),
|
|
)
|
|
}
|
|
if (!preserveExerciseGlobalRoot)
|
|
await fs.rm(exerciseGlobalRoot, { recursive: true, force: true }).catch(() => undefined)
|
|
})
|