use agent_contracts::trace::TraceSpanHandle;
use agent_types::tool::{
    ErrorHookResult, FinalToolCall, PostHookResult, PreHookResult, RawToolOutcome,
    ToolExecutionError, ToolLifecycleRecord,
};

pub(super) struct ToolExecutionState {
    pub(super) final_call: FinalToolCall,
    pub(super) trace_span: Option<TraceSpanHandle>,
    pub(super) lifecycle_record: Option<ToolLifecycleRecord>,
    pub(super) pre_hook_results: Vec<PreHookResult>,
    pub(super) post_hook_results: Vec<PostHookResult>,
    pub(super) error_hook_results: Vec<ErrorHookResult>,
    pub(super) raw_outcome: Option<RawToolOutcome>,
    pub(super) execution_error: Option<ToolExecutionError>,
}

pub(super) enum ExecutorPhaseResult {
    Completed(RawToolOutcome),
    Suspended(String),
    Failed(ToolExecutionError),
}