cdp-edge 1.2.2 → 1.4.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 +253 -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 +24 -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 +588 -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 +769 -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,226 @@
1
+ /**
2
+ * CDP Edge — Logistic Regression (pure TS, sem deps externas)
3
+ * Treina modelo de predição de conversão com dados reais do D1.
4
+ *
5
+ * Features usadas (todas normalizadas 0-1):
6
+ * utm_source, engagement_score, intention_level, recency,
7
+ * has_email, has_phone, is_br, hour_normalized
8
+ */
9
+
10
+ import { Env } from '../../types.js';
11
+ import { D1Database, KVNamespace } from '@cloudflare/workers-types';
12
+
13
+ // ── Tipos ───────────────────────────────────────────────────────────────────────
14
+ export interface DatasetRow {
15
+ features: number[];
16
+ label: number;
17
+ }
18
+
19
+ export interface LogisticModel {
20
+ bias: number;
21
+ weights: number[];
22
+ accuracy: number;
23
+ positiveRate: number;
24
+ sampleSize: number;
25
+ threshold: number;
26
+ featureNames: string[];
27
+ trainedAt: string;
28
+ }
29
+
30
+ export interface ExtractedFeatures {
31
+ utm_score: number;
32
+ engagement: number;
33
+ intention: number;
34
+ recency: number;
35
+ has_email: number;
36
+ has_phone: number;
37
+ is_br: number;
38
+ hour: number;
39
+ }
40
+
41
+ // ── Feature Engineering ───────────────────────────────────────────────────────
42
+
43
+ const UTM_SCORES: Record<string, number> = {
44
+ facebook: 0.90, instagram: 0.90, meta: 0.90,
45
+ google: 0.82, youtube: 0.82,
46
+ tiktok: 0.75,
47
+ email: 0.68, sms: 0.68,
48
+ organic: 0.30,
49
+ direct: 0.20,
50
+ };
51
+
52
+ const INTENTION_SCORES: Record<string, number> = {
53
+ comprador: 1.00, high_intent: 1.00,
54
+ interessado: 0.60,
55
+ nurture: 0.30,
56
+ curioso: 0.15,
57
+ };
58
+
59
+ export function extractFeatures(row: any): number[] {
60
+ const src = (row.utm_source || '').toLowerCase().trim();
61
+ const intention = (row.intention_level || '').toLowerCase().trim();
62
+ const daysSince = row.days_since_lead || 0;
63
+
64
+ return [
65
+ UTM_SCORES[src] ?? (src ? 0.10 : 0.05), // utm_score
66
+ Math.min((row.engagement_score || 0) / 5, 1), // engagement (0-5 → 0-1)
67
+ INTENTION_SCORES[intention] ?? 0, // intention
68
+ Math.max(0, 1 - daysSince / 90), // recency (0=90 dias, 1=hoje)
69
+ row.has_email ? 1 : 0, // has_email
70
+ row.has_phone ? 1 : 0, // has_phone
71
+ row.is_br ? 1 : 0, // is_br
72
+ ((row.hour || 12) / 23), // hour normalized
73
+ ];
74
+ }
75
+
76
+ // ── Sigmoid ───────────────────────────────────────────────────────────────────
77
+
78
+ function sigmoid(z: number): number {
79
+ if (z > 20) return 1;
80
+ if (z < -20) return 0;
81
+ return 1 / (1 + Math.exp(-z));
82
+ }
83
+
84
+ function dot(weights: number[], features: number[]): number {
85
+ return features.reduce((sum, f, i) => sum + (weights[i] || 0) * f, 0);
86
+ }
87
+
88
+ // ── Treinamento ───────────────────────────────────────────────────────────────
89
+
90
+ /**
91
+ * Treina regressão logística com gradiente descendente.
92
+ */
93
+ export function trainLogisticRegression(dataset: DatasetRow[], opts: { iterations?: number; learningRate?: number; lambda?: number } = {}): LogisticModel | null {
94
+ if (!dataset || dataset.length < 50) {
95
+ return null; // dados insuficientes
96
+ }
97
+
98
+ const iterations = opts.iterations || 200;
99
+ const learningRate = opts.learningRate || 0.1;
100
+ const lambda = opts.lambda || 0.01; // L2 regularization
101
+ const nFeatures = dataset[0].features.length;
102
+
103
+ let bias = 0;
104
+ let weights = new Array(nFeatures).fill(0);
105
+
106
+ const positives = dataset.filter(d => d.label === 1).length;
107
+ const positiveRate = positives / dataset.length;
108
+
109
+ // Se menos de 5% positivos, não treina (dados de compra insuficientes)
110
+ if (positiveRate < 0.03) return null;
111
+
112
+ for (let iter = 0; iter < iterations; iter++) {
113
+ let dBias = 0;
114
+ const dWeights = new Array(nFeatures).fill(0);
115
+
116
+ for (const { features, label } of dataset) {
117
+ const z = dot(weights, features) + bias;
118
+ const pred = sigmoid(z);
119
+ const error = pred - label;
120
+
121
+ dBias += error;
122
+ for (let j = 0; j < nFeatures; j++) {
123
+ dWeights[j] += error * features[j];
124
+ }
125
+ }
126
+
127
+ const n = dataset.length;
128
+ bias -= learningRate * (dBias / n);
129
+ for (let j = 0; j < nFeatures; j++) {
130
+ // L2: penaliza pesos grandes para evitar overfitting
131
+ weights[j] -= learningRate * ((dWeights[j] / n) + lambda * weights[j]);
132
+ }
133
+ }
134
+
135
+ // Calcular acurácia no conjunto de treino
136
+ let correct = 0;
137
+ const threshold = positiveRate > 0.3 ? 0.5 : Math.max(0.3, positiveRate * 1.5);
138
+
139
+ for (const { features, label } of dataset) {
140
+ const z = dot(weights, features) + bias;
141
+ const pred = sigmoid(z) >= threshold ? 1 : 0;
142
+ if (pred === label) correct++;
143
+ }
144
+
145
+ const accuracy = correct / dataset.length;
146
+
147
+ return {
148
+ bias,
149
+ weights,
150
+ accuracy,
151
+ positiveRate,
152
+ sampleSize: dataset.length,
153
+ threshold,
154
+ featureNames: ['utm_score', 'engagement', 'intention', 'recency', 'has_email', 'has_phone', 'is_br', 'hour'],
155
+ trainedAt: new Date().toISOString(),
156
+ };
157
+ }
158
+
159
+ // ── Inferência ────────────────────────────────────────────────────────────────
160
+
161
+ /**
162
+ * Prediz score de conversão (0-100) usando pesos treinados.
163
+ */
164
+ export function predictWithWeights(model: LogisticModel, features: number[]): number {
165
+ const z = dot(model.weights, features) + model.bias;
166
+ const prob = sigmoid(z);
167
+ return Math.round(prob * 100);
168
+ }
169
+
170
+ // ── Helpers de persistência ───────────────────────────────────────────────────
171
+
172
+ export const LTV_WEIGHTS_KV_KEY = 'ltv_weights_active';
173
+
174
+ export async function loadActiveWeights(env: Env): Promise<LogisticModel | null> {
175
+ // 1. Tentar KV (cache ~7 dias)
176
+ if (env.GEO_CACHE) {
177
+ try {
178
+ const cached = await env.GEO_CACHE.get(LTV_WEIGHTS_KV_KEY, 'json') as LogisticModel | null;
179
+ if (cached?.weights?.length) return cached;
180
+ } catch (err: any) {
181
+ console.error('[Logistic] Error fetching LTV weights from KV cache:', {
182
+ key: LTV_WEIGHTS_KV_KEY,
183
+ error: err?.message || String(err),
184
+ stack: err?.stack,
185
+ });
186
+ }
187
+ }
188
+
189
+ // 2. Fallback: D1
190
+ if (!env.DB) return null;
191
+ try {
192
+ const row = await env.DB.prepare(
193
+ `SELECT weights_json FROM ltv_model_weights WHERE is_active = 1 ORDER BY trained_at DESC LIMIT 1`
194
+ ).first();
195
+ if (!row || !(row as any).weights_json) return null;
196
+ const model = JSON.parse((row as any).weights_json) as LogisticModel;
197
+
198
+ // Popular KV para próximas requests
199
+ if (env.GEO_CACHE && model?.weights?.length) {
200
+ env.GEO_CACHE.put(LTV_WEIGHTS_KV_KEY, JSON.stringify(model), { expirationTtl: 604800 }).catch(() => {});
201
+ }
202
+ return model;
203
+ } catch {
204
+ return null;
205
+ }
206
+ }
207
+
208
+ export async function saveWeights(DB: D1Database, model: LogisticModel): Promise<void> {
209
+ if (!DB || !model) return;
210
+ const now = new Date().toISOString();
211
+
212
+ // Desativar modelo anterior
213
+ await DB.prepare(`UPDATE ltv_model_weights SET is_active = 0 WHERE is_active = 1`).run();
214
+
215
+ // Inserir novo como ativo
216
+ await DB.prepare(`
217
+ INSERT INTO ltv_model_weights (trained_at, is_active, sample_size, positive_rate, accuracy, weights_json)
218
+ VALUES (?, 1, ?, ?, ?, ?)
219
+ `).bind(
220
+ now,
221
+ model.sampleSize,
222
+ model.positiveRate,
223
+ model.accuracy,
224
+ JSON.stringify(model),
225
+ ).run();
226
+ }