Skip to main content

systemprompt_cli/
paths.rs

1use std::path::PathBuf;
2
3use anyhow::{Context, Result};
4use systemprompt_cloud::paths::{get_cloud_paths, CloudPath};
5use systemprompt_cloud::ProjectContext;
6
7#[derive(Debug)]
8pub struct ResolvedPaths {
9    project_ctx: ProjectContext,
10    has_local_dir: bool,
11}
12
13impl ResolvedPaths {
14    pub fn discover() -> Self {
15        let project_ctx = ProjectContext::discover();
16        let has_local_dir = project_ctx.systemprompt_dir().exists();
17        Self {
18            project_ctx,
19            has_local_dir,
20        }
21    }
22
23    pub fn sessions_dir(&self) -> Result<PathBuf> {
24        if self.has_local_dir {
25            Ok(self.project_ctx.sessions_dir())
26        } else {
27            let cloud_paths = get_cloud_paths()
28                .context("Failed to resolve cloud paths from profile configuration")?;
29            Ok(cloud_paths.resolve(CloudPath::SessionsDir))
30        }
31    }
32
33    pub fn tenants_path(&self) -> Result<PathBuf> {
34        if self.has_local_dir {
35            Ok(self.project_ctx.local_tenants())
36        } else {
37            let cloud_paths = get_cloud_paths().context("Failed to resolve cloud paths")?;
38            Ok(cloud_paths.resolve(CloudPath::Tenants))
39        }
40    }
41
42    pub fn profiles_dir(&self) -> PathBuf {
43        self.project_ctx.profiles_dir()
44    }
45}