whatsapp-docs-mcp 1.0.2 → 1.0.4

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,39 +1,325 @@
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
+ }
197
+ /**
198
+ * Divide texto em palavras, considerando underscores, hífens e espaços como separadores
199
+ */
200
+ function splitIntoWords(text) {
201
+ return text
202
+ .replace(/[_\-\s]+/g, ' ') // Substitui underscores, hífens e múltiplos espaços por espaço
203
+ .split(/\s+/)
204
+ .filter(w => w.length > 0);
205
+ }
206
+ /**
207
+ * Remove sufixos comuns para melhor matching (plural, etc)
208
+ */
209
+ function normalizeWord(word) {
210
+ // Remove sufixos comuns de plural em inglês
211
+ if (word.length > 3) {
212
+ if (word.endsWith('s') && !word.endsWith('ss')) {
213
+ return word.slice(0, -1);
214
+ }
215
+ if (word.endsWith('es')) {
216
+ return word.slice(0, -2);
217
+ }
218
+ if (word.endsWith('ies')) {
219
+ return word.slice(0, -3) + 'y';
220
+ }
221
+ }
222
+ return word;
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
+ }
15
247
  /**
16
248
  * Busca textual melhorada em conteúdo markdown
17
- * Busca por palavras individuais e considera nome do arquivo
249
+ * Usa expansão de termos (stemming + sinônimos) para busca mais flexível
250
+ * Remove duplicatas e considera nome do arquivo
18
251
  */
19
252
  function searchInContent(content, query, filePath) {
20
253
  const normalizedQuery = normalizeText(query.trim());
21
254
  const normalizedContent = normalizeText(content);
22
255
  const normalizedFilePath = filePath ? normalizeText(filePath) : '';
23
- // Busca no nome do arquivo primeiro (maior relevância)
256
+ // Busca no nome do arquivo primeiro (maior relevância) - busca exata
24
257
  if (filePath && normalizedFilePath.includes(normalizedQuery)) {
25
258
  return true;
26
259
  }
27
- // Divide query em palavras (filtra palavras muito curtas)
28
- const queryWords = normalizedQuery.split(/\s+/).filter(w => w.length > 2);
29
- // Se query tem múltiplas palavras, busca por todas (AND)
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
+ }
289
+ }
290
+ }
291
+ if (inContent || inFile) {
292
+ matchedOriginalWords++;
293
+ if (inFile) {
294
+ matchedInFileName++;
295
+ }
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%
30
308
  if (queryWords.length > 1) {
31
- return queryWords.every(word => normalizedContent.includes(word) ||
32
- normalizedFilePath.includes(word));
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) {
315
+ return true;
316
+ }
33
317
  }
34
- // Busca simples para query de uma palavra
35
- return normalizedContent.includes(normalizedQuery) ||
36
- normalizedFilePath.includes(normalizedQuery);
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;
37
323
  }
38
324
  /**
39
325
  * Extrai título do arquivo markdown (primeiro # ou nome do arquivo)
@@ -103,44 +389,95 @@ function extractExcerpt(content, query, contextLines = 3) {
103
389
  }
104
390
  /**
105
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
106
393
  */
107
394
  function calculateRelevance(content, query, filePath) {
108
395
  const normalizedQuery = normalizeText(query);
109
396
  const normalizedContent = normalizeText(content);
110
397
  const normalizedFilePath = filePath ? normalizeText(filePath) : '';
111
- const queryWords = normalizedQuery.split(/\s+/).filter(w => w.length > 2);
398
+ // Remove duplicatas das palavras da query
399
+ const queryWords = [...new Set(splitIntoWords(normalizedQuery))].filter(w => w.length > 2);
112
400
  let score = 0;
113
- // Bônus alto se encontra no nome do arquivo
401
+ // Bônus alto se encontra no nome do arquivo (busca exata)
114
402
  if (filePath && normalizedFilePath.includes(normalizedQuery)) {
115
403
  score += 50;
116
404
  }
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
409
+ if (filePath) {
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;
424
+ }
425
+ }
426
+ }
427
+ }
117
428
  // Bônus se encontra no título (primeiro H1)
118
429
  const h1Match = content.match(/^#\s+(.+)$/m);
119
430
  if (h1Match) {
120
431
  const normalizedTitle = normalizeText(h1Match[1]);
432
+ const expandedTitleTerms = expandQueryTerms(splitIntoWords(normalizedTitle));
121
433
  if (normalizedTitle.includes(normalizedQuery)) {
122
434
  score += 30;
123
435
  }
124
- // Bônus adicional se cada palavra da query está no título
125
- queryWords.forEach(word => {
126
- if (normalizedTitle.includes(word)) {
127
- 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
+ }
128
444
  }
129
- });
445
+ }
130
446
  }
131
- // Conta ocorrências de cada palavra no conteúdo
132
- queryWords.forEach(word => {
133
- const contentMatches = (normalizedContent.match(new RegExp(word, 'g')) || []).length;
134
- score += contentMatches * 2;
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
+ }
462
+ }
463
+ }
464
+ score += Math.min(wordScore, 20); // Cap por palavra para evitar spam
135
465
  // Bônus adicional se palavra está no nome do arquivo
136
- if (normalizedFilePath.includes(word)) {
137
- score += 10;
466
+ for (const exp of wordExpansions) {
467
+ if (normalizedFilePath.includes(exp)) {
468
+ score += 10;
469
+ break;
470
+ }
138
471
  }
139
- });
472
+ }
140
473
  // Se query de uma palavra, também conta ocorrências da query completa
141
474
  if (queryWords.length === 0 && normalizedQuery.length > 2) {
142
- const fullMatches = (normalizedContent.match(new RegExp(normalizedQuery, 'g')) || []).length;
143
- score += fullMatches * 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
+ }
144
481
  }
145
482
  // Normaliza para 0-100
146
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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"}