安全: - LlmConfig 自定义 Debug impl,api_key 显示为 "***REDACTED***" - tsconfig.json 移除 ErrorBoundary.tsx 排除项(安全关键组件) - billing/handlers.rs Response builder unwrap → map_err 错误传播 - classroom_commands/mod.rs db_path.parent().unwrap() → ok_or_else 静默吞错: - approvals.rs 3处 warn→error(审批状态丢失是严重事件) - events.rs publish() 添加 Event dropped debug 日志 - mcp_transport.rs eprintln→tracing::warn (僵尸进程风险) - zclaw-growth sqlite.rs 4处迁移:区分 duplicate column name 与真实错误 MCP Transport: - 合并 stdin+stdout 为单一 Mutex<TransportHandles> - send_request write-then-read 原子化,防止并发响应错配 数据库: - 新迁移 20260418000001: idx_rle_created_at + idx_billing_sub_plan + idx_ki_created_by 配置验证: - SaaSConfig::load() 添加 jwt_expiration_hours>=1, max_connections>0, min<=max
36 lines
795 B
Rust
36 lines
795 B
Rust
//! Event bus for kernel events
|
|
|
|
use tokio::sync::broadcast;
|
|
use zclaw_types::Event;
|
|
|
|
/// Event bus for publishing and subscribing to events
|
|
pub struct EventBus {
|
|
sender: broadcast::Sender<Event>,
|
|
}
|
|
|
|
impl EventBus {
|
|
/// Create a new event bus
|
|
pub fn new() -> Self {
|
|
let (sender, _) = broadcast::channel(1000);
|
|
Self { sender }
|
|
}
|
|
|
|
/// Publish an event
|
|
pub fn publish(&self, event: Event) {
|
|
if let Err(e) = self.sender.send(event) {
|
|
tracing::debug!("Event dropped (no subscribers or channel full): {:?}", e);
|
|
}
|
|
}
|
|
|
|
/// Subscribe to events
|
|
pub fn subscribe(&self) -> broadcast::Receiver<Event> {
|
|
self.sender.subscribe()
|
|
}
|
|
}
|
|
|
|
impl Default for EventBus {
|
|
fn default() -> Self {
|
|
Self::new()
|
|
}
|
|
}
|