use std::sync::Arc;
use tokio::sync::{Mutex as AsyncMutex, mpsc};
use crate::hooks::HookExecutor;
use crate::lsp::LspManager;
use crate::mcp::McpPool;
use crate::tools::approval_cache::ApprovalCache;
use crate::tools::large_output_router::WorkshopVariables;
use crate::tools::shell::SharedShellManager;
use crate::tools::subagent::{SharedSubAgentManager, SubAgentCompletion};
use zagens_runtime_adapters::persist::KernelEventWriter;
use zagens_core::capacity::CapacitySnapshot;
use zagens_core::turn::TurnLoopMode;
use crate::long_horizon::LongHorizonSessionState;
use super::kernel_outer_boundary::V3OuterBoundaryTurnGrants;
use super::kernel_turn_event_buffer::KernelTurnEventBuffer;
use super::kernel_turn_replay_verify::KernelTurnReplayVerify;
use super::kernel_v3_step_verify::KernelV3StepVerify;
use super::types::EngineConfigExt;
pub struct EngineRuntimeExt {
pub config_ext: EngineConfigExt,
pub long_horizon_state: LongHorizonSessionState,
pub turn_app_mode: crate::agent_surface::AppMode,
pub turn_lht_mode: Option<zagens_core::long_horizon::LhtMode>,
pub lsp_manager: Arc<LspManager>,
pub shell_manager: SharedShellManager,
pub workshop_vars: Option<Arc<AsyncMutex<WorkshopVariables>>>,
pub subagent_manager: SharedSubAgentManager,
pub mcp_pool: Option<Arc<AsyncMutex<McpPool>>>,
pub approval_cache: ApprovalCache,
pub tx_subagent_completion: mpsc::UnboundedSender<SubAgentCompletion>,
pub rx_subagent_completion: Arc<AsyncMutex<mpsc::UnboundedReceiver<SubAgentCompletion>>>,
pub sandbox_init_warning: Option<String>,
pub workspace_preflight_done: bool,
pub hook_executor: Arc<HookExecutor>,
pub session_hooks_started: bool,
pub tools_policy: crate::config::ToolsPolicyMode,
pub tools_scheduler: crate::config::ToolsSchedulerMode,
pub resource_lock_registry: Arc<crate::tools::resource_locks::ResourceLockRegistry>,
pub kernel_event_writer: Option<std::sync::Arc<KernelEventWriter>>,
pub kernel_turn_events: KernelTurnEventBuffer,
pub kernel_turn_replay: KernelTurnReplayVerify,
pub kernel_v3_step_verify: KernelV3StepVerify,
pub kernel_machine_mode: crate::config::KernelMachineMode,
pub kernel_active_turn_id: Option<String>,
pub kernel_active_step: u32,
pub kernel_run_compaction_scope: Option<super::compaction_ops::RunCompactionScope>,
pub kernel_capacity_snapshot: Option<CapacitySnapshot>,
pub kernel_capacity_turn_mode: Option<TurnLoopMode>,
pub kernel_capacity_handoff_reason: Option<String>,
pub kernel_capacity_intervention_ok: Option<bool>,
pub kernel_pending_inject_steer_kind: Option<super::cycle_briefing_ops::InjectSteerEffectKind>,
pub kernel_active_cycle_boundary:
Option<zagens_core::engine::turn_loop::continuation_boundary_policy::OuterBoundaryKind>,
pub kernel_cycle_advance_ok: Option<bool>,
pub kernel_effect_replay_anchor_only: bool,
pub kernel_log_transcript_repair: bool,
pub kernel_log_transcript_repair_persist: bool,
pub session_manager: Option<std::sync::Arc<crate::SessionManager>>,
pub kernel_v3_approval_outcomes:
std::collections::HashMap<String, super::approval_ops::V3ApprovalStepOutcome>,
pub kernel_memory_query_sources: std::collections::BTreeSet<String>,
pub kernel_v3_outer_boundary_grants: V3OuterBoundaryTurnGrants,
}