Skip to content

Commit afc1982

Browse files
committed
chore: apply cargo fmt formatting
1 parent 96877a0 commit afc1982

File tree

22 files changed

+1043
-629
lines changed

22 files changed

+1043
-629
lines changed

examples/auto_create_demo.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use clap::Parser;
44
use std::path::PathBuf;
55

66
/// Demonstrates the auto-create functionality of ccswarm
7-
///
7+
///
88
/// This example shows how to use the `ccswarm auto-create` command
99
/// to automatically generate a complete application with multiple agents
1010
/// working together.
@@ -71,8 +71,8 @@ mod tests {
7171
// Parse and execute
7272
let cli = Cli::parse_from(args);
7373
let runner = ccswarm::cli::CliRunner::new(&cli).await.unwrap();
74-
74+
7575
// Should execute without errors
7676
runner.run(&cli.command).await.unwrap();
7777
}
78-
}
78+
}

examples/claude_code_demo.rs

Lines changed: 105 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/// Claude Code Session-Persistent Architecture Demonstration
2-
///
2+
///
33
/// This example demonstrates the Session-Persistent Agent Architecture
44
/// using only Claude Code provider for simplicity:
55
/// - tmux-based session management with pause/resume/detach
@@ -15,9 +15,7 @@ use tracing::info;
1515

1616
// Import ccswarm core features
1717
use ccswarm::auto_accept::{AutoAcceptConfig, OperationType};
18-
use ccswarm::identity::{
19-
default_backend_role, default_devops_role, default_frontend_role,
20-
};
18+
use ccswarm::identity::{default_backend_role, default_devops_role, default_frontend_role};
2119
use ccswarm::monitoring::{MonitoringSystem, OutputType};
2220
use ccswarm::session::{AgentSession, SessionManager};
2321
use ccswarm::workspace::SimpleWorkspaceManager;
@@ -76,13 +74,13 @@ async fn main() -> Result<()> {
7674
// Initialize session manager and monitoring
7775
let session_manager = SessionManager::new()?;
7876
let monitoring_system = MonitoringSystem::new();
79-
77+
8078
// Configure auto-accept with custom safety rules for Claude Code
8179
let auto_accept_config = AutoAcceptConfig {
8280
enabled: true,
8381
max_file_changes: 10,
8482
require_tests_pass: true,
85-
max_execution_time: 600, // 10 minutes
83+
max_execution_time: 600, // 10 minutes
8684
require_clean_git: false, // Allow dirty git for demo
8785
emergency_stop: false,
8886
trusted_operations: vec![
@@ -111,31 +109,27 @@ async fn main() -> Result<()> {
111109
2, // Very low risk
112110
DemoTaskType::Development,
113111
),
114-
115112
// Documentation task - ideal for Claude Code
116113
DemoTask::new(
117114
"cc-docs-1",
118115
"Generate comprehensive API documentation with examples",
119116
1, // Extremely low risk
120117
DemoTaskType::Documentation,
121118
),
122-
123119
// Code refactoring - medium risk
124120
DemoTask::new(
125121
"cc-refactor-1",
126122
"Refactor authentication middleware for better error handling",
127123
4, // Medium risk
128124
DemoTaskType::Development,
129125
),
130-
131126
// Testing task - good for auto-accept
132127
DemoTask::new(
133128
"cc-test-1",
134129
"Write comprehensive unit tests for payment service",
135130
3, // Low-medium risk
136131
DemoTaskType::Testing,
137132
),
138-
139133
// Infrastructure configuration - higher risk
140134
DemoTask::new(
141135
"cc-infra-1",
@@ -146,7 +140,10 @@ async fn main() -> Result<()> {
146140
];
147141

148142
for task in &demo_tasks {
149-
info!("📝 Task: {} (Risk: {}/10)", task.description, task.risk_level);
143+
info!(
144+
"📝 Task: {} (Risk: {}/10)",
145+
task.description, task.risk_level
146+
);
150147
}
151148

152149
info!("\n🤖 Creating Claude Code agent sessions...");
@@ -160,7 +157,7 @@ async fn main() -> Result<()> {
160157
false, // foreground mode
161158
),
162159
(
163-
"Claude Code Backend",
160+
"Claude Code Backend",
164161
default_backend_role(),
165162
true, // auto_accept for API tasks
166163
false, // foreground mode
@@ -183,7 +180,12 @@ async fn main() -> Result<()> {
183180
format!("{}-session", name.to_lowercase().replace(" ", "-")),
184181
role.clone(),
185182
project_dir
186-
.join(&name.to_lowercase().replace(" ", "_").replace("claude_code_", ""))
183+
.join(
184+
&name
185+
.to_lowercase()
186+
.replace(" ", "_")
187+
.replace("claude_code_", ""),
188+
)
187189
.to_string_lossy()
188190
.to_string(),
189191
Some(format!("{} session using Claude Code provider", name)),
@@ -202,24 +204,29 @@ async fn main() -> Result<()> {
202204
}
203205

204206
// Register with monitoring
205-
let _ = monitoring_system.register_agent(session.agent_id.clone()).map_err(|e| anyhow::anyhow!(e))?;
207+
let _ = monitoring_system
208+
.register_agent(session.agent_id.clone())
209+
.map_err(|e| anyhow::anyhow!(e))?;
206210

207211
sessions.push((name.to_string(), session));
208212
}
209213

210214
// Demonstrate Claude Code session persistence
211215
info!("\n🔄 Demonstrating Claude Code Session Persistence...");
212-
216+
213217
// Simulate session pause and resume with Claude Code
214218
if let Some((name, session)) = sessions.get(0) {
215219
info!("Pausing {} Claude Code session...", name);
216220
session_manager.pause_session(&session.id)?;
217-
221+
218222
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
219-
220-
info!("Resuming {} Claude Code session (context preserved)...", name);
223+
224+
info!(
225+
"Resuming {} Claude Code session (context preserved)...",
226+
name
227+
);
221228
session_manager.resume_session(&session.id)?;
222-
229+
223230
info!("✅ Claude Code session context preserved - no token regeneration!");
224231
}
225232

@@ -236,28 +243,34 @@ async fn main() -> Result<()> {
236243

237244
// Select Claude Code agent based on task type
238245
let agent_index = select_claude_code_agent(&task, &sessions);
239-
246+
240247
if let Some(index) = agent_index {
241248
let (name, session) = &sessions[index];
242-
249+
243250
// Get current session state for Claude Code
244-
let current_session = session_manager.get_session(&session.id)
251+
let current_session = session_manager
252+
.get_session(&session.id)
245253
.unwrap_or_else(|| session.clone());
246-
254+
247255
// Claude Code specific risk assessment
248-
let should_auto_accept = task.risk_level <= 4
249-
&& current_session.auto_accept
250-
&& matches!(task.task_type,
251-
DemoTaskType::Development |
252-
DemoTaskType::Documentation |
253-
DemoTaskType::Testing
256+
let should_auto_accept = task.risk_level <= 4
257+
&& current_session.auto_accept
258+
&& matches!(
259+
task.task_type,
260+
DemoTaskType::Development | DemoTaskType::Documentation | DemoTaskType::Testing
254261
);
255-
262+
256263
if should_auto_accept {
257-
info!(" ✅ Claude Code auto-accepting task (risk: {})", task.risk_level);
264+
info!(
265+
" ✅ Claude Code auto-accepting task (risk: {})",
266+
task.risk_level
267+
);
258268
auto_accepted += 1;
259269
} else {
260-
info!(" 🔍 Claude Code requires manual review (risk: {})", task.risk_level);
270+
info!(
271+
" 🔍 Claude Code requires manual review (risk: {})",
272+
task.risk_level
273+
);
261274
manual_review += 1;
262275
}
263276

@@ -286,7 +299,7 @@ async fn main() -> Result<()> {
286299
Some(task.id.clone()),
287300
session.id.clone(),
288301
);
289-
302+
290303
tokio::time::sleep(std::time::Duration::from_millis(400)).await;
291304
}
292305

@@ -302,7 +315,7 @@ async fn main() -> Result<()> {
302315

303316
completed += 1;
304317
}
305-
318+
306319
tokio::time::sleep(std::time::Duration::from_millis(200)).await;
307320
}
308321

@@ -311,19 +324,26 @@ async fn main() -> Result<()> {
311324
info!("Claude Code Provider: ✅ Active");
312325
info!("Total Tasks: {}", demo_tasks_len);
313326
info!("Completed: {}", completed);
314-
info!("Auto-Accepted: {} ({}% efficiency gain)",
315-
auto_accepted,
316-
if completed > 0 { (auto_accepted as f64 / completed as f64 * 100.0) as u32 } else { 0 }
327+
info!(
328+
"Auto-Accepted: {} ({}% efficiency gain)",
329+
auto_accepted,
330+
if completed > 0 {
331+
(auto_accepted as f64 / completed as f64 * 100.0) as u32
332+
} else {
333+
0
334+
}
317335
);
318336
info!("Manual Review: {}", manual_review);
319337

320338
// Demonstrate Claude Code token savings
321339
let traditional_tokens = demo_tasks_len * 45_000; // Claude Code typical context
322340
let persistent_tokens = 45_000 + (demo_tasks_len * 800); // Claude Code efficiency
323-
let savings = if traditional_tokens > 0 {
324-
((traditional_tokens - persistent_tokens) as f64 / traditional_tokens as f64 * 100.0) as u32
325-
} else { 0 };
326-
341+
let savings = if traditional_tokens > 0 {
342+
((traditional_tokens - persistent_tokens) as f64 / traditional_tokens as f64 * 100.0) as u32
343+
} else {
344+
0
345+
};
346+
327347
info!("\n💰 Claude Code Token Usage:");
328348
info!("Traditional: ~{} tokens", traditional_tokens);
329349
info!("Session-Persistent: ~{} tokens", persistent_tokens);
@@ -332,13 +352,28 @@ async fn main() -> Result<()> {
332352
// Show Claude Code session statistics
333353
info!("\n🔄 Claude Code Session Statistics:");
334354
for (name, session) in &sessions {
335-
let current_session = session_manager.get_session(&session.id)
355+
let current_session = session_manager
356+
.get_session(&session.id)
336357
.unwrap_or_else(|| session.clone());
337358
info!("{}:", name);
338359
info!(" - Provider: Claude Code");
339360
info!(" - Status: {:?}", current_session.status);
340-
info!(" - Auto-Accept: {}", if current_session.auto_accept { "✅ Enabled" } else { "❌ Disabled" });
341-
info!(" - Background: {}", if current_session.background_mode { "Yes" } else { "No" });
361+
info!(
362+
" - Auto-Accept: {}",
363+
if current_session.auto_accept {
364+
"✅ Enabled"
365+
} else {
366+
"❌ Disabled"
367+
}
368+
);
369+
info!(
370+
" - Background: {}",
371+
if current_session.background_mode {
372+
"Yes"
373+
} else {
374+
"No"
375+
}
376+
);
342377
info!(" - Tasks: {}", current_session.tasks_processed);
343378
}
344379

@@ -347,10 +382,10 @@ async fn main() -> Result<()> {
347382
if let Some((name, session)) = sessions.get(0) {
348383
info!("Detaching {} Claude Code session...", name);
349384
session_manager.detach_session(&session.id)?;
350-
385+
351386
info!("Claude Code session running detached - no context loss");
352387
tokio::time::sleep(std::time::Duration::from_secs(1)).await;
353-
388+
354389
info!("Reattaching to Claude Code session...");
355390
session_manager.attach_session(&session.id)?;
356391
info!("✅ Claude Code session reattached successfully!");
@@ -374,42 +409,52 @@ async fn main() -> Result<()> {
374409
}
375410

376411
info!("\n🎉 Claude Code Session-Persistent Demo Complete!");
377-
info!("✨ Achieved {}% token reduction with Claude Code only!", savings);
412+
info!(
413+
"✨ Achieved {}% token reduction with Claude Code only!",
414+
savings
415+
);
378416
info!("🤖 Claude Code provider successfully demonstrated session persistence");
379417

380418
Ok(())
381419
}
382420

383421
/// Select Claude Code agent based on task type and availability
384-
fn select_claude_code_agent(
385-
task: &DemoTask,
386-
sessions: &[(String, AgentSession)],
387-
) -> Option<usize> {
422+
fn select_claude_code_agent(task: &DemoTask, sessions: &[(String, AgentSession)]) -> Option<usize> {
388423
let description = task.description.to_lowercase();
389-
424+
390425
for (index, (name, session)) in sessions.iter().enumerate() {
391426
let name_lower = name.to_lowercase();
392-
427+
393428
let matches = match task.task_type {
394429
DemoTaskType::Development => {
395-
if description.contains("react") || description.contains("component") || description.contains("typescript") {
430+
if description.contains("react")
431+
|| description.contains("component")
432+
|| description.contains("typescript")
433+
{
396434
name_lower.contains("frontend")
397-
} else if description.contains("api") || description.contains("middleware") || description.contains("auth") {
435+
} else if description.contains("api")
436+
|| description.contains("middleware")
437+
|| description.contains("auth")
438+
{
398439
name_lower.contains("backend")
399440
} else {
400441
true // Any Claude Code agent can handle general development
401442
}
402443
}
403444
DemoTaskType::Infrastructure => name_lower.contains("devops"),
404445
DemoTaskType::Documentation => true, // Claude Code excels at documentation
405-
DemoTaskType::Testing => name_lower.contains("backend") || name_lower.contains("frontend"), // Both can handle testing
446+
DemoTaskType::Testing => {
447+
name_lower.contains("backend") || name_lower.contains("frontend")
448+
} // Both can handle testing
406449
};
407-
450+
408451
if matches && session.is_runnable() {
409452
return Some(index);
410453
}
411454
}
412-
455+
413456
// Fallback to first available Claude Code agent
414-
sessions.iter().position(|(_, session)| session.is_runnable())
415-
}
457+
sessions
458+
.iter()
459+
.position(|(_, session)| session.is_runnable())
460+
}

0 commit comments

Comments
 (0)