refactor(kernel): 移除 multi-agent feature gate — 33处 cfg 全部删除 (Phase 4A)

8 个文件移除 #[cfg(feature = "multi-agent")],zclaw-kernel default features
新增 multi-agent。A2A 路由、agents、adapters 现在始终编译。
This commit is contained in:
iven
2026-04-18 08:17:58 +08:00
parent eaa99a20db
commit 2037809196
9 changed files with 6 additions and 41 deletions

View File

@@ -8,7 +8,7 @@ rust-version.workspace = true
description = "ZCLAW kernel - central coordinator for all subsystems" description = "ZCLAW kernel - central coordinator for all subsystems"
[features] [features]
default = [] default = ["multi-agent"]
# Enable multi-agent orchestration (Director, A2A protocol) # Enable multi-agent orchestration (Director, A2A protocol)
multi-agent = ["zclaw-protocols/a2a"] multi-agent = ["zclaw-protocols/a2a"]

View File

@@ -1,16 +1,10 @@
//! A2A (Agent-to-Agent) messaging //! A2A (Agent-to-Agent) messaging
//!
//! All items in this module are gated by the `multi-agent` feature flag.
#[cfg(feature = "multi-agent")]
use zclaw_types::{AgentId, Capability, Event, Result}; use zclaw_types::{AgentId, Capability, Event, Result};
#[cfg(feature = "multi-agent")]
use zclaw_protocols::{A2aAgentProfile, A2aCapability, A2aEnvelope, A2aMessageType, A2aRecipient}; use zclaw_protocols::{A2aAgentProfile, A2aCapability, A2aEnvelope, A2aMessageType, A2aRecipient};
#[cfg(feature = "multi-agent")]
use super::Kernel; use super::Kernel;
#[cfg(feature = "multi-agent")]
impl Kernel { impl Kernel {
// ============================================================ // ============================================================
// A2A (Agent-to-Agent) Messaging // A2A (Agent-to-Agent) Messaging

View File

@@ -106,13 +106,11 @@ impl SkillExecutor for KernelSkillExecutor {
/// Inbox wrapper for A2A message receivers that supports re-queuing /// Inbox wrapper for A2A message receivers that supports re-queuing
/// non-matching messages instead of dropping them. /// non-matching messages instead of dropping them.
#[cfg(feature = "multi-agent")]
pub(crate) struct AgentInbox { pub(crate) struct AgentInbox {
pub(crate) rx: tokio::sync::mpsc::Receiver<zclaw_protocols::A2aEnvelope>, pub(crate) rx: tokio::sync::mpsc::Receiver<zclaw_protocols::A2aEnvelope>,
pub(crate) pending: std::collections::VecDeque<zclaw_protocols::A2aEnvelope>, pub(crate) pending: std::collections::VecDeque<zclaw_protocols::A2aEnvelope>,
} }
#[cfg(feature = "multi-agent")]
impl AgentInbox { impl AgentInbox {
pub(crate) fn new(rx: tokio::sync::mpsc::Receiver<zclaw_protocols::A2aEnvelope>) -> Self { pub(crate) fn new(rx: tokio::sync::mpsc::Receiver<zclaw_protocols::A2aEnvelope>) -> Self {
Self { rx, pending: std::collections::VecDeque::new() } Self { rx, pending: std::collections::VecDeque::new() }

View File

@@ -2,11 +2,8 @@
use zclaw_types::{AgentConfig, AgentId, AgentInfo, Event, Result}; use zclaw_types::{AgentConfig, AgentId, AgentInfo, Event, Result};
#[cfg(feature = "multi-agent")]
use std::sync::Arc; use std::sync::Arc;
#[cfg(feature = "multi-agent")]
use tokio::sync::Mutex; use tokio::sync::Mutex;
#[cfg(feature = "multi-agent")]
use super::adapters::AgentInbox; use super::adapters::AgentInbox;
use super::Kernel; use super::Kernel;
@@ -23,7 +20,6 @@ impl Kernel {
self.memory.save_agent(&config).await?; self.memory.save_agent(&config).await?;
// Register with A2A router for multi-agent messaging (before config is moved) // Register with A2A router for multi-agent messaging (before config is moved)
#[cfg(feature = "multi-agent")]
{ {
let profile = Self::agent_config_to_a2a_profile(&config); let profile = Self::agent_config_to_a2a_profile(&config);
let rx = self.a2a_router.register_agent(profile).await; let rx = self.a2a_router.register_agent(profile).await;
@@ -52,7 +48,6 @@ impl Kernel {
self.memory.delete_agent(id).await?; self.memory.delete_agent(id).await?;
// Unregister from A2A router // Unregister from A2A router
#[cfg(feature = "multi-agent")]
{ {
self.a2a_router.unregister_agent(id).await; self.a2a_router.unregister_agent(id).await;
self.a2a_inboxes.remove(id); self.a2a_inboxes.remove(id);

View File

@@ -8,16 +8,13 @@ mod hands;
mod triggers; mod triggers;
mod approvals; mod approvals;
mod orchestration; mod orchestration;
#[cfg(feature = "multi-agent")]
mod a2a; mod a2a;
use std::sync::Arc; use std::sync::Arc;
use tokio::sync::{broadcast, Mutex}; use tokio::sync::{broadcast, Mutex};
use zclaw_types::{Event, Result, AgentState}; use zclaw_types::{Event, Result, AgentState};
#[cfg(feature = "multi-agent")]
use zclaw_types::AgentId; use zclaw_types::AgentId;
#[cfg(feature = "multi-agent")]
use zclaw_protocols::A2aRouter; use zclaw_protocols::A2aRouter;
use crate::registry::AgentRegistry; use crate::registry::AgentRegistry;
@@ -56,11 +53,9 @@ pub struct Kernel {
mcp_adapters: Arc<std::sync::RwLock<Vec<zclaw_protocols::McpToolAdapter>>>, mcp_adapters: Arc<std::sync::RwLock<Vec<zclaw_protocols::McpToolAdapter>>>,
/// Dynamic industry keyword configs — shared with Tauri frontend, loaded from SaaS /// Dynamic industry keyword configs — shared with Tauri frontend, loaded from SaaS
industry_keywords: Arc<tokio::sync::RwLock<Vec<zclaw_runtime::IndustryKeywordConfig>>>, industry_keywords: Arc<tokio::sync::RwLock<Vec<zclaw_runtime::IndustryKeywordConfig>>>,
/// A2A router for inter-agent messaging (gated by multi-agent feature) /// A2A router for inter-agent messaging
#[cfg(feature = "multi-agent")]
a2a_router: Arc<A2aRouter>, a2a_router: Arc<A2aRouter>,
/// Per-agent A2A inbox receivers (supports re-queuing non-matching messages) /// Per-agent A2A inbox receivers (supports re-queuing non-matching messages)
#[cfg(feature = "multi-agent")]
a2a_inboxes: Arc<dashmap::DashMap<AgentId, Arc<Mutex<adapters::AgentInbox>>>>, a2a_inboxes: Arc<dashmap::DashMap<AgentId, Arc<Mutex<adapters::AgentInbox>>>>,
} }
@@ -135,7 +130,6 @@ impl Kernel {
} }
// Initialize A2A router for multi-agent support // Initialize A2A router for multi-agent support
#[cfg(feature = "multi-agent")]
let a2a_router = { let a2a_router = {
let kernel_agent_id = AgentId::new(); let kernel_agent_id = AgentId::new();
Arc::new(A2aRouter::new(kernel_agent_id)) Arc::new(A2aRouter::new(kernel_agent_id))
@@ -159,9 +153,7 @@ impl Kernel {
extraction_driver: None, extraction_driver: None,
mcp_adapters: Arc::new(std::sync::RwLock::new(Vec::new())), mcp_adapters: Arc::new(std::sync::RwLock::new(Vec::new())),
industry_keywords: Arc::new(tokio::sync::RwLock::new(Vec::new())), industry_keywords: Arc::new(tokio::sync::RwLock::new(Vec::new())),
#[cfg(feature = "multi-agent")]
a2a_router, a2a_router,
#[cfg(feature = "multi-agent")]
a2a_inboxes: Arc::new(dashmap::DashMap::new()), a2a_inboxes: Arc::new(dashmap::DashMap::new()),
}) })
} }

View File

@@ -10,7 +10,6 @@ pub mod trigger_manager;
pub mod config; pub mod config;
pub mod scheduler; pub mod scheduler;
pub mod skill_router; pub mod skill_router;
#[cfg(feature = "multi-agent")]
pub mod director; pub mod director;
pub mod generation; pub mod generation;
pub mod export; pub mod export;
@@ -21,13 +20,11 @@ pub use capabilities::*;
pub use events::*; pub use events::*;
pub use config::*; pub use config::*;
pub use trigger_manager::{TriggerManager, TriggerEntry, TriggerUpdateRequest, TriggerManagerConfig}; pub use trigger_manager::{TriggerManager, TriggerEntry, TriggerUpdateRequest, TriggerManagerConfig};
#[cfg(feature = "multi-agent")]
pub use director::{ pub use director::{
Director, DirectorConfig, DirectorBuilder, DirectorAgent, Director, DirectorConfig, DirectorBuilder, DirectorAgent,
ConversationState, ScheduleStrategy, ConversationState, ScheduleStrategy,
// Note: AgentRole is intentionally NOT re-exported here — use generation::AgentRole instead // Note: AgentRole is intentionally NOT re-exported here — use generation::AgentRole instead
}; };
#[cfg(feature = "multi-agent")]
pub use zclaw_protocols::{ pub use zclaw_protocols::{
A2aRouter, A2aAgentProfile, A2aCapability, A2aEnvelope, A2aMessageType, A2aRecipient, A2aRouter, A2aAgentProfile, A2aCapability, A2aEnvelope, A2aMessageType, A2aRecipient,
A2aReceiver, A2aReceiver,

View File

@@ -1,4 +1,4 @@
//! A2A (Agent-to-Agent) commands — gated behind `multi-agent` feature //! A2A (Agent-to-Agent) commands
use serde_json; use serde_json;
use tauri::State; use tauri::State;
@@ -7,10 +7,9 @@ use zclaw_types::AgentId;
use super::KernelState; use super::KernelState;
// ============================================================ // ============================================================
// A2A (Agent-to-Agent) Commands — gated behind multi-agent feature // A2A (Agent-to-Agent) Commands
// ============================================================ // ============================================================
#[cfg(feature = "multi-agent")]
/// Send a direct A2A message from one agent to another /// Send a direct A2A message from one agent to another
// @connected // @connected
#[tauri::command] #[tauri::command]
@@ -44,7 +43,6 @@ pub async fn agent_a2a_send(
} }
/// Broadcast a message from one agent to all other agents /// Broadcast a message from one agent to all other agents
#[cfg(feature = "multi-agent")]
// @connected // @connected
#[tauri::command] #[tauri::command]
pub async fn agent_a2a_broadcast( pub async fn agent_a2a_broadcast(
@@ -66,7 +64,6 @@ pub async fn agent_a2a_broadcast(
} }
/// Discover agents with a specific capability /// Discover agents with a specific capability
#[cfg(feature = "multi-agent")]
// @connected // @connected
#[tauri::command] #[tauri::command]
pub async fn agent_a2a_discover( pub async fn agent_a2a_discover(
@@ -88,7 +85,6 @@ pub async fn agent_a2a_discover(
} }
/// Delegate a task to another agent and wait for response /// Delegate a task to another agent and wait for response
#[cfg(feature = "multi-agent")]
// @connected // @connected
#[tauri::command] #[tauri::command]
pub async fn agent_a2a_delegate_task( pub async fn agent_a2a_delegate_task(
@@ -116,11 +112,10 @@ pub async fn agent_a2a_delegate_task(
} }
// ============================================================ // ============================================================
// Butler Delegation Command — multi-agent feature // Butler Delegation Command
// ============================================================ // ============================================================
/// Butler delegates a user request to expert agents via the Director. /// Butler delegates a user request to expert agents via the Director.
#[cfg(feature = "multi-agent")]
// @reserved: butler multi-agent delegation // @reserved: butler multi-agent delegation
// @connected // @connected
#[tauri::command] #[tauri::command]

View File

@@ -19,7 +19,6 @@ pub mod skill;
pub mod trigger; pub mod trigger;
pub mod workspace; pub mod workspace;
#[cfg(feature = "multi-agent")]
pub mod a2a; pub mod a2a;
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------

View File

@@ -255,16 +255,11 @@ pub fn run() {
kernel_commands::scheduled_task::scheduled_task_create, kernel_commands::scheduled_task::scheduled_task_create,
kernel_commands::scheduled_task::scheduled_task_list, kernel_commands::scheduled_task::scheduled_task_list,
// A2A commands gated behind multi-agent feature // A2A commands
#[cfg(feature = "multi-agent")]
kernel_commands::a2a::agent_a2a_send, kernel_commands::a2a::agent_a2a_send,
#[cfg(feature = "multi-agent")]
kernel_commands::a2a::agent_a2a_broadcast, kernel_commands::a2a::agent_a2a_broadcast,
#[cfg(feature = "multi-agent")]
kernel_commands::a2a::agent_a2a_discover, kernel_commands::a2a::agent_a2a_discover,
#[cfg(feature = "multi-agent")]
kernel_commands::a2a::agent_a2a_delegate_task, kernel_commands::a2a::agent_a2a_delegate_task,
#[cfg(feature = "multi-agent")]
kernel_commands::a2a::butler_delegate_task, kernel_commands::a2a::butler_delegate_task,
// Pipeline commands (DSL-based workflows) // Pipeline commands (DSL-based workflows)