whatsapp-docs-mcp 1.0.0 → 1.0.3
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.
- package/dist/prompts.test.d.ts +2 -0
- package/dist/prompts.test.d.ts.map +1 -0
- package/dist/prompts.test.js +228 -0
- package/dist/prompts.test.js.map +1 -0
- package/dist/resources.test.d.ts +2 -0
- package/dist/resources.test.d.ts.map +1 -0
- package/dist/resources.test.js +104 -0
- package/dist/resources.test.js.map +1 -0
- package/dist/tools.d.ts +37 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +10 -3
- package/dist/tools.js.map +1 -1
- package/dist/tools.test.d.ts +2 -0
- package/dist/tools.test.d.ts.map +1 -0
- package/dist/tools.test.js +364 -0
- package/dist/tools.test.js.map +1 -0
- package/dist/utils/fileLoader.test.d.ts +2 -0
- package/dist/utils/fileLoader.test.d.ts.map +1 -0
- package/dist/utils/fileLoader.test.js +147 -0
- package/dist/utils/fileLoader.test.js.map +1 -0
- package/dist/utils/search.d.ts +10 -4
- package/dist/utils/search.d.ts.map +1 -1
- package/dist/utils/search.js +176 -17
- package/dist/utils/search.js.map +1 -1
- package/dist/utils/search.test.d.ts +2 -0
- package/dist/utils/search.test.d.ts.map +1 -0
- package/dist/utils/search.test.js +196 -0
- package/dist/utils/search.test.js.map +1 -0
- package/package.json +9 -3
- package/docs/index.md +0 -318
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const vitest_1 = require("vitest");
|
|
37
|
+
const tools_1 = require("./tools");
|
|
38
|
+
const fileLoader_1 = require("./utils/fileLoader");
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
// Mock do fs também
|
|
41
|
+
vitest_1.vi.mock('fs', async () => {
|
|
42
|
+
const actual = await vitest_1.vi.importActual('fs');
|
|
43
|
+
return {
|
|
44
|
+
...actual,
|
|
45
|
+
default: {
|
|
46
|
+
...actual,
|
|
47
|
+
existsSync: vitest_1.vi.fn(),
|
|
48
|
+
},
|
|
49
|
+
existsSync: vitest_1.vi.fn(),
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
// Mock do fileLoader
|
|
53
|
+
vitest_1.vi.mock('./utils/fileLoader', async () => {
|
|
54
|
+
const actual = await vitest_1.vi.importActual('./utils/fileLoader');
|
|
55
|
+
return {
|
|
56
|
+
...actual,
|
|
57
|
+
getDocsPath: vitest_1.vi.fn(() => '/mock/docs'),
|
|
58
|
+
findAllMarkdownFiles: vitest_1.vi.fn(() => [
|
|
59
|
+
'/mock/docs/mensagens/tipos_de_mensagens/audio_messages.md',
|
|
60
|
+
'/mock/docs/mensagens/tipos_de_mensagens/text_messages.md',
|
|
61
|
+
'/mock/docs/mensagens/recursos_adicionais/typing_indicators.md',
|
|
62
|
+
'/mock/docs/referencia/midias/media_upload_api.md',
|
|
63
|
+
]),
|
|
64
|
+
loadMarkdownFile: vitest_1.vi.fn((filePath) => {
|
|
65
|
+
const mockFiles = {
|
|
66
|
+
'/mock/docs/mensagens/tipos_de_mensagens/audio_messages.md': `# Mensagens de áudio
|
|
67
|
+
|
|
68
|
+
É possível usar a API para enviar mensagens de voz e mensagens de áudio básicas.
|
|
69
|
+
As mensagens de áudio são suportadas pela API.
|
|
70
|
+
As mensagens de áudio podem ser gravadas e enviadas.
|
|
71
|
+
A gravação de áudio é suportada pela API.
|
|
72
|
+
You can record audio messages using the API for recording purposes.`,
|
|
73
|
+
'/mock/docs/mensagens/tipos_de_mensagens/text_messages.md': `# Mensagens de texto
|
|
74
|
+
|
|
75
|
+
Os SMS contêm somente um corpo de texto e uma prévia de link opcional.`,
|
|
76
|
+
'/mock/docs/mensagens/recursos_adicionais/typing_indicators.md': `# Indicadores de digitação
|
|
77
|
+
|
|
78
|
+
Quando você recebe um webhook de mensagens indicando uma mensagem recebida, é possível usar o valor message.id para marcar a mensagem como lida e exibir um indicador de digitação. Dessa forma, o usuário do WhatsApp saberá que você está escrevendo uma resposta.
|
|
79
|
+
|
|
80
|
+
O indicador de digitação será removido depois que você responder ou após 25 segundos.
|
|
81
|
+
|
|
82
|
+
"typing_indicator": {
|
|
83
|
+
"type": "text"
|
|
84
|
+
}`,
|
|
85
|
+
'/mock/docs/referencia/midias/media_upload_api.md': `# API de Upload de Mídia
|
|
86
|
+
|
|
87
|
+
Envie arquivos de mídia (imagens, vídeos, áudio, documentos) para o WhatsApp.`,
|
|
88
|
+
};
|
|
89
|
+
return mockFiles[filePath] || '';
|
|
90
|
+
}),
|
|
91
|
+
};
|
|
92
|
+
});
|
|
93
|
+
(0, vitest_1.describe)('searchDocumentation', () => {
|
|
94
|
+
(0, vitest_1.beforeEach)(() => {
|
|
95
|
+
vitest_1.vi.clearAllMocks();
|
|
96
|
+
// Garante que os mocks padrão estão ativos
|
|
97
|
+
vitest_1.vi.mocked(fileLoader_1.getDocsPath).mockReturnValue('/mock/docs');
|
|
98
|
+
vitest_1.vi.mocked(fileLoader_1.findAllMarkdownFiles).mockReturnValue([
|
|
99
|
+
'/mock/docs/mensagens/tipos_de_mensagens/audio_messages.md',
|
|
100
|
+
'/mock/docs/mensagens/tipos_de_mensagens/text_messages.md',
|
|
101
|
+
'/mock/docs/mensagens/recursos_adicionais/typing_indicators.md',
|
|
102
|
+
'/mock/docs/referencia/midias/media_upload_api.md',
|
|
103
|
+
]);
|
|
104
|
+
vitest_1.vi.mocked(fileLoader_1.loadMarkdownFile).mockImplementation((filePath) => {
|
|
105
|
+
const mockFiles = {
|
|
106
|
+
'/mock/docs/mensagens/tipos_de_mensagens/audio_messages.md': `# Mensagens de áudio
|
|
107
|
+
|
|
108
|
+
É possível usar a API para enviar mensagens de voz e mensagens de áudio básicas.
|
|
109
|
+
As mensagens de áudio são suportadas pela API.
|
|
110
|
+
As mensagens de áudio podem ser gravadas e enviadas.
|
|
111
|
+
A gravação de áudio é suportada pela API.
|
|
112
|
+
You can record audio messages using the API for recording purposes.`,
|
|
113
|
+
'/mock/docs/mensagens/tipos_de_mensagens/text_messages.md': `# Mensagens de texto
|
|
114
|
+
|
|
115
|
+
Os SMS contêm somente um corpo de texto e uma prévia de link opcional.`,
|
|
116
|
+
'/mock/docs/mensagens/recursos_adicionais/typing_indicators.md': `# Indicadores de digitação
|
|
117
|
+
|
|
118
|
+
Quando você recebe um webhook de mensagens indicando uma mensagem recebida, é possível usar o valor message.id para marcar a mensagem como lida e exibir um indicador de digitação. Dessa forma, o usuário do WhatsApp saberá que você está escrevendo uma resposta.
|
|
119
|
+
|
|
120
|
+
O indicador de digitação será removido depois que você responder ou após 25 segundos.
|
|
121
|
+
|
|
122
|
+
"typing_indicator": {
|
|
123
|
+
"type": "text"
|
|
124
|
+
}`,
|
|
125
|
+
'/mock/docs/referencia/midias/media_upload_api.md': `# API de Upload de Mídia
|
|
126
|
+
|
|
127
|
+
Envie arquivos de mídia (imagens, vídeos, áudio, documentos) para o WhatsApp.`,
|
|
128
|
+
};
|
|
129
|
+
return mockFiles[filePath] || '';
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
(0, vitest_1.it)('deve encontrar documentos por nome de arquivo', async () => {
|
|
133
|
+
const results = await (0, tools_1.searchDocumentation)('audio');
|
|
134
|
+
(0, vitest_1.expect)(results.length).toBeGreaterThan(0);
|
|
135
|
+
const audioResult = results.find(r => r.path.includes('audio'));
|
|
136
|
+
(0, vitest_1.expect)(audioResult).toBeDefined();
|
|
137
|
+
(0, vitest_1.expect)(audioResult?.relevance).toBeGreaterThan(50); // Alta relevância por nome
|
|
138
|
+
});
|
|
139
|
+
(0, vitest_1.it)('deve encontrar documentos por conteúdo', async () => {
|
|
140
|
+
const results = await (0, tools_1.searchDocumentation)('mensagens');
|
|
141
|
+
(0, vitest_1.expect)(results.length).toBeGreaterThan(0);
|
|
142
|
+
// Deve encontrar tanto audio quanto text messages
|
|
143
|
+
const paths = results.map(r => r.path);
|
|
144
|
+
(0, vitest_1.expect)(paths.some(p => p.includes('audio'))).toBe(true);
|
|
145
|
+
(0, vitest_1.expect)(paths.some(p => p.includes('text'))).toBe(true);
|
|
146
|
+
});
|
|
147
|
+
(0, vitest_1.it)('deve encontrar documentos com busca normalizada (áudio/audio)', async () => {
|
|
148
|
+
const resultsAudio = await (0, tools_1.searchDocumentation)('audio');
|
|
149
|
+
const resultsAcento = await (0, tools_1.searchDocumentation)('áudio');
|
|
150
|
+
// Ambos devem encontrar resultados
|
|
151
|
+
(0, vitest_1.expect)(resultsAudio.length).toBeGreaterThan(0);
|
|
152
|
+
(0, vitest_1.expect)(resultsAcento.length).toBeGreaterThan(0);
|
|
153
|
+
const pathsAudio = resultsAudio.map(r => r.path);
|
|
154
|
+
const pathsAcento = resultsAcento.map(r => r.path);
|
|
155
|
+
// Deve encontrar arquivos similares
|
|
156
|
+
(0, vitest_1.expect)(pathsAudio.some(p => p.includes('audio'))).toBe(true);
|
|
157
|
+
(0, vitest_1.expect)(pathsAcento.some(p => p.includes('audio'))).toBe(true);
|
|
158
|
+
});
|
|
159
|
+
(0, vitest_1.it)('deve encontrar documentos com múltiplas palavras', async () => {
|
|
160
|
+
const results = await (0, tools_1.searchDocumentation)('audio message');
|
|
161
|
+
(0, vitest_1.expect)(results.length).toBeGreaterThan(0);
|
|
162
|
+
const audioResult = results.find(r => r.path.includes('audio'));
|
|
163
|
+
(0, vitest_1.expect)(audioResult).toBeDefined();
|
|
164
|
+
});
|
|
165
|
+
(0, vitest_1.it)('deve filtrar por seção quando especificado', async () => {
|
|
166
|
+
const results = await (0, tools_1.searchDocumentation)('mensagens', 'mensagens');
|
|
167
|
+
(0, vitest_1.expect)(results.length).toBeGreaterThan(0);
|
|
168
|
+
// Todos os resultados devem estar na seção mensagens
|
|
169
|
+
results.forEach(result => {
|
|
170
|
+
(0, vitest_1.expect)(result.path).toContain('mensagens');
|
|
171
|
+
});
|
|
172
|
+
});
|
|
173
|
+
(0, vitest_1.it)('deve ordenar resultados por relevância', async () => {
|
|
174
|
+
const results = await (0, tools_1.searchDocumentation)('audio');
|
|
175
|
+
(0, vitest_1.expect)(results.length).toBeGreaterThan(0);
|
|
176
|
+
// Primeiro resultado deve ter maior relevância
|
|
177
|
+
for (let i = 1; i < results.length; i++) {
|
|
178
|
+
(0, vitest_1.expect)(results[i - 1].relevance).toBeGreaterThanOrEqual(results[i].relevance);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
(0, vitest_1.it)('deve limitar resultados a 20', async () => {
|
|
182
|
+
// Mock com muitos arquivos
|
|
183
|
+
const manyFiles = Array.from({ length: 30 }, (_, i) => `/mock/docs/test/file${i}.md`);
|
|
184
|
+
vitest_1.vi.mocked(fileLoader_1.findAllMarkdownFiles).mockReturnValueOnce(manyFiles);
|
|
185
|
+
vitest_1.vi.mocked(fileLoader_1.loadMarkdownFile).mockImplementation(() => 'conteúdo de teste com audio');
|
|
186
|
+
const results = await (0, tools_1.searchDocumentation)('audio');
|
|
187
|
+
(0, vitest_1.expect)(results.length).toBeLessThanOrEqual(20);
|
|
188
|
+
});
|
|
189
|
+
(0, vitest_1.it)('deve retornar array vazio quando não encontra nada', async () => {
|
|
190
|
+
vitest_1.vi.mocked(fileLoader_1.loadMarkdownFile).mockImplementation(() => 'conteúdo completamente diferente sem relação');
|
|
191
|
+
const results = await (0, tools_1.searchDocumentation)('xyzabc123nenhummatch');
|
|
192
|
+
(0, vitest_1.expect)(results.length).toBe(0);
|
|
193
|
+
});
|
|
194
|
+
(0, vitest_1.it)('deve incluir título e excerpt nos resultados', async () => {
|
|
195
|
+
const results = await (0, tools_1.searchDocumentation)('audio');
|
|
196
|
+
(0, vitest_1.expect)(results.length).toBeGreaterThan(0);
|
|
197
|
+
const firstResult = results[0];
|
|
198
|
+
(0, vitest_1.expect)(firstResult.title).toBeDefined();
|
|
199
|
+
(0, vitest_1.expect)(firstResult.excerpt).toBeDefined();
|
|
200
|
+
(0, vitest_1.expect)(firstResult.path).toBeDefined();
|
|
201
|
+
(0, vitest_1.expect)(firstResult.relevance).toBeGreaterThanOrEqual(0);
|
|
202
|
+
});
|
|
203
|
+
(0, vitest_1.it)('deve encontrar typing_indicators.md com diferentes queries', async () => {
|
|
204
|
+
// Testa diferentes variações da query que o usuário pode usar
|
|
205
|
+
const queries = [
|
|
206
|
+
'typing indicator',
|
|
207
|
+
'typing indicator digitando',
|
|
208
|
+
'indicador digitação',
|
|
209
|
+
'indicadores de digitação',
|
|
210
|
+
'typing_indicators',
|
|
211
|
+
];
|
|
212
|
+
for (const query of queries) {
|
|
213
|
+
const results = await (0, tools_1.searchDocumentation)(query);
|
|
214
|
+
// Deve encontrar pelo menos um resultado relacionado a typing indicators
|
|
215
|
+
const typingResult = results.find(r => r.path.includes('typing_indicators') ||
|
|
216
|
+
r.path.includes('typing-indicators') ||
|
|
217
|
+
(r.title.toLowerCase().includes('indicador') && r.title.toLowerCase().includes('digitação')));
|
|
218
|
+
(0, vitest_1.expect)(typingResult).toBeDefined();
|
|
219
|
+
if (!typingResult) {
|
|
220
|
+
throw new Error(`Query "${query}" não encontrou typing_indicators.md. Resultados: ${results.map(r => r.path).join(', ')}`);
|
|
221
|
+
}
|
|
222
|
+
(0, vitest_1.expect)(typingResult.relevance).toBeGreaterThan(0);
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
(0, vitest_1.it)('deve encontrar typing_indicators.md mesmo com query em inglês e português misturado', async () => {
|
|
226
|
+
const results = await (0, tools_1.searchDocumentation)('typing indicator digitando');
|
|
227
|
+
(0, vitest_1.expect)(results.length).toBeGreaterThan(0);
|
|
228
|
+
const typingResult = results.find(r => r.path.includes('typing_indicators') ||
|
|
229
|
+
(r.title.toLowerCase().includes('indicador') && r.title.toLowerCase().includes('digitação')));
|
|
230
|
+
// Deve encontrar o arquivo typing_indicators.md
|
|
231
|
+
(0, vitest_1.expect)(typingResult).toBeDefined();
|
|
232
|
+
if (typingResult) {
|
|
233
|
+
(0, vitest_1.expect)(typingResult.path).toContain('typing_indicators');
|
|
234
|
+
(0, vitest_1.expect)(typingResult.relevance).toBeGreaterThan(0);
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
(0, vitest_1.it)('deve encontrar documentos sobre gravação de áudio', async () => {
|
|
238
|
+
const queries = [
|
|
239
|
+
'gravação audio',
|
|
240
|
+
'gravação de áudio',
|
|
241
|
+
'recording audio',
|
|
242
|
+
'audio recording',
|
|
243
|
+
];
|
|
244
|
+
for (const query of queries) {
|
|
245
|
+
const results = await (0, tools_1.searchDocumentation)(query);
|
|
246
|
+
// Deve encontrar pelo menos um resultado relacionado a áudio
|
|
247
|
+
const audioResult = results.find(r => r.path.includes('audio') ||
|
|
248
|
+
r.title.toLowerCase().includes('áudio') ||
|
|
249
|
+
r.title.toLowerCase().includes('audio'));
|
|
250
|
+
(0, vitest_1.expect)(audioResult).toBeDefined();
|
|
251
|
+
if (!audioResult) {
|
|
252
|
+
throw new Error(`Query "${query}" não encontrou documentos de áudio. Resultados: ${results.map(r => r.path).join(', ')}`);
|
|
253
|
+
}
|
|
254
|
+
(0, vitest_1.expect)(audioResult.relevance).toBeGreaterThan(0);
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
});
|
|
258
|
+
(0, vitest_1.describe)('getDocumentByPath', () => {
|
|
259
|
+
(0, vitest_1.beforeEach)(() => {
|
|
260
|
+
vitest_1.vi.clearAllMocks();
|
|
261
|
+
});
|
|
262
|
+
(0, vitest_1.it)('deve retornar conteúdo do documento', async () => {
|
|
263
|
+
const { getDocumentByPath } = await Promise.resolve().then(() => __importStar(require('./tools')));
|
|
264
|
+
const mockContent = '# Título\n\nConteúdo de teste';
|
|
265
|
+
vitest_1.vi.mocked(fileLoader_1.loadMarkdownFile).mockReturnValueOnce(mockContent);
|
|
266
|
+
const content = await getDocumentByPath('mensagens/tipos_de_mensagens/audio_messages.md');
|
|
267
|
+
// Verifica comportamento: retorna conteúdo carregado
|
|
268
|
+
(0, vitest_1.expect)(content).toBe(mockContent);
|
|
269
|
+
(0, vitest_1.expect)(content.length).toBeGreaterThan(0);
|
|
270
|
+
});
|
|
271
|
+
(0, vitest_1.it)('deve lançar erro para caminho inválido', async () => {
|
|
272
|
+
const { getDocumentByPath } = await Promise.resolve().then(() => __importStar(require('./tools')));
|
|
273
|
+
await (0, vitest_1.expect)(getDocumentByPath('../../../etc/passwd')).rejects.toThrow('Invalid path');
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
(0, vitest_1.describe)('listDocumentationSections', () => {
|
|
277
|
+
(0, vitest_1.it)('deve listar todas as seções', async () => {
|
|
278
|
+
const { listDocumentationSections } = await Promise.resolve().then(() => __importStar(require('./tools')));
|
|
279
|
+
const sections = await listDocumentationSections();
|
|
280
|
+
(0, vitest_1.expect)(sections.sections).toBeDefined();
|
|
281
|
+
(0, vitest_1.expect)(Array.isArray(sections.sections)).toBe(true);
|
|
282
|
+
});
|
|
283
|
+
(0, vitest_1.it)('deve filtrar por seção quando especificado', async () => {
|
|
284
|
+
const { listDocumentationSections } = await Promise.resolve().then(() => __importStar(require('./tools')));
|
|
285
|
+
const sections = await listDocumentationSections('mensagens');
|
|
286
|
+
sections.sections.forEach(section => {
|
|
287
|
+
(0, vitest_1.expect)(section.name).toContain('mensagens');
|
|
288
|
+
});
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
(0, vitest_1.describe)('getEndpointReference', () => {
|
|
292
|
+
(0, vitest_1.beforeEach)(() => {
|
|
293
|
+
vitest_1.vi.clearAllMocks();
|
|
294
|
+
vitest_1.vi.mocked(fileLoader_1.getDocsPath).mockReturnValue('/mock/docs');
|
|
295
|
+
});
|
|
296
|
+
(0, vitest_1.it)('deve encontrar referência de endpoint', async () => {
|
|
297
|
+
const { getEndpointReference } = await Promise.resolve().then(() => __importStar(require('./tools')));
|
|
298
|
+
const mockContent = '# API Reference\n\nPOST /media';
|
|
299
|
+
vitest_1.vi.mocked(fs.existsSync).mockReturnValue(true);
|
|
300
|
+
vitest_1.vi.mocked(fileLoader_1.findAllMarkdownFiles).mockReturnValue([
|
|
301
|
+
'/mock/docs/referencia/midias/media_api.md',
|
|
302
|
+
]);
|
|
303
|
+
vitest_1.vi.mocked(fileLoader_1.loadMarkdownFile).mockReturnValue(mockContent);
|
|
304
|
+
const content = await getEndpointReference('/media');
|
|
305
|
+
// Verifica comportamento: retorna conteúdo encontrado
|
|
306
|
+
(0, vitest_1.expect)(content).toBe(mockContent);
|
|
307
|
+
(0, vitest_1.expect)(content.length).toBeGreaterThan(0);
|
|
308
|
+
});
|
|
309
|
+
(0, vitest_1.it)('deve lançar erro quando endpoint não encontrado', async () => {
|
|
310
|
+
const { getEndpointReference } = await Promise.resolve().then(() => __importStar(require('./tools')));
|
|
311
|
+
vitest_1.vi.mocked(fs.existsSync).mockReturnValue(true);
|
|
312
|
+
vitest_1.vi.mocked(fileLoader_1.findAllMarkdownFiles).mockReturnValue([]);
|
|
313
|
+
await (0, vitest_1.expect)(getEndpointReference('/nonexistent')).rejects.toThrow('Endpoint reference not found');
|
|
314
|
+
});
|
|
315
|
+
});
|
|
316
|
+
(0, vitest_1.describe)('getErrorCodeInfo', () => {
|
|
317
|
+
(0, vitest_1.beforeEach)(() => {
|
|
318
|
+
vitest_1.vi.clearAllMocks();
|
|
319
|
+
vitest_1.vi.mocked(fileLoader_1.getDocsPath).mockReturnValue('/mock/docs');
|
|
320
|
+
});
|
|
321
|
+
(0, vitest_1.it)('deve retornar informações de código de erro', async () => {
|
|
322
|
+
const { getErrorCodeInfo } = await Promise.resolve().then(() => __importStar(require('./tools')));
|
|
323
|
+
vitest_1.vi.mocked(fs.existsSync).mockReturnValue(true);
|
|
324
|
+
vitest_1.vi.mocked(fileLoader_1.loadMarkdownFile).mockReturnValue('100 - Rate limit exceeded\n200 - Invalid token');
|
|
325
|
+
const info = await getErrorCodeInfo(100);
|
|
326
|
+
(0, vitest_1.expect)(info.code).toBe(100);
|
|
327
|
+
(0, vitest_1.expect)(info.message).toBeDefined();
|
|
328
|
+
(0, vitest_1.expect)(info.relatedDocs).toContain('suporte/error_codes.md');
|
|
329
|
+
});
|
|
330
|
+
(0, vitest_1.it)('deve lançar erro quando código não encontrado', async () => {
|
|
331
|
+
const { getErrorCodeInfo } = await Promise.resolve().then(() => __importStar(require('./tools')));
|
|
332
|
+
vitest_1.vi.mocked(fs.existsSync).mockReturnValue(true);
|
|
333
|
+
vitest_1.vi.mocked(fileLoader_1.loadMarkdownFile).mockReturnValue('100 - Rate limit exceeded');
|
|
334
|
+
await (0, vitest_1.expect)(getErrorCodeInfo(999)).rejects.toThrow('Error code 999 not found');
|
|
335
|
+
});
|
|
336
|
+
});
|
|
337
|
+
(0, vitest_1.describe)('getQuickReference', () => {
|
|
338
|
+
(0, vitest_1.beforeEach)(() => {
|
|
339
|
+
vitest_1.vi.clearAllMocks();
|
|
340
|
+
vitest_1.vi.mocked(fileLoader_1.getDocsPath).mockReturnValue('/mock/docs');
|
|
341
|
+
});
|
|
342
|
+
(0, vitest_1.it)('deve retornar referência rápida quando arquivo existe', async () => {
|
|
343
|
+
const { getQuickReference } = await Promise.resolve().then(() => __importStar(require('./tools')));
|
|
344
|
+
const mockContent = '## Operação\n\nDescrição da operação';
|
|
345
|
+
vitest_1.vi.mocked(fs.existsSync).mockReturnValue(true);
|
|
346
|
+
vitest_1.vi.mocked(fileLoader_1.loadMarkdownFile).mockReturnValue(mockContent);
|
|
347
|
+
const content = await getQuickReference('send_message');
|
|
348
|
+
// Verifica comportamento: retorna conteúdo válido
|
|
349
|
+
(0, vitest_1.expect)(content).toBeDefined();
|
|
350
|
+
(0, vitest_1.expect)(typeof content).toBe('string');
|
|
351
|
+
(0, vitest_1.expect)(content.length).toBeGreaterThan(0);
|
|
352
|
+
});
|
|
353
|
+
(0, vitest_1.it)('deve fazer fallback para busca quando arquivo não existe', async () => {
|
|
354
|
+
const { getQuickReference } = await Promise.resolve().then(() => __importStar(require('./tools')));
|
|
355
|
+
vitest_1.vi.mocked(fs.existsSync).mockReturnValue(false);
|
|
356
|
+
vitest_1.vi.mocked(fileLoader_1.findAllMarkdownFiles).mockReturnValue([
|
|
357
|
+
'/mock/docs/mensagens/tipos_de_mensagens/audio_messages.md',
|
|
358
|
+
]);
|
|
359
|
+
vitest_1.vi.mocked(fileLoader_1.loadMarkdownFile).mockReturnValue('# Mensagens de áudio');
|
|
360
|
+
const content = await getQuickReference('audio');
|
|
361
|
+
(0, vitest_1.expect)(content).toBeDefined();
|
|
362
|
+
});
|
|
363
|
+
});
|
|
364
|
+
//# sourceMappingURL=tools.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../src/tools.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileLoader.test.d.ts","sourceRoot":"","sources":["../../src/utils/fileLoader.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const vitest_1 = require("vitest");
|
|
37
|
+
const fs = __importStar(require("fs"));
|
|
38
|
+
const fileLoader_1 = require("./fileLoader");
|
|
39
|
+
// Mock do fs
|
|
40
|
+
vitest_1.vi.mock('fs', () => {
|
|
41
|
+
return {
|
|
42
|
+
default: {
|
|
43
|
+
readFileSync: vitest_1.vi.fn(),
|
|
44
|
+
readdirSync: vitest_1.vi.fn(),
|
|
45
|
+
statSync: vitest_1.vi.fn(),
|
|
46
|
+
existsSync: vitest_1.vi.fn(),
|
|
47
|
+
},
|
|
48
|
+
readFileSync: vitest_1.vi.fn(),
|
|
49
|
+
readdirSync: vitest_1.vi.fn(),
|
|
50
|
+
statSync: vitest_1.vi.fn(),
|
|
51
|
+
existsSync: vitest_1.vi.fn(),
|
|
52
|
+
};
|
|
53
|
+
});
|
|
54
|
+
(0, vitest_1.describe)('loadMarkdownFile', () => {
|
|
55
|
+
(0, vitest_1.beforeEach)(() => {
|
|
56
|
+
vitest_1.vi.clearAllMocks();
|
|
57
|
+
});
|
|
58
|
+
(0, vitest_1.it)('deve carregar conteúdo de arquivo markdown', () => {
|
|
59
|
+
const mockContent = '# Título\n\nConteúdo do arquivo';
|
|
60
|
+
vitest_1.vi.mocked(fs.readFileSync).mockReturnValue(mockContent);
|
|
61
|
+
const result = (0, fileLoader_1.loadMarkdownFile)('/path/to/file.md');
|
|
62
|
+
(0, vitest_1.expect)(result).toBe(mockContent);
|
|
63
|
+
(0, vitest_1.expect)(fs.readFileSync).toHaveBeenCalledWith('/path/to/file.md', 'utf-8');
|
|
64
|
+
});
|
|
65
|
+
(0, vitest_1.it)('deve lançar erro quando arquivo não existe', () => {
|
|
66
|
+
vitest_1.vi.mocked(fs.readFileSync).mockImplementation(() => {
|
|
67
|
+
throw new Error('ENOENT: no such file or directory');
|
|
68
|
+
});
|
|
69
|
+
(0, vitest_1.expect)(() => {
|
|
70
|
+
(0, fileLoader_1.loadMarkdownFile)('/path/to/nonexistent.md');
|
|
71
|
+
}).toThrow('Failed to load file');
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
(0, vitest_1.describe)('findAllMarkdownFiles', () => {
|
|
75
|
+
(0, vitest_1.beforeEach)(() => {
|
|
76
|
+
vitest_1.vi.clearAllMocks();
|
|
77
|
+
});
|
|
78
|
+
(0, vitest_1.it)('deve encontrar todos os arquivos .md recursivamente', () => {
|
|
79
|
+
const calls = [];
|
|
80
|
+
vitest_1.vi.mocked(fs.readdirSync).mockImplementation(((dir) => {
|
|
81
|
+
const dirStr = String(dir);
|
|
82
|
+
calls.push(dirStr);
|
|
83
|
+
if (dirStr === '/docs') {
|
|
84
|
+
return ['file1.md', 'subdir', 'file2.md'];
|
|
85
|
+
}
|
|
86
|
+
if (dirStr === '/docs/subdir') {
|
|
87
|
+
return ['file3.md'];
|
|
88
|
+
}
|
|
89
|
+
return [];
|
|
90
|
+
}));
|
|
91
|
+
vitest_1.vi.mocked(fs.statSync).mockImplementation(((filePath) => {
|
|
92
|
+
const filePathStr = String(filePath);
|
|
93
|
+
const isDir = filePathStr.includes('subdir') && !filePathStr.endsWith('.md');
|
|
94
|
+
return {
|
|
95
|
+
isDirectory: () => isDir,
|
|
96
|
+
};
|
|
97
|
+
}));
|
|
98
|
+
const result = (0, fileLoader_1.findAllMarkdownFiles)('/docs');
|
|
99
|
+
(0, vitest_1.expect)(result).toContain('/docs/file1.md');
|
|
100
|
+
(0, vitest_1.expect)(result).toContain('/docs/file2.md');
|
|
101
|
+
// Verifica que subdir foi processado
|
|
102
|
+
(0, vitest_1.expect)(calls).toContain('/docs/subdir');
|
|
103
|
+
});
|
|
104
|
+
(0, vitest_1.it)('deve ignorar arquivos que não são .md', () => {
|
|
105
|
+
vitest_1.vi.mocked(fs.readdirSync).mockReturnValue(['file1.md', 'file2.txt', 'file3.js']);
|
|
106
|
+
vitest_1.vi.mocked(fs.statSync).mockReturnValue({
|
|
107
|
+
isDirectory: () => false,
|
|
108
|
+
});
|
|
109
|
+
const result = (0, fileLoader_1.findAllMarkdownFiles)('/docs');
|
|
110
|
+
(0, vitest_1.expect)(result).toContain('/docs/file1.md');
|
|
111
|
+
(0, vitest_1.expect)(result).not.toContain('/docs/file2.txt');
|
|
112
|
+
(0, vitest_1.expect)(result).not.toContain('/docs/file3.js');
|
|
113
|
+
});
|
|
114
|
+
(0, vitest_1.it)('deve retornar array vazio para diretório vazio', () => {
|
|
115
|
+
vitest_1.vi.mocked(fs.readdirSync).mockReturnValue([]);
|
|
116
|
+
const result = (0, fileLoader_1.findAllMarkdownFiles)('/empty');
|
|
117
|
+
(0, vitest_1.expect)(result).toEqual([]);
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
(0, vitest_1.describe)('getDocsPath', () => {
|
|
121
|
+
(0, vitest_1.beforeEach)(() => {
|
|
122
|
+
vitest_1.vi.clearAllMocks();
|
|
123
|
+
});
|
|
124
|
+
(0, vitest_1.it)('deve encontrar docs/ no caminho esperado', () => {
|
|
125
|
+
// getDocsPath usa require('fs') internamente, então testamos apenas que retorna um caminho válido
|
|
126
|
+
const result = (0, fileLoader_1.getDocsPath)();
|
|
127
|
+
(0, vitest_1.expect)(result).toBeDefined();
|
|
128
|
+
(0, vitest_1.expect)(typeof result).toBe('string');
|
|
129
|
+
(0, vitest_1.expect)(result.length).toBeGreaterThan(0);
|
|
130
|
+
});
|
|
131
|
+
(0, vitest_1.it)('deve retornar caminho válido mesmo quando validação falha', () => {
|
|
132
|
+
const result = (0, fileLoader_1.getDocsPath)();
|
|
133
|
+
(0, vitest_1.expect)(result).toBeDefined();
|
|
134
|
+
(0, vitest_1.expect)(typeof result).toBe('string');
|
|
135
|
+
});
|
|
136
|
+
(0, vitest_1.it)('deve validar que docs/ contém arquivos markdown', () => {
|
|
137
|
+
vitest_1.vi.mocked(fs.existsSync).mockReturnValue(true);
|
|
138
|
+
vitest_1.vi.mocked(fs.readdirSync).mockReturnValue(['file.txt', 'subdir']); // Sem .md
|
|
139
|
+
vitest_1.vi.mocked(fs.statSync).mockReturnValue({
|
|
140
|
+
isDirectory: () => true,
|
|
141
|
+
});
|
|
142
|
+
const result = (0, fileLoader_1.getDocsPath)();
|
|
143
|
+
// Deve tentar fallbacks ou retornar caminho esperado mesmo sem validação
|
|
144
|
+
(0, vitest_1.expect)(result).toBeDefined();
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
//# sourceMappingURL=fileLoader.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fileLoader.test.js","sourceRoot":"","sources":["../../src/utils/fileLoader.test.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/search.d.ts
CHANGED
|
@@ -5,9 +5,15 @@ export interface SearchResult {
|
|
|
5
5
|
relevance: number;
|
|
6
6
|
}
|
|
7
7
|
/**
|
|
8
|
-
*
|
|
8
|
+
* Normaliza texto removendo acentos e convertendo para minúsculas
|
|
9
9
|
*/
|
|
10
|
-
export declare function
|
|
10
|
+
export declare function normalizeText(text: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Busca textual melhorada em conteúdo markdown
|
|
13
|
+
* Busca por palavras individuais e considera nome do arquivo
|
|
14
|
+
* Melhorado para considerar underscores/hífens e usar lógica mais flexível
|
|
15
|
+
*/
|
|
16
|
+
export declare function searchInContent(content: string, query: string, filePath?: string): boolean;
|
|
11
17
|
/**
|
|
12
18
|
* Extrai título do arquivo markdown (primeiro # ou nome do arquivo)
|
|
13
19
|
*/
|
|
@@ -21,7 +27,7 @@ export declare function extractDescription(content: string, maxLength?: number):
|
|
|
21
27
|
*/
|
|
22
28
|
export declare function extractExcerpt(content: string, query: string, contextLines?: number): string;
|
|
23
29
|
/**
|
|
24
|
-
* Calcula relevância
|
|
30
|
+
* Calcula relevância melhorada baseada em ocorrências, nome do arquivo e título
|
|
25
31
|
*/
|
|
26
|
-
export declare function calculateRelevance(content: string, query: string): number;
|
|
32
|
+
export declare function calculateRelevance(content: string, query: string, filePath?: string): number;
|
|
27
33
|
//# sourceMappingURL=search.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/utils/search.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/utils/search.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD;AA+BD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAwF1F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAgBtE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,MAAY,GAAG,MAAM,CAmBnF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,MAAU,GAAG,MAAM,CA6B/F;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAiE5F"}
|