awc-zns-mtd 2.4.0 → 2.6.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/CHANGELOG.md +99 -0
- package/package.json +1 -1
- package/src/modules/awc-zns-mtd/config.yaml +1 -1
- package/tools/cli/commands/init-old.js +147 -0
- package/tools/cli/commands/init.js +513 -147
- package/tools/cli/commands/new-project.js +605 -27
- package/tools/cli/commands/new-project.js.backup +1302 -0
|
@@ -0,0 +1,1302 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Comando: new
|
|
3
|
+
* Crea un nuevo directorio de proyecto con configuración base AWC ZNS-MTD
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
const fs = require('fs-extra');
|
|
7
|
+
const path = require('path');
|
|
8
|
+
const chalk = require('chalk');
|
|
9
|
+
const ora = require('ora');
|
|
10
|
+
const inquirer = require('inquirer');
|
|
11
|
+
const { displayLogo } = require('../utils/console-logger');
|
|
12
|
+
const { getVersion } = require('../utils/version');
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Comando principal para crear nuevo proyecto
|
|
16
|
+
*/
|
|
17
|
+
async function newProjectCommand(projectName, options = {}) {
|
|
18
|
+
displayLogo();
|
|
19
|
+
|
|
20
|
+
console.log(chalk.cyan('\n🚀 Crear Nuevo Proyecto AWC ZNS-MTD\n'));
|
|
21
|
+
|
|
22
|
+
// Preguntar nombre del proyecto si no se proporcionó
|
|
23
|
+
if (!projectName) {
|
|
24
|
+
const { name } = await inquirer.prompt([
|
|
25
|
+
{
|
|
26
|
+
type: 'input',
|
|
27
|
+
name: 'name',
|
|
28
|
+
message: '📦 Nombre del proyecto:',
|
|
29
|
+
validate: (input) => {
|
|
30
|
+
if (!input.trim()) return 'El nombre del proyecto es requerido';
|
|
31
|
+
if (!/^[a-zA-Z0-9-_]+$/.test(input)) {
|
|
32
|
+
return 'Solo se permiten letras, números, guiones y guiones bajos';
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
]);
|
|
38
|
+
projectName = name;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// Verificar si el directorio ya existe
|
|
42
|
+
const projectPath = path.join(process.cwd(), projectName);
|
|
43
|
+
if (await fs.pathExists(projectPath)) {
|
|
44
|
+
console.log(chalk.red(`\n❌ El directorio '${projectName}' ya existe.\n`));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Preguntar responsable del proyecto
|
|
49
|
+
const { responsible, description, gitInit } = await inquirer.prompt([
|
|
50
|
+
{
|
|
51
|
+
type: 'input',
|
|
52
|
+
name: 'responsible',
|
|
53
|
+
message: '👤 Responsable del proyecto:',
|
|
54
|
+
validate: (input) => {
|
|
55
|
+
if (!input.trim()) return 'El responsable es requerido';
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
type: 'input',
|
|
61
|
+
name: 'description',
|
|
62
|
+
message: '📝 Descripción breve (opcional):',
|
|
63
|
+
default: `Proyecto ${projectName}`
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
type: 'confirm',
|
|
67
|
+
name: 'gitInit',
|
|
68
|
+
message: '🔧 Inicializar repositorio Git?',
|
|
69
|
+
default: true
|
|
70
|
+
}
|
|
71
|
+
]);
|
|
72
|
+
|
|
73
|
+
const spinner = ora('Creando estructura base del proyecto...').start();
|
|
74
|
+
|
|
75
|
+
try {
|
|
76
|
+
// 1. Crear directorio raíz del proyecto
|
|
77
|
+
await fs.ensureDir(projectPath);
|
|
78
|
+
spinner.text = `Directorio ${projectName} creado`;
|
|
79
|
+
|
|
80
|
+
// 2. Crear estructura base mínima
|
|
81
|
+
const baseDirectories = [
|
|
82
|
+
'.awc/agents',
|
|
83
|
+
'.awc/workflows',
|
|
84
|
+
'.awc/templates',
|
|
85
|
+
'docs'
|
|
86
|
+
];
|
|
87
|
+
|
|
88
|
+
for (const dir of baseDirectories) {
|
|
89
|
+
await fs.ensureDir(path.join(projectPath, dir));
|
|
90
|
+
}
|
|
91
|
+
spinner.text = 'Estructura base creada';
|
|
92
|
+
|
|
93
|
+
// 3. Copiar agentes base (4 agentes core)
|
|
94
|
+
const srcAgentsPath = path.join(__dirname, '../../../src/modules/awc-zns-mtd/agents');
|
|
95
|
+
const destAgentsPath = path.join(projectPath, '.awc/agents');
|
|
96
|
+
|
|
97
|
+
if (await fs.pathExists(srcAgentsPath)) {
|
|
98
|
+
await fs.copy(srcAgentsPath, destAgentsPath);
|
|
99
|
+
spinner.text = 'Agentes base copiados';
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
// 4. Copiar agentes especializados (22 agentes)
|
|
103
|
+
const srcCustomAgentsPath = path.join(__dirname, '../../../src/modules/custom-agents/cli/.awc-agents');
|
|
104
|
+
const destCustomAgentsPath = path.join(projectPath, '.awc/agents/specialized');
|
|
105
|
+
|
|
106
|
+
if (await fs.pathExists(srcCustomAgentsPath)) {
|
|
107
|
+
await fs.copy(srcCustomAgentsPath, destCustomAgentsPath);
|
|
108
|
+
spinner.text = 'Agentes especializados copiados';
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// 5. Copiar workflows
|
|
112
|
+
const srcWorkflowsPath = path.join(__dirname, '../../../src/modules/awc-zns-mtd/workflows');
|
|
113
|
+
const destWorkflowsPath = path.join(projectPath, '.awc/workflows');
|
|
114
|
+
|
|
115
|
+
if (await fs.pathExists(srcWorkflowsPath)) {
|
|
116
|
+
await fs.copy(srcWorkflowsPath, destWorkflowsPath);
|
|
117
|
+
spinner.text = 'Workflows copiados';
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// 6. Copiar templates
|
|
121
|
+
const srcTemplatesPath = path.join(__dirname, '../../../src/modules/awc-zns-mtd/templates');
|
|
122
|
+
const destTemplatesPath = path.join(projectPath, '.awc/templates');
|
|
123
|
+
|
|
124
|
+
if (await fs.pathExists(srcTemplatesPath)) {
|
|
125
|
+
await fs.copy(srcTemplatesPath, destTemplatesPath);
|
|
126
|
+
spinner.text = 'Templates copiados';
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// 7. Crear archivo de configuración AWC
|
|
130
|
+
const awcConfig = {
|
|
131
|
+
version: getVersion(),
|
|
132
|
+
createdAt: new Date().toISOString(),
|
|
133
|
+
project: {
|
|
134
|
+
name: projectName,
|
|
135
|
+
description: description,
|
|
136
|
+
responsible: responsible
|
|
137
|
+
},
|
|
138
|
+
projectType: null, // Se definirá con awc init
|
|
139
|
+
initialized: false,
|
|
140
|
+
preferences: {
|
|
141
|
+
communication_language: 'Spanish',
|
|
142
|
+
document_output_language: 'Spanish',
|
|
143
|
+
code_language: 'English'
|
|
144
|
+
},
|
|
145
|
+
workflows: {
|
|
146
|
+
current_phase: null,
|
|
147
|
+
completed_phases: []
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
await fs.writeJson(
|
|
152
|
+
path.join(projectPath, '.awc/config.json'),
|
|
153
|
+
awcConfig,
|
|
154
|
+
{ spaces: 2 }
|
|
155
|
+
);
|
|
156
|
+
spinner.text = 'Configuración AWC creada';
|
|
157
|
+
|
|
158
|
+
// 8. Crear README.md del proyecto
|
|
159
|
+
const readme = createReadmeContent(projectName, responsible, description);
|
|
160
|
+
await fs.writeFile(path.join(projectPath, 'README.md'), readme);
|
|
161
|
+
spinner.text = 'README.md creado';
|
|
162
|
+
|
|
163
|
+
// 9. Crear .gitignore
|
|
164
|
+
const gitignore = createGitignoreContent();
|
|
165
|
+
await fs.writeFile(path.join(projectPath, '.gitignore'), gitignore);
|
|
166
|
+
spinner.text = '.gitignore creado';
|
|
167
|
+
|
|
168
|
+
// 10. Crear configuración de VS Code
|
|
169
|
+
await createVSCodeConfig(projectPath, projectName);
|
|
170
|
+
spinner.text = 'Configuración VS Code creada';
|
|
171
|
+
|
|
172
|
+
// 11. Copiar copilot-instructions.md
|
|
173
|
+
const githubDir = path.join(projectPath, '.github');
|
|
174
|
+
await fs.ensureDir(githubDir);
|
|
175
|
+
const templateCopilotPath = path.join(__dirname, '../../../templates/.github/copilot-instructions.md');
|
|
176
|
+
if (await fs.pathExists(templateCopilotPath)) {
|
|
177
|
+
await fs.copy(templateCopilotPath, path.join(githubDir, 'copilot-instructions.md'));
|
|
178
|
+
spinner.text = 'GitHub Copilot instructions creadas';
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// 12. Crear archivo NEXT_STEPS.md
|
|
182
|
+
const nextSteps = createNextStepsContent(projectName);
|
|
183
|
+
await fs.writeFile(path.join(projectPath, 'NEXT_STEPS.md'), nextSteps);
|
|
184
|
+
spinner.text = 'Guía de próximos pasos creada';
|
|
185
|
+
|
|
186
|
+
// 13. Inicializar Git si se solicitó
|
|
187
|
+
if (gitInit) {
|
|
188
|
+
const { execSync } = require('child_process');
|
|
189
|
+
try {
|
|
190
|
+
execSync('git init', { cwd: projectPath, stdio: 'ignore' });
|
|
191
|
+
execSync('git add .', { cwd: projectPath, stdio: 'ignore' });
|
|
192
|
+
execSync(`git commit -m "feat: Inicializar proyecto ${projectName} con AWC ZNS-MTD"`, {
|
|
193
|
+
cwd: projectPath,
|
|
194
|
+
stdio: 'ignore'
|
|
195
|
+
});
|
|
196
|
+
spinner.text = 'Repositorio Git inicializado';
|
|
197
|
+
} catch (error) {
|
|
198
|
+
// Git no está disponible o fallo, continuar sin git
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
spinner.succeed(chalk.green('✅ Proyecto creado exitosamente'));
|
|
203
|
+
|
|
204
|
+
// Mostrar resumen
|
|
205
|
+
console.log(chalk.cyan('\n' + '═'.repeat(60)));
|
|
206
|
+
console.log(chalk.cyan('📦 Proyecto Creado'));
|
|
207
|
+
console.log(chalk.cyan('═'.repeat(60) + '\n'));
|
|
208
|
+
|
|
209
|
+
console.log(`${chalk.gray('Nombre:')} ${chalk.green(projectName)}`);
|
|
210
|
+
console.log(`${chalk.gray('Responsable:')} ${chalk.yellow(responsible)}`);
|
|
211
|
+
console.log(`${chalk.gray('Ubicación:')} ${chalk.blue(projectPath)}`);
|
|
212
|
+
console.log(`${chalk.gray('AWC Versión:')} ${chalk.yellow(getVersion())}\n`);
|
|
213
|
+
|
|
214
|
+
// Próximos pasos
|
|
215
|
+
console.log(chalk.cyan('📚 Próximos Pasos:\n'));
|
|
216
|
+
console.log(` ${chalk.green('1.')} cd ${projectName}`);
|
|
217
|
+
console.log(` ${chalk.green('2.')} awc init ${chalk.gray('# Inicializar tipo de proyecto')}`);
|
|
218
|
+
console.log(` ${chalk.green('3.')} Leer ${chalk.yellow('NEXT_STEPS.md')} para más detalles\n`);
|
|
219
|
+
|
|
220
|
+
console.log(chalk.yellow('⚠️ La estructura de fases se creará al ejecutar') + chalk.green(' awc init\n'));
|
|
221
|
+
|
|
222
|
+
} catch (error) {
|
|
223
|
+
spinner.fail(chalk.red('❌ Error creando proyecto'));
|
|
224
|
+
throw error;
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* Crea el contenido del README.md
|
|
230
|
+
*/
|
|
231
|
+
function createReadmeContent(projectName, responsible, description) {
|
|
232
|
+
return `# ${projectName}
|
|
233
|
+
|
|
234
|
+
> ${description}
|
|
235
|
+
|
|
236
|
+
## 📋 Información del Proyecto
|
|
237
|
+
|
|
238
|
+
- **Responsable**: ${responsible}
|
|
239
|
+
- **Metodología**: AWC ZNS-MTD (Zen, Neutro, Sistemático)
|
|
240
|
+
- **Estado**: Pendiente de inicialización
|
|
241
|
+
|
|
242
|
+
## 🚀 Próximos Pasos
|
|
243
|
+
|
|
244
|
+
Este proyecto ha sido creado con la estructura base de AWC ZNS-MTD.
|
|
245
|
+
|
|
246
|
+
### 1. Inicializar Tipo de Proyecto
|
|
247
|
+
|
|
248
|
+
\`\`\`bash
|
|
249
|
+
awc init
|
|
250
|
+
\`\`\`
|
|
251
|
+
|
|
252
|
+
El comando \`awc init\` te preguntará:
|
|
253
|
+
- Tipo de proyecto (auditoría, desarrollo nuevo, migración, etc.)
|
|
254
|
+
- Tecnologías a utilizar
|
|
255
|
+
- Tipo de workflow (quick, standard, enterprise)
|
|
256
|
+
|
|
257
|
+
Basado en tus respuestas, creará automáticamente:
|
|
258
|
+
- ✅ Estructura de directorios por fase
|
|
259
|
+
- ✅ Directorios client-docs específicos
|
|
260
|
+
- ✅ Templates relevantes para tu proyecto
|
|
261
|
+
- ✅ Workflows configurados
|
|
262
|
+
|
|
263
|
+
### 2. Comenzar a Trabajar
|
|
264
|
+
|
|
265
|
+
Una vez inicializado, seguir las guías en cada fase del proyecto.
|
|
266
|
+
|
|
267
|
+
## 🔧 Configuración AWC
|
|
268
|
+
|
|
269
|
+
El directorio \`.awc/\` contiene:
|
|
270
|
+
|
|
271
|
+
- \`agents/\` - 4 agentes base + 22 agentes especializados
|
|
272
|
+
- \`workflows/\` - 8 workflows completos
|
|
273
|
+
- \`templates/\` - 7 templates profesionales
|
|
274
|
+
- \`config.json\` - Configuración del proyecto
|
|
275
|
+
|
|
276
|
+
## 📝 Comandos Disponibles
|
|
277
|
+
|
|
278
|
+
\`\`\`bash
|
|
279
|
+
# Inicializar proyecto (siguiente paso)
|
|
280
|
+
awc init
|
|
281
|
+
|
|
282
|
+
# Ver estado del proyecto
|
|
283
|
+
awc status
|
|
284
|
+
|
|
285
|
+
# Validar estructura
|
|
286
|
+
awc validate
|
|
287
|
+
|
|
288
|
+
# Ver configuración
|
|
289
|
+
awc config
|
|
290
|
+
\`\`\`
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
Generado con ❤️ usando AWC ZNS-MTD Method v${getVersion()}
|
|
295
|
+
`;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// 2. Crear estructura estándar de directorios
|
|
299
|
+
const directories = [
|
|
300
|
+
// Fase 0: Comercial
|
|
301
|
+
'01-comercial/01-prospection',
|
|
302
|
+
'01-comercial/02-technical-proposal',
|
|
303
|
+
'01-comercial/03-quotation',
|
|
304
|
+
'01-comercial/04-contract',
|
|
305
|
+
'01-comercial/docs/client-docs/requerimientos',
|
|
306
|
+
'01-comercial/docs/client-docs/presentaciones',
|
|
307
|
+
'01-comercial/docs/client-docs/contratos',
|
|
308
|
+
|
|
309
|
+
// Fase 1: Inception
|
|
310
|
+
'02-inception/01-kickoff',
|
|
311
|
+
'02-inception/02-prd',
|
|
312
|
+
'02-inception/03-backlog',
|
|
313
|
+
'02-inception/04-release-planning',
|
|
314
|
+
'02-inception/docs/client-docs/procesos',
|
|
315
|
+
'02-inception/docs/client-docs/manuales',
|
|
316
|
+
'02-inception/docs/client-docs/imagenes',
|
|
317
|
+
|
|
318
|
+
// Fase 2: Análisis
|
|
319
|
+
'03-analysis/01-code-audit',
|
|
320
|
+
'03-analysis/02-architecture-review',
|
|
321
|
+
'03-analysis/03-technical-debt',
|
|
322
|
+
'03-analysis/04-recommendations',
|
|
323
|
+
'03-analysis/docs/client-docs/arquitectura',
|
|
324
|
+
'03-analysis/docs/client-docs/databases',
|
|
325
|
+
'03-analysis/docs/client-docs/especificaciones',
|
|
326
|
+
|
|
327
|
+
// Fase 3: Planificación
|
|
328
|
+
'04-planning/01-sprint-planning',
|
|
329
|
+
'04-planning/02-backlog-refinement',
|
|
330
|
+
'04-planning/03-release-planning',
|
|
331
|
+
'04-planning/04-roadmap',
|
|
332
|
+
'04-planning/docs/client-docs/historias',
|
|
333
|
+
'04-planning/docs/client-docs/estimaciones',
|
|
334
|
+
|
|
335
|
+
// Fase 4: Desarrollo
|
|
336
|
+
'05-development/src',
|
|
337
|
+
'05-development/tests',
|
|
338
|
+
'05-development/docs',
|
|
339
|
+
'05-development/docs/client-docs/apis',
|
|
340
|
+
'05-development/docs/client-docs/integraciones',
|
|
341
|
+
'05-development/docs/client-docs/recursos',
|
|
342
|
+
|
|
343
|
+
// Fase 5: QA
|
|
344
|
+
'06-qa/test-plans',
|
|
345
|
+
'06-qa/test-cases',
|
|
346
|
+
'06-qa/test-results',
|
|
347
|
+
'06-qa/bug-reports',
|
|
348
|
+
'06-qa/docs/client-docs/criterios-aceptacion',
|
|
349
|
+
'06-qa/docs/client-docs/escenarios-prueba',
|
|
350
|
+
|
|
351
|
+
// Fase 6: Deployment
|
|
352
|
+
'07-deployment/environments',
|
|
353
|
+
'07-deployment/scripts',
|
|
354
|
+
'07-deployment/logs',
|
|
355
|
+
'07-deployment/docs/client-docs/infraestructura',
|
|
356
|
+
'07-deployment/docs/client-docs/accesos',
|
|
357
|
+
|
|
358
|
+
// Fase 7: Soporte
|
|
359
|
+
'08-support/incidents',
|
|
360
|
+
'08-support/bug-fixes',
|
|
361
|
+
'08-support/maintenance',
|
|
362
|
+
'08-support/docs/client-docs/incidentes',
|
|
363
|
+
'08-support/docs/client-docs/cambios',
|
|
364
|
+
|
|
365
|
+
// Documentación general
|
|
366
|
+
'docs/architecture',
|
|
367
|
+
'docs/adr',
|
|
368
|
+
'docs/api',
|
|
369
|
+
'docs/guides',
|
|
370
|
+
|
|
371
|
+
// Configuración AWC
|
|
372
|
+
'.awc/agents',
|
|
373
|
+
'.awc/workflows',
|
|
374
|
+
'.awc/templates'
|
|
375
|
+
];
|
|
376
|
+
|
|
377
|
+
for (const dir of directories) {
|
|
378
|
+
await fs.ensureDir(path.join(projectPath, dir));
|
|
379
|
+
}
|
|
380
|
+
spinner.text = 'Estructura de directorios creada';
|
|
381
|
+
|
|
382
|
+
// 3. Copiar templates
|
|
383
|
+
const srcTemplatesPath = path.join(__dirname, '../../../src/modules/awc-zns-mtd/templates');
|
|
384
|
+
const destTemplatesPath = path.join(projectPath, '.awc/templates');
|
|
385
|
+
|
|
386
|
+
if (await fs.pathExists(srcTemplatesPath)) {
|
|
387
|
+
await fs.copy(srcTemplatesPath, destTemplatesPath);
|
|
388
|
+
spinner.text = 'Templates copiados';
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
// 4. Copiar workflows
|
|
392
|
+
const srcWorkflowsPath = path.join(__dirname, '../../../src/modules/awc-zns-mtd/workflows');
|
|
393
|
+
const destWorkflowsPath = path.join(projectPath, '.awc/workflows');
|
|
394
|
+
|
|
395
|
+
if (await fs.pathExists(srcWorkflowsPath)) {
|
|
396
|
+
await fs.copy(srcWorkflowsPath, destWorkflowsPath);
|
|
397
|
+
spinner.text = 'Workflows copiados';
|
|
398
|
+
}
|
|
399
|
+
|
|
400
|
+
// 5. Copiar agentes
|
|
401
|
+
const srcAgentsPath = path.join(__dirname, '../../../src/modules/awc-zns-mtd/agents');
|
|
402
|
+
const destAgentsPath = path.join(projectPath, '.awc/agents');
|
|
403
|
+
|
|
404
|
+
if (await fs.pathExists(srcAgentsPath)) {
|
|
405
|
+
await fs.copy(srcAgentsPath, destAgentsPath);
|
|
406
|
+
spinner.text = 'Agentes copiados';
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
// 6. Crear archivo de configuración AWC
|
|
410
|
+
const awcConfig = {
|
|
411
|
+
version: getVersion(),
|
|
412
|
+
createdAt: new Date().toISOString(),
|
|
413
|
+
project: {
|
|
414
|
+
name: projectName,
|
|
415
|
+
description: answers.description,
|
|
416
|
+
type: answers.projectType,
|
|
417
|
+
teamSize: answers.teamSize
|
|
418
|
+
},
|
|
419
|
+
preferences: {
|
|
420
|
+
communication_language: 'Spanish',
|
|
421
|
+
document_output_language: 'Spanish',
|
|
422
|
+
code_language: 'English'
|
|
423
|
+
},
|
|
424
|
+
workflows: {
|
|
425
|
+
current_phase: 'comercial',
|
|
426
|
+
completed_phases: []
|
|
427
|
+
}
|
|
428
|
+
};
|
|
429
|
+
|
|
430
|
+
await fs.writeJson(
|
|
431
|
+
path.join(projectPath, '.awc/config.json'),
|
|
432
|
+
awcConfig,
|
|
433
|
+
{ spaces: 2 }
|
|
434
|
+
);
|
|
435
|
+
spinner.text = 'Configuración AWC creada';
|
|
436
|
+
|
|
437
|
+
// 7. Crear README.md del proyecto
|
|
438
|
+
const readme = createReadmeContent(projectName, answers);
|
|
439
|
+
await fs.writeFile(path.join(projectPath, 'README.md'), readme);
|
|
440
|
+
spinner.text = 'README.md creado';
|
|
441
|
+
|
|
442
|
+
// 8. Crear .gitignore
|
|
443
|
+
const gitignore = createGitignoreContent();
|
|
444
|
+
await fs.writeFile(path.join(projectPath, '.gitignore'), gitignore);
|
|
445
|
+
spinner.text = '.gitignore creado';
|
|
446
|
+
|
|
447
|
+
// 9. Crear archivo de inicio para cada fase
|
|
448
|
+
await createPhaseGuides(projectPath);
|
|
449
|
+
spinner.text = 'Guías de fase creadas';
|
|
450
|
+
|
|
451
|
+
// 9.0. Crear README para client-docs
|
|
452
|
+
await createClientDocsReadmes(projectPath);
|
|
453
|
+
spinner.text = 'README de client-docs creados';
|
|
454
|
+
|
|
455
|
+
// 9.1. Crear configuración de VS Code
|
|
456
|
+
await createVSCodeConfig(projectPath);
|
|
457
|
+
spinner.text = 'Configuración VS Code creada';
|
|
458
|
+
|
|
459
|
+
// 9.2. Copiar copilot-instructions.md
|
|
460
|
+
const githubDir = path.join(projectPath, '.github');
|
|
461
|
+
await fs.ensureDir(githubDir);
|
|
462
|
+
const templateCopilotPath = path.join(__dirname, '../../../templates/.github/copilot-instructions.md');
|
|
463
|
+
if (await fs.pathExists(templateCopilotPath)) {
|
|
464
|
+
await fs.copy(templateCopilotPath, path.join(githubDir, 'copilot-instructions.md'));
|
|
465
|
+
spinner.text = 'GitHub Copilot instructions creadas';
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
// 10. Inicializar Git si se solicitó
|
|
469
|
+
if (answers.gitInit) {
|
|
470
|
+
const { execSync } = require('child_process');
|
|
471
|
+
try {
|
|
472
|
+
execSync('git init', { cwd: projectPath, stdio: 'ignore' });
|
|
473
|
+
execSync('git add .', { cwd: projectPath, stdio: 'ignore' });
|
|
474
|
+
execSync(`git commit -m "feat: Inicializar proyecto ${projectName} con AWC ZNS-MTD"`, {
|
|
475
|
+
cwd: projectPath,
|
|
476
|
+
stdio: 'ignore'
|
|
477
|
+
});
|
|
478
|
+
spinner.text = 'Repositorio Git inicializado';
|
|
479
|
+
} catch (error) {
|
|
480
|
+
// Git no está disponible o fallo, continuar sin git
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
spinner.succeed(chalk.green('✅ Proyecto creado exitosamente'));
|
|
485
|
+
|
|
486
|
+
// Mostrar resumen
|
|
487
|
+
console.log(chalk.cyan('\n' + '═'.repeat(60)));
|
|
488
|
+
console.log(chalk.cyan('📦 Resumen del Proyecto'));
|
|
489
|
+
console.log(chalk.cyan('═'.repeat(60) + '\n'));
|
|
490
|
+
|
|
491
|
+
console.log(`${chalk.gray('Nombre:')} ${chalk.green(projectName)}`);
|
|
492
|
+
console.log(`${chalk.gray('Tipo:')} ${chalk.yellow(answers.projectType)}`);
|
|
493
|
+
console.log(`${chalk.gray('Equipo:')} ${chalk.yellow(answers.teamSize)}`);
|
|
494
|
+
console.log(`${chalk.gray('Ubicación:')} ${chalk.blue(projectPath)}`);
|
|
495
|
+
console.log(`${chalk.gray('AWC Versión:')} ${chalk.yellow(getVersion())}\n`);
|
|
496
|
+
|
|
497
|
+
// Próximos pasos
|
|
498
|
+
console.log(chalk.cyan('📚 Próximos Pasos:\n'));
|
|
499
|
+
console.log(` ${chalk.green('1.')} cd ${projectName}`);
|
|
500
|
+
console.log(` ${chalk.green('2.')} Revisar ${chalk.yellow('01-comercial/START_HERE.md')}`);
|
|
501
|
+
console.log(` ${chalk.green('3.')} Completar discovery notes y análisis de viabilidad`);
|
|
502
|
+
console.log(` ${chalk.green('4.')} Ejecutar ${chalk.yellow('awc status')} para ver el progreso\n`);
|
|
503
|
+
|
|
504
|
+
console.log(chalk.cyan('🎯 Flujo de Trabajo Recomendado:\n'));
|
|
505
|
+
console.log(` ${chalk.gray('→')} Comercial (01-comercial/)`);
|
|
506
|
+
console.log(` ${chalk.gray('→')} Inception (02-inception/)`);
|
|
507
|
+
console.log(` ${chalk.gray('→')} Análisis (03-analysis/)`);
|
|
508
|
+
console.log(` ${chalk.gray('→')} Planificación (04-planning/)`);
|
|
509
|
+
console.log(` ${chalk.gray('→')} Desarrollo (05-development/)`);
|
|
510
|
+
console.log(` ${chalk.gray('→')} QA (06-qa/)`);
|
|
511
|
+
console.log(` ${chalk.gray('→')} Deployment (07-deployment/)`);
|
|
512
|
+
console.log(` ${chalk.gray('→')} Soporte (08-support/)\n`);
|
|
513
|
+
|
|
514
|
+
console.log(chalk.green('✨ ¡Listo para comenzar tu proyecto!\n'));
|
|
515
|
+
|
|
516
|
+
} catch (error) {
|
|
517
|
+
spinner.fail(chalk.red('❌ Error creando proyecto'));
|
|
518
|
+
throw error;
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
|
|
522
|
+
/**
|
|
523
|
+
* Crea el contenido del README.md
|
|
524
|
+
*/
|
|
525
|
+
function createReadmeContent(projectName, answers) {
|
|
526
|
+
return `# ${projectName}
|
|
527
|
+
|
|
528
|
+
> ${answers.description}
|
|
529
|
+
|
|
530
|
+
## 📋 Información del Proyecto
|
|
531
|
+
|
|
532
|
+
- **Tipo**: ${answers.projectType}
|
|
533
|
+
- **Equipo**: ${answers.teamSize}
|
|
534
|
+
- **Metodología**: AWC ZNS-MTD (Zen, Neutro, Sistemático)
|
|
535
|
+
|
|
536
|
+
## 🚀 Fases del Proyecto
|
|
537
|
+
|
|
538
|
+
Este proyecto sigue el método AWC ZNS-MTD con 8 fases completas:
|
|
539
|
+
|
|
540
|
+
### 📊 Fase 0: Comercial (01-comercial/)
|
|
541
|
+
- Prospección y discovery
|
|
542
|
+
- Oferta técnica
|
|
543
|
+
- Cotización
|
|
544
|
+
- Contrato
|
|
545
|
+
|
|
546
|
+
### 🎯 Fase 1: Inception (02-inception/)
|
|
547
|
+
- Kickoff meeting
|
|
548
|
+
- Product Requirements Document (PRD)
|
|
549
|
+
- Backlog inicial
|
|
550
|
+
- Release planning
|
|
551
|
+
|
|
552
|
+
### 🔍 Fase 2: Análisis (03-analysis/)
|
|
553
|
+
- Code audit (si aplica)
|
|
554
|
+
- Architecture review
|
|
555
|
+
- Technical debt assessment
|
|
556
|
+
- Recomendaciones
|
|
557
|
+
|
|
558
|
+
### 📅 Fase 3: Planificación (04-planning/)
|
|
559
|
+
- Sprint planning
|
|
560
|
+
- Backlog refinement
|
|
561
|
+
- Release planning
|
|
562
|
+
- Product roadmap
|
|
563
|
+
|
|
564
|
+
### 💻 Fase 4: Desarrollo (05-development/)
|
|
565
|
+
- Implementación TDD
|
|
566
|
+
- Code review
|
|
567
|
+
- CI/CD
|
|
568
|
+
|
|
569
|
+
### ✅ Fase 5: QA (06-qa/)
|
|
570
|
+
- Test planning
|
|
571
|
+
- Automated testing
|
|
572
|
+
- Manual testing
|
|
573
|
+
- UAT
|
|
574
|
+
|
|
575
|
+
### 🚀 Fase 6: Deployment (07-deployment/)
|
|
576
|
+
- Pre-deployment
|
|
577
|
+
- Staging
|
|
578
|
+
- Production
|
|
579
|
+
- Post-deployment
|
|
580
|
+
|
|
581
|
+
### 🛠️ Fase 7: Soporte (08-support/)
|
|
582
|
+
- Incident response
|
|
583
|
+
- Bug fixing
|
|
584
|
+
- Maintenance
|
|
585
|
+
- Monitoring
|
|
586
|
+
|
|
587
|
+
## 📚 Documentación
|
|
588
|
+
|
|
589
|
+
Toda la documentación del proyecto se encuentra en el directorio \`docs/\`:
|
|
590
|
+
|
|
591
|
+
- \`docs/architecture/\` - Diagramas y decisiones arquitectónicas
|
|
592
|
+
- \`docs/adr/\` - Architecture Decision Records
|
|
593
|
+
- \`docs/api/\` - Documentación de APIs
|
|
594
|
+
- \`docs/guides/\` - Guías de desarrollo y deployment
|
|
595
|
+
|
|
596
|
+
## 🔧 Configuración AWC
|
|
597
|
+
|
|
598
|
+
El directorio \`.awc/\` contiene:
|
|
599
|
+
|
|
600
|
+
- \`agents/\` - Agentes especializados AWC ZNS-MTD
|
|
601
|
+
- \`workflows/\` - Workflows para cada fase
|
|
602
|
+
- \`templates/\` - Templates de documentos
|
|
603
|
+
- \`config.json\` - Configuración del proyecto
|
|
604
|
+
|
|
605
|
+
## 🎯 Estado Actual
|
|
606
|
+
|
|
607
|
+
**Fase actual**: Comercial (inicio)
|
|
608
|
+
|
|
609
|
+
Revisar \`01-comercial/START_HERE.md\` para comenzar.
|
|
610
|
+
|
|
611
|
+
## 📝 Comandos AWC
|
|
612
|
+
|
|
613
|
+
\`\`\`bash
|
|
614
|
+
# Ver estado del proyecto
|
|
615
|
+
awc status
|
|
616
|
+
|
|
617
|
+
# Validar estructura
|
|
618
|
+
awc validate
|
|
619
|
+
|
|
620
|
+
# Ver configuración
|
|
621
|
+
awc config
|
|
622
|
+
\`\`\`
|
|
623
|
+
|
|
624
|
+
---
|
|
625
|
+
|
|
626
|
+
Generado con ❤️ usando AWC ZNS-MTD Method
|
|
627
|
+
`;
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
/**
|
|
631
|
+
* Crea el contenido del .gitignore
|
|
632
|
+
*/
|
|
633
|
+
function createGitignoreContent() {
|
|
634
|
+
return `# Dependencies
|
|
635
|
+
node_modules/
|
|
636
|
+
vendor/
|
|
637
|
+
bower_components/
|
|
638
|
+
|
|
639
|
+
# Build outputs
|
|
640
|
+
dist/
|
|
641
|
+
build/
|
|
642
|
+
out/
|
|
643
|
+
target/
|
|
644
|
+
*.exe
|
|
645
|
+
*.dll
|
|
646
|
+
*.so
|
|
647
|
+
*.dylib
|
|
648
|
+
|
|
649
|
+
# IDE
|
|
650
|
+
.vscode/
|
|
651
|
+
.idea/
|
|
652
|
+
*.swp
|
|
653
|
+
*.swo
|
|
654
|
+
*~
|
|
655
|
+
.DS_Store
|
|
656
|
+
|
|
657
|
+
# Logs
|
|
658
|
+
logs/
|
|
659
|
+
*.log
|
|
660
|
+
npm-debug.log*
|
|
661
|
+
yarn-debug.log*
|
|
662
|
+
yarn-error.log*
|
|
663
|
+
|
|
664
|
+
# Environment variables
|
|
665
|
+
.env
|
|
666
|
+
.env.local
|
|
667
|
+
.env.*.local
|
|
668
|
+
|
|
669
|
+
# OS
|
|
670
|
+
Thumbs.db
|
|
671
|
+
.DS_Store
|
|
672
|
+
|
|
673
|
+
# Temporary files
|
|
674
|
+
tmp/
|
|
675
|
+
temp/
|
|
676
|
+
*.tmp
|
|
677
|
+
|
|
678
|
+
# Coverage
|
|
679
|
+
coverage/
|
|
680
|
+
*.lcov
|
|
681
|
+
.nyc_output/
|
|
682
|
+
|
|
683
|
+
# Confidential (keep locally, never commit)
|
|
684
|
+
01-comercial/04-contract/*.pdf
|
|
685
|
+
**/confidential/
|
|
686
|
+
**/*-confidential.*
|
|
687
|
+
`;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
/**
|
|
691
|
+
* Crea guías de inicio para cada fase
|
|
692
|
+
*/
|
|
693
|
+
async function createPhaseGuides(projectPath) {
|
|
694
|
+
const phases = [
|
|
695
|
+
{
|
|
696
|
+
dir: '01-comercial',
|
|
697
|
+
title: 'Fase 0: Comercial',
|
|
698
|
+
content: `# 🎯 START HERE - Fase Comercial
|
|
699
|
+
|
|
700
|
+
## Objetivo
|
|
701
|
+
Capturar requisitos del cliente, evaluar viabilidad y generar oferta comercial.
|
|
702
|
+
|
|
703
|
+
## Pasos a seguir
|
|
704
|
+
|
|
705
|
+
### 1. Discovery & Prospección
|
|
706
|
+
📂 Directorio: \`01-prospection/\`
|
|
707
|
+
|
|
708
|
+
- [ ] Completar \`.awc/templates/discovery-notes.md\`
|
|
709
|
+
- [ ] Identificar stakeholders clave
|
|
710
|
+
- [ ] Entender el problema de negocio
|
|
711
|
+
- [ ] Documentar contexto actual
|
|
712
|
+
|
|
713
|
+
### 2. Análisis de Viabilidad
|
|
714
|
+
📂 Directorio: \`01-prospection/\`
|
|
715
|
+
|
|
716
|
+
- [ ] Completar \`.awc/templates/viabilidad.md\`
|
|
717
|
+
- [ ] Evaluar viabilidad técnica
|
|
718
|
+
- [ ] Evaluar viabilidad económica
|
|
719
|
+
- [ ] Identificar riesgos principales
|
|
720
|
+
|
|
721
|
+
### 3. Oferta Técnica
|
|
722
|
+
📂 Directorio: \`02-technical-proposal/\`
|
|
723
|
+
|
|
724
|
+
- [ ] Copiar template: \`.awc/templates/oferta-comercial.md\`
|
|
725
|
+
- [ ] Definir solución propuesta
|
|
726
|
+
- [ ] Especificar stack tecnológico
|
|
727
|
+
- [ ] Definir alcance y exclusiones
|
|
728
|
+
|
|
729
|
+
### 4. Cotización
|
|
730
|
+
📂 Directorio: \`03-quotation/\`
|
|
731
|
+
|
|
732
|
+
- [ ] Copiar template: \`.awc/templates/cotizacion.md\`
|
|
733
|
+
- [ ] Estimar esfuerzo por fase
|
|
734
|
+
- [ ] Calcular costos
|
|
735
|
+
- [ ] Definir cronograma
|
|
736
|
+
|
|
737
|
+
### 5. Contrato (confidencial)
|
|
738
|
+
📂 Directorio: \`04-contract/\`
|
|
739
|
+
|
|
740
|
+
- [ ] Negociar términos
|
|
741
|
+
- [ ] Firmar contrato
|
|
742
|
+
- [ ] Mover a siguiente fase
|
|
743
|
+
|
|
744
|
+
## ✅ Criterios de Salida
|
|
745
|
+
- ✅ Contrato firmado
|
|
746
|
+
- ✅ Cliente aprobó oferta y cotización
|
|
747
|
+
- ✅ Equipo asignado
|
|
748
|
+
- ✅ Fecha de kickoff definida
|
|
749
|
+
|
|
750
|
+
## ➡️ Siguiente Fase
|
|
751
|
+
Una vez completado, pasar a **02-inception/**
|
|
752
|
+
`
|
|
753
|
+
},
|
|
754
|
+
{
|
|
755
|
+
dir: '02-inception',
|
|
756
|
+
title: 'Fase 1: Inception',
|
|
757
|
+
content: `# 🚀 START HERE - Fase Inception
|
|
758
|
+
|
|
759
|
+
## Objetivo
|
|
760
|
+
Arranque formal del proyecto, definir PRD y backlog inicial.
|
|
761
|
+
|
|
762
|
+
## Pasos a seguir
|
|
763
|
+
|
|
764
|
+
### 1. Kickoff Meeting
|
|
765
|
+
📂 Directorio: \`01-kickoff/\`
|
|
766
|
+
|
|
767
|
+
- [ ] Copiar template: \`.awc/templates/kickoff-agenda.md\`
|
|
768
|
+
- [ ] Presentar equipo
|
|
769
|
+
- [ ] Alinear expectativas
|
|
770
|
+
- [ ] Definir canales de comunicación
|
|
771
|
+
|
|
772
|
+
### 2. Product Requirements Document (PRD)
|
|
773
|
+
📂 Directorio: \`02-prd/\`
|
|
774
|
+
|
|
775
|
+
- [ ] Copiar template: \`.awc/templates/PRD-template.md\`
|
|
776
|
+
- [ ] Documentar requisitos funcionales
|
|
777
|
+
- [ ] Documentar requisitos no funcionales
|
|
778
|
+
- [ ] Definir user personas
|
|
779
|
+
- [ ] Mapear user journeys
|
|
780
|
+
|
|
781
|
+
### 3. Backlog Inicial
|
|
782
|
+
📂 Directorio: \`03-backlog/\`
|
|
783
|
+
|
|
784
|
+
- [ ] Crear user stories
|
|
785
|
+
- [ ] Priorizar backlog (MoSCoW)
|
|
786
|
+
- [ ] Estimar user stories (Planning Poker)
|
|
787
|
+
- [ ] Crear epic mapping
|
|
788
|
+
|
|
789
|
+
### 4. Release Planning
|
|
790
|
+
📂 Directorio: \`04-release-planning/\`
|
|
791
|
+
|
|
792
|
+
- [ ] Definir MVP (release 1)
|
|
793
|
+
- [ ] Planificar releases subsecuentes
|
|
794
|
+
- [ ] Crear roadmap de producto
|
|
795
|
+
- [ ] Definir milestones
|
|
796
|
+
|
|
797
|
+
## ✅ Criterios de Salida
|
|
798
|
+
- ✅ PRD aprobado por stakeholders
|
|
799
|
+
- ✅ Backlog priorizado y estimado
|
|
800
|
+
- ✅ Release plan definido
|
|
801
|
+
- ✅ Sprint 1 planificado
|
|
802
|
+
|
|
803
|
+
## ➡️ Siguiente Fase
|
|
804
|
+
Dependiendo del proyecto:
|
|
805
|
+
- Proyecto nuevo → **04-planning/** (skip análisis)
|
|
806
|
+
- Proyecto existente → **03-analysis/**
|
|
807
|
+
`
|
|
808
|
+
},
|
|
809
|
+
{
|
|
810
|
+
dir: '05-development',
|
|
811
|
+
title: 'Fase 4: Desarrollo',
|
|
812
|
+
content: `# 💻 START HERE - Fase Desarrollo
|
|
813
|
+
|
|
814
|
+
## Objetivo
|
|
815
|
+
Implementar user stories siguiendo TDD y mejores prácticas.
|
|
816
|
+
|
|
817
|
+
## Estructura
|
|
818
|
+
\`\`\`
|
|
819
|
+
05-development/
|
|
820
|
+
├── src/ # Código fuente
|
|
821
|
+
├── tests/ # Tests (unit, integration, e2e)
|
|
822
|
+
└── docs/ # Documentación técnica
|
|
823
|
+
\`\`\`
|
|
824
|
+
|
|
825
|
+
## Pasos a seguir
|
|
826
|
+
|
|
827
|
+
### 1. Feature Kickoff
|
|
828
|
+
- [ ] Seleccionar user story del sprint backlog
|
|
829
|
+
- [ ] Revisar acceptance criteria
|
|
830
|
+
- [ ] Diseño técnico (si es necesario)
|
|
831
|
+
- [ ] Crear feature branch
|
|
832
|
+
|
|
833
|
+
### 2. Development (TDD)
|
|
834
|
+
- [ ] **RED**: Escribir test que falla
|
|
835
|
+
- [ ] **GREEN**: Implementar código mínimo para pasar test
|
|
836
|
+
- [ ] **REFACTOR**: Mejorar código manteniendo tests en verde
|
|
837
|
+
- [ ] Repetir ciclo
|
|
838
|
+
|
|
839
|
+
### 3. Code Review
|
|
840
|
+
- [ ] Crear Pull Request
|
|
841
|
+
- [ ] Solicitar revisión (mínimo 2 aprobadores)
|
|
842
|
+
- [ ] Aplicar feedback
|
|
843
|
+
- [ ] Aprobar PR
|
|
844
|
+
|
|
845
|
+
### 4. Integration
|
|
846
|
+
- [ ] Merge a develop/main
|
|
847
|
+
- [ ] CI/CD automático ejecuta tests
|
|
848
|
+
- [ ] Deploy automático a dev/staging
|
|
849
|
+
|
|
850
|
+
## 🎯 Mejores Prácticas
|
|
851
|
+
- ✅ Feature branches (feature/US-123-login)
|
|
852
|
+
- ✅ Commits frecuentes y descriptivos
|
|
853
|
+
- ✅ PRs pequeños (<400 líneas)
|
|
854
|
+
- ✅ Code coverage >80%
|
|
855
|
+
- ✅ SonarQube sin critical issues
|
|
856
|
+
|
|
857
|
+
## ➡️ Siguiente Fase
|
|
858
|
+
Una vez features completas → **06-qa/**
|
|
859
|
+
`
|
|
860
|
+
}
|
|
861
|
+
];
|
|
862
|
+
|
|
863
|
+
for (const phase of phases) {
|
|
864
|
+
const filePath = path.join(projectPath, phase.dir, 'START_HERE.md');
|
|
865
|
+
await fs.writeFile(filePath, phase.content);
|
|
866
|
+
}
|
|
867
|
+
}
|
|
868
|
+
|
|
869
|
+
/**
|
|
870
|
+
* Crea README.md en directorios client-docs
|
|
871
|
+
*/
|
|
872
|
+
async function createClientDocsReadmes(projectPath) {
|
|
873
|
+
const clientDocsReadmes = [
|
|
874
|
+
{
|
|
875
|
+
path: '01-comercial/docs/client-docs/README.md',
|
|
876
|
+
content: `# 📄 Documentación del Cliente - Fase Comercial
|
|
877
|
+
|
|
878
|
+
Este directorio contiene toda la documentación proporcionada por el cliente durante la fase comercial.
|
|
879
|
+
|
|
880
|
+
## 📂 Estructura
|
|
881
|
+
|
|
882
|
+
### requerimientos/
|
|
883
|
+
Documentos de requerimientos del cliente:
|
|
884
|
+
- PDFs con especificaciones funcionales
|
|
885
|
+
- Word con listados de requerimientos
|
|
886
|
+
- Excel con matrices de requerimientos
|
|
887
|
+
- Presentaciones con necesidades del negocio
|
|
888
|
+
|
|
889
|
+
### presentaciones/
|
|
890
|
+
Presentaciones del cliente:
|
|
891
|
+
- Decks ejecutivos
|
|
892
|
+
- Presentaciones de producto actual
|
|
893
|
+
- Material de marketing
|
|
894
|
+
- Diagramas de flujo de negocio
|
|
895
|
+
|
|
896
|
+
### contratos/
|
|
897
|
+
Documentos contractuales (CONFIDENCIAL):
|
|
898
|
+
- Contratos firmados
|
|
899
|
+
- NDAs
|
|
900
|
+
- SOWs (Statement of Work)
|
|
901
|
+
- Anexos contractuales
|
|
902
|
+
|
|
903
|
+
⚠️ **IMPORTANTE**: Los archivos en \`contratos/\` están en .gitignore por defecto.
|
|
904
|
+
|
|
905
|
+
## 📝 Buenas Prácticas
|
|
906
|
+
|
|
907
|
+
1. **Nomenclatura**: Usar formato \`YYYYMMDD-nombre-descriptivo.ext\`
|
|
908
|
+
- ✅ \`20260107-requerimientos-funcionales-v1.pdf\`
|
|
909
|
+
- ❌ \`documento.pdf\`
|
|
910
|
+
|
|
911
|
+
2. **Versionado**: Incluir versión en el nombre
|
|
912
|
+
- \`requerimientos-v1.0.docx\`
|
|
913
|
+
- \`requerimientos-v1.1.docx\`
|
|
914
|
+
|
|
915
|
+
3. **Organización**: Un archivo por tipo de documento
|
|
916
|
+
- No mezclar requerimientos con contratos
|
|
917
|
+
- Mantener presentaciones separadas
|
|
918
|
+
|
|
919
|
+
4. **Respaldo**: Mantener originales intactos
|
|
920
|
+
- No editar documentos del cliente
|
|
921
|
+
- Crear copias de trabajo si es necesario
|
|
922
|
+
`
|
|
923
|
+
},
|
|
924
|
+
{
|
|
925
|
+
path: '02-inception/docs/client-docs/README.md',
|
|
926
|
+
content: `# 📄 Documentación del Cliente - Fase Inception
|
|
927
|
+
|
|
928
|
+
Este directorio contiene la documentación del cliente relevante para el inicio del proyecto.
|
|
929
|
+
|
|
930
|
+
## 📂 Estructura
|
|
931
|
+
|
|
932
|
+
### procesos/
|
|
933
|
+
Diagramas y documentación de procesos actuales:
|
|
934
|
+
- Diagramas de flujo (BPMN, Visio)
|
|
935
|
+
- Mapas de procesos de negocio
|
|
936
|
+
- Descripciones de workflows actuales
|
|
937
|
+
- Casos de uso documentados
|
|
938
|
+
|
|
939
|
+
### manuales/
|
|
940
|
+
Manuales de usuario de sistemas existentes:
|
|
941
|
+
- Manuales de usuario en PDF/Word
|
|
942
|
+
- Guías de operación
|
|
943
|
+
- Documentación de sistemas legacy
|
|
944
|
+
- FAQs del sistema actual
|
|
945
|
+
|
|
946
|
+
### imagenes/
|
|
947
|
+
Material visual del cliente:
|
|
948
|
+
- Screenshots de sistemas actuales
|
|
949
|
+
- Wireframes/mockups proporcionados
|
|
950
|
+
- Logos y branding guidelines
|
|
951
|
+
- Fotografías de procesos físicos
|
|
952
|
+
- Diagramas y esquemas
|
|
953
|
+
|
|
954
|
+
## 📝 Uso Recomendado
|
|
955
|
+
|
|
956
|
+
**procesos/**: Usar para entender flujos actuales y diseñar mejoras
|
|
957
|
+
**manuales/**: Referencia para features esperados en el nuevo sistema
|
|
958
|
+
**imagenes/**: Material visual para PRD y documentación
|
|
959
|
+
|
|
960
|
+
## ⚠️ Importante
|
|
961
|
+
- Estos documentos son REFERENCIA, no especificaciones finales
|
|
962
|
+
- Validar con stakeholders antes de implementar
|
|
963
|
+
- Mantener trazabilidad con el PRD
|
|
964
|
+
`
|
|
965
|
+
},
|
|
966
|
+
{
|
|
967
|
+
path: '03-analysis/docs/client-docs/README.md',
|
|
968
|
+
content: `# 📄 Documentación del Cliente - Fase Análisis
|
|
969
|
+
|
|
970
|
+
Documentación técnica del cliente para auditoría y análisis.
|
|
971
|
+
|
|
972
|
+
## 📂 Estructura
|
|
973
|
+
|
|
974
|
+
### arquitectura/
|
|
975
|
+
Diagramas arquitectónicos actuales:
|
|
976
|
+
- Diagramas de arquitectura (C4, UML)
|
|
977
|
+
- Diagramas de red e infraestructura
|
|
978
|
+
- Diagramas de componentes
|
|
979
|
+
- Documentos de diseño técnico
|
|
980
|
+
|
|
981
|
+
### databases/
|
|
982
|
+
Documentación de bases de datos:
|
|
983
|
+
- Esquemas de base de datos (ERD)
|
|
984
|
+
- Modelos de datos en PDF/Visio
|
|
985
|
+
- Scripts SQL de estructura
|
|
986
|
+
- Diccionarios de datos
|
|
987
|
+
- Excel con tablas y campos
|
|
988
|
+
|
|
989
|
+
### especificaciones/
|
|
990
|
+
Especificaciones técnicas:
|
|
991
|
+
- Documentos de APIs existentes (Swagger, Postman)
|
|
992
|
+
- Especificaciones de interfaces
|
|
993
|
+
- Protocolos de integración
|
|
994
|
+
- Documentación de servicios web
|
|
995
|
+
|
|
996
|
+
## 🎯 Objetivo
|
|
997
|
+
|
|
998
|
+
Entender la arquitectura actual para:
|
|
999
|
+
- Identificar technical debt
|
|
1000
|
+
- Planificar migraciones
|
|
1001
|
+
- Diseñar integraciones
|
|
1002
|
+
- Evaluar impacto de cambios
|
|
1003
|
+
|
|
1004
|
+
## 📊 Artefactos Generados
|
|
1005
|
+
|
|
1006
|
+
A partir de esta documentación, el equipo AWC generará:
|
|
1007
|
+
- Reporte de auditoría de código
|
|
1008
|
+
- Análisis de arquitectura
|
|
1009
|
+
- Assessment de technical debt
|
|
1010
|
+
- Recomendaciones de mejora
|
|
1011
|
+
`
|
|
1012
|
+
},
|
|
1013
|
+
{
|
|
1014
|
+
path: '04-planning/docs/client-docs/README.md',
|
|
1015
|
+
content: `# 📄 Documentación del Cliente - Fase Planificación
|
|
1016
|
+
|
|
1017
|
+
Documentación del cliente para planificación de sprints.
|
|
1018
|
+
|
|
1019
|
+
## 📂 Estructura
|
|
1020
|
+
|
|
1021
|
+
### historias/
|
|
1022
|
+
User stories y casos de uso del cliente:
|
|
1023
|
+
- Word/Excel con historias de usuario
|
|
1024
|
+
- Casos de uso detallados
|
|
1025
|
+
- Escenarios de negocio
|
|
1026
|
+
- Criterios de aceptación iniciales
|
|
1027
|
+
|
|
1028
|
+
### estimaciones/
|
|
1029
|
+
Material para estimación:
|
|
1030
|
+
- Hojas de cálculo con estimaciones del cliente
|
|
1031
|
+
- Referencias de proyectos similares
|
|
1032
|
+
- Benchmarks de performance esperado
|
|
1033
|
+
- Constraints de tiempo/presupuesto
|
|
1034
|
+
|
|
1035
|
+
## 💡 Uso
|
|
1036
|
+
|
|
1037
|
+
Esta documentación ayuda a:
|
|
1038
|
+
- Refinar user stories del backlog
|
|
1039
|
+
- Validar estimaciones del equipo
|
|
1040
|
+
- Alinear expectativas de tiempos
|
|
1041
|
+
- Priorizar features según negocio
|
|
1042
|
+
`
|
|
1043
|
+
},
|
|
1044
|
+
{
|
|
1045
|
+
path: '05-development/docs/client-docs/README.md',
|
|
1046
|
+
content: `# 📄 Documentación del Cliente - Fase Desarrollo
|
|
1047
|
+
|
|
1048
|
+
Recursos técnicos del cliente necesarios para implementación.
|
|
1049
|
+
|
|
1050
|
+
## 📂 Estructura
|
|
1051
|
+
|
|
1052
|
+
### apis/
|
|
1053
|
+
Documentación de APIs a integrar:
|
|
1054
|
+
- Swagger/OpenAPI specs
|
|
1055
|
+
- Colecciones de Postman
|
|
1056
|
+
- WSDL de servicios SOAP
|
|
1057
|
+
- Documentación de endpoints REST
|
|
1058
|
+
- Credenciales de acceso (sandbox/test)
|
|
1059
|
+
|
|
1060
|
+
### integraciones/
|
|
1061
|
+
Sistemas externos a integrar:
|
|
1062
|
+
- Manuales de integración
|
|
1063
|
+
- Diagramas de flujo de integración
|
|
1064
|
+
- Mappings de campos
|
|
1065
|
+
- Ejemplos de payloads XML/JSON
|
|
1066
|
+
- Certificados SSL/TLS
|
|
1067
|
+
|
|
1068
|
+
### recursos/
|
|
1069
|
+
Assets para la aplicación:
|
|
1070
|
+
- Imágenes para UI (logos, iconos)
|
|
1071
|
+
- Archivos de diseño (Figma, Sketch exports)
|
|
1072
|
+
- Fuentes corporativas
|
|
1073
|
+
- Guidelines de branding
|
|
1074
|
+
- Templates de documentos
|
|
1075
|
+
|
|
1076
|
+
## 🔧 Integración
|
|
1077
|
+
|
|
1078
|
+
**Antes de integrar**:
|
|
1079
|
+
1. Validar credenciales en ambiente de pruebas
|
|
1080
|
+
2. Revisar rate limits y SLAs
|
|
1081
|
+
3. Documentar endpoints en Swagger local
|
|
1082
|
+
4. Crear tests de integración
|
|
1083
|
+
|
|
1084
|
+
**Durante desarrollo**:
|
|
1085
|
+
- Mantener colecciones de Postman actualizadas
|
|
1086
|
+
- Documentar cambios en APIs
|
|
1087
|
+
- Reportar issues de integración al cliente
|
|
1088
|
+
`
|
|
1089
|
+
},
|
|
1090
|
+
{
|
|
1091
|
+
path: '06-qa/docs/client-docs/README.md',
|
|
1092
|
+
content: `# 📄 Documentación del Cliente - Fase QA
|
|
1093
|
+
|
|
1094
|
+
Material del cliente para validación y pruebas.
|
|
1095
|
+
|
|
1096
|
+
## 📂 Estructura
|
|
1097
|
+
|
|
1098
|
+
### criterios-aceptacion/
|
|
1099
|
+
Criterios de aceptación del cliente:
|
|
1100
|
+
- Excel/Word con criterios de aceptación
|
|
1101
|
+
- Checklist de features esperados
|
|
1102
|
+
- Requerimientos no funcionales (SLA, performance)
|
|
1103
|
+
- Escenarios de validación de negocio
|
|
1104
|
+
|
|
1105
|
+
### escenarios-prueba/
|
|
1106
|
+
Escenarios de prueba proporcionados:
|
|
1107
|
+
- Casos de prueba del cliente
|
|
1108
|
+
- Datos de prueba (datasets CSV/Excel)
|
|
1109
|
+
- Scripts de carga de datos
|
|
1110
|
+
- Escenarios end-to-end prioritarios
|
|
1111
|
+
|
|
1112
|
+
## ✅ Validación
|
|
1113
|
+
|
|
1114
|
+
Esta documentación se usa para:
|
|
1115
|
+
1. Crear test cases alineados con expectativas
|
|
1116
|
+
2. Generar datos de prueba realistas
|
|
1117
|
+
3. Validar acceptance criteria
|
|
1118
|
+
4. Preparar UAT con el cliente
|
|
1119
|
+
|
|
1120
|
+
## 📋 UAT (User Acceptance Testing)
|
|
1121
|
+
|
|
1122
|
+
Coordinar con cliente:
|
|
1123
|
+
- [ ] Ambiente de UAT preparado
|
|
1124
|
+
- [ ] Usuarios de prueba creados
|
|
1125
|
+
- [ ] Datasets cargados
|
|
1126
|
+
- [ ] Sesiones de UAT agendadas
|
|
1127
|
+
- [ ] Formulario de signoff preparado
|
|
1128
|
+
`
|
|
1129
|
+
},
|
|
1130
|
+
{
|
|
1131
|
+
path: '07-deployment/docs/client-docs/README.md',
|
|
1132
|
+
content: `# 📄 Documentación del Cliente - Fase Deployment
|
|
1133
|
+
|
|
1134
|
+
Información de infraestructura del cliente para deployment.
|
|
1135
|
+
|
|
1136
|
+
## 📂 Estructura
|
|
1137
|
+
|
|
1138
|
+
### infraestructura/
|
|
1139
|
+
Documentación de infraestructura del cliente:
|
|
1140
|
+
- Diagramas de red
|
|
1141
|
+
- Especificaciones de servidores
|
|
1142
|
+
- Configuraciones de firewalls
|
|
1143
|
+
- IPs y rangos asignados
|
|
1144
|
+
- Políticas de seguridad
|
|
1145
|
+
|
|
1146
|
+
### accesos/
|
|
1147
|
+
Credenciales y accesos (CONFIDENCIAL):
|
|
1148
|
+
- Credenciales de servidores
|
|
1149
|
+
- VPN configs
|
|
1150
|
+
- Certificados SSL
|
|
1151
|
+
- API keys de producción
|
|
1152
|
+
- Passwords de bases de datos
|
|
1153
|
+
|
|
1154
|
+
⚠️ **CRÍTICO**:
|
|
1155
|
+
- Archivos en esta carpeta están en .gitignore
|
|
1156
|
+
- Usar gestor de secretos (Azure Key Vault, AWS Secrets Manager)
|
|
1157
|
+
- NUNCA commitear credenciales al repositorio
|
|
1158
|
+
|
|
1159
|
+
## 🚀 Pre-Deployment Checklist
|
|
1160
|
+
|
|
1161
|
+
- [ ] Accesos a servidores validados
|
|
1162
|
+
- [ ] VPN configurada y probada
|
|
1163
|
+
- [ ] DNS apuntando correctamente
|
|
1164
|
+
- [ ] Certificados SSL instalados
|
|
1165
|
+
- [ ] Firewall rules configurados
|
|
1166
|
+
- [ ] Backup de producción realizado
|
|
1167
|
+
`
|
|
1168
|
+
},
|
|
1169
|
+
{
|
|
1170
|
+
path: '08-support/docs/client-docs/README.md',
|
|
1171
|
+
content: `# 📄 Documentación del Cliente - Fase Soporte
|
|
1172
|
+
|
|
1173
|
+
Documentación de incidentes y solicitudes del cliente.
|
|
1174
|
+
|
|
1175
|
+
## 📂 Estructura
|
|
1176
|
+
|
|
1177
|
+
### incidentes/
|
|
1178
|
+
Reportes de incidentes del cliente:
|
|
1179
|
+
- Screenshots de errores
|
|
1180
|
+
- Logs proporcionados por el cliente
|
|
1181
|
+
- Videos reproduciendo issues
|
|
1182
|
+
- Reportes de usuarios finales
|
|
1183
|
+
|
|
1184
|
+
### cambios/
|
|
1185
|
+
Solicitudes de cambio:
|
|
1186
|
+
- Change requests (PDFs/Word)
|
|
1187
|
+
- Nuevos requerimientos post-lanzamiento
|
|
1188
|
+
- Solicitudes de mejoras
|
|
1189
|
+
- Feedback de usuarios
|
|
1190
|
+
|
|
1191
|
+
## 🎫 Gestión de Incidentes
|
|
1192
|
+
|
|
1193
|
+
**Flujo recomendado**:
|
|
1194
|
+
1. Cliente reporta → Copiar evidencia a \`incidentes/\`
|
|
1195
|
+
2. Crear ticket en sistema de tracking
|
|
1196
|
+
3. Reproducir y documentar en \`08-support/incidents/\`
|
|
1197
|
+
4. Resolver y validar con cliente
|
|
1198
|
+
|
|
1199
|
+
**Nomenclatura**:
|
|
1200
|
+
- \`INC-001-descripcion-corta/\` (subdirectorio por incidente)
|
|
1201
|
+
- Dentro: screenshots, logs, análisis, solución
|
|
1202
|
+
|
|
1203
|
+
## 📝 Change Requests
|
|
1204
|
+
|
|
1205
|
+
**Evaluación**:
|
|
1206
|
+
1. Cliente envía CR → Guardar en \`cambios/\`
|
|
1207
|
+
2. Equipo analiza impacto (tiempo/costo)
|
|
1208
|
+
3. Aprobar/rechazar con justificación
|
|
1209
|
+
4. Si aprobado → Crear user stories en backlog
|
|
1210
|
+
`
|
|
1211
|
+
}
|
|
1212
|
+
];
|
|
1213
|
+
|
|
1214
|
+
for (const readme of clientDocsReadmes) {
|
|
1215
|
+
const filePath = path.join(projectPath, readme.path);
|
|
1216
|
+
await fs.writeFile(filePath, readme.content);
|
|
1217
|
+
}
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1220
|
+
/**
|
|
1221
|
+
* Crea configuración de VS Code para cargar AWC automáticamente
|
|
1222
|
+
*/
|
|
1223
|
+
async function createVSCodeConfig(projectPath) {
|
|
1224
|
+
const vscodeDir = path.join(projectPath, '.vscode');
|
|
1225
|
+
await fs.ensureDir(vscodeDir);
|
|
1226
|
+
|
|
1227
|
+
// settings.json - Configuración de workspace
|
|
1228
|
+
const settings = {
|
|
1229
|
+
"github.copilot.enable": {
|
|
1230
|
+
"*": true
|
|
1231
|
+
},
|
|
1232
|
+
"github.copilot.advanced": {},
|
|
1233
|
+
"files.associations": {
|
|
1234
|
+
"*.agent.yaml": "yaml",
|
|
1235
|
+
"copilot-instructions.md": "markdown"
|
|
1236
|
+
},
|
|
1237
|
+
"files.exclude": {
|
|
1238
|
+
"**/.git": true,
|
|
1239
|
+
"**/.DS_Store": true,
|
|
1240
|
+
"**/node_modules": true
|
|
1241
|
+
},
|
|
1242
|
+
"search.exclude": {
|
|
1243
|
+
"**/node_modules": true,
|
|
1244
|
+
"**/bower_components": true,
|
|
1245
|
+
"**/*.code-search": true
|
|
1246
|
+
},
|
|
1247
|
+
"awc-zns-mtd.enabled": true,
|
|
1248
|
+
"awc-zns-mtd.autoLoadInstructions": true
|
|
1249
|
+
};
|
|
1250
|
+
|
|
1251
|
+
await fs.writeJson(
|
|
1252
|
+
path.join(vscodeDir, 'settings.json'),
|
|
1253
|
+
settings,
|
|
1254
|
+
{ spaces: 2 }
|
|
1255
|
+
);
|
|
1256
|
+
|
|
1257
|
+
// extensions.json - Extensiones recomendadas
|
|
1258
|
+
const extensions = {
|
|
1259
|
+
"recommendations": [
|
|
1260
|
+
"github.copilot",
|
|
1261
|
+
"github.copilot-chat",
|
|
1262
|
+
"redhat.vscode-yaml",
|
|
1263
|
+
"yzhang.markdown-all-in-one"
|
|
1264
|
+
]
|
|
1265
|
+
};
|
|
1266
|
+
|
|
1267
|
+
await fs.writeJson(
|
|
1268
|
+
path.join(vscodeDir, 'extensions.json'),
|
|
1269
|
+
extensions,
|
|
1270
|
+
{ spaces: 2 }
|
|
1271
|
+
);
|
|
1272
|
+
|
|
1273
|
+
// AWC-ZNS-MTD.code-workspace - Workspace file
|
|
1274
|
+
const workspace = {
|
|
1275
|
+
"folders": [
|
|
1276
|
+
{
|
|
1277
|
+
"path": ".",
|
|
1278
|
+
"name": path.basename(projectPath)
|
|
1279
|
+
}
|
|
1280
|
+
],
|
|
1281
|
+
"settings": {
|
|
1282
|
+
"github.copilot.enable": {
|
|
1283
|
+
"*": true
|
|
1284
|
+
},
|
|
1285
|
+
"awc-zns-mtd.enabled": true
|
|
1286
|
+
},
|
|
1287
|
+
"extensions": {
|
|
1288
|
+
"recommendations": [
|
|
1289
|
+
"github.copilot",
|
|
1290
|
+
"github.copilot-chat"
|
|
1291
|
+
]
|
|
1292
|
+
}
|
|
1293
|
+
};
|
|
1294
|
+
|
|
1295
|
+
await fs.writeJson(
|
|
1296
|
+
path.join(projectPath, `${path.basename(projectPath)}.code-workspace`),
|
|
1297
|
+
workspace,
|
|
1298
|
+
{ spaces: 2 }
|
|
1299
|
+
);
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
module.exports = { newProjectCommand };
|