refactor(runtime): loop_runner 双路径合并 — 统一走 middleware chain (Phase 3A)
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
Some checks failed
CI / Lint & TypeCheck (push) Has been cancelled
CI / Unit Tests (push) Has been cancelled
CI / Build Frontend (push) Has been cancelled
CI / Rust Check (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / E2E Tests (push) Has been cancelled
middleware_chain 从 Option<MiddlewareChain> 改为 MiddlewareChain: - 移除 6 处 use_middleware 分支 + 2 处 legacy loop_guard inline path - 移除 loop_guard field + Mutex import + circuit_breaker_triggered 变量 - 空 chain (Default) 行为等价于 middleware path 中的 no-op - 1154行 → 1023行,净减 131 行 - cargo check --workspace ✓ | cargo test ✓ (排除 desktop 预存编译问题)
This commit is contained in:
@@ -83,10 +83,8 @@ impl Kernel {
|
||||
loop_runner = loop_runner.with_path_validator(path_validator);
|
||||
}
|
||||
|
||||
// Inject middleware chain if available
|
||||
if let Some(chain) = self.create_middleware_chain() {
|
||||
loop_runner = loop_runner.with_middleware_chain(chain);
|
||||
}
|
||||
// Inject middleware chain
|
||||
loop_runner = loop_runner.with_middleware_chain(self.create_middleware_chain());
|
||||
|
||||
// Apply chat mode configuration (thinking/reasoning/plan mode)
|
||||
if let Some(ref mode) = chat_mode {
|
||||
@@ -198,10 +196,8 @@ impl Kernel {
|
||||
loop_runner = loop_runner.with_path_validator(path_validator);
|
||||
}
|
||||
|
||||
// Inject middleware chain if available
|
||||
if let Some(chain) = self.create_middleware_chain() {
|
||||
loop_runner = loop_runner.with_middleware_chain(chain);
|
||||
}
|
||||
// Inject middleware chain
|
||||
loop_runner = loop_runner.with_middleware_chain(self.create_middleware_chain());
|
||||
|
||||
// Apply chat mode configuration (thinking/reasoning/plan mode from frontend)
|
||||
if let Some(ref mode) = chat_mode {
|
||||
|
||||
@@ -201,7 +201,7 @@ impl Kernel {
|
||||
/// When middleware is configured, cross-cutting concerns (compaction, loop guard,
|
||||
/// token calibration, etc.) are delegated to the chain. When no middleware is
|
||||
/// registered, the legacy inline path in `AgentLoop` is used instead.
|
||||
pub(crate) fn create_middleware_chain(&self) -> Option<zclaw_runtime::middleware::MiddlewareChain> {
|
||||
pub(crate) fn create_middleware_chain(&self) -> zclaw_runtime::middleware::MiddlewareChain {
|
||||
let mut chain = zclaw_runtime::middleware::MiddlewareChain::new();
|
||||
|
||||
// Butler router — semantic skill routing context injection
|
||||
@@ -359,13 +359,11 @@ impl Kernel {
|
||||
chain.register(Arc::new(mw));
|
||||
}
|
||||
|
||||
// Only return Some if we actually registered middleware
|
||||
if chain.is_empty() {
|
||||
None
|
||||
} else {
|
||||
// Always return the chain (empty chain is a no-op)
|
||||
if !chain.is_empty() {
|
||||
tracing::info!("[Kernel] Middleware chain created with {} middlewares", chain.len());
|
||||
Some(chain)
|
||||
}
|
||||
chain
|
||||
}
|
||||
|
||||
/// Subscribe to events
|
||||
|
||||
Reference in New Issue
Block a user