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

@ -59,6 +59,8 @@ struct IndexEntry {
skip_serializing_if = "Option::is_none"
)]
default_mcp_tool_policy: Option<McpToolPolicy>,
#[serde(default, skip_serializing_if = "std::ops::Not::not")]
default_contactable: bool,
}
/// On-disk shape of `templates/index.json`.
@ -170,6 +172,7 @@ impl FsTemplateStore {
default_agent_name: entry.default_agent_name.clone(),
default_system_permissions: entry.default_system_permissions.clone(),
default_mcp_tool_policy: entry.default_mcp_tool_policy.clone(),
default_contactable: entry.default_contactable,
})
}
}
@ -220,6 +223,7 @@ impl TemplateStore for FsTemplateStore {
default_agent_name: template.default_agent_name.clone(),
default_system_permissions: template.default_system_permissions.clone(),
default_mcp_tool_policy: template.default_mcp_tool_policy.clone(),
default_contactable: template.default_contactable,
};
if let Some(slot) = index.templates.iter_mut().find(|e| e.id == template.id) {
*slot = row;