feat(cross-project): découverte et contact inter-projets — tools MCP idea_project_{list,read_context,list_agents,ask_agent,cancel_agent}, permission contactable par agent + default_contactable persistée dans les templates, routage orchestrator par projectId+agentId — #260 (tests ciblés verts, QA en attente)
This commit is contained in:
@ -74,6 +74,9 @@ pub struct AgentTemplate {
|
||||
skip_serializing_if = "Option::is_none"
|
||||
)]
|
||||
pub default_mcp_tool_policy: Option<McpToolPolicy>,
|
||||
/// Whether agents created from this template are cross-project contactable.
|
||||
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
|
||||
pub default_contactable: bool,
|
||||
}
|
||||
|
||||
impl AgentTemplate {
|
||||
@ -98,6 +101,7 @@ impl AgentTemplate {
|
||||
default_agent_name: None,
|
||||
default_system_permissions: None,
|
||||
default_mcp_tool_policy: None,
|
||||
default_contactable: false,
|
||||
})
|
||||
}
|
||||
|
||||
@ -125,6 +129,7 @@ impl AgentTemplate {
|
||||
default_agent_name: Option<String>,
|
||||
default_system_permissions: Option<SystemPermissionSet>,
|
||||
default_mcp_tool_policy: Option<McpToolPolicy>,
|
||||
default_contactable: bool,
|
||||
) -> Result<Self, DomainError> {
|
||||
crate::validation::non_empty(&name, "template.name")?;
|
||||
if let Some(default_agent_name) = &default_agent_name {
|
||||
@ -136,6 +141,7 @@ impl AgentTemplate {
|
||||
default_agent_name,
|
||||
default_system_permissions,
|
||||
default_mcp_tool_policy,
|
||||
default_contactable,
|
||||
..self.clone()
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user