--- name: sync description: > Sincronização completa: entidades + relacionamentos. Compara ficheiros locais com MySQL e corrige inconsistências. argument-hint: "[--dry-run] [--force] [--entities-only] [--relationships-only]" --- # /descomplicar:sync Sincronização completa: entidades + relacionamentos. ## Objectivo Garantir que ficheiros locais, BD MySQL e relacionamentos estão todos sincronizados e consistentes. ## Instruções Quando invocado, deves: ### Fase 1: Sync Entidades Core 1. **Ler estado local** dos ficheiros JSON: ``` ~/.claude/sdks/_resources/agents.json ~/.claude/sdks/_resources/skills.json ~/.claude/sdks/_resources/mcps.json ~/.claude/sdks/_registry.json ``` 2. **Comparar com MySQL** (Core Tables): ```sql SELECT slug, name, category, status FROM cr_agents; SELECT slug, name, category, status FROM cr_skills; SELECT slug, name, transport, status FROM cr_mcps; SELECT slug, name, status FROM cr_sdks; ``` 3. **Aplicar diferenças** nas entidades: - Novos em ficheiros → INSERT - Diferentes → UPDATE - Removidos → Marcar inactive ### Fase 2: Sync Relacionamentos 4. **Verificar consistência de relacionamentos**: **cr_agent_mcps (Agent ↔ MCP):** ```sql -- Verificar órfãos (agent_id que não existe em cr_agents) SELECT am.* FROM cr_agent_mcps am LEFT JOIN cr_agents a ON am.agent_id = a.id WHERE a.id IS NULL; -- Verificar órfãos (mcp_id que não existe em cr_mcps) SELECT am.* FROM cr_agent_mcps am LEFT JOIN cr_mcps m ON am.mcp_id = m.id WHERE m.id IS NULL; ``` **cr_sdk_agents (SDK ↔ Agent):** ```sql SELECT sa.* FROM cr_sdk_agents sa LEFT JOIN cr_sdks s ON sa.sdk_id = s.id LEFT JOIN cr_agents a ON sa.agent_id = a.id WHERE s.id IS NULL OR a.id IS NULL; ``` **cr_sdk_skills (SDK ↔ Skill):** ```sql SELECT ss.* FROM cr_sdk_skills ss LEFT JOIN cr_sdks s ON ss.sdk_id = s.id LEFT JOIN cr_skills sk ON ss.skill_id = sk.id WHERE s.id IS NULL OR sk.id IS NULL; ``` **cr_sdk_mcps (SDK ↔ MCP):** ```sql SELECT sm.* FROM cr_sdk_mcps sm LEFT JOIN cr_sdks s ON sm.sdk_id = s.id LEFT JOIN cr_mcps m ON sm.mcp_id = m.id WHERE s.id IS NULL OR m.id IS NULL; ``` 5. **Limpar órfãos** (com confirmação se > 10): ```sql DELETE FROM cr_agent_mcps WHERE agent_id NOT IN (SELECT id FROM cr_agents); DELETE FROM cr_agent_mcps WHERE mcp_id NOT IN (SELECT id FROM cr_mcps); -- Repetir para todas as tabelas de relacionamento ``` ### Fase 3: Sync MCP Tools 6. **Actualizar cr_mcp_tools**: ```sql -- Para cada MCP activo, verificar se tools estão mapeadas SELECT m.slug, COUNT(mt.id) as tools_count FROM cr_mcps m LEFT JOIN cr_mcp_tools mt ON m.id = mt.mcp_id WHERE m.status = 'active' GROUP BY m.id; ``` ### Fase 4: Verificar Intelligence Layer 7. **Validar Decision Trees**: ```sql -- Verificar se agentes referenciados existem SELECT dt.* FROM cr_decision_trees dt LEFT JOIN cr_agents a ON dt.agent_id = a.id WHERE a.id IS NULL; ``` 8. **Actualizar recommendations** se necessário: ```sql -- Marcar recommendations implementadas UPDATE cr_recommendations SET status = 'implemented', implemented_at = NOW() WHERE status = 'pending' AND component_type = 'agent' AND component_id IN (SELECT slug FROM cr_agents WHERE status = 'active'); ``` ### Fase 5: Registar Sync 9. **Log da operação**: ```sql INSERT INTO cr_infrastructure_sync (sync_type, entities_synced, relationships_checked, orphans_removed, status, created_at) VALUES ('full', X, Y, Z, 'success', NOW()); ``` 10. **Apresentar relatório**: ``` ╔══════════════════════════════════════════════════════════════════════╗ ║ SYNC REPORT - 2026-02-04 15:35 ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ FASE 1: ENTIDADES CORE ║ ║ ─────────────────────────────────────────────────────────────────── ║ ║ Componente │ Local │ MySQL │ Adicionados │ Actualizados │ Status ║ ║ Agents │ 46 │ 46 │ 0 │ 2 │ ✓ ║ ║ Skills │ 54 │ 54 │ 0 │ 0 │ ✓ ║ ║ MCPs │ 33 │ 33 │ 0 │ 1 │ ✓ ║ ║ SDKs │ 29 │ 29 │ 0 │ 0 │ ✓ ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ FASE 2: RELACIONAMENTOS ║ ║ ─────────────────────────────────────────────────────────────────── ║ ║ Tabela │ Total │ Órfãos │ Removidos │ Status ║ ║ cr_agent_mcps │ 483 │ 0 │ 0 │ ✓ ║ ║ cr_sdk_agents │ 131 │ 0 │ 0 │ ✓ ║ ║ cr_sdk_skills │ 75 │ 0 │ 0 │ ✓ ║ ║ cr_sdk_mcps │ 56 │ 0 │ 0 │ ✓ ║ ║ cr_agent_skills │ 23 │ 0 │ 0 │ ✓ ║ ║ cr_skill_mcps │ 45 │ 0 │ 0 │ ✓ ║ ║ cr_agent_collabs │ 12 │ 0 │ 0 │ ✓ ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ FASE 3: MCP TOOLS ║ ║ ─────────────────────────────────────────────────────────────────── ║ ║ MCPs com tools mapeadas: 33/33 (822 tools total) ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ FASE 4: INTELLIGENCE ║ ║ ─────────────────────────────────────────────────────────────────── ║ ║ Decision Trees válidas: 5/5 ║ ║ Recommendations actualizadas: 1 ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ RESULTADO: Sync completo, 0 problemas ║ ║ PRÓXIMO SYNC: Automático em 6h (cron) ║ ╚══════════════════════════════════════════════════════════════════════╝ ``` ## Sintaxe ``` /descomplicar:sync [options] ``` | Opção | Descrição | Default | |-------|-----------|---------| | `--dry-run` | Mostrar alterações sem aplicar | false | | `--force` | Aplicar sem confirmação | false | | `--entities-only` | Sync apenas entidades core | false | | `--relationships-only` | Sync apenas relacionamentos | false | | `--fix-orphans` | Remover órfãos automaticamente | false | ## Output Esperado ``` ╔══════════════════════════════════════════════════════════════════════╗ ║ SYNC REPORT - 2026-02-04 15:35 ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ ENTIDADES: Agents 46 ✓ | Skills 54 ✓ | MCPs 33 ✓ | SDKs 29 ✓ ║ ║ RELACIONAMENTOS: 825 verificados, 0 órfãos removidos ║ ║ INTELLIGENCE: 5 decision trees válidas ║ ╠══════════════════════════════════════════════════════════════════════╣ ║ RESULTADO: Sync completo, 0 problemas ║ ╚══════════════════════════════════════════════════════════════════════╝ ```