1use std::{
2 path::{Path, PathBuf},
3 sync::LazyLock,
4};
5
6pub static DATA_DIR: LazyLock<PathBuf> = LazyLock::new(|| {
7 let dir = dirs::home_dir().unwrap().join(".zed_ep");
8 ensure_dir(&dir)
9});
10pub static CACHE_DIR: LazyLock<PathBuf> = LazyLock::new(|| ensure_dir(&DATA_DIR.join("cache")));
11pub static REPOS_DIR: LazyLock<PathBuf> = LazyLock::new(|| ensure_dir(&DATA_DIR.join("repos")));
12pub static WORKTREES_DIR: LazyLock<PathBuf> =
13 LazyLock::new(|| ensure_dir(&DATA_DIR.join("worktrees")));
14pub static RUN_DIR: LazyLock<PathBuf> = LazyLock::new(|| {
15 DATA_DIR
16 .join("runs")
17 .join(chrono::Local::now().format("%d-%m-%y-%H_%M_%S").to_string())
18});
19pub static LATEST_EXAMPLE_RUN_DIR: LazyLock<PathBuf> = LazyLock::new(|| DATA_DIR.join("latest"));
20pub static LLM_CACHE_DB: LazyLock<PathBuf> = LazyLock::new(|| CACHE_DIR.join("llm_cache.sqlite"));
21pub static FAILED_EXAMPLES_DIR: LazyLock<PathBuf> =
22 LazyLock::new(|| ensure_dir(&RUN_DIR.join("failed")));
23
24fn ensure_dir(path: &Path) -> PathBuf {
25 std::fs::create_dir_all(path).expect("Failed to create directory");
26 path.to_path_buf()
27}