---
name: sync-repos
description: Sincroniza workspaces locales con repositorios en Gitea
argument-hint: [--dry-run]
disable-model-invocation: true
user-invocable: true
allowed-tools: Bash, Read, Write
---

# sync-repos

Sincroniza workspaces locales con repositorios en Gitea: detecta repos nuevos, clona faltantes, actualiza metadata.

## Sintaxis

```bash
/sync-repos              # Sincronización con confirmación
/sync-repos --dry-run    # Solo análisis, sin cambios
```

## Prerequisitos

- Variables de entorno: `GITEA_URL` y `GITEA_TOKEN`
- Feature flag `workspace_commands` habilitado

## Flujo

### 1. Verificar feature flag

Leer `feature_flags.json`. Si `workspace_commands.enabled: false`, informar y detener.

### 2. Detectar modo

- `--dry-run`: solo análisis
- Sin flags: mostrar plan y pedir confirmación

### 3. Ejecutar análisis

Usa `app.SyncWorkspacesCommand(config, dryRun)`:
1. Obtener workspaces locales desde SQLite
2. Consultar repos en Gitea
3. Comparar con `core.CompareWorkspaces()`
4. Mostrar plan: ToClone, ToUpdate, Orphans

### 4. Confirmación interactiva (si no --dry-run)

```
¿Ejecutar sincronización? (s/n):
```

### 5. Mostrar resultado

```
Sincronización completada.
  Clonados:      N
  Actualizados:  M
  Huérfanos:     X
```

## Decisiones de diseño

- Huérfanos NO se eliminan automáticamente
- Confirmación obligatoria antes de clonar
- Clonación secuencial (no paralela)

## Troubleshooting

- "GITEA_URL y GITEA_TOKEN requeridos": Configurar variables de entorno
- "error al obtener repositorios": Verificar token y conectividad
