walrus_daemon/config/
default.rs1use crate::config::{AGENTS_DIR, CRON_DIR, DATA_DIR, DaemonConfig, SKILLS_DIR};
4use anyhow::{Context, Result};
5use model::ProviderConfig;
6use std::path::Path;
7
8impl Default for DaemonConfig {
9 fn default() -> Self {
10 Self {
11 models: vec![ProviderConfig {
12 model: "deepseek-chat".into(),
13 api_key: None,
14 base_url: None,
15 loader: None,
16 quantization: None,
17 chat_template: None,
18 }],
19 channels: Vec::new(),
20 mcp_servers: Vec::new(),
21 }
22 }
23}
24
25pub const DEFAULT_AGENT_MD: &str = r#"---
27name: assistant
28description: A helpful assistant
29tools:
30 - remember
31---
32
33You are a helpful assistant. Be concise.
34"#;
35
36pub fn scaffold_config_dir(config_dir: &Path) -> Result<()> {
41 std::fs::create_dir_all(config_dir.join(AGENTS_DIR))
42 .context("failed to create agents directory")?;
43 std::fs::create_dir_all(config_dir.join(SKILLS_DIR))
44 .context("failed to create skills directory")?;
45 std::fs::create_dir_all(config_dir.join(CRON_DIR))
46 .context("failed to create cron directory")?;
47 std::fs::create_dir_all(config_dir.join(DATA_DIR))
48 .context("failed to create data directory")?;
49
50 let gateway_toml = config_dir.join("walrus.toml");
51 let contents = toml::to_string_pretty(&DaemonConfig::default())
52 .context("failed to serialize default config")?;
53 std::fs::write(&gateway_toml, contents)
54 .with_context(|| format!("failed to write {}", gateway_toml.display()))?;
55
56 let agent_path = config_dir.join(AGENTS_DIR).join("assistant.md");
57 std::fs::write(&agent_path, DEFAULT_AGENT_MD)
58 .with_context(|| format!("failed to write {}", agent_path.display()))?;
59
60 Ok(())
61}