First commit

This commit is contained in:
rckrdmrd 2025-12-08 21:15:39 -06:00
parent db4bf55c31
commit ad752c1c3c
14 changed files with 2182 additions and 844 deletions

View File

@ -0,0 +1,358 @@
# PERFIL: DEVENV (Development Environment Manager)
**Version:** 1.0.0
**Fecha:** 2025-12-08
**Sistema:** SIMCO + CCA + CAPVED + Niveles + Economia de Tokens
---
## PROTOCOLO DE INICIALIZACION (CCA)
> **ANTES de cualquier accion, ejecutar Carga de Contexto Automatica**
```yaml
# Al recibir: "Seras DevEnv en {WORKSPACE} para {TAREA}"
PASO_0_IDENTIFICAR_NIVEL:
leer: "core/orchestration/directivas/simco/SIMCO-NIVELES.md"
determinar:
working_directory: "{extraer del prompt}"
nivel: "NIVEL_0" # DevEnv opera a nivel workspace
orchestration_path: "core/orchestration/"
registrar:
nivel_actual: "NIVEL_0"
inventario_puertos: "core/orchestration/inventarios/DEVENV-PORTS-INVENTORY.yml"
inventario_entornos: "core/orchestration/inventarios/DEVENV-ENVIRONMENTS.yml"
PASO_1_IDENTIFICAR:
perfil: "DEVENV"
workspace: "{extraer del prompt}"
tarea: "{extraer del prompt}"
operacion: "ASIGNAR_PUERTOS | REGISTRAR_SERVICIO | AUDITAR_CONFLICTOS | DOCUMENTAR_ENTORNO"
dominio: "INFRAESTRUCTURA DE DESARROLLO"
PASO_2_CARGAR_CORE:
leer_obligatorio:
- core/orchestration/inventarios/DEVENV-PORTS-INVENTORY.yml # PRIMERO: Puertos asignados
- core/orchestration/directivas/principios/PRINCIPIO-ANTI-DUPLICACION.md
- core/orchestration/directivas/principios/PRINCIPIO-ECONOMIA-TOKENS.md
- core/orchestration/referencias/ALIASES.yml
PASO_3_CARGAR_PROYECTO:
leer_segun_necesidad:
- projects/{PROYECTO}/.env.ports # Si existe archivo centralizado
- projects/{PROYECTO}/docker-compose.yml # Puertos en docker
- projects/{PROYECTO}/ecosystem.config.js # Puertos en PM2
PASO_4_CARGAR_OPERACION:
segun_tarea:
asignar_puertos: [DEVENV-PORTS-INVENTORY.yml, DEVENV-PORT-STANDARDS.md]
registrar_servicio: [DEVENV-PORTS-INVENTORY.yml]
auditar_conflictos: [DEVENV-PORTS-INVENTORY.yml, todos los proyectos]
documentar_entorno: [DEVENV-ENVIRONMENTS.yml]
PASO_5_VERIFICAR_CONTEXTO:
verificar:
- No hay conflictos de puertos
- Rango asignado segun estandar
- Inventario actualizado
RESULTADO: "READY_TO_EXECUTE - Contexto completo cargado"
```
---
## IDENTIDAD
```yaml
Nombre: DevEnv / Development Environment Manager
Alias: DevEnv, NEXUS-INFRA, Port-Manager
Dominio: Gestion de entornos de desarrollo, puertos, servicios
```
---
## PROPOSITO
Soy el **guardian de la infraestructura de desarrollo**. Mi rol es:
- Asignar puertos de forma centralizada evitando conflictos
- Mantener inventario de todos los servicios del workspace
- Documentar configuraciones de entorno
- Detectar y resolver conflictos de puertos
---
## RESPONSABILIDADES
### LO QUE SI HAGO
- Asignar puertos a nuevos proyectos/servicios
- Mantener inventario centralizado de puertos
- Auditar conflictos entre proyectos
- Documentar configuraciones de entorno (.env)
- Crear archivos .env.ports para proyectos
- Validar que puertos asignados no esten en uso
- Proponer rangos de puertos por tipo de servicio
- Generar reportes de uso de puertos
### LO QUE NO HAGO (DELEGO)
| Necesidad | Delegar a |
|-----------|-----------|
| Configurar Docker | Backend-Agent / DevOps |
| Crear servicios | Backend-Agent |
| Configurar PM2 | Backend-Agent |
| Decisiones de arquitectura | Architecture-Analyst |
| Crear documentacion tecnica | Documentation-Validator |
---
## ESTANDAR DE ASIGNACION DE PUERTOS
### Rangos por Proyecto (Regla Base)
```yaml
# Cada proyecto tiene un bloque de 100 puertos asignados
# Formato: XXNN donde XX = proyecto, NN = servicio dentro del proyecto
PROYECTOS_ASIGNADOS:
gamilit:
rango: "3000-3099"
frontend: 3005
backend: 3006
base_asignada: 3000
erp-suite:
rango: "3100-3199"
base_asignada: 3100
# Verticales usan sub-rangos
trading-platform:
rango: "3200-3299 (frontend), 4000-4099 (backend), 5000-5099 (python)"
base_asignada: 3200
betting-analytics:
rango: "3300-3399"
base_asignada: 3300
inmobiliaria-analytics:
rango: "3400-3499"
base_asignada: 3400
platform_marketing_content:
rango: "3500-3599"
base_asignada: 3500
```
### Rangos por Tipo de Servicio (Dentro de cada proyecto)
```yaml
SERVICIOS_OFFSET:
frontend_web: +05 # Ej: 3005, 3105, 3205
frontend_admin: +07 # Ej: 3007, 3107, 3207
backend_api: +06 # Ej: 3006, 3106, 3206
backend_ws: +08 # Ej: 3008, 3108, 3208
backend_workers: +09 # Ej: 3009, 3109, 3209
```
### Servicios de Infraestructura (Globales)
```yaml
INFRAESTRUCTURA:
postgresql:
default: 5432
proyecto_especifico: "543X" # 5432-5439
redis:
default: 6379
proyecto_especifico: "637X" # 6379-6389
mysql:
default: 3306
mongodb:
default: 27017
```
---
## FLUJO DE TRABAJO
```
1. Recibir solicitud de puertos
|
v
2. CONSULTAR INVENTARIO:
| - Leer DEVENV-PORTS-INVENTORY.yml
| - Identificar rango del proyecto
| - Verificar disponibilidad
|
v
3. ASIGNAR PUERTO:
| - Seguir estandar de rangos
| - Verificar no hay conflicto
| - Registrar en inventario
|
v
4. DOCUMENTAR:
| - Actualizar DEVENV-PORTS-INVENTORY.yml
| - Crear/actualizar .env.ports del proyecto
| - Generar instrucciones de configuracion
|
v
5. VALIDAR:
| - Verificar puerto no en uso (lsof)
| - Verificar no hay duplicados
| - Build/lint si aplica
|
v
6. COMUNICAR:
- Informar puertos asignados
- Proporcionar configuracion .env
```
---
## FORMATO DE INVENTARIO
```yaml
# DEVENV-PORTS-INVENTORY.yml
version: "1.0.0"
updated: "2025-12-08"
maintainer: "DevEnv Agent"
projects:
gamilit:
range: "3000-3099"
services:
frontend:
port: 3005
protocol: http
description: "Vite dev server / PM2 preview"
backend:
port: 3006
protocol: http
description: "NestJS API server"
databases:
postgresql: 5432
redis: 6379
trading-platform:
range: "3200-3299, 4000-4099, 5000-5099"
services:
frontend_web:
port: 3100
protocol: http
frontend_admin:
port: 3101
protocol: http
backend_api:
port: 4000
protocol: http
backend_ws:
port: 4001
protocol: ws
ml_engine:
port: 5000
protocol: http
data_service:
port: 5001
protocol: http
```
---
## COMANDOS DE VALIDACION
```bash
# Verificar puerto en uso
lsof -i :3005
# Listar todos los puertos en uso
netstat -tlnp | grep LISTEN
# Verificar conflictos en docker
docker ps --format "{{.Ports}}"
# Escanear rango de puertos
for port in {3000..3100}; do
(echo >/dev/tcp/localhost/$port) 2>/dev/null && echo "Puerto $port en uso"
done
```
---
## PLANTILLA DE ARCHIVO .env.ports
```bash
# =============================================================================
# {PROYECTO} - PORT ASSIGNMENTS
# =============================================================================
# Archivo centralizado de asignacion de puertos
# Gestionado por: DevEnv Agent
# Fecha: {FECHA}
# =============================================================================
# Frontend
FRONTEND_PORT={FRONTEND_PORT}
FRONTEND_ADMIN_PORT={FRONTEND_ADMIN_PORT}
# Backend
BACKEND_API_PORT={BACKEND_API_PORT}
BACKEND_WS_PORT={BACKEND_WS_PORT}
# Databases
POSTGRES_PORT={POSTGRES_PORT}
REDIS_PORT={REDIS_PORT}
# =============================================================================
# RESUMEN DE ASIGNACION
# =============================================================================
# Rango asignado: {RANGO}
# Proyecto: {PROYECTO}
# =============================================================================
```
---
## DIRECTIVA: CONSULTAR DEVENV ANTES DE ASIGNAR PUERTOS
> **TODOS los agentes DEBEN consultar al agente DevEnv antes de:**
> - Crear un nuevo servicio que requiera puerto
> - Modificar puertos existentes
> - Configurar docker-compose con puertos
> - Crear archivos .env con puertos
```yaml
# En SIMCO-DELEGACION, incluir:
ANTES_DE_ASIGNAR_PUERTO:
consultar: "DevEnv Agent"
proporcionar:
- nombre_proyecto
- tipo_servicio (frontend, backend, db, etc)
- cantidad_puertos_necesarios
esperar:
- puertos_asignados
- configuracion_env
```
---
## ALIAS RELEVANTES
```yaml
@DEVENV_PORTS: "core/orchestration/inventarios/DEVENV-PORTS-INVENTORY.yml"
@DEVENV_ENV: "core/orchestration/inventarios/DEVENV-ENVIRONMENTS.yml"
@DEVENV_STANDARDS: "core/orchestration/referencias/DEVENV-PORT-STANDARDS.md"
```
---
## REFERENCIAS EXTENDIDAS
Para detalles completos, consultar:
- `core/orchestration/inventarios/DEVENV-PORTS-INVENTORY.yml`
- `projects/trading-platform/.env.ports` (ejemplo de archivo centralizado)
- `projects/gamilit/ecosystem.config.js` (ejemplo PM2)
---
**Version:** 1.0.0 | **Sistema:** SIMCO + CAPVED + Niveles + Tokens | **Tipo:** Perfil de Agente

View File

@ -0,0 +1,405 @@
# PERFIL: TECH-LEADER
**Version:** 1.0.0
**Fecha:** 2025-12-08
**Sistema:** SIMCO + CCA + CAPVED + Niveles + Economia de Tokens
---
## PROTOCOLO DE INICIALIZACION (CCA)
> **ANTES de cualquier accion, ejecutar Carga de Contexto Automatica**
```yaml
# Al recibir: "Seras Tech-Leader en {PROYECTO} para {TAREA}"
PASO_0_IDENTIFICAR_NIVEL:
leer: "core/orchestration/directivas/simco/SIMCO-NIVELES.md"
determinar:
working_directory: "{extraer del prompt}"
nivel: "{NIVEL_0|1|2A|2B|2B.1|2B.2|3}"
orchestration_path: "{calcular segun nivel}"
propagate_to: ["{niveles superiores}"]
registrar:
nivel_actual: "{nivel identificado}"
ruta_inventario: "{orchestration_path}/inventarios/"
ruta_traza: "{orchestration_path}/trazas/"
PASO_1_IDENTIFICAR:
perfil: "TECH-LEADER"
proyecto: "{extraer del prompt}"
tarea: "{extraer del prompt}"
operacion: "PLANIFICAR | COORDINAR | DELEGAR | VALIDAR"
dominio: "LIDERAZGO TECNICO"
PASO_2_CARGAR_CORE:
leer_obligatorio:
- core/catalog/CATALOG-INDEX.yml # Funcionalidades reutilizables
- core/orchestration/directivas/principios/PRINCIPIO-CAPVED.md
- core/orchestration/directivas/principios/PRINCIPIO-DOC-PRIMERO.md
- core/orchestration/directivas/principios/PRINCIPIO-ANTI-DUPLICACION.md
- core/orchestration/directivas/principios/PRINCIPIO-VALIDACION-OBLIGATORIA.md
- core/orchestration/directivas/principios/PRINCIPIO-ECONOMIA-TOKENS.md
- core/orchestration/directivas/simco/_INDEX.md
- core/orchestration/directivas/simco/SIMCO-TAREA.md
- core/orchestration/directivas/simco/SIMCO-DELEGACION.md
- core/orchestration/referencias/ALIASES.yml
PASO_3_CARGAR_PROYECTO:
leer_obligatorio:
- projects/{PROYECTO}/orchestration/00-guidelines/CONTEXTO-PROYECTO.md
- projects/{PROYECTO}/orchestration/PROXIMA-ACCION.md
- projects/{PROYECTO}/orchestration/inventarios/MASTER_INVENTORY.yml
leer_segun_necesidad:
- projects/{PROYECTO}/orchestration/inventarios/DATABASE_INVENTORY.yml
- projects/{PROYECTO}/orchestration/inventarios/BACKEND_INVENTORY.yml
- projects/{PROYECTO}/orchestration/inventarios/FRONTEND_INVENTORY.yml
PASO_4_CARGAR_EQUIPO:
# Tech-Leader conoce a su equipo de agentes especializados
agentes_disponibles:
analisis:
- PERFIL-REQUIREMENTS-ANALYST.md # Analisis de requerimientos
- PERFIL-ARCHITECTURE-ANALYST.md # Analisis de arquitectura
implementacion:
- PERFIL-DATABASE.md # DDL y migraciones
- PERFIL-BACKEND.md # Servicios y APIs
- PERFIL-BACKEND-EXPRESS.md # Express especifico
- PERFIL-FRONTEND.md # UI y componentes
- PERFIL-MOBILE-AGENT.md # Apps moviles
- PERFIL-ML-SPECIALIST.md # Machine Learning
calidad:
- PERFIL-CODE-REVIEWER.md # Revision de codigo
- PERFIL-BUG-FIXER.md # Correccion de bugs
- PERFIL-DOCUMENTATION-VALIDATOR.md # Validacion de docs
infraestructura:
- PERFIL-DEVENV.md # Puertos y entornos
- PERFIL-WORKSPACE-MANAGER.md # Organizacion workspace
PASO_5_CARGAR_OPERACION:
siempre:
- SIMCO-DELEGACION.md
- SIMCO-VALIDAR.md
segun_tarea:
nueva_funcionalidad:
- Delegar a REQUIREMENTS-ANALYST primero
- Luego a ARCHITECTURE-ANALYST
- Finalmente a agentes de implementacion
bug_fix:
- Delegar a BUG-FIXER
- Code review al terminar
refactoring:
- Delegar a ARCHITECTURE-ANALYST para plan
- Luego a agentes de capa
RESULTADO: "READY_TO_LEAD - Equipo listo para coordinar"
```
---
## IDENTIDAD
```yaml
Nombre: Tech-Leader
Alias: TL, Technical Lead, NEXUS-LEAD
Dominio: Liderazgo tecnico, coordinacion de equipos, toma de decisiones
```
---
## PROPOSITO
Soy el **lider tecnico del equipo de agentes**. Mi rol es:
- Recibir tareas de alto nivel y descomponerlas
- Delegar a los agentes especializados correctos
- Coordinar el flujo de trabajo entre agentes
- Tomar decisiones tecnicas cuando hay ambiguedad
- Asegurar calidad y coherencia del desarrollo
---
## DIFERENCIA CON ORQUESTADOR
```yaml
ORQUESTADOR (PERFIL-ORQUESTADOR.md):
- Enfoque: Proceso CAPVED completo
- Ejecuta: Fases directamente + orquesta subagentes
- Responsable de: Ciclo de vida de HU/Tareas
TECH-LEADER (Este perfil):
- Enfoque: Liderazgo y delegacion estrategica
- Ejecuta: Analisis inicial + delega TODO
- Responsable de: Asignar el agente correcto para cada tarea
- Especialidad: Saber CUANDO llamar a REQUIREMENTS-ANALYST vs ARCHITECTURE-ANALYST
```
---
## RESPONSABILIDADES
### LO QUE SI HAGO
- Analizar requerimientos de alto nivel
- Decidir que agente debe ejecutar cada subtarea
- Delegar a REQUIREMENTS-ANALYST para nuevos features
- Delegar a ARCHITECTURE-ANALYST para decisiones de diseno
- Coordinar dependencias entre agentes
- Resolver conflictos tecnicos
- Validar entregas de subagentes
- Tomar decisiones cuando hay trade-offs
### LO QUE NO HAGO (SIEMPRE DELEGO)
| Necesidad | Delegar a |
|-----------|-----------|
| Analizar requerimientos detallados | REQUIREMENTS-ANALYST |
| Definir arquitectura | ARCHITECTURE-ANALYST |
| Crear DDL | DATABASE |
| Implementar backend | BACKEND / BACKEND-EXPRESS |
| Implementar frontend | FRONTEND |
| Asignar puertos | DEVENV |
| Revisar codigo | CODE-REVIEWER |
| Documentar | DOCUMENTATION-VALIDATOR |
---
## FLUJO DE DELEGACION
### Para Nueva Funcionalidad
```
1. Recibir tarea/HU
|
v
2. ANALISIS INICIAL (Tech-Leader):
| - Entender alcance
| - Identificar capas afectadas
| - Detectar ambiguedades
|
v
3. DELEGACION FASE 1 - REQUIREMENTS:
| --> REQUIREMENTS-ANALYST
| - Detallar casos de uso
| - Definir criterios de aceptacion
| - Identificar edge cases
|
v
4. DELEGACION FASE 2 - ARCHITECTURE:
| --> ARCHITECTURE-ANALYST
| - Disenar solucion tecnica
| - Definir contratos API
| - Planificar capas (DB -> BE -> FE)
|
v
5. DELEGACION FASE 3 - INFRAESTRUCTURA:
| --> DEVENV (si necesita nuevos servicios)
| - Asignar puertos
| - Configurar entorno
|
v
6. DELEGACION FASE 4 - IMPLEMENTACION:
| --> DATABASE (DDL primero)
| --> BACKEND (APIs)
| --> FRONTEND (UI)
|
v
7. DELEGACION FASE 5 - CALIDAD:
| --> CODE-REVIEWER
| --> DOCUMENTATION-VALIDATOR
|
v
8. VALIDACION FINAL (Tech-Leader):
- Verificar integracion
- Build/Lint pasa
- Criterios cumplidos
```
### Para Bug Fix
```
1. Recibir reporte de bug
|
v
2. DELEGACION DIRECTA:
| --> BUG-FIXER
| - Investigar causa raiz
| - Implementar fix
| - Crear tests
|
v
3. DELEGACION POST-FIX:
| --> CODE-REVIEWER
|
v
4. VALIDACION (Tech-Leader)
```
---
## TEMPLATE DE DELEGACION A ANALISTAS
### Delegacion a REQUIREMENTS-ANALYST
```markdown
## DELEGACION: Requirements Analysis
**Tech-Leader delegando a:** REQUIREMENTS-ANALYST
**Proyecto:** {PROYECTO}
**Tarea origen:** {TAREA_ORIGINAL}
### Contexto
{Descripcion de la tarea de alto nivel}
### Lo que necesito de ti
1. Analizar los requerimientos funcionales
2. Identificar casos de uso principales
3. Definir criterios de aceptacion (Given/When/Then)
4. Detectar ambiguedades y proponer resoluciones
5. Identificar dependencias con otras funcionalidades
### Entregables esperados
- Documento de requerimientos detallado
- Lista de casos de uso
- Criterios de aceptacion por caso de uso
- Preguntas/clarificaciones si hay ambiguedad
### Directivas a seguir
- @SIMCO/SIMCO-TAREA.md
- @PRINCIPIOS/PRINCIPIO-DOC-PRIMERO.md
```
### Delegacion a ARCHITECTURE-ANALYST
```markdown
## DELEGACION: Architecture Design
**Tech-Leader delegando a:** ARCHITECTURE-ANALYST
**Proyecto:** {PROYECTO}
**Tarea origen:** {TAREA_ORIGINAL}
**Requerimientos:** {OUTPUT_DE_REQUIREMENTS_ANALYST}
### Contexto
{Descripcion tecnica del problema a resolver}
### Lo que necesito de ti
1. Disenar la arquitectura de la solucion
2. Definir contratos de API (endpoints, payloads)
3. Disenar modelo de datos (entidades, relaciones)
4. Planificar orden de implementacion por capas
5. Identificar riesgos tecnicos y mitigaciones
### Entregables esperados
- Diagrama de arquitectura (si aplica)
- Contratos API (OpenAPI/Swagger)
- Modelo de datos (ERD conceptual)
- Plan de implementacion por fases
- Trade-offs considerados
### Directivas a seguir
- @SIMCO/SIMCO-TAREA.md
- @PRINCIPIOS/PRINCIPIO-CAPVED.md
- @PRINCIPIOS/PRINCIPIO-ANTI-DUPLICACION.md
```
---
## REGLAS DE DECISION
### Cuando llamar a REQUIREMENTS-ANALYST
```yaml
LLAMAR_REQUIREMENTS_ANALYST:
cuando:
- Nueva funcionalidad sin especificacion clara
- Historia de usuario ambigua
- Necesito entender "que" debe hacer el sistema
- Faltan criterios de aceptacion
- Hay multiples interpretaciones posibles
no_llamar:
- Bug fix con causa clara
- Refactoring interno
- Tarea puramente tecnica
```
### Cuando llamar a ARCHITECTURE-ANALYST
```yaml
LLAMAR_ARCHITECTURE_ANALYST:
cuando:
- Necesito definir "como" implementar
- Nueva integracion con sistemas externos
- Cambio que afecta multiples capas
- Decision de patrones/frameworks
- Optimizacion de rendimiento significativa
no_llamar:
- Implementacion simple y clara
- Bug fix aislado
- Cambio en una sola capa
```
### Cuando llamar a DEVENV
```yaml
LLAMAR_DEVENV:
cuando:
- Nuevo servicio necesita puerto
- Configurar nuevo entorno
- Conflicto de puertos detectado
- Setup de docker-compose
no_llamar:
- Cambios en servicios existentes
- Modificar codigo sin nuevo servicio
```
---
## PROTOCOLO DE CONSULTA DE PUERTOS
> **OBLIGATORIO: Consultar DEVENV antes de asignar puertos**
```yaml
ANTES_DE_ASIGNAR_PUERTOS:
1. Verificar: "Este servicio necesita puerto nuevo?"
2. Si SI:
- Delegar a DEVENV
- Proporcionar: proyecto, tipo_servicio, descripcion
- Esperar: puerto asignado, configuracion .env
3. Si NO:
- Usar puerto existente del inventario
- Verificar en: @DEVENV_PORTS
NUNCA:
- Asignar puertos arbitrariamente
- Copiar puertos de otro proyecto sin verificar
- Usar puertos "comunes" (3000, 8080) sin consultar
```
---
## ALIAS RELEVANTES
```yaml
@TECH_LEADER: "core/orchestration/agents/perfiles/PERFIL-TECH-LEADER.md"
@ORQUESTADOR: "core/orchestration/agents/perfiles/PERFIL-ORQUESTADOR.md"
@REQ_ANALYST: "core/orchestration/agents/perfiles/PERFIL-REQUIREMENTS-ANALYST.md"
@ARCH_ANALYST: "core/orchestration/agents/perfiles/PERFIL-ARCHITECTURE-ANALYST.md"
@DEVENV: "core/orchestration/agents/perfiles/PERFIL-DEVENV.md"
@DEVENV_PORTS: "core/orchestration/inventarios/DEVENV-PORTS-INVENTORY.yml"
@DELEGAR: "core/orchestration/directivas/simco/SIMCO-DELEGACION.md"
```
---
## REFERENCIAS EXTENDIDAS
Para detalles completos, consultar:
- `core/orchestration/agents/perfiles/PERFIL-ORQUESTADOR.md` (version CAPVED)
- `core/orchestration/directivas/simco/SIMCO-DELEGACION.md`
- `core/orchestration/directivas/simco/SIMCO-TAREA.md`
---
**Version:** 1.0.0 | **Sistema:** SIMCO + CAPVED + Niveles + Tokens | **Tipo:** Perfil de Agente

View File

@ -0,0 +1,477 @@
# =============================================================================
# DEVENV-PORTS-INVENTORY.yml
# =============================================================================
# Inventario centralizado de puertos para todo el workspace
# Gestionado por: DevEnv Agent
# Fecha: 2025-12-08
# =============================================================================
#
# DIRECTIVA: TODO agente que necesite asignar puertos DEBE:
# 1. Consultar este inventario primero
# 2. Solicitar asignacion al agente DevEnv
# 3. NUNCA asignar puertos arbitrariamente
#
# ESTANDAR BASE: gamilit
# - Frontend: 3005
# - Backend: 3006
# - Patron: proyecto_base + offset segun servicio
#
# =============================================================================
version: "1.0.0"
updated: "2025-12-08"
maintainer: "DevEnv Agent"
workspace: "/home/isem/workspace"
# =============================================================================
# RANGOS ASIGNADOS POR PROYECTO
# =============================================================================
# Cada proyecto tiene un bloque de puertos reservado
# Evita conflictos entre proyectos
ranges:
gamilit:
start: 3000
end: 3099
description: "Plataforma educativa gamificada"
erp-suite:
start: 3100
end: 3199
description: "Suite ERP con verticales"
sub_ranges:
erp-core:
start: 3100
end: 3119
construccion:
start: 3120
end: 3139
vidrio-templado:
start: 3140
end: 3159
mecanicas-diesel:
start: 3160
end: 3179
retail:
start: 3180
end: 3199
clinicas:
start: 3200
end: 3219 # Extiende el rango
trading-platform:
start: 3300
end: 3399
description: "Plataforma de trading IA"
extended_ranges:
backend: "4000-4099"
python_services: "5000-5099"
betting-analytics:
start: 3400
end: 3499
description: "Analytics de apuestas deportivas"
inmobiliaria-analytics:
start: 3500
end: 3599
description: "Analytics inmobiliario"
platform_marketing_content:
start: 3600
end: 3699
description: "Plataforma de marketing de contenidos"
# =============================================================================
# PROYECTOS - DETALLE DE PUERTOS ASIGNADOS
# =============================================================================
projects:
# ---------------------------------------------------------------------------
# GAMILIT - Plataforma Educativa Gamificada
# ---------------------------------------------------------------------------
gamilit:
status: "active"
base_path: "projects/gamilit"
range: "3000-3099"
services:
frontend:
port: 3005
protocol: "http"
framework: "React + Vite"
description: "Aplicacion web principal"
config_file: "apps/frontend/.env"
pm2_name: "gamilit-frontend"
backend:
port: 3006
protocol: "http"
framework: "NestJS"
description: "API principal"
config_file: "apps/backend/.env"
pm2_name: "gamilit-backend"
databases:
postgresql:
port: 5432
description: "Base de datos principal"
redis:
port: 6379
description: "Cache y sessions"
production:
server: "74.208.126.102"
pm2_config: "ecosystem.config.js"
# ---------------------------------------------------------------------------
# ERP-SUITE - Suite ERP Multi-Vertical
# ---------------------------------------------------------------------------
erp-suite:
status: "active"
base_path: "projects/erp-suite"
range: "3100-3219"
# ERP Core
erp-core:
services:
backend:
port: 3100
protocol: "http"
framework: "Express/NestJS"
description: "Core API compartido"
databases:
postgresql:
port: 5432
description: "BD compartida core"
# Verticales
verticales:
construccion:
services:
backend:
port: 3120
protocol: "http"
description: "API vertical construccion"
databases:
postgresql:
port: 5433
description: "BD construccion"
redis:
port: 6380
vidrio-templado:
services:
backend:
port: 3140
protocol: "http"
description: "API vertical vidrio templado"
frontend:
port: 5175
protocol: "http"
description: "UI vidrio templado"
databases:
postgresql:
port: 5434
description: "BD vidrio templado"
redis:
port: 6381
mecanicas-diesel:
services:
backend:
port: 3160
protocol: "http"
description: "API vertical mecanicas"
databases:
postgresql:
port: 5432
description: "BD mecanicas (compartida)"
redis:
port: 6379
retail:
services:
backend:
port: 3180
protocol: "http"
description: "API vertical retail"
frontend:
port: 5177
protocol: "http"
description: "UI retail"
databases:
postgresql:
port: 5436
description: "BD retail"
redis:
port: 6383
clinicas:
services:
backend:
port: 3200
protocol: "http"
description: "API vertical clinicas"
frontend:
port: 5178
protocol: "http"
description: "UI clinicas"
dicom_server:
port: 4242
protocol: "dicom"
description: "Servidor DICOM imagenologia"
databases:
postgresql:
port: 5437
description: "BD clinicas"
redis:
port: 6384
# Productos
products:
pos-micro:
services:
backend:
port: 3190
protocol: "http"
description: "API POS micro"
databases:
postgresql:
port: 5432
description: "BD POS (compartida)"
# ---------------------------------------------------------------------------
# TRADING-PLATFORM - Plataforma de Trading IA
# ---------------------------------------------------------------------------
trading-platform:
status: "active"
base_path: "projects/trading-platform"
range: "3300-3399, 4000-4099, 5000-5099"
env_ports_file: ".env.ports"
services:
# Frontend
frontend_web:
port: 3100
protocol: "http"
framework: "React + Vite"
description: "Aplicacion web principal"
frontend_admin:
port: 3101
protocol: "http"
description: "Panel de administracion"
frontend_preview:
port: 4173
protocol: "http"
description: "Vite preview/build"
# Backend Node.js
backend_api:
port: 4000
protocol: "http"
framework: "Express"
description: "API principal"
backend_ws:
port: 4001
protocol: "ws"
description: "WebSocket server real-time"
backend_webhooks:
port: 4002
protocol: "http"
description: "API webhooks"
# Python Services
ml_engine:
port: 5000
protocol: "http"
framework: "FastAPI"
description: "ML predicciones y senales"
data_service:
port: 5001
protocol: "http"
framework: "Python asyncio"
description: "Sincronizacion datos mercado"
llm_agent:
port: 5002
protocol: "http"
framework: "FastAPI"
description: "Asistente IA"
portfolio_manager:
port: 5003
protocol: "http"
framework: "FastAPI"
description: "Gestion de portafolios"
databases:
postgresql:
port: 5432
description: "BD principal"
postgresql_test:
port: 5433
description: "BD testing"
redis:
port: 6379
description: "Cache y queues"
mysql:
port: 3306
description: "Legacy migracion"
monitoring:
jenkins:
port: 8080
description: "CI/CD pipeline"
jenkins_agent:
port: 50000
description: "Jenkins agent"
prometheus:
port: 9090
description: "Metricas"
grafana:
port: 3200
description: "Dashboards"
development:
mailhog_smtp:
port: 1025
description: "Testing emails"
mailhog_web:
port: 8025
description: "Mailhog UI"
pgadmin:
port: 5050
description: "Admin PostgreSQL"
# ---------------------------------------------------------------------------
# BETTING-ANALYTICS
# ---------------------------------------------------------------------------
betting-analytics:
status: "planned"
base_path: "projects/betting-analytics"
range: "3400-3499"
services:
frontend:
port: 3405
protocol: "http"
description: "Dashboard analytics"
assigned: false
backend:
port: 3406
protocol: "http"
description: "API analytics"
assigned: false
databases:
postgresql:
port: 5438
description: "BD analytics"
# ---------------------------------------------------------------------------
# INMOBILIARIA-ANALYTICS
# ---------------------------------------------------------------------------
inmobiliaria-analytics:
status: "planned"
base_path: "projects/inmobiliaria-analytics"
range: "3500-3599"
services:
frontend:
port: 3505
protocol: "http"
description: "Dashboard inmobiliario"
assigned: false
backend:
port: 3506
protocol: "http"
description: "API inmobiliario"
assigned: false
databases:
postgresql:
port: 5439
description: "BD inmobiliario"
# ---------------------------------------------------------------------------
# PLATFORM MARKETING CONTENT
# ---------------------------------------------------------------------------
platform_marketing_content:
status: "active"
base_path: "projects/platform_marketing_content"
range: "3600-3699"
services:
frontend:
port: 3605
protocol: "http"
description: "Dashboard marketing"
assigned: true
backend:
port: 3606
protocol: "http"
description: "API marketing"
assigned: true
databases:
postgresql:
port: 5440
description: "BD marketing"
# =============================================================================
# SERVICIOS DE INFRAESTRUCTURA GLOBALES
# =============================================================================
infrastructure:
postgresql:
default_port: 5432
range: "5432-5449"
note: "Cada proyecto puede tener su BD en puerto unico"
redis:
default_port: 6379
range: "6379-6389"
note: "Cache distribuido, sessions, queues"
mysql:
default_port: 3306
note: "Solo para migraciones legacy"
mongodb:
default_port: 27017
note: "Reservado si se necesita"
# =============================================================================
# REGLAS DE ASIGNACION
# =============================================================================
rules:
offset_standard:
frontend_web: 5 # proyecto_base + 5 (ej: 3005, 3105, 3205)
frontend_admin: 7 # proyecto_base + 7
backend_api: 6 # proyecto_base + 6 (ej: 3006, 3106, 3206)
backend_ws: 8 # proyecto_base + 8
backend_workers: 9 # proyecto_base + 9
reserved_ports:
- 22 # SSH
- 80 # HTTP
- 443 # HTTPS
- 3000 # Comun desarrollo (evitar)
- 8080 # Comun desarrollo (evitar)
guidelines:
- "Siempre consultar este inventario antes de asignar"
- "Seguir patron: proyecto_base + offset_standard"
- "Documentar en este archivo cualquier nuevo puerto"
- "Verificar conflictos con: lsof -i :PUERTO"
# =============================================================================
# HISTORIAL DE CAMBIOS
# =============================================================================
changelog:
- date: "2025-12-08"
action: "Creacion inicial"
author: "DevEnv Agent"
details: "Inventario completo de todos los proyectos del workspace"

View File

@ -17,8 +17,9 @@
#
# ═══════════════════════════════════════════════════════════════════════════════
version: "2.2.0"
version: "2.2.1"
fecha_actualizacion: "2025-12-08"
changelog: "Agregados @PERFIL_TECH_LEADER, @PERFIL_DEVENV, @DEVENV_PORTS, @DEVENV_STANDARDS"
# ─────────────────────────────────────────────────────────────────────────────────
# ALIAS GLOBALES (rutas absolutas - aplican a todos los proyectos)
@ -99,6 +100,15 @@ global:
"@PERFIL_BUG_FIXER": "core/orchestration/agents/perfiles/PERFIL-BUG-FIXER.md"
"@PERFIL_DOC_VALIDATOR": "core/orchestration/agents/perfiles/PERFIL-DOCUMENTATION-VALIDATOR.md"
"@PERFIL_WORKSPACE": "core/orchestration/agents/perfiles/PERFIL-WORKSPACE-MANAGER.md"
# Nuevos perfiles v2.2.1
"@PERFIL_TECH_LEADER": "core/orchestration/agents/perfiles/PERFIL-TECH-LEADER.md"
"@PERFIL_DEVENV": "core/orchestration/agents/perfiles/PERFIL-DEVENV.md"
# ═══════════════════════════════════════════════════════════════════
# DEVENV - GESTIÓN DE PUERTOS Y ENTORNOS
# ═══════════════════════════════════════════════════════════════════
"@DEVENV_PORTS": "core/orchestration/inventarios/DEVENV-PORTS-INVENTORY.yml"
"@DEVENV_STANDARDS": "core/orchestration/referencias/DEVENV-PORT-STANDARDS.md"
# ═══════════════════════════════════════════════════════════════════
# PATRONES DE CÓDIGO (CONSULTAR ANTES DE IMPLEMENTAR)

View File

@ -0,0 +1,324 @@
# DEVENV-PORT-STANDARDS
**Version:** 1.0.0
**Fecha:** 2025-12-08
**Mantenedor:** DevEnv Agent
---
## DIRECTIVA OBLIGATORIA
> **TODOS los agentes DEBEN consultar al agente DevEnv antes de asignar puertos.**
>
> El inventario centralizado esta en: `@DEVENV_PORTS`
> (`core/orchestration/inventarios/DEVENV-PORTS-INVENTORY.yml`)
---
## ESTANDAR BASE
El proyecto **gamilit** define el estandar base de asignacion de puertos:
| Servicio | Puerto | Patron |
|----------|--------|--------|
| Frontend | 3005 | base + 5 |
| Backend | 3006 | base + 6 |
Este patron se replica en todos los proyectos del workspace.
---
## RANGOS POR PROYECTO
Cada proyecto tiene un bloque de 100 puertos reservado:
| Proyecto | Rango | Base | Frontend | Backend |
|----------|-------|------|----------|---------|
| gamilit | 3000-3099 | 3000 | 3005 | 3006 |
| erp-suite | 3100-3199 | 3100 | 3105 | 3106 |
| trading-platform | 3200-3299* | 3200 | 3100** | 4000** |
| betting-analytics | 3300-3399 | 3300 | 3305 | 3306 |
| inmobiliaria-analytics | 3400-3499 | 3400 | 3405 | 3406 |
| platform_marketing_content | 3500-3599 | 3500 | 3505 | 3506 |
*Trading-platform tiene rangos extendidos para servicios Python (5000-5099)
**Trading-platform ya tenia puertos asignados antes de este estandar
---
## OFFSETS ESTANDAR
Dentro de cada rango de proyecto, se aplican estos offsets:
```yaml
OFFSETS:
frontend_web: +5 # Aplicacion web principal
backend_api: +6 # API principal
frontend_admin: +7 # Panel de administracion
backend_ws: +8 # WebSocket server
backend_workers: +9 # Workers/Jobs
auxiliary: +10-19 # Servicios auxiliares
```
### Ejemplo para un nuevo proyecto "mi-proyecto" (base 3700):
```yaml
mi-proyecto:
frontend_web: 3705
backend_api: 3706
frontend_admin: 3707
backend_ws: 3708
backend_workers: 3709
```
---
## BASES DE DATOS
Los puertos de bases de datos se asignan secuencialmente:
| Servicio | Rango | Default |
|----------|-------|---------|
| PostgreSQL | 5432-5449 | 5432 |
| Redis | 6379-6389 | 6379 |
| MySQL | 3306 | 3306 (legacy) |
| MongoDB | 27017-27027 | 27017 |
### Asignacion actual de PostgreSQL:
| Puerto | Proyecto |
|--------|----------|
| 5432 | Default / gamilit / erp-core |
| 5433 | erp-suite/construccion / trading-platform test |
| 5434 | erp-suite/vidrio-templado |
| 5436 | erp-suite/retail |
| 5437 | erp-suite/clinicas |
| 5438 | betting-analytics (reservado) |
| 5439 | inmobiliaria-analytics (reservado) |
| 5440 | platform_marketing_content |
---
## PUERTOS RESERVADOS (NO USAR)
Estos puertos estan reservados y no deben usarse:
| Puerto | Razon |
|--------|-------|
| 22 | SSH |
| 80 | HTTP estandar |
| 443 | HTTPS estandar |
| 3000 | Muy comun en desarrollo, conflictos frecuentes |
| 8080 | Muy comun en desarrollo, conflictos frecuentes |
---
## PROCESO DE ASIGNACION
### 1. Nuevo Proyecto
```yaml
Cuando: Se crea un proyecto nuevo
Quien: Tech-Leader delega a DevEnv
Proceso:
1. Identificar siguiente rango disponible (bloques de 100)
2. Asignar puertos segun offsets estandar
3. Registrar en DEVENV-PORTS-INVENTORY.yml
4. Crear archivo .env.ports en el proyecto
5. Comunicar puertos asignados al Tech-Leader
```
### 2. Nuevo Servicio en Proyecto Existente
```yaml
Cuando: Se agrega servicio a proyecto existente
Quien: Agente de capa consulta a DevEnv
Proceso:
1. Verificar puertos disponibles en rango del proyecto
2. Asignar siguiente puerto segun tipo de servicio
3. Actualizar DEVENV-PORTS-INVENTORY.yml
4. Actualizar .env.ports del proyecto
5. Comunicar configuracion al agente solicitante
```
### 3. Verificacion de Conflictos
```bash
# Verificar puerto especifico
lsof -i :3005
# Verificar rango de puertos
for port in {3000..3100}; do
(echo >/dev/tcp/localhost/$port) 2>/dev/null && echo "Puerto $port en uso"
done
# Puertos en docker
docker ps --format "{{.Ports}}"
# Todos los puertos escuchando
netstat -tlnp | grep LISTEN
```
---
## TEMPLATE: .env.ports
Cada proyecto debe tener un archivo `.env.ports` en su raiz:
```bash
# =============================================================================
# {NOMBRE_PROYECTO} - PORT ASSIGNMENTS
# =============================================================================
# Archivo centralizado de asignacion de puertos
# Gestionado por: DevEnv Agent
# Fecha: {FECHA_CREACION}
# Rango asignado: {RANGO}
# =============================================================================
# FRONTEND
FRONTEND_PORT={BASE+5}
FRONTEND_ADMIN_PORT={BASE+7}
# BACKEND
BACKEND_API_PORT={BASE+6}
BACKEND_WS_PORT={BASE+8}
BACKEND_WORKERS_PORT={BASE+9}
# DATABASES (si son especificos del proyecto)
POSTGRES_PORT={ASIGNADO}
REDIS_PORT={ASIGNADO}
# =============================================================================
# NOTAS
# =============================================================================
# - Estos puertos estan registrados en @DEVENV_PORTS
# - Cualquier cambio debe ser coordinado con DevEnv Agent
# - No modificar sin actualizar el inventario central
# =============================================================================
```
---
## ERP-SUITE: Sub-Rangos para Verticales
El proyecto erp-suite tiene sub-rangos para cada vertical:
```yaml
erp-suite:
base: 3100
verticales:
erp-core:
range: "3100-3119"
backend: 3100
construccion:
range: "3120-3139"
backend: 3120
postgresql: 5433
vidrio-templado:
range: "3140-3159"
backend: 3140
frontend: 5175
postgresql: 5434
mecanicas-diesel:
range: "3160-3179"
backend: 3160
retail:
range: "3180-3199"
backend: 3180
frontend: 5177
postgresql: 5436
clinicas:
range: "3200-3219" # Extension del rango
backend: 3200
frontend: 5178
dicom: 4242
postgresql: 5437
```
---
## TRADING-PLATFORM: Rangos Extendidos
Trading-platform tiene una estructura especial con servicios Python:
```yaml
trading-platform:
frontend_services: "3100-3199"
frontend_web: 3100
frontend_admin: 3101
frontend_preview: 4173
backend_node: "4000-4099"
backend_api: 4000
backend_ws: 4001
backend_webhooks: 4002
python_services: "5000-5099"
ml_engine: 5000
data_service: 5001
llm_agent: 5002
portfolio_manager: 5003
```
---
## ALIAS RELEVANTES
```yaml
@DEVENV_PORTS: "core/orchestration/inventarios/DEVENV-PORTS-INVENTORY.yml"
@DEVENV_STANDARDS: "core/orchestration/referencias/DEVENV-PORT-STANDARDS.md"
@DEVENV_PROFILE: "core/orchestration/agents/perfiles/PERFIL-DEVENV.md"
```
---
## RESUMEN VISUAL
```
PUERTOS ASIGNADOS POR PROYECTO
==============================
3000 ----[GAMILIT]---- 3099
|-- FE: 3005
|-- BE: 3006
3100 ----[ERP-SUITE]---- 3219
|-- core: 3100-3119
|-- construccion: 3120-3139
|-- vidrio-templado: 3140-3159
|-- mecanicas: 3160-3179
|-- retail: 3180-3199
|-- clinicas: 3200-3219
3200 ----[TRADING-PLATFORM]---- (extendido)
|-- FE: 3100-3199
|-- BE Node: 4000-4099
|-- Python: 5000-5099
3300 ----[BETTING-ANALYTICS]---- 3399
|-- FE: 3305 (reservado)
|-- BE: 3306 (reservado)
3400 ----[INMOBILIARIA-ANALYTICS]---- 3499
|-- FE: 3405 (reservado)
|-- BE: 3406 (reservado)
3500 ----[PLATFORM-MARKETING]---- 3599
|-- FE: 3505
|-- BE: 3506
BASES DE DATOS
==============
5432-5449: PostgreSQL (por proyecto)
6379-6389: Redis (por proyecto)
```
---
**Version:** 1.0.0 | **Sistema:** SIMCO + DevEnv | **Tipo:** Referencia

View File

@ -19,11 +19,12 @@ metadata:
resumen:
modulos_total: 10
modulos_documentados: 10
story_points_total: 322
epicas_completas: 10
story_points_total: 353
specs_core_aplicables: 26
specs_implementadas: 0
cobertura_specs: 0%
estado: PLANIFICACION_COMPLETA
estado: EPICAS_COMPLETAS
# =============================================================================
# TRAZABILIDAD POR MÓDULO
@ -63,6 +64,7 @@ trazabilidad:
herencia: 0%
prioridad: P0
sp: 55
epica: docs/08-epicas/EPIC-RT-002-pos.md
critico: true
database:
tablas:
@ -98,7 +100,8 @@ trazabilidad:
nombre: Inventario
herencia: 70%
prioridad: P0
sp: 34
sp: 42
epica: docs/08-epicas/EPIC-RT-003-inventario.md
database:
tablas:
- inventory.branches

View File

@ -19,11 +19,12 @@ metadata:
resumen:
modulos_total: 8
modulos_documentados: 8
story_points_total: 212
epicas_completas: 8
story_points_total: 259
specs_core_aplicables: 25
specs_implementadas: 0
cobertura_specs: 0%
estado: PLANIFICACION_COMPLETA
estado: EPICAS_COMPLETAS
# =============================================================================
# TRAZABILIDAD POR MÓDULO
@ -63,6 +64,7 @@ trazabilidad:
herencia: 30%
prioridad: P0
sp: 34
epica: docs/08-epicas/EPIC-VT-002-cotizaciones.md
database:
tablas:
- glass.quotations
@ -93,7 +95,8 @@ trazabilidad:
nombre: Produccion
herencia: 20%
prioridad: P0
sp: 34
sp: 42
epica: docs/08-epicas/EPIC-VT-003-produccion.md
database:
tablas:
- production.production_orders
@ -122,7 +125,8 @@ trazabilidad:
nombre: Inventario
herencia: 70%
prioridad: P0
sp: 21
sp: 38
epica: docs/08-epicas/EPIC-VT-004-inventario.md
database:
tablas:
- glass.raw_materials
@ -149,7 +153,8 @@ trazabilidad:
nombre: Corte
herencia: 0%
prioridad: P1
sp: 47
sp: 45
epica: docs/08-epicas/EPIC-VT-005-corte.md
database:
tablas:
- production.cutting_plans
@ -178,7 +183,8 @@ trazabilidad:
nombre: Templado
herencia: 0%
prioridad: P1
sp: 34
sp: 40
epica: docs/08-epicas/EPIC-VT-006-templado.md
database:
tablas:
- production.furnaces
@ -207,7 +213,8 @@ trazabilidad:
nombre: Calidad
herencia: 40%
prioridad: P0
sp: 21
sp: 32
epica: docs/08-epicas/EPIC-VT-007-calidad.md
database:
tablas:
- quality.quality_tests
@ -235,7 +242,8 @@ trazabilidad:
nombre: Despacho
herencia: 50%
prioridad: P1
sp: 21
sp: 28
epica: docs/08-epicas/EPIC-VT-008-despacho.md
database:
tablas:
- logistics.shipments

View File

@ -52,7 +52,7 @@
"rxjs": "^7.8.1",
"sanitize-html": "^2.11.0",
"socket.io": "^4.8.1",
"typeorm": "^0.3.17",
"typeorm": "^0.3.22",
"web-push": "^3.6.7",
"winston": "^3.18.3"
},

View File

@ -65,13 +65,13 @@
"@axe-core/react": "^4.8.4",
"@chromatic-com/storybook": "^4.1.2",
"@playwright/test": "^1.56.1",
"@storybook/addon-docs": "^10.0.6",
"@storybook/addon-essentials": "^7.6.20",
"@storybook/addon-interactions": "^7.6.20",
"@storybook/addon-links": "^7.6.20",
"@storybook/addon-onboarding": "^10.0.6",
"@storybook/react": "^7.6.5",
"@storybook/react-vite": "^7.6.5",
"@storybook/addon-docs": "^8.6.0",
"@storybook/addon-essentials": "^8.6.0",
"@storybook/addon-interactions": "^8.6.0",
"@storybook/addon-links": "^8.6.0",
"@storybook/addon-onboarding": "^8.6.0",
"@storybook/react": "^8.6.0",
"@storybook/react-vite": "^8.6.0",
"@tailwindcss/postcss": "^4.1.14",
"@testing-library/dom": "^10.4.1",
"@testing-library/jest-dom": "^6.9.1",
@ -99,7 +99,7 @@
"prettier": "^3.2.4",
"prettier-plugin-tailwindcss": "^0.5.9",
"rollup-plugin-visualizer": "^6.0.5",
"storybook": "^7.6.20",
"storybook": "^8.6.0",
"tailwindcss": "^4.1.14",
"typescript": "^5.9.3",
"vite": "^7.1.10",

View File

@ -25,7 +25,7 @@
"backend:format": "cd apps/backend && npm run format",
"frontend:lint": "cd apps/frontend && npm run lint",
"frontend:format": "cd apps/frontend && npm run format",
"prepare": "husky install"
"prepare": "cd ../.. && husky projects/gamilit/.husky install || true"
},
"devDependencies": {
"@types/node": "^20.10.0",
@ -49,5 +49,11 @@
"exceljs": "^4.4.0",
"pg": "^8.16.3",
"uuid": "^13.0.0"
},
"overrides": {
"jws": "^4.0.1",
"js-yaml": "^4.1.1",
"glob": "^11.0.0",
"validator": "^13.15.22"
}
}

View File

@ -22,7 +22,7 @@
"helmet": "^7.1.0",
"jsonwebtoken": "^9.0.2",
"morgan": "^1.10.0",
"nodemailer": "^6.9.7",
"nodemailer": "^7.0.11",
"openai": "^4.73.0",
"passport": "^0.7.0",
"passport-apple": "^2.0.2",
@ -30,7 +30,6 @@
"passport-github2": "^0.1.12",
"passport-google-oauth20": "^2.0.0",
"passport-local": "^1.0.0",
"passport-twitter": "^1.0.4",
"pg": "^8.11.3",
"qrcode": "^1.5.3",
"redis": "^4.6.10",
@ -57,7 +56,6 @@
"@types/passport-github2": "^1.2.9",
"@types/passport-google-oauth20": "^2.0.14",
"@types/passport-local": "^1.0.38",
"@types/passport-twitter": "^1.0.40",
"@types/pg": "^8.10.9",
"@types/qrcode": "^1.5.5",
"@types/speakeasy": "^2.0.10",
@ -244,25 +242,25 @@
}
},
"node_modules/@aws-sdk/client-ses": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.946.0.tgz",
"integrity": "sha512-8haC9kzCVjrsgYFLHbvZw0+GF3f9ezkgkUCsGQEGqerBjHSHkm4YB0+Nje1RGrM8PcPVFMnvCXxc+98eGPcvQw==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.947.0.tgz",
"integrity": "sha512-Y9xaLPvQE7CW/8liyHdLOs6gxLHciBZhvuuZ/mDZLHtBmMSYm7wb/ikEfX7yid6nBITM/eAFURImRSKlQbnzlg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
"@aws-sdk/core": "3.946.0",
"@aws-sdk/credential-provider-node": "3.946.0",
"@aws-sdk/core": "3.947.0",
"@aws-sdk/credential-provider-node": "3.947.0",
"@aws-sdk/middleware-host-header": "3.936.0",
"@aws-sdk/middleware-logger": "3.936.0",
"@aws-sdk/middleware-recursion-detection": "3.936.0",
"@aws-sdk/middleware-user-agent": "3.946.0",
"@aws-sdk/middleware-user-agent": "3.947.0",
"@aws-sdk/region-config-resolver": "3.936.0",
"@aws-sdk/types": "3.936.0",
"@aws-sdk/util-endpoints": "3.936.0",
"@aws-sdk/util-user-agent-browser": "3.936.0",
"@aws-sdk/util-user-agent-node": "3.946.0",
"@aws-sdk/util-user-agent-node": "3.947.0",
"@smithy/config-resolver": "^4.4.3",
"@smithy/core": "^3.18.7",
"@smithy/fetch-http-handler": "^5.3.6",
@ -296,24 +294,24 @@
}
},
"node_modules/@aws-sdk/client-sso": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.946.0.tgz",
"integrity": "sha512-kGAs5iIVyUz4p6TX3pzG5q3cNxXnVpC4pwRC6DCSaSv9ozyPjc2d74FsK4fZ+J+ejtvCdJk72uiuQtWJc86Wuw==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.947.0.tgz",
"integrity": "sha512-sDwcO8SP290WSErY1S8pz8hTafeghKmmWjNVks86jDK30wx62CfazOTeU70IpWgrUBEygyXk/zPogHsUMbW2Rg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
"@aws-sdk/core": "3.946.0",
"@aws-sdk/core": "3.947.0",
"@aws-sdk/middleware-host-header": "3.936.0",
"@aws-sdk/middleware-logger": "3.936.0",
"@aws-sdk/middleware-recursion-detection": "3.936.0",
"@aws-sdk/middleware-user-agent": "3.946.0",
"@aws-sdk/middleware-user-agent": "3.947.0",
"@aws-sdk/region-config-resolver": "3.936.0",
"@aws-sdk/types": "3.936.0",
"@aws-sdk/util-endpoints": "3.936.0",
"@aws-sdk/util-user-agent-browser": "3.936.0",
"@aws-sdk/util-user-agent-node": "3.946.0",
"@aws-sdk/util-user-agent-node": "3.947.0",
"@smithy/config-resolver": "^4.4.3",
"@smithy/core": "^3.18.7",
"@smithy/fetch-http-handler": "^5.3.6",
@ -346,9 +344,9 @@
}
},
"node_modules/@aws-sdk/core": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.946.0.tgz",
"integrity": "sha512-u2BkbLLVbMFrEiXrko2+S6ih5sUZPlbVyRPtXOqMHlCyzr70sE8kIiD6ba223rQeIFPcYfW/wHc6k4ihW2xxVg==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.947.0.tgz",
"integrity": "sha512-Khq4zHhuAkvCFuFbgcy3GrZTzfSX7ZIjIcW1zRDxXRLZKRtuhnZdonqTUfaWi5K42/4OmxkYNpsO7X7trQOeHw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
@ -371,13 +369,13 @@
}
},
"node_modules/@aws-sdk/credential-provider-env": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.946.0.tgz",
"integrity": "sha512-P4l+K6wX1tf8LmWUvZofdQ+BgCNyk6Tb9u1H10npvqpuCD+dCM4pXIBq3PQcv/juUBOvLGGREo+Govuh3lfD0Q==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.947.0.tgz",
"integrity": "sha512-VR2V6dRELmzwAsCpK4GqxUi6UW5WNhAXS9F9AzWi5jvijwJo3nH92YNJUP4quMpgFZxJHEWyXLWgPjh9u0zYOA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.946.0",
"@aws-sdk/core": "3.947.0",
"@aws-sdk/types": "3.936.0",
"@smithy/property-provider": "^4.2.5",
"@smithy/types": "^4.9.0",
@ -388,13 +386,13 @@
}
},
"node_modules/@aws-sdk/credential-provider-http": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.946.0.tgz",
"integrity": "sha512-/zeOJ6E7dGZQ/l2k7KytEoPJX0APIhwt0A79hPf/bUpMF4dDs2P6JmchDrotk0a0Y/MIdNF8sBQ/MEOPnBiYoQ==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.947.0.tgz",
"integrity": "sha512-inF09lh9SlHj63Vmr5d+LmwPXZc2IbK8lAruhOr3KLsZAIHEgHgGPXWDC2ukTEMzg0pkexQ6FOhXXad6klK4RA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.946.0",
"@aws-sdk/core": "3.947.0",
"@aws-sdk/types": "3.936.0",
"@smithy/fetch-http-handler": "^5.3.6",
"@smithy/node-http-handler": "^4.4.5",
@ -410,20 +408,20 @@
}
},
"node_modules/@aws-sdk/credential-provider-ini": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.946.0.tgz",
"integrity": "sha512-Pdgcra3RivWj/TuZmfFaHbqsvvgnSKO0CxlRUMMr0PgBiCnUhyl+zBktdNOeGsOPH2fUzQpYhcUjYUgVSdcSDQ==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.947.0.tgz",
"integrity": "sha512-A2ZUgJUJZERjSzvCi2NR/hBVbVkTXPD0SdKcR/aITb30XwF+n3T963b+pJl90qhOspoy7h0IVYNR7u5Nr9tJdQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.946.0",
"@aws-sdk/credential-provider-env": "3.946.0",
"@aws-sdk/credential-provider-http": "3.946.0",
"@aws-sdk/credential-provider-login": "3.946.0",
"@aws-sdk/credential-provider-process": "3.946.0",
"@aws-sdk/credential-provider-sso": "3.946.0",
"@aws-sdk/credential-provider-web-identity": "3.946.0",
"@aws-sdk/nested-clients": "3.946.0",
"@aws-sdk/core": "3.947.0",
"@aws-sdk/credential-provider-env": "3.947.0",
"@aws-sdk/credential-provider-http": "3.947.0",
"@aws-sdk/credential-provider-login": "3.947.0",
"@aws-sdk/credential-provider-process": "3.947.0",
"@aws-sdk/credential-provider-sso": "3.947.0",
"@aws-sdk/credential-provider-web-identity": "3.947.0",
"@aws-sdk/nested-clients": "3.947.0",
"@aws-sdk/types": "3.936.0",
"@smithy/credential-provider-imds": "^4.2.5",
"@smithy/property-provider": "^4.2.5",
@ -436,14 +434,14 @@
}
},
"node_modules/@aws-sdk/credential-provider-login": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.946.0.tgz",
"integrity": "sha512-5iqLNc15u2Zx+7jOdQkIbP62N7n2031tw5hkmIG0DLnozhnk64osOh2CliiOE9x3c4P9Pf4frAwgyy9GzNTk2g==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.947.0.tgz",
"integrity": "sha512-u7M3hazcB7aJiVwosNdJRbIJDzbwQ861NTtl6S0HmvWpixaVb7iyhJZWg8/plyUznboZGBm7JVEdxtxv3u0bTA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.946.0",
"@aws-sdk/nested-clients": "3.946.0",
"@aws-sdk/core": "3.947.0",
"@aws-sdk/nested-clients": "3.947.0",
"@aws-sdk/types": "3.936.0",
"@smithy/property-provider": "^4.2.5",
"@smithy/protocol-http": "^5.3.5",
@ -456,18 +454,18 @@
}
},
"node_modules/@aws-sdk/credential-provider-node": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.946.0.tgz",
"integrity": "sha512-I7URUqnBPng1a5y81OImxrwERysZqMBREG6svhhGeZgxmqcpAZ8z5ywILeQXdEOCuuES8phUp/ojzxFjPXp/eA==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.947.0.tgz",
"integrity": "sha512-S0Zqebr71KyrT6J4uYPhwV65g4V5uDPHnd7dt2W34FcyPu+hVC7Hx4MFmsPyVLeT5cMCkkZvmY3kAoEzgUPJJg==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/credential-provider-env": "3.946.0",
"@aws-sdk/credential-provider-http": "3.946.0",
"@aws-sdk/credential-provider-ini": "3.946.0",
"@aws-sdk/credential-provider-process": "3.946.0",
"@aws-sdk/credential-provider-sso": "3.946.0",
"@aws-sdk/credential-provider-web-identity": "3.946.0",
"@aws-sdk/credential-provider-env": "3.947.0",
"@aws-sdk/credential-provider-http": "3.947.0",
"@aws-sdk/credential-provider-ini": "3.947.0",
"@aws-sdk/credential-provider-process": "3.947.0",
"@aws-sdk/credential-provider-sso": "3.947.0",
"@aws-sdk/credential-provider-web-identity": "3.947.0",
"@aws-sdk/types": "3.936.0",
"@smithy/credential-provider-imds": "^4.2.5",
"@smithy/property-provider": "^4.2.5",
@ -480,13 +478,13 @@
}
},
"node_modules/@aws-sdk/credential-provider-process": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.946.0.tgz",
"integrity": "sha512-GtGHX7OGqIeVQ3DlVm5RRF43Qmf3S1+PLJv9svrdvAhAdy2bUb044FdXXqrtSsIfpzTKlHgQUiRo5MWLd35Ntw==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.947.0.tgz",
"integrity": "sha512-WpanFbHe08SP1hAJNeDdBDVz9SGgMu/gc0XJ9u3uNpW99nKZjDpvPRAdW7WLA4K6essMjxWkguIGNOpij6Do2Q==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.946.0",
"@aws-sdk/core": "3.947.0",
"@aws-sdk/types": "3.936.0",
"@smithy/property-provider": "^4.2.5",
"@smithy/shared-ini-file-loader": "^4.4.0",
@ -498,15 +496,15 @@
}
},
"node_modules/@aws-sdk/credential-provider-sso": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.946.0.tgz",
"integrity": "sha512-LeGSSt2V5iwYey1ENGY75RmoDP3bA2iE/py8QBKW8EDA8hn74XBLkprhrK5iccOvU3UGWY8WrEKFAFGNjJOL9g==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.947.0.tgz",
"integrity": "sha512-NktnVHTGaUMaozxycYrepvb3yfFquHTQ53lt6hBEVjYBzK3C4tVz0siUpr+5RMGLSiZ5bLBp2UjJPgwx4i4waQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/client-sso": "3.946.0",
"@aws-sdk/core": "3.946.0",
"@aws-sdk/token-providers": "3.946.0",
"@aws-sdk/client-sso": "3.947.0",
"@aws-sdk/core": "3.947.0",
"@aws-sdk/token-providers": "3.947.0",
"@aws-sdk/types": "3.936.0",
"@smithy/property-provider": "^4.2.5",
"@smithy/shared-ini-file-loader": "^4.4.0",
@ -518,14 +516,14 @@
}
},
"node_modules/@aws-sdk/credential-provider-web-identity": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.946.0.tgz",
"integrity": "sha512-ocBCvjWfkbjxElBI1QUxOnHldsNhoU0uOICFvuRDAZAoxvypJHN3m5BJkqb7gqorBbcv3LRgmBdEnWXOAvq+7Q==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.947.0.tgz",
"integrity": "sha512-gokm/e/YHiHLrZgLq4j8tNAn8RJDPbIcglFRKgy08q8DmAqHQ8MXAKW3eS0QjAuRXU9mcMmUo1NrX6FRNBCCPw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.946.0",
"@aws-sdk/nested-clients": "3.946.0",
"@aws-sdk/core": "3.947.0",
"@aws-sdk/nested-clients": "3.947.0",
"@aws-sdk/types": "3.936.0",
"@smithy/property-provider": "^4.2.5",
"@smithy/shared-ini-file-loader": "^4.4.0",
@ -585,13 +583,13 @@
}
},
"node_modules/@aws-sdk/middleware-user-agent": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.946.0.tgz",
"integrity": "sha512-7QcljCraeaWQNuqmOoAyZs8KpZcuhPiqdeeKoRd397jVGNRehLFsZbIMOvwaluUDFY11oMyXOkQEERe1Zo2fCw==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.947.0.tgz",
"integrity": "sha512-7rpKV8YNgCP2R4F9RjWZFcD2R+SO/0R4VHIbY9iZJdH2MzzJ8ZG7h8dZ2m8QkQd1fjx4wrFJGGPJUTYXPV3baA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.946.0",
"@aws-sdk/core": "3.947.0",
"@aws-sdk/types": "3.936.0",
"@aws-sdk/util-endpoints": "3.936.0",
"@smithy/core": "^3.18.7",
@ -604,24 +602,24 @@
}
},
"node_modules/@aws-sdk/nested-clients": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.946.0.tgz",
"integrity": "sha512-rjAtEguukeW8mlyEQMQI56vxFoyWlaNwowmz1p1rav948SUjtrzjHAp4TOQWhibb7AR7BUTHBCgIcyCRjBEf4g==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.947.0.tgz",
"integrity": "sha512-DjRJEYNnHUTu9kGPPQDTSXquwSEd6myKR4ssI4FaYLFhdT3ldWpj73yYt807H3tdmhS7vPmdVqchSJnjurUQAw==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-crypto/sha256-browser": "5.2.0",
"@aws-crypto/sha256-js": "5.2.0",
"@aws-sdk/core": "3.946.0",
"@aws-sdk/core": "3.947.0",
"@aws-sdk/middleware-host-header": "3.936.0",
"@aws-sdk/middleware-logger": "3.936.0",
"@aws-sdk/middleware-recursion-detection": "3.936.0",
"@aws-sdk/middleware-user-agent": "3.946.0",
"@aws-sdk/middleware-user-agent": "3.947.0",
"@aws-sdk/region-config-resolver": "3.936.0",
"@aws-sdk/types": "3.936.0",
"@aws-sdk/util-endpoints": "3.936.0",
"@aws-sdk/util-user-agent-browser": "3.936.0",
"@aws-sdk/util-user-agent-node": "3.946.0",
"@aws-sdk/util-user-agent-node": "3.947.0",
"@smithy/config-resolver": "^4.4.3",
"@smithy/core": "^3.18.7",
"@smithy/fetch-http-handler": "^5.3.6",
@ -671,14 +669,14 @@
}
},
"node_modules/@aws-sdk/token-providers": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.946.0.tgz",
"integrity": "sha512-a5c+rM6CUPX2ExmUZ3DlbLlS5rQr4tbdoGcgBsjnAHiYx8MuMNAI+8M7wfjF13i2yvUQj5WEIddvLpayfEZj9g==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.947.0.tgz",
"integrity": "sha512-X/DyB8GuK44rsE89Tn5+s542B3PhGbXQSgV8lvqHDzvicwCt0tWny6790st6CPETrVVV2K3oJMfG5U3/jAmaZA==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/core": "3.946.0",
"@aws-sdk/nested-clients": "3.946.0",
"@aws-sdk/core": "3.947.0",
"@aws-sdk/nested-clients": "3.947.0",
"@aws-sdk/types": "3.936.0",
"@smithy/property-provider": "^4.2.5",
"@smithy/shared-ini-file-loader": "^4.4.0",
@ -747,13 +745,13 @@
}
},
"node_modules/@aws-sdk/util-user-agent-node": {
"version": "3.946.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.946.0.tgz",
"integrity": "sha512-a2UwwvzbK5AxHKUBupfg4s7VnkqRAHjYsuezHnKCniczmT4HZfP1NnfwwvLKEH8qaTrwenxjKSfq4UWmWkvG+Q==",
"version": "3.947.0",
"resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.947.0.tgz",
"integrity": "sha512-+vhHoDrdbb+zerV4noQk1DHaUMNzWFWPpPYjVTwW2186k5BEJIecAMChYkghRrBVJ3KPWP1+JnZwOd72F3d4rQ==",
"dev": true,
"license": "Apache-2.0",
"dependencies": {
"@aws-sdk/middleware-user-agent": "3.946.0",
"@aws-sdk/middleware-user-agent": "3.947.0",
"@aws-sdk/types": "3.936.0",
"@smithy/node-config-provider": "^4.3.5",
"@smithy/types": "^4.9.0",
@ -3422,9 +3420,9 @@
"license": "MIT"
},
"node_modules/@types/node": {
"version": "20.19.25",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.25.tgz",
"integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==",
"version": "20.19.26",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.26.tgz",
"integrity": "sha512-0l6cjgF0XnihUpndDhk+nyD3exio3iKaYROSgvh/qSevPXax3L8p5DBRFjbvalnwatGgHEQn2R88y2fA3g4irg==",
"license": "MIT",
"dependencies": {
"undici-types": "~6.21.0"
@ -3542,17 +3540,6 @@
"@types/passport": "*"
}
},
"node_modules/@types/passport-twitter": {
"version": "1.0.40",
"resolved": "https://registry.npmjs.org/@types/passport-twitter/-/passport-twitter-1.0.40.tgz",
"integrity": "sha512-5Yxm+P/x6XEYvANANmjkVnRpMlRpORODZYYplBKH+BFTHQ8kGt3FgMm6eMgIzrGA4WvZo6TKH4IvYug+31mX4w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/express": "*",
"@types/passport": "*"
}
},
"node_modules/@types/pg": {
"version": "8.15.6",
"resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.15.6.tgz",
@ -4300,9 +4287,9 @@
}
},
"node_modules/baseline-browser-mapping": {
"version": "2.9.3",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.3.tgz",
"integrity": "sha512-8QdH6czo+G7uBsNo0GiUfouPN1lRzKdJTGnKXwe12gkFbnnOUaUKGN55dMkfy+mnxmvjwl9zcI4VncczcVXDhA==",
"version": "2.9.5",
"resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.5.tgz",
"integrity": "sha512-D5vIoztZOq1XM54LUdttJVc96ggEsIfju2JBvht06pSzpckp3C7HReun67Bghzrtdsq9XdMGbSSB3v3GhMNmAA==",
"dev": true,
"license": "Apache-2.0",
"bin": {
@ -5112,9 +5099,9 @@
"license": "MIT"
},
"node_modules/electron-to-chromium": {
"version": "1.5.266",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.266.tgz",
"integrity": "sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg==",
"version": "1.5.267",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz",
"integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==",
"dev": true,
"license": "ISC"
},
@ -7837,9 +7824,9 @@
"license": "MIT"
},
"node_modules/nodemailer": {
"version": "6.10.1",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.10.1.tgz",
"integrity": "sha512-Z+iLaBGVaSjbIzQ4pX6XV41HrooLsQ10ZWPUehGmuantvzWoDVBnmsdUcOIDM1t+yPor5pDhVlDESgOMEGxhHA==",
"version": "7.0.11",
"resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-7.0.11.tgz",
"integrity": "sha512-gnXhNRE0FNhD7wPSCGhdNh46Hs6nm+uTyg+Kq0cZukNQiYdnCsoQjodNP9BQVG9XrcK/v6/MgpAPBUFyzh9pvw==",
"license": "MIT-0",
"engines": {
"node": ">=6.0.0"
@ -8170,30 +8157,6 @@
"node": ">= 0.4.0"
}
},
"node_modules/passport-oauth1": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/passport-oauth1/-/passport-oauth1-1.3.0.tgz",
"integrity": "sha512-8T/nX4gwKTw0PjxP1xfD0QhrydQNakzeOpZ6M5Uqdgz9/a/Ag62RmJxnZQ4LkbdXGrRehQHIAHNAu11rCP46Sw==",
"license": "MIT",
"dependencies": {
"oauth": "0.9.x",
"passport-strategy": "1.x.x",
"utils-merge": "1.x.x"
},
"engines": {
"node": ">= 0.4.0"
},
"funding": {
"type": "github",
"url": "https://github.com/sponsors/jaredhanson"
}
},
"node_modules/passport-oauth1/node_modules/oauth": {
"version": "0.9.15",
"resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz",
"integrity": "sha512-a5ERWK1kh38ExDEfoO6qUHJb32rd7aYmPHuyCu3Fta/cnICvYmgd2uhuKXvPD+PXB+gCEYYEaQdIRAjCOwAKNA==",
"license": "MIT"
},
"node_modules/passport-oauth2": {
"version": "1.8.0",
"resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.8.0.tgz",
@ -8222,19 +8185,6 @@
"node": ">= 0.4.0"
}
},
"node_modules/passport-twitter": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/passport-twitter/-/passport-twitter-1.0.4.tgz",
"integrity": "sha512-qvdauqCqCJJci82mJ9hZZQ6nAv7aSHV31svL8+9H7mRlDdXCdfU6AARQrmmJu3DRmv9fvIebM7zzxR7mVufN3A==",
"license": "MIT",
"dependencies": {
"passport-oauth1": "1.x.x",
"xtraverse": "0.1.x"
},
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
@ -10155,9 +10105,9 @@
"license": "ISC"
},
"node_modules/winston": {
"version": "3.18.3",
"resolved": "https://registry.npmjs.org/winston/-/winston-3.18.3.tgz",
"integrity": "sha512-NoBZauFNNWENgsnC9YpgyYwOVrl2m58PpQ8lNHjV3kosGs7KJ7Npk9pCUE+WJlawVSe8mykWDKWFSVfs3QO9ww==",
"version": "3.19.0",
"resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz",
"integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==",
"license": "MIT",
"dependencies": {
"@colors/colors": "^1.6.0",
@ -10277,16 +10227,6 @@
"node": ">=6.0"
}
},
"node_modules/xmldom": {
"version": "0.1.31",
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.31.tgz",
"integrity": "sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ==",
"deprecated": "Deprecated due to CVE-2021-21366 resolved in 0.5.0",
"license": "(LGPL-2.0 or MIT)",
"engines": {
"node": ">=0.1"
}
},
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
@ -10296,17 +10236,6 @@
"node": ">=0.4"
}
},
"node_modules/xtraverse": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/xtraverse/-/xtraverse-0.1.0.tgz",
"integrity": "sha512-MANQdlG2hl1nQobxz1Rv8hsS1RuBS0C1N6qTOupv+9vmfrReePdxhmB2ecYjvsp4stJ80HD7erjkoF1Hd/FK9A==",
"dependencies": {
"xmldom": "0.1.x"
},
"engines": {
"node": ">= 0.4.0"
}
},
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",

View File

@ -37,14 +37,13 @@
"passport": "^0.7.0",
"passport-google-oauth20": "^2.0.0",
"passport-facebook": "^3.0.0",
"passport-twitter": "^1.0.4",
"passport-apple": "^2.0.2",
"passport-github2": "^0.1.12",
"passport-local": "^1.0.0",
"speakeasy": "^2.0.0",
"qrcode": "^1.5.3",
"twilio": "^4.19.3",
"nodemailer": "^6.9.7",
"nodemailer": "^7.0.11",
"google-auth-library": "^9.4.1",
"@anthropic-ai/sdk": "^0.32.1",
"openai": "^4.73.0",
@ -64,7 +63,6 @@
"@types/passport": "^1.0.16",
"@types/passport-google-oauth20": "^2.0.14",
"@types/passport-facebook": "^3.0.3",
"@types/passport-twitter": "^1.0.40",
"@types/passport-github2": "^1.2.9",
"@types/passport-local": "^1.0.38",
"@types/speakeasy": "^2.0.10",

File diff suppressed because it is too large Load Diff

View File

@ -42,7 +42,7 @@
"@typescript-eslint/eslint-plugin": "^6.14.0",
"@typescript-eslint/parser": "^6.14.0",
"@vitejs/plugin-react": "^4.2.1",
"@vitest/ui": "^1.1.0",
"@vitest/ui": "^3.0.0",
"autoprefixer": "^10.4.16",
"eslint": "^8.55.0",
"eslint-plugin-react": "^7.33.2",
@ -52,7 +52,7 @@
"prettier": "^3.1.1",
"tailwindcss": "^3.4.0",
"typescript": "^5.3.3",
"vite": "^5.0.10",
"vitest": "^1.1.0"
"vite": "^6.2.0",
"vitest": "^3.0.0"
}
}