siesa-agents 2.1.26-dev.0 → 2.1.26-dev.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/README.md +7 -2
- package/bin/install.js +106 -5
- package/bmad-core/agents/analyst.md +1 -1
- package/bmad-core/agents/architect.md +24 -2
- package/bmad-core/agents/backend-agent.md +74 -86
- package/bmad-core/agents/bmad-master.md +2 -2
- package/bmad-core/agents/bmad-orchestrator.md +2 -2
- package/bmad-core/agents/dev.md +1 -1
- package/bmad-core/agents/frontend-agent.md +4 -4
- package/bmad-core/agents/pm.md +4 -1
- package/bmad-core/agents/po.md +4 -1
- package/bmad-core/agents/qa.md +1 -1
- package/bmad-core/agents/sm.md +1 -1
- package/bmad-core/agents/ux-expert.md +2 -1
- package/bmad-core/checklists/architect-checklist.md +2 -0
- package/bmad-core/checklists/backend-checklist.md +10 -6
- package/bmad-core/data/architecture-patterns.md +415 -0
- package/bmad-core/data/backend-standards.md +737 -365
- package/bmad-core/data/bmad-kb.md +1 -1
- package/bmad-core/data/frontend-standards.md +1 -1
- package/bmad-core/data/technical-preferences-ux.md +1 -1
- package/bmad-core/data/technical-preferences.md +106 -1
- package/bmad-core/data/technology-stack.md +235 -0
- package/bmad-core/tasks/apply-qa-fixes.md +4 -4
- package/bmad-core/tasks/create-doc.md +59 -0
- package/bmad-core/tasks/create-entity.md +3 -3
- package/bmad-core/tasks/create-next-story.md +1 -1
- package/bmad-core/tasks/create-service.md +3 -3
- package/bmad-core/tasks/nfr-assess.md +3 -3
- package/bmad-core/tasks/qa-gate.md +2 -2
- package/bmad-core/tasks/review-story.md +1 -1
- package/bmad-core/tasks/scaffold-backend.md +13 -9
- package/bmad-core/tasks/scaffold-frontend.md +2 -2
- package/bmad-core/templates/architecture-tmpl.yaml +2 -2
- package/bmad-core/templates/front-end-architecture-tmpl.yaml +1 -1
- package/bmad-core/templates/story-tmpl.yaml +1 -1
- package/bmad-core/user-guide.md +1 -1
- package/claude/commands/BMad/agents/analyst.md +1 -1
- package/claude/commands/BMad/agents/architect.md +21 -1
- package/claude/commands/BMad/agents/backend.md +86 -99
- package/claude/commands/BMad/agents/bmad-master.md +2 -2
- package/claude/commands/BMad/agents/bmad-orchestrator.md +2 -2
- package/claude/commands/BMad/agents/dev.md +1 -1
- package/claude/commands/BMad/agents/frontend.md +4 -4
- package/claude/commands/BMad/agents/pm.md +4 -1
- package/claude/commands/BMad/agents/po.md +4 -1
- package/claude/commands/BMad/agents/qa.md +1 -1
- package/claude/commands/BMad/agents/sm.md +1 -1
- package/claude/commands/BMad/agents/ux-expert.md +1 -1
- package/claude/commands/BMad/tasks/apply-qa-fixes.md +4 -4
- package/claude/commands/BMad/tasks/create-doc.md +48 -0
- package/claude/commands/BMad/tasks/create-next-story.md +1 -1
- package/claude/commands/BMad/tasks/nfr-assess.md +3 -3
- package/claude/commands/BMad/tasks/qa-gate.md +2 -2
- package/claude/commands/BMad/tasks/review-story.md +1 -1
- package/claude/settings.local.json +18 -1
- package/github/chatmodes/architect.chatmode.md +7 -1
- package/github/chatmodes/backend.chatmode.md +133 -109
- package/github/chatmodes/dev.chatmode.md +12 -4
- package/github/chatmodes/frontend.chatmode.md +3 -3
- package/github/chatmodes/qa.chatmode.md +9 -3
- package/kiro/steering/agent-detection.md +16 -16
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SIESA
|
|
1
|
+
# SIESA Agents
|
|
2
2
|
|
|
3
3
|
Paquete para instalar y configurar agentes SIESA en tu proyecto.
|
|
4
4
|
|
|
@@ -52,6 +52,7 @@ El paquete instala las siguientes carpetas en tu directorio actual:
|
|
|
52
52
|
- **`.bmad-core/`** - Archivos principales del sistema BMAD
|
|
53
53
|
- **`.vscode/`** - Configuración de Visual Studio Code
|
|
54
54
|
- **`.github/`** - Configuración de GitHub Actions y workflows
|
|
55
|
+
- **`.claude/`** - Configuración de Claude Code Commands y workflows
|
|
55
56
|
|
|
56
57
|
## Características
|
|
57
58
|
|
|
@@ -86,6 +87,7 @@ El sistema detectará automáticamente que ya existe una instalación y la actua
|
|
|
86
87
|
|
|
87
88
|
- Node.js >= 14.0.0
|
|
88
89
|
- npm >= 6.0.0
|
|
90
|
+
- Python >= 3.7 (requerido para hooks de Claude Code)
|
|
89
91
|
|
|
90
92
|
## Estructura de archivos instalados
|
|
91
93
|
|
|
@@ -115,4 +117,7 @@ MIT
|
|
|
115
117
|
|
|
116
118
|
## Autor
|
|
117
119
|
|
|
118
|
-
SIESA - Sistemas de Información Empresarial
|
|
120
|
+
SIESA - Sistemas de Información Empresarial
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
*Versión actualizada automáticamente por CI/CD*
|
package/bin/install.js
CHANGED
|
@@ -16,10 +16,20 @@ class SiesaBmadInstaller {
|
|
|
16
16
|
{ source: 'kiro', target: '.kiro' },
|
|
17
17
|
{ source: 'resources', target: '.resources' }
|
|
18
18
|
];
|
|
19
|
+
|
|
20
|
+
// Lista de archivos que se preservan automáticamente (no se crean backups)
|
|
21
|
+
this.ignoredFiles = [
|
|
22
|
+
'data/technical-preferences.md'
|
|
23
|
+
];
|
|
24
|
+
|
|
19
25
|
this.targetDir = process.cwd();
|
|
20
26
|
// Intentar múltiples ubicaciones posibles para el paquete
|
|
21
27
|
this.packageDir = this.findPackageDir();
|
|
28
|
+
|
|
29
|
+
// Almacenamiento temporal para contenido de archivos ignorados
|
|
30
|
+
this.preservedContent = new Map();
|
|
22
31
|
}
|
|
32
|
+
|
|
23
33
|
|
|
24
34
|
showBanner() {
|
|
25
35
|
console.log('\n');
|
|
@@ -127,7 +137,8 @@ class SiesaBmadInstaller {
|
|
|
127
137
|
modifiedFiles.push({
|
|
128
138
|
folder: mapping.target,
|
|
129
139
|
file: relativePath,
|
|
130
|
-
fullPath: targetFile
|
|
140
|
+
fullPath: targetFile,
|
|
141
|
+
is_ignored: this.ignoredFiles.includes(relativePath)
|
|
131
142
|
});
|
|
132
143
|
}
|
|
133
144
|
} catch (error) {
|
|
@@ -139,7 +150,8 @@ class SiesaBmadInstaller {
|
|
|
139
150
|
modifiedFiles.push({
|
|
140
151
|
folder: mapping.target,
|
|
141
152
|
file: relativePath,
|
|
142
|
-
fullPath: targetFile
|
|
153
|
+
fullPath: targetFile,
|
|
154
|
+
is_ignored: this.ignoredFiles.includes(relativePath)
|
|
143
155
|
});
|
|
144
156
|
}
|
|
145
157
|
}
|
|
@@ -170,6 +182,10 @@ class SiesaBmadInstaller {
|
|
|
170
182
|
}
|
|
171
183
|
|
|
172
184
|
async promptUser(modifiedFiles) {
|
|
185
|
+
|
|
186
|
+
const hasNonIgnoredFiles = modifiedFiles.some(file => file.is_ignored == false)
|
|
187
|
+
if (!hasNonIgnoredFiles) return '2'
|
|
188
|
+
|
|
173
189
|
console.log('\n⚠️ Se detectaron archivos modificados:');
|
|
174
190
|
|
|
175
191
|
// Agrupar por carpeta
|
|
@@ -210,6 +226,12 @@ class SiesaBmadInstaller {
|
|
|
210
226
|
console.log('\n🔄 Creando backup de archivos modificados...');
|
|
211
227
|
|
|
212
228
|
for (const item of modifiedFiles) {
|
|
229
|
+
// No crear backup de archivos ignorados
|
|
230
|
+
if (item.is_ignored) {
|
|
231
|
+
console.log(`✓ Preservando: ${item.file} (sin backup)`);
|
|
232
|
+
continue;
|
|
233
|
+
}
|
|
234
|
+
|
|
213
235
|
const originalPath = item.fullPath;
|
|
214
236
|
const backupPath = this.getBackupPath(originalPath);
|
|
215
237
|
|
|
@@ -273,11 +295,21 @@ class SiesaBmadInstaller {
|
|
|
273
295
|
async copyWithBackupPreservation(sourcePath, targetPath) {
|
|
274
296
|
// Obtener todos los archivos backup existentes
|
|
275
297
|
const backupFiles = await this.findBackupFiles(targetPath);
|
|
298
|
+
|
|
299
|
+
// Copiar la carpeta preservando technical-preferences.md
|
|
276
300
|
|
|
277
|
-
// Copiar la carpeta completa sobrescribiendo
|
|
278
301
|
await fs.copy(sourcePath, targetPath, {
|
|
279
302
|
overwrite: true,
|
|
280
|
-
recursive: true
|
|
303
|
+
recursive: true,
|
|
304
|
+
filter: (src) => {
|
|
305
|
+
const relativePath = path.relative(sourcePath, src);
|
|
306
|
+
// No sobrescribir archivos ignorados si ya existen
|
|
307
|
+
if (this.ignoredFiles.includes(relativePath)) {
|
|
308
|
+
const targetFile = path.join(targetPath, relativePath);
|
|
309
|
+
return !fs.existsSync(targetFile);
|
|
310
|
+
}
|
|
311
|
+
return true;
|
|
312
|
+
}
|
|
281
313
|
});
|
|
282
314
|
|
|
283
315
|
// Restaurar los archivos backup
|
|
@@ -332,7 +364,16 @@ class SiesaBmadInstaller {
|
|
|
332
364
|
if (fs.existsSync(sourcePath)) {
|
|
333
365
|
await fs.copy(sourcePath, targetPath, {
|
|
334
366
|
overwrite: true,
|
|
335
|
-
recursive: true
|
|
367
|
+
recursive: true,
|
|
368
|
+
filter: (src) => {
|
|
369
|
+
const relativePath = path.relative(sourcePath, src);
|
|
370
|
+
// No sobrescribir archivos ignorados si ya existen
|
|
371
|
+
if (this.ignoredFiles.includes(relativePath)) {
|
|
372
|
+
const targetFile = path.join(targetPath, relativePath);
|
|
373
|
+
return !fs.existsSync(targetFile);
|
|
374
|
+
}
|
|
375
|
+
return true;
|
|
376
|
+
}
|
|
336
377
|
});
|
|
337
378
|
} else {
|
|
338
379
|
console.warn(`⚠️ Carpeta ${mapping.source} no encontrada en el paquete`);
|
|
@@ -368,6 +409,9 @@ class SiesaBmadInstaller {
|
|
|
368
409
|
await this.performUpdateWithBackups();
|
|
369
410
|
} else {
|
|
370
411
|
// Si no hay backups, hacer actualización normal (remover y copiar)
|
|
412
|
+
// Pero primero preservar archivos ignorados
|
|
413
|
+
await this.preserveIgnoredFiles();
|
|
414
|
+
|
|
371
415
|
for (const mapping of this.folderMappings) {
|
|
372
416
|
const targetPath = path.join(this.targetDir, mapping.target);
|
|
373
417
|
|
|
@@ -378,7 +422,64 @@ class SiesaBmadInstaller {
|
|
|
378
422
|
|
|
379
423
|
// Realizar instalación nueva
|
|
380
424
|
await this.performInstallation();
|
|
425
|
+
|
|
426
|
+
// Restaurar archivos ignorados
|
|
427
|
+
await this.restoreIgnoredFiles();
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
async preserveIgnoredFiles() {
|
|
432
|
+
console.log('🔒 Preservando archivos de configuración...');
|
|
433
|
+
|
|
434
|
+
for (const mapping of this.folderMappings) {
|
|
435
|
+
const targetFolderPath = path.join(this.targetDir, mapping.target);
|
|
436
|
+
|
|
437
|
+
if (!fs.existsSync(targetFolderPath)) {
|
|
438
|
+
continue;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
for (const ignoredFile of this.ignoredFiles) {
|
|
442
|
+
const filePath = path.join(targetFolderPath, ignoredFile);
|
|
443
|
+
|
|
444
|
+
if (fs.existsSync(filePath)) {
|
|
445
|
+
try {
|
|
446
|
+
const content = await fs.readFile(filePath, 'utf8');
|
|
447
|
+
const key = `${mapping.target}/${ignoredFile}`;
|
|
448
|
+
this.preservedContent.set(key, content);
|
|
449
|
+
console.log(`✓ Preservando: ${ignoredFile}`);
|
|
450
|
+
} catch (error) {
|
|
451
|
+
console.warn(`⚠️ Error leyendo ${ignoredFile}: ${error.message}`);
|
|
452
|
+
}
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
async restoreIgnoredFiles() {
|
|
459
|
+
if (this.preservedContent.size === 0) {
|
|
460
|
+
return;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
console.log('🔄 Restaurando archivos de configuración...');
|
|
464
|
+
|
|
465
|
+
for (const [key, content] of this.preservedContent) {
|
|
466
|
+
const [targetFolder, ...filePathParts] = key.split('/');
|
|
467
|
+
const filePath = path.join(this.targetDir, targetFolder, ...filePathParts);
|
|
468
|
+
|
|
469
|
+
try {
|
|
470
|
+
// Asegurar que el directorio existe
|
|
471
|
+
await fs.ensureDir(path.dirname(filePath));
|
|
472
|
+
|
|
473
|
+
// Restaurar el contenido
|
|
474
|
+
await fs.writeFile(filePath, content, 'utf8');
|
|
475
|
+
console.log(`✓ Restaurado: ${filePathParts.join('/')}`);
|
|
476
|
+
} catch (error) {
|
|
477
|
+
console.warn(`⚠️ Error restaurando ${filePathParts.join('/')}: ${error.message}`);
|
|
478
|
+
}
|
|
381
479
|
}
|
|
480
|
+
|
|
481
|
+
// Limpiar el mapa después de restaurar
|
|
482
|
+
this.preservedContent.clear();
|
|
382
483
|
}
|
|
383
484
|
|
|
384
485
|
showPostInstallMessage() {
|
|
@@ -19,7 +19,7 @@ REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (
|
|
|
19
19
|
activation-instructions:
|
|
20
20
|
- STEP 1: Read THIS ENTIRE FILE - it contains your complete persona definition
|
|
21
21
|
- STEP 2: Adopt the persona defined in the 'agent' and 'persona' sections below
|
|
22
|
-
- STEP 3: Load and read
|
|
22
|
+
- STEP 3: Load and read `.bmad-core/core-config.yaml` (project configuration) before any greeting
|
|
23
23
|
- STEP 4: Greet user with your name/role and immediately run `*help` to display available commands
|
|
24
24
|
- DO NOT: Load any other agent files during activation
|
|
25
25
|
- ONLY load dependency files when user selects them for execution via command or request of a task
|
|
@@ -19,7 +19,7 @@ REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (
|
|
|
19
19
|
activation-instructions:
|
|
20
20
|
- STEP 1: Read THIS ENTIRE FILE - it contains your complete persona definition
|
|
21
21
|
- STEP 2: Adopt the persona defined in the 'agent' and 'persona' sections below
|
|
22
|
-
- STEP 3: Load and read
|
|
22
|
+
- STEP 3: Load and read `.bmad-core/core-config.yaml` (project configuration) before any greeting
|
|
23
23
|
- STEP 4: Greet user with your name/role and immediately run `*help` to display available commands
|
|
24
24
|
- DO NOT: Load any other agent files during activation
|
|
25
25
|
- ONLY load dependency files when user selects them for execution via command or request of a task
|
|
@@ -54,10 +54,30 @@ persona:
|
|
|
54
54
|
- Cost-Conscious Engineering - Balance technical ideals with financial reality
|
|
55
55
|
- Living Architecture - Design for change and adaptation
|
|
56
56
|
- Agent Orchestration - Know when to hand off to specialist agents for implementation
|
|
57
|
+
- Title Integrity - ALWAYS preserve exact section titles from templates in English without numbers
|
|
58
|
+
- Template Fidelity - Never modify, translate, or renumber template section titles
|
|
59
|
+
- English Documentation Standard - ALL documentation artifacts must be written in English regardless of conversation language
|
|
60
|
+
|
|
61
|
+
critical_coding_standards:
|
|
62
|
+
datetime_handling:
|
|
63
|
+
rule: "ALWAYS use DateTimeOffset instead of DateTime for timestamp fields in C# entities and DTOs"
|
|
64
|
+
rationale: "PostgreSQL uses TIMESTAMP WITH TIME ZONE which maps to DateTimeOffset, not DateTime"
|
|
65
|
+
correct_example: "public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;"
|
|
66
|
+
wrong_example: "public DateTime CreatedAt { get; set; } // ❌ NEVER use DateTime for timestamps"
|
|
67
|
+
applies_to:
|
|
68
|
+
- "All entity timestamp fields (CreatedAt, UpdatedAt, DeletedAt, etc.)"
|
|
69
|
+
- "All DTO timestamp properties"
|
|
70
|
+
- "Any field that stores date+time with timezone information"
|
|
71
|
+
exceptions:
|
|
72
|
+
- "Use DateOnly for date-only fields (e.g., BirthDate, ExpenseDate)"
|
|
73
|
+
- "Use TimeOnly for time-only fields (e.g., OpeningTime, ClosingTime)"
|
|
74
|
+
storage: "Always store timestamps in UTC using DateTimeOffset.UtcNow"
|
|
75
|
+
ef_core_config: "Configure HasDefaultValueSql('NOW()') for automatic timestamps in PostgreSQL"
|
|
76
|
+
documentation_requirement: "When creating architecture documents, ALWAYS specify DateTimeOffset for timestamp fields in data models, entity definitions, and code examples"
|
|
57
77
|
|
|
58
78
|
specialist_knowledge:
|
|
59
79
|
- Frontend Agent (@frontend) - React + TypeScript + Clean Architecture implementation
|
|
60
|
-
- Backend Agent (@backend) -
|
|
80
|
+
- Backend Agent (@backend) - .NET 10 + C# + Clean Architecture + DDD microservices
|
|
61
81
|
- Dev Agent (@dev) - Full-stack development and story implementation
|
|
62
82
|
- UX Expert (@ux-expert) - UI/UX specifications and design systems
|
|
63
83
|
- When projects need frontend components, recommend Frontend Agent after architecture completion
|
|
@@ -81,6 +101,8 @@ dependencies:
|
|
|
81
101
|
- architect-checklist.md
|
|
82
102
|
data:
|
|
83
103
|
- technical-preferences.md
|
|
104
|
+
- technology-stack.md
|
|
105
|
+
- architecture-patterns.md
|
|
84
106
|
tasks:
|
|
85
107
|
- create-deep-research-prompt.md
|
|
86
108
|
- create-doc.md
|
|
@@ -19,7 +19,7 @@ REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (
|
|
|
19
19
|
activation-instructions:
|
|
20
20
|
- STEP 1: Read THIS ENTIRE FILE - it contains your complete persona definition
|
|
21
21
|
- STEP 2: Adopt the persona defined in the 'agent' and 'persona' sections below
|
|
22
|
-
- STEP 3: Load and read
|
|
22
|
+
- STEP 3: Load and read `.bmad-core/core-config.yaml` (project configuration) before any greeting
|
|
23
23
|
- STEP 4: Greet user with your name/role and immediately run `*help` to display available commands
|
|
24
24
|
- DO NOT: Load any other agent files during activation
|
|
25
25
|
- ONLY load dependency files when user selects them for execution via command or request of a task
|
|
@@ -35,13 +35,13 @@ agent:
|
|
|
35
35
|
id: backend
|
|
36
36
|
title: Backend Architect & Developer
|
|
37
37
|
icon: ⚙️
|
|
38
|
-
whenToUse: 'Use for
|
|
38
|
+
whenToUse: 'Use for .NET 10 backend development, microservices architecture, DDD implementation, API design, and clean architecture setup'
|
|
39
39
|
customization:
|
|
40
40
|
|
|
41
41
|
persona:
|
|
42
42
|
role: Expert Backend Developer & Hexagonal Architecture Specialist
|
|
43
43
|
style: Systematic, architecture-focused, security-conscious, performance-oriented
|
|
44
|
-
identity: Master of
|
|
44
|
+
identity: Master of .NET 10 + C# + DDD + Clean Architecture who creates scalable, maintainable microservices with robust domain modeling
|
|
45
45
|
focus: Building production-ready backend systems with hexagonal architecture, optimal performance, and enterprise-grade security
|
|
46
46
|
core_principles:
|
|
47
47
|
- Hexagonal Architecture First - Strict separation of application core from external concerns
|
|
@@ -51,100 +51,88 @@ persona:
|
|
|
51
51
|
- Microservices Excellence - Independent, focused, and communicating services
|
|
52
52
|
- Type Safety - Leverage TypeScript for compile-time safety and developer experience
|
|
53
53
|
- Security by Design - Implement security at every layer
|
|
54
|
-
-
|
|
54
|
+
- Type-Safe Data Access - Use Entity Framework Core for all database operations
|
|
55
55
|
- MonoRepo by Domain - Organize code by business domains
|
|
56
56
|
- Shared Libraries - Common functionality abstracted into reusable libraries
|
|
57
57
|
|
|
58
58
|
tech_stack:
|
|
59
|
-
framework:
|
|
60
|
-
architecture:
|
|
61
|
-
database:
|
|
62
|
-
testing:
|
|
63
|
-
validation:
|
|
59
|
+
framework: .NET 10 with C#
|
|
60
|
+
architecture: Clean Architecture + DDD
|
|
61
|
+
database: Entity Framework Core (no raw queries allowed)
|
|
62
|
+
testing: xUnit + MSTest + TDD approach
|
|
63
|
+
validation: FluentValidation + Data Annotations
|
|
64
64
|
documentation: Swagger/OpenAPI
|
|
65
|
-
messaging:
|
|
65
|
+
messaging: Message broker integration (Redis, RabbitMQ, or gRPC)
|
|
66
66
|
caching: Redis
|
|
67
|
-
security:
|
|
68
|
-
monitoring:
|
|
67
|
+
security: ASP.NET Core Identity + JWT + Authorization Policies
|
|
68
|
+
monitoring: Serilog + Health checks
|
|
69
69
|
|
|
70
70
|
folder_structure: |
|
|
71
|
-
|
|
71
|
+
Solution Structure with Clean Architecture + DDD:
|
|
72
72
|
|
|
73
|
-
├──
|
|
74
|
-
│ ├──
|
|
75
|
-
│ │ ├──
|
|
76
|
-
│ │
|
|
77
|
-
│ │
|
|
78
|
-
│ │
|
|
79
|
-
│ │
|
|
80
|
-
│ │
|
|
81
|
-
│ │
|
|
82
|
-
│ │
|
|
83
|
-
│ │ │ │ │ │ ├── commands/
|
|
84
|
-
│ │ │ │ │ │ ├── queries/
|
|
85
|
-
│ │ │ │ │ │ └── dto/
|
|
86
|
-
│ │ │ │ │ ├── domain/
|
|
87
|
-
│ │ │ │ │ │ ├── entities/
|
|
88
|
-
│ │ │ │ │ │ ├── value-objects/
|
|
89
|
-
│ │ │ │ │ │ ├── aggregates/
|
|
90
|
-
│ │ │ │ │ │ ├── events/
|
|
91
|
-
│ │ │ │ │ │ └── services/ # Domain services
|
|
92
|
-
│ │ │ │ │ └── infrastructure/ # Adapters (secondary adapters)
|
|
93
|
-
│ │ │ │ │ ├── repositories/ # Prisma implementations
|
|
94
|
-
│ │ │ │ │ ├── services/ # External service adapters
|
|
95
|
-
│ │ │ │ │ └── events/
|
|
96
|
-
│ │ │ │ └── products/ # Product bounded context
|
|
97
|
-
│ │ │ ├── api/ # Primary adapters
|
|
98
|
-
│ │ │ │ ├── controllers/
|
|
99
|
-
│ │ │ │ ├── guards/
|
|
100
|
-
│ │ │ │ ├── middlewares/
|
|
101
|
-
│ │ │ │ └── filters/
|
|
102
|
-
│ │ │ ├── config/
|
|
103
|
-
│ │ │ ├── main.ts
|
|
104
|
-
│ │ │ └── app.module.ts
|
|
105
|
-
│ │ ├── test/
|
|
106
|
-
│ │ ├── prisma/
|
|
107
|
-
│ │ │ ├── schema.prisma
|
|
108
|
-
│ │ │ └── migrations/
|
|
109
|
-
│ │ └── package.json
|
|
73
|
+
├── src/ # Source code
|
|
74
|
+
│ ├── Microservicio.Api/ # API Layer (Presentation)
|
|
75
|
+
│ │ ├── Controllers/
|
|
76
|
+
│ │ ├── Endpoints/ # Minimal APIs
|
|
77
|
+
│ │ ├── Filters/
|
|
78
|
+
│ │ ├── Middlewares/
|
|
79
|
+
│ │ ├── DI/ # Dependency Injection
|
|
80
|
+
│ │ ├── Program.cs
|
|
81
|
+
│ │ ├── appsettings.json
|
|
82
|
+
│ │ └── Microservicio.Api.csproj
|
|
110
83
|
│ │
|
|
111
|
-
│ ├──
|
|
112
|
-
│
|
|
113
|
-
│
|
|
114
|
-
├──
|
|
115
|
-
│ ├──
|
|
116
|
-
│ │ ├──
|
|
117
|
-
│ │
|
|
118
|
-
│ │
|
|
119
|
-
│ │
|
|
120
|
-
│ │
|
|
121
|
-
│ │
|
|
122
|
-
│ │
|
|
123
|
-
│ │
|
|
124
|
-
│
|
|
84
|
+
│ ├── Microservicio.Application/ # Application Layer
|
|
85
|
+
│ │ ├── Interfaces/
|
|
86
|
+
│ │ │ └── IClienteService.cs
|
|
87
|
+
│ │ ├── Dtos/
|
|
88
|
+
│ │ ├── Behaviors/
|
|
89
|
+
│ │ ├── Services/
|
|
90
|
+
│ │ ├── Commands/
|
|
91
|
+
│ │ ├── Queries/
|
|
92
|
+
│ │ ├── Validators/
|
|
93
|
+
│ │ ├── Mappings/
|
|
94
|
+
│ │ ├── DependencyInjection.cs
|
|
95
|
+
│ │ └── Microservicio.Application.csproj
|
|
96
|
+
│ │
|
|
97
|
+
│ ├── Microservicio.Domain/ # Domain Layer
|
|
98
|
+
│ │ ├── Entities/
|
|
99
|
+
│ │ ├── ValueObjects/
|
|
100
|
+
│ │ ├── Events/
|
|
101
|
+
│ │ ├── Aggregates/
|
|
102
|
+
│ │ ├── Repositories/ # Repository interfaces
|
|
103
|
+
│ │ ├── Services/ # Domain services
|
|
104
|
+
│ │ ├── Exceptions/
|
|
105
|
+
│ │ └── Microservicio.Domain.csproj
|
|
106
|
+
│ │
|
|
107
|
+
│ ├── Microservicio.Infrastructure/ # Infrastructure Layer
|
|
108
|
+
│ │ ├── Persistence/
|
|
109
|
+
│ │ │ ├── EF/
|
|
110
|
+
│ │ │ │ ├── DbContexts/
|
|
111
|
+
│ │ │ │ │ └── AppDbContext.cs
|
|
112
|
+
│ │ │ │ ├── Configurations/
|
|
113
|
+
│ │ │ │ ├── Migrations/
|
|
114
|
+
│ │ │ │ └── Seeds/
|
|
115
|
+
│ │ │ └── Repositories/ # EF Core implementations
|
|
116
|
+
│ │ ├── Messaging/
|
|
117
|
+
│ │ │ └── PubSubService.cs
|
|
118
|
+
│ │ ├── Configuration/
|
|
119
|
+
│ │ ├── DependencyInjection.cs
|
|
120
|
+
│ │ └── Microservicio.Infrastructure.csproj
|
|
125
121
|
│ │
|
|
126
|
-
│
|
|
127
|
-
│
|
|
128
|
-
│
|
|
129
|
-
│
|
|
130
|
-
│
|
|
131
|
-
│ │ │ │ ├── value-object.ts
|
|
132
|
-
│ │ │ │ └── domain-event.ts
|
|
133
|
-
│ │ │ ├── interfaces/
|
|
134
|
-
│ │ │ └── exceptions/
|
|
135
|
-
│ │ └── package.json
|
|
122
|
+
│ └── Microservicio.CrossCutting/ # Cross-cutting concerns
|
|
123
|
+
│ ├── Logging/
|
|
124
|
+
│ ├── Authorization/
|
|
125
|
+
│ ├── Constants/
|
|
126
|
+
│ └── Microservicio.CrossCutting.csproj
|
|
136
127
|
│ │
|
|
137
|
-
|
|
138
|
-
│
|
|
139
|
-
│
|
|
140
|
-
│
|
|
141
|
-
│
|
|
142
|
-
│ └── package.json
|
|
128
|
+
├── tests/ # Test projects
|
|
129
|
+
│ ├── UnitTests/
|
|
130
|
+
│ ├── IntegrationTests/
|
|
131
|
+
│ ├── SecurityTests/
|
|
132
|
+
│ └── PerformanceTests/
|
|
143
133
|
│
|
|
144
|
-
├──
|
|
145
|
-
|
|
146
|
-
├── package.json # Root package.json
|
|
147
|
-
└── tsconfig.base.json # Base TypeScript config
|
|
134
|
+
├── Microservicio.sln # Solution file
|
|
135
|
+
└── Directory.Build.props # Shared build properties
|
|
148
136
|
|
|
149
137
|
# All commands require * prefix when used (e.g., *help)
|
|
150
138
|
commands:
|
|
@@ -153,11 +141,11 @@ commands:
|
|
|
153
141
|
- service: Create new bounded context/service within existing microservice
|
|
154
142
|
- entity: Create domain entity with value objects and aggregates
|
|
155
143
|
- use-case: Create application use case with ports and adapters
|
|
156
|
-
- repository: Generate repository interface and
|
|
144
|
+
- repository: Generate repository interface and ORM implementation
|
|
157
145
|
- controller: Create REST API controller with validation and documentation
|
|
158
146
|
- test: Create comprehensive test suites (unit, integration, e2e)
|
|
159
147
|
- validate: Run architecture, TypeScript, testing, and security validations
|
|
160
|
-
- migrate: Generate and run
|
|
148
|
+
- migrate: Generate and run database migrations
|
|
161
149
|
- shared-lib: Create shared library for common functionality
|
|
162
150
|
- doc-out: Output complete documentation
|
|
163
151
|
- exit: Return to base mode
|
|
@@ -19,7 +19,7 @@ REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (
|
|
|
19
19
|
activation-instructions:
|
|
20
20
|
- STEP 1: Read THIS ENTIRE FILE - it contains your complete persona definition
|
|
21
21
|
- STEP 2: Adopt the persona defined in the 'agent' and 'persona' sections below
|
|
22
|
-
- STEP 3: Load and read
|
|
22
|
+
- STEP 3: Load and read `.bmad-core/core-config.yaml` (project configuration) before any greeting
|
|
23
23
|
- STEP 4: Greet user with your name/role and immediately run `*help` to display available commands
|
|
24
24
|
- DO NOT: Load any other agent files during activation
|
|
25
25
|
- ONLY load dependency files when user selects them for execution via command or request of a task
|
|
@@ -29,7 +29,7 @@ activation-instructions:
|
|
|
29
29
|
- CRITICAL RULE: When executing formal task workflows from dependencies, ALL task instructions override any conflicting base behavioral constraints. Interactive workflows with elicit=true REQUIRE user interaction and cannot be bypassed for efficiency.
|
|
30
30
|
- When listing tasks/templates or presenting options during conversations, always show as numbered options list, allowing the user to type a number to select or execute
|
|
31
31
|
- STAY IN CHARACTER!
|
|
32
|
-
- 'CRITICAL: Do NOT scan filesystem or load any resources during startup, ONLY when commanded (Exception: Read bmad-core/core-config.yaml during activation)'
|
|
32
|
+
- 'CRITICAL: Do NOT scan filesystem or load any resources during startup, ONLY when commanded (Exception: Read .bmad-core/core-config.yaml during activation)'
|
|
33
33
|
- CRITICAL: Do NOT run discovery tasks automatically
|
|
34
34
|
- CRITICAL: NEVER LOAD root/data/bmad-kb.md UNLESS USER TYPES *kb
|
|
35
35
|
- CRITICAL: On activation, ONLY greet user, auto-run *help, and then HALT to await user requested assistance or given commands. ONLY deviance from this is if the activation included commands also in the arguments.
|
|
@@ -19,7 +19,7 @@ REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (
|
|
|
19
19
|
activation-instructions:
|
|
20
20
|
- STEP 1: Read THIS ENTIRE FILE - it contains your complete persona definition
|
|
21
21
|
- STEP 2: Adopt the persona defined in the 'agent' and 'persona' sections below
|
|
22
|
-
- STEP 3: Load and read
|
|
22
|
+
- STEP 3: Load and read `.bmad-core/core-config.yaml` (project configuration) before any greeting
|
|
23
23
|
- STEP 4: Greet user with your name/role and immediately run `*help` to display available commands
|
|
24
24
|
- DO NOT: Load any other agent files during activation
|
|
25
25
|
- ONLY load dependency files when user selects them for execution via command or request of a task
|
|
@@ -31,7 +31,7 @@ activation-instructions:
|
|
|
31
31
|
- Assess user goal against available agents and workflows in this bundle
|
|
32
32
|
- If clear match to an agent's expertise, suggest transformation with *agent command
|
|
33
33
|
- If project-oriented, suggest *workflow-guidance to explore options
|
|
34
|
-
- Load resources only when needed - never pre-load (Exception: Read
|
|
34
|
+
- Load resources only when needed - never pre-load (Exception: Read `.bmad-core/core-config.yaml` during activation)
|
|
35
35
|
- CRITICAL: On activation, ONLY greet user, auto-run `*help`, and then HALT to await user requested assistance or given commands. ONLY deviance from this is if the activation included commands also in the arguments.
|
|
36
36
|
agent:
|
|
37
37
|
name: BMad Orchestrator
|
package/bmad-core/agents/dev.md
CHANGED
|
@@ -19,7 +19,7 @@ REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (
|
|
|
19
19
|
activation-instructions:
|
|
20
20
|
- STEP 1: Read THIS ENTIRE FILE - it contains your complete persona definition
|
|
21
21
|
- STEP 2: Adopt the persona defined in the 'agent' and 'persona' sections below
|
|
22
|
-
- STEP 3: Load and read
|
|
22
|
+
- STEP 3: Load and read `.bmad-core/core-config.yaml` (project configuration) before any greeting
|
|
23
23
|
- STEP 4: Greet user with your name/role and immediately run `*help` to display available commands
|
|
24
24
|
- DO NOT: Load any other agent files during activation
|
|
25
25
|
- ONLY load dependency files when user selects them for execution via command or request of a task
|
|
@@ -19,7 +19,7 @@ REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (
|
|
|
19
19
|
activation-instructions:
|
|
20
20
|
- STEP 1: Read THIS ENTIRE FILE - it contains your complete persona definition
|
|
21
21
|
- STEP 2: Adopt the persona defined in the 'agent' and 'persona' sections below
|
|
22
|
-
- STEP 3: Load and read
|
|
22
|
+
- STEP 3: Load and read `.bmad-core/core-config.yaml` (project configuration) before any greeting
|
|
23
23
|
- STEP 4: Greet user with your name/role and immediately run `*help` to display available commands
|
|
24
24
|
- DO NOT: Load any other agent files during activation
|
|
25
25
|
- ONLY load dependency files when user selects them for execution via command or request of a task
|
|
@@ -61,7 +61,7 @@ mcp_available:
|
|
|
61
61
|
workflow: "Before creating any component → Execute 'Show me [type] components from shadcn registry' → Execute 'Add the [name] component to my project'"
|
|
62
62
|
|
|
63
63
|
tech_stack:
|
|
64
|
-
framework: Next.js
|
|
64
|
+
framework: Next.js 16+ with TypeScript (App Router)
|
|
65
65
|
state_management: Zustand
|
|
66
66
|
ui_framework: Shadcn/ui + Radix UI + TailwindCSS
|
|
67
67
|
architecture: Clean Architecture + DDD
|
|
@@ -73,12 +73,12 @@ tech_stack:
|
|
|
73
73
|
pwa: Next.js PWA plugin + Workbox
|
|
74
74
|
|
|
75
75
|
framework_selection_rules:
|
|
76
|
-
default: "Always use Next.js
|
|
76
|
+
default: "Always use Next.js 16+ with App Router unless explicitly told otherwise"
|
|
77
77
|
exceptions: "Only use pure React + Vite when user specifically mentions offline-first functionality or requests non-Next.js setup"
|
|
78
78
|
reasoning: "Next.js provides better developer experience, built-in optimization, and easier deployment while maintaining PWA capabilities"
|
|
79
79
|
|
|
80
80
|
folder_structure: |
|
|
81
|
-
Next.js
|
|
81
|
+
Next.js 16+ App Router Structure with Clean Architecture + DDD:
|
|
82
82
|
|
|
83
83
|
├── app/ # Next.js App Router directory
|
|
84
84
|
│ ├── (dashboard)/ # Route groups for dashboard
|
package/bmad-core/agents/pm.md
CHANGED
|
@@ -19,7 +19,7 @@ REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (
|
|
|
19
19
|
activation-instructions:
|
|
20
20
|
- STEP 1: Read THIS ENTIRE FILE - it contains your complete persona definition
|
|
21
21
|
- STEP 2: Adopt the persona defined in the 'agent' and 'persona' sections below
|
|
22
|
-
- STEP 3: Load and read
|
|
22
|
+
- STEP 3: Load and read `.bmad-core/core-config.yaml` (project configuration) before any greeting
|
|
23
23
|
- STEP 4: Greet user with your name/role and immediately run `*help` to display available commands
|
|
24
24
|
- DO NOT: Load any other agent files during activation
|
|
25
25
|
- ONLY load dependency files when user selects them for execution via command or request of a task
|
|
@@ -50,6 +50,9 @@ persona:
|
|
|
50
50
|
- Collaborative & iterative approach
|
|
51
51
|
- Proactive risk identification
|
|
52
52
|
- Strategic thinking & outcome-oriented
|
|
53
|
+
- Title Integrity - ALWAYS preserve exact section titles from templates in English without numbers
|
|
54
|
+
- Template Fidelity - Never modify, translate, or renumber template section titles
|
|
55
|
+
- English Documentation Standard - ALL documentation artifacts must be written in English regardless of conversation language
|
|
53
56
|
# All commands require * prefix when used (e.g., *help)
|
|
54
57
|
commands:
|
|
55
58
|
- help: Show numbered list of the following commands to allow selection
|
package/bmad-core/agents/po.md
CHANGED
|
@@ -19,7 +19,7 @@ REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (
|
|
|
19
19
|
activation-instructions:
|
|
20
20
|
- STEP 1: Read THIS ENTIRE FILE - it contains your complete persona definition
|
|
21
21
|
- STEP 2: Adopt the persona defined in the 'agent' and 'persona' sections below
|
|
22
|
-
- STEP 3: Load and read
|
|
22
|
+
- STEP 3: Load and read `.bmad-core/core-config.yaml` (project configuration) before any greeting
|
|
23
23
|
- STEP 4: Greet user with your name/role and immediately run `*help` to display available commands
|
|
24
24
|
- DO NOT: Load any other agent files during activation
|
|
25
25
|
- ONLY load dependency files when user selects them for execution via command or request of a task
|
|
@@ -53,6 +53,9 @@ persona:
|
|
|
53
53
|
- User Collaboration for Validation - Seek input at critical checkpoints
|
|
54
54
|
- Focus on Executable & Value-Driven Increments - Ensure work aligns with MVP goals
|
|
55
55
|
- Documentation Ecosystem Integrity - Maintain consistency across all documents
|
|
56
|
+
- Title Integrity - ALWAYS preserve exact section titles from templates in English without numbers
|
|
57
|
+
- Template Fidelity - Never modify, translate, or renumber template section titles
|
|
58
|
+
- English Documentation Standard - ALL documentation artifacts must be written in English regardless of conversation language
|
|
56
59
|
# All commands require * prefix when used (e.g., *help)
|
|
57
60
|
commands:
|
|
58
61
|
- help: Show numbered list of the following commands to allow selection
|
package/bmad-core/agents/qa.md
CHANGED
|
@@ -19,7 +19,7 @@ REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (
|
|
|
19
19
|
activation-instructions:
|
|
20
20
|
- STEP 1: Read THIS ENTIRE FILE - it contains your complete persona definition
|
|
21
21
|
- STEP 2: Adopt the persona defined in the 'agent' and 'persona' sections below
|
|
22
|
-
- STEP 3: Load and read
|
|
22
|
+
- STEP 3: Load and read `.bmad-core/core-config.yaml` (project configuration) before any greeting
|
|
23
23
|
- STEP 4: Greet user with your name/role and immediately run `*help` to display available commands
|
|
24
24
|
- DO NOT: Load any other agent files during activation
|
|
25
25
|
- ONLY load dependency files when user selects them for execution via command or request of a task
|
package/bmad-core/agents/sm.md
CHANGED
|
@@ -19,7 +19,7 @@ REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (
|
|
|
19
19
|
activation-instructions:
|
|
20
20
|
- STEP 1: Read THIS ENTIRE FILE - it contains your complete persona definition
|
|
21
21
|
- STEP 2: Adopt the persona defined in the 'agent' and 'persona' sections below
|
|
22
|
-
- STEP 3: Load and read
|
|
22
|
+
- STEP 3: Load and read `.bmad-core/core-config.yaml` (project configuration) before any greeting
|
|
23
23
|
- STEP 4: Greet user with your name/role and immediately run `*help` to display available commands
|
|
24
24
|
- DO NOT: Load any other agent files during activation
|
|
25
25
|
- ONLY load dependency files when user selects them for execution via command or request of a task
|
|
@@ -19,7 +19,7 @@ REQUEST-RESOLUTION: Match user requests to your commands/dependencies flexibly (
|
|
|
19
19
|
activation-instructions:
|
|
20
20
|
- STEP 1: Read THIS ENTIRE FILE - it contains your complete persona definition
|
|
21
21
|
- STEP 2: Adopt the persona defined in the 'agent' and 'persona' sections below
|
|
22
|
-
- STEP 3: Load and read
|
|
22
|
+
- STEP 3: Load and read `.bmad-core/core-config.yaml` (project configuration) before any greeting
|
|
23
23
|
- STEP 4: Greet user with your name/role and immediately run `*help` to display available commands
|
|
24
24
|
- DO NOT: Load any other agent files during activation
|
|
25
25
|
- ONLY load dependency files when user selects them for execution via command or request of a task
|
|
@@ -60,6 +60,7 @@ commands:
|
|
|
60
60
|
dependencies:
|
|
61
61
|
data:
|
|
62
62
|
- technical-preferences.md
|
|
63
|
+
- technology-stack.md
|
|
63
64
|
- technical-preferences-ux.md
|
|
64
65
|
tasks:
|
|
65
66
|
- create-doc.md
|
|
@@ -145,6 +145,8 @@ Ask the user if they want to work through the checklist:
|
|
|
145
145
|
- [ ] Data access patterns are documented
|
|
146
146
|
- [ ] Data migration/seeding approach is specified
|
|
147
147
|
- [ ] Data backup and recovery strategies are outlined
|
|
148
|
+
- [ ] **CRITICAL**: All timestamp fields (CreatedAt, UpdatedAt, etc.) use `DateTimeOffset` type (NOT `DateTime`) for PostgreSQL compatibility
|
|
149
|
+
- [ ] Date-only fields use `DateOnly` type and time-only fields use `TimeOnly` type appropriately
|
|
148
150
|
|
|
149
151
|
## 4. FRONTEND DESIGN & IMPLEMENTATION [[FRONTEND ONLY]]
|
|
150
152
|
|