whatsapp-docs-mcp 1.0.3 → 1.0.5

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.
@@ -1,17 +1,199 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SYNONYMS = void 0;
3
4
  exports.normalizeText = normalizeText;
5
+ exports.stemWord = stemWord;
6
+ exports.expandQueryTerms = expandQueryTerms;
4
7
  exports.searchInContent = searchInContent;
5
8
  exports.extractTitle = extractTitle;
6
9
  exports.extractDescription = extractDescription;
7
10
  exports.extractExcerpt = extractExcerpt;
8
11
  exports.calculateRelevance = calculateRelevance;
12
+ /**
13
+ * Dicionário de sinônimos bilíngues (português/inglês) para termos da WhatsApp API
14
+ * Todos os termos devem estar normalizados (sem acentos, minúsculas)
15
+ */
16
+ exports.SYNONYMS = {
17
+ // Typing/Digitação
18
+ 'typing': ['digitacao', 'digitando', 'digitar', 'escrevendo', 'type'],
19
+ 'digitacao': ['typing', 'digitando', 'digitar', 'type'],
20
+ 'digitando': ['typing', 'digitacao', 'digitar', 'type'],
21
+ 'type': ['typing', 'digitacao', 'tipo'],
22
+ // Indicator/Indicador
23
+ 'indicator': ['indicador', 'indicadores', 'indicators'],
24
+ 'indicators': ['indicador', 'indicadores', 'indicator'],
25
+ 'indicador': ['indicator', 'indicators', 'indicadores'],
26
+ 'indicadores': ['indicator', 'indicators', 'indicador'],
27
+ // Message/Mensagem
28
+ 'message': ['mensagem', 'mensagens', 'msg', 'messages'],
29
+ 'messages': ['mensagem', 'mensagens', 'msg', 'message'],
30
+ 'mensagem': ['message', 'messages', 'msg', 'mensagens'],
31
+ 'mensagens': ['message', 'messages', 'msg', 'mensagem'],
32
+ 'msg': ['message', 'mensagem', 'messages', 'mensagens'],
33
+ // Audio/Áudio
34
+ 'audio': ['som', 'voz', 'voice', 'sound'],
35
+ 'voz': ['audio', 'voice', 'som'],
36
+ 'voice': ['audio', 'voz', 'som'],
37
+ 'som': ['audio', 'voz', 'voice', 'sound'],
38
+ // Webhook/Callback
39
+ 'webhook': ['callback', 'notificacao', 'notification', 'webhooks'],
40
+ 'webhooks': ['webhook', 'callback', 'notificacao'],
41
+ 'callback': ['webhook', 'notificacao', 'notification'],
42
+ 'notificacao': ['webhook', 'callback', 'notification', 'notificacoes'],
43
+ // Template/Modelo
44
+ 'template': ['modelo', 'templates', 'modelos'],
45
+ 'templates': ['modelo', 'template', 'modelos'],
46
+ 'modelo': ['template', 'templates', 'modelos'],
47
+ 'modelos': ['template', 'templates', 'modelo'],
48
+ // Send/Enviar
49
+ 'send': ['enviar', 'envio', 'sending'],
50
+ 'enviar': ['send', 'envio', 'sending'],
51
+ 'envio': ['send', 'enviar', 'sending'],
52
+ // Receive/Receber
53
+ 'receive': ['receber', 'recebimento', 'receiving'],
54
+ 'receber': ['receive', 'recebimento', 'receiving'],
55
+ // Error/Erro
56
+ 'error': ['erro', 'errors', 'erros'],
57
+ 'errors': ['erro', 'erros', 'error'],
58
+ 'erro': ['error', 'errors', 'erros'],
59
+ 'erros': ['error', 'errors', 'erro'],
60
+ // Media/Mídia
61
+ 'media': ['midia', 'midias'],
62
+ 'midia': ['media', 'midias'],
63
+ // Image/Imagem
64
+ 'image': ['imagem', 'images', 'imagens', 'foto', 'picture'],
65
+ 'images': ['imagem', 'imagens', 'image', 'fotos'],
66
+ 'imagem': ['image', 'images', 'imagens', 'foto'],
67
+ 'imagens': ['image', 'images', 'imagem', 'fotos'],
68
+ // Video/Vídeo
69
+ 'video': ['videos'],
70
+ 'videos': ['video'],
71
+ // Document/Documento
72
+ 'document': ['documento', 'documents', 'documentos', 'doc'],
73
+ 'documents': ['documento', 'documentos', 'document'],
74
+ 'documento': ['document', 'documents', 'documentos'],
75
+ 'documentos': ['document', 'documents', 'documento'],
76
+ // Phone/Telefone
77
+ 'phone': ['telefone', 'phones', 'telefones', 'numero'],
78
+ 'telefone': ['phone', 'phones', 'telefones', 'numero'],
79
+ 'numero': ['phone', 'telefone', 'number'],
80
+ 'number': ['numero', 'phone', 'telefone'],
81
+ // Business/Negócio
82
+ 'business': ['negocio', 'comercial', 'empresa'],
83
+ 'negocio': ['business', 'comercial', 'empresa'],
84
+ // Account/Conta
85
+ 'account': ['conta', 'accounts', 'contas'],
86
+ 'conta': ['account', 'accounts', 'contas'],
87
+ // Status
88
+ 'status': ['estado', 'situacao'],
89
+ 'estado': ['status', 'situacao'],
90
+ // Read/Lido
91
+ 'read': ['lido', 'leitura', 'ler'],
92
+ 'lido': ['read', 'leitura'],
93
+ 'leitura': ['read', 'lido'],
94
+ // Recording/Gravação
95
+ 'recording': ['gravacao', 'gravando', 'gravar'],
96
+ 'gravacao': ['recording', 'gravando', 'gravar'],
97
+ 'gravando': ['recording', 'gravacao', 'gravar'],
98
+ 'gravar': ['recording', 'gravacao', 'gravando'],
99
+ };
9
100
  /**
10
101
  * Normaliza texto removendo acentos e convertendo para minúsculas
11
102
  */
12
103
  function normalizeText(text) {
13
104
  return text.normalize('NFD').replace(/[\u0300-\u036f]/g, '').toLowerCase();
14
105
  }
106
+ /**
107
+ * Aplica stemming básico para português e inglês
108
+ * Retorna array com a palavra original e possíveis stems
109
+ */
110
+ function stemWord(word) {
111
+ const stems = [word];
112
+ if (word.length < 4)
113
+ return stems;
114
+ // Português - verbos no gerúndio (-ando, -endo, -indo)
115
+ if (word.endsWith('ando') && word.length > 5) {
116
+ stems.push(word.slice(0, -4)); // raiz
117
+ stems.push(word.slice(0, -4) + 'ar'); // infinitivo
118
+ stems.push(word.slice(0, -4) + 'a'); // presente
119
+ }
120
+ if (word.endsWith('endo') && word.length > 5) {
121
+ stems.push(word.slice(0, -4));
122
+ stems.push(word.slice(0, -4) + 'er');
123
+ stems.push(word.slice(0, -4) + 'e');
124
+ }
125
+ if (word.endsWith('indo') && word.length > 5) {
126
+ stems.push(word.slice(0, -4));
127
+ stems.push(word.slice(0, -4) + 'ir');
128
+ stems.push(word.slice(0, -4) + 'e');
129
+ }
130
+ // Português - substantivos terminados em -ção/-cao (normalizado)
131
+ if ((word.endsWith('cao') || word.endsWith('coes')) && word.length > 4) {
132
+ const root = word.endsWith('coes') ? word.slice(0, -4) : word.slice(0, -3);
133
+ stems.push(root);
134
+ stems.push(root + 'c');
135
+ stems.push(root + 'cao');
136
+ stems.push(root + 'coes');
137
+ }
138
+ // Inglês - verbos no gerúndio (-ing)
139
+ if (word.endsWith('ing') && word.length > 5) {
140
+ stems.push(word.slice(0, -3)); // type
141
+ stems.push(word.slice(0, -3) + 'e'); // type (para typing -> type)
142
+ // Dobrar consoante: running -> run
143
+ if (word.length > 6 && word[word.length - 4] === word[word.length - 5]) {
144
+ stems.push(word.slice(0, -4));
145
+ }
146
+ }
147
+ // Inglês - passado (-ed)
148
+ if (word.endsWith('ed') && word.length > 4) {
149
+ stems.push(word.slice(0, -2));
150
+ stems.push(word.slice(0, -2) + 'e'); // created -> create
151
+ // Dobrar consoante
152
+ if (word.length > 5 && word[word.length - 3] === word[word.length - 4]) {
153
+ stems.push(word.slice(0, -3));
154
+ }
155
+ }
156
+ // Plural inglês (-s, -es, -ies)
157
+ if (word.endsWith('ies') && word.length > 4) {
158
+ stems.push(word.slice(0, -3) + 'y');
159
+ }
160
+ else if (word.endsWith('es') && word.length > 3) {
161
+ stems.push(word.slice(0, -2));
162
+ stems.push(word.slice(0, -1));
163
+ }
164
+ else if (word.endsWith('s') && !word.endsWith('ss') && word.length > 3) {
165
+ stems.push(word.slice(0, -1));
166
+ }
167
+ // Plural português (-ões -> -ão)
168
+ if (word.endsWith('oes') && word.length > 4) {
169
+ stems.push(word.slice(0, -3) + 'ao');
170
+ }
171
+ // Remove duplicatas e retorna
172
+ return [...new Set(stems)];
173
+ }
174
+ /**
175
+ * Expande termos da query usando stemming e sinônimos
176
+ * Retorna um Set com todos os termos expandidos
177
+ */
178
+ function expandQueryTerms(words) {
179
+ const expanded = new Set();
180
+ for (const word of words) {
181
+ // Adiciona palavra original
182
+ expanded.add(word);
183
+ // Adiciona stems
184
+ const stems = stemWord(word);
185
+ stems.forEach(s => expanded.add(s));
186
+ // Adiciona sinônimos (para palavra original e stems)
187
+ const allForms = [word, ...stems];
188
+ for (const form of allForms) {
189
+ const synonyms = exports.SYNONYMS[form];
190
+ if (synonyms) {
191
+ synonyms.forEach(s => expanded.add(s));
192
+ }
193
+ }
194
+ }
195
+ return expanded;
196
+ }
15
197
  /**
16
198
  * Divide texto em palavras, considerando underscores, hífens e espaços como separadores
17
199
  */
@@ -39,10 +221,33 @@ function normalizeWord(word) {
39
221
  }
40
222
  return word;
41
223
  }
224
+ /**
225
+ * Verifica se algum termo expandido está presente no texto
226
+ */
227
+ function hasExpandedTermMatch(text, expandedTerms) {
228
+ for (const term of expandedTerms) {
229
+ if (text.includes(term)) {
230
+ return true;
231
+ }
232
+ }
233
+ return false;
234
+ }
235
+ /**
236
+ * Conta quantos termos expandidos estão presentes no texto
237
+ */
238
+ function countExpandedTermMatches(text, expandedTerms) {
239
+ let count = 0;
240
+ for (const term of expandedTerms) {
241
+ if (text.includes(term)) {
242
+ count++;
243
+ }
244
+ }
245
+ return count;
246
+ }
42
247
  /**
43
248
  * Busca textual melhorada em conteúdo markdown
44
- * Busca por palavras individuais e considera nome do arquivo
45
- * Melhorado para considerar underscores/hífens e usar lógica mais flexível
249
+ * Usa expansão de termos (stemming + sinônimos) para busca mais flexível
250
+ * Remove duplicatas e considera nome do arquivo
46
251
  */
47
252
  function searchInContent(content, query, filePath) {
48
253
  const normalizedQuery = normalizeText(query.trim());
@@ -52,73 +257,69 @@ function searchInContent(content, query, filePath) {
52
257
  if (filePath && normalizedFilePath.includes(normalizedQuery)) {
53
258
  return true;
54
259
  }
55
- // Divide query em palavras considerando underscores/hífens
56
- const queryWords = splitIntoWords(normalizedQuery).filter(w => w.length > 2);
57
- // Se query tem múltiplas palavras, usa lógica mais flexível
58
- if (queryWords.length > 1) {
59
- // Primeiro tenta encontrar todas as palavras (AND)
60
- const allWordsFound = queryWords.every(word => {
61
- const normalizedWord = normalizeWord(word);
62
- return normalizedContent.includes(word) ||
63
- normalizedContent.includes(normalizedWord) ||
64
- normalizedFilePath.includes(word) ||
65
- normalizedFilePath.includes(normalizedWord);
66
- });
67
- if (allWordsFound) {
68
- return true;
69
- }
70
- // Se não encontrou todas, tenta encontrar palavras-chave principais
71
- // Considera que se encontrar pelo menos 2 palavras principais, é relevante
72
- const mainWords = queryWords.filter(w => w.length >= 4); // Palavras com 4+ caracteres são mais importantes
73
- if (mainWords.length >= 2) {
74
- const foundMainWords = mainWords.filter(word => {
75
- const normalizedWord = normalizeWord(word);
76
- return normalizedContent.includes(word) ||
77
- normalizedContent.includes(normalizedWord) ||
78
- normalizedFilePath.includes(word) ||
79
- normalizedFilePath.includes(normalizedWord);
80
- });
81
- // Se há apenas 2 palavras principais, precisa encontrar ambas
82
- // Se há 3 ou mais, precisa encontrar pelo menos 2/3 (arredondado para cima)
83
- const requiredMainWords = mainWords.length === 2
84
- ? 2 // Exige ambas quando há apenas 2
85
- : Math.ceil(mainWords.length * 2 / 3); // Pelo menos 2/3 quando há 3+
86
- if (foundMainWords.length >= requiredMainWords) {
87
- return true;
260
+ // Divide query em palavras e REMOVE DUPLICATAS
261
+ const queryWords = [...new Set(splitIntoWords(normalizedQuery))].filter(w => w.length > 2);
262
+ // Se não tem palavras válidas, busca string completa
263
+ if (queryWords.length === 0) {
264
+ return normalizedContent.includes(normalizedQuery) ||
265
+ normalizedFilePath.includes(normalizedQuery);
266
+ }
267
+ // Expande termos usando stemming e sinônimos
268
+ const expandedTerms = expandQueryTerms(queryWords);
269
+ // Palavras do nome do arquivo
270
+ const fileWords = splitIntoWords(normalizedFilePath);
271
+ const expandedFileTerms = expandQueryTerms(fileWords);
272
+ // Verifica quantas palavras originais (ou seus equivalentes) foram encontradas
273
+ let matchedOriginalWords = 0;
274
+ let matchedInFileName = 0;
275
+ for (const qw of queryWords) {
276
+ const wordExpansions = expandQueryTerms([qw]);
277
+ // Verifica se alguma expansão está no conteúdo
278
+ const inContent = hasExpandedTermMatch(normalizedContent, wordExpansions);
279
+ // Verifica se alguma expansão está no nome do arquivo
280
+ // Também verifica se alguma expansão do arquivo corresponde às expansões da query
281
+ let inFile = hasExpandedTermMatch(normalizedFilePath, wordExpansions);
282
+ if (!inFile) {
283
+ // Verifica overlap entre expansões da query e do arquivo
284
+ for (const exp of wordExpansions) {
285
+ if (expandedFileTerms.has(exp)) {
286
+ inFile = true;
287
+ break;
288
+ }
88
289
  }
89
290
  }
90
- // Fallback especial: busca por palavras no nome do arquivo quando há correspondência forte
91
- // Isso ajuda com casos como "typing_indicators.md" quando busca por "typing indicator"
92
- const wordsInFilePath = splitIntoWords(normalizedFilePath);
93
- // Verifica quais palavras da query estão no arquivo ou no conteúdo
94
- const foundWords = new Set();
95
- queryWords.forEach((qw, idx) => {
96
- const normalizedQw = normalizeWord(qw);
97
- // Verifica no nome do arquivo
98
- const inFile = wordsInFilePath.some(fw => {
99
- const normalizedFw = normalizeWord(fw);
100
- return fw === qw || fw === normalizedQw || normalizedFw === qw || normalizedFw === normalizedQw ||
101
- fw.includes(qw) || fw.includes(normalizedQw) || normalizedFw.includes(qw) || normalizedFw.includes(normalizedQw) ||
102
- (normalizedQw.length >= 4 && (normalizedQw.includes(fw) || qw.includes(fw) || normalizedQw.includes(normalizedFw)));
103
- });
104
- // Verifica no conteúdo
105
- const inContent = normalizedContent.includes(qw) || normalizedContent.includes(normalizedQw);
106
- if (inFile || inContent) {
107
- foundWords.add(idx);
291
+ if (inContent || inFile) {
292
+ matchedOriginalWords++;
293
+ if (inFile) {
294
+ matchedInFileName++;
108
295
  }
109
- });
110
- // Se encontrou pelo menos 2 palavras (no arquivo ou conteúdo), retorna true
111
- if (foundWords.size >= 2) {
296
+ }
297
+ }
298
+ // LÓGICA DE MATCH FLEXÍVEL:
299
+ // 1. Se encontrou 2+ palavras no nome do arquivo → MATCH (alta confiança)
300
+ if (matchedInFileName >= 2) {
301
+ return true;
302
+ }
303
+ // 2. Se encontrou 1 palavra no nome do arquivo E 1+ no conteúdo → MATCH
304
+ if (matchedInFileName >= 1 && matchedOriginalWords >= 2) {
305
+ return true;
306
+ }
307
+ // 3. Para queries com múltiplas palavras: precisa encontrar pelo menos 50%
308
+ if (queryWords.length > 1) {
309
+ const requiredMatches = Math.max(2, Math.ceil(queryWords.length * 0.5));
310
+ if (matchedOriginalWords >= requiredMatches) {
311
+ return true;
312
+ }
313
+ // Fallback: se encontrou pelo menos 2 palavras, aceita
314
+ if (matchedOriginalWords >= 2) {
112
315
  return true;
113
316
  }
114
- return false;
115
317
  }
116
- // Busca simples para query de uma palavra
117
- const normalizedQueryWord = normalizeWord(normalizedQuery);
118
- return normalizedContent.includes(normalizedQuery) ||
119
- normalizedContent.includes(normalizedQueryWord) ||
120
- normalizedFilePath.includes(normalizedQuery) ||
121
- normalizedFilePath.includes(normalizedQueryWord);
318
+ // 4. Para query de uma palavra: basta encontrar em algum lugar
319
+ if (queryWords.length === 1 && matchedOriginalWords >= 1) {
320
+ return true;
321
+ }
322
+ return false;
122
323
  }
123
324
  /**
124
325
  * Extrai título do arquivo markdown (primeiro # ou nome do arquivo)
@@ -188,61 +389,95 @@ function extractExcerpt(content, query, contextLines = 3) {
188
389
  }
189
390
  /**
190
391
  * Calcula relevância melhorada baseada em ocorrências, nome do arquivo e título
392
+ * Usa expansão de termos (stemming + sinônimos) para melhor scoring
191
393
  */
192
394
  function calculateRelevance(content, query, filePath) {
193
395
  const normalizedQuery = normalizeText(query);
194
396
  const normalizedContent = normalizeText(content);
195
397
  const normalizedFilePath = filePath ? normalizeText(filePath) : '';
196
- const queryWords = splitIntoWords(normalizedQuery).filter(w => w.length > 2);
398
+ // Remove duplicatas das palavras da query
399
+ const queryWords = [...new Set(splitIntoWords(normalizedQuery))].filter(w => w.length > 2);
197
400
  let score = 0;
198
401
  // Bônus alto se encontra no nome do arquivo (busca exata)
199
402
  if (filePath && normalizedFilePath.includes(normalizedQuery)) {
200
403
  score += 50;
201
404
  }
202
- // Bônus se palavras do nome do arquivo correspondem à query
405
+ // Expande termos do arquivo para comparação
406
+ const fileWords = splitIntoWords(normalizedFilePath);
407
+ const expandedFileTerms = expandQueryTerms(fileWords);
408
+ // Bônus se palavras da query (ou sinônimos/stems) correspondem ao nome do arquivo
203
409
  if (filePath) {
204
- const fileWords = splitIntoWords(normalizedFilePath);
205
- queryWords.forEach(qw => {
206
- const normalizedQw = normalizeWord(qw);
207
- fileWords.forEach(fw => {
208
- if (fw === qw || fw === normalizedQw || fw.includes(qw) || qw.includes(fw)) {
209
- score += 15;
410
+ for (const qw of queryWords) {
411
+ const wordExpansions = expandQueryTerms([qw]);
412
+ // Verifica match direto
413
+ for (const exp of wordExpansions) {
414
+ if (normalizedFilePath.includes(exp)) {
415
+ score += 20; // Bônus alto por match no nome do arquivo
416
+ break;
417
+ }
418
+ }
419
+ // Verifica overlap com expansões do arquivo
420
+ for (const exp of wordExpansions) {
421
+ if (expandedFileTerms.has(exp)) {
422
+ score += 15; // Bônus por sinônimo/stem encontrado
423
+ break;
210
424
  }
211
- });
212
- });
425
+ }
426
+ }
213
427
  }
214
428
  // Bônus se encontra no título (primeiro H1)
215
429
  const h1Match = content.match(/^#\s+(.+)$/m);
216
430
  if (h1Match) {
217
431
  const normalizedTitle = normalizeText(h1Match[1]);
432
+ const expandedTitleTerms = expandQueryTerms(splitIntoWords(normalizedTitle));
218
433
  if (normalizedTitle.includes(normalizedQuery)) {
219
434
  score += 30;
220
435
  }
221
- // Bônus adicional se cada palavra da query está no título
222
- queryWords.forEach(word => {
223
- const normalizedWord = normalizeWord(word);
224
- if (normalizedTitle.includes(word) || normalizedTitle.includes(normalizedWord)) {
225
- score += 5;
436
+ // Bônus adicional se cada palavra da query (ou sinônimo) está no título
437
+ for (const word of queryWords) {
438
+ const wordExpansions = expandQueryTerms([word]);
439
+ for (const exp of wordExpansions) {
440
+ if (normalizedTitle.includes(exp) || expandedTitleTerms.has(exp)) {
441
+ score += 8;
442
+ break;
443
+ }
444
+ }
445
+ }
446
+ }
447
+ // Conta ocorrências de cada palavra (e seus sinônimos/stems) no conteúdo
448
+ for (const word of queryWords) {
449
+ const wordExpansions = expandQueryTerms([word]);
450
+ let wordScore = 0;
451
+ for (const exp of wordExpansions) {
452
+ const escapedExp = exp.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
453
+ const matches = (normalizedContent.match(new RegExp(escapedExp, 'g')) || []).length;
454
+ if (matches > 0) {
455
+ // Palavra original vale mais, sinônimos valem um pouco menos
456
+ if (exp === word) {
457
+ wordScore += matches * 3;
458
+ }
459
+ else {
460
+ wordScore += matches * 1.5;
461
+ }
226
462
  }
227
- });
228
- }
229
- // Conta ocorrências de cada palavra no conteúdo
230
- queryWords.forEach(word => {
231
- const normalizedWord = normalizeWord(word);
232
- const contentMatches = (normalizedContent.match(new RegExp(word.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g')) || []).length;
233
- const normalizedMatches = (normalizedContent.match(new RegExp(normalizedWord.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g')) || []).length;
234
- score += (contentMatches + normalizedMatches) * 2;
463
+ }
464
+ score += Math.min(wordScore, 20); // Cap por palavra para evitar spam
235
465
  // Bônus adicional se palavra está no nome do arquivo
236
- if (normalizedFilePath.includes(word) || normalizedFilePath.includes(normalizedWord)) {
237
- score += 10;
466
+ for (const exp of wordExpansions) {
467
+ if (normalizedFilePath.includes(exp)) {
468
+ score += 10;
469
+ break;
470
+ }
238
471
  }
239
- });
472
+ }
240
473
  // Se query de uma palavra, também conta ocorrências da query completa
241
474
  if (queryWords.length === 0 && normalizedQuery.length > 2) {
242
- const normalizedQueryWord = normalizeWord(normalizedQuery);
243
- const fullMatches = (normalizedContent.match(new RegExp(normalizedQuery.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g')) || []).length;
244
- const normalizedFullMatches = (normalizedContent.match(new RegExp(normalizedQueryWord.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g')) || []).length;
245
- score += (fullMatches + normalizedFullMatches) * 2;
475
+ const queryExpansions = expandQueryTerms([normalizedQuery]);
476
+ for (const exp of queryExpansions) {
477
+ const escapedExp = exp.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
478
+ const matches = (normalizedContent.match(new RegExp(escapedExp, 'g')) || []).length;
479
+ score += matches * 2;
480
+ }
246
481
  }
247
482
  // Normaliza para 0-100
248
483
  return Math.min(100, score);
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/utils/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/utils/search.ts"],"names":[],"mappings":"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"}