use selfware::config::{AgentConfig, Config, SafetyConfig};
use std::env;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = build_custom_config();
print_sample_toml();
println!("Configuration built successfully!");
println!("Endpoint: {}", config.endpoint);
println!("Model: {}", config.model);
println!("Max tokens: {}", config.max_tokens);
println!("Temperature: {}", config.temperature);
if let Ok(api_key) = env::var("SELFWARE_API_KEY") {
println!(
"API Key: {}***",
&api_key[..std::cmp::min(4, api_key.len())]
);
} else {
println!("No API key set (use SELFWARE_API_KEY environment variable)");
}
Ok(())
}
fn build_custom_config() -> Config {
Config {
endpoint: "http://localhost:8000/v1".to_string(),
model: "Qwen/Qwen3-Coder-Next-FP8".to_string(),
max_tokens: 32768,
temperature: 0.7,
api_key: None,
safety: SafetyConfig {
allowed_paths: vec![
"./**".to_string(), "/tmp/selfware/**".to_string(), ],
denied_paths: vec![
"**/.env".to_string(),
"**/.env.*".to_string(),
"**/secrets/**".to_string(),
"**/*.pem".to_string(),
"**/*.key".to_string(),
],
protected_branches: vec![
"main".to_string(),
"master".to_string(),
"production".to_string(),
],
require_confirmation: vec![
"git_push".to_string(),
"file_delete".to_string(),
"shell_exec".to_string(),
"container_exec".to_string(),
],
strict_permissions: false,
permissions: vec![],
},
agent: AgentConfig {
max_iterations: 100,
step_timeout_secs: 300, token_budget: 500000,
token_safety_margin: 50000,
native_function_calling: false,
streaming: true,
min_completion_steps: 3,
require_verification_before_completion: true,
context_content_ratio: 0.7,
context_compression_ratio: 0.15,
context_thinking_ratio: 0.15,
compression_detail: "signatures".to_string(),
require_visual_verification: false,
disable_turn_artifacts: false,
read_loop_policy: selfware::config::ReadLoopPolicy::ForceMutation,
prompt_profile: "default".to_string(),
max_budget_tokens: None,
max_wall_secs: None,
max_cost_usd: None,
post_edit_test_command: None,
},
resources: Default::default(),
..Default::default()
}
}
fn print_sample_toml() {
let toml = r#"[api]
endpoint = "http://localhost:8000/v1"
model = "Qwen/Qwen3-Coder-Next-FP8"
max_tokens = 32768
temperature = 0.7
[safety]
allowed_paths = ["./**", "/tmp/selfware/**"]
denied_paths = ["**/.env", "**/.env.*", "**/secrets/**", "**/*.pem", "**/*.key"]
protected_branches = ["main", "master", "production"]
require_confirmation = ["git_push", "file_delete", "shell_exec", "container_exec"]
strict_permissions = false
[agent]
max_iterations = 100
step_timeout_secs = 300
token_budget = 500000
token_safety_margin = 50000
native_function_calling = false
streaming = true
min_completion_steps = 3
require_verification_before_completion = true
context_content_ratio = 0.7
context_compression_ratio = 0.15
context_thinking_ratio = 0.15
compression_detail = "signatures"
"#;
println!("\n=== Sample TOML Configuration ===\n");
println!("{}", toml);
}