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}