cdp-edge 1.2.2 → 1.3.0

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 (141) hide show
  1. package/README.md +153 -306
  2. package/bin/cdp-edge.js +71 -61
  3. package/contracts/agent-versions.json +682 -0
  4. package/contracts/api-versions.json +372 -368
  5. package/contracts/types.ts +81 -0
  6. package/dist/commands/analyze.js +52 -52
  7. package/dist/commands/infra.js +54 -54
  8. package/dist/commands/install.js +26 -3
  9. package/dist/commands/server.js +174 -174
  10. package/dist/commands/setup.js +332 -100
  11. package/dist/commands/validate.js +248 -84
  12. package/dist/index.js +12 -12
  13. package/dist/sdk/cdpTrack.js +2095 -0
  14. package/dist/sdk/cdpTrack.min.js +64 -0
  15. package/dist/sdk/install-snippet.html +10 -0
  16. package/docs/whatsapp-ctwa.md +5 -4
  17. package/extracted-skill/tracking-events-generator/INTEGRACAO-COMPLETA.md +89 -0
  18. package/extracted-skill/tracking-events-generator/MELHORIAS-IMPLEMENTADAS.md +101 -0
  19. package/extracted-skill/tracking-events-generator/advanced-matching.js +364 -364
  20. package/extracted-skill/tracking-events-generator/agents/ab-ltv-agent.md +196 -0
  21. package/extracted-skill/tracking-events-generator/agents/ab-testing-agent.md +1 -1
  22. package/extracted-skill/tracking-events-generator/agents/attribution-agent.md +41 -41
  23. package/extracted-skill/tracking-events-generator/agents/bidding-agent.md +347 -0
  24. package/extracted-skill/tracking-events-generator/agents/bing-agent.md +40 -50
  25. package/extracted-skill/tracking-events-generator/agents/browser-tracking.md +174 -74
  26. package/extracted-skill/tracking-events-generator/agents/code-guardian-agent.md +1 -1
  27. package/extracted-skill/tracking-events-generator/agents/compliance-agent.md +25 -5
  28. package/extracted-skill/tracking-events-generator/agents/dashboard-agent.md +10 -10
  29. package/extracted-skill/tracking-events-generator/agents/database-agent.md +43 -42
  30. package/extracted-skill/tracking-events-generator/agents/debug-agent.md +22 -22
  31. package/extracted-skill/tracking-events-generator/agents/devops-agent.md +232 -0
  32. package/extracted-skill/tracking-events-generator/agents/domain-setup-agent.md +23 -9
  33. package/extracted-skill/tracking-events-generator/agents/email-agent.md +28 -1
  34. package/extracted-skill/tracking-events-generator/agents/evo-crm-agent.md +244 -0
  35. package/extracted-skill/tracking-events-generator/agents/fingerprint-agent.md +206 -1
  36. package/extracted-skill/tracking-events-generator/agents/fraud-detection-agent.md +143 -0
  37. package/extracted-skill/tracking-events-generator/agents/google-agent.md +128 -2
  38. package/extracted-skill/tracking-events-generator/agents/intelligence-agent.md +191 -31
  39. package/extracted-skill/tracking-events-generator/agents/lead-scoring-agent.md +282 -0
  40. package/extracted-skill/tracking-events-generator/agents/linkedin-agent.md +145 -34
  41. package/extracted-skill/tracking-events-generator/agents/localization-agent.md +1 -1
  42. package/extracted-skill/tracking-events-generator/agents/ltv-predictor-agent.md +5 -5
  43. package/extracted-skill/tracking-events-generator/agents/master-feedback-loop.md +81 -21
  44. package/extracted-skill/tracking-events-generator/agents/master-orchestrator.md +313 -93
  45. package/extracted-skill/tracking-events-generator/agents/match-quality-agent.md +304 -0
  46. package/extracted-skill/tracking-events-generator/agents/memory-agent.md +190 -15
  47. package/extracted-skill/tracking-events-generator/agents/meta-agent.md +10 -2
  48. package/extracted-skill/tracking-events-generator/agents/ml-clustering-agent.md +749 -0
  49. package/extracted-skill/tracking-events-generator/agents/page-analyzer.md +21 -4
  50. package/extracted-skill/tracking-events-generator/agents/performance-agent.md +41 -31
  51. package/extracted-skill/tracking-events-generator/agents/performance-optimization-agent.md +18 -8
  52. package/extracted-skill/tracking-events-generator/agents/pinterest-agent.md +14 -6
  53. package/extracted-skill/tracking-events-generator/agents/premium-tracking-intelligence-agent.md +7 -7
  54. package/extracted-skill/tracking-events-generator/agents/r2-setup-agent.md +16 -8
  55. package/extracted-skill/tracking-events-generator/agents/reddit-agent.md +15 -7
  56. package/extracted-skill/tracking-events-generator/agents/security-enterprise-agent.md +157 -48
  57. package/extracted-skill/tracking-events-generator/agents/server-tracking.md +35 -35
  58. package/extracted-skill/tracking-events-generator/agents/spotify-agent.md +15 -7
  59. package/extracted-skill/tracking-events-generator/agents/tiktok-agent.md +73 -2
  60. package/extracted-skill/tracking-events-generator/agents/tracking-plan-agent.md +104 -9
  61. package/extracted-skill/tracking-events-generator/agents/utm-agent.md +322 -0
  62. package/extracted-skill/tracking-events-generator/agents/validator-agent.md +13 -9
  63. package/extracted-skill/tracking-events-generator/agents/webhook-agent.md +112 -4
  64. package/extracted-skill/tracking-events-generator/agents/whatsapp-agent.md +58 -5
  65. package/extracted-skill/tracking-events-generator/agents/whatsapp-ctwa-setup-agent.md +26 -18
  66. package/extracted-skill/tracking-events-generator/agents/youtube-agent.md +152 -37
  67. package/extracted-skill/tracking-events-generator/anti-blocking.js +285 -285
  68. package/extracted-skill/tracking-events-generator/cdpTrack.js +642 -641
  69. package/extracted-skill/tracking-events-generator/contracts/api-versions.json +14 -10
  70. package/extracted-skill/tracking-events-generator/engagement-scoring.js +226 -226
  71. package/extracted-skill/tracking-events-generator/evals/evals.json +235 -235
  72. package/extracted-skill/tracking-events-generator/integration-test.js +497 -497
  73. package/extracted-skill/tracking-events-generator/knowledge-base.md +172 -0
  74. package/extracted-skill/tracking-events-generator/micro-events.js +992 -992
  75. package/extracted-skill/tracking-events-generator/models/lancamento-imobiliario.md +344 -0
  76. package/extracted-skill/tracking-events-generator/models/pinterest/conversions-api-template.js +144 -144
  77. package/extracted-skill/tracking-events-generator/models/pinterest/event-mappings.json +48 -48
  78. package/extracted-skill/tracking-events-generator/models/pinterest/tag-template.js +28 -28
  79. package/extracted-skill/tracking-events-generator/models/quiz-funnel.md +83 -19
  80. package/extracted-skill/tracking-events-generator/models/reddit/conversions-api-template.js +205 -205
  81. package/extracted-skill/tracking-events-generator/models/reddit/event-mappings.json +56 -56
  82. package/extracted-skill/tracking-events-generator/models/reddit/pixel-template.js +19 -19
  83. package/extracted-skill/tracking-events-generator/models/scenarios/behavior-engine.js +425 -425
  84. package/extracted-skill/tracking-events-generator/route-intent-capture.js +222 -0
  85. package/extracted-skill/tracking-events-generator/tracking.config.js +3 -3
  86. package/package.json +89 -75
  87. package/scripts/build-sdk.js +106 -0
  88. package/server-edge-tracker/.client.env.example +14 -0
  89. package/server-edge-tracker/INSTALAR.md +222 -23
  90. package/server-edge-tracker/SEGMENTATION-DOCS.md +513 -0
  91. package/server-edge-tracker/config/utm-mapping.json +64 -0
  92. package/server-edge-tracker/deploy-client.cjs +76 -0
  93. package/server-edge-tracker/index.ts +1230 -0
  94. package/server-edge-tracker/migrate-v7.sql +64 -0
  95. package/server-edge-tracker/modules/db.ts +710 -0
  96. package/server-edge-tracker/modules/dispatch/crm.ts +382 -0
  97. package/server-edge-tracker/modules/dispatch/ga4.ts +72 -0
  98. package/server-edge-tracker/modules/dispatch/meta.ts +143 -0
  99. package/server-edge-tracker/modules/dispatch/platforms.ts +255 -0
  100. package/server-edge-tracker/modules/dispatch/tiktok.ts +107 -0
  101. package/server-edge-tracker/modules/dispatch/whatsapp.ts +296 -0
  102. package/server-edge-tracker/modules/intelligence.ts +589 -0
  103. package/server-edge-tracker/modules/ml/bidding.ts +247 -0
  104. package/server-edge-tracker/modules/ml/fraud.ts +302 -0
  105. package/server-edge-tracker/modules/ml/logistic.ts +226 -0
  106. package/server-edge-tracker/modules/ml/ltv.ts +531 -0
  107. package/server-edge-tracker/modules/ml/matchquality.ts +232 -0
  108. package/server-edge-tracker/modules/ml/quiz.ts +343 -0
  109. package/server-edge-tracker/modules/ml/roas.ts +255 -0
  110. package/server-edge-tracker/modules/ml/segmentation.ts +407 -0
  111. package/server-edge-tracker/modules/nurture.ts +257 -0
  112. package/server-edge-tracker/modules/utils.ts +311 -0
  113. package/server-edge-tracker/modules/utm/utm-enricher.ts +231 -0
  114. package/server-edge-tracker/schema-ab-ltv.sql +97 -0
  115. package/server-edge-tracker/schema-bidding.sql +86 -0
  116. package/server-edge-tracker/schema-fraud.sql +90 -0
  117. package/server-edge-tracker/schema-indexes.sql +67 -0
  118. package/server-edge-tracker/schema-ltv-feedback.sql +11 -0
  119. package/server-edge-tracker/schema-quiz.sql +52 -0
  120. package/server-edge-tracker/schema-sales-engine.sql +113 -0
  121. package/server-edge-tracker/schema-segmentation.sql +219 -0
  122. package/server-edge-tracker/schema-utm.sql +82 -0
  123. package/server-edge-tracker/schema.sql +281 -265
  124. package/server-edge-tracker/types.ts +275 -0
  125. package/server-edge-tracker/wrangler.toml +140 -85
  126. package/templates/lancamento-imobiliario.md +344 -0
  127. package/templates/multi-step-checkout.md +3 -4
  128. package/templates/pinterest/conversions-api-template.js +144 -144
  129. package/templates/pinterest/event-mappings.json +48 -48
  130. package/templates/pinterest/tag-template.js +28 -28
  131. package/templates/quiz-funnel.md +83 -19
  132. package/templates/reddit/conversions-api-template.js +205 -205
  133. package/templates/reddit/event-mappings.json +56 -56
  134. package/templates/reddit/pixel-template.js +12 -39
  135. package/templates/scenarios/behavior-engine.js +45 -22
  136. package/docs/PixelBuilder-Documentacao-Completa (2).docx +0 -0
  137. package/docs/installation.md +0 -155
  138. package/docs/quick-start.md +0 -185
  139. package/extracted-skill/tracking-events-generator/agents/crm-integration-agent.md +0 -1419
  140. package/extracted-skill/tracking-events-generator/agents/intelligence-scheduling.md +0 -643
  141. package/server-edge-tracker/worker.js +0 -2574
@@ -0,0 +1,304 @@
1
+ # Match Quality Agent — CDP Edge
2
+
3
+ **Papel:** Guardião da Qualidade de Dados — garante que apenas sinais com valor real chegam às plataformas de anúncio.
4
+
5
+ ---
6
+
7
+ ## Missão
8
+
9
+ Toda implementação CDP Edge envia dados server-side para Meta CAPI, GA4 e TikTok. O problema é que nem todo lead chega com email, telefone, fbp ou fbc — e enviar eventos sem esses campos contamina os algoritmos das plataformas com sinais pobres, encarece o CPL e piora o ROAS.
10
+
11
+ O Match Quality Agent resolve isso em três camadas:
12
+
13
+ ```
14
+ Camada 1 — AUTO-ENRIQUECIMENTO (antes do dispatch, em tempo real)
15
+ → Recupera email/fbp/fbc/phone do Identity Graph (D1) para eventos sem esses dados
16
+
17
+ Camada 2 — LOG E SCORE (a cada dispatch, em background)
18
+ → Registra flags de qualidade por evento na match_quality_log
19
+
20
+ Camada 3 — MONITORAMENTO E ALERTA (cron a cada 2h)
21
+ → Analisa degradação, alerta via CallMeBot, identifica causa raiz
22
+ ```
23
+
24
+ Se o score cair abaixo do mínimo → alerta automático com diagnóstico e ação recomendada. Não é observabilidade passiva. É um sistema ativo de defesa da qualidade.
25
+
26
+ ---
27
+
28
+ ## O Que é Match Quality e Por Que Importa
29
+
30
+ As plataformas pontuam cada evento que recebem. Meta chama isso de **Event Match Quality (EMQ)**. Google chama de **Enhanced Conversions Score**. TikTok tem o **Signal Quality Rating**. Todos medem a mesma coisa: **quão bem o evento servidor consegue ser atribuído a um usuário real**.
31
+
32
+ | Campo | Peso no EMQ (Meta) | Impacto |
33
+ |---|---|---|
34
+ | `em` (email SHA256) | **Alto** | Principal identificador — sem ele, EMQ cai 40-60% |
35
+ | `ph` (phone SHA256) | Alto | Complementar ao email |
36
+ | `fbp` (cookie) | **Alto** | Confirma que o usuário passou pelo browser |
37
+ | `fbc` (click ID) | Médio | Vincula ao clique específico do anúncio |
38
+ | `external_id` | Médio | `_cdp_uid` — identidade persistente entre sessões |
39
+ | `client_ip_address` | Baixo | Já incluído automaticamente pelo Worker |
40
+ | `client_user_agent` | Baixo | Já incluído automaticamente pelo Worker |
41
+
42
+ **Regra de ouro:** Um evento com email + fbp + external_id tem EMQ 7-10/10. Sem email e sem fbp → EMQ 2-4/10. A plataforma desconta o peso desse evento e o algoritmo de otimização fica cego.
43
+
44
+ ---
45
+
46
+ ## Arquitetura Técnica — O Que Já Existe no Código
47
+
48
+ ```
49
+ modules/ml/matchquality.ts
50
+
51
+ ├── autoEnrichPayload(env, payload)
52
+ │ → chamado em meta.ts ANTES de cada CAPI dispatch
53
+ │ → busca no D1: SELECT email, fbp, fbc, phone FROM user_profiles WHERE user_id = ?
54
+ │ → se o evento chegou sem email mas o lead já visitou antes → recupera do Identity Graph
55
+ │ → retorna { payload enriquecido, recovered: { email, utm } }
56
+
57
+ ├── logMatchQuality(DB, eventName, payload, recovered)
58
+ │ → chamado em background após cada dispatch
59
+ │ → INSERT INTO match_quality_log (has_email, has_phone, has_fbp, has_fbc, has_external_id, was_email_recovered, was_utm_restored)
60
+
61
+ ├── analyzeMatchQuality(env)
62
+ │ → chamado pelo cron (Intelligence Agent, a cada 2h)
63
+ │ → SELECT AVG(has_email), AVG(has_fbp), composite_score FROM match_quality_log WHERE logged_at >= datetime('now', '-2 hours')
64
+ │ → composite = email×40% + fbp×30% + phone×20% + fbc×10%
65
+ │ → retorna { email_rate, fbp_rate, composite_score, alerts[] }
66
+
67
+ ├── alertMatchQuality(env, analysis)
68
+ │ → envia relatório via CallMeBot quando alerts.length > 0
69
+ │ → inclui % de recuperação automática pelo Identity Graph
70
+
71
+ └── purgeOldMatchQualityLogs(DB)
72
+ → DELETE logs > 30 dias (mensal)
73
+ ```
74
+
75
+ **Tabela D1 gerenciada:**
76
+ ```sql
77
+ match_quality_log (
78
+ id, event_name,
79
+ has_email INT, has_phone INT, has_fbp INT, has_fbc INT, has_external_id INT,
80
+ was_email_recovered INT, was_utm_restored INT,
81
+ logged_at TEXT DEFAULT (datetime('now'))
82
+ )
83
+ ```
84
+ Criada por `migrate-v7.sql` — já faz parte do deploy padrão.
85
+
86
+ ---
87
+
88
+ ## Responsabilidades do Match Quality Agent
89
+
90
+ ### 1. Auditoria Pré-Deploy (ANTES de ir ao ar)
91
+
92
+ Antes de qualquer deploy, o agente DEVE verificar:
93
+
94
+ **Checklist de qualidade do payload:**
95
+
96
+ ```
97
+ [ ] O cdpTrack.js captura e envia fbp (_fbc/_fbp cookies)?
98
+ → Confirmar: document.cookie contém _fbp após PageView
99
+ → Confirmar: payload enviado ao /track inclui fbp
100
+
101
+ [ ] O cdpTrack.js captura email no submit do formulário?
102
+ → Confirmar: evento Lead contém email (mesmo que em sha256)
103
+ → Confirmar: validação de formato de email ativa
104
+
105
+ [ ] O Worker popula client_ip_address e client_user_agent em todos os eventos?
106
+ → Confirmar: meta.ts injeta CF-Connecting-IP e User-Agent automaticamente
107
+
108
+ [ ] O Identity Graph (_cdp_uid) está sendo criado no primeiro PageView?
109
+ → Confirmar: cookie _cdp_uid existe após primeira visita
110
+ → Confirmar: user_profiles tem registro para o uid
111
+
112
+ [ ] O Fraud Gate está bloqueando bots ANTES do logMatchQuality?
113
+ → Confirmar: events de bots não aparecem na match_quality_log
114
+ ```
115
+
116
+ **Nível de qualidade esperado para ir ao ar:**
117
+ - `email_rate` ≥ 40% dos eventos Lead/Purchase
118
+ - `fbp_rate` ≥ 30% de todos os eventos
119
+ - `composite_score` ≥ 45%
120
+
121
+ Se qualquer métrica estiver abaixo → **bloquear deploy** até corrigir.
122
+
123
+ ---
124
+
125
+ ### 2. Configuração do Monitoramento Contínuo
126
+
127
+ O agente configura o Intelligence Agent para chamar `analyzeMatchQuality()` automaticamente:
128
+
129
+ ```toml
130
+ # wrangler.toml — cron de qualidade (a cada 2h)
131
+ [[triggers.crons]]
132
+ cron = "0 */2 * * *"
133
+ ```
134
+
135
+ ```typescript
136
+ // intelligence.ts — handler scheduled
137
+ case '0 */2 * * *':
138
+ const analysis = await analyzeMatchQuality(env);
139
+ if (analysis) await alertMatchQuality(env, analysis);
140
+ break;
141
+ ```
142
+
143
+ **Thresholds de alerta (configurados no código):**
144
+
145
+ | Métrica | Threshold Mínimo | Severidade |
146
+ |---|---|---|
147
+ | `email_rate` | < 40% | ⚠️ Warning |
148
+ | `fbp_rate` | < 30% | ⚠️ Warning |
149
+ | `composite_score` | < 45% | 🚨 Critical |
150
+ | `min_events` para disparar alerta | 10 eventos/2h | — |
151
+
152
+ ---
153
+
154
+ ### 3. Diagnóstico de Causa Raiz
155
+
156
+ Quando um alerta for disparado, o agente segue este protocolo de diagnóstico:
157
+
158
+ #### `email_rate` baixo
159
+ **Causa provável:** formulário não está capturando email no evento Lead
160
+
161
+ **Verificar:**
162
+ ```javascript
163
+ // cdpTrack.js — evento Lead deve incluir email
164
+ document.querySelector('#formulario').addEventListener('submit', (e) => {
165
+ const email = e.target.querySelector('[type=email]').value;
166
+ cdpTrack('Lead', { email }); // ← email obrigatório aqui
167
+ });
168
+ ```
169
+
170
+ **Ação automática já ativa:** `autoEnrichPayload()` tenta recuperar email do D1 pelo `_cdp_uid`. Se o lead visitou antes e foi salvo → recupera automaticamente. O campo `was_email_recovered` na log mostra a taxa de recuperação.
171
+
172
+ #### `fbp_rate` baixo
173
+ **Causa provável:** cookie `_fbp` não está sendo lido ou o Meta Pixel browser não está ativo
174
+
175
+ **Verificar no cdpTrack.js:**
176
+ ```javascript
177
+ function getFbpCookie() {
178
+ return document.cookie.split(';')
179
+ .find(c => c.trim().startsWith('_fbp='))
180
+ ?.split('=')[1] || null;
181
+ }
182
+ // Deve retornar algo como: fb.1.1680000000000.1234567890
183
+ ```
184
+
185
+ **Verificar:** O Meta Pixel (fbq) está sendo inicializado ANTES do cdpTrack.js? O `_fbp` cookie é criado pelo pixel browser — sem ele, nenhum evento tem fbp.
186
+
187
+ #### `composite_score` crítico (< 45%)
188
+ **Email E fbp baixos ao mesmo tempo.** Situação mais grave.
189
+
190
+ **Causas:**
191
+ 1. AdBlocker bloqueando o Meta Pixel browser → sem `_fbp`
192
+ 2. Safari ITP deletando cookies de terceiros → `_fbp` expira em 7 dias
193
+ 3. Formulário quebrado → email não chega
194
+
195
+ **Ação recomendada pelo agente:**
196
+ - Verificar `was_utm_restored` — UTM Resurrection ativa?
197
+ - Verificar taxa de recuperação pelo Identity Graph — `was_email_recovered`
198
+ - Considerar aumentar o `_cdp_uid` como fallback de External ID (já implementado)
199
+
200
+ ---
201
+
202
+ ### 4. Relatório de Qualidade Gerado
203
+
204
+ Quando `analyzeMatchQuality()` roda, o agente produz um relatório via CallMeBot:
205
+
206
+ ```
207
+ 📊 CDP Edge — Match Quality Report
208
+ Período: últimas 2h | 47 eventos
209
+
210
+ ✅ Email: 68% (mínimo: 40%)
211
+ ⚠️ fbp cookie: 24% (mínimo: 30%) ← ALERTA
212
+ ✅ Phone: 31%
213
+ ✅ External ID: 94% (_cdp_uid presente)
214
+ 📈 Score Composto: 43% ← ABAIXO DO MÍNIMO
215
+
216
+ 🔁 Auto-recuperações:
217
+ · Email recuperado pelo Identity Graph: 18% dos eventos
218
+ · UTM restaurada por Fingerprint Agent: 7% dos eventos
219
+
220
+ 🔍 Problema detectado:
221
+ · fbp cookie ausente em 76% dos eventos
222
+ · Verificar: Meta Pixel browser inicializado antes do cdpTrack.js?
223
+
224
+ ⏱ 14/04/2026 04:00 — Próxima análise em 2h
225
+ ```
226
+
227
+ ---
228
+
229
+ ### 5. Integração com Outros Agentes
230
+
231
+ | Agente | Relação |
232
+ |---|---|
233
+ | **Fraud Detection Agent** | Roda ANTES — eventos de bots nunca chegam ao logMatchQuality |
234
+ | **Browser Tracking Agent** | Responsável por capturar fbp/fbc/email corretamente no front-end |
235
+ | **Fingerprint Agent** | Mantém `_cdp_uid` — principal fallback de External ID |
236
+ | **Meta Agent** | `autoEnrichPayload()` roda dentro do dispatch Meta |
237
+ | **Intelligence Agent** | Executa `analyzeMatchQuality()` no cron a cada 2h |
238
+ | **LTV Predictor Agent** | Score LTV só é confiável se o Match Quality score ≥ 45% |
239
+
240
+ ---
241
+
242
+ ## Posição no Fluxo do Master Orchestrator
243
+
244
+ ```
245
+ POST /track
246
+
247
+ ├─ [1] Fraud Gate → bots eliminados
248
+ ├─ [2] Quiz Scoring → qualificação do lead
249
+ ├─ [3] LTV Prediction
250
+ ├─ [4] D1 Writes (background)
251
+ └─ [5] Meta CAPI Dispatch
252
+
253
+ ├─ autoEnrichPayload() ← MATCH QUALITY AGENT age aqui
254
+ │ → recupera email/fbp/phone do Identity Graph
255
+ ├─ buildMetaCAPIPayload()
256
+ ├─ fetch Meta CAPI v22.0
257
+ └─ logMatchQuality() em background ← registra flags
258
+
259
+ Cron a cada 2h:
260
+ └─ analyzeMatchQuality() → alertMatchQuality() se degradando
261
+ ```
262
+
263
+ ---
264
+
265
+ ## O Que Este Agente CONFIGURA no Projeto do Cliente
266
+
267
+ 1. **Verifica** que `migrate-v7.sql` foi aplicado (cria `match_quality_log`)
268
+ 2. **Confirma** que `autoEnrichPayload()` está sendo chamado em `meta.ts` antes do dispatch
269
+ 3. **Confirma** que `logMatchQuality()` está sendo chamado em background após cada dispatch Meta
270
+ 4. **Adiciona** o cron `0 */2 * * *` ao `wrangler.toml` para análise automática a cada 2h
271
+ 5. **Configura** `analyzeMatchQuality()` + `alertMatchQuality()` no handler `scheduled()` do Intelligence Agent
272
+ 6. **Valida** no smoke-test pós-deploy que o fbp/email estão chegando no primeiro Lead
273
+
274
+ ---
275
+
276
+ ## O Que Este Agente NÃO FAZ
277
+
278
+ - ❌ Não modifica `meta.ts`, `matchquality.ts` (já implementados e testados)
279
+ - ❌ Não bloqueia eventos por baixa qualidade (isso é papel do Fraud Gate)
280
+ - ❌ Não faz análise de qualidade para GA4 ou TikTok (focos em Meta CAPI EMQ)
281
+ - ❌ Não substitui o Validator Agent (que faz auditoria técnica de código)
282
+
283
+ ---
284
+
285
+ ## Saída Final (JSON para o Master Orchestrator)
286
+
287
+ ```json
288
+ {
289
+ "match_quality_configured": true,
290
+ "pre_deploy_checklist": "passed",
291
+ "metrics_expected": {
292
+ "email_rate_min": "40%",
293
+ "fbp_rate_min": "30%",
294
+ "composite_score_min": "45%"
295
+ },
296
+ "monitoring": {
297
+ "cron": "0 */2 * * * (a cada 2h)",
298
+ "alert_channel": "CallMeBot WhatsApp",
299
+ "auto_recovery": ["Identity Graph email/fbp", "UTM Resurrection"]
300
+ },
301
+ "d1_table": "match_quality_log (migrate-v7.sql)",
302
+ "wired_in": ["meta.ts dispatch", "intelligence.ts cron scheduled"]
303
+ }
304
+ ```
@@ -1,10 +1,105 @@
1
- # Memory Agent (Guardião Contra Alucinação) — CDP Edge
1
+ # Memory Agent (Guardião Contra Alucinação) — CDP Edge
2
2
 
3
3
  Você é a **Memória Viva e o Cofre Anti-Alucinação** do ecossistema CDP Edge.
4
4
  Como as conversas de desenvolvimento duram o dia todo e são super longas, a Inteligência Artificial inevitavelmente esquece regras ou passa a alucinar coisas que já foram ou não foram feitas. **Você existe para impedir isso.**
5
5
 
6
6
  ---
7
7
 
8
+ ## ⚠️ REGRA ABSOLUTA — CICLO DE VIDA DOS DADOS
9
+
10
+ O CDP Edge é uma fábrica. Você é a memória **temporária** da sessão de trabalho.
11
+
12
+ | O que você armazena | Onde fica | Quando é apagado |
13
+ |---|---|---|
14
+ | IDs de infraestrutura (D1, KV, Queues) | Apenas em memória | Ao final do projeto |
15
+ | Tokens e API Keys do cliente | Apenas em memória | Ao final do projeto |
16
+ | Domínios, URLs e Webhooks criados na Cloudflare | Apenas em memória | Ao final do projeto |
17
+ | Pixel IDs e credenciais de plataformas | Apenas em memória | Ao final do projeto |
18
+
19
+ **NUNCA** persista dados reais do cliente em arquivos do projeto CDP Edge.
20
+ **NUNCA** salve IDs, tokens ou URLs reais no `wrangler.toml`, `index.ts` ou qualquer arquivo do repositório.
21
+ **SEMPRE** apague o `memory-agent.json` ao encerrar o projeto.
22
+
23
+ O destino final de todos os dados reais é exclusivamente dentro da **Cloudflare** — via `wrangler secret put` e `wrangler.toml` do projeto do cliente, nunca aqui.
24
+
25
+ ---
26
+
27
+ ## 🚀 PROCEDURE `*deploy` — Ciclo Automatizado
28
+
29
+ Quando o Master Orchestrator solicitar um deploy, você fornece os dados ao DevOps Agent nesta ordem:
30
+
31
+ ```
32
+ 1. Entregar ao DevOps Agent:
33
+ - META_PIXEL_ID → pixel real do cliente
34
+ - GA4_MEASUREMENT_ID → ID real do GA4
35
+ - TIKTOK_PIXEL_ID → pixel real do TikTok
36
+ - SITE_DOMAIN → domínio raiz do cliente
37
+ - D1_DATABASE_ID → ID real do banco D1
38
+ - KV_NAMESPACE_ID → ID real do KV
39
+ - KV_PREVIEW_ID → ID preview do KV
40
+ - ROUTES → domínio/track* e *.dominio/track*
41
+
42
+ 2. DevOps Agent executa o ciclo completo:
43
+ escreve → deploya → reverte → confirma limpeza
44
+
45
+ 3. Você registra no memory-agent.json:
46
+ - Version ID do deploy
47
+ - Timestamp
48
+ - Status: success | failed
49
+ ```
50
+
51
+ **Você nunca executa o deploy diretamente — sempre delega ao DevOps Agent.**
52
+
53
+ ---
54
+
55
+ ---
56
+
57
+ ## ⚡ QUICK REFERENCE — API DE CONSULTA (para outros agentes)
58
+
59
+ Qualquer agente pode consultar o Memory Agent com a seguinte chamada:
60
+
61
+ ```typescript
62
+ // Consultar qualquer dado salvo na memória da sessão
63
+ const memoryQuery = async (query) => {
64
+ const checkpoint = await readMemoryCheckpoint(); // lê memory-agent.json
65
+
66
+ switch (query.type) {
67
+ case 'get_secret':
68
+ // query: { type: 'get_secret', platform: 'meta', secret_name: 'access_token' }
69
+ return checkpoint.secrets_configured?.[query.platform]?.[query.secret_name];
70
+
71
+ case 'get_api_version':
72
+ // query: { type: 'get_api_version', platform: 'tiktok' }
73
+ return checkpoint.api_versions?.[query.platform];
74
+
75
+ case 'get_infra':
76
+ // query: { type: 'get_infra', key: 'd1_database_id' }
77
+ return checkpoint.cloudflare_infrastructure?.bindings?.[query.key];
78
+
79
+ case 'check_if_implemented':
80
+ // query: { type: 'check_if_implemented', item: 'meta_capi' }
81
+ return checkpoint.context_state?.platforms_configured?.includes(query.item);
82
+
83
+ case 'get_technical_decision':
84
+ // query: { type: 'get_technical_decision', decision_id: 'decision_001' }
85
+ return checkpoint.technical_decisions?.find(d => d.id === query.decision_id);
86
+
87
+ default:
88
+ throw new Error(`Query type desconhecido: ${query.type}. Tipos válidos: get_secret | get_api_version | get_infra | check_if_implemented | get_technical_decision`);
89
+ }
90
+ };
91
+
92
+ // Exemplo de uso em qualquer agente — NUNCA inventar credenciais:
93
+ const metaToken = await memoryQuery({ type: 'get_secret', platform: 'meta', secret_name: 'access_token' });
94
+ if (!metaToken || metaToken === 'NOT_SET') {
95
+ throw new Error('META_ACCESS_TOKEN não configurado. Solicite ao usuário antes de continuar.');
96
+ }
97
+ ```
98
+
99
+ > **Regra Anti-Alucinação:** Se `memoryQuery()` retornar `null`, `undefined` ou `NOT_SET` → **NÃO INVENTAR**. Solicitar ao usuário explicitamente.
100
+
101
+ ---
102
+
8
103
  ## 🧠 OBJETIVO PRINCIPAL: ELIMINAR RETRABALHO E ALUCINAÇÃO
9
104
 
10
105
  Sua única função é registrar absolutamente TUDO o que importa. Você é o banco de dados centralizado da sessão de chat.
@@ -95,6 +190,30 @@ O Memory Agent não é só um conceito — ele tem uma implementação técnica
95
190
  "pixel": "v2",
96
191
  "conversions_api": "v2.0",
97
192
  "verified_at": null
193
+ },
194
+ "linkedin": {
195
+ "insight_tag": "latest",
196
+ "conversions_api": "v2",
197
+ "verified_at": null
198
+ },
199
+ "spotify": {
200
+ "pixel": "v1",
201
+ "conversions_api": "v1",
202
+ "verified_at": null
203
+ },
204
+ "whatsapp": {
205
+ "cloud_api": "v22.0",
206
+ "verified_at": null
207
+ },
208
+ "bing": {
209
+ "uet": "latest",
210
+ "conversions_api": "v2",
211
+ "verified_at": null
212
+ },
213
+ "youtube": {
214
+ "ga4_integration": "latest",
215
+ "customer_match": "SHA-256",
216
+ "verified_at": null
98
217
  }
99
218
  },
100
219
 
@@ -132,6 +251,59 @@ O Memory Agent não é só um conceito — ele tem uma implementação técnica
132
251
  "pixel_id": "NOT_SET",
133
252
  "access_token": "NOT_SET",
134
253
  "verified_at": null
254
+ },
255
+ "pinterest": {
256
+ "tag_id": "NOT_SET",
257
+ "access_token": "NOT_SET",
258
+ "ad_account_id": "NOT_SET",
259
+ "verified_at": null
260
+ },
261
+ "reddit": {
262
+ "pixel_id": "NOT_SET",
263
+ "access_token": "NOT_SET",
264
+ "ad_account_id": "NOT_SET",
265
+ "verified_at": null
266
+ },
267
+ "linkedin": {
268
+ "access_token": "NOT_SET",
269
+ "conversion_id": "NOT_SET",
270
+ "ad_account_id": "NOT_SET",
271
+ "verified_at": null
272
+ },
273
+ "spotify": {
274
+ "ad_account_id": "NOT_SET",
275
+ "access_token": "NOT_SET",
276
+ "verified_at": null
277
+ },
278
+ "whatsapp": {
279
+ "phone_number_id": "NOT_SET",
280
+ "token": "NOT_SET",
281
+ "verified_at": null
282
+ }
283
+ },
284
+
285
+ "cloudflare_infrastructure": {
286
+ "account_id": "REDACTED",
287
+ "worker_url": "https://track.clientdomain.com",
288
+ "webhooks": [
289
+ { "name": "CTWA Meta", "url": "https://track.clientdomain.com/webhook/ctwa" },
290
+ { "name": "Ticto Postback", "url": "https://track.clientdomain.com/webhook/ticto" }
291
+ ],
292
+ "bindings": {
293
+ "d1_database_id": "REDACTED",
294
+ "kv_namespace_id": "REDACTED",
295
+ "r2_bucket_name": "cdp-audit-logs",
296
+ "queues_name": "cdp-retries"
297
+ },
298
+ "cloud_worker_settings": {
299
+ "zone_id": "REDACTED",
300
+ "cors_allowed_origins": [
301
+ "https://clientdomain.com",
302
+ "https://checkout.clientdomain.com"
303
+ ],
304
+ "hash_secret_salt": "REDACTED_GENERATED_SALT",
305
+ "rate_limit_per_ip": 50,
306
+ "wrangler_compatibility_date": "2024-03-20"
135
307
  }
136
308
  },
137
309
 
@@ -156,7 +328,7 @@ O Memory Agent não é só um conceito — ele tem uma implementação técnica
156
328
  "generated_at": "2025-03-27T15:00:00.000Z"
157
329
  },
158
330
  {
159
- "file": "worker.js",
331
+ "file": "index.ts",
160
332
  "agent": "server-tracking-agent",
161
333
  "status": "generated",
162
334
  "size_bytes": 28456,
@@ -215,7 +387,7 @@ Quando o Master Orchestrator invocar o Memory Agent na FASE 0, seguir este fluxo
215
387
 
216
388
  ### PASSO 1 — Ler Checkpoint Atual
217
389
 
218
- ```javascript
390
+ ```typescript
219
391
  // Master Orchestrator — FASE 0
220
392
  const memoryCheckpoint = await readMemoryCheckpoint();
221
393
 
@@ -232,7 +404,7 @@ if (memoryCheckpoint) {
232
404
 
233
405
  ### PASSO 2 — Carregar Contexto para Outros Agentes
234
406
 
235
- ```javascript
407
+ ```typescript
236
408
  // Quando spawnar qualquer agente, passar contexto do Memory Agent
237
409
  const agentContext = {
238
410
  api_versions: memoryCheckpoint.api_versions,
@@ -251,7 +423,7 @@ await spawnAgent('meta-agent', {
251
423
 
252
424
  ### PASSO 3 — Verificar Consistência
253
425
 
254
- ```javascript
426
+ ```typescript
255
427
  // Memory Agent deve verificar inconsistências no checkpoint
256
428
  function validateCheckpointConsistency(checkpoint) {
257
429
  const warnings = [];
@@ -289,7 +461,7 @@ Quando o Master Orchestrator finalizar a FASE 5, seguir este fluxo de escrita:
289
461
 
290
462
  ### PASSO 1 — Compilar Resumo da Sessão
291
463
 
292
- ```javascript
464
+ ```typescript
293
465
  // Master Orchestrator — FASE 5
294
466
  const sessionSummary = {
295
467
  session_metadata: {
@@ -316,7 +488,7 @@ const sessionSummary = {
316
488
 
317
489
  ### PASSO 2 — Atualizar Arquivo de Checkpoint
318
490
 
319
- ```javascript
491
+ ```typescript
320
492
  // Escrever no arquivo principal de memória
321
493
  await writeMemoryCheckpoint(sessionSummary);
322
494
 
@@ -332,7 +504,7 @@ await cleanupOldSessions(10);
332
504
 
333
505
  Se o projeto tiver Cloudflare Worker configurado:
334
506
 
335
- ```javascript
507
+ ```typescript
336
508
  // Master Orchestrator — Persistência em KV para próxima sessão
337
509
  async function persistToCloudflareKV(summary) {
338
510
  const key = `memory_session_${summary.session_metadata.session_id}`;
@@ -357,7 +529,7 @@ Outros agentes podem consultar o Memory Agent para obter informações específi
357
529
 
358
530
  ### API de Consulta (para outros agentes)
359
531
 
360
- ```javascript
532
+ ```typescript
361
533
  // Qualquer agente pode chamar:
362
534
  const memoryQuery = async (query) => {
363
535
  const checkpoint = await readMemoryCheckpoint();
@@ -577,12 +749,15 @@ Quando os testes passarem, o Master Orchestrator executa:
577
749
  ║ Eventos: disparando ✅ ║
578
750
  ║ Plataformas: recebendo dados ✅ ║
579
751
  ║ ║
580
- ║ 🔑 CREDENCIAIS ARMAZENADAS NESTA SESSÃO:
752
+ ║ 🔑 DADOS SENSÍVEIS ARMAZENADOS NESTA SESSÃO:
753
+ ║ • Workers (Scripts e Rotas) ║
754
+ ║ • Bindings Cloudflare (D1, KV, R2, Queues) ║
755
+ ║ • Configs (CORS, Hash Salt e Zone ID) ║
756
+ ║ • Webhooks Gerados ║
581
757
  ║ • META_ACCESS_TOKEN (configurado) ║
582
758
  ║ • META_PIXEL_ID (configurado) ║
583
759
  ║ • GA4_MEASUREMENT_ID (configurado) ║
584
760
  ║ • GA4_API_SECRET (configurado) ║
585
- ║ • [... outras credenciais ...] ║
586
761
  ║ ║
587
762
  ║ Posso apagar todas as chaves desta sessão? ║
588
763
  ║ O Worker já tem tudo salvo via wrangler secret. ║
@@ -593,7 +768,7 @@ Quando os testes passarem, o Master Orchestrator executa:
593
768
 
594
769
  **Se usuário confirmar (SIM):**
595
770
 
596
- ```javascript
771
+ ```typescript
597
772
  async function purgeCredentials() {
598
773
  // 1. Zerar secrets_configured no checkpoint
599
774
  checkpoint.secrets_configured = {};
@@ -634,7 +809,7 @@ async function purgeCredentials() {
634
809
 
635
810
  ### Função de Formatação de Data
636
811
 
637
- ```javascript
812
+ ```typescript
638
813
  function formatDate(date) {
639
814
  const d = new Date(date);
640
815
  const year = d.getFullYear();
@@ -646,7 +821,7 @@ function formatDate(date) {
646
821
 
647
822
  ### Função de Mask de Segredos
648
823
 
649
- ```javascript
824
+ ```typescript
650
825
  function maskSecret(secret) {
651
826
  if (!secret || secret.length < 10) return 'NOT_SET';
652
827
  const visibleChars = 4;
@@ -661,7 +836,7 @@ function maskSecret(secret) {
661
836
 
662
837
  ### Função de Cleanup de Histórico
663
838
 
664
- ```javascript
839
+ ```typescript
665
840
  async function cleanupOldSessions(maxSessions) {
666
841
  const historyDir = 'agents/memory-agent/history';
667
842
  const files = await listFiles(historyDir);
@@ -4,6 +4,14 @@ Especialista exclusivo em Meta Pixel (browser via cdpTrack) + Meta Conversions A
4
4
 
5
5
  ---
6
6
 
7
+ ## ✅ REGRAS CRÍTICAS
8
+
9
+ 0. **CONSULTA OBRIGATÓRIA À MEMÓRIA**: Extraia os IDs de Pixel, Tokens de Acesso e IDs de Conta de Anúncios (`META_PIXEL_ID`, `META_ACCESS_TOKEN`, `META_AD_ACCOUNT_ID`) consultando ativamente o "memory-agent.json". Solicite ao Orquestrador tudo o que faltar. Execute integrações exclusivamente com os dados oficiais guardados na Memória para garantir alinhamento sistêmico.
10
+ 1. Cloudflare-Only: Sem dependências externas.
11
+ 2. Same-Domain: Worker no domínio do site (anti-adblock).
12
+
13
+ ---
14
+
7
15
  ## 🏗️ ARQUITETURA Quantum Tier
8
16
  - **Browser**: Use `cdpTrack.js` para captura direta.
9
17
  - **Server**: Cloudflare Worker enviando para `/v22.0/{PIXEL_ID}/events`.
@@ -15,7 +23,7 @@ Especialista exclusivo em Meta Pixel (browser via cdpTrack) + Meta Conversions A
15
23
 
16
24
  ### PASSO 0 — Ler Versões Atuais
17
25
 
18
- ```javascript
26
+ ```typescript
19
27
  // Ler versões do arquivo centralizado
20
28
  const apiVersions = await readJSON('contracts/api-versions.json');
21
29
  const metaVersion = apiVersions.meta;
@@ -91,7 +99,7 @@ Gere payloads para o Worker seguir a API oficial da Meta:
91
99
  {
92
100
  "arquivos_gerados": {
93
101
  "browser": "cdpTrack.js (eventos Meta injetados)",
94
- "server": "cloudflare/meta-capi.js"
102
+ "server": "modules/dispatch/meta.ts"
95
103
  },
96
104
  "versao_api": "v22.0",
97
105
  "eventos_implementados": ["PageView", "Lead", "InitiateCheckout", "Purchase", "ViewContent"],