specleap-framework 2.1.13 → 2.2.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/.commands/explicar.md +3 -3
- package/.commands/implementar.md +2 -2
- package/.commands/inicio.md +381 -24
- package/.commands/nuevo/README.md +4 -4
- package/.commands/nuevo/responses-example.yaml +17 -17
- package/.commands/planificar.md +49 -12
- package/CHANGELOG.md +73 -0
- package/README.md +13 -6
- package/SETUP.md +11 -5
- package/package.json +1 -1
- package/scripts/create-asana-tasks.sh +9 -0
- package/scripts/generate-asana-structure.sh +11 -0
- package/scripts/lib/critical_fields.json +39 -0
- package/scripts/lib/questions.en.json +871 -61
- package/scripts/lib/questions.es.json +872 -62
- package/setup.sh +122 -31
package/setup.sh
CHANGED
|
@@ -48,37 +48,16 @@ echo -e "${YELLOW} v2.0.0 — Instalador Profesional${NC}"
|
|
|
48
48
|
echo -e "${CYAN}${LINE}${NC}"
|
|
49
49
|
echo ""
|
|
50
50
|
|
|
51
|
-
#
|
|
52
|
-
#
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
#
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
CURRENT_FOLDER_NAME="$(basename "$(pwd)")"
|
|
62
|
-
|
|
63
|
-
if [ -z "${SPECLEAP_INSTALL_PATH:-}" ] && [ "$CURRENT_FOLDER_NAME" = "specleap-framework" ]; then
|
|
64
|
-
echo "ℹ️ Esta carpeta se llama 'specleap-framework' (nombre por defecto de git clone)."
|
|
65
|
-
echo " This folder is named 'specleap-framework' (git clone default)."
|
|
66
|
-
echo ""
|
|
67
|
-
echo " Si querías otro nombre / If you wanted a different name:"
|
|
68
|
-
echo " 1) Cancela con Ctrl+C / Cancel with Ctrl+C"
|
|
69
|
-
echo " 2) Vuelve a ejecutar / Run again with:"
|
|
70
|
-
echo " git clone https://github.com/ConceptualCreative/specleap-framework.git mi-proyecto"
|
|
71
|
-
echo " cd mi-proyecto"
|
|
72
|
-
echo " bash setup.sh"
|
|
73
|
-
echo ""
|
|
74
|
-
read -p "¿Continuar con el nombre 'specleap-framework'? / Continue with 'specleap-framework'? [S/n]: " CONTINUE_DEFAULT
|
|
75
|
-
if [[ "$CONTINUE_DEFAULT" =~ ^[Nn]$ ]]; then
|
|
76
|
-
echo ""
|
|
77
|
-
echo "Cancelado por el usuario / Cancelled by user."
|
|
78
|
-
exit 0
|
|
79
|
-
fi
|
|
80
|
-
echo ""
|
|
81
|
-
fi
|
|
51
|
+
# Helper usado por el Paso 2 (nombre de carpeta) más abajo.
|
|
52
|
+
# Definido aquí porque es lógica pura sin dependencia de idioma.
|
|
53
|
+
is_valid_folder_name() {
|
|
54
|
+
local name="$1"
|
|
55
|
+
[ -z "$name" ] && return 1
|
|
56
|
+
[ ${#name} -gt 100 ] && return 1
|
|
57
|
+
[[ "$name" == .* ]] && return 1
|
|
58
|
+
[[ "$name" =~ ^[A-Za-z0-9_][A-Za-z0-9_.\-]*$ ]] && return 0
|
|
59
|
+
return 1
|
|
60
|
+
}
|
|
82
61
|
|
|
83
62
|
# ============================================
|
|
84
63
|
# PASO 1: Selección de Idioma
|
|
@@ -170,6 +149,114 @@ echo -e "${GREEN}✅ curl:${NC} available"
|
|
|
170
149
|
echo ""
|
|
171
150
|
sleep 1
|
|
172
151
|
|
|
152
|
+
# ============================================
|
|
153
|
+
# PASO 1.5: Nombre de la carpeta del proyecto
|
|
154
|
+
# ============================================
|
|
155
|
+
# Va DESPUÉS de la selección de idioma para que los textos salgan en el
|
|
156
|
+
# idioma elegido (no bilingües). Antes del Paso 2 (GitHub) para que el
|
|
157
|
+
# rename sea visible en el resto de prompts y en el resumen final.
|
|
158
|
+
#
|
|
159
|
+
# Solo aplica cuando setup.sh se ejecuta directamente (`bash setup.sh`).
|
|
160
|
+
# Si vienes desde `bin/specleap` (vía `npx`), ese script ya pidió nombre
|
|
161
|
+
# y ya creó la carpeta — entonces SPECLEAP_INSTALL_PATH está set y
|
|
162
|
+
# saltamos este bloque para no preguntar dos veces.
|
|
163
|
+
|
|
164
|
+
if [ -z "${SPECLEAP_INSTALL_PATH:-}" ]; then
|
|
165
|
+
CURRENT_PATH="$(pwd)"
|
|
166
|
+
CURRENT_FOLDER_NAME="$(basename "$CURRENT_PATH")"
|
|
167
|
+
PARENT_PATH="$(dirname "$CURRENT_PATH")"
|
|
168
|
+
|
|
169
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
170
|
+
if [ "$LANG" = "es" ]; then
|
|
171
|
+
echo -e "${BLUE}${BOLD}Nombre de la carpeta del proyecto${NC}"
|
|
172
|
+
else
|
|
173
|
+
echo -e "${BLUE}${BOLD}Project folder name${NC}"
|
|
174
|
+
fi
|
|
175
|
+
echo -e "${CYAN}${LINE}${NC}"
|
|
176
|
+
echo ""
|
|
177
|
+
|
|
178
|
+
if [ "$LANG" = "es" ]; then
|
|
179
|
+
echo "📝 ¿Cómo quieres que se llame la carpeta del proyecto?"
|
|
180
|
+
echo ""
|
|
181
|
+
echo " Carpeta actual: $CURRENT_FOLDER_NAME"
|
|
182
|
+
echo " Default si pulsas Enter: specleap-framework"
|
|
183
|
+
echo " Permitido: letras, números, '-', '_', '.'"
|
|
184
|
+
echo ""
|
|
185
|
+
else
|
|
186
|
+
echo "📝 What name do you want for the project folder?"
|
|
187
|
+
echo ""
|
|
188
|
+
echo " Current folder: $CURRENT_FOLDER_NAME"
|
|
189
|
+
echo " Default on Enter: specleap-framework"
|
|
190
|
+
echo " Allowed: letters, numbers, '-', '_', '.'"
|
|
191
|
+
echo ""
|
|
192
|
+
fi
|
|
193
|
+
|
|
194
|
+
while true; do
|
|
195
|
+
if [ "$LANG" = "es" ]; then
|
|
196
|
+
read -p "$(echo -e ${YELLOW}Nombre:${NC} )" RAW_NAME
|
|
197
|
+
else
|
|
198
|
+
read -p "$(echo -e ${YELLOW}Name:${NC} )" RAW_NAME
|
|
199
|
+
fi
|
|
200
|
+
|
|
201
|
+
if [ -z "$RAW_NAME" ]; then
|
|
202
|
+
NEW_NAME="specleap-framework"
|
|
203
|
+
else
|
|
204
|
+
NEW_NAME="$RAW_NAME"
|
|
205
|
+
fi
|
|
206
|
+
|
|
207
|
+
if is_valid_folder_name "$NEW_NAME"; then
|
|
208
|
+
break
|
|
209
|
+
fi
|
|
210
|
+
|
|
211
|
+
echo ""
|
|
212
|
+
if [ "$LANG" = "es" ]; then
|
|
213
|
+
echo -e "${RED}❌ Nombre inválido: \"$NEW_NAME\"${NC}"
|
|
214
|
+
echo " Usa solo letras, números, '-', '_' y '.' (no empezar con '.')"
|
|
215
|
+
else
|
|
216
|
+
echo -e "${RED}❌ Invalid name: \"$NEW_NAME\"${NC}"
|
|
217
|
+
echo " Use only letters, numbers, '-', '_' and '.' (cannot start with '.')"
|
|
218
|
+
fi
|
|
219
|
+
echo ""
|
|
220
|
+
done
|
|
221
|
+
|
|
222
|
+
if [ "$NEW_NAME" = "$CURRENT_FOLDER_NAME" ]; then
|
|
223
|
+
echo ""
|
|
224
|
+
if [ "$LANG" = "es" ]; then
|
|
225
|
+
echo -e "${GREEN}✅ Carpeta:${NC} $CURRENT_FOLDER_NAME"
|
|
226
|
+
else
|
|
227
|
+
echo -e "${GREEN}✅ Folder:${NC} $CURRENT_FOLDER_NAME"
|
|
228
|
+
fi
|
|
229
|
+
SPECLEAP_INSTALL_PATH="$CURRENT_PATH"
|
|
230
|
+
else
|
|
231
|
+
NEW_PATH="$PARENT_PATH/$NEW_NAME"
|
|
232
|
+
if [ -e "$NEW_PATH" ]; then
|
|
233
|
+
echo ""
|
|
234
|
+
if [ "$LANG" = "es" ]; then
|
|
235
|
+
echo -e "${RED}❌ Ya existe:${NC} $NEW_PATH"
|
|
236
|
+
echo -e "${YELLOW} Se mantiene el nombre actual:${NC} $CURRENT_FOLDER_NAME"
|
|
237
|
+
else
|
|
238
|
+
echo -e "${RED}❌ Already exists:${NC} $NEW_PATH"
|
|
239
|
+
echo -e "${YELLOW} Keeping current name:${NC} $CURRENT_FOLDER_NAME"
|
|
240
|
+
fi
|
|
241
|
+
SPECLEAP_INSTALL_PATH="$CURRENT_PATH"
|
|
242
|
+
else
|
|
243
|
+
mv "$CURRENT_PATH" "$NEW_PATH"
|
|
244
|
+
cd "$NEW_PATH"
|
|
245
|
+
CURRENT_PATH="$NEW_PATH"
|
|
246
|
+
CURRENT_FOLDER_NAME="$NEW_NAME"
|
|
247
|
+
SPECLEAP_INSTALL_PATH="$NEW_PATH"
|
|
248
|
+
echo ""
|
|
249
|
+
if [ "$LANG" = "es" ]; then
|
|
250
|
+
echo -e "${GREEN}✅ Carpeta renombrada:${NC} $NEW_NAME"
|
|
251
|
+
else
|
|
252
|
+
echo -e "${GREEN}✅ Folder renamed:${NC} $NEW_NAME"
|
|
253
|
+
fi
|
|
254
|
+
fi
|
|
255
|
+
fi
|
|
256
|
+
echo ""
|
|
257
|
+
sleep 1
|
|
258
|
+
fi
|
|
259
|
+
|
|
173
260
|
# ============================================
|
|
174
261
|
# PASO 2: GitHub
|
|
175
262
|
# ============================================
|
|
@@ -555,6 +642,10 @@ GITHUB_USER=$GITHUB_USER
|
|
|
555
642
|
# Asana (REQUIRED)
|
|
556
643
|
ASANA_ACCESS_TOKEN=$ASANA_TOKEN
|
|
557
644
|
ASANA_WORKSPACE_ID=$ASANA_WORKSPACE_ID
|
|
645
|
+
# ASANA_WORKSPACE_GID es alias de ASANA_WORKSPACE_ID — los scripts del backlog
|
|
646
|
+
# (generate-asana-structure.sh, asana-utils.sh) leen GID; lo exponemos para
|
|
647
|
+
# evitar tener que detectarlo cada vez via API.
|
|
648
|
+
ASANA_WORKSPACE_GID=$ASANA_WORKSPACE_ID
|
|
558
649
|
|
|
559
650
|
# CodeRabbit (installed via GitHub App)
|
|
560
651
|
# https://github.com/apps/coderabbitai
|