@planu/cli 0.29.0 → 0.30.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/dist/config/license-plans.json +7 -1
- package/dist/engine/ci-generator/planu-config.d.ts +7 -0
- package/dist/engine/ci-generator/planu-config.d.ts.map +1 -0
- package/dist/engine/ci-generator/planu-config.js +40 -0
- package/dist/engine/ci-generator/planu-config.js.map +1 -0
- package/dist/engine/ci-generator/planu-steps.d.ts +11 -0
- package/dist/engine/ci-generator/planu-steps.d.ts.map +1 -0
- package/dist/engine/ci-generator/planu-steps.js +292 -0
- package/dist/engine/ci-generator/planu-steps.js.map +1 -0
- package/dist/engine/spec-templates/catalog-industry.d.ts +4 -0
- package/dist/engine/spec-templates/catalog-industry.d.ts.map +1 -0
- package/dist/engine/spec-templates/catalog-industry.js +19 -0
- package/dist/engine/spec-templates/catalog-industry.js.map +1 -0
- package/dist/engine/spec-templates/catalog.d.ts +1 -1
- package/dist/engine/spec-templates/catalog.d.ts.map +1 -1
- package/dist/engine/spec-templates/catalog.js +3 -1
- package/dist/engine/spec-templates/catalog.js.map +1 -1
- package/dist/engine/spec-templates/custom-loader.d.ts +12 -0
- package/dist/engine/spec-templates/custom-loader.d.ts.map +1 -0
- package/dist/engine/spec-templates/custom-loader.js +99 -0
- package/dist/engine/spec-templates/custom-loader.js.map +1 -0
- package/dist/engine/spec-templates/index.d.ts +4 -2
- package/dist/engine/spec-templates/index.d.ts.map +1 -1
- package/dist/engine/spec-templates/index.js +4 -2
- package/dist/engine/spec-templates/index.js.map +1 -1
- package/dist/engine/spec-templates/query.d.ts +12 -4
- package/dist/engine/spec-templates/query.d.ts.map +1 -1
- package/dist/engine/spec-templates/query.js +29 -7
- package/dist/engine/spec-templates/query.js.map +1 -1
- package/dist/engine/spec-templates/renderer.d.ts +27 -2
- package/dist/engine/spec-templates/renderer.d.ts.map +1 -1
- package/dist/engine/spec-templates/renderer.js +119 -4
- package/dist/engine/spec-templates/renderer.js.map +1 -1
- package/dist/engine/spec-templates/templates-api-ui.d.ts.map +1 -1
- package/dist/engine/spec-templates/templates-api-ui.js +28 -1
- package/dist/engine/spec-templates/templates-api-ui.js.map +1 -1
- package/dist/engine/spec-templates/templates-auth-crud.d.ts.map +1 -1
- package/dist/engine/spec-templates/templates-auth-crud.js +27 -0
- package/dist/engine/spec-templates/templates-auth-crud.js.map +1 -1
- package/dist/engine/spec-templates/templates-data-security.d.ts.map +1 -1
- package/dist/engine/spec-templates/templates-data-security.js +26 -0
- package/dist/engine/spec-templates/templates-data-security.js.map +1 -1
- package/dist/engine/spec-templates/templates-industry-ecom.d.ts +6 -0
- package/dist/engine/spec-templates/templates-industry-ecom.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-ecom.js +209 -0
- package/dist/engine/spec-templates/templates-industry-ecom.js.map +1 -0
- package/dist/engine/spec-templates/templates-industry-fintech.d.ts +8 -0
- package/dist/engine/spec-templates/templates-industry-fintech.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-fintech.js +350 -0
- package/dist/engine/spec-templates/templates-industry-fintech.js.map +1 -0
- package/dist/engine/spec-templates/templates-industry-health-ecom.d.ts +3 -0
- package/dist/engine/spec-templates/templates-industry-health-ecom.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-health-ecom.js +5 -0
- package/dist/engine/spec-templates/templates-industry-health-ecom.js.map +1 -0
- package/dist/engine/spec-templates/templates-industry-health.d.ts +6 -0
- package/dist/engine/spec-templates/templates-industry-health.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-health.js +208 -0
- package/dist/engine/spec-templates/templates-industry-health.js.map +1 -0
- package/dist/engine/spec-templates/templates-industry-saas.d.ts +8 -0
- package/dist/engine/spec-templates/templates-industry-saas.d.ts.map +1 -0
- package/dist/engine/spec-templates/templates-industry-saas.js +323 -0
- package/dist/engine/spec-templates/templates-industry-saas.js.map +1 -0
- package/dist/engine/spec-templates/templates-perf-integration.d.ts.map +1 -1
- package/dist/engine/spec-templates/templates-perf-integration.js +27 -0
- package/dist/engine/spec-templates/templates-perf-integration.js.map +1 -1
- package/dist/resources/process.js +1 -1
- package/dist/tools/ci-planu-handler.d.ts +8 -0
- package/dist/tools/ci-planu-handler.d.ts.map +1 -0
- package/dist/tools/ci-planu-handler.js +44 -0
- package/dist/tools/ci-planu-handler.js.map +1 -0
- package/dist/tools/init-project/handler.d.ts.map +1 -1
- package/dist/tools/init-project/handler.js +24 -159
- package/dist/tools/init-project/handler.js.map +1 -1
- package/dist/tools/init-project/result-builder.d.ts +4 -0
- package/dist/tools/init-project/result-builder.d.ts.map +1 -0
- package/dist/tools/init-project/result-builder.js +150 -0
- package/dist/tools/init-project/result-builder.js.map +1 -0
- package/dist/tools/learn.d.ts.map +1 -1
- package/dist/tools/learn.js +67 -14
- package/dist/tools/learn.js.map +1 -1
- package/dist/tools/license-status.d.ts.map +1 -1
- package/dist/tools/license-status.js +17 -2
- package/dist/tools/license-status.js.map +1 -1
- package/dist/tools/register-ci-tools.d.ts.map +1 -1
- package/dist/tools/register-ci-tools.js +36 -0
- package/dist/tools/register-ci-tools.js.map +1 -1
- package/dist/tools/register-template-tools.d.ts.map +1 -1
- package/dist/tools/register-template-tools.js +21 -8
- package/dist/tools/register-template-tools.js.map +1 -1
- package/dist/tools/spec-templates.d.ts +1 -1
- package/dist/tools/spec-templates.d.ts.map +1 -1
- package/dist/tools/spec-templates.js +20 -6
- package/dist/tools/spec-templates.js.map +1 -1
- package/dist/types/ci.d.ts +51 -0
- package/dist/types/ci.d.ts.map +1 -1
- package/dist/types/project/core.d.ts +46 -5
- package/dist/types/project/core.d.ts.map +1 -1
- package/dist/types/spec-templates.d.ts +51 -1
- package/dist/types/spec-templates.d.ts.map +1 -1
- package/dist/types/vector-store.d.ts +7 -0
- package/dist/types/vector-store.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/config/license-plans.json +7 -1
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
// engine/spec-templates/templates-industry-health.ts — Healthtech industry templates.
|
|
2
|
+
// AC-04: Templates by industry — healthtech vertical (split from health-ecom).
|
|
3
|
+
/** Healthtech patient records template. */
|
|
4
|
+
export const HEALTHTECH_PATIENT_RECORDS_TEMPLATE = {
|
|
5
|
+
id: 'healthtech-patient-records',
|
|
6
|
+
name: 'Gestion de registros de pacientes',
|
|
7
|
+
category: 'industry',
|
|
8
|
+
subcategory: 'healthtech',
|
|
9
|
+
description: 'Registros medicos con acceso por consentimiento, historial clinico y portabilidad.',
|
|
10
|
+
tags: ['healthtech', 'patient', 'records', 'hipaa', 'consent'],
|
|
11
|
+
complexityScore: 'XL',
|
|
12
|
+
estimationBase: {
|
|
13
|
+
hoursMin: 80,
|
|
14
|
+
hoursMax: 160,
|
|
15
|
+
notes: 'Requiere cifrado de datos de salud y gestion de consentimientos',
|
|
16
|
+
},
|
|
17
|
+
criteria: [
|
|
18
|
+
{ id: 'AC-1', title: 'Acceso con consentimiento', required: true },
|
|
19
|
+
{ id: 'AC-2', title: 'Historial clinico', required: true },
|
|
20
|
+
{ id: 'AC-3', title: 'Portabilidad de datos', required: true },
|
|
21
|
+
{ id: 'AC-4', title: 'Cifrado y privacidad', required: true },
|
|
22
|
+
{ id: 'AC-5', title: 'Auditoria de acceso', required: true },
|
|
23
|
+
{ id: 'AC-6', title: 'Interoperabilidad', required: false },
|
|
24
|
+
],
|
|
25
|
+
variables: [
|
|
26
|
+
{
|
|
27
|
+
key: 'SystemName',
|
|
28
|
+
label: 'Nombre del sistema',
|
|
29
|
+
description: 'Nombre del sistema de salud',
|
|
30
|
+
example: 'HealthApp',
|
|
31
|
+
required: true,
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
huTemplate: `# HU: Registros de Pacientes — {{SystemName}}
|
|
35
|
+
|
|
36
|
+
## Historia de Usuario
|
|
37
|
+
Como profesional de salud, quiero gestionar registros de pacientes de forma segura y con consentimiento para cumplir con regulaciones de proteccion de datos de salud.
|
|
38
|
+
|
|
39
|
+
## Criterios de Aceptacion
|
|
40
|
+
|
|
41
|
+
### AC-1: Acceso con consentimiento
|
|
42
|
+
- [ ] El paciente otorga consentimiento explicito antes de compartir sus datos
|
|
43
|
+
- [ ] El consentimiento es revocable en cualquier momento
|
|
44
|
+
- [ ] El acceso sin consentimiento vigente es bloqueado automaticamente
|
|
45
|
+
- [ ] Se registra quien solicito acceso y el resultado (concedido/denegado)
|
|
46
|
+
|
|
47
|
+
### AC-2: Historial clinico
|
|
48
|
+
- [ ] Se mantiene historial cronologico de consultas, diagnosticos y tratamientos
|
|
49
|
+
- [ ] El historial es inmutable (append-only) — las correcciones generan enmiendas
|
|
50
|
+
- [ ] Los profesionales pueden agregar notas clinicas con su firma digital
|
|
51
|
+
- [ ] Se soportan adjuntos (imagenes, documentos) vinculados al historial
|
|
52
|
+
|
|
53
|
+
### AC-3: Portabilidad de datos
|
|
54
|
+
- [ ] El paciente puede exportar sus datos en formato estandar (HL7 FHIR o equivalente)
|
|
55
|
+
- [ ] La exportacion incluye historial completo o por periodo seleccionado
|
|
56
|
+
- [ ] Los datos exportados mantienen integridad verificable
|
|
57
|
+
|
|
58
|
+
### AC-4: Cifrado y privacidad
|
|
59
|
+
- [ ] Los datos de salud se almacenan cifrados en reposo y en transito
|
|
60
|
+
- [ ] Las claves de cifrado se gestionan con rotacion periodica
|
|
61
|
+
- [ ] Los datos personales y clinicos se almacenan separados (pseudonimizacion)
|
|
62
|
+
|
|
63
|
+
### AC-5: Auditoria de acceso
|
|
64
|
+
- [ ] Todo acceso a registros de pacientes se registra con timestamp y actor
|
|
65
|
+
- [ ] Los registros de auditoria son inmutables y accesibles para auditorias externas
|
|
66
|
+
- [ ] Se generan alertas ante patrones de acceso anomalos
|
|
67
|
+
|
|
68
|
+
### AC-6: Interoperabilidad
|
|
69
|
+
- [ ] El sistema expone APIs compatibles con estandares de salud (HL7 FHIR o equivalente)
|
|
70
|
+
- [ ] Se soporta intercambio de datos con otros sistemas de salud autorizados
|
|
71
|
+
`,
|
|
72
|
+
fichaTecnicaTemplate: `# FICHA TÉCNICA: Registros de Pacientes — {{SystemName}}
|
|
73
|
+
|
|
74
|
+
## Archivos Afectados
|
|
75
|
+
- patients/records
|
|
76
|
+
- patients/consent-manager
|
|
77
|
+
- patients/audit-log
|
|
78
|
+
- patients/export
|
|
79
|
+
- security/encryption
|
|
80
|
+
|
|
81
|
+
## Tipos / Entidades
|
|
82
|
+
- \`PatientRecord\`: id, patientId, entries[], consents[]
|
|
83
|
+
- \`ClinicalEntry\`: type, date, professional, notes, attachments
|
|
84
|
+
- \`Consent\`: patientId, grantedTo, scope, grantedAt, revokedAt
|
|
85
|
+
|
|
86
|
+
## Riesgos
|
|
87
|
+
- Fuga de datos de salud → cifrado obligatorio + acceso auditado
|
|
88
|
+
- Consentimiento desactualizado → verificacion en tiempo real
|
|
89
|
+
- Incompatibilidad con estandares → tests de conformidad requeridos
|
|
90
|
+
|
|
91
|
+
## Estimacion
|
|
92
|
+
- Dev: 80–160 horas
|
|
93
|
+
- Review: 16–32 horas
|
|
94
|
+
- Dificultad: 5/5
|
|
95
|
+
`,
|
|
96
|
+
progressTemplate: `# PROGRESS: Registros de Pacientes — {{SystemName}}
|
|
97
|
+
|
|
98
|
+
## Estado: borrador
|
|
99
|
+
|
|
100
|
+
## Criterios
|
|
101
|
+
- [ ] AC-1: Acceso con consentimiento
|
|
102
|
+
- [ ] AC-2: Historial clinico
|
|
103
|
+
- [ ] AC-3: Portabilidad de datos
|
|
104
|
+
- [ ] AC-4: Cifrado y privacidad
|
|
105
|
+
- [ ] AC-5: Auditoria de acceso
|
|
106
|
+
- [ ] AC-6: Interoperabilidad
|
|
107
|
+
`,
|
|
108
|
+
};
|
|
109
|
+
/** Healthtech appointments template. */
|
|
110
|
+
export const HEALTHTECH_APPOINTMENTS_TEMPLATE = {
|
|
111
|
+
id: 'healthtech-appointments',
|
|
112
|
+
name: 'Agenda y citas medicas',
|
|
113
|
+
category: 'industry',
|
|
114
|
+
subcategory: 'healthtech',
|
|
115
|
+
description: 'Gestion de citas medicas con disponibilidad, recordatorios y telemedicina.',
|
|
116
|
+
tags: ['healthtech', 'appointments', 'scheduling', 'telemedicine', 'reminders'],
|
|
117
|
+
complexityScore: 'M',
|
|
118
|
+
estimationBase: {
|
|
119
|
+
hoursMin: 24,
|
|
120
|
+
hoursMax: 48,
|
|
121
|
+
notes: 'Incluye gestion de disponibilidad y recordatorios automaticos',
|
|
122
|
+
},
|
|
123
|
+
criteria: [
|
|
124
|
+
{ id: 'AC-1', title: 'Disponibilidad', required: true },
|
|
125
|
+
{ id: 'AC-2', title: 'Reserva de citas', required: true },
|
|
126
|
+
{ id: 'AC-3', title: 'Recordatorios', required: true },
|
|
127
|
+
{ id: 'AC-4', title: 'Cancelacion y reprogramacion', required: true },
|
|
128
|
+
{ id: 'AC-5', title: 'Telemedicina', required: false },
|
|
129
|
+
],
|
|
130
|
+
variables: [
|
|
131
|
+
{
|
|
132
|
+
key: 'SystemName',
|
|
133
|
+
label: 'Nombre del sistema',
|
|
134
|
+
description: 'Nombre del sistema de salud',
|
|
135
|
+
example: 'HealthApp',
|
|
136
|
+
required: true,
|
|
137
|
+
},
|
|
138
|
+
],
|
|
139
|
+
huTemplate: `# HU: Citas Medicas — {{SystemName}}
|
|
140
|
+
|
|
141
|
+
## Historia de Usuario
|
|
142
|
+
Como paciente, quiero agendar citas medicas de forma sencilla y recibir recordatorios para no perder mis consultas.
|
|
143
|
+
|
|
144
|
+
## Criterios de Aceptacion
|
|
145
|
+
|
|
146
|
+
### AC-1: Disponibilidad
|
|
147
|
+
- [ ] El sistema muestra horarios disponibles por profesional y especialidad
|
|
148
|
+
- [ ] La disponibilidad se actualiza en tiempo real al reservar/cancelar
|
|
149
|
+
- [ ] Se manejan zonas horarias correctamente para telemedicina
|
|
150
|
+
- [ ] Los bloqueos de agenda (vacaciones, emergencias) se reflejan inmediatamente
|
|
151
|
+
|
|
152
|
+
### AC-2: Reserva de citas
|
|
153
|
+
- [ ] El paciente puede reservar una cita seleccionando fecha, hora y profesional
|
|
154
|
+
- [ ] Se confirma la cita por el canal preferido del paciente (email, SMS, push)
|
|
155
|
+
- [ ] Se previenen reservas dobles en el mismo horario
|
|
156
|
+
|
|
157
|
+
### AC-3: Recordatorios
|
|
158
|
+
- [ ] Se envia recordatorio 24 horas y 1 hora antes de la cita
|
|
159
|
+
- [ ] Los canales de recordatorio son configurables por paciente
|
|
160
|
+
- [ ] El recordatorio incluye opcion de confirmar, cancelar o reprogramar
|
|
161
|
+
|
|
162
|
+
### AC-4: Cancelacion y reprogramacion
|
|
163
|
+
- [ ] El paciente puede cancelar hasta N horas antes de la cita
|
|
164
|
+
- [ ] La reprogramacion ofrece los proximos horarios disponibles
|
|
165
|
+
- [ ] Las cancelaciones tardias se registran (politica configurable)
|
|
166
|
+
|
|
167
|
+
### AC-5: Telemedicina
|
|
168
|
+
- [ ] Las citas virtuales generan un enlace de videollamada automaticamente
|
|
169
|
+
- [ ] El enlace es accesible solo durante la ventana de la cita
|
|
170
|
+
- [ ] Se registra la asistencia a la sesion virtual
|
|
171
|
+
`,
|
|
172
|
+
fichaTecnicaTemplate: `# FICHA TÉCNICA: Citas Medicas — {{SystemName}}
|
|
173
|
+
|
|
174
|
+
## Archivos Afectados
|
|
175
|
+
- appointments/availability
|
|
176
|
+
- appointments/booking
|
|
177
|
+
- appointments/reminders
|
|
178
|
+
- appointments/cancellation
|
|
179
|
+
- appointments/telemedicine
|
|
180
|
+
|
|
181
|
+
## Tipos / Entidades
|
|
182
|
+
- \`Appointment\`: id, patientId, professionalId, dateTime, type, status
|
|
183
|
+
- \`Availability\`: professionalId, slots[], blockedPeriods[]
|
|
184
|
+
- \`Reminder\`: appointmentId, channel, scheduledAt, sentAt
|
|
185
|
+
|
|
186
|
+
## Riesgos
|
|
187
|
+
- Reservas dobles → bloqueo optimista con verificacion
|
|
188
|
+
- Recordatorios no enviados → cola de reintentos con monitoring
|
|
189
|
+
- Problemas de conectividad en telemedicina → plan de contingencia
|
|
190
|
+
|
|
191
|
+
## Estimacion
|
|
192
|
+
- Dev: 24–48 horas
|
|
193
|
+
- Review: 4–8 horas
|
|
194
|
+
- Dificultad: 3/5
|
|
195
|
+
`,
|
|
196
|
+
progressTemplate: `# PROGRESS: Citas Medicas — {{SystemName}}
|
|
197
|
+
|
|
198
|
+
## Estado: borrador
|
|
199
|
+
|
|
200
|
+
## Criterios
|
|
201
|
+
- [ ] AC-1: Disponibilidad
|
|
202
|
+
- [ ] AC-2: Reserva de citas
|
|
203
|
+
- [ ] AC-3: Recordatorios
|
|
204
|
+
- [ ] AC-4: Cancelacion y reprogramacion
|
|
205
|
+
- [ ] AC-5: Telemedicina
|
|
206
|
+
`,
|
|
207
|
+
};
|
|
208
|
+
//# sourceMappingURL=templates-industry-health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates-industry-health.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-industry-health.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SpecTemplateEntry } from '../../types/spec-templates.js';
|
|
2
|
+
/** SaaS multi-tenant template. */
|
|
3
|
+
export declare const SAAS_MULTI_TENANT_TEMPLATE: SpecTemplateEntry;
|
|
4
|
+
/** SaaS billing and subscriptions template. */
|
|
5
|
+
export declare const SAAS_BILLING_TEMPLATE: SpecTemplateEntry;
|
|
6
|
+
/** SaaS RBAC template. */
|
|
7
|
+
export declare const SAAS_ROLES_TEMPLATE: SpecTemplateEntry;
|
|
8
|
+
//# sourceMappingURL=templates-industry-saas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates-industry-saas.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-industry-saas.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,kCAAkC;AAClC,eAAO,MAAM,0BAA0B,EAAE,iBAuGxC,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,qBAAqB,EAAE,iBA2GnC,CAAC;AAEF,0BAA0B;AAC1B,eAAO,MAAM,mBAAmB,EAAE,iBAwGjC,CAAC"}
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
// engine/spec-templates/templates-industry-saas.ts — SaaS industry templates.
|
|
2
|
+
// AC-04: Templates by industry — SaaS vertical (multi-tenant, billing, RBAC).
|
|
3
|
+
/** SaaS multi-tenant template. */
|
|
4
|
+
export const SAAS_MULTI_TENANT_TEMPLATE = {
|
|
5
|
+
id: 'saas-multi-tenant',
|
|
6
|
+
name: 'Arquitectura multi-tenant',
|
|
7
|
+
category: 'industry',
|
|
8
|
+
subcategory: 'saas',
|
|
9
|
+
description: 'Aislamiento de datos por tenant, subdominios y configuracion por tenant.',
|
|
10
|
+
tags: ['saas', 'multi-tenant', 'isolation', 'tenancy'],
|
|
11
|
+
complexityScore: 'XL',
|
|
12
|
+
estimationBase: {
|
|
13
|
+
hoursMin: 80,
|
|
14
|
+
hoursMax: 160,
|
|
15
|
+
notes: 'Arquitectura fundamental que impacta todas las capas',
|
|
16
|
+
},
|
|
17
|
+
criteria: [
|
|
18
|
+
{ id: 'AC-1', title: 'Aislamiento de datos', required: true },
|
|
19
|
+
{ id: 'AC-2', title: 'Resolucion de tenant', required: true },
|
|
20
|
+
{ id: 'AC-3', title: 'Configuracion por tenant', required: true },
|
|
21
|
+
{ id: 'AC-4', title: 'Onboarding de tenant', required: true },
|
|
22
|
+
{ id: 'AC-5', title: 'Limites por tenant', required: true },
|
|
23
|
+
{ id: 'AC-6', title: 'Operaciones cross-tenant', required: false },
|
|
24
|
+
],
|
|
25
|
+
variables: [
|
|
26
|
+
{
|
|
27
|
+
key: 'PlatformName',
|
|
28
|
+
label: 'Nombre de la plataforma',
|
|
29
|
+
description: 'Nombre de la plataforma SaaS',
|
|
30
|
+
example: 'CloudApp',
|
|
31
|
+
required: true,
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
huTemplate: `# HU: Multi-Tenant — {{PlatformName}}
|
|
35
|
+
|
|
36
|
+
## Historia de Usuario
|
|
37
|
+
Como operador de {{PlatformName}}, quiero que cada tenant tenga sus datos aislados y su configuracion independiente para ofrecer un servicio seguro y personalizable.
|
|
38
|
+
|
|
39
|
+
## Criterios de Aceptacion
|
|
40
|
+
|
|
41
|
+
### AC-1: Aislamiento de datos
|
|
42
|
+
- [ ] Los datos de cada tenant son inaccesibles para otros tenants
|
|
43
|
+
- [ ] Las consultas a base de datos filtran por tenant automaticamente
|
|
44
|
+
- [ ] No existe ruta de acceso que permita cross-tenant sin autorizacion explicita
|
|
45
|
+
- [ ] Las pruebas verifican que el aislamiento funciona correctamente
|
|
46
|
+
|
|
47
|
+
### AC-2: Resolucion de tenant
|
|
48
|
+
- [ ] El tenant se resuelve desde subdominio, header o token segun la estrategia elegida
|
|
49
|
+
- [ ] La resolucion es transparente para el codigo de negocio
|
|
50
|
+
- [ ] Solicitudes sin tenant valido son rechazadas con error claro
|
|
51
|
+
|
|
52
|
+
### AC-3: Configuracion por tenant
|
|
53
|
+
- [ ] Cada tenant puede personalizar branding (logo, colores, nombre)
|
|
54
|
+
- [ ] Las configuraciones de funcionalidad son independientes por tenant
|
|
55
|
+
- [ ] Los valores por defecto se heredan de la configuracion global
|
|
56
|
+
|
|
57
|
+
### AC-4: Onboarding de tenant
|
|
58
|
+
- [ ] El alta de un nuevo tenant es automatizada (no requiere intervencion manual)
|
|
59
|
+
- [ ] Se provisionan los recursos necesarios (schema/namespace/bucket)
|
|
60
|
+
- [ ] El administrador del tenant recibe credenciales de acceso
|
|
61
|
+
|
|
62
|
+
### AC-5: Limites por tenant
|
|
63
|
+
- [ ] Cada tenant tiene limites de uso configurables (usuarios, storage, API calls)
|
|
64
|
+
- [ ] Se notifica al tenant cuando se acerca a sus limites
|
|
65
|
+
- [ ] Exceder limites bloquea operaciones nuevas (no las existentes)
|
|
66
|
+
|
|
67
|
+
### AC-6: Operaciones cross-tenant (solo para superadmin)
|
|
68
|
+
- [ ] El superadmin puede consultar metricas agregadas de todos los tenants
|
|
69
|
+
- [ ] Las operaciones de mantenimiento pueden ejecutarse por tenant o globalmente
|
|
70
|
+
`,
|
|
71
|
+
fichaTecnicaTemplate: `# FICHA TÉCNICA: Multi-Tenant — {{PlatformName}}
|
|
72
|
+
|
|
73
|
+
## Archivos Afectados
|
|
74
|
+
- tenancy/resolver
|
|
75
|
+
- tenancy/isolation-middleware
|
|
76
|
+
- tenancy/config-manager
|
|
77
|
+
- tenancy/onboarding
|
|
78
|
+
- tenancy/limits
|
|
79
|
+
|
|
80
|
+
## Tipos / Entidades
|
|
81
|
+
- \`Tenant\`: id, name, slug, config, limits, createdAt
|
|
82
|
+
- \`TenantConfig\`: branding, features, defaults
|
|
83
|
+
- \`TenantLimit\`: type, maxValue, currentValue
|
|
84
|
+
|
|
85
|
+
## Riesgos
|
|
86
|
+
- Fuga de datos entre tenants → filtrado automatico + tests de aislamiento
|
|
87
|
+
- Onboarding lento → provisionamiento asincronico con status tracking
|
|
88
|
+
- Limites no respetados → middleware de verificacion en cada request
|
|
89
|
+
|
|
90
|
+
## Estimacion
|
|
91
|
+
- Dev: 80–160 horas
|
|
92
|
+
- Review: 16–32 horas
|
|
93
|
+
- Dificultad: 5/5
|
|
94
|
+
`,
|
|
95
|
+
progressTemplate: `# PROGRESS: Multi-Tenant — {{PlatformName}}
|
|
96
|
+
|
|
97
|
+
## Estado: borrador
|
|
98
|
+
|
|
99
|
+
## Criterios
|
|
100
|
+
- [ ] AC-1: Aislamiento de datos
|
|
101
|
+
- [ ] AC-2: Resolucion de tenant
|
|
102
|
+
- [ ] AC-3: Configuracion por tenant
|
|
103
|
+
- [ ] AC-4: Onboarding de tenant
|
|
104
|
+
- [ ] AC-5: Limites por tenant
|
|
105
|
+
- [ ] AC-6: Operaciones cross-tenant
|
|
106
|
+
`,
|
|
107
|
+
};
|
|
108
|
+
/** SaaS billing and subscriptions template. */
|
|
109
|
+
export const SAAS_BILLING_TEMPLATE = {
|
|
110
|
+
id: 'saas-billing',
|
|
111
|
+
name: 'Facturacion y suscripciones',
|
|
112
|
+
category: 'industry',
|
|
113
|
+
subcategory: 'saas',
|
|
114
|
+
description: 'Planes de suscripcion, upgrades, facturacion PDF y webhooks de pago.',
|
|
115
|
+
tags: ['saas', 'billing', 'subscriptions', 'invoices', 'payments'],
|
|
116
|
+
complexityScore: 'L',
|
|
117
|
+
estimationBase: {
|
|
118
|
+
hoursMin: 40,
|
|
119
|
+
hoursMax: 80,
|
|
120
|
+
notes: 'Incluye integracion con pasarela de pago y generacion de facturas',
|
|
121
|
+
},
|
|
122
|
+
criteria: [
|
|
123
|
+
{ id: 'AC-1', title: 'Planes de suscripcion', required: true },
|
|
124
|
+
{ id: 'AC-2', title: 'Upgrades y downgrades', required: true },
|
|
125
|
+
{ id: 'AC-3', title: 'Facturacion', required: true },
|
|
126
|
+
{ id: 'AC-4', title: 'Webhooks de pago', required: true },
|
|
127
|
+
{ id: 'AC-5', title: 'Periodo de prueba', required: false },
|
|
128
|
+
{ id: 'AC-6', title: 'Metricas de revenue', required: false },
|
|
129
|
+
],
|
|
130
|
+
variables: [
|
|
131
|
+
{
|
|
132
|
+
key: 'PlatformName',
|
|
133
|
+
label: 'Nombre de la plataforma',
|
|
134
|
+
description: 'Nombre de la plataforma SaaS',
|
|
135
|
+
example: 'CloudApp',
|
|
136
|
+
required: true,
|
|
137
|
+
},
|
|
138
|
+
],
|
|
139
|
+
huTemplate: `# HU: Facturacion y Suscripciones — {{PlatformName}}
|
|
140
|
+
|
|
141
|
+
## Historia de Usuario
|
|
142
|
+
Como usuario de {{PlatformName}}, quiero gestionar mi suscripcion y recibir facturas para mantener mi cuenta al dia.
|
|
143
|
+
|
|
144
|
+
## Criterios de Aceptacion
|
|
145
|
+
|
|
146
|
+
### AC-1: Planes de suscripcion
|
|
147
|
+
- [ ] El sistema define planes con nombre, precio, ciclo de facturacion y features incluidas
|
|
148
|
+
- [ ] Los planes son configurables sin despliegue (admin dashboard o config)
|
|
149
|
+
- [ ] Se soportan planes mensuales y anuales como minimo
|
|
150
|
+
- [ ] Los precios soportan multiples monedas
|
|
151
|
+
|
|
152
|
+
### AC-2: Upgrades y downgrades
|
|
153
|
+
- [ ] El usuario puede cambiar de plan en cualquier momento
|
|
154
|
+
- [ ] Los upgrades se aplican inmediatamente con prorrateo
|
|
155
|
+
- [ ] Los downgrades se aplican al final del periodo de facturacion actual
|
|
156
|
+
- [ ] Se notifica al usuario del impacto del cambio antes de confirmar
|
|
157
|
+
|
|
158
|
+
### AC-3: Facturacion
|
|
159
|
+
- [ ] Se genera factura automatica en cada ciclo de facturacion
|
|
160
|
+
- [ ] La factura es descargable en PDF con datos fiscales
|
|
161
|
+
- [ ] El historial de facturas es accesible para el usuario
|
|
162
|
+
- [ ] Los pagos fallidos generan reintentos con notificacion al usuario
|
|
163
|
+
|
|
164
|
+
### AC-4: Webhooks de pago
|
|
165
|
+
- [ ] Los eventos de pago del proveedor se reciben y procesan via webhook
|
|
166
|
+
- [ ] Los webhooks validan firma/autenticidad antes de procesar
|
|
167
|
+
- [ ] El procesamiento es idempotente (replay-safe)
|
|
168
|
+
- [ ] Los eventos fallidos se reintentan con backoff
|
|
169
|
+
|
|
170
|
+
### AC-5: Periodo de prueba
|
|
171
|
+
- [ ] Los nuevos usuarios pueden acceder a un periodo de prueba configurable
|
|
172
|
+
- [ ] Se notifica antes del fin del trial con opcion de convertir
|
|
173
|
+
- [ ] Al expirar el trial, se limita el acceso sin perder datos
|
|
174
|
+
|
|
175
|
+
### AC-6: Metricas de revenue
|
|
176
|
+
- [ ] MRR (Monthly Recurring Revenue) calculado automaticamente
|
|
177
|
+
- [ ] Churn rate visible en dashboard de admin
|
|
178
|
+
- [ ] Cohort analysis por mes de registro
|
|
179
|
+
`,
|
|
180
|
+
fichaTecnicaTemplate: `# FICHA TÉCNICA: Facturacion — {{PlatformName}}
|
|
181
|
+
|
|
182
|
+
## Archivos Afectados
|
|
183
|
+
- billing/plans
|
|
184
|
+
- billing/subscriptions
|
|
185
|
+
- billing/invoices
|
|
186
|
+
- billing/webhook-handler
|
|
187
|
+
- billing/trial
|
|
188
|
+
|
|
189
|
+
## Tipos / Entidades
|
|
190
|
+
- \`Plan\`: id, name, price, currency, interval, features[]
|
|
191
|
+
- \`Subscription\`: userId, planId, status, startedAt, expiresAt
|
|
192
|
+
- \`Invoice\`: id, subscriptionId, amount, currency, paidAt, pdfUrl
|
|
193
|
+
|
|
194
|
+
## Riesgos
|
|
195
|
+
- Doble cobro → idempotencia en webhook processing
|
|
196
|
+
- Factura incorrecta → validacion cruzada con proveedor
|
|
197
|
+
- Trial abuse → limitar a un trial por usuario/email
|
|
198
|
+
|
|
199
|
+
## Estimacion
|
|
200
|
+
- Dev: 40–80 horas
|
|
201
|
+
- Review: 8–16 horas
|
|
202
|
+
- Dificultad: 4/5
|
|
203
|
+
`,
|
|
204
|
+
progressTemplate: `# PROGRESS: Facturacion — {{PlatformName}}
|
|
205
|
+
|
|
206
|
+
## Estado: borrador
|
|
207
|
+
|
|
208
|
+
## Criterios
|
|
209
|
+
- [ ] AC-1: Planes de suscripcion
|
|
210
|
+
- [ ] AC-2: Upgrades y downgrades
|
|
211
|
+
- [ ] AC-3: Facturacion
|
|
212
|
+
- [ ] AC-4: Webhooks de pago
|
|
213
|
+
- [ ] AC-5: Periodo de prueba
|
|
214
|
+
- [ ] AC-6: Metricas de revenue
|
|
215
|
+
`,
|
|
216
|
+
};
|
|
217
|
+
/** SaaS RBAC template. */
|
|
218
|
+
export const SAAS_ROLES_TEMPLATE = {
|
|
219
|
+
id: 'saas-roles',
|
|
220
|
+
name: 'Control de acceso basado en roles (RBAC)',
|
|
221
|
+
category: 'industry',
|
|
222
|
+
subcategory: 'saas',
|
|
223
|
+
description: 'Permisos granulares, herencia de roles y auditoria de acceso.',
|
|
224
|
+
tags: ['saas', 'rbac', 'permissions', 'roles', 'access-control'],
|
|
225
|
+
complexityScore: 'M',
|
|
226
|
+
estimationBase: {
|
|
227
|
+
hoursMin: 24,
|
|
228
|
+
hoursMax: 48,
|
|
229
|
+
notes: 'Incluye herencia de roles y auditoria de acceso',
|
|
230
|
+
},
|
|
231
|
+
criteria: [
|
|
232
|
+
{ id: 'AC-1', title: 'Definicion de roles', required: true },
|
|
233
|
+
{ id: 'AC-2', title: 'Permisos granulares', required: true },
|
|
234
|
+
{ id: 'AC-3', title: 'Herencia de roles', required: false },
|
|
235
|
+
{ id: 'AC-4', title: 'Asignacion de roles', required: true },
|
|
236
|
+
{ id: 'AC-5', title: 'Verificacion de permisos', required: true },
|
|
237
|
+
{ id: 'AC-6', title: 'Auditoria de acceso', required: true },
|
|
238
|
+
],
|
|
239
|
+
variables: [
|
|
240
|
+
{
|
|
241
|
+
key: 'PlatformName',
|
|
242
|
+
label: 'Nombre de la plataforma',
|
|
243
|
+
description: 'Nombre de la plataforma SaaS',
|
|
244
|
+
example: 'CloudApp',
|
|
245
|
+
required: true,
|
|
246
|
+
},
|
|
247
|
+
],
|
|
248
|
+
huTemplate: `# HU: RBAC — {{PlatformName}}
|
|
249
|
+
|
|
250
|
+
## Historia de Usuario
|
|
251
|
+
Como administrador de {{PlatformName}}, quiero asignar roles y permisos a los usuarios para controlar que acciones puede realizar cada uno.
|
|
252
|
+
|
|
253
|
+
## Criterios de Aceptacion
|
|
254
|
+
|
|
255
|
+
### AC-1: Definicion de roles
|
|
256
|
+
- [ ] Los roles se definen con nombre, descripcion y conjunto de permisos
|
|
257
|
+
- [ ] Existen roles predefinidos (admin, editor, viewer) configurables
|
|
258
|
+
- [ ] Se pueden crear roles personalizados
|
|
259
|
+
- [ ] Los roles se gestionan por tenant (no globales)
|
|
260
|
+
|
|
261
|
+
### AC-2: Permisos granulares
|
|
262
|
+
- [ ] Los permisos se definen como pares recurso:accion (e.g. "users:create")
|
|
263
|
+
- [ ] Se soportan wildcards (e.g. "users:*" para todas las acciones sobre usuarios)
|
|
264
|
+
- [ ] Los permisos nuevos se agregan sin redeploy (configuracion)
|
|
265
|
+
|
|
266
|
+
### AC-3: Herencia de roles
|
|
267
|
+
- [ ] Un rol puede heredar permisos de otro rol padre
|
|
268
|
+
- [ ] La herencia es transitiva (admin hereda de editor que hereda de viewer)
|
|
269
|
+
- [ ] Los permisos heredados pueden ser revocados explicitamente
|
|
270
|
+
|
|
271
|
+
### AC-4: Asignacion de roles
|
|
272
|
+
- [ ] Los administradores pueden asignar/revocar roles a usuarios
|
|
273
|
+
- [ ] Un usuario puede tener multiples roles (los permisos se combinan)
|
|
274
|
+
- [ ] Los cambios de rol se aplican inmediatamente (sin requerir re-login)
|
|
275
|
+
|
|
276
|
+
### AC-5: Verificacion de permisos
|
|
277
|
+
- [ ] Toda ruta/accion verifica permisos antes de ejecutar
|
|
278
|
+
- [ ] La verificacion es eficiente (cache en memoria, no DB por request)
|
|
279
|
+
- [ ] Los permisos denegados retornan 403 con mensaje claro
|
|
280
|
+
|
|
281
|
+
### AC-6: Auditoria de acceso
|
|
282
|
+
- [ ] Los cambios de roles y permisos se registran con timestamp y actor
|
|
283
|
+
- [ ] Los accesos denegados se registran para analisis de seguridad
|
|
284
|
+
- [ ] El registro de auditoria es consultable por admin
|
|
285
|
+
`,
|
|
286
|
+
fichaTecnicaTemplate: `# FICHA TÉCNICA: RBAC — {{PlatformName}}
|
|
287
|
+
|
|
288
|
+
## Archivos Afectados
|
|
289
|
+
- rbac/roles
|
|
290
|
+
- rbac/permissions
|
|
291
|
+
- rbac/assignment
|
|
292
|
+
- rbac/middleware (permission check)
|
|
293
|
+
- rbac/audit-log
|
|
294
|
+
|
|
295
|
+
## Tipos / Entidades
|
|
296
|
+
- \`Role\`: id, name, permissions[], parentRoleId
|
|
297
|
+
- \`Permission\`: resource, action, granted
|
|
298
|
+
- \`RoleAssignment\`: userId, roleId, assignedBy, assignedAt
|
|
299
|
+
|
|
300
|
+
## Riesgos
|
|
301
|
+
- Escalacion de privilegios → tests de aislamiento de permisos
|
|
302
|
+
- Cache de permisos desactualizado → invalidacion al cambiar roles
|
|
303
|
+
- Herencia circular → validacion al definir roles padre
|
|
304
|
+
|
|
305
|
+
## Estimacion
|
|
306
|
+
- Dev: 24–48 horas
|
|
307
|
+
- Review: 4–8 horas
|
|
308
|
+
- Dificultad: 3/5
|
|
309
|
+
`,
|
|
310
|
+
progressTemplate: `# PROGRESS: RBAC — {{PlatformName}}
|
|
311
|
+
|
|
312
|
+
## Estado: borrador
|
|
313
|
+
|
|
314
|
+
## Criterios
|
|
315
|
+
- [ ] AC-1: Definicion de roles
|
|
316
|
+
- [ ] AC-2: Permisos granulares
|
|
317
|
+
- [ ] AC-3: Herencia de roles
|
|
318
|
+
- [ ] AC-4: Asignacion de roles
|
|
319
|
+
- [ ] AC-5: Verificacion de permisos
|
|
320
|
+
- [ ] AC-6: Auditoria de acceso
|
|
321
|
+
`,
|
|
322
|
+
};
|
|
323
|
+
//# sourceMappingURL=templates-industry-saas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates-industry-saas.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-industry-saas.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-perf-integration.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-perf-integration.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,8CAA8C;AAC9C,eAAO,MAAM,iCAAiC,EAAE,
|
|
1
|
+
{"version":3,"file":"templates-perf-integration.d.ts","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-perf-integration.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,8CAA8C;AAC9C,eAAO,MAAM,iCAAiC,EAAE,iBA+G/C,CAAC;AAEF,6CAA6C;AAC7C,eAAO,MAAM,gCAAgC,EAAE,iBA4G9C,CAAC"}
|
|
@@ -7,6 +7,19 @@ export const PERFORMANCE_OPTIMIZATION_TEMPLATE = {
|
|
|
7
7
|
category: 'performance',
|
|
8
8
|
description: 'Measurable performance improvements with before/after benchmarks.',
|
|
9
9
|
tags: ['performance', 'optimization', 'caching', 'benchmarks'],
|
|
10
|
+
complexityScore: 'L',
|
|
11
|
+
estimationBase: {
|
|
12
|
+
hoursMin: 16,
|
|
13
|
+
hoursMax: 60,
|
|
14
|
+
notes: 'Highly variable by root cause; includes benchmarking setup',
|
|
15
|
+
},
|
|
16
|
+
criteria: [
|
|
17
|
+
{ id: 'AC-1', title: 'Baseline measurement', required: true },
|
|
18
|
+
{ id: 'AC-2', title: 'Optimization implementation', required: true },
|
|
19
|
+
{ id: 'AC-3', title: 'Cache strategy', required: false },
|
|
20
|
+
{ id: 'AC-4', title: 'Validation', required: true },
|
|
21
|
+
{ id: 'AC-5', title: 'Observability', required: false },
|
|
22
|
+
],
|
|
10
23
|
variables: [
|
|
11
24
|
{
|
|
12
25
|
key: 'TargetArea',
|
|
@@ -107,6 +120,20 @@ export const THIRD_PARTY_INTEGRATION_TEMPLATE = {
|
|
|
107
120
|
category: 'integration',
|
|
108
121
|
description: 'Integrating with an external service (payment, email, SMS, CRM, etc.).',
|
|
109
122
|
tags: ['integration', 'external', 'api', 'webhook'],
|
|
123
|
+
complexityScore: 'M',
|
|
124
|
+
estimationBase: {
|
|
125
|
+
hoursMin: 16,
|
|
126
|
+
hoursMax: 40,
|
|
127
|
+
notes: 'Includes webhook handling and circuit breaker setup',
|
|
128
|
+
},
|
|
129
|
+
criteria: [
|
|
130
|
+
{ id: 'AC-1', title: 'Credentials management', required: true },
|
|
131
|
+
{ id: 'AC-2', title: 'Core integration', required: true },
|
|
132
|
+
{ id: 'AC-3', title: 'Error handling', required: true },
|
|
133
|
+
{ id: 'AC-4', title: 'Webhooks', required: false },
|
|
134
|
+
{ id: 'AC-5', title: 'Observability', required: false },
|
|
135
|
+
{ id: 'AC-6', title: 'Testing', required: true },
|
|
136
|
+
],
|
|
110
137
|
variables: [
|
|
111
138
|
{
|
|
112
139
|
key: 'ServiceName',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templates-perf-integration.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-perf-integration.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,oEAAoE;AAIpE,8CAA8C;AAC9C,MAAM,CAAC,MAAM,iCAAiC,GAAsB;IAClE,EAAE,EAAE,0BAA0B;IAC9B,IAAI,EAAE,0BAA0B;IAChC,QAAQ,EAAE,aAAa;IACvB,WAAW,EAAE,mEAAmE;IAChF,IAAI,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,CAAC;IAC9D,SAAS,EAAE;QACT;YACE,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,oEAAoE;YACjF,OAAO,EAAE,mBAAmB;YAC5B,QAAQ,EAAE,IAAI;SACf;QACD;YACE,GAAG,EAAE,iBAAiB;YACtB,KAAK,EAAE,kBAAkB;YACzB,WAAW,EAAE,qCAAqC;YAClD,OAAO,EAAE,oBAAoB;YAC7B,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,+BAA+B;SAC9C;QACD;YACE,GAAG,EAAE,YAAY;YACjB,KAAK,EAAE,aAAa;YACpB,WAAW,EAAE,+CAA+C;YAC5D,OAAO,EAAE,sBAAsB;YAC/B,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,yCAAyC;SACxD;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAkCb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;CAoBvB;IACC,gBAAgB,EAAE;;;;;;;;;;CAUnB;CACA,CAAC;AAEF,6CAA6C;AAC7C,MAAM,CAAC,MAAM,gCAAgC,GAAsB;IACjE,EAAE,EAAE,yBAAyB;IAC7B,IAAI,EAAE,yBAAyB;IAC/B,QAAQ,EAAE,aAAa;IACvB,WAAW,EAAE,wEAAwE;IACrF,IAAI,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,CAAC;IACnD,SAAS,EAAE;QACT;YACE,GAAG,EAAE,aAAa;YAClB,KAAK,EAAE,cAAc;YACrB,WAAW,EAAE,2CAA2C;YACxD,OAAO,EAAE,QAAQ;YACjB,QAAQ,EAAE,IAAI;SACf;QACD;YACE,GAAG,EAAE,oBAAoB;YACzB,KAAK,EAAE,SAAS;YAChB,WAAW,EAAE,8BAA8B;YAC3C,OAAO,EAAE,oBAAoB;YAC7B,QAAQ,EAAE,IAAI;SACf;KACF;IACD,UAAU,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCb;IACC,oBAAoB,EAAE;;;;;;;;;;;;;;;;;;;;;;;CAuBvB;IACC,gBAAgB,EAAE;;;;;;;;;;;CAWnB;CACA,CAAC"}
|
|
1
|
+
{"version":3,"file":"templates-perf-integration.js","sourceRoot":"","sources":["../../../src/engine/spec-templates/templates-perf-integration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { GeneratePlanuCIInput, ToolResult } from '../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Handle the generate_planu_ci tool.
|
|
4
|
+
* Generates a GitHub Actions workflow YAML for Planu spec validation in CI,
|
|
5
|
+
* including drift detection, PR comments, badge, and .planu.yml config.
|
|
6
|
+
*/
|
|
7
|
+
export declare function handleGeneratePlanuCI(args: GeneratePlanuCIInput): ToolResult;
|
|
8
|
+
//# sourceMappingURL=ci-planu-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ci-planu-handler.d.ts","sourceRoot":"","sources":["../../src/tools/ci-planu-handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG1E;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,oBAAoB,GAAG,UAAU,CA0C5E"}
|