refactor(crates): kernel/generation module split + DeerFlow optimizations + middleware + dead code cleanup
- Split zclaw-kernel/kernel.rs (1486 lines) into 9 domain modules - Split zclaw-kernel/generation.rs (1080 lines) into 3 modules - Add DeerFlow-inspired middleware: DanglingTool, SubagentLimit, ToolError, ToolOutputGuard - Add PromptBuilder for structured system prompt assembly - Add FactStore (zclaw-memory) for persistent fact extraction - Add task builtin tool for agent task management - Driver improvements: Anthropic/OpenAI extended thinking, Gemini safety settings - Replace let _ = with proper log::warn! across SaaS handlers - Remove unused dependency (url) from zclaw-hands
This commit is contained in:
@@ -5,22 +5,29 @@
|
||||
//! "新对话" or truncating the user's first message.
|
||||
//!
|
||||
//! Priority 180 — runs after compaction (100) and memory (150), before skill index (200).
|
||||
//!
|
||||
//! NOTE: This is a structural placeholder. Full implementation requires an LLM driver
|
||||
//! reference to generate titles asynchronously, which will be wired through the
|
||||
//! middleware context in a future iteration. For now it simply passes through.
|
||||
|
||||
use async_trait::async_trait;
|
||||
use zclaw_types::Result;
|
||||
use crate::middleware::{AgentMiddleware, MiddlewareContext};
|
||||
use crate::middleware::{AgentMiddleware, MiddlewareDecision};
|
||||
|
||||
/// Middleware that auto-generates conversation titles after the first exchange.
|
||||
///
|
||||
/// When fully implemented, this will:
|
||||
/// 1. Detect the first user-assistant exchange (via message count)
|
||||
/// 2. Call the LLM with a short prompt to generate a descriptive title
|
||||
/// 3. Update the session title via the middleware context
|
||||
///
|
||||
/// For now, it serves as a registered placeholder in the middleware chain.
|
||||
pub struct TitleMiddleware {
|
||||
/// Whether a title has been generated for the current session.
|
||||
titled: std::sync::atomic::AtomicBool,
|
||||
_reserved: (),
|
||||
}
|
||||
|
||||
impl TitleMiddleware {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
titled: std::sync::atomic::AtomicBool::new(false),
|
||||
}
|
||||
Self { _reserved: () }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,4 +41,9 @@ impl Default for TitleMiddleware {
|
||||
impl AgentMiddleware for TitleMiddleware {
|
||||
fn name(&self) -> &str { "title" }
|
||||
fn priority(&self) -> i32 { 180 }
|
||||
|
||||
// All hooks default to Continue — placeholder until LLM driver is wired in.
|
||||
async fn before_completion(&self, _ctx: &mut crate::middleware::MiddlewareContext) -> zclaw_types::Result<MiddlewareDecision> {
|
||||
Ok(MiddlewareDecision::Continue)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user