intent_engine/cli_handlers/
log_command.rs1use crate::backend::{EventBackend, WorkspaceBackend};
2use crate::cli::LogEventType;
3use crate::error::{IntentError, Result};
4
5pub async fn handle_log(
7 event_mgr: &impl EventBackend,
8 ws_mgr: &impl WorkspaceBackend,
9 event_type: LogEventType,
10 message: &str,
11 task: Option<i64>,
12 format: &str,
13) -> Result<()> {
14 let target_task_id = if let Some(tid) = task {
16 tid
17 } else {
18 let current_response = ws_mgr.get_current_task(None).await?;
19 let current_task = current_response.task.ok_or_else(|| {
20 IntentError::ActionNotAllowed(
21 "No current task set. Use --task <ID> or start a task first.".to_string(),
22 )
23 })?;
24 current_task.id
25 };
26
27 let event_type_str = event_type.as_str();
28
29 let event = event_mgr
30 .add_event(
31 target_task_id,
32 event_type_str.to_string(),
33 message.to_string(),
34 )
35 .await?;
36
37 if format == "json" {
38 println!("{}", serde_json::to_string_pretty(&event)?);
39 } else {
40 println!(" Event recorded");
41 println!(" ID: {}", event.id);
42 println!(" Type: {}", event_type_str);
43 println!(" Task: #{}", target_task_id);
44 println!(
45 " Time: {}",
46 event.timestamp.format("%Y-%m-%d %H:%M:%S UTC")
47 );
48 println!(" Message: {}", message);
49 }
50
51 Ok(())
52}