@saulwade/swl-ses 2.4.3 → 2.5.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.
Files changed (197) hide show
  1. package/CLAUDE.md +194 -241
  2. package/README.md +600 -597
  3. package/agentes/_intent-spec.md +73 -73
  4. package/agentes/_propose-step.md +90 -90
  5. package/agentes/abogado-diablo-swl.md +145 -0
  6. package/agentes/accesibilidad-wcag-swl.md +690 -690
  7. package/agentes/arquitecto-swl.md +267 -267
  8. package/agentes/auto-evolucion-swl.md +908 -908
  9. package/agentes/backend-api-swl.md +1 -1
  10. package/agentes/backend-csharp-swl.md +420 -420
  11. package/agentes/backend-go-swl.md +390 -390
  12. package/agentes/backend-java-swl.md +281 -281
  13. package/agentes/backend-node-swl.md +1 -1
  14. package/agentes/backend-python-swl.md +1 -1
  15. package/agentes/backend-rust-swl.md +364 -364
  16. package/agentes/backend-workers-swl.md +482 -482
  17. package/agentes/cloud-infra-swl.md +509 -509
  18. package/agentes/consolidador-swl.md +541 -541
  19. package/agentes/datos-swl.md +1 -1
  20. package/agentes/depurador-swl.md +352 -352
  21. package/agentes/devops-ci-swl.md +400 -400
  22. package/agentes/disenador-ui-swl.md +569 -569
  23. package/agentes/documentador-swl.md +345 -345
  24. package/agentes/frontend-angular-swl.md +621 -621
  25. package/agentes/frontend-css-swl.md +716 -716
  26. package/agentes/frontend-react-swl.md +692 -692
  27. package/agentes/frontend-swl.md +496 -496
  28. package/agentes/frontend-tailwind-swl.md +826 -826
  29. package/agentes/gh-fix-ci-swl.md +6 -1
  30. package/agentes/implementador-swl.md +1 -1
  31. package/agentes/investigador-swl.md +432 -432
  32. package/agentes/investigador-ux-swl.md +505 -505
  33. package/agentes/llm-apps-swl.md +1 -1
  34. package/agentes/migrador-swl.md +442 -442
  35. package/agentes/mobile-android-swl.md +511 -511
  36. package/agentes/mobile-cross-swl.md +541 -541
  37. package/agentes/mobile-ios-swl.md +502 -502
  38. package/agentes/mobile-testing-swl.md +302 -302
  39. package/agentes/nemesis-auditor-swl.md +285 -285
  40. package/agentes/notificador-swl.md +1 -1
  41. package/agentes/observabilidad-swl.md +438 -438
  42. package/agentes/pagos-swl.md +310 -310
  43. package/agentes/perfilador-usuario-swl.md +321 -321
  44. package/agentes/planificador-swl.md +399 -399
  45. package/agentes/producto-prd-swl.md +589 -589
  46. package/agentes/red-team-swl.md +218 -218
  47. package/agentes/release-manager-swl.md +590 -590
  48. package/agentes/rendimiento-swl.md +713 -713
  49. package/agentes/resolutor-build-swl.md +10 -1
  50. package/agentes/revisor-angular-swl.md +278 -278
  51. package/agentes/revisor-codigo-swl.md +1 -1
  52. package/agentes/revisor-csharp-swl.md +264 -264
  53. package/agentes/revisor-go-swl.md +259 -259
  54. package/agentes/revisor-java-swl.md +257 -257
  55. package/agentes/revisor-kotlin-swl.md +273 -273
  56. package/agentes/revisor-nextjs-swl.md +281 -281
  57. package/agentes/revisor-php-swl.md +271 -271
  58. package/agentes/revisor-react-swl.md +278 -278
  59. package/agentes/revisor-rust-swl.md +346 -346
  60. package/agentes/revisor-seguridad-swl.md +399 -399
  61. package/agentes/revisor-swift-swl.md +268 -268
  62. package/agentes/revisor-typescript-swl.md +346 -346
  63. package/agentes/sre-swl.md +1 -1
  64. package/agentes/tdd-qa-swl.md +393 -393
  65. package/bin/lib/bot-comandos.js +1 -1
  66. package/bin/swl-ses.js +6 -0
  67. package/comandos/swl/adoptar-proyecto.md +14 -2
  68. package/comandos/swl/configurar-ci.md +8 -1
  69. package/comandos/swl/deuda-codigo.md +97 -97
  70. package/comandos/swl/discutir-fase.md +22 -118
  71. package/comandos/swl/fix.md +118 -0
  72. package/comandos/swl/nuevo-proyecto.md +54 -3
  73. package/comandos/swl/predecir.md +32 -2
  74. package/comandos/swl/seguridad.md +189 -0
  75. package/comandos/swl/status.md +5 -3
  76. package/habilidades/aprendizaje-continuo/SKILL.md +3 -1
  77. package/habilidades/discutir-fase/SKILL.md +84 -81
  78. package/habilidades/discutir-fase/recursos/plantilla-contexto.md +136 -0
  79. package/habilidades/doc-sync/SKILL.md +3 -1
  80. package/habilidades/doubt-driven-review/SKILL.md +15 -1
  81. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  82. package/habilidades/estructura-proyecto-claude/SKILL.md +11 -2
  83. package/habilidades/harness-claude-code/SKILL.md +3 -1
  84. package/habilidades/instalar-sistema/SKILL.md +3 -1
  85. package/habilidades/meta-reglas-extendido/SKILL.md +92 -0
  86. package/habilidades/meta-reglas-extendido/recursos/analisis-previo-tareas-grandes.md +186 -0
  87. package/habilidades/meta-reglas-extendido/recursos/analizar-directorios-antes-de-escribir.md +235 -0
  88. package/habilidades/meta-reglas-extendido/recursos/api-diseno.md +413 -0
  89. package/habilidades/meta-reglas-extendido/recursos/arquitectura.md +491 -0
  90. package/habilidades/meta-reglas-extendido/recursos/arreglar-al-detectar.md +264 -0
  91. package/habilidades/meta-reglas-extendido/recursos/debatir-antes-de-aceptar.md +152 -0
  92. package/habilidades/meta-reglas-extendido/recursos/git-workflow.md +259 -0
  93. package/habilidades/meta-reglas-extendido/recursos/gobernanza.md +291 -0
  94. package/habilidades/meta-reglas-extendido/recursos/memoria-consolidada.md +263 -0
  95. package/habilidades/meta-reglas-extendido/recursos/seguridad-agentes.md +443 -0
  96. package/habilidades/meta-reglas-extendido/recursos/sesiones-paralelas.md +190 -0
  97. package/habilidades/meta-reglas-extendido/recursos/sin-duplicacion-reglas-globales.md +179 -0
  98. package/habilidades/meta-reglas-extendido/recursos/skills-estandar.md +394 -0
  99. package/habilidades/meta-reglas-extendido/recursos/usar-code-review-graph.md +156 -0
  100. package/habilidades/meta-reglas-extendido/recursos/usar-context7.md +236 -0
  101. package/habilidades/meta-reglas-extendido/recursos/usar-sistema-swl.md +253 -0
  102. package/habilidades/meta-reglas-extendido/recursos/verificar-citas-normativas.md +527 -0
  103. package/habilidades/meta-skills-estandar/SKILL.md +3 -1
  104. package/habilidades/nuevo-proyecto/SKILL.md +20 -3
  105. package/habilidades/php-experto/SKILL.md +10 -3
  106. package/habilidades/{filament-admin/SKILL.md → php-experto/recursos/filament-admin.md} +23 -39
  107. package/habilidades/prevencion-sobreingenieria/recursos/soluciones-nativas.md +166 -166
  108. package/habilidades/prevencion-sobreingenieria/recursos/variables-residuales-post-refactor.md +85 -85
  109. package/habilidades/proceso-debate-adversarial/recursos/personas.md +5 -4
  110. package/habilidades/proceso-ingenieria-requerimientos/SKILL.md +147 -0
  111. package/hooks/check-update.js +19 -10
  112. package/hooks/contexto-subagente.js +68 -68
  113. package/hooks/degradacion-instintos.js +1 -1
  114. package/hooks/extraccion-aprendizajes.js +2 -2
  115. package/hooks/lib/briefing.js +3 -3
  116. package/hooks/lib/nudge-tracker.js +1 -1
  117. package/hooks/lib/otlp-exporter.js +1 -1
  118. package/hooks/lib/webhook-dedup.js +1 -1
  119. package/hooks/session-briefing.js +1 -1
  120. package/llms.txt +6 -6
  121. package/manifiestos/canonical-hashes.json +713 -52
  122. package/manifiestos/hooks-config.json +469 -469
  123. package/manifiestos/invariantes-criticos.json +30 -30
  124. package/manifiestos/modulos.json +168 -135
  125. package/manifiestos/perfiles.json +0 -2
  126. package/manifiestos/skills-lock.json +49 -56
  127. package/package.json +7 -5
  128. package/plantillas/github-workflows/README.md +15 -1
  129. package/plantillas/github-workflows/swl-devsecops.yml +70 -0
  130. package/plugin.json +5 -5
  131. package/reglas/analisis-previo-tareas-grandes.md +30 -156
  132. package/reglas/analizar-directorios-antes-de-escribir.md +30 -211
  133. package/reglas/api-diseno.md +28 -398
  134. package/reglas/arquitectura.md +35 -456
  135. package/reglas/arreglar-al-detectar.md +30 -230
  136. package/reglas/debatir-antes-de-aceptar.md +30 -143
  137. package/reglas/docs.md +7 -0
  138. package/reglas/estilo-codigo.md +9 -0
  139. package/reglas/fragmentos-compartidos.md +6 -0
  140. package/reglas/git-workflow.md +44 -240
  141. package/reglas/gobernanza.md +23 -262
  142. package/reglas/memoria-consolidada.md +34 -228
  143. package/reglas/performance.md +8 -0
  144. package/reglas/pruebas.md +12 -0
  145. package/reglas/seguridad-agentes.md +37 -418
  146. package/reglas/seguridad.md +12 -0
  147. package/reglas/sesiones-paralelas.md +29 -162
  148. package/reglas/sin-duplicacion-reglas-globales.md +25 -166
  149. package/reglas/skills-estandar.md +23 -373
  150. package/reglas/usar-code-review-graph.md +31 -140
  151. package/reglas/usar-context7.md +30 -208
  152. package/reglas/usar-sistema-swl.md +47 -242
  153. package/reglas/verificar-citas-normativas.md +47 -537
  154. package/scripts/actualizar.js +253 -253
  155. package/scripts/audit-tools/auditar-relleno-inventario.js +145 -0
  156. package/scripts/auditar-clases-conocidas.js +106 -0
  157. package/scripts/bootstrap-instintos.js +2 -2
  158. package/scripts/canario-hooks.js +166 -0
  159. package/scripts/cli/configurar-ci.js +2 -1
  160. package/scripts/evidencia-valor.js +93 -0
  161. package/scripts/field-report.js +1 -1
  162. package/scripts/generar-comandos.js +143 -0
  163. package/scripts/generar-inventario.js +236 -23
  164. package/scripts/generar-matriz-lenguajes.js +1 -1
  165. package/scripts/instalador.js +15 -1
  166. package/scripts/lib/configurar-ci.js +10 -3
  167. package/scripts/lib/diary-entry.js +3 -1
  168. package/scripts/lib/drift-detector.js +1 -1
  169. package/scripts/lib/evidencia-valor.js +189 -0
  170. package/scripts/lib/expandir-targets.js +71 -71
  171. package/scripts/lib/frontmatter-md.js +63 -0
  172. package/scripts/lib/parsear-opciones.js +2 -0
  173. package/scripts/lib/prune-componentes.js +180 -0
  174. package/scripts/lib/reglas-globales-conocidas.json +16 -2
  175. package/scripts/lib/scoring-instintos.js +2 -2
  176. package/scripts/lib/toml-merge.js +204 -204
  177. package/scripts/lib/transformadores/claude.js +1 -1
  178. package/scripts/lib/transformadores/codex.js +1 -1
  179. package/scripts/lib/transformadores/copilot.js +1 -1
  180. package/scripts/lib/transformadores/cursor.js +1 -1
  181. package/scripts/lib/transformadores/gemini.js +22 -2
  182. package/scripts/lib/transformadores/opencode.js +1 -1
  183. package/scripts/mcp-server/auth.js +105 -105
  184. package/scripts/mcp-server/cache.js +106 -106
  185. package/scripts/prune.js +102 -0
  186. package/scripts/publicar.js +18 -2
  187. package/scripts/tui/pantallas/inspect.js +175 -175
  188. package/scripts/tui/pantallas/uninstall-wizard.js +210 -210
  189. package/scripts/tui/pantallas/update-wizard.js +234 -234
  190. package/scripts/tui/pantallas/welcome.js +189 -189
  191. package/habilidades/paid-media-tracking/SKILL.md +0 -269
  192. package/habilidades/paid-media-tracking/recursos/auditoria-tracking.md +0 -220
  193. package/habilidades/paid-media-tracking/recursos/google-ads-api.md +0 -215
  194. package/habilidades/tracking-measurement/SKILL.md +0 -239
  195. package/habilidades/tracking-measurement/recursos/consent-mode.md +0 -231
  196. package/habilidades/tracking-measurement/recursos/gtm-datalayer.md +0 -216
  197. package/habilidades/tracking-measurement/recursos/meta-capi.md +0 -262
@@ -1,262 +0,0 @@
1
- # Meta Conversions API (CAPI): implementación server-side
2
-
3
- ## Por qué CAPI es necesario post-iOS 14
4
-
5
- iOS 14 introdujo App Tracking Transparency (ATT) e Intelligent Tracking
6
- Prevention (ITP) de Safari. El impacto en el Pixel browser:
7
-
8
- - **40-60% de eventos de conversión se pierden** en dispositivos Apple.
9
- - Las cookies de terceros duran máximo 7 días en Safari (antes: 2 años).
10
- - El atributo `_fbp` (identificador de usuario de Meta) expira en 7 días.
11
-
12
- CAPI envía eventos directamente desde el servidor, sin depender del browser.
13
- Los datos server-side tienen mayor confiabilidad porque no son bloqueados
14
- por extensiones de ad-blocking ni restricciones del sistema operativo.
15
-
16
- **Estrategia recomendada**: browser Pixel + CAPI en paralelo, con
17
- deduplicación obligatoria vía `event_id`.
18
-
19
- ## Setup: credenciales necesarias
20
-
21
- | Credencial | Dónde obtenerla | Dónde almacenarla |
22
- |------------|----------------|-------------------|
23
- | `PIXEL_ID` | Meta Business > Events Manager > tu Pixel | Variable de entorno del servidor |
24
- | `CAPI_TOKEN` | Events Manager > Settings > Generate Access Token | Secret Manager / variable de entorno |
25
-
26
- El token de acceso NO tiene fecha de expiración pero se puede revocar manualmente.
27
- Rotar el token si se sospecha compromiso de seguridad.
28
-
29
- ## Hashing de PII: función de referencia
30
-
31
- Meta requiere SHA-256 con normalización específica por tipo de dato:
32
-
33
- ```python
34
- import hashlib
35
-
36
- def hash_pii(valor: str) -> str:
37
- """
38
- Normaliza y hashea PII para Meta CAPI (SHA-256).
39
- - Email: minúsculas, sin espacios al inicio/fin
40
- - Teléfono: formato E.164 (+52XXXXXXXXXX), solo dígitos y +
41
- - Nombre/apellido: minúsculas, sin espacios al inicio/fin
42
- """
43
- return hashlib.sha256(valor.strip().lower().encode()).hexdigest()
44
-
45
- def normalizar_telefono(telefono: str) -> str:
46
- """Convierte teléfono a formato E.164 para hashear."""
47
- # Conservar solo dígitos y el + inicial
48
- limpio = '+' + ''.join(c for c in telefono if c.isdigit())
49
- return limpio
50
- ```
51
-
52
- ## Endpoint server-side completo
53
-
54
- ```python
55
- import hashlib
56
- import httpx
57
- import time
58
- import os
59
- from typing import Optional
60
-
61
- PIXEL_ID = os.environ["META_PIXEL_ID"]
62
- CAPI_TOKEN = os.environ["META_CAPI_TOKEN"]
63
- CAPI_URL = f"https://graph.facebook.com/v18.0/{PIXEL_ID}/events"
64
-
65
- def hash_pii(valor: str) -> str:
66
- return hashlib.sha256(valor.strip().lower().encode()).hexdigest()
67
-
68
- async def enviar_evento_capi(
69
- evento: str,
70
- event_id: str,
71
- user_data: dict,
72
- custom_data: dict,
73
- source_url: str,
74
- test_event_code: Optional[str] = None,
75
- ) -> dict:
76
- """
77
- Envía un evento a Meta CAPI desde el servidor.
78
-
79
- Args:
80
- evento: Nombre del evento estándar Meta (Purchase, Lead, ViewContent, etc.)
81
- event_id: ID único para deduplicación con el Pixel browser. Debe ser el
82
- mismo valor enviado en el dataLayer del browser.
83
- user_data: Datos del usuario. Se hashean internamente.
84
- Claves esperadas: email, phone, fbc, fbp, ip, user_agent.
85
- custom_data: Datos del evento (value, currency, content_ids, etc.)
86
- source_url: URL donde ocurrió el evento.
87
- test_event_code: Solo en desarrollo/staging. Obtener en Events Manager.
88
-
89
- Returns:
90
- Respuesta de la API de Meta como dict.
91
- """
92
- user_data_hasheado = {}
93
-
94
- if email := user_data.get("email"):
95
- user_data_hasheado["em"] = [hash_pii(email)]
96
-
97
- if phone := user_data.get("phone"):
98
- user_data_hasheado["ph"] = [hash_pii(phone)]
99
-
100
- # fbc y fbp NO se hashean — son identificadores propios de Meta
101
- if fbc := user_data.get("fbc"):
102
- user_data_hasheado["fbc"] = fbc
103
-
104
- if fbp := user_data.get("fbp"):
105
- user_data_hasheado["fbp"] = fbp
106
-
107
- if ip := user_data.get("ip"):
108
- user_data_hasheado["client_ip_address"] = ip
109
-
110
- if user_agent := user_data.get("user_agent"):
111
- user_data_hasheado["client_user_agent"] = user_agent
112
-
113
- payload = {
114
- "data": [{
115
- "event_name": evento,
116
- "event_time": int(time.time()),
117
- "event_id": event_id,
118
- "event_source_url": source_url,
119
- "action_source": "website",
120
- "user_data": user_data_hasheado,
121
- "custom_data": custom_data,
122
- }],
123
- }
124
-
125
- if test_event_code:
126
- payload["test_event_code"] = test_event_code
127
-
128
- async with httpx.AsyncClient() as client:
129
- response = await client.post(
130
- CAPI_URL,
131
- params={"access_token": CAPI_TOKEN},
132
- json=payload,
133
- timeout=10.0,
134
- )
135
- response.raise_for_status()
136
- return response.json()
137
- ```
138
-
139
- ### Uso en endpoint de compra confirmada (FastAPI)
140
-
141
- ```python
142
- from fastapi import Request
143
-
144
- @router.post("/ordenes/{orden_id}/confirmar")
145
- async def confirmar_orden(
146
- orden_id: str,
147
- request: Request,
148
- db: AsyncSession = Depends(get_db),
149
- current_user = Depends(get_current_user),
150
- ):
151
- orden = await procesar_pago(orden_id, db)
152
-
153
- # Leer cookies de Meta del browser
154
- fbc = request.cookies.get("_fbc")
155
- fbp = request.cookies.get("_fbp")
156
-
157
- # El event_id viene del frontend para deduplicación
158
- event_id = request.headers.get("X-Event-Id", f"purchase_{orden_id}_{int(time.time())}")
159
-
160
- await enviar_evento_capi(
161
- evento="Purchase",
162
- event_id=event_id,
163
- user_data={
164
- "email": current_user.email,
165
- "phone": current_user.phone,
166
- "fbc": fbc,
167
- "fbp": fbp,
168
- "ip": request.client.host,
169
- "user_agent": request.headers.get("User-Agent"),
170
- },
171
- custom_data={
172
- "value": float(orden.total),
173
- "currency": "MXN",
174
- "content_ids": [item.sku for item in orden.items],
175
- "content_type": "product",
176
- "num_items": len(orden.items),
177
- },
178
- source_url=str(request.url),
179
- )
180
-
181
- return {"status": "confirmada", "orden_id": str(orden.id)}
182
- ```
183
-
184
- ## Deduplicación: cómo funciona
185
-
186
- Meta deduplica eventos cuando recibe dos eventos con el mismo `event_id`
187
- dentro de una ventana de 48 horas. El proceso:
188
-
189
- 1. Browser (Pixel) dispara `Purchase` con `event_id = "purchase_ORD-001_1234"`
190
- 2. Servidor (CAPI) envía `Purchase` con el mismo `event_id`
191
- 3. Meta los empareja y cuenta solo una conversión
192
-
193
- **Cómo pasar el event_id del browser al servidor:**
194
-
195
- ```javascript
196
- // Frontend: guardar event_id en header de la request de confirmación
197
- const eventId = `purchase_${transactionId}_${Date.now()}`;
198
-
199
- // 1. Disparar en dataLayer (browser Pixel lo captura)
200
- dataLayer.push({ ecommerce: null });
201
- dataLayer.push({
202
- event: 'purchase',
203
- event_id: eventId,
204
- ecommerce: { transaction_id: transactionId, ... }
205
- });
206
-
207
- // 2. Incluir en la request al backend
208
- await fetch(`/api/ordenes/${transactionId}/confirmar`, {
209
- method: 'POST',
210
- headers: {
211
- 'X-Event-Id': eventId,
212
- 'Content-Type': 'application/json',
213
- },
214
- });
215
- ```
216
-
217
- ## Cómo obtener las cookies _fbc y _fbp
218
-
219
- | Cookie | Descripción | Cómo se crea |
220
- |--------|-------------|--------------|
221
- | `_fbp` | Identificador de browser de Meta | Meta Pixel la crea al cargar |
222
- | `_fbc` | Identificador de click de anuncio | Meta la crea cuando el usuario llega desde un anuncio (parámetro `fbclid` en URL) |
223
-
224
- Ambas deben leerse del request en el servidor y enviarse a CAPI sin hashear.
225
- Si no están presentes, omitir el campo (no enviar cadena vacía).
226
-
227
- ## Tasa de coincidencia (Event Match Quality)
228
-
229
- El score EMQ mide qué tan bien Meta puede emparejar eventos con usuarios:
230
-
231
- | Score | Interpretación |
232
- |-------|---------------|
233
- | 8-10 | Excelente — atribución confiable |
234
- | 6-7 | Bueno — mínimo recomendado |
235
- | 4-5 | Aceptable — mejorar si es posible |
236
- | < 4 | Bajo — revisar qué user_data se está enviando |
237
-
238
- **Para maximizar el EMQ**: enviar siempre `em` + `ph` + `fbp` + `fbc` +
239
- `client_ip_address` + `client_user_agent`. Cada campo adicional mejora el score.
240
-
241
- ## Test Events: validar antes de producción
242
-
243
- 1. En Meta Business > Events Manager > tu Pixel > Test Events.
244
- 2. Copiar el `test_event_code` (formato `TEST12345`).
245
- 3. Pasarlo al parámetro `test_event_code` del endpoint.
246
- 4. Ejecutar el flujo de compra en staging.
247
- 5. Verificar en Test Events que el evento llega con el payload correcto.
248
- 6. Confirmar que aparece como "Deduplicated" si también se disparó el Pixel.
249
- 7. **Remover** el `test_event_code` antes de pasar a producción.
250
-
251
- ## Eventos estándar de Meta disponibles
252
-
253
- | Evento | Cuándo usarlo |
254
- |--------|--------------|
255
- | `Purchase` | Compra completada con valor monetario |
256
- | `Lead` | Registro de formulario de contacto o demo |
257
- | `ViewContent` | Vista de página de producto o servicio |
258
- | `AddToCart` | Agregar producto al carrito |
259
- | `InitiateCheckout` | Inicio del proceso de pago |
260
- | `CompleteRegistration` | Registro de cuenta completado |
261
- | `Search` | Búsqueda en el sitio |
262
- | `Subscribe` | Suscripción a newsletter o servicio recurrente |