use crate::contracts::{Model, ReasoningEffort, Runner, RunnerCliOptionsPatch};
use crate::runner;
use std::path::PathBuf;
#[derive(Clone, Copy, Debug)]
pub enum BatchMode {
Auto,
Never,
Aggressive,
}
impl From<crate::cli::task::BatchMode> for BatchMode {
fn from(mode: crate::cli::task::BatchMode) -> Self {
match mode {
crate::cli::task::BatchMode::Auto => BatchMode::Auto,
crate::cli::task::BatchMode::Never => BatchMode::Never,
crate::cli::task::BatchMode::Aggressive => BatchMode::Aggressive,
}
}
}
pub struct TaskBuildRefactorOptions {
pub threshold: usize,
pub path: Option<PathBuf>,
pub dry_run: bool,
pub batch: BatchMode,
pub extra_tags: String,
pub runner_override: Option<Runner>,
pub model_override: Option<Model>,
pub reasoning_effort_override: Option<ReasoningEffort>,
pub runner_cli_overrides: RunnerCliOptionsPatch,
pub force: bool,
pub repoprompt_tool_injection: bool,
}
pub enum TaskBuildOutputTarget {
Terminal,
Quiet,
Handler(runner::OutputHandler),
}
impl TaskBuildOutputTarget {
pub(crate) fn output_handler(&self) -> Option<runner::OutputHandler> {
match self {
TaskBuildOutputTarget::Terminal | TaskBuildOutputTarget::Quiet => None,
TaskBuildOutputTarget::Handler(handler) => Some(handler.clone()),
}
}
pub(crate) fn output_stream(&self) -> runner::OutputStream {
match self {
TaskBuildOutputTarget::Terminal => runner::OutputStream::Terminal,
TaskBuildOutputTarget::Quiet | TaskBuildOutputTarget::Handler(_) => {
runner::OutputStream::HandlerOnly
}
}
}
}
pub struct TaskBuildOptions {
pub request: String,
pub hint_tags: String,
pub hint_scope: String,
pub runner_override: Option<Runner>,
pub model_override: Option<Model>,
pub reasoning_effort_override: Option<ReasoningEffort>,
pub runner_cli_overrides: RunnerCliOptionsPatch,
pub force: bool,
pub repoprompt_tool_injection: bool,
pub output: TaskBuildOutputTarget,
pub template_hint: Option<String>,
pub template_target: Option<String>,
pub strict_templates: bool,
pub estimated_minutes: Option<u32>,
}
pub struct TaskUpdateSettings {
pub fields: String,
pub runner_override: Option<Runner>,
pub model_override: Option<Model>,
pub reasoning_effort_override: Option<ReasoningEffort>,
pub runner_cli_overrides: RunnerCliOptionsPatch,
pub force: bool,
pub repoprompt_tool_injection: bool,
pub dry_run: bool,
}