use std::path::PathBuf;
use tokio::sync::oneshot;
use crate::approval::ApprovalMode;
use crate::chat::{Message, SystemPrompt};
use crate::compaction::CompactionConfig;
use crate::engine::context_snapshot::ThreadContextSnapshot;
use crate::turn::TurnLoopMode;
#[derive(Debug)]
pub enum Op {
SendMessage {
content: String,
mode: TurnLoopMode,
model: String,
goal_objective: Option<String>,
reasoning_effort: Option<String>,
reasoning_effort_auto: bool,
auto_model: bool,
allow_shell: bool,
trust_mode: bool,
auto_approve: bool,
approval_mode: ApprovalMode,
temperature: Option<f32>,
top_p: Option<f32>,
max_output_tokens: Option<u32>,
},
#[allow(dead_code)]
CancelRequest,
#[allow(dead_code)]
ApproveToolCall { id: String },
#[allow(dead_code)]
DenyToolCall { id: String },
#[allow(dead_code)]
SpawnSubAgent { prompt: String },
ListSubAgents,
#[allow(dead_code)]
ChangeMode { mode: TurnLoopMode },
#[allow(dead_code)]
SetModel { model: String },
SetCompaction { config: CompactionConfig },
SyncSession {
messages: Vec<Message>,
system_prompt: Option<SystemPrompt>,
model: String,
workspace: PathBuf,
},
CompactContext,
Rlm {
content: String,
model: String,
child_model: String,
max_depth: u32,
},
EditLastTurn { new_message: String },
TruncateBeforeLastUserMessage { reply: oneshot::Sender<bool> },
QueryContext {
reply: oneshot::Sender<ThreadContextSnapshot>,
},
QueryHarnessTaskGraph {
reply: oneshot::Sender<serde_json::Value>,
},
QueryHarnessCycles {
reply: oneshot::Sender<serde_json::Value>,
},
Shutdown,
}