Skip to main content

skilllite_core/
paths.rs

1//! 数据根与 chat 根路径的唯一来源
2//!
3//! 规则:`SKILLLITE_WORKSPACE`(绝对路径)→ 否则 `~/.skilllite`;
4//! chat 根 = `data_root/chat`。全仓库仅在此处维护该逻辑。
5
6use std::path::PathBuf;
7
8use crate::config::env_keys::paths as env_paths;
9
10/// 解析 skilllite 数据根。
11///
12/// 优先使用环境变量 `SKILLLITE_WORKSPACE`(若为绝对路径),否则为 `~/.skilllite`。
13pub fn data_root() -> PathBuf {
14    if let Ok(ws) = std::env::var(env_paths::SKILLLITE_WORKSPACE) {
15        let p = PathBuf::from(ws);
16        if p.is_absolute() {
17            return p;
18        }
19    }
20    dirs::home_dir()
21        .unwrap_or_else(|| PathBuf::from("."))
22        .join(".skilllite")
23}
24
25/// 解析 chat 根(会话、transcript、plans、memory 等)。
26///
27/// 即 `data_root().join("chat")`。
28pub fn chat_root() -> PathBuf {
29    data_root().join("chat")
30}