use super::FsStorage;
use anyhow::Result;
use std::fs;
use wcore::AgentConfig;
const CRAB_PROMPT: &str = crate::hooks::memory::DEFAULT_SOUL;
pub fn default_crab(model: impl Into<String>) -> AgentConfig {
let mut cfg = AgentConfig::new(wcore::paths::DEFAULT_AGENT);
cfg.system_prompt = CRAB_PROMPT.to_owned();
cfg.model = model.into();
cfg
}
pub(super) fn scaffold(storage: &FsStorage, default_model: &str) -> Result<()> {
fs::create_dir_all(&storage.config_dir)?;
fs::create_dir_all(storage.config_dir.join(wcore::paths::LOCAL_DIR))?;
fs::create_dir_all(storage.config_dir.join(wcore::paths::SKILLS_DIR))?;
fs::create_dir_all(storage.config_dir.join(wcore::paths::AGENTS_DIR))?;
fs::create_dir_all(&storage.sessions_root)?;
let file = storage.read_settings()?;
if file.agents.is_empty() {
let crab = default_crab(default_model);
let prompt = crab.system_prompt.clone();
super::agents::upsert_agent(storage, &crab, &prompt)?;
}
Ok(())
}