use std::sync::Arc; use async_trait::async_trait; use tokio_util::sync::CancellationToken; use crate::llmx::TurnContext; use crate::compact; use crate::state::TaskKind; use llmx_protocol::user_input::UserInput; use super::SessionTask; use super::SessionTaskContext; #[derive(Clone, Copy, Default)] pub(crate) struct CompactTask; #[async_trait] impl SessionTask for CompactTask { fn kind(&self) -> TaskKind { TaskKind::Compact } async fn run( self: Arc, session: Arc, ctx: Arc, input: Vec, _cancellation_token: CancellationToken, ) -> Option { compact::run_compact_task(session.clone_session(), ctx, input).await } }