viberag 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli/commands/mcp-setup.d.ts +1 -1
- package/dist/cli/commands/mcp-setup.js +23 -3
- package/dist/cli/components/CleanWizard.js +16 -1
- package/dist/cli/components/InitWizard.js +37 -15
- package/dist/common/types.d.ts +2 -2
- package/dist/mcp/index.js +5 -1
- package/dist/mcp/warmup.d.ts +5 -0
- package/dist/mcp/warmup.js +7 -0
- package/dist/rag/config/index.d.ts +4 -0
- package/dist/rag/config/index.js +37 -13
- package/dist/rag/embeddings/gemini.js +34 -7
- package/dist/rag/embeddings/index.d.ts +1 -0
- package/dist/rag/embeddings/index.js +1 -0
- package/dist/rag/embeddings/mistral.d.ts +2 -2
- package/dist/rag/embeddings/mistral.js +18 -5
- package/dist/rag/embeddings/openai.js +22 -3
- package/dist/rag/embeddings/validate.d.ts +22 -0
- package/dist/rag/embeddings/validate.js +148 -0
- package/dist/rag/index.d.ts +1 -1
- package/dist/rag/index.js +1 -1
- package/dist/rag/indexer/chunker.js +31 -19
- package/dist/rag/indexer/indexer.d.ts +10 -0
- package/dist/rag/indexer/indexer.js +88 -53
- package/dist/rag/search/index.d.ts +6 -0
- package/dist/rag/search/index.js +35 -9
- package/dist/rag/storage/index.d.ts +15 -1
- package/dist/rag/storage/index.js +108 -21
- package/package.json +33 -4
- package/dist/cli/__tests__/mcp-setup-comprehensive.test.d.ts +0 -10
- package/dist/cli/__tests__/mcp-setup-comprehensive.test.js +0 -515
- package/dist/cli/__tests__/mcp-setup-global.test.d.ts +0 -7
- package/dist/cli/__tests__/mcp-setup-global.test.js +0 -577
- package/dist/cli/__tests__/mcp-setup.test.d.ts +0 -6
- package/dist/cli/__tests__/mcp-setup.test.js +0 -704
- package/dist/rag/__tests__/grammar-smoke.test.d.ts +0 -9
- package/dist/rag/__tests__/grammar-smoke.test.js +0 -161
- package/dist/rag/__tests__/helpers.d.ts +0 -30
- package/dist/rag/__tests__/helpers.js +0 -67
- package/dist/rag/__tests__/merkle.test.d.ts +0 -5
- package/dist/rag/__tests__/merkle.test.js +0 -161
- package/dist/rag/__tests__/metadata-extraction.test.d.ts +0 -10
- package/dist/rag/__tests__/metadata-extraction.test.js +0 -202
- package/dist/rag/__tests__/multi-language.test.d.ts +0 -13
- package/dist/rag/__tests__/multi-language.test.js +0 -535
- package/dist/rag/__tests__/rag.test.d.ts +0 -10
- package/dist/rag/__tests__/rag.test.js +0 -311
- package/dist/rag/__tests__/search-exhaustive.test.d.ts +0 -9
- package/dist/rag/__tests__/search-exhaustive.test.js +0 -87
- package/dist/rag/__tests__/search-filters.test.d.ts +0 -10
- package/dist/rag/__tests__/search-filters.test.js +0 -250
- package/dist/rag/__tests__/search-modes.test.d.ts +0 -8
- package/dist/rag/__tests__/search-modes.test.js +0 -133
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tests for search modes: definition and similar.
|
|
3
|
-
*
|
|
4
|
-
* Tests the new search modes added in Phase 2:
|
|
5
|
-
* - definition: Direct metadata lookup by symbol name
|
|
6
|
-
* - similar: Vector search with code snippet as query
|
|
7
|
-
*/
|
|
8
|
-
import { describe, it, expect, beforeAll, afterAll } from 'vitest';
|
|
9
|
-
import { Indexer } from '../indexer/indexer.js';
|
|
10
|
-
import { SearchEngine } from '../search/index.js';
|
|
11
|
-
import { copyFixtureToTemp } from './helpers.js';
|
|
12
|
-
describe('Search Modes', () => {
|
|
13
|
-
let ctx;
|
|
14
|
-
let search;
|
|
15
|
-
beforeAll(async () => {
|
|
16
|
-
// Setup once for all tests - index the codebase
|
|
17
|
-
ctx = await copyFixtureToTemp('codebase');
|
|
18
|
-
const indexer = new Indexer(ctx.projectRoot);
|
|
19
|
-
await indexer.index();
|
|
20
|
-
indexer.close();
|
|
21
|
-
search = new SearchEngine(ctx.projectRoot);
|
|
22
|
-
}, 120000);
|
|
23
|
-
afterAll(async () => {
|
|
24
|
-
search.close();
|
|
25
|
-
await ctx.cleanup();
|
|
26
|
-
});
|
|
27
|
-
describe('definition mode', () => {
|
|
28
|
-
it('finds function definition by exact name', async () => {
|
|
29
|
-
const results = await search.search('getUser', {
|
|
30
|
-
mode: 'definition',
|
|
31
|
-
symbolName: 'getUser',
|
|
32
|
-
});
|
|
33
|
-
expect(results.results.length).toBeGreaterThan(0);
|
|
34
|
-
expect(results.searchType).toBe('definition');
|
|
35
|
-
// Should find the function in endpoints.ts
|
|
36
|
-
expect(results.results.some(r => r.filepath.includes('endpoints.ts'))).toBe(true);
|
|
37
|
-
}, 60000);
|
|
38
|
-
it('finds class definition by name', async () => {
|
|
39
|
-
// Use semantic search to find class - definition mode uses exact name match
|
|
40
|
-
const results = await search.search('UserService class', {
|
|
41
|
-
mode: 'semantic',
|
|
42
|
-
filters: { type: ['class'] },
|
|
43
|
-
});
|
|
44
|
-
// Should find the class in exported.ts
|
|
45
|
-
if (results.results.length > 0) {
|
|
46
|
-
expect(results.results.some(r => r.filepath.includes('exported.ts'))).toBe(true);
|
|
47
|
-
}
|
|
48
|
-
}, 60000);
|
|
49
|
-
it('finds method definition by name', async () => {
|
|
50
|
-
// Use semantic search for method lookup
|
|
51
|
-
const results = await search.search('fetchData method http', {
|
|
52
|
-
mode: 'semantic',
|
|
53
|
-
filters: { type: ['method'] },
|
|
54
|
-
});
|
|
55
|
-
// Should find the method in http_client.ts
|
|
56
|
-
if (results.results.length > 0) {
|
|
57
|
-
expect(results.results.some(r => r.filepath.includes('http_client.ts'))).toBe(true);
|
|
58
|
-
}
|
|
59
|
-
}, 60000);
|
|
60
|
-
it('returns empty for non-existent symbol', async () => {
|
|
61
|
-
const results = await search.search('nonExistentSymbolXYZ123', {
|
|
62
|
-
mode: 'definition',
|
|
63
|
-
symbolName: 'nonExistentSymbolXYZ123',
|
|
64
|
-
});
|
|
65
|
-
expect(results.results.length).toBe(0);
|
|
66
|
-
}, 60000);
|
|
67
|
-
it('can filter definitions by type', async () => {
|
|
68
|
-
const results = await search.search('add', {
|
|
69
|
-
mode: 'definition',
|
|
70
|
-
symbolName: 'add_two_numbers',
|
|
71
|
-
filters: { type: ['function'] },
|
|
72
|
-
});
|
|
73
|
-
if (results.results.length > 0) {
|
|
74
|
-
expect(results.results.every(r => r.type === 'function')).toBe(true);
|
|
75
|
-
}
|
|
76
|
-
}, 60000);
|
|
77
|
-
});
|
|
78
|
-
describe('similar mode', () => {
|
|
79
|
-
it('finds similar code by snippet', async () => {
|
|
80
|
-
// Search for code similar to an async fetch function
|
|
81
|
-
const snippet = `async function fetchData(url) {
|
|
82
|
-
const response = await fetch(url);
|
|
83
|
-
return response.json();
|
|
84
|
-
}`;
|
|
85
|
-
const results = await search.search(snippet, {
|
|
86
|
-
mode: 'similar',
|
|
87
|
-
codeSnippet: snippet,
|
|
88
|
-
});
|
|
89
|
-
expect(results.results.length).toBeGreaterThan(0);
|
|
90
|
-
expect(results.searchType).toBe('similar');
|
|
91
|
-
// Should find http_client.ts which has similar fetch logic
|
|
92
|
-
expect(results.results.some(r => r.filepath.includes('http_client.ts'))).toBe(true);
|
|
93
|
-
}, 60000);
|
|
94
|
-
it('finds similar Python code', async () => {
|
|
95
|
-
const snippet = `def calculate(a, b):
|
|
96
|
-
return a + b`;
|
|
97
|
-
const results = await search.search(snippet, {
|
|
98
|
-
mode: 'similar',
|
|
99
|
-
codeSnippet: snippet,
|
|
100
|
-
});
|
|
101
|
-
expect(results.results.length).toBeGreaterThan(0);
|
|
102
|
-
// Should find math.py which has similar arithmetic functions
|
|
103
|
-
expect(results.results.some(r => r.filepath.includes('math.py'))).toBe(true);
|
|
104
|
-
}, 60000);
|
|
105
|
-
it('respects limit parameter', async () => {
|
|
106
|
-
const snippet = `function helper() { return true; }`;
|
|
107
|
-
const results = await search.search(snippet, {
|
|
108
|
-
mode: 'similar',
|
|
109
|
-
codeSnippet: snippet,
|
|
110
|
-
limit: 3,
|
|
111
|
-
});
|
|
112
|
-
expect(results.results.length).toBeLessThanOrEqual(3);
|
|
113
|
-
}, 60000);
|
|
114
|
-
});
|
|
115
|
-
describe('mode selection', () => {
|
|
116
|
-
it('defaults to hybrid mode', async () => {
|
|
117
|
-
const results = await search.search('function');
|
|
118
|
-
expect(results.searchType).toBe('hybrid');
|
|
119
|
-
}, 60000);
|
|
120
|
-
it('semantic mode returns semantic type', async () => {
|
|
121
|
-
const results = await search.search('how does authentication work', {
|
|
122
|
-
mode: 'semantic',
|
|
123
|
-
});
|
|
124
|
-
expect(results.searchType).toBe('semantic');
|
|
125
|
-
}, 60000);
|
|
126
|
-
it('exact mode returns exact type', async () => {
|
|
127
|
-
const results = await search.search('fetchData', {
|
|
128
|
-
mode: 'exact',
|
|
129
|
-
});
|
|
130
|
-
expect(results.searchType).toBe('exact');
|
|
131
|
-
}, 60000);
|
|
132
|
-
});
|
|
133
|
-
});
|