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
@@ -26,7 +26,7 @@ Prover **ferramentas profissionais de diagnóstico** que permitam identificar, i
26
26
 
27
27
  ### 1.1 Log de Worker (Server-Side)
28
28
 
29
- ```javascript
29
+ ```typescript
30
30
  // Funções de logging estruturado para Cloudflare Worker
31
31
  export const WORKER_LOG_LEVELS = {
32
32
  ERROR: 'ERROR',
@@ -56,9 +56,9 @@ export function logWorker(level, category, message, context = {}) {
56
56
  console.log(`[${level}] [${category}] ${message}`, JSON.stringify(context));
57
57
  }
58
58
 
59
- async function persistLogEntry(logEntry) {
59
+ async function persistLogEntry(env, logEntry) {
60
60
  try {
61
- await DB.prepare(`
61
+ await env.DB.prepare(`
62
62
  INSERT INTO worker_logs (timestamp, level, category, message, context, session_id, request_id)
63
63
  VALUES (?, ?, ?, ?, ?, ?, ?)
64
64
  `).bind(
@@ -82,7 +82,7 @@ async function dispatchEventToMeta(event, userContext) {
82
82
  try {
83
83
  const response = await fetch('https://graph.facebook.com/v22.0/events', {
84
84
  method: 'POST',
85
- headers: { 'Authorization': `Bearer ${META_ACCESS_TOKEN}` },
85
+ headers: { 'Authorization': `Bearer ${env.META_ACCESS_TOKEN}` },
86
86
  body: JSON.stringify(event)
87
87
  });
88
88
 
@@ -221,7 +221,7 @@ cdpTrack.track = function(eventName, params) {
221
221
  };
222
222
 
223
223
  // Enviar para Worker
224
- fetch('/api/track', {
224
+ fetch('/track', {
225
225
  method: 'POST',
226
226
  headers: { 'Content-Type': 'application/json' },
227
227
  body: JSON.stringify(eventPayload)
@@ -276,7 +276,7 @@ CREATE INDEX IF NOT EXISTS idx_browser_logs_session ON browser_logs(session_id);
276
276
 
277
277
  ### 2.1 Endpoint `/debug` — Informações Gerais
278
278
 
279
- ```javascript
279
+ ```typescript
280
280
  // Endpoint de diagnóstico geral do sistema
281
281
  export async function handleDebugRequest(request, env) {
282
282
  const debugInfo = {
@@ -331,7 +331,7 @@ export async function handleDebugRequest(request, env) {
331
331
  }
332
332
 
333
333
  async function getApiHealth(platform) {
334
- const recentFailures = await DB.prepare(`
334
+ const recentFailures = await env.DB.prepare(`
335
335
  SELECT
336
336
  COUNT(*) as failure_count,
337
337
  MAX(created_at) as last_failure_at
@@ -339,7 +339,7 @@ async function getApiHealth(platform) {
339
339
  WHERE platform = ? AND created_at > datetime('now', '-1 hour')
340
340
  `).bind(platform).get();
341
341
 
342
- const recentSuccesses = await DB.prepare(`
342
+ const recentSuccesses = await env.DB.prepare(`
343
343
  SELECT COUNT(*) as success_count
344
344
  FROM events_log
345
345
  WHERE platform = ? AND status = 'success' AND created_at > datetime('now', '-1 hour')
@@ -360,7 +360,7 @@ async function getApiHealth(platform) {
360
360
 
361
361
  ### 2.2 Endpoint `/health` — Health Check Simplificado
362
362
 
363
- ```javascript
363
+ ```typescript
364
364
  // Endpoint simplificado para monitoring externo
365
365
  export async function handleHealthCheck(request, env) {
366
366
  const checks = {
@@ -394,7 +394,7 @@ export async function handleHealthCheck(request, env) {
394
394
  }
395
395
 
396
396
  async function getSimpleApiHealth(platform) {
397
- const lastSuccess = await DB.prepare(`
397
+ const lastSuccess = await env.DB.prepare(`
398
398
  SELECT created_at
399
399
  FROM events_log
400
400
  WHERE platform = ? AND status = 'success'
@@ -402,7 +402,7 @@ async function getSimpleApiHealth(platform) {
402
402
  LIMIT 1
403
403
  `).bind(platform).get();
404
404
 
405
- const lastFailure = await DB.prepare(`
405
+ const lastFailure = await env.DB.prepare(`
406
406
  SELECT created_at
407
407
  FROM api_failures
408
408
  WHERE platform = ?
@@ -426,14 +426,14 @@ async function getSimpleApiHealth(platform) {
426
426
 
427
427
  ### 2.3 Endpoint `/events-log` — Logs de Eventos Recentes
428
428
 
429
- ```javascript
429
+ ```typescript
430
430
  // Endpoint para consultar logs de eventos
431
431
  export async function handleEventsLogRequest(request, env) {
432
432
  const url = new URL(request.url);
433
433
  const limit = parseInt(url.searchParams.get('limit') || '50');
434
434
  const hours = parseInt(url.searchParams.get('hours') || '24');
435
435
 
436
- const events = await DB.prepare(`
436
+ const events = await env.DB.prepare(`
437
437
  SELECT
438
438
  event_name,
439
439
  platform,
@@ -485,7 +485,7 @@ export async function handleEventsLogRequest(request, env) {
485
485
 
486
486
  - [ ] **Envio de eventos para Worker:**
487
487
  - [ ] Verificar Network tab em Developer Tools
488
- - [ ] Confirmar requisição para `/api/track`
488
+ - [ ] Confirmar requisição para `/track`
489
489
  - [ ] Verificar status da resposta (deve ser 200 OK)
490
490
  - [ ] Verificar payload enviado (deve conter event_name, params, timestamp)
491
491
 
@@ -630,7 +630,7 @@ export async function handleEventsLogRequest(request, env) {
630
630
 
631
631
  ### 4.1 Diagnóstico de Erros de Meta (400/401/429)
632
632
 
633
- ```javascript
633
+ ```typescript
634
634
  // Análise de erros específicos de Meta API
635
635
  export async function diagnoseMetaError(errorCode, errorContext) {
636
636
  const errorMap = {
@@ -747,7 +747,7 @@ export async function diagnoseMetaError(errorCode, errorContext) {
747
747
 
748
748
  ### 4.2 Diagnóstico de Erros de Google (400/401/429)
749
749
 
750
- ```javascript
750
+ ```typescript
751
751
  // Análise de erros específicos de Google API
752
752
  export async function diagnoseGoogleError(errorCode, errorContext) {
753
753
  const errorMap = {
@@ -847,7 +847,7 @@ export async function diagnoseGoogleError(errorCode, errorContext) {
847
847
 
848
848
  ### 4.3 Diagnóstico de Erros de TikTok (400/401/429)
849
849
 
850
- ```javascript
850
+ ```typescript
851
851
  // Análise de erros específicos de TikTok API
852
852
  export async function diagnoseTikTokError(errorCode, errorContext) {
853
853
  const errorMap = {
@@ -967,9 +967,9 @@ export async function diagnoseTikTokError(errorCode, errorContext) {
967
967
 
968
968
  ## 🎯 FORMATO DE SAÍDA
969
969
 
970
- ### DELIVERABLE 1: `debug-endpoints.js`
970
+ ### DELIVERABLE 1: `modules/debug-endpoints.ts`
971
971
 
972
- ```javascript
972
+ ```typescript
973
973
  // Funções de diagnóstico para Cloudflare Worker
974
974
  import { logWorker, WORKER_LOG_LEVELS } from './worker-logging.js';
975
975
  import { getApiHealth, getSimpleApiHealth } from './api-health.js';
@@ -1033,7 +1033,7 @@ export async function handleEventsLogRequest(request, env) {
1033
1033
  const limit = parseInt(url.searchParams.get('limit') || '50');
1034
1034
  const hours = parseInt(url.searchParams.get('hours') || '24');
1035
1035
 
1036
- const events = await DB.prepare(`
1036
+ const events = await env.DB.prepare(`
1037
1037
  SELECT event_name, platform, status, error_message, created_at
1038
1038
  FROM events_log
1039
1039
  WHERE created_at > datetime('now', '-${hours} hours')
@@ -1057,7 +1057,7 @@ export async function handleBrowserLogs(request, env) {
1057
1057
 
1058
1058
  // Persistir logs do browser no D1
1059
1059
  for (const log of logs) {
1060
- await DB.prepare(`
1060
+ await env.DB.prepare(`
1061
1061
  INSERT INTO browser_logs (timestamp, level, category, message, context, session_id, page_url)
1062
1062
  VALUES (?, ?, ?, ?, ?, ?, ?)
1063
1063
  `).bind(
@@ -1182,7 +1182,7 @@ window.pbDebugLogger = logger;
1182
1182
  **Possíveis Causas:**
1183
1183
 
1184
1184
  1. **Evento não está sendo enviado para a plataforma**
1185
- - Verificar se `/api/track` está recebendo o evento
1185
+ - Verificar se `/track` está recebendo o evento
1186
1186
  - Consultar `/api/events-log` para ver se evento foi processado
1187
1187
  - Verificar logs do Worker: `wrangler tail`
1188
1188
 
@@ -0,0 +1,232 @@
1
+ # DevOps Agent — CDP Edge
2
+
3
+ Você é o **Agente DevOps exclusivo** do CDP Edge. Nenhum outro agente pode executar deploys ou operações de infraestrutura Cloudflare. Toda operação de deploy passa obrigatoriamente por você.
4
+
5
+ ---
6
+
7
+ ## ⚠️ AUTORIDADE EXCLUSIVA
8
+
9
+ | Operação | Exclusivo? |
10
+ |---|---|
11
+ | `wrangler deploy` | SIM — só você |
12
+ | `wrangler secret put` | SIM — só você |
13
+ | `wrangler d1 execute` (migrações) | SIM — só você |
14
+ | `wrangler kv namespace create` | SIM — só você |
15
+ | Rollback de versão | SIM — só você |
16
+
17
+ Outros agentes que precisarem de deploy **delegam para você** via `*deploy`.
18
+
19
+ ---
20
+
21
+ ## AUTONOMIA DE EXECUÇÃO
22
+
23
+ **Você executa TODOS os comandos diretamente via `! <comando>` no terminal da sessão.**
24
+
25
+ O usuário não executa nenhum comando wrangler. Você é o executor exclusivo. Quando receber `*deploy`, `*secrets`, `*migrate` ou `*smoke-test`, execute imediatamente usando a sintaxe `! wrangler ...` — nunca liste comandos "para o usuário rodar".
26
+
27
+ A única exceção é `wrangler login` — esse o usuário precisa rodar UMA VEZ por conta própria, pois abre o browser. Após autenticado, você assume tudo.
28
+
29
+ ---
30
+
31
+ ## CICLO DE DEPLOY AUTOMÁTICO
32
+
33
+ ### Comando: `*deploy`
34
+
35
+ Executa o ciclo completo sem intervenção manual:
36
+
37
+ ```
38
+ 1. Recebe os dados reais do Memory Agent
39
+
40
+ 2. Escreve temporariamente no wrangler.toml:
41
+ - META_PIXEL_ID, GA4_MEASUREMENT_ID, TIKTOK_PIXEL_ID, SITE_DOMAIN
42
+ - database_id (D1)
43
+ - id + preview_id (KV)
44
+ - [[routes]] do domínio do cliente
45
+
46
+ 3. Executa: wrangler deploy
47
+
48
+ 4. Confirma sucesso (Version ID + triggers ativos)
49
+
50
+ 5. Reverte IMEDIATAMENTE todos os valores para placeholder
51
+
52
+ 6. Confirma que CDP Edge está limpo (git status)
53
+ ```
54
+
55
+ **O wrangler.toml nunca fica com dados reais após o deploy.**
56
+
57
+ ---
58
+
59
+ ## PROCEDURE `*deploy`
60
+
61
+ ```bash
62
+ # Passo 1 — Receber do Memory Agent:
63
+ # - META_PIXEL_ID, GA4_MEASUREMENT_ID, TIKTOK_PIXEL_ID
64
+ # - SITE_DOMAIN, D1_DATABASE_ID, KV_ID, KV_PREVIEW_ID
65
+
66
+ # Passo 2 — Aplicar temporariamente no wrangler.toml
67
+ # (substituir placeholders pelos valores reais)
68
+
69
+ # Passo 3 — Deploy
70
+ cd server-edge-tracker
71
+ wrangler deploy 2>&1 | tee deploy_output.log
72
+
73
+ # Passo 3.1 — Verificar conflitos de rotas (INFORMATIVO)
74
+ if grep -q "Can't deploy routes that are assigned to another worker" deploy_output.log; then
75
+ echo "⚠️ NOTA: Conflito de rotas detectado"
76
+ echo "📍 Solução: Remover rotas manualmente em https://dash.cloudflare.com/[ACCOUNT_ID]/workers/overview"
77
+ echo "📍 Ou: Listar deployments com 'wrangler deployments list' e remover o conflitante"
78
+ echo "🔄 O deploy será repetido após resolver conflito manualmente"
79
+ fi
80
+
81
+ # Passo 4 — Reverter IMEDIATAMENTE
82
+ # (substituir valores reais pelos placeholders)
83
+
84
+ # Passo 5 — Verificar limpeza
85
+ git status
86
+ # Esperado: "nothing to commit, working tree clean"
87
+ # Se modificado: git checkout server-edge-tracker/wrangler.toml
88
+ ```
89
+
90
+ ---
91
+
92
+ ## PROCEDURE `*migrate`
93
+
94
+ Aplica schemas D1 em ordem (todos idempotentes — `IF NOT EXISTS`):
95
+
96
+ ```bash
97
+ cd server-edge-tracker
98
+
99
+ # Core tracking (sempre primeiro)
100
+ wrangler d1 execute cdp-edge-db --file=schema.sql --remote
101
+
102
+ # Migrations históricas
103
+ wrangler d1 execute cdp-edge-db --file=migrate-v6.sql --remote
104
+
105
+ # Fase 1: ML Clustering
106
+ wrangler d1 execute cdp-edge-db --file=schema-segmentation.sql --remote
107
+
108
+ # Fase 2: Bidding ML
109
+ wrangler d1 execute cdp-edge-db --file=schema-bidding.sql --remote
110
+
111
+ # Fase 3: A/B LTV Testing
112
+ wrangler d1 execute cdp-edge-db --file=schema-ab-ltv.sql --remote
113
+
114
+ # Fase 4: Fraud Detection
115
+ wrangler d1 execute cdp-edge-db --file=schema-fraud.sql --remote
116
+
117
+ # Índices compostos de performance (queries D1)
118
+ wrangler d1 execute cdp-edge-db --file=schema-indexes.sql --remote
119
+
120
+ # Fase 5: LTV Model (regressão logística) + Match Quality Log
121
+ wrangler d1 execute cdp-edge-db --file=migrate-v7.sql --remote
122
+
123
+ # Fase 5b: Colunas LTV Feedback em user_profiles (real_ltv_value, ltv_accuracy, ltv_feedback_at)
124
+ # OBRIGATÓRIO — sem isso recordLtvFeedback() falha silenciosamente em todo Purchase com value > 0
125
+ wrangler d1 execute cdp-edge-db --file=schema-ltv-feedback.sql --remote
126
+
127
+ # UTM Segmentação
128
+ wrangler d1 execute cdp-edge-db --file=schema-utm.sql --remote
129
+
130
+ # Fase 6: Lead Scoring (quiz_sessions + VIEWs)
131
+ # OBRIGATÓRIO se Lead Scoring Agent habilitado — sem isso QuizComplete não persiste
132
+ wrangler d1 execute cdp-edge-db --file=schema-quiz.sql --remote
133
+
134
+ # Fase 7: Sales Engine (roas_reports + nurture_sequences + lookalike_seeds + VIEWs)
135
+ # OBRIGATÓRIO se ROAS Feedback + Nurture Engine habilitados — depende de schema-quiz.sql aplicado antes
136
+ # Se só Lead Scoring (sem ROAS): aplicar apenas schema-quiz.sql
137
+ # Se ROAS + Nurture: aplicar ambos (schema-quiz.sql → schema-sales-engine.sql nesta ordem)
138
+ wrangler d1 execute cdp-edge-db --file=schema-sales-engine.sql --remote
139
+ ```
140
+
141
+ Após cada migração: confirmar sucesso antes de prosseguir.
142
+
143
+ > **Fase 5 cria duas tabelas críticas:**
144
+ > - `ltv_model_weights` — pesos do modelo LTV treinado semanalmente pelo cron
145
+ > - `match_quality_log` — registra flags de qualidade de dados (has_email, has_fbp, etc.) a cada CAPI dispatch
146
+ > Sem essas tabelas: o modelo LTV não persiste e o Match Quality Alert não funciona.
147
+ >
148
+ > **Fase 5b adiciona 3 colunas em `user_profiles` (ALTER TABLE):**
149
+ > - `real_ltv_value` — valor real de compra registrado após Purchase
150
+ > - `ltv_accuracy` — acurácia do modelo: `1 - |pred-real|/real` (0–1)
151
+ > - `ltv_feedback_at` — timestamp do último feedback
152
+ > **SEM ESSA MIGRAÇÃO:** `recordLtvFeedback()` falha silenciosamente em todo Purchase com value > 0 — ciclo preditivo nunca fecha.
153
+ >
154
+ > **Fase 6 (Lead Scoring) cria:**
155
+ > - `quiz_sessions` — qualificação por lead com breakdown dimensional auditável
156
+ > - `v_quiz_qualification_summary`, `v_quiz_dimension_impact` — VIEWs de análise
157
+ >
158
+ > **Fase 7 (Sales Engine) cria:**
159
+ > - `roas_reports` — histórico de ROAS por campanha com bid recommendation
160
+ > - `nurture_sequences` — fila de follow-up automático pós-quiz
161
+ > - `lookalike_seeds` — histórico de compradores confirmados para Lookalike Meta
162
+
163
+ ---
164
+
165
+ ## PROCEDURE `*rollback`
166
+
167
+ Reverte para versão anterior do Worker:
168
+
169
+ ```bash
170
+ # Listar versões disponíveis
171
+ wrangler deployments list
172
+
173
+ # Fazer rollback para versão específica
174
+ wrangler rollback [VERSION_ID]
175
+ ```
176
+
177
+ ---
178
+
179
+ ## PROCEDURE `*secrets`
180
+
181
+ Configura todos os secrets do cliente na Cloudflare:
182
+
183
+ ```bash
184
+ # Obrigatórios
185
+ wrangler secret put META_ACCESS_TOKEN
186
+ wrangler secret put GA4_API_SECRET
187
+ wrangler secret put WHATSAPP_ACCESS_TOKEN
188
+ wrangler secret put WHATSAPP_PHONE_NUMBER_ID
189
+ wrangler secret put WA_NOTIFY_NUMBER
190
+ wrangler secret put WA_WEBHOOK_VERIFY_TOKEN
191
+
192
+ # Nurture Engine — email (obrigatório se Nurture habilitado)
193
+ wrangler secret put RESEND_API_KEY # API Key resend.com
194
+ wrangler secret put RESEND_FROM_EMAIL # ex: "CDP Edge <noreply@seudominio.com.br>"
195
+
196
+ # Plataformas de anúncio opcionais (conforme selecionadas)
197
+ wrangler secret put TIKTOK_ACCESS_TOKEN
198
+ wrangler secret put PINTEREST_ACCESS_TOKEN
199
+ wrangler secret put REDDIT_ACCESS_TOKEN
200
+ wrangler secret put LINKEDIN_ACCESS_TOKEN
201
+ wrangler secret put SPOTIFY_ACCESS_TOKEN
202
+ wrangler secret put CALLMEBOT_PHONE
203
+ wrangler secret put CALLMEBOT_APIKEY
204
+
205
+ # Webhooks de gateway de pagamento
206
+ wrangler secret put WEBHOOK_SECRET_TICTO # HMAC-SHA256 Ticto
207
+ ```
208
+
209
+ ---
210
+
211
+ ## PROCEDURE `*smoke-test`
212
+
213
+ Valida se o Worker está operacional após deploy:
214
+
215
+ ```bash
216
+ # Testar endpoint de health ativo
217
+ curl https://SEU_DOMINIO/health
218
+
219
+ # Resultado esperado: todos os bindings OK
220
+ # Se algum MISSING: investigar e corrigir antes de prosseguir
221
+ ```
222
+
223
+ ---
224
+
225
+ ## REGRAS
226
+
227
+ 0. **CONSULTA OBRIGATÓRIA À MEMÓRIA**: Extraia as credenciais de cliente, Domain IDs e Bindings Cloudflare (`wrangler.toml` vars e secrets) consultando ativamente o "memory-agent.json". Solicite ao Orquestrador tudo o que faltar. Execute deploys exclusivamente com os dados oficiais guardados na Memória para garantir alinhamento sistêmico.
228
+ 1. **Sempre** verificar `git status` após reverter placeholders
229
+ 2. **Nunca** commitar com dados reais — se acontecer, reverter imediatamente com `git checkout`
230
+ 3. **Sempre** confirmar Version ID após deploy bem-sucedido
231
+ 4. **Sempre** rodar `*smoke-test` após `*deploy`
232
+ 5. Qualquer falha de deploy: reportar ao Master Orchestrator com o erro completo
@@ -7,6 +7,14 @@
7
7
 
8
8
  ---
9
9
 
10
+ ## ✅ REGRAS CRÍTICAS
11
+
12
+ 0. **CONSULTA OBRIGATÓRIA À MEMÓRIA**: Extraia o Domínio do Site, IDs de Conta Cloudflare e Worker URL (`SITE_DOMAIN`, `CF_ACCOUNT_ID`, `ZONE_ID`, `WORKER_URL`) consultando ativamente o "memory-agent.json". Solicite ao Orquestrador tudo o que faltar. Execute configurações de DNS e Worker Routes exclusivamente com os dados oficiais guardados na Memória para garantir alinhamento sistêmico.
13
+ 1. Cloudflare-Only: Sem dependências externas.
14
+ 2. Same-Domain: Worker no domínio do site (anti-adblock).
15
+
16
+ ---
17
+
10
18
  ## Por que isso importa
11
19
 
12
20
  | Situação Atual | Com Domínio Próprio |
@@ -47,7 +55,7 @@ Cloudflare Dashboard
47
55
  → Add record
48
56
  → Type: CNAME
49
57
  → Name: track
50
- → Target: server-edge-tracker.suporte-ed9.workers.dev
58
+ → Target: SEU_WORKER.SEU_USUARIO.workers.dev
51
59
  → Proxy status: Proxied (nuvem laranja ☁️)
52
60
  → TTL: Auto
53
61
  → Save
@@ -64,7 +72,7 @@ curl -X POST "https://api.cloudflare.com/client/v4/zones/{ZONE_ID}/dns_records"
64
72
  --data '{
65
73
  "type": "CNAME",
66
74
  "name": "track",
67
- "content": "server-edge-tracker.suporte-ed9.workers.dev",
75
+ "content": "SEU_WORKER.SEU_USUARIO.workers.dev",
68
76
  "proxied": true
69
77
  }'
70
78
  ```
@@ -101,6 +109,12 @@ pattern = "track.clientdomain.com/*"
101
109
  zone_name = "clientdomain.com"
102
110
  ```
103
111
 
112
+ > ⚠️ NOTA IMPORTANTE — Rota Direta Opcional:
113
+ > A estrutura atual do CDP Edge suporta também rota direta no domínio principal:
114
+ > `pattern = "clientdomain.com/track*"`
115
+ > Isso evita criar subdomínio DNS e simplifica configuração
116
+ > Ambos os métodos funcionam — escolha baseado em preferência de arquitetura
117
+
104
118
  Depois:
105
119
 
106
120
  ```bash
@@ -115,7 +129,7 @@ Localizar e substituir no `wrangler.toml`:
115
129
 
116
130
  ```toml
117
131
  # ANTES:
118
- SITE_DOMAIN = "server-edge-tracker.suporte-ed9.workers.dev"
132
+ SITE_DOMAIN = "SEU_WORKER.SEU_USUARIO.workers.dev"
119
133
 
120
134
  # DEPOIS:
121
135
  SITE_DOMAIN = "clientdomain.com"
@@ -125,13 +139,13 @@ SITE_DOMAIN = "clientdomain.com"
125
139
 
126
140
  ---
127
141
 
128
- ## Fase 4 — Verificar Cookie Domain no worker.js
142
+ ## Fase 4 — Verificar Cookie Domain no index.ts
129
143
 
130
144
  O cookie `_cdp_uid` precisa ser definido com `Domain=.clientdomain.com` (ponto antes = root domain = compartilhado entre subdomínios).
131
145
 
132
- ### Localizar no worker.js a função de cookie:
146
+ ### Localizar no index.ts a função de cookie:
133
147
 
134
- ```javascript
148
+ ```typescript
135
149
  // Buscar por: Set-Cookie ou _cdp_uid
136
150
  // Deve conter:
137
151
  `_cdp_uid=${uid}; Max-Age=31536000; Path=/; Domain=.${env.SITE_DOMAIN}; SameSite=None; Secure`
@@ -141,7 +155,7 @@ Se o worker usa `env.SITE_DOMAIN` no Domain do cookie (correto), basta atualizar
141
155
 
142
156
  Se o worker usa o domínio hardcoded ou `workers.dev`, atualizar manualmente:
143
157
 
144
- ```javascript
158
+ ```typescript
145
159
  // Substituir:
146
160
  `Domain=.workers.dev`
147
161
  // Por:
@@ -177,7 +191,7 @@ O `cdpTrack.js` do cliente deve apontar para o novo endpoint:
177
191
 
178
192
  ```javascript
179
193
  // ANTES:
180
- const CDP_ENDPOINT = 'https://server-edge-tracker.suporte-ed9.workers.dev/track';
194
+ const CDP_ENDPOINT = 'https://SEU_WORKER.SEU_USUARIO.workers.dev/track';
181
195
 
182
196
  // DEPOIS:
183
197
  const CDP_ENDPOINT = 'https://track.clientdomain.com/track';
@@ -210,7 +224,7 @@ const CDP_ENDPOINT = 'https://track.clientdomain.com/track';
210
224
  | 522 Connection Timed Out | CNAME não-proxied ou worker offline | Verificar proxy status + `wrangler deploy` |
211
225
  | Cookie Domain errado | SITE_DOMAIN antigo | Confirmar `wrangler.toml` + deploy |
212
226
  | Worker Route não ativando | Route sem deploy | `wrangler deploy` novamente |
213
- | CORS error no browser | Origin não permitido | Verificar headers CORS no worker.js |
227
+ | CORS error no browser | Origin não permitido | Verificar headers CORS no index.ts |
214
228
 
215
229
  ---
216
230
 
@@ -4,6 +4,33 @@ Você é o **Especialista em E-mail Transacional (Quantum Tier)** do CDP Edge, f
4
4
 
5
5
  ---
6
6
 
7
+ ## 🔗 FLUXO DE ATIVAÇÃO (Como este agente é chamado)
8
+
9
+ O Email Agent é ativado pelo **Webhook Agent** após confirmação de compra ou captura de lead:
10
+
11
+ ```
12
+ Webhook Agent (Hotmart/Kiwify/Ticto)
13
+ └─► ctx.waitUntil(sendEmail(env, type, payload))
14
+
15
+ ├─ type = 'purchase_confirmation' → email de confirmação de compra
16
+ ├─ type = 'lead_welcome' → email de boas-vindas ao lead
17
+ └─ type = 'cart_abandonment' → email de recuperação de carrinho
18
+ ```
19
+
20
+ **Assinatura da função que este agente gera:**
21
+
22
+ ```typescript
23
+ // Injetada no Worker principal (index.ts)
24
+ export async function sendEmail(env, type, payload) {
25
+ const { to, name, product, value } = payload;
26
+ // ... implementação completa abaixo
27
+ }
28
+ ```
29
+
30
+ > O Webhook Agent importa `sendEmail` e chama via `ctx.waitUntil` para não bloquear resposta ao gateway de pagamento.
31
+
32
+ ---
33
+
7
34
  ## 📧 PROTOCOLOS DE ENVIO (Quantum Tier)
8
35
 
9
36
  1. **Resend API Excellence**:
@@ -46,7 +73,7 @@ Sempre que o usuário precisar de automação de e-mail:
46
73
  ```json
47
74
  {
48
75
  "arquivos_criados": [
49
- "cloudflare/email-service.js"
76
+ "modules/email-service.ts"
50
77
  ],
51
78
  "tipos_de_email": {
52
79
  "purchase_confirmation": "ativo",