qdd-framework 1.9.15 → 1.9.19

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 (4) hide show
  1. package/README.md +53 -0
  2. package/bin/qdd +0 -0
  3. package/install.js +64 -23
  4. package/package.json +1 -1
package/README.md ADDED
@@ -0,0 +1,53 @@
1
+ # QDD Framework — Quality-Driven Development
2
+
3
+ [![NPM Version](https://img.shields.io/npm/v/qdd-framework.svg)](https://www.npmjs.com/package/qdd-framework)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ **QDD (Quality-Driven Development)** es una Plataforma de Ingeniería de Software basada en Mejora Continua y Gobernanza de Código desde el Día Cero. Asegura la calidad de producción eliminando prompts manuales mediante un Framework (Wisdom Registry), certificaciones 'Rules-as-Code', auditoría técnica automatizada (9 pilares de calidad), equipo resolutor multi-agente nivel FAANG (`/qdd resolve`), soporte completo para estándares internacionales de Inteligencia Artificial (ISO 42001, ISO 29119-11, SOC 2, ISO 23894), detección de APIs locales de LLM (Antigravity, Ollama, LM Studio) y un sistema unificado de reportes y dashboard en tiempo real.
7
+
8
+ ---
9
+
10
+ ## 🚀 Instalación Rápida
11
+
12
+ ```bash
13
+ npm install -g qdd-framework
14
+ ```
15
+
16
+ ---
17
+
18
+ ## ⚡ Comandos Principales
19
+
20
+ - `qdd init`: Inicializa el entorno QDD en el proyecto e inyecta la configuración MCP en IDEs compatibles (Cursor, Claude Code, Antigravity).
21
+ - `qdd audit`: Ejecuta la auditoría estática de código sobre los 9 pilares de calidad (Zero-Else, OWASP, Twelve-Factor, AI Governance, Clean Code, etc.).
22
+ - `qdd certify`: Valida las certificaciones del proyecto y genera el certificado histórico de calidad.
23
+ - `qdd doctor`: Diagnóstico determinista de salud y auto-reparación del entorno.
24
+ - `qdd report`: Genera un reporte ejecutivo consolidado en formato Texto, Markdown o JSON para CI/CD.
25
+ - `qdd evolution`: Consulta consultiva para determinar la siguiente mejora natural del proyecto.
26
+ - `qdd dashboard`: Centro de Comando Web interactivo con streaming en tiempo real (SSE) y ejecución de agentes.
27
+ - `qdd run`: Pipeline secuencial de comandos o modo supervisor con auto-reparación (`qdd run --keep-alive`).
28
+
29
+ ---
30
+
31
+ ## 🤖 Integración con Inteligencia Artificial (MCP Server)
32
+
33
+ QDD expone un servidor Model Context Protocol (MCP) que permite a asistentes como **Google Antigravity**, **Claude Code** y **Cursor** consultar reglas, diagnosticar problemas y ejecutar tareas de forma gobernada:
34
+
35
+ - `/qdd init`
36
+ - `/qdd validate`
37
+ - `/qdd certify`
38
+ - `/qdd resolve` (Equipo Resolutor FAANG)
39
+ - `/qdd report`
40
+ - `/qdd evolution`
41
+ - `/qdd docs`
42
+
43
+ ---
44
+
45
+ ## 🛡️ Reglas Globales de Codificación
46
+ 1. **Cero-Else:** QDD prohíbe el uso de `else`, exigiendo cláusulas de guarda y retornos tempranos (*Early Returns*).
47
+ 2. **Salida Más Rápida Primero:** Los errores y validaciones se manejan al inicio de cada función.
48
+ 3. **Aprendizaje Perpetuo:** Todo bug encontrado se documenta como Finding y requiere un test unitario obligatorio.
49
+
50
+ ---
51
+
52
+ ## 📄 Licencia
53
+ MIT © QDD Framework Team
package/bin/qdd CHANGED
Binary file
package/install.js CHANGED
@@ -23,51 +23,92 @@ const os = platformMap[process.platform];
23
23
  const arch = archMap[process.arch];
24
24
 
25
25
  if (!os || !arch) {
26
- console.error(`Plataforma no soportada: ${process.platform} ${process.arch}`);
26
+ console.error(`[QDD] Plataforma no soportada: ${process.platform} ${process.arch}`);
27
27
  process.exit(1);
28
28
  }
29
29
 
30
30
  const ext = os === 'windows' ? 'zip' : 'tar.gz';
31
31
  const binaryExt = os === 'windows' ? '.exe' : '';
32
32
  const binaryName = `qdd${binaryExt}`;
33
- const url = `https://github.com/${REPO}/releases/download/${VERSION}/qdd_${os}_${arch}.${ext}`;
34
-
35
33
  const binDir = path.join(__dirname, 'bin');
34
+
35
+ if (!fs.existsSync(binDir)) {
36
+ fs.mkdirSync(binDir, { recursive: true });
37
+ }
38
+
39
+ // 1. Detección de binario local para desarrollo
40
+ const localBinRoot = path.join(__dirname, '..', binaryName);
41
+ const localBinCli = path.join(__dirname, '..', 'cli', binaryName);
42
+
43
+ if (fs.existsSync(localBinRoot)) {
44
+ console.log(`[QDD] Binario local detectado en ${localBinRoot}. Usando copia local para desarrollo...`);
45
+ fs.copyFileSync(localBinRoot, path.join(binDir, binaryName));
46
+ fs.chmodSync(path.join(binDir, binaryName), 0o755);
47
+ console.log('[QDD] ¡Instalación completada desde binario local!');
48
+ process.exit(0);
49
+ }
50
+
51
+ if (fs.existsSync(localBinCli)) {
52
+ console.log(`[QDD] Binario local detectado en ${localBinCli}. Usando copia local para desarrollo...`);
53
+ fs.copyFileSync(localBinCli, path.join(binDir, binaryName));
54
+ fs.chmodSync(path.join(binDir, binaryName), 0o755);
55
+ console.log('[QDD] ¡Instalación completada desde binario local!');
56
+ process.exit(0);
57
+ }
58
+
59
+ // 2. Descarga desde GitHub Releases
60
+ const url = `https://github.com/${REPO}/releases/download/${VERSION}/qdd_${os}_${arch}.${ext}`;
36
61
  const downloadDest = path.join(__dirname, `qdd-download.${ext}`);
37
62
 
38
63
  console.log(`[QDD] Descargando binario nativo para ${os}-${arch}...`);
39
64
  console.log(`[QDD] URL: ${url}`);
40
65
 
41
- // Realizando la descarga del binario desde GitHub Releases
42
- const file = fs.createWriteStream(downloadDest);
43
- https.get(url, (response) => {
44
- if (response.statusCode === 301 || response.statusCode === 302) {
45
- return https.get(response.headers.location, (res) => {
46
- res.pipe(file);
47
- file.on('finish', extractBinary);
66
+ downloadBinary(url);
67
+
68
+ function downloadBinary(targetUrl) {
69
+ const file = fs.createWriteStream(downloadDest);
70
+ https.get(targetUrl, (response) => {
71
+ if (response.statusCode === 301 || response.statusCode === 302) {
72
+ if (response.headers.location) {
73
+ return downloadBinary(response.headers.location);
74
+ }
75
+ }
76
+
77
+ if (response.statusCode !== 200) {
78
+ console.error(`[QDD] Error: GitHub Release devolvió HTTP ${response.statusCode} para ${targetUrl}`);
79
+ console.error('[QDD] Si estás instalando desde una versión no publicada aún, compila localmente con "make build"');
80
+ process.exit(0); // Permitir que la instalación de npm continúe sin romper builds de CI
81
+ }
82
+
83
+ response.pipe(file);
84
+ file.on('finish', () => {
85
+ file.close(extractBinary);
48
86
  });
49
- }
50
- response.pipe(file);
51
- file.on('finish', extractBinary);
52
- }).on('error', (err) => {
53
- console.error('[QDD] Error descargando el binario:', err);
54
- process.exit(1);
55
- });
87
+ }).on('error', (err) => {
88
+ console.error('[QDD] Error de red descargando el binario:', err.message);
89
+ process.exit(0);
90
+ });
91
+ }
56
92
 
57
93
  function extractBinary() {
58
94
  console.log('[QDD] Extrayendo...');
59
95
  try {
60
96
  if (os === 'windows') {
61
- execSync(`tar -xf ${downloadDest} -C ${__dirname}`);
97
+ execSync(`tar -xf "${downloadDest}" -C "${__dirname}"`);
62
98
  }
63
99
  if (os !== 'windows') {
64
- execSync(`tar -xzf ${downloadDest} -C ${__dirname}`);
100
+ execSync(`tar -xzf "${downloadDest}" -C "${__dirname}"`);
101
+ }
102
+ const extractedBin = path.join(__dirname, binaryName);
103
+ if (fs.existsSync(extractedBin)) {
104
+ fs.renameSync(extractedBin, path.join(binDir, binaryName));
105
+ fs.chmodSync(path.join(binDir, binaryName), 0o755);
106
+ }
107
+ if (fs.existsSync(downloadDest)) {
108
+ fs.unlinkSync(downloadDest);
65
109
  }
66
- fs.renameSync(path.join(__dirname, binaryName), path.join(binDir, binaryName));
67
- fs.chmodSync(path.join(binDir, binaryName), 0o755);
68
- fs.unlinkSync(downloadDest);
69
110
  console.log('[QDD] ¡Instalación nativa completada exitosamente!');
70
111
  } catch (err) {
71
- console.error('[QDD] Error al extraer el binario:', err);
112
+ console.error('[QDD] Error al extraer el binario:', err.message);
72
113
  }
73
114
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "qdd-framework",
3
- "version": "1.9.15",
3
+ "version": "1.9.19",
4
4
  "description": "Quality-Driven Development Framework",
5
5
  "bin": {
6
6
  "qdd": "bin/qdd.js"