use anyhow::Result;
use crate::context::AppContext;
use crate::gateway::real::{RealFilesystem, RealGitClient, SystemClock};
use crate::paths::ConfigPaths;
use crate::platform::Platform;
pub struct ProductionContext {
fs: RealFilesystem,
git: RealGitClient,
clock: SystemClock,
paths: ConfigPaths,
}
impl ProductionContext {
pub fn claude() -> Result<Self> {
Self::from_env(Platform::Claude)
}
pub fn from_env(default_platform: Platform) -> Result<Self> {
let paths = ConfigPaths::from_env(default_platform)?;
Ok(Self {
fs: RealFilesystem,
git: RealGitClient,
clock: SystemClock,
paths,
})
}
pub fn ctx(&self) -> AppContext<'_> {
AppContext {
fs: &self.fs,
git: &self.git,
clock: &self.clock,
paths: &self.paths,
llm: None,
}
}
}