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:
@@ -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"]
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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() }
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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()),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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]
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user