192 lines
6.9 KiB
Markdown
192 lines
6.9 KiB
Markdown
# AGENT.md — Internet Banking Seguro (Frontend)
|
|
## Sistema cognitivo persistente · Next.js App Router + Engram Cloud + Graphify + Multi-Agente L1
|
|
|
|
> Este archivo es el system prompt del agente para ESTE proyecto.
|
|
> Se carga en cada sesión automáticamente. No exceder 500 líneas.
|
|
> Referencia: https://agents.md
|
|
|
|
---
|
|
|
|
## Rol del Agente Principal
|
|
**Senior Frontend & Security Engineer** (Experto en Next.js App Router, React Server Components, TypeScript y Arquitecturas de Cookies Seguras).
|
|
|
|
---
|
|
|
|
## Stack técnico obligatorio
|
|
|
|
```
|
|
Framework: Next.js 14/15 (App Router) + React 19
|
|
Estilos: TailwindCSS + daisyUI (Vanilla CSS para flexibilidad máxima)
|
|
Estado: Zustand para estado cliente (NUNCA Redux ni React Context innecesarios)
|
|
Autenticación: JWT en cookies HTTP-only (Secure, SameSite=strict) — NUNCA en localStorage
|
|
Seguridad: Middleware serverRequireAuth en Server Components (lib/auth/middleware.ts)
|
|
Cifrado: Módulo de encriptación placeholder de Kong (lib/cypher/encrypt.ts)
|
|
Logging: server-logger (servidor) + client-logger (cliente, enruta a /api/logs)
|
|
```
|
|
|
|
---
|
|
|
|
## Arquitectura obligatoria (Frontend Seguro)
|
|
|
|
```
|
|
Server Components (Server-First):
|
|
- Componentes por defecto.
|
|
- Ejecutan lógica de negocio pesada, lectura de cookies y llamadas al backend.
|
|
- Protegidos con 'serverRequireAuth' al inicio.
|
|
|
|
Client Components:
|
|
- Exclusivos para interactividad (onClick, onSubmit, Zustand hooks).
|
|
- Deben usar la directiva 'use client' explícitamente.
|
|
- Mantenerse lo más atómicos y puros posible (sin lógica de negocio).
|
|
|
|
Route Handlers:
|
|
- Ubicados en app/api/ y usados como proxies seguros para backend downstream o logs.
|
|
|
|
Estructura de Carpetas:
|
|
app/ ← Páginas, layouts y API Route Handlers
|
|
components/ui/ ← Componentes visuales puros y reutilizables
|
|
lib/ ← Módulos utilitarios core (auth, logger, cypher)
|
|
logs/ ← Archivo logs centralizado (logs/app.log)
|
|
```
|
|
|
|
---
|
|
|
|
## Antes de implementar cualquier Pantalla o Componente
|
|
|
|
1. Completar `standards/05-client-insumos.md` con las especificaciones de pantalla/mockups.
|
|
2. Confirmar los endpoints backend downstream y las políticas de logs.
|
|
3. Asegurar que las variables de entorno estén registradas en `standards/04-configmap-management.md`.
|
|
4. **Consultar Engram** antes de programar: `¿hay decisiones previas sobre este componente o integración?`
|
|
|
|
---
|
|
|
|
## Memoria persistente — Engram
|
|
|
|
Engram preserva las decisiones de diseño frontend que el agente suele olvidar al cerrar la sesión.
|
|
|
|
### Reglas de uso
|
|
|
|
```
|
|
CUÁNDO LEER (siempre al inicio):
|
|
- Antes de implementar una pantalla o componente → buscar decisiones previas del flujo
|
|
- Antes de configurar variables o endpoints → buscar llaves configuradas anteriormente
|
|
- Si un flujo de autenticación o encriptación falla → buscar gotchas documentados
|
|
|
|
CUÁNDO ESCRIBIR (al finalizar):
|
|
- Cada decisión que altere la arquitectura base (ej. "usar mock de datos temporal para la cuenta de ahorros")
|
|
- Cada llave de configuración agregada a .env
|
|
- Cada gotcha o comportamiento no documentado de daisyUI o Next.js
|
|
- El resultado del code-review-excellence si tuvo violaciones corregidas
|
|
|
|
FORMATO DE ESCRITURA:
|
|
Componente/Flujo: <nombre del flujo o componente>
|
|
Decisión: <qué se decidió y por qué>
|
|
Fecha: <YYYY-MM-DD>
|
|
Contexto: <breve explicación técnica>
|
|
```
|
|
|
|
### Engram Cloud — Sincronización entre desarrolladores
|
|
|
|
```bash
|
|
# Configurar el servidor cloud
|
|
engram cloud config --server https://engram.pranical.com
|
|
|
|
# Enrollar el proyecto frontend-ai
|
|
engram cloud enroll frontend-ai
|
|
|
|
# Sincronizar memorias del proyecto al cloud
|
|
engram sync --cloud --project frontend-ai
|
|
```
|
|
|
|
---
|
|
|
|
## Orquestación Multi-Agente — Nivel 1 (activa)
|
|
|
|
El agente principal coordina y delega tareas a subagentes autónomos cuando se trabaja en componentes paralelos.
|
|
|
|
### Cuándo usar subagentes
|
|
|
|
```
|
|
USAR subagentes cuando:
|
|
- Se implementa el Layout general y la Página individual en paralelo
|
|
- Se desarrolla una API Route (/api/...) y la UI del Cliente al mismo tiempo
|
|
- Se genera documentación técnica de los componentes en paralelo
|
|
|
|
NO usar subagentes cuando:
|
|
- Es debugging de estado compartido en Zustand
|
|
- Se realizan cambios de middleware que impactan a toda la app
|
|
```
|
|
|
|
---
|
|
|
|
## Convenciones de Log (Trazabilidad Centralizada)
|
|
|
|
```
|
|
Server Logs:
|
|
- Escritos directamente en logs/app.log a través de lib/logger/server-logger.ts.
|
|
Client Logs:
|
|
- Llaman a lib/logger/client-logger.ts, que envía un POST /api/logs para persistirlo en logs/app.log.
|
|
|
|
Formatos de Prefijos obligatorios:
|
|
[INFO] Login success | {"userId":"123"}
|
|
[WARN] Unauthorized access attempt | {"path":"/dashboard"}
|
|
[ERROR] Backend connection failed | {"error":"ECONNREFUSED"}
|
|
```
|
|
|
|
---
|
|
|
|
## Control de Cookies y Headers Bancarios
|
|
|
|
```
|
|
access_token ← Cookie HTTP-only, Secure (en prod), SameSite=strict
|
|
refresh_token ← Cookie HTTP-only, Secure (en prod), SameSite=strict
|
|
traceId ← deviceSessionReference del cliente propagado en las llamadas al API Route
|
|
```
|
|
|
|
---
|
|
|
|
## Checklist pre-entrega (ejecutar siempre)
|
|
|
|
```
|
|
Server Pages / Layouts:
|
|
[ ] serverRequireAuth() invocado en la cabecera si la ruta es protegida
|
|
[ ] Sin interactividad del cliente (sin onClick, useState, useAuthStore en este nivel)
|
|
[ ] Manejo de errores perimetral con Next.js error.tsx
|
|
|
|
Client Components:
|
|
[ ] 'use client' presente en la línea 1
|
|
[ ] Estado global obtenido a través de useAuthStore o Zustand hooks específicos
|
|
[ ] Consumo de datos sensibles encriptado/desencriptado usando lib/cypher
|
|
[ ] Enrutado de logs a través de client-logger
|
|
|
|
Route Handlers (API):
|
|
[ ] POST /api/logs recibe logs del cliente sin colisiones
|
|
[ ] Autenticación de sesión validada antes de proxyar peticiones al backend
|
|
```
|
|
|
|
---
|
|
|
|
## Reglas de oro (nunca romper)
|
|
|
|
**Código:**
|
|
1. **NUNCA** guardes JWT, secretos ni credenciales en `localStorage`, `sessionStorage` o variables de Javascript del cliente. Usa cookies HTTP-only.
|
|
2. **NUNCA** realices llamadas directas al backend desde Client Components sin pasar por el middleware o API Route correspondiente si requiere auth.
|
|
3. **NUNCA** utilices `useEffect` para sincronizar estados que pueden resolverse mediante React Server Components o Zustand.
|
|
4. **SIEMPRE** registra logs de actividades críticas (login exitoso, fallido, logout, errores) en `logs/app.log`.
|
|
5. **SIEMPRE** actualiza el grafo de Graphify (`graphify update .`) tras cambios estructurales.
|
|
|
|
**Memoria (Engram):**
|
|
6. **SIEMPRE** consulta Engram antes de implementar para verificar decisiones previas del flujo.
|
|
7. **SIEMPRE** registra en Engram las decisiones críticas y de diseño.
|
|
8. **NUNCA** guardes secretos ni código completo en Engram.
|
|
|
|
---
|
|
|
|
## Checklist pre-PR (ejecutar desde el agente)
|
|
|
|
```
|
|
Haz una revisión completa con code-review-excellence
|
|
comparando la implementación contra el checklist de AGENT.md.
|
|
Reporta cualquier violación antes de continuar.
|
|
```
|