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:
2026-09-07 16:31:14 +02:00
parent d7b24ad183
commit 98954986a7
18 changed files with 721 additions and 15 deletions

View File

@ -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()
})
}