specleap-framework 2.1.14 → 2.2.1
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/compliance.md +1 -1
- 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 +56 -0
- package/CLAUDE.md +1 -1
- package/README.md +2 -2
- package/SETUP.md +5 -5
- package/package.json +1 -1
- package/scripts/README.md +1 -1
- package/scripts/create-asana-tasks.sh +9 -0
- package/scripts/generate-asana-structure.sh +11 -0
- package/scripts/install-skills.sh +20 -3
- 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 +114 -72
package/setup.sh
CHANGED
|
@@ -48,23 +48,8 @@ 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
|
-
# Solo se pregunta cuando setup.sh se ejecuta DIRECTAMENTE (`bash setup.sh`
|
|
55
|
-
# tras `git clone …`). Si vienes desde `bin/specleap` (vía `npx`) ese script
|
|
56
|
-
# ya preguntó nombre y ya creó la carpeta — entonces SPECLEAP_INSTALL_PATH
|
|
57
|
-
# está set y saltamos este bloque para no preguntar dos veces.
|
|
58
|
-
#
|
|
59
|
-
# Si el usuario escribe un nombre distinto al actual, el script RENOMBRA
|
|
60
|
-
# la carpeta in-place: `mv` del directorio actual al nuevo y `cd` al nuevo.
|
|
61
|
-
# El proceso bash sigue vivo durante el rename porque se aferra al inode,
|
|
62
|
-
# no al path.
|
|
63
|
-
|
|
64
|
-
CURRENT_PATH="$(pwd)"
|
|
65
|
-
CURRENT_FOLDER_NAME="$(basename "$CURRENT_PATH")"
|
|
66
|
-
PARENT_PATH="$(dirname "$CURRENT_PATH")"
|
|
67
|
-
|
|
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.
|
|
68
53
|
is_valid_folder_name() {
|
|
69
54
|
local name="$1"
|
|
70
55
|
[ -z "$name" ] && return 1
|
|
@@ -74,61 +59,6 @@ is_valid_folder_name() {
|
|
|
74
59
|
return 1
|
|
75
60
|
}
|
|
76
61
|
|
|
77
|
-
if [ -z "${SPECLEAP_INSTALL_PATH:-}" ]; then
|
|
78
|
-
echo "📝 ¿Cómo quieres que se llame la carpeta del proyecto?"
|
|
79
|
-
echo " What name do you want for the project folder?"
|
|
80
|
-
echo ""
|
|
81
|
-
echo " Carpeta actual / Current: $CURRENT_FOLDER_NAME"
|
|
82
|
-
echo " Default si pulsas Enter / Default on Enter: specleap-framework"
|
|
83
|
-
echo " Permitido / Allowed: letras, números, '-', '_', '.'"
|
|
84
|
-
echo ""
|
|
85
|
-
|
|
86
|
-
while true; do
|
|
87
|
-
read -p "Nombre / Name: " RAW_NAME
|
|
88
|
-
# Si Enter vacío → default 'specleap-framework'
|
|
89
|
-
# Excepto si ya se llama así y el user pulsa Enter, mantenemos
|
|
90
|
-
if [ -z "$RAW_NAME" ]; then
|
|
91
|
-
NEW_NAME="specleap-framework"
|
|
92
|
-
else
|
|
93
|
-
NEW_NAME="$RAW_NAME"
|
|
94
|
-
fi
|
|
95
|
-
|
|
96
|
-
if is_valid_folder_name "$NEW_NAME"; then
|
|
97
|
-
break
|
|
98
|
-
fi
|
|
99
|
-
|
|
100
|
-
echo ""
|
|
101
|
-
echo "❌ Nombre inválido / Invalid name: \"$NEW_NAME\""
|
|
102
|
-
echo " Usa solo letras, números, '-', '_' y '.' (no empezar con '.')"
|
|
103
|
-
echo " Use only letters, numbers, '-', '_' and '.' (cannot start with '.')"
|
|
104
|
-
echo ""
|
|
105
|
-
done
|
|
106
|
-
|
|
107
|
-
# Si el nombre coincide con el actual, no renombramos
|
|
108
|
-
if [ "$NEW_NAME" = "$CURRENT_FOLDER_NAME" ]; then
|
|
109
|
-
echo ""
|
|
110
|
-
echo "✅ Carpeta: $CURRENT_FOLDER_NAME"
|
|
111
|
-
SPECLEAP_INSTALL_PATH="$CURRENT_PATH"
|
|
112
|
-
else
|
|
113
|
-
NEW_PATH="$PARENT_PATH/$NEW_NAME"
|
|
114
|
-
if [ -e "$NEW_PATH" ]; then
|
|
115
|
-
echo ""
|
|
116
|
-
echo "❌ Ya existe / Already exists: $NEW_PATH"
|
|
117
|
-
echo " Se mantiene el nombre actual / Keeping current name: $CURRENT_FOLDER_NAME"
|
|
118
|
-
SPECLEAP_INSTALL_PATH="$CURRENT_PATH"
|
|
119
|
-
else
|
|
120
|
-
mv "$CURRENT_PATH" "$NEW_PATH"
|
|
121
|
-
cd "$NEW_PATH"
|
|
122
|
-
CURRENT_PATH="$NEW_PATH"
|
|
123
|
-
CURRENT_FOLDER_NAME="$NEW_NAME"
|
|
124
|
-
SPECLEAP_INSTALL_PATH="$NEW_PATH"
|
|
125
|
-
echo ""
|
|
126
|
-
echo "✅ Carpeta renombrada / Folder renamed: $NEW_NAME"
|
|
127
|
-
fi
|
|
128
|
-
fi
|
|
129
|
-
echo ""
|
|
130
|
-
fi
|
|
131
|
-
|
|
132
62
|
# ============================================
|
|
133
63
|
# PASO 1: Selección de Idioma
|
|
134
64
|
# ============================================
|
|
@@ -219,6 +149,114 @@ echo -e "${GREEN}✅ curl:${NC} available"
|
|
|
219
149
|
echo ""
|
|
220
150
|
sleep 1
|
|
221
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
|
+
|
|
222
260
|
# ============================================
|
|
223
261
|
# PASO 2: GitHub
|
|
224
262
|
# ============================================
|
|
@@ -604,6 +642,10 @@ GITHUB_USER=$GITHUB_USER
|
|
|
604
642
|
# Asana (REQUIRED)
|
|
605
643
|
ASANA_ACCESS_TOKEN=$ASANA_TOKEN
|
|
606
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
|
|
607
649
|
|
|
608
650
|
# CodeRabbit (installed via GitHub App)
|
|
609
651
|
# https://github.com/apps/coderabbitai
|