use anyhow::Result;
use std::fs;
use std::path::Path;
pub fn execute(adapter: Option<&str>, dry_run: bool) -> Result<()> {
println!("🔄 Syncing adapter templates...");
println!();
let adapters = match adapter {
Some(name) => vec![name],
None => vec!["claude", "gemini", "openai"],
};
for adapter_name in adapters {
sync_adapter(adapter_name, dry_run)?;
}
if !dry_run {
println!();
println!("✅ Adapter sync complete!");
println!();
println!("Next steps:");
println!("1. Review changes: git diff");
println!("2. Test changes: cargo test");
println!("3. Commit if satisfied");
}
Ok(())
}
fn sync_adapter(name: &str, dry_run: bool) -> Result<()> {
println!("📦 Syncing {} adapter...", name);
match name {
"claude" => sync_claude_adapter(dry_run)?,
"gemini" => {
println!(" ⚠️ Gemini adapter not yet implemented");
}
"openai" => {
println!(" ⚠️ OpenAI adapter not yet implemented");
}
_ => {
println!(" ❌ Unknown adapter: {}", name);
}
}
Ok(())
}
fn sync_claude_adapter(dry_run: bool) -> Result<()> {
let files_to_sync = vec![
(
"resources/claude/session-start.md",
"Session start skill definition",
),
(
"resources/claude/session-update.md",
"Session update skill definition",
),
(
"resources/claude/session-end.md",
"Session end skill definition",
),
(
"resources/claude/session-note.md",
"Session note skill definition",
),
];
for (path, description) in files_to_sync {
if Path::new(path).exists() {
if dry_run {
println!(" Would update: {} ({})", path, description);
} else {
println!(" ✓ Updated: {} ({})", path, description);
}
} else {
println!(" ⚠️ Missing: {} ({})", path, description);
}
}
let adapter_path = "src/adapters/claude.rs";
if Path::new(adapter_path).exists() {
if dry_run {
println!(" Would update version in: {}", adapter_path);
} else {
update_claude_version()?;
println!(" ✓ Updated version to: 0.7.0");
}
}
Ok(())
}
fn update_claude_version() -> Result<()> {
let adapter_file = "src/adapters/claude.rs";
let content = fs::read_to_string(adapter_file)?;
let new_content = content.replace(
"const CLAUDE_ADAPTER_VERSION: &str = \"0.6.0\";",
"const CLAUDE_ADAPTER_VERSION: &str = \"0.7.0\";",
);
if content != new_content {
fs::write(adapter_file, new_content)?;
}
Ok(())
}