pub struct ChatbotFrontend {
pub chat_id: String,
pub platform_sender: Arc<dyn PlatformSender>,
pub confirmer: Arc<Confirmer>,
pub buffer: Mutex<String>,
pub last_msg_id: Mutex<Option<String>>,
pub progress_hint_sent: Mutex<bool>,
pub auto_approve: bool,
}Expand description
Per-session Frontend trait implementation for Bot platforms.
Each chat (group or private) gets its own ChatbotFrontend instance.
TextDelta events are buffered and flushed once at TurnComplete with
full Markdown sanitization to ensure clean output on platforms like QQ.
Fields§
§chat_id: StringThe chat this frontend belongs to (group:{id} or private:{id}).
platform_sender: Arc<dyn PlatformSender>Platform message sender (shared across all frontends).
confirmer: Arc<Confirmer>Tool confirmation coordinator (shared).
buffer: Mutex<String>Buffer to accumulate text until TurnComplete.
last_msg_id: Mutex<Option<String>>ID of the last message sent (for edit-based updates, e.g., replacing a progress hint with the actual response).
progress_hint_sent: Mutex<bool>Whether a progress hint has already been sent this turn (rate limit).
auto_approve: boolAuto-approve all tool calls.
Implementations§
Trait Implementations§
Source§impl Frontend for ChatbotFrontend
impl Frontend for ChatbotFrontend
Source§fn on_event<'life0, 'async_trait>(
&'life0 self,
event: AgentEvent,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn on_event<'life0, 'async_trait>(
&'life0 self,
event: AgentEvent,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Agent pushes events to the frontend (text deltas, tool calls, errors, etc.).
Source§fn request_tool_confirmation<'life0, 'life1, 'async_trait>(
&'life0 self,
info: &'life1 ToolCallInfo,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn request_tool_confirmation<'life0, 'life1, 'async_trait>(
&'life0 self,
info: &'life1 ToolCallInfo,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Request user confirmation for a tool call. Blocks until user responds.
Returns
true if the user approved, false if rejected.Source§impl PlatformExt for ChatbotFrontend
impl PlatformExt for ChatbotFrontend
Source§fn upload_file<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
file_path: &'life1 str,
media_type: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<UploadResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn upload_file<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
file_path: &'life1 str,
media_type: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<UploadResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
Upload a local file to the platform. Returns the platform identifier.
Source§fn send_media_message<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
file_url: &'life1 str,
file_name: &'life2 str,
media_type: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<SendResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn send_media_message<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
file_url: &'life1 str,
file_name: &'life2 str,
media_type: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<SendResult>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
Send an already-uploaded media file to the chat.
Auto Trait Implementations§
impl !Freeze for ChatbotFrontend
impl !RefUnwindSafe for ChatbotFrontend
impl !UnwindSafe for ChatbotFrontend
impl Send for ChatbotFrontend
impl Sync for ChatbotFrontend
impl Unpin for ChatbotFrontend
impl UnsafeUnpin for ChatbotFrontend
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more