specleap-framework 2.0.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.
- package/.agents/backend.md +419 -0
- package/.agents/frontend.md +577 -0
- package/.agents/producto.md +516 -0
- package/.commands/adoptar.md +323 -0
- package/.commands/ayuda.md +142 -0
- package/.commands/crear-tickets.md +55 -0
- package/.commands/documentar.md +285 -0
- package/.commands/explicar.md +234 -0
- package/.commands/implementar.md +383 -0
- package/.commands/inicio.md +824 -0
- package/.commands/nuevo/README.md +292 -0
- package/.commands/nuevo/questions-base.yaml +320 -0
- package/.commands/nuevo/responses-example.yaml +53 -0
- package/.commands/planificar.md +253 -0
- package/.commands/refinar.md +306 -0
- package/LICENSE +21 -0
- package/README.md +603 -0
- package/SETUP.md +351 -0
- package/install.sh +152 -0
- package/package.json +60 -0
- package/proyectos/_template/.gitkeep +1 -0
- package/proyectos/_template/ANEXOS.md +21 -0
- package/proyectos/_template/CONTRATO.md +26 -0
- package/proyectos/_template/context/.gitkeep +1 -0
- package/rules/development-rules.md +113 -0
- package/rules/environment-protection.md +97 -0
- package/rules/git-workflow.md +142 -0
- package/rules/session-protocol.md +121 -0
- package/scripts/README.md +129 -0
- package/scripts/analyze-project.sh +826 -0
- package/scripts/create-asana-tasks.sh +133 -0
- package/scripts/detect-project-type.sh +141 -0
- package/scripts/estimate-effort.sh +290 -0
- package/scripts/generate-asana-structure.sh +262 -0
- package/scripts/generate-contract.sh +360 -0
- package/scripts/generate-contrato.sh +555 -0
- package/scripts/install-git-hooks.sh +141 -0
- package/scripts/install-skills.sh +130 -0
- package/scripts/lib/asana-utils.sh +191 -0
- package/scripts/lib/jira-project-utils.sh +222 -0
- package/scripts/lib/questions.json +831 -0
- package/scripts/lib/render-contrato.py +195 -0
- package/scripts/lib/validate.sh +325 -0
- package/scripts/parse-contrato.sh +190 -0
- package/scripts/setup-mcp.sh +654 -0
- package/scripts/test-cuestionario.sh +428 -0
- package/setup.sh +458 -0
package/setup.sh
ADDED
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# SpecLeap — Instalador Profesional Completo
|
|
3
|
+
# Versión 2.0 — Instalación guiada con todos los tokens
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
# Colores
|
|
8
|
+
RED='\033[0;31m'
|
|
9
|
+
GREEN='\033[0;32m'
|
|
10
|
+
YELLOW='\033[1;33m'
|
|
11
|
+
BLUE='\033[0;34m'
|
|
12
|
+
CYAN='\033[0;36m'
|
|
13
|
+
BOLD='\033[1m'
|
|
14
|
+
NC='\033[0m'
|
|
15
|
+
|
|
16
|
+
# Ancho terminal
|
|
17
|
+
COLS=$(tput cols 2>/dev/null || echo 80)
|
|
18
|
+
LINE=$(printf '%*s\n' "$COLS" '' | tr ' ' '═')
|
|
19
|
+
|
|
20
|
+
clear
|
|
21
|
+
|
|
22
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
23
|
+
echo -e "${CYAN}${BOLD}"
|
|
24
|
+
cat << "EOF"
|
|
25
|
+
_____ ____ ___________ __ _________ ____
|
|
26
|
+
/ ___// __ \/ ____/ ____/ / / / ____/ | / __ \
|
|
27
|
+
\__ \/ /_/ / __/ / / / / / __/ / /| | / /_/ /
|
|
28
|
+
___/ / ____/ /___/ /___ / /___/ /___/ ___ |/ ____/
|
|
29
|
+
/____/_/ /_____/\____/ /_____/_____/_/ |_/_/
|
|
30
|
+
|
|
31
|
+
EOF
|
|
32
|
+
echo -e "${NC}${CYAN}${LINE}${NC}"
|
|
33
|
+
echo -e "${GREEN}${BOLD} Spec-Driven Development Framework${NC}"
|
|
34
|
+
echo -e "${YELLOW} v2.0.0 — Instalador Profesional${NC}"
|
|
35
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
36
|
+
echo ""
|
|
37
|
+
|
|
38
|
+
# ============================================
|
|
39
|
+
# PASO 1: Selección de Idioma
|
|
40
|
+
# ============================================
|
|
41
|
+
|
|
42
|
+
echo -e "${BLUE}${BOLD}Paso 1/6: Idioma / Language${NC}"
|
|
43
|
+
echo ""
|
|
44
|
+
echo " 1) Español"
|
|
45
|
+
echo " 2) English"
|
|
46
|
+
echo ""
|
|
47
|
+
read -p "$(echo -e ${YELLOW}Selecciona / Select [1-2]:${NC} )" lang_choice
|
|
48
|
+
|
|
49
|
+
case $lang_choice in
|
|
50
|
+
1) LANG="es" ;;
|
|
51
|
+
2) LANG="en" ;;
|
|
52
|
+
*) LANG="es" ;;
|
|
53
|
+
esac
|
|
54
|
+
|
|
55
|
+
# Textos según idioma
|
|
56
|
+
if [ "$LANG" = "es" ]; then
|
|
57
|
+
MSG_WELCOME="¡Bienvenido a SpecLeap!"
|
|
58
|
+
MSG_INSTALL_TIME="⏱️ Tiempo estimado: 10-15 minutos"
|
|
59
|
+
MSG_REQUIREMENTS="Verificando requisitos del sistema..."
|
|
60
|
+
MSG_GITHUB="Paso 2/6: Configuración GitHub"
|
|
61
|
+
MSG_ASANA="Paso 3/6: Configuración Asana (Obligatorio)"
|
|
62
|
+
MSG_SKILLS="Paso 4/6: Agent Skills (20 skills)"
|
|
63
|
+
MSG_CODERABBIT="Paso 5/6: CodeRabbit"
|
|
64
|
+
MSG_FINAL="Paso 6/6: Finalizando"
|
|
65
|
+
MSG_SUCCESS="✅ ¡Instalación completa!"
|
|
66
|
+
MSG_NEXT_STEPS="Próximos pasos:"
|
|
67
|
+
MSG_ERROR="❌ Error:"
|
|
68
|
+
else
|
|
69
|
+
MSG_WELCOME="Welcome to SpecLeap!"
|
|
70
|
+
MSG_INSTALL_TIME="⏱️ Estimated time: 10-15 minutes"
|
|
71
|
+
MSG_REQUIREMENTS="Checking system requirements..."
|
|
72
|
+
MSG_GITHUB="Step 2/6: GitHub Setup"
|
|
73
|
+
MSG_ASANA="Step 3/6: Asana Setup (Required)"
|
|
74
|
+
MSG_SKILLS="Step 4/6: Agent Skills (20 skills)"
|
|
75
|
+
MSG_CODERABBIT="Step 5/6: CodeRabbit"
|
|
76
|
+
MSG_FINAL="Step 6/6: Finishing"
|
|
77
|
+
MSG_SUCCESS="✅ Installation complete!"
|
|
78
|
+
MSG_NEXT_STEPS="Next steps:"
|
|
79
|
+
MSG_ERROR="❌ Error:"
|
|
80
|
+
fi
|
|
81
|
+
|
|
82
|
+
echo ""
|
|
83
|
+
echo -e "${GREEN}${BOLD}$MSG_WELCOME${NC}"
|
|
84
|
+
echo -e "${YELLOW}$MSG_INSTALL_TIME${NC}"
|
|
85
|
+
echo ""
|
|
86
|
+
sleep 2
|
|
87
|
+
|
|
88
|
+
# ============================================
|
|
89
|
+
# VERIFICACIONES PREVIAS
|
|
90
|
+
# ============================================
|
|
91
|
+
|
|
92
|
+
echo -e "${CYAN}${BOLD}$MSG_REQUIREMENTS${NC}"
|
|
93
|
+
echo ""
|
|
94
|
+
|
|
95
|
+
# Node.js
|
|
96
|
+
if ! command -v node &> /dev/null; then
|
|
97
|
+
echo -e "${RED}$MSG_ERROR Node.js not installed${NC}"
|
|
98
|
+
echo "Install from: https://nodejs.org"
|
|
99
|
+
exit 1
|
|
100
|
+
fi
|
|
101
|
+
echo -e "${GREEN}✅ Node.js:${NC} $(node --version)"
|
|
102
|
+
|
|
103
|
+
# npm
|
|
104
|
+
if ! command -v npm &> /dev/null; then
|
|
105
|
+
echo -e "${RED}$MSG_ERROR npm not installed${NC}"
|
|
106
|
+
exit 1
|
|
107
|
+
fi
|
|
108
|
+
echo -e "${GREEN}✅ npm:${NC} $(npm --version)"
|
|
109
|
+
|
|
110
|
+
# Git
|
|
111
|
+
if ! command -v git &> /dev/null; then
|
|
112
|
+
echo -e "${RED}$MSG_ERROR Git not installed${NC}"
|
|
113
|
+
echo "Install Git: https://git-scm.com"
|
|
114
|
+
exit 1
|
|
115
|
+
fi
|
|
116
|
+
echo -e "${GREEN}✅ Git:${NC} $(git --version | cut -d' ' -f3)"
|
|
117
|
+
|
|
118
|
+
# curl
|
|
119
|
+
if ! command -v curl &> /dev/null; then
|
|
120
|
+
echo -e "${RED}$MSG_ERROR curl not installed${NC}"
|
|
121
|
+
exit 1
|
|
122
|
+
fi
|
|
123
|
+
echo -e "${GREEN}✅ curl:${NC} available"
|
|
124
|
+
|
|
125
|
+
echo ""
|
|
126
|
+
sleep 1
|
|
127
|
+
|
|
128
|
+
# ============================================
|
|
129
|
+
# PASO 2: GitHub
|
|
130
|
+
# ============================================
|
|
131
|
+
|
|
132
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
133
|
+
echo -e "${BLUE}${BOLD}$MSG_GITHUB${NC}"
|
|
134
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
135
|
+
echo ""
|
|
136
|
+
|
|
137
|
+
if [ "$LANG" = "es" ]; then
|
|
138
|
+
echo "SpecLeap necesita GitHub para:"
|
|
139
|
+
echo " • Control de versiones del CONTRATO.md"
|
|
140
|
+
echo " • Integración con CodeRabbit (code review automático)"
|
|
141
|
+
echo " • Historial de cambios y decisiones"
|
|
142
|
+
echo ""
|
|
143
|
+
echo "🔗 Obtén tu token en: ${CYAN}https://github.com/settings/tokens${NC}"
|
|
144
|
+
echo " Permisos necesarios: repo, workflow"
|
|
145
|
+
echo ""
|
|
146
|
+
else
|
|
147
|
+
echo "SpecLeap needs GitHub for:"
|
|
148
|
+
echo " • CONTRACT.md version control"
|
|
149
|
+
echo " • CodeRabbit integration (automatic code review)"
|
|
150
|
+
echo " • Change and decision history"
|
|
151
|
+
echo ""
|
|
152
|
+
echo "🔗 Get your token at: ${CYAN}https://github.com/settings/tokens${NC}"
|
|
153
|
+
echo " Required scopes: repo, workflow"
|
|
154
|
+
echo ""
|
|
155
|
+
fi
|
|
156
|
+
|
|
157
|
+
read -p "$(echo -e ${YELLOW}GitHub Token:${NC} )" GITHUB_TOKEN
|
|
158
|
+
echo ""
|
|
159
|
+
|
|
160
|
+
if [ -z "$GITHUB_TOKEN" ]; then
|
|
161
|
+
echo -e "${RED}$MSG_ERROR GitHub token is required${NC}"
|
|
162
|
+
exit 1
|
|
163
|
+
fi
|
|
164
|
+
|
|
165
|
+
# Verificar token
|
|
166
|
+
echo -ne "Verificando token... "
|
|
167
|
+
GITHUB_USER=$(curl -s -H "Authorization: token $GITHUB_TOKEN" https://api.github.com/user | grep -o '"login": "[^"]*' | cut -d'"' -f4)
|
|
168
|
+
|
|
169
|
+
if [ -z "$GITHUB_USER" ]; then
|
|
170
|
+
echo -e "${RED}❌ Token inválido${NC}"
|
|
171
|
+
exit 1
|
|
172
|
+
fi
|
|
173
|
+
|
|
174
|
+
echo -e "${GREEN}✅ Token válido (Usuario: $GITHUB_USER)${NC}"
|
|
175
|
+
echo ""
|
|
176
|
+
sleep 1
|
|
177
|
+
|
|
178
|
+
# ============================================
|
|
179
|
+
# PASO 3: Asana (OBLIGATORIO)
|
|
180
|
+
# ============================================
|
|
181
|
+
|
|
182
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
183
|
+
echo -e "${BLUE}${BOLD}$MSG_ASANA${NC}"
|
|
184
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
185
|
+
echo ""
|
|
186
|
+
|
|
187
|
+
if [ "$LANG" = "es" ]; then
|
|
188
|
+
echo "⚠️ ${YELLOW}Asana es OBLIGATORIO para usar SpecLeap${NC}"
|
|
189
|
+
echo ""
|
|
190
|
+
echo "Asana te permite:"
|
|
191
|
+
echo " • Generar backlog automático desde CONTRATO.md"
|
|
192
|
+
echo " • Comando 'planificar' crea épicas + user stories"
|
|
193
|
+
echo " • Tracking de progreso"
|
|
194
|
+
echo ""
|
|
195
|
+
echo "📋 Cómo obtener tu token:"
|
|
196
|
+
echo " 1. Ve a: ${CYAN}https://app.asana.com/0/my-apps${NC}"
|
|
197
|
+
echo " 2. Click 'Create new token'"
|
|
198
|
+
echo " 3. Nombre: 'SpecLeap Integration'"
|
|
199
|
+
echo " 4. Copia el token (empieza con '0/')"
|
|
200
|
+
echo ""
|
|
201
|
+
else
|
|
202
|
+
echo "⚠️ ${YELLOW}Asana is REQUIRED to use SpecLeap${NC}"
|
|
203
|
+
echo ""
|
|
204
|
+
echo "Asana allows you to:"
|
|
205
|
+
echo " • Auto-generate backlog from CONTRACT.md"
|
|
206
|
+
echo " • 'planificar' command creates epics + user stories"
|
|
207
|
+
echo " • Progress tracking"
|
|
208
|
+
echo ""
|
|
209
|
+
echo "📋 How to get your token:"
|
|
210
|
+
echo " 1. Go to: ${CYAN}https://app.asana.com/0/my-apps${NC}"
|
|
211
|
+
echo " 2. Click 'Create new token'"
|
|
212
|
+
echo " 3. Name: 'SpecLeap Integration'"
|
|
213
|
+
echo " 4. Copy token (starts with '0/')"
|
|
214
|
+
echo ""
|
|
215
|
+
fi
|
|
216
|
+
|
|
217
|
+
read -p "$(echo -e ${YELLOW}Asana Token:${NC} )" ASANA_TOKEN
|
|
218
|
+
echo ""
|
|
219
|
+
|
|
220
|
+
if [ -z "$ASANA_TOKEN" ]; then
|
|
221
|
+
echo -e "${RED}$MSG_ERROR Asana token is required${NC}"
|
|
222
|
+
exit 1
|
|
223
|
+
fi
|
|
224
|
+
|
|
225
|
+
# Verificar token y obtener workspace
|
|
226
|
+
echo -ne "Verificando token Asana... "
|
|
227
|
+
ASANA_RESPONSE=$(curl -s -H "Authorization: Bearer $ASANA_TOKEN" https://app.asana.com/api/1.0/workspaces)
|
|
228
|
+
|
|
229
|
+
if echo "$ASANA_RESPONSE" | grep -q '"gid"'; then
|
|
230
|
+
echo -e "${GREEN}✅ Token válido${NC}"
|
|
231
|
+
echo ""
|
|
232
|
+
|
|
233
|
+
# Listar workspaces disponibles
|
|
234
|
+
if [ "$LANG" = "es" ]; then
|
|
235
|
+
echo "Workspaces disponibles:"
|
|
236
|
+
else
|
|
237
|
+
echo "Available workspaces:"
|
|
238
|
+
fi
|
|
239
|
+
echo ""
|
|
240
|
+
|
|
241
|
+
# Extraer workspaces (simple parsing)
|
|
242
|
+
WORKSPACE_COUNT=0
|
|
243
|
+
while IFS= read -r line; do
|
|
244
|
+
if echo "$line" | grep -q '"gid"'; then
|
|
245
|
+
WORKSPACE_COUNT=$((WORKSPACE_COUNT + 1))
|
|
246
|
+
WS_GID=$(echo "$line" | grep -o '"gid":"[^"]*' | cut -d'"' -f4)
|
|
247
|
+
WS_NAME=$(echo "$ASANA_RESPONSE" | grep -A1 "\"gid\":\"$WS_GID\"" | grep '"name"' | grep -o '"name":"[^"]*' | cut -d'"' -f4)
|
|
248
|
+
echo " $WORKSPACE_COUNT) $WS_NAME (ID: $WS_GID)"
|
|
249
|
+
|
|
250
|
+
# Guardar primer workspace como default
|
|
251
|
+
if [ $WORKSPACE_COUNT -eq 1 ]; then
|
|
252
|
+
DEFAULT_WORKSPACE_ID="$WS_GID"
|
|
253
|
+
fi
|
|
254
|
+
fi
|
|
255
|
+
done < <(echo "$ASANA_RESPONSE" | grep '"gid"')
|
|
256
|
+
|
|
257
|
+
echo ""
|
|
258
|
+
if [ "$LANG" = "es" ]; then
|
|
259
|
+
read -p "$(echo -e ${YELLOW}Workspace ID [Enter para usar el primero]:${NC} )" ASANA_WORKSPACE_INPUT
|
|
260
|
+
else
|
|
261
|
+
read -p "$(echo -e ${YELLOW}Workspace ID [Enter to use first]:${NC} )" ASANA_WORKSPACE_INPUT
|
|
262
|
+
fi
|
|
263
|
+
|
|
264
|
+
if [ -z "$ASANA_WORKSPACE_INPUT" ]; then
|
|
265
|
+
ASANA_WORKSPACE_ID="$DEFAULT_WORKSPACE_ID"
|
|
266
|
+
else
|
|
267
|
+
ASANA_WORKSPACE_ID="$ASANA_WORKSPACE_INPUT"
|
|
268
|
+
fi
|
|
269
|
+
|
|
270
|
+
echo -e "${GREEN}✅ Workspace seleccionado: $ASANA_WORKSPACE_ID${NC}"
|
|
271
|
+
else
|
|
272
|
+
echo -e "${RED}❌ Token inválido${NC}"
|
|
273
|
+
exit 1
|
|
274
|
+
fi
|
|
275
|
+
|
|
276
|
+
echo ""
|
|
277
|
+
sleep 1
|
|
278
|
+
|
|
279
|
+
# ============================================
|
|
280
|
+
# PASO 4: Agent Skills (20 TIER 1)
|
|
281
|
+
# ============================================
|
|
282
|
+
|
|
283
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
284
|
+
echo -e "${BLUE}${BOLD}$MSG_SKILLS${NC}"
|
|
285
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
286
|
+
echo ""
|
|
287
|
+
|
|
288
|
+
if [ "$LANG" = "es" ]; then
|
|
289
|
+
echo "SpecLeap incluye 20 Agent Skills profesionales:"
|
|
290
|
+
echo " • 5 Seguridad (OWASP, STRIDE)"
|
|
291
|
+
echo " • 3 Consistencia (verification-before-completion)"
|
|
292
|
+
echo " • 6 Diseño (Vercel-style, UI/UX)"
|
|
293
|
+
echo " • 6 Backend/Dev (Laravel, React, TDD)"
|
|
294
|
+
echo ""
|
|
295
|
+
echo "⏱️ Tiempo: 2-3 minutos"
|
|
296
|
+
echo ""
|
|
297
|
+
else
|
|
298
|
+
echo "SpecLeap includes 20 professional Agent Skills:"
|
|
299
|
+
echo " • 5 Security (OWASP, STRIDE)"
|
|
300
|
+
echo " • 3 Consistency (verification-before-completion)"
|
|
301
|
+
echo " • 6 Design (Vercel-style, UI/UX)"
|
|
302
|
+
echo " • 6 Backend/Dev (Laravel, React, TDD)"
|
|
303
|
+
echo ""
|
|
304
|
+
echo "⏱️ Time: 2-3 minutes"
|
|
305
|
+
echo ""
|
|
306
|
+
fi
|
|
307
|
+
|
|
308
|
+
read -p "$(echo -e ${YELLOW}Instalar Agent Skills? [S/n]:${NC} )" INSTALL_SKILLS
|
|
309
|
+
|
|
310
|
+
if [[ ! "$INSTALL_SKILLS" =~ ^[Nn]$ ]]; then
|
|
311
|
+
bash scripts/install-skills.sh || {
|
|
312
|
+
echo -e "${RED}$MSG_ERROR Skills installation failed${NC}"
|
|
313
|
+
exit 1
|
|
314
|
+
}
|
|
315
|
+
else
|
|
316
|
+
echo -e "${YELLOW}⏭️ Skills omitidas${NC}"
|
|
317
|
+
fi
|
|
318
|
+
|
|
319
|
+
echo ""
|
|
320
|
+
sleep 1
|
|
321
|
+
|
|
322
|
+
# ============================================
|
|
323
|
+
# PASO 5: CodeRabbit
|
|
324
|
+
# ============================================
|
|
325
|
+
|
|
326
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
327
|
+
echo -e "${BLUE}${BOLD}$MSG_CODERABBIT${NC}"
|
|
328
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
329
|
+
echo ""
|
|
330
|
+
|
|
331
|
+
if [ "$LANG" = "es" ]; then
|
|
332
|
+
echo "CodeRabbit hace code review automático en todos tus PRs."
|
|
333
|
+
echo ""
|
|
334
|
+
echo "Se copiará .coderabbit.yaml al proyecto."
|
|
335
|
+
echo "Después deberás instalar la app en GitHub:"
|
|
336
|
+
echo " ${CYAN}https://github.com/apps/coderabbitai${NC}"
|
|
337
|
+
echo ""
|
|
338
|
+
else
|
|
339
|
+
echo "CodeRabbit automatically reviews all your PRs."
|
|
340
|
+
echo ""
|
|
341
|
+
echo ".coderabbit.yaml will be copied to your project."
|
|
342
|
+
echo "Then install the GitHub app:"
|
|
343
|
+
echo " ${CYAN}https://github.com/apps/coderabbitai${NC}"
|
|
344
|
+
echo ""
|
|
345
|
+
fi
|
|
346
|
+
|
|
347
|
+
if [ -f "proyectos/_template/.coderabbit.yaml" ]; then
|
|
348
|
+
cp proyectos/_template/.coderabbit.yaml .coderabbit.yaml
|
|
349
|
+
echo -e "${GREEN}✅ .coderabbit.yaml copiado${NC}"
|
|
350
|
+
else
|
|
351
|
+
echo -e "${YELLOW}⚠️ Template no encontrado, se omite${NC}"
|
|
352
|
+
fi
|
|
353
|
+
|
|
354
|
+
echo ""
|
|
355
|
+
sleep 1
|
|
356
|
+
|
|
357
|
+
# ============================================
|
|
358
|
+
# PASO 6: Guardar Configuración
|
|
359
|
+
# ============================================
|
|
360
|
+
|
|
361
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
362
|
+
echo -e "${BLUE}${BOLD}$MSG_FINAL${NC}"
|
|
363
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
364
|
+
echo ""
|
|
365
|
+
|
|
366
|
+
# Crear directorios
|
|
367
|
+
mkdir -p .specleap
|
|
368
|
+
mkdir -p proyectos
|
|
369
|
+
|
|
370
|
+
# Config JSON
|
|
371
|
+
cat > .specleap/config.json <<EOF
|
|
372
|
+
{
|
|
373
|
+
"version": "2.0.0",
|
|
374
|
+
"language": "$LANG",
|
|
375
|
+
"installed_at": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")",
|
|
376
|
+
"github_user": "$GITHUB_USER",
|
|
377
|
+
"asana_workspace": "$ASANA_WORKSPACE_ID"
|
|
378
|
+
}
|
|
379
|
+
EOF
|
|
380
|
+
|
|
381
|
+
# .env
|
|
382
|
+
cat > .env <<EOF
|
|
383
|
+
# SpecLeap Configuration
|
|
384
|
+
SPECLEAP_LANG=$LANG
|
|
385
|
+
|
|
386
|
+
# GitHub
|
|
387
|
+
GITHUB_TOKEN=$GITHUB_TOKEN
|
|
388
|
+
GITHUB_USER=$GITHUB_USER
|
|
389
|
+
|
|
390
|
+
# Asana (REQUIRED)
|
|
391
|
+
ASANA_ACCESS_TOKEN=$ASANA_TOKEN
|
|
392
|
+
ASANA_WORKSPACE_ID=$ASANA_WORKSPACE_ID
|
|
393
|
+
|
|
394
|
+
# CodeRabbit (installed via GitHub App)
|
|
395
|
+
# https://github.com/apps/coderabbitai
|
|
396
|
+
EOF
|
|
397
|
+
|
|
398
|
+
# Hacer ejecutables los scripts
|
|
399
|
+
chmod +x scripts/*.sh 2>/dev/null || true
|
|
400
|
+
|
|
401
|
+
echo -e "${GREEN}✅ Configuración guardada${NC}"
|
|
402
|
+
echo ""
|
|
403
|
+
|
|
404
|
+
# ============================================
|
|
405
|
+
# RESUMEN FINAL
|
|
406
|
+
# ============================================
|
|
407
|
+
|
|
408
|
+
echo -e "${GREEN}${LINE}${NC}"
|
|
409
|
+
echo -e "${GREEN}${BOLD}"
|
|
410
|
+
echo " ✅ $MSG_SUCCESS"
|
|
411
|
+
echo -e "${NC}${GREEN}${LINE}${NC}"
|
|
412
|
+
echo ""
|
|
413
|
+
|
|
414
|
+
echo -e "${YELLOW}${BOLD}$MSG_NEXT_STEPS${NC}"
|
|
415
|
+
echo ""
|
|
416
|
+
|
|
417
|
+
if [ "$LANG" = "es" ]; then
|
|
418
|
+
echo " ${BOLD}1. Instalar CodeRabbit en GitHub:${NC}"
|
|
419
|
+
echo " ${CYAN}https://github.com/apps/coderabbitai${NC}"
|
|
420
|
+
echo ""
|
|
421
|
+
echo " ${BOLD}2. Ejecutar cuestionario (20 min):${NC}"
|
|
422
|
+
echo " ${GREEN}./scripts/generate-contrato.sh${NC}"
|
|
423
|
+
echo ""
|
|
424
|
+
echo " ${BOLD}3. Push a GitHub:${NC}"
|
|
425
|
+
echo " ${GREEN}git init && git add . && git commit -m 'init: SpecLeap setup'${NC}"
|
|
426
|
+
echo " ${GREEN}git push origin main${NC}"
|
|
427
|
+
echo ""
|
|
428
|
+
echo " ${BOLD}4. Abrir en tu IDE:${NC}"
|
|
429
|
+
echo " ${GREEN}code .${NC} (VSCode)"
|
|
430
|
+
echo " ${GREEN}cursor .${NC} (Cursor)"
|
|
431
|
+
echo ""
|
|
432
|
+
echo " ${BOLD}5. En el chat con la IA, escribe:${NC}"
|
|
433
|
+
echo " ${GREEN}ayuda${NC}"
|
|
434
|
+
echo ""
|
|
435
|
+
else
|
|
436
|
+
echo " ${BOLD}1. Install CodeRabbit on GitHub:${NC}"
|
|
437
|
+
echo " ${CYAN}https://github.com/apps/coderabbitai${NC}"
|
|
438
|
+
echo ""
|
|
439
|
+
echo " ${BOLD}2. Run questionnaire (20 min):${NC}"
|
|
440
|
+
echo " ${GREEN}./scripts/generate-contrato.sh${NC}"
|
|
441
|
+
echo ""
|
|
442
|
+
echo " ${BOLD}3. Push to GitHub:${NC}"
|
|
443
|
+
echo " ${GREEN}git init && git add . && git commit -m 'init: SpecLeap setup'${NC}"
|
|
444
|
+
echo " ${GREEN}git push origin main${NC}"
|
|
445
|
+
echo ""
|
|
446
|
+
echo " ${BOLD}4. Open in your IDE:${NC}"
|
|
447
|
+
echo " ${GREEN}code .${NC} (VSCode)"
|
|
448
|
+
echo " ${GREEN}cursor .${NC} (Cursor)"
|
|
449
|
+
echo ""
|
|
450
|
+
echo " ${BOLD}5. In AI chat, type:${NC}"
|
|
451
|
+
echo " ${GREEN}ayuda${NC}"
|
|
452
|
+
echo ""
|
|
453
|
+
fi
|
|
454
|
+
|
|
455
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
456
|
+
echo ""
|
|
457
|
+
echo -e "${GREEN}${BOLD}¡Disfruta SpecLeap! 🚀${NC}"
|
|
458
|
+
echo ""
|