zagens_core/engine/
runtime.rs1use std::sync::{Arc, Mutex as StdMutex};
8
9use tokio::sync::{RwLock, mpsc};
10use tokio_util::sync::CancellationToken;
11
12use crate::capacity::CapacityController;
13use crate::chat::LlmClient;
14use crate::coherence::CoherenceState;
15use crate::engine::approval::{ApprovalDecision, UserInputDecision};
16use crate::engine::config::EngineConfig;
17use crate::engine::hosts::{
18 LspHost, SandboxHost, SeamHost, ShellHost, TopicMemoryHost, WorkshopHost,
19};
20use crate::engine::op::Op;
21use crate::engine::scratchpad_state::ScratchpadStepState;
22use crate::events::Event;
23use crate::lsp::DiagnosticBlock;
24use crate::session::Session;
25
26pub struct Engine<P, R> {
28 pub config: EngineConfig,
29 pub ext: Option<Box<dyn crate::engine::platform_ext::EnginePlatformExt<P, R>>>,
33 pub deepseek_client: Option<Arc<dyn LlmClient>>,
34 pub deepseek_client_error: Option<String>,
35 pub api_key_env_only_recovery: Option<String>,
36 pub session: Session,
37 pub shell: Box<dyn ShellHost>,
38 pub rx_op: mpsc::Receiver<Op>,
39 pub tx_approval: mpsc::Sender<ApprovalDecision<P>>,
40 pub rx_approval: mpsc::Receiver<ApprovalDecision<P>>,
41 pub rx_user_input: mpsc::Receiver<UserInputDecision<R>>,
42 pub rx_steer: mpsc::Receiver<String>,
43 pub tx_event: mpsc::Sender<Event>,
44 pub cancel_token: CancellationToken,
45 pub shared_cancel_token: Arc<StdMutex<CancellationToken>>,
46 pub tool_exec_lock: Arc<RwLock<()>>,
47 pub capacity_controller: CapacityController,
48 pub seam: Option<Box<dyn SeamHost>>,
49 pub coherence_state: CoherenceState,
50 pub turn_counter: u64,
51 pub lsp: Arc<dyn LspHost>,
52 pub workshop: Option<Box<dyn WorkshopHost>>,
53 pub sandbox: Box<dyn SandboxHost>,
54 pub pending_lsp_blocks: Vec<DiagnosticBlock>,
55 pub scratchpad_step: ScratchpadStepState,
56 pub scratchpad_run_id: Option<String>,
57 pub scratchpad_summary_injected_this_turn: bool,
58 pub scratchpad_audit_continue_injected_this_turn: bool,
60 pub long_horizon_continue_injected_this_turn: bool,
62 pub long_horizon_auto_continue_rounds: u32,
66 pub topic_memory: Box<dyn TopicMemoryHost>,
67 pub overflow_source_budget_cap: Option<u32>,
75}