先决条件:入口调用
moly_kit::widgets::live_design(cx);以加载主题与 Live DSL。Chat需启用async-rt特性,实时语音需realtime特性(非 wasm)。
widgets/chat.rs)<Chat>;运行时 set_chat_controller(cx, Some(Arc<Mutex<ChatController>>)) 绑定 controller。set_chat_controller(...),chat_controller(),prompt_input_ref(),messages_ref(),is_streaming();ChatRef::read()/write()。Upgrade::Realtime)。widgets/messages.rs)messages.write().chat_controller = Some(controller.clone());is_at_bottom(),instant_scroll_to_bottom(cx),animated_scroll_to_bottom(cx);set_message_editor_visibility(idx, visible);current_editor_text()/index();register_custom_content<T: CustomContent>;MessagesRef::read()/write()。MessagesAction::{Copy,Delete,EditSave,EditRegenerate,ToolApprove,ToolDeny}。widgets/prompt_input.rs)<PromptInput>;运行时 set_chat_controller(...) 以驱动模型选择与能力;根据 bot 能力自动显示附件/音频按钮。submitted(actions),call_pressed(actions);has_send_task()/has_stop_task(),set_send()/set_stop();enable()/disable();reset(cx);set_bot_capabilities(cx, Option<BotCapabilities>);PromptInputRef::read()/write()。