specleap-framework 2.1.13 → 2.1.14

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/CHANGELOG.md CHANGED
@@ -7,6 +7,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.1.14] - 2026-05-01
11
+
12
+ ### Changed
13
+
14
+ - **`setup.sh` ahora pregunta SIEMPRE el nombre de la carpeta como Paso 0**, antes de la selección de idioma y antes de pedir cualquier token. Si el usuario escribe un nombre distinto al actual, el script renombra la carpeta in-place (`mv`) y sigue trabajando desde el nuevo path. Si pulsa Enter, se mantiene el nombre que ya tiene.
15
+ - El warning condicional introducido en v2.1.13 (que solo aparecía cuando la carpeta se llamaba exactamente `specleap-framework`) se elimina: el nuevo prompt activo lo reemplaza por completo, sin importar cómo se llame la carpeta de partida.
16
+
17
+ #### Por qué
18
+
19
+ Reportado por Styng tras testear v2.1.13: él esperaba un prompt activo, no un warning condicional. Con `git clone <url> mi-proyecto && cd mi-proyecto && bash setup.sh`, la v2.1.13 no preguntaba nada porque la carpeta no se llamaba `specleap-framework` (el filtro original era demasiado estrecho). Ahora el flujo es uniforme: el usuario siempre tiene la oportunidad de elegir el nombre, sin tener que recordar la sintaxis del segundo argumento de `git clone`.
20
+
21
+ #### Detalles del flujo
22
+
23
+ - Validación del nombre: letras, números, `-`, `_` y `.`, no puede empezar con `.`, máximo 100 caracteres. El prompt re-pregunta hasta que sea válido.
24
+ - Si el nombre escrito coincide con el actual, no hace `mv` (no-op), simplemente continúa.
25
+ - Si el nuevo path ya existe, se mantiene el nombre actual y se imprime un aviso (no aborta el setup).
26
+ - Si `SPECLEAP_INSTALL_PATH` ya está set (caso `npx` que pasa por `bin/specleap`), el bloque se salta entero — `bin/specleap` ya pidió el nombre antes de copiar archivos.
27
+ - El proceso bash sobrevive al `mv` del directorio activo porque mantiene el inode, no el path; tras el rename hace `cd` al nuevo path antes de continuar.
28
+
29
+ #### Tests cubiertos (4 escenarios, todos pasaron)
30
+
31
+ 1. Enter en una carpeta llamada `specleap-framework` → mantiene nombre, no renombra.
32
+ 2. Carpeta `mi-proyecto` + nombre nuevo `tienda-online` → renombra, vieja desaparece, nueva existe.
33
+ 3. Carpeta `inicio` + nombre inválido `mi proyecto con espacios` + nombre válido `mi-proyecto-valido` → re-pregunta y luego renombra.
34
+ 4. Carpeta `specleap-framework` + `SPECLEAP_INSTALL_PATH` set → no pregunta, va directo a Paso 1/6.
35
+
36
+ ### Updated
37
+
38
+ - `README.md` y `SETUP.md`: la sección "Opción B: vía git clone" ahora explica que `setup.sh` pregunta el nombre como Paso 0 y que pasarlo a `git clone` es solo un atajo, no una obligación.
39
+
10
40
  ## [2.1.13] - 2026-05-01
11
41
 
12
42
  ### Fixed
package/README.md CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  SpecLeap convierte cualquier IDE con asistente de IA en un entorno de desarrollo spec-first. Combina un contrato de proyecto inmutable, agentes conversacionales especializados, 34 Agent Skills profesionales y un pipeline de validación en tres capas para entregar código consistente y probado sin improvisación.
22
22
 
23
- **Versión actual:** 2.1.13 · **Licencia:** MIT · **Autor:** Styng Arias ([ConceptualCreative](https://conceptualcreative.com))
23
+ **Versión actual:** 2.1.14 · **Licencia:** MIT · **Autor:** Styng Arias ([ConceptualCreative](https://conceptualcreative.com))
24
24
 
25
25
  ---
26
26
 
@@ -68,17 +68,24 @@ Nombre: mi-app-tienda
68
68
  → Resultado: /Users/tu-usuario/Downloads/mi-app-tienda/
69
69
  ```
70
70
 
71
- ### Opción B: Vía git clone (control directo, sin prompts)
71
+ ### Opción B: Vía git clone (control desde la terminal)
72
72
 
73
73
  ```bash
74
- git clone https://github.com/ConceptualCreative/specleap-framework.git mi-proyecto
75
- cd mi-proyecto
74
+ git clone https://github.com/ConceptualCreative/specleap-framework.git
75
+ cd specleap-framework
76
76
  bash setup.sh
77
77
  ```
78
78
 
79
- Aquí ** decides el nombre** pasándolo como segundo argumento de `git clone`. El setup arranca directo, sin preguntar carpeta/nombre porque ya estás dentro del repo donde quieres.
79
+ Cuando arranque `setup.sh` lo primero que te preguntará es **cómo quieres que se llame la carpeta** del proyecto. Si pulsas Enter mantiene el nombre que tiene (`specleap-framework` por default de git clone). Si escribes otro nombre, **el setup renombra la carpeta automáticamente** y continúa desde ahí. Después sigue con idioma, tokens, skills y CodeRabbit.
80
80
 
81
- Si haces `git clone <url>` sin segundo argumento, la carpeta se llamará `specleap-framework` (default de git). El setup te avisará por si querías otro nombre.
81
+ Atajo: si ya sabes el nombre, lo pasas a `git clone` para evitar el rename:
82
+
83
+ ```bash
84
+ git clone https://github.com/ConceptualCreative/specleap-framework.git mi-proyecto
85
+ cd mi-proyecto
86
+ bash setup.sh
87
+ # El setup pregunta el nombre igualmente; pulsa Enter para mantener "mi-proyecto".
88
+ ```
82
89
 
83
90
  ### Diferencias rápidas
84
91
 
package/SETUP.md CHANGED
@@ -46,15 +46,21 @@ Nombre: mi-app-tienda
46
46
  ### Opción B: vía git clone
47
47
 
48
48
  ```bash
49
- # Clona el repo con el nombre que tú quieras (segundo argumento de git clone)
50
- git clone https://github.com/ConceptualCreative/specleap-framework.git mi-proyecto
51
- cd mi-proyecto
49
+ git clone https://github.com/ConceptualCreative/specleap-framework.git
50
+ cd specleap-framework
52
51
  bash setup.sh
53
52
  ```
54
53
 
55
- Aquí **no hay prompts de carpeta o nombre** ya estás dentro de `mi-proyecto/` que nombraste con git. El `setup.sh` arranca directo con la selección de idioma.
54
+ **El primer paso del setup pregunta cómo quieres llamar la carpeta** (Paso 0). Pulsas Enter para mantenerla con el nombre que tiene, o escribes otro nombre y el setup renombra la carpeta automáticamente antes de seguir con idioma/tokens.
56
55
 
57
- Si haces `git clone <url>` **sin segundo argumento**, la carpeta se llamará `specleap-framework` por defecto. El setup te avisará por si esperabas otro nombre y te ofrecerá cancelar.
56
+ Atajo: si ya sabes el nombre, pásaselo a `git clone` y luego pulsas Enter en el Paso 0 para mantenerlo:
57
+
58
+ ```bash
59
+ git clone https://github.com/ConceptualCreative/specleap-framework.git mi-proyecto
60
+ cd mi-proyecto
61
+ bash setup.sh
62
+ # Paso 0: pulsa Enter para mantener "mi-proyecto"
63
+ ```
58
64
 
59
65
  ---
60
66
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specleap-framework",
3
- "version": "2.1.13",
3
+ "version": "2.1.14",
4
4
  "description": "Spec-Driven Development Framework — Transform VSCode, Cursor, JetBrains into spec-first development machines",
5
5
  "keywords": [
6
6
  "spec-driven-development",
package/setup.sh CHANGED
@@ -49,33 +49,82 @@ echo -e "${CYAN}${LINE}${NC}"
49
49
  echo ""
50
50
 
51
51
  # ============================================
52
- # PRE-CHECK: Aviso si la carpeta se llama "specleap-framework"
52
+ # PASO 0: Nombre de la carpeta del proyecto
53
53
  # ============================================
54
- # Si el usuario clonó con `git clone <url>` (sin segundo argumento), la
55
- # carpeta se llamará "specleap-framework" por defecto. Le avisamos por si
56
- # quería otro nombre, antes de empezar el setup interactivo.
57
- # Solo aplica cuando setup.sh se ejecuta directamente (no via bin/specleap,
58
- # que ya pregunta nombre interactivamente). Detectamos este caso por
59
- # ausencia de la variable SPECLEAP_INSTALL_PATH (que solo la pone bin/specleap).
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
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
+
68
+ is_valid_folder_name() {
69
+ local name="$1"
70
+ [ -z "$name" ] && return 1
71
+ [ ${#name} -gt 100 ] && return 1
72
+ [[ "$name" == .* ]] && return 1
73
+ [[ "$name" =~ ^[A-Za-z0-9_][A-Za-z0-9_.\-]*$ ]] && return 0
74
+ return 1
75
+ }
76
+
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 '.')"
76
104
  echo ""
77
- echo "Cancelado por el usuario / Cancelled by user."
78
- exit 0
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
79
128
  fi
80
129
  echo ""
81
130
  fi