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:
@ -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;
|
||||
|
||||
Reference in New Issue
Block a user