sdd-es 2.0.0 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/.claude/settings.json +29 -29
  2. package/.claude/settings.local.json +10 -0
  3. package/.claude-plugin/marketplace.json +10 -7
  4. package/.claude-plugin/plugin.json +59 -37
  5. package/.gitignore +20 -0
  6. package/.mcp.json +8 -0
  7. package/LICENSE +21 -0
  8. package/README.md +77 -40
  9. package/agents/architecture-designer.md +211 -0
  10. package/agents/arquitecto.md +16 -1
  11. package/agents/asesor-datos.md +15 -1
  12. package/agents/critico.md +37 -1
  13. package/agents/desarrollador-backend.md +3 -1
  14. package/agents/desarrollador-frontend.md +11 -16
  15. package/agents/disenador-api.md +13 -1
  16. package/agents/documentador.md +3 -1
  17. package/agents/investigador.md +3 -1
  18. package/agents/operaciones.md +3 -1
  19. package/agents/product-designer.md +268 -0
  20. package/agents/revisor.md +25 -1
  21. package/agents/seguridad.md +5 -1
  22. package/agents/tester.md +3 -1
  23. package/claude-hooks/agent-memory.js +288 -0
  24. package/claude-hooks/pre-tool-guard.js +61 -9
  25. package/cli/index.js +1 -2
  26. package/commands/sdd.adr.md +196 -0
  27. package/commands/sdd.analizar.md +23 -2
  28. package/commands/sdd.ayuda.md +13 -0
  29. package/commands/sdd.compliance.md +521 -0
  30. package/commands/sdd.configurar.md +34 -1
  31. package/commands/sdd.constitucion.md +198 -23
  32. package/commands/sdd.construir.md +210 -0
  33. package/commands/sdd.crear-mcp.md +2 -0
  34. package/commands/sdd.defect-report.md +134 -0
  35. package/commands/sdd.descubrir.md +19 -0
  36. package/commands/sdd.dise/303/261ar.md +188 -0
  37. package/commands/sdd.estado.md +120 -3
  38. package/commands/sdd.exportar.md +344 -0
  39. package/commands/sdd.implementar.md +272 -52
  40. package/commands/sdd.interpretar.md +239 -0
  41. package/commands/sdd.md +93 -4
  42. package/commands/sdd.optimizar-memoria.md +47 -0
  43. package/commands/sdd.optimizar.md +164 -0
  44. package/commands/sdd.planificar.md +64 -0
  45. package/commands/sdd.retro.md +74 -0
  46. package/commands/sdd.verificar.md +81 -0
  47. package/configuracion-ejemplo/.claude/CLAUDE.md +106 -0
  48. package/configuracion-ejemplo/sdd.config.yaml +10 -0
  49. package/craft/accessibility-baseline.md +216 -0
  50. package/craft/anti-ai-slop.md +158 -0
  51. package/craft/color.md +160 -0
  52. package/craft/typography.md +121 -0
  53. package/design-systems/bold-brutalist/DESIGN.md +239 -0
  54. package/design-systems/editorial-minimal/DESIGN.md +205 -0
  55. package/design-systems/neutral-modern/DESIGN.md +227 -0
  56. package/design-systems/vibrant-consumer/DESIGN.md +257 -0
  57. package/design-systems/warm-editorial/DESIGN.md +221 -0
  58. package/docs/AGENTES.md +4 -1
  59. package/docs/CASO-COMPLETO.md +206 -0
  60. package/docs/EJEMPLOS.md +61 -185
  61. package/docs/FABRICA.md +163 -115
  62. package/docs/INICIO-RAPIDO.md +27 -79
  63. package/docs/MEMORIA-Y-OBSERVABILIDAD.md +239 -0
  64. package/docs/MODELOS.md +3 -0
  65. package/docs/QUE-PASA-SI-FALLA.md +404 -0
  66. package/docs/README.md +43 -0
  67. package/docs/RELACION-CON-CLAUDE-CODE.md +38 -0
  68. package/docs/SEGURIDAD-PARA-NOTECNICOS.md +280 -0
  69. package/package.json +15 -10
  70. package/plantillas/job-story-mejorar-prompt.md +107 -0
  71. package/presets/enterprise.yaml +6 -0
  72. package/presets/lean.yaml +4 -0
  73. package/presets/startup.yaml +6 -0
  74. package/skills/adr-indexer/SKILL.md +181 -0
  75. package/skills/cache-audit/SKILL.md +163 -0
  76. package/skills/critica-diseno/SKILL.md +193 -0
  77. package/skills/descubrir-idea/SKILL.md +133 -0
  78. package/skills/effort-router/SKILL.md +128 -0
  79. package/skills/elegir-direccion/SKILL.md +184 -0
  80. package/skills/github-connect/IMPLEMENTATION-CHECKLIST.md +297 -0
  81. package/skills/github-connect/INDEX.md +223 -0
  82. package/skills/github-connect/INTEGRATION.md +361 -0
  83. package/skills/github-connect/QUICK-START.md +168 -0
  84. package/skills/github-connect/README.md +414 -0
  85. package/skills/github-connect/RESUMEN_IMPLEMENTACION.txt +374 -0
  86. package/skills/github-connect/SKILL.md +343 -0
  87. package/skills/github-connect/STRUCTURE.txt +252 -0
  88. package/skills/github-connect/example-config.yaml +41 -0
  89. package/skills/github-connect/github-connect.sh +419 -0
  90. package/skills/interpretar-idea/SKILL.md +254 -0
  91. package/skills/mejorar-prompt/SKILL.md +237 -0
  92. package/skills/memory-compactor/SKILL.md +68 -0
  93. package/skills/modo-guiado/SKILL.md +12 -2
  94. package/skills/mutation-detector/SKILL.md +134 -0
  95. package/skills/observabilidad-consumo/SKILL.md +164 -0
  96. package/skills/token-budget/SKILL.md +177 -0
  97. package/skills/vercel-deploy/00-START-HERE.txt +364 -0
  98. package/skills/vercel-deploy/CHECKLIST.md +205 -0
  99. package/skills/vercel-deploy/EXEC-SUMMARY.txt +322 -0
  100. package/skills/vercel-deploy/FLOW.txt +334 -0
  101. package/skills/vercel-deploy/INDEX.md +276 -0
  102. package/skills/vercel-deploy/INTEGRATION.md +328 -0
  103. package/skills/vercel-deploy/MANIFEST.md +310 -0
  104. package/skills/vercel-deploy/README.md +65 -0
  105. package/skills/vercel-deploy/SKILL.md +356 -0
  106. package/skills/vercel-deploy/deploy.sh +298 -0
  107. package/skills/vercel-deploy/estado.json.example +205 -0
  108. package/skills/vercel-deploy/skill.yaml +323 -0
  109. package/skills/vercel-deploy/vercel-deploy.sh +216 -0
  110. package/skills/wireframe-mvp/SKILL.md +157 -0
  111. package/docs/EJEMPLO-PRACTICA.md +0 -383
  112. package/mcp-figma/README.md +0 -158
  113. package/mcp-figma/package.json +0 -7
  114. package/mcp-figma/src/component-generator.js +0 -162
  115. package/mcp-figma/src/design-system-analyzer.js +0 -247
  116. package/mcp-figma/src/figma-client.js +0 -75
  117. package/mcp-figma/src/index.js +0 -114
  118. package/mcp-figma/src/mcp.js +0 -97
  119. package/mcp-figma/src/style-mapper.js +0 -85
  120. /package/skills/{compresion-tokens.md → compresion-tokens/SKILL.md} +0 -0
  121. /package/skills/{constitucion-constraint.md → constitucion-constraint/SKILL.md} +0 -0
  122. /package/skills/{deteccion-stack.md → deteccion-stack/SKILL.md} +0 -0
  123. /package/skills/{enrutador-agentes.md → enrutador-agentes/SKILL.md} +0 -0
  124. /package/skills/{gestion-estado.md → gestion-estado/SKILL.md} +0 -0
  125. /package/skills/{indexador.md → indexador/SKILL.md} +0 -0
  126. /package/skills/{validacion-spec.md → validacion-spec/SKILL.md} +0 -0
  127. /package/skills/{verificador-implementacion.md → verificador-implementacion/SKILL.md} +0 -0
@@ -0,0 +1,252 @@
1
+ GitHub Connect Skill - Estructura de Archivos
2
+ ===============================================
3
+
4
+ /skills/github-connect/
5
+
6
+ ├── SKILL.md (9.1 KB)
7
+ │ └─ Definición oficial del skill
8
+ │ - Frontmatter YAML
9
+ │ - Propósito y descripción
10
+ │ - Flujo de ejecución paso a paso
11
+ │ - Salida esperada
12
+ │ - Manejo de errores
13
+ │ - Integración con SDD-ES
14
+ │ - Changelog
15
+
16
+ ├── github-connect.sh (12 KB) [EJECUTABLE]
17
+ │ └─ Script principal que implementa el skill
18
+ │ - Validación de token
19
+ │ - Obtención de información de usuario
20
+ │ - Verificación de repositorio
21
+ │ - Creación de repositorio
22
+ │ - Configuración de remote
23
+ │ - Commit inicial
24
+ │ - Push inicial
25
+ │ - Guardado de configuración
26
+ │ - Validación final
27
+
28
+ ├── README.md (9.3 KB)
29
+ │ └─ Documentación para usuarios
30
+ │ - Descripción rápida
31
+ │ - Requisitos previos
32
+ │ - Instrucciones de uso
33
+ │ - Parámetros disponibles
34
+ │ - Ejemplos prácticos
35
+ │ - Flujo paso a paso
36
+ │ - Manejo de errores
37
+ │ - Validación post-ejecución
38
+ │ - FAQ
39
+ │ - Notas técnicas
40
+
41
+ ├── INTEGRATION.md (7.8 KB)
42
+ │ └─ Guía de integración técnica
43
+ │ - Integración con sdd.constitucion.md
44
+ │ - Interfaz pública del skill
45
+ │ - Variables de entorno
46
+ │ - Archivos modificados/creados
47
+ │ - Integración con otros skills
48
+ │ - Errores comunes y recuperación
49
+ │ - Estado persistente
50
+ │ - Flujo de reintentos
51
+ │ - Testing e integración continua
52
+ │ - Roadmap futuro
53
+
54
+ ├── example-config.yaml (1.2 KB)
55
+ │ └─ Ejemplo de configuración generada
56
+ │ - Estructura de .sdd/sdd.config.yaml
57
+ │ - Campos y valores
58
+ │ - Ejemplos públicos y privados
59
+ │ - Notas de seguridad
60
+
61
+ └── STRUCTURE.txt (este archivo)
62
+ └─ Descripción de la estructura del skill
63
+
64
+
65
+ FLUJO DE EJECUCIÓN
66
+ ==================
67
+
68
+ Usuario invoca:
69
+ /github-connect [parámetros opcionales]
70
+
71
+ ┌─────────────────────────────────────────────────────┐
72
+ │ github-connect.sh (script bash ejecutable) │
73
+ │ ┌─────────────────────────────────────────────┐ │
74
+ │ │ 1. Validar Token GitHub │ │
75
+ │ │ - GITHUB_TOKEN existe │ │
76
+ │ │ - gh cli está instalado │ │
77
+ │ │ - Token es válido │ │
78
+ │ ├─────────────────────────────────────────────┤ │
79
+ │ │ 2. Obtener Info de Usuario │ │
80
+ │ │ - gh api user (obtener username) │ │
81
+ │ │ - Mostrar configuración │ │
82
+ │ ├─────────────────────────────────────────────┤ │
83
+ │ │ 3. Verificar Git │ │
84
+ │ │ - .git existe │ │
85
+ │ │ - user.name configurado │ │
86
+ │ │ - user.email configurado │ │
87
+ │ ├─────────────────────────────────────────────┤ │
88
+ │ │ 4. Verificar Repo en GitHub │ │
89
+ │ │ - gh repo view (¿existe?) │ │
90
+ │ │ - Decidir: crear o usar existente │ │
91
+ │ ├─────────────────────────────────────────────┤ │
92
+ │ │ 5. Crear Repositorio (si necesario) │ │
93
+ │ │ - gh repo create │ │
94
+ │ ├─────────────────────────────────────────────┤ │
95
+ │ │ 6. Configurar Remote │ │
96
+ │ │ - git remote add origin │ │
97
+ │ ├─────────────────────────────────────────────┤ │
98
+ │ │ 7. Commit Inicial │ │
99
+ │ │ - git add -A │ │
100
+ │ │ - git commit -m "feat: ..." │ │
101
+ │ ├─────────────────────────────────────────────┤ │
102
+ │ │ 8. Rama Principal │ │
103
+ │ │ - git branch -M main │ │
104
+ │ ├─────────────────────────────────────────────┤ │
105
+ │ │ 9. Push Inicial │ │
106
+ │ │ - git push -u origin main │ │
107
+ │ ├─────────────────────────────────────────────┤ │
108
+ │ │ 10. Guardar Configuración │ │
109
+ │ │ - Crear .sdd/sdd.config.yaml │ │
110
+ │ │ - git commit (config) │ │
111
+ │ │ - git push │ │
112
+ │ ├─────────────────────────────────────────────┤ │
113
+ │ │ 11. Validación Final │ │
114
+ │ │ - Verificar remote │ │
115
+ │ │ - Verificar upstream │ │
116
+ │ │ - Verificar config local │ │
117
+ │ └─────────────────────────────────────────────┘ │
118
+ └─────────────────────────────────────────────────────┘
119
+
120
+ ✅ Completado exitosamente
121
+
122
+ Archivos creados/modificados:
123
+ - .git/config (remote añadido)
124
+ - .sdd/sdd.config.yaml (configuración guardada)
125
+ - Commits iniciales en rama main
126
+
127
+
128
+ ARCHIVOS MODIFICADOS DURANTE EJECUCIÓN
129
+ ========================================
130
+
131
+ Creados:
132
+ .sdd/
133
+ └── sdd.config.yaml Configuración de GitHub
134
+
135
+ Modificados:
136
+ .git/
137
+ └── config Añadido remote origin
138
+
139
+ (rama principal) Commits iniciales
140
+
141
+
142
+ REQUISITOS PREVIOS
143
+ ==================
144
+
145
+ Sistema:
146
+ - Git 2.20+ instalado
147
+ - GitHub CLI (gh) 1.0+ instalado
148
+
149
+ Configuración Git:
150
+ - git config user.name configurado
151
+ - git config user.email configurado
152
+ - Repositorio Git inicializado (git init)
153
+
154
+ Credenciales:
155
+ - GITHUB_TOKEN válido (variable de entorno)
156
+ - Permisos: repo (todos), user:email
157
+
158
+
159
+ PARÁMETROS
160
+ ==========
161
+
162
+ repo_name : Nombre del repo (default: nombre de carpeta)
163
+ repo_description : Descripción (default: "Proyecto SDD-ES")
164
+ repo_visibility : public/private (default: "public")
165
+ branch_name : Rama principal (default: "main")
166
+ auto_init_commit : true/false (default: true)
167
+ github_token : Token (default: $GITHUB_TOKEN)
168
+
169
+
170
+ SALIDA ESPERADA
171
+ ===============
172
+
173
+ Éxito:
174
+ ✅ Repositorio creado en GitHub
175
+ ✅ Remote configurado: https://github.com/usuario/repo.git
176
+ ✅ Commit inicial creado
177
+ ✅ Push completado
178
+ ✅ Configuración guardada en .sdd/sdd.config.yaml
179
+
180
+ Error (Ejemplos):
181
+ ❌ GITHUB_TOKEN no configurado
182
+ ❌ Token de GitHub inválido o expirado
183
+ ❌ GitHub CLI no está instalado
184
+ ❌ Este directorio no es un repositorio Git
185
+
186
+ Advertencias:
187
+ ⚠️ El repositorio ya existe en GitHub
188
+ ⚠️ No hay cambios pendientes para commitear
189
+
190
+
191
+ INTEGRACIÓN CON SDD-ES
192
+ ======================
193
+
194
+ Se invoca desde: sdd.constitucion.md, PASO 4
195
+ Cuando usuario dice: "sí, guardar en GitHub"
196
+
197
+ Parámetros recibidos del orquestador:
198
+ - proyecto.nombre
199
+ - proyecto.descripcion
200
+ - usuario.email
201
+
202
+ Actualiza estado en: gestion-estado.md
203
+ - proyecto.github_connected = true
204
+ - proyecto.repo_url = "https://..."
205
+ - proyecto.git_configured = true
206
+
207
+ Puede ser invocado por otros skills:
208
+ - modo-guiado.md (mostrar progreso)
209
+ - deteccion-stack.md (integración)
210
+ - verificador-implementacion.md (validación)
211
+
212
+
213
+ COMANDOS ÚTILES
214
+ ===============
215
+
216
+ Ver estado:
217
+ git remote -v
218
+ git branch -vv
219
+ cat .sdd/sdd.config.yaml
220
+ gh repo view
221
+
222
+ Verificar token:
223
+ gh auth status
224
+ echo $GITHUB_TOKEN
225
+
226
+ Ver logs:
227
+ git log --oneline -5
228
+ cat /tmp/push-output.log
229
+
230
+ Resetear (si necesario):
231
+ git remote remove origin
232
+ rm -rf .sdd/sdd.config.yaml
233
+ rm -rf .git (¡cuidado!)
234
+
235
+
236
+ NOTAS DE SEGURIDAD
237
+ ==================
238
+
239
+ - El token NUNCA se loguea o imprime en pantalla
240
+ - El token se almacena solo en memoria durante ejecución
241
+ - La configuración guardada (.sdd/sdd.config.yaml) no contiene tokens
242
+ - Usa HTTPS seguro para comunicación
243
+ - El script valida entrada antes de ejecutar comandos
244
+
245
+ Safe to commit:
246
+ ✓ .sdd/sdd.config.yaml
247
+ ✓ .git/config (sin tokens)
248
+
249
+ Never commit:
250
+ ✗ GITHUB_TOKEN
251
+ ✗ GitHub secrets
252
+ ✗ SSH keys
@@ -0,0 +1,41 @@
1
+ # Ejemplo de configuración generada por github-connect skill
2
+ # Este archivo se crea automáticamente en .sdd/sdd.config.yaml
3
+
4
+ git:
5
+ # URL del repositorio remoto
6
+ remote_url: "https://github.com/usuario/nombre-proyecto.git"
7
+
8
+ # Estado de conexión a GitHub
9
+ connected: true
10
+
11
+ # Timestamp de cuándo se conectó
12
+ connected_at: "2026-06-13T14:32:45Z"
13
+
14
+ # Usuario de GitHub asociado
15
+ github_user: "usuario"
16
+
17
+ # Nombre del repositorio
18
+ repo_name: "nombre-proyecto"
19
+
20
+ # Rama principal
21
+ branch: "main"
22
+
23
+ # Visibilidad del repositorio (public/private)
24
+ visibility: "public"
25
+
26
+ # Notas:
27
+ # - Este archivo es generado automáticamente por el skill github-connect
28
+ # - No contiene tokens o credenciales (seguro de commitear)
29
+ # - Se usa para documentar la configuración de GitHub del proyecto
30
+ # - Útil para integración con otros tools y scripts de SDD-ES
31
+
32
+ # Ejemplo con repositorio privado:
33
+ #
34
+ # git:
35
+ # remote_url: "https://github.com/usuario/proyecto-privado.git"
36
+ # connected: true
37
+ # connected_at: "2026-06-13T14:32:45Z"
38
+ # github_user: "usuario"
39
+ # repo_name: "proyecto-privado"
40
+ # branch: "main"
41
+ # visibility: "private"
@@ -0,0 +1,419 @@
1
+ #!/bin/bash
2
+
3
+ ################################################################################
4
+ # GitHub Connect Skill - Helper Script
5
+ # Automatiza la conexión de un proyecto a GitHub
6
+ ################################################################################
7
+
8
+ set -euo pipefail
9
+
10
+ # Colores para output
11
+ RED='\033[0;31m'
12
+ GREEN='\033[0;32m'
13
+ YELLOW='\033[1;33m'
14
+ BLUE='\033[0;34m'
15
+ NC='\033[0m' # No Color
16
+
17
+ # Variables por defecto
18
+ GITHUB_TOKEN="${GITHUB_TOKEN:-}"
19
+ REPO_NAME="${1:-$(basename "$(pwd)")}"
20
+ REPO_DESCRIPTION="${2:-Proyecto SDD-ES}"
21
+ REPO_VISIBILITY="${3:-public}"
22
+ BRANCH_NAME="main"
23
+ AUTO_INIT_COMMIT=true
24
+
25
+ ################################################################################
26
+ # Funciones Auxiliares
27
+ ################################################################################
28
+
29
+ log_info() {
30
+ echo -e "${BLUE}ℹ️ $1${NC}"
31
+ }
32
+
33
+ log_success() {
34
+ echo -e "${GREEN}✅ $1${NC}"
35
+ }
36
+
37
+ log_warning() {
38
+ echo -e "${YELLOW}⚠️ $1${NC}"
39
+ }
40
+
41
+ log_error() {
42
+ echo -e "${RED}❌ $1${NC}"
43
+ }
44
+
45
+ log_section() {
46
+ echo ""
47
+ echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
48
+ echo -e "${BLUE}$1${NC}"
49
+ echo -e "${BLUE}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
50
+ }
51
+
52
+ ################################################################################
53
+ # 1. Validación del Token GitHub
54
+ ################################################################################
55
+
56
+ validate_github_token() {
57
+ log_section "1. Validando Token de GitHub"
58
+
59
+ if [ -z "$GITHUB_TOKEN" ]; then
60
+ log_error "GITHUB_TOKEN no configurado"
61
+ echo ""
62
+ echo "Pasos para configurar:"
63
+ echo "1. Ve a: https://github.com/settings/tokens?type=beta"
64
+ echo "2. Click 'Generate new token (beta)'"
65
+ echo "3. Nombre: 'SDD-ES CLI'"
66
+ echo "4. Permisos: repo (todos), user:email"
67
+ echo "5. Copia el token"
68
+ echo "6. Exporta: export GITHUB_TOKEN=ghp_xxxxx"
69
+ echo ""
70
+ echo "Documentación: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token"
71
+ return 1
72
+ fi
73
+
74
+ # Validar que gh está instalado
75
+ if ! command -v gh &> /dev/null; then
76
+ log_error "GitHub CLI (gh) no está instalado"
77
+ echo "Descárgalo desde: https://cli.github.com/"
78
+ return 1
79
+ fi
80
+
81
+ # Exportar token para gh
82
+ export GH_TOKEN="$GITHUB_TOKEN"
83
+
84
+ # Probar autenticación
85
+ if ! gh auth status --show-token &> /dev/null; then
86
+ log_error "Token de GitHub inválido o expirado"
87
+ echo ""
88
+ echo "Genera uno nuevo:"
89
+ echo "https://github.com/settings/tokens?type=beta"
90
+ echo ""
91
+ echo "Permisos requeridos:"
92
+ echo " - repo (todos los scopes)"
93
+ echo " - user:email"
94
+ return 1
95
+ fi
96
+
97
+ log_success "Token válido"
98
+ return 0
99
+ }
100
+
101
+ ################################################################################
102
+ # 2. Obtener Información del Usuario
103
+ ################################################################################
104
+
105
+ get_github_info() {
106
+ log_section "2. Obteniendo Información de GitHub"
107
+
108
+ GITHUB_USER=$(gh api user --jq .login 2>/dev/null)
109
+ if [ -z "$GITHUB_USER" ]; then
110
+ log_error "No se pudo obtener usuario de GitHub"
111
+ return 1
112
+ fi
113
+
114
+ log_success "Usuario: $GITHUB_USER"
115
+
116
+ # Mostrar configuración
117
+ echo ""
118
+ log_info "Configuración del repositorio:"
119
+ echo " Nombre: $REPO_NAME"
120
+ echo " Descripción: $REPO_DESCRIPTION"
121
+ echo " Visibilidad: $REPO_VISIBILITY"
122
+ echo " Rama: $BRANCH_NAME"
123
+
124
+ return 0
125
+ }
126
+
127
+ ################################################################################
128
+ # 3. Verificar si Git está Inicializado
129
+ ################################################################################
130
+
131
+ check_git_repo() {
132
+ log_section "3. Verificando Repositorio Git"
133
+
134
+ if [ ! -d ".git" ]; then
135
+ log_error "Este directorio no es un repositorio Git"
136
+ echo ""
137
+ echo "Inicializa uno con:"
138
+ echo " git init"
139
+ echo " git config user.name 'Tu Nombre'"
140
+ echo " git config user.email 'tu@email.com'"
141
+ return 1
142
+ fi
143
+
144
+ # Verificar configuración de usuario
145
+ if ! git config user.name &> /dev/null || ! git config user.email &> /dev/null; then
146
+ log_warning "Git no tiene user.name o user.email configurado"
147
+ echo ""
148
+ echo "Configura:"
149
+ echo " git config user.name 'Tu Nombre'"
150
+ echo " git config user.email 'tu@email.com'"
151
+ return 1
152
+ fi
153
+
154
+ log_success "Git inicializado correctamente"
155
+ return 0
156
+ }
157
+
158
+ ################################################################################
159
+ # 4. Verificar Existencia del Repositorio
160
+ ################################################################################
161
+
162
+ check_repo_exists() {
163
+ log_section "4. Verificando Repositorio en GitHub"
164
+
165
+ if gh repo view "$GITHUB_USER/$REPO_NAME" --json name &> /dev/null; then
166
+ log_warning "El repositorio '$REPO_NAME' ya existe en GitHub"
167
+ REPO_EXISTS=true
168
+ REPO_URL="https://github.com/$GITHUB_USER/$REPO_NAME"
169
+ echo " URL: $REPO_URL"
170
+ else
171
+ REPO_EXISTS=false
172
+ log_info "Repositorio no existe, se creará nuevo"
173
+ fi
174
+
175
+ return 0
176
+ }
177
+
178
+ ################################################################################
179
+ # 5. Crear Repositorio
180
+ ################################################################################
181
+
182
+ create_github_repo() {
183
+ if [ "$REPO_EXISTS" = true ]; then
184
+ log_info "Usando repositorio existente"
185
+ return 0
186
+ fi
187
+
188
+ log_section "5. Creando Repositorio en GitHub"
189
+
190
+ if ! gh repo create "$REPO_NAME" \
191
+ --description "$REPO_DESCRIPTION" \
192
+ --"$REPO_VISIBILITY" \
193
+ --source=. \
194
+ --remote=origin \
195
+ --push 2>&1 | tee /tmp/gh-output.log; then
196
+
197
+ log_error "Error al crear el repositorio"
198
+ cat /tmp/gh-output.log
199
+ return 1
200
+ fi
201
+
202
+ log_success "Repositorio creado en GitHub"
203
+ return 0
204
+ }
205
+
206
+ ################################################################################
207
+ # 6. Configurar Remote
208
+ ################################################################################
209
+
210
+ setup_remote() {
211
+ log_section "6. Configurando Remote"
212
+
213
+ REMOTE_URL="https://github.com/$GITHUB_USER/$REPO_NAME.git"
214
+
215
+ # Verificar si ya existe origin
216
+ if git remote get-url origin &> /dev/null; then
217
+ EXISTING_URL=$(git remote get-url origin)
218
+ if [ "$EXISTING_URL" = "$REMOTE_URL" ]; then
219
+ log_success "Remote ya configurado correctamente"
220
+ return 0
221
+ else
222
+ log_warning "Remote existente con URL diferente: $EXISTING_URL"
223
+ echo "Removiendo remote anterior..."
224
+ git remote remove origin
225
+ fi
226
+ fi
227
+
228
+ git remote add origin "$REMOTE_URL"
229
+ log_success "Remote configurado: $REMOTE_URL"
230
+ return 0
231
+ }
232
+
233
+ ################################################################################
234
+ # 7. Hacer Commit Inicial
235
+ ################################################################################
236
+
237
+ create_initial_commit() {
238
+ if [ "$AUTO_INIT_COMMIT" != true ]; then
239
+ log_info "Skipping commit inicial (AUTO_INIT_COMMIT=false)"
240
+ return 0
241
+ fi
242
+
243
+ log_section "7. Creando Commit Inicial"
244
+
245
+ # Verificar cambios pendientes
246
+ if git diff-index --quiet HEAD 2>/dev/null; then
247
+ log_info "No hay cambios para commitear"
248
+ return 0
249
+ fi
250
+
251
+ git add -A
252
+ git commit -m "feat: Inicialización del proyecto SDD-ES
253
+
254
+ - Proyecto conectado a GitHub
255
+ - Configuración inicial completada" || log_warning "Commit fallido o sin cambios"
256
+
257
+ log_success "Commit inicial creado"
258
+ return 0
259
+ }
260
+
261
+ ################################################################################
262
+ # 8. Configurar Rama Principal
263
+ ################################################################################
264
+
265
+ setup_main_branch() {
266
+ log_section "8. Configurando Rama Principal"
267
+
268
+ # Obtener rama actual
269
+ CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || echo "master")
270
+
271
+ # Si no es main, renombrar
272
+ if [ "$CURRENT_BRANCH" != "$BRANCH_NAME" ]; then
273
+ log_info "Renombrando rama '$CURRENT_BRANCH' a '$BRANCH_NAME'"
274
+ git branch -M "$BRANCH_NAME" || log_warning "No se pudo renombrar rama"
275
+ fi
276
+
277
+ log_success "Rama principal: $BRANCH_NAME"
278
+ return 0
279
+ }
280
+
281
+ ################################################################################
282
+ # 9. Push Inicial
283
+ ################################################################################
284
+
285
+ initial_push() {
286
+ log_section "9. Haciendo Push Inicial"
287
+
288
+ if ! git push -u origin "$BRANCH_NAME" 2>&1 | tee /tmp/push-output.log; then
289
+ # Permitir fallo si no hay commits
290
+ if grep -q "no changes added" /tmp/push-output.log; then
291
+ log_warning "No hay commits para pushear"
292
+ else
293
+ log_error "Error en push"
294
+ cat /tmp/push-output.log
295
+ return 1
296
+ fi
297
+ fi
298
+
299
+ log_success "Push completado"
300
+ return 0
301
+ }
302
+
303
+ ################################################################################
304
+ # 10. Guardar Configuración Local
305
+ ################################################################################
306
+
307
+ save_config() {
308
+ log_section "10. Guardando Configuración Local"
309
+
310
+ mkdir -p .sdd
311
+
312
+ cat > .sdd/sdd.config.yaml << EOF
313
+ # Configuración de GitHub - SDD-ES
314
+ # Auto-generado por: github-connect skill
315
+ git:
316
+ remote_url: "https://github.com/$GITHUB_USER/$REPO_NAME.git"
317
+ connected: true
318
+ connected_at: "$(date -u +%Y-%m-%dT%H:%M:%SZ)"
319
+ github_user: "$GITHUB_USER"
320
+ repo_name: "$REPO_NAME"
321
+ branch: "$BRANCH_NAME"
322
+ visibility: "$REPO_VISIBILITY"
323
+ EOF
324
+
325
+ log_success "Configuración guardada en .sdd/sdd.config.yaml"
326
+
327
+ # Commitear configuración
328
+ if [ "$AUTO_INIT_COMMIT" = true ]; then
329
+ git add .sdd/sdd.config.yaml
330
+ git commit -m "chore: Configuración de GitHub" 2>/dev/null || true
331
+ git push origin "$BRANCH_NAME" 2>/dev/null || true
332
+ fi
333
+
334
+ return 0
335
+ }
336
+
337
+ ################################################################################
338
+ # 11. Validación Post-Ejecución
339
+ ################################################################################
340
+
341
+ validate_result() {
342
+ log_section "11. Validación Final"
343
+
344
+ # Verificar remote
345
+ if git remote get-url origin &> /dev/null; then
346
+ log_success "Remote configurado"
347
+ else
348
+ log_error "Remote no está configurado"
349
+ return 1
350
+ fi
351
+
352
+ # Verificar upstream
353
+ if git branch -vv | grep -q "$BRANCH_NAME.*origin/$BRANCH_NAME"; then
354
+ log_success "Rama upstream configurada"
355
+ else
356
+ log_warning "Rama upstream no configurada"
357
+ fi
358
+
359
+ # Verificar configuración local
360
+ if [ -f ".sdd/sdd.config.yaml" ]; then
361
+ log_success "Configuración local guardada"
362
+ else
363
+ log_warning "Configuración local no guardada"
364
+ fi
365
+
366
+ return 0
367
+ }
368
+
369
+ ################################################################################
370
+ # Mostrar Resumen Final
371
+ ################################################################################
372
+
373
+ show_summary() {
374
+ echo ""
375
+ log_section "✨ CONEXIÓN A GITHUB COMPLETADA"
376
+ echo ""
377
+ echo "📊 Resumen:"
378
+ echo " Repositorio: $REPO_NAME"
379
+ echo " Usuario: $GITHUB_USER"
380
+ echo " Rama: $BRANCH_NAME"
381
+ echo " Visibilidad: $REPO_VISIBILITY"
382
+ echo ""
383
+ echo "🔗 URL: https://github.com/$GITHUB_USER/$REPO_NAME"
384
+ echo ""
385
+ echo "Próximos pasos:"
386
+ echo " 1. Abre el repositorio: gh repo view -w $GITHUB_USER/$REPO_NAME"
387
+ echo " 2. Haz cambios y usa: git push origin main"
388
+ echo " 3. Invita colaboradores desde GitHub"
389
+ echo ""
390
+ }
391
+
392
+ ################################################################################
393
+ # Main Function
394
+ ################################################################################
395
+
396
+ main() {
397
+ log_section "GitHub Connect - SDD-ES Skill"
398
+ echo "Proyecto: $(pwd)"
399
+ echo ""
400
+
401
+ # Ejecutar pasos
402
+ validate_github_token || return 1
403
+ get_github_info || return 1
404
+ check_git_repo || return 1
405
+ check_repo_exists || return 1
406
+ create_github_repo || return 1
407
+ setup_remote || return 1
408
+ create_initial_commit || return 1
409
+ setup_main_branch || return 1
410
+ initial_push || return 1
411
+ save_config || return 1
412
+ validate_result || return 1
413
+
414
+ show_summary
415
+ return 0
416
+ }
417
+
418
+ # Ejecutar main
419
+ main "$@"