specleap-framework 2.0.4 → 2.0.6

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 (3) hide show
  1. package/bin/specleap +37 -5
  2. package/package.json +1 -1
  3. package/setup.sh +20 -8
package/bin/specleap CHANGED
@@ -1,16 +1,48 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- const { spawn } = require('child_process');
3
+ const { spawn, execSync } = require('child_process');
4
4
  const path = require('path');
5
+ const fs = require('fs');
5
6
 
6
- // Directorio del paquete (donde están todos los archivos)
7
+ // Directorio del paquete npm (donde están todos los archivos)
7
8
  const packageDir = path.join(__dirname, '..');
8
- const setupPath = path.join(packageDir, 'setup.sh');
9
9
 
10
- // Ejecutar setup.sh DESDE el directorio del paquete
10
+ // Directorio donde el usuario ejecutó npx (su directorio de trabajo)
11
+ const userCwd = process.cwd();
12
+
13
+ // Carpeta de destino
14
+ const targetDir = path.join(userCwd, 'specleap-framework');
15
+
16
+ console.log('\n🚀 Copiando SpecLeap Framework...\n');
17
+
18
+ // Verificar si ya existe
19
+ if (fs.existsSync(targetDir)) {
20
+ console.error(`❌ Error: El directorio '${targetDir}' ya existe.`);
21
+ console.error(' Por favor elimínalo primero o ejecuta desde otro directorio.\n');
22
+ process.exit(1);
23
+ }
24
+
25
+ // Crear directorio destino
26
+ try {
27
+ fs.mkdirSync(targetDir, { recursive: true });
28
+
29
+ // Copiar todos los archivos del paquete
30
+ execSync(`cp -R "${packageDir}"/* "${targetDir}"/`, { stdio: 'inherit' });
31
+ execSync(`cp -R "${packageDir}"/.??* "${targetDir}"/ 2>/dev/null || true`, { stdio: 'ignore' });
32
+
33
+ console.log(`✅ Archivos copiados a: ${targetDir}\n`);
34
+
35
+ } catch (err) {
36
+ console.error('❌ Error copiando archivos:', err.message);
37
+ process.exit(1);
38
+ }
39
+
40
+ // Ejecutar setup.sh DESDE el directorio copiado
41
+ const setupPath = path.join(targetDir, 'setup.sh');
42
+
11
43
  const setup = spawn('bash', [setupPath], {
12
44
  stdio: 'inherit',
13
- cwd: packageDir // <-- ESTO ES LO CRÍTICO
45
+ cwd: targetDir
14
46
  });
15
47
 
16
48
  setup.on('close', (code) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specleap-framework",
3
- "version": "2.0.4",
3
+ "version": "2.0.6",
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
@@ -4,14 +4,26 @@
4
4
 
5
5
  set -e
6
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'
7
+ # Detectar si el terminal soporta colores
8
+ if [[ -t 1 ]] && command -v tput &>/dev/null && [[ $(tput colors 2>/dev/null || echo 0) -ge 8 ]]; then
9
+ # Terminal con colores
10
+ RED='\033[0;31m'
11
+ GREEN='\033[0;32m'
12
+ YELLOW='\033[1;33m'
13
+ BLUE='\033[0;34m'
14
+ CYAN='\033[0;36m'
15
+ BOLD='\033[1m'
16
+ NC='\033[0m'
17
+ else
18
+ # Terminal sin colores - usar texto plano
19
+ RED=''
20
+ GREEN=''
21
+ YELLOW=''
22
+ BLUE=''
23
+ CYAN=''
24
+ BOLD=''
25
+ NC=''
26
+ fi
15
27
 
16
28
  # Ancho terminal
17
29
  COLS=$(tput cols 2>/dev/null || echo 80)