---
name: relationship-manager
description: Gestão inteligente de relacionamentos entre componentes do sistema — mapeamento de dependências, colaborações agent-MCP/skill e análise de impacto.
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

---

## Healing Log

Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.

```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```

*Adicionar nova linha após cada erro corrigido.*
