--- name: relationship-manager description: > Gestão inteligente de relacionamentos entre componentes do sistema. Use when "relacionamentos", "mapeamento", "colaborações", "dependências", "agent-mcp", "agent-skill", "sdk", "impacto", "inconsistências". author: Descomplicar® version: 1.0.0 desk_task: 1441 allowed-tools: Read, Glob, Grep, ToolSearch --- # Relationship Manager Gestão inteligente de relacionamentos entre componentes do sistema. ## Triggers Esta skill deve ser activada quando: - Utilizador pede para configurar relacionamentos - Novo componente é adicionado e precisa de mapeamentos - Inconsistências detectadas em relacionamentos - Análise de impacto de mudanças ## Schema de Relacionamentos ### Hierarquia ``` TaskForce (Plugin) ├── cr_plugin_agents → Agentes do Plugin ├── cr_plugin_skills → Skills do Plugin └── cr_plugin_mcps → MCPs do Plugin Agent ├── cr_agent_mcps → MCPs do Agente (primary/recommended/available) ├── cr_agent_skills → Skills do Agente └── cr_agent_collaborations → Colaborações com outros Agentes Skill └── cr_skill_mcps → MCPs necessários para a Skill Decision Tree └── Referencia um Agent para selecção automática ``` ### Tipos de Relacionamento **cr_agent_mcps.relationship_type:** - `primary` - MCPs essenciais, sempre disponíveis - `recommended` - MCPs recomendados, usar quando relevante - `available` - MCPs opcionais, disponíveis se necessário **cr_agent_collaborations.collaboration_type:** - `technical` - Colaboração técnica (mesmo domínio) - `cross-domain` - Colaboração entre domínios diferentes - `sequential` - Um passa trabalho para outro - `parallel` - Trabalham em paralelo ## Capabilities ### 1. Análise de Relacionamentos **Ver todos os relacionamentos de um componente:** ```sql -- Para um Agente SELECT 'MCP' as type, m.slug, am.relationship_type FROM cr_agent_mcps am JOIN cr_mcps m ON am.mcp_id = m.id WHERE am.agent_id = (SELECT id FROM cr_agents WHERE slug = ?) UNION ALL SELECT 'Skill', s.slug, 'uses' FROM cr_agent_skills ags JOIN cr_skills s ON ags.skill_id = s.id WHERE ags.agent_id = (SELECT id FROM cr_agents WHERE slug = ?) UNION ALL SELECT 'TaskForce', p.slug, 'member' FROM cr_plugin_agents pa JOIN cr_plugins p ON pa.plugin_id = p.id WHERE pa.agent_id = (SELECT id FROM cr_agents WHERE slug = ?) UNION ALL SELECT 'Collaborator', a2.slug, ac.collaboration_type FROM cr_agent_collaborations ac JOIN cr_agents a2 ON ac.collaborator_id = a2.id WHERE ac.agent_id = (SELECT id FROM cr_agents WHERE slug = ?); ``` ### 2. Sugestão de Relacionamentos Baseado em padrões existentes: ```sql -- MCPs usados por agentes similares (mesma categoria) SELECT m.slug, COUNT(*) as usage_count, GROUP_CONCAT(DISTINCT a.slug) as used_by FROM cr_agent_mcps am JOIN cr_mcps m ON am.mcp_id = m.id JOIN cr_agents a ON am.agent_id = a.id WHERE a.category = (SELECT category FROM cr_agents WHERE slug = ?) AND am.agent_id != (SELECT id FROM cr_agents WHERE slug = ?) AND m.id NOT IN ( SELECT mcp_id FROM cr_agent_mcps WHERE agent_id = (SELECT id FROM cr_agents WHERE slug = ?) ) GROUP BY m.id ORDER BY usage_count DESC LIMIT 5; ``` ### 3. Validação de Consistência ```sql -- Verificar órfãos em todas as tabelas SELECT 'cr_agent_mcps (agent)' as issue, COUNT(*) as orphans FROM cr_agent_mcps am LEFT JOIN cr_agents a ON am.agent_id = a.id WHERE a.id IS NULL UNION ALL SELECT 'cr_agent_mcps (mcp)', COUNT(*) FROM cr_agent_mcps am LEFT JOIN cr_mcps m ON am.mcp_id = m.id WHERE m.id IS NULL -- ... continuar para todas as tabelas ``` ### 4. Propagação de Mudanças Quando um componente é removido/desactivado: ```sql -- Marcar relacionamentos como inactivos (não deletar) UPDATE cr_agent_mcps SET status = 'inactive', updated_at = NOW() WHERE agent_id = (SELECT id FROM cr_agents WHERE slug = ?); -- Ou limpar (se preferido) DELETE FROM cr_agent_mcps WHERE agent_id = (SELECT id FROM cr_agents WHERE slug = ?); ``` ### 5. Análise de Impacto Antes de remover um componente, verificar dependências: ```sql -- Impacto de remover um MCP SELECT 'Agents afectados' as impact, COUNT(DISTINCT am.agent_id) as count, GROUP_CONCAT(DISTINCT a.slug) as list FROM cr_agent_mcps am JOIN cr_agents a ON am.agent_id = a.id WHERE am.mcp_id = (SELECT id FROM cr_mcps WHERE slug = ?) AND am.relationship_type = 'primary' UNION ALL SELECT 'Skills afectadas', COUNT(DISTINCT sm.skill_id), GROUP_CONCAT(DISTINCT s.slug) FROM cr_skill_mcps sm JOIN cr_skills s ON sm.skill_id = s.id WHERE sm.mcp_id = (SELECT id FROM cr_mcps WHERE slug = ?); ``` ## Workflows ### Adicionar Novo Agente 1. Inserir em `cr_agents` 2. Mapear MCPs em `cr_agent_mcps`: - Identificar MCPs primários (essenciais) - Identificar MCPs recomendados (úteis) - Listar MCPs disponíveis (opcionais) 3. Mapear Skills em `cr_agent_skills` 4. Associar a TaskForces em `cr_plugin_agents` 5. Definir colaborações em `cr_agent_collaborations` 6. Criar decision tree se necessário ### Remover Componente 1. Verificar impacto com análise de dependências 2. Confirmar com utilizador 3. Remover relacionamentos (ou marcar inactive) 4. Actualizar decision trees 5. Log em telemetria ## Métricas | Métrica | Descrição | |---------|-----------| | Densidade | Média de relacionamentos por componente | | Cobertura | % de componentes com relacionamentos | | Consistência | % de relacionamentos válidos | | Conectividade | Componentes isolados vs conectados | ## Exemplo de Uso ``` User: Configura o novo agente video-editor com os MCPs necessários Relationship Manager: 1. [Analisa agentes similares na categoria 'content'] 2. [Identifica MCPs comuns: filesystem, google-workspace, elevenlabs] 3. [Sugere relacionamentos:] - PRIMARY: filesystem, elevenlabs - RECOMMENDED: google-workspace, pexels, pixabay - AVAILABLE: vimeo, youtube-uploader 4. [Cria mapeamentos em cr_agent_mcps] 5. [Sugere colaborações: content-manager, copywriter] 6. [Reporta: "Agente video-editor configurado com 7 MCPs e 2 colaborações"] ``` ## Limites - Não cria componentes novos (apenas relacionamentos) - Sugestões baseadas em padrões podem não ser 100% precisas - Análise de impacto limitada a relacionamentos directos - Não propaga alterações automaticamente (requer confirmação) - Depende de consistência das tabelas cr_* na BD