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.
Files changed (53) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/commands/mcp-setup.d.ts +1 -1
  3. package/dist/cli/commands/mcp-setup.js +23 -3
  4. package/dist/cli/components/CleanWizard.js +16 -1
  5. package/dist/cli/components/InitWizard.js +37 -15
  6. package/dist/common/types.d.ts +2 -2
  7. package/dist/mcp/index.js +5 -1
  8. package/dist/mcp/warmup.d.ts +5 -0
  9. package/dist/mcp/warmup.js +7 -0
  10. package/dist/rag/config/index.d.ts +4 -0
  11. package/dist/rag/config/index.js +37 -13
  12. package/dist/rag/embeddings/gemini.js +34 -7
  13. package/dist/rag/embeddings/index.d.ts +1 -0
  14. package/dist/rag/embeddings/index.js +1 -0
  15. package/dist/rag/embeddings/mistral.d.ts +2 -2
  16. package/dist/rag/embeddings/mistral.js +18 -5
  17. package/dist/rag/embeddings/openai.js +22 -3
  18. package/dist/rag/embeddings/validate.d.ts +22 -0
  19. package/dist/rag/embeddings/validate.js +148 -0
  20. package/dist/rag/index.d.ts +1 -1
  21. package/dist/rag/index.js +1 -1
  22. package/dist/rag/indexer/chunker.js +31 -19
  23. package/dist/rag/indexer/indexer.d.ts +10 -0
  24. package/dist/rag/indexer/indexer.js +88 -53
  25. package/dist/rag/search/index.d.ts +6 -0
  26. package/dist/rag/search/index.js +35 -9
  27. package/dist/rag/storage/index.d.ts +15 -1
  28. package/dist/rag/storage/index.js +108 -21
  29. package/package.json +33 -4
  30. package/dist/cli/__tests__/mcp-setup-comprehensive.test.d.ts +0 -10
  31. package/dist/cli/__tests__/mcp-setup-comprehensive.test.js +0 -515
  32. package/dist/cli/__tests__/mcp-setup-global.test.d.ts +0 -7
  33. package/dist/cli/__tests__/mcp-setup-global.test.js +0 -577
  34. package/dist/cli/__tests__/mcp-setup.test.d.ts +0 -6
  35. package/dist/cli/__tests__/mcp-setup.test.js +0 -704
  36. package/dist/rag/__tests__/grammar-smoke.test.d.ts +0 -9
  37. package/dist/rag/__tests__/grammar-smoke.test.js +0 -161
  38. package/dist/rag/__tests__/helpers.d.ts +0 -30
  39. package/dist/rag/__tests__/helpers.js +0 -67
  40. package/dist/rag/__tests__/merkle.test.d.ts +0 -5
  41. package/dist/rag/__tests__/merkle.test.js +0 -161
  42. package/dist/rag/__tests__/metadata-extraction.test.d.ts +0 -10
  43. package/dist/rag/__tests__/metadata-extraction.test.js +0 -202
  44. package/dist/rag/__tests__/multi-language.test.d.ts +0 -13
  45. package/dist/rag/__tests__/multi-language.test.js +0 -535
  46. package/dist/rag/__tests__/rag.test.d.ts +0 -10
  47. package/dist/rag/__tests__/rag.test.js +0 -311
  48. package/dist/rag/__tests__/search-exhaustive.test.d.ts +0 -9
  49. package/dist/rag/__tests__/search-exhaustive.test.js +0 -87
  50. package/dist/rag/__tests__/search-filters.test.d.ts +0 -10
  51. package/dist/rag/__tests__/search-filters.test.js +0 -250
  52. package/dist/rag/__tests__/search-modes.test.d.ts +0 -8
  53. 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
- });