glancey 2.0.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/LICENSE +21 -0
- package/README.md +435 -0
- package/dist/__tests__/ast-chunker.test.d.ts +2 -0
- package/dist/__tests__/ast-chunker.test.d.ts.map +1 -0
- package/dist/__tests__/ast-chunker.test.js +307 -0
- package/dist/__tests__/ast-chunker.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +2 -0
- package/dist/__tests__/config.test.d.ts.map +1 -0
- package/dist/__tests__/config.test.js +242 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/dashboard/beads.test.d.ts +2 -0
- package/dist/__tests__/dashboard/beads.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/beads.test.js +151 -0
- package/dist/__tests__/dashboard/beads.test.js.map +1 -0
- package/dist/__tests__/dashboard/index.test.d.ts +2 -0
- package/dist/__tests__/dashboard/index.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/index.test.js +116 -0
- package/dist/__tests__/dashboard/index.test.js.map +1 -0
- package/dist/__tests__/dashboard/routes.test.d.ts +2 -0
- package/dist/__tests__/dashboard/routes.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/routes.test.js +125 -0
- package/dist/__tests__/dashboard/routes.test.js.map +1 -0
- package/dist/__tests__/dashboard/server.test.d.ts +2 -0
- package/dist/__tests__/dashboard/server.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/server.test.js +75 -0
- package/dist/__tests__/dashboard/server.test.js.map +1 -0
- package/dist/__tests__/dashboard/state.test.d.ts +2 -0
- package/dist/__tests__/dashboard/state.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/state.test.js +124 -0
- package/dist/__tests__/dashboard/state.test.js.map +1 -0
- package/dist/__tests__/dashboard/token-tracking.test.d.ts +2 -0
- package/dist/__tests__/dashboard/token-tracking.test.d.ts.map +1 -0
- package/dist/__tests__/dashboard/token-tracking.test.js +315 -0
- package/dist/__tests__/dashboard/token-tracking.test.js.map +1 -0
- package/dist/__tests__/embeddings/factory.test.d.ts +2 -0
- package/dist/__tests__/embeddings/factory.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/factory.test.js +157 -0
- package/dist/__tests__/embeddings/factory.test.js.map +1 -0
- package/dist/__tests__/embeddings/gemini.test.d.ts +2 -0
- package/dist/__tests__/embeddings/gemini.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/gemini.test.js +178 -0
- package/dist/__tests__/embeddings/gemini.test.js.map +1 -0
- package/dist/__tests__/embeddings/ollama.test.d.ts +2 -0
- package/dist/__tests__/embeddings/ollama.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/ollama.test.js +273 -0
- package/dist/__tests__/embeddings/ollama.test.js.map +1 -0
- package/dist/__tests__/embeddings/rate-limiter.test.d.ts +2 -0
- package/dist/__tests__/embeddings/rate-limiter.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/rate-limiter.test.js +163 -0
- package/dist/__tests__/embeddings/rate-limiter.test.js.map +1 -0
- package/dist/__tests__/embeddings/retry.test.d.ts +2 -0
- package/dist/__tests__/embeddings/retry.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/retry.test.js +334 -0
- package/dist/__tests__/embeddings/retry.test.js.map +1 -0
- package/dist/__tests__/embeddings/types.test.d.ts +2 -0
- package/dist/__tests__/embeddings/types.test.d.ts.map +1 -0
- package/dist/__tests__/embeddings/types.test.js +31 -0
- package/dist/__tests__/embeddings/types.test.js.map +1 -0
- package/dist/__tests__/mocks/embedding-backend.mock.d.ts +10 -0
- package/dist/__tests__/mocks/embedding-backend.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/embedding-backend.mock.js +39 -0
- package/dist/__tests__/mocks/embedding-backend.mock.js.map +1 -0
- package/dist/__tests__/mocks/fetch.mock.d.ts +49 -0
- package/dist/__tests__/mocks/fetch.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/fetch.mock.js +102 -0
- package/dist/__tests__/mocks/fetch.mock.js.map +1 -0
- package/dist/__tests__/mocks/lancedb.mock.d.ts +38 -0
- package/dist/__tests__/mocks/lancedb.mock.d.ts.map +1 -0
- package/dist/__tests__/mocks/lancedb.mock.js +63 -0
- package/dist/__tests__/mocks/lancedb.mock.js.map +1 -0
- package/dist/__tests__/search/clustering.test.d.ts +2 -0
- package/dist/__tests__/search/clustering.test.d.ts.map +1 -0
- package/dist/__tests__/search/clustering.test.js +230 -0
- package/dist/__tests__/search/clustering.test.js.map +1 -0
- package/dist/__tests__/search/hybrid-search.test.d.ts +2 -0
- package/dist/__tests__/search/hybrid-search.test.d.ts.map +1 -0
- package/dist/__tests__/search/hybrid-search.test.js +279 -0
- package/dist/__tests__/search/hybrid-search.test.js.map +1 -0
- package/dist/__tests__/search/indexer.test.d.ts +2 -0
- package/dist/__tests__/search/indexer.test.d.ts.map +1 -0
- package/dist/__tests__/search/indexer.test.js +1305 -0
- package/dist/__tests__/search/indexer.test.js.map +1 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.d.ts +2 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.d.ts.map +1 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.js +228 -0
- package/dist/__tests__/search/tree-sitter-chunker.test.js.map +1 -0
- package/dist/__tests__/setup.d.ts +2 -0
- package/dist/__tests__/setup.d.ts.map +1 -0
- package/dist/__tests__/setup.js +11 -0
- package/dist/__tests__/setup.js.map +1 -0
- package/dist/__tests__/tools/clustering-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/clustering-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/clustering-handlers.test.js +286 -0
- package/dist/__tests__/tools/clustering-handlers.test.js.map +1 -0
- package/dist/__tests__/tools/commit-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/commit-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/commit-handlers.test.js +153 -0
- package/dist/__tests__/tools/commit-handlers.test.js.map +1 -0
- package/dist/__tests__/tools/index-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/index-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/index-handlers.test.js +184 -0
- package/dist/__tests__/tools/index-handlers.test.js.map +1 -0
- package/dist/__tests__/tools/instructions-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/instructions-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/instructions-handlers.test.js +53 -0
- package/dist/__tests__/tools/instructions-handlers.test.js.map +1 -0
- package/dist/__tests__/tools/memory-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/memory-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/memory-handlers.test.js +175 -0
- package/dist/__tests__/tools/memory-handlers.test.js.map +1 -0
- package/dist/__tests__/tools/search-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/search-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/search-handlers.test.js +229 -0
- package/dist/__tests__/tools/search-handlers.test.js.map +1 -0
- package/dist/__tests__/tools/symbol-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/symbol-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/symbol-handlers.test.js +348 -0
- package/dist/__tests__/tools/symbol-handlers.test.js.map +1 -0
- package/dist/__tests__/tools/worktree-handlers.test.d.ts +2 -0
- package/dist/__tests__/tools/worktree-handlers.test.d.ts.map +1 -0
- package/dist/__tests__/tools/worktree-handlers.test.js +297 -0
- package/dist/__tests__/tools/worktree-handlers.test.js.map +1 -0
- package/dist/__tests__/utils/cache.test.d.ts +2 -0
- package/dist/__tests__/utils/cache.test.d.ts.map +1 -0
- package/dist/__tests__/utils/cache.test.js +147 -0
- package/dist/__tests__/utils/cache.test.js.map +1 -0
- package/dist/__tests__/utils/concurrency.test.d.ts +2 -0
- package/dist/__tests__/utils/concurrency.test.d.ts.map +1 -0
- package/dist/__tests__/utils/concurrency.test.js +83 -0
- package/dist/__tests__/utils/concurrency.test.js.map +1 -0
- package/dist/__tests__/utils/errors.test.d.ts +2 -0
- package/dist/__tests__/utils/errors.test.d.ts.map +1 -0
- package/dist/__tests__/utils/errors.test.js +136 -0
- package/dist/__tests__/utils/errors.test.js.map +1 -0
- package/dist/__tests__/utils/logger.test.d.ts +2 -0
- package/dist/__tests__/utils/logger.test.d.ts.map +1 -0
- package/dist/__tests__/utils/logger.test.js +131 -0
- package/dist/__tests__/utils/logger.test.js.map +1 -0
- package/dist/__tests__/utils/type-guards.test.d.ts +2 -0
- package/dist/__tests__/utils/type-guards.test.d.ts.map +1 -0
- package/dist/__tests__/utils/type-guards.test.js +80 -0
- package/dist/__tests__/utils/type-guards.test.js.map +1 -0
- package/dist/__tests__/worktree/worktree-manager.test.d.ts +2 -0
- package/dist/__tests__/worktree/worktree-manager.test.d.ts.map +1 -0
- package/dist/__tests__/worktree/worktree-manager.test.js +403 -0
- package/dist/__tests__/worktree/worktree-manager.test.js.map +1 -0
- package/dist/config.d.ts +191 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +788 -0
- package/dist/config.js.map +1 -0
- package/dist/dashboard/beads.d.ts +35 -0
- package/dist/dashboard/beads.d.ts.map +1 -0
- package/dist/dashboard/beads.js +102 -0
- package/dist/dashboard/beads.js.map +1 -0
- package/dist/dashboard/events.d.ts +64 -0
- package/dist/dashboard/events.d.ts.map +1 -0
- package/dist/dashboard/events.js +211 -0
- package/dist/dashboard/events.js.map +1 -0
- package/dist/dashboard/index.d.ts +69 -0
- package/dist/dashboard/index.d.ts.map +1 -0
- package/dist/dashboard/index.js +93 -0
- package/dist/dashboard/index.js.map +1 -0
- package/dist/dashboard/routes.d.ts +6 -0
- package/dist/dashboard/routes.d.ts.map +1 -0
- package/dist/dashboard/routes.js +505 -0
- package/dist/dashboard/routes.js.map +1 -0
- package/dist/dashboard/server.d.ts +27 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +72 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/dashboard/state.d.ts +172 -0
- package/dist/dashboard/state.d.ts.map +1 -0
- package/dist/dashboard/state.js +362 -0
- package/dist/dashboard/state.js.map +1 -0
- package/dist/dashboard/token-tracking.d.ts +143 -0
- package/dist/dashboard/token-tracking.d.ts.map +1 -0
- package/dist/dashboard/token-tracking.js +363 -0
- package/dist/dashboard/token-tracking.js.map +1 -0
- package/dist/dashboard/ui.d.ts +6 -0
- package/dist/dashboard/ui.d.ts.map +1 -0
- package/dist/dashboard/ui.js +2710 -0
- package/dist/dashboard/ui.js.map +1 -0
- package/dist/embeddings/gemini.d.ts +28 -0
- package/dist/embeddings/gemini.d.ts.map +1 -0
- package/dist/embeddings/gemini.js +165 -0
- package/dist/embeddings/gemini.js.map +1 -0
- package/dist/embeddings/index.d.ts +34 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +120 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/embeddings/ollama.d.ts +22 -0
- package/dist/embeddings/ollama.d.ts.map +1 -0
- package/dist/embeddings/ollama.js +179 -0
- package/dist/embeddings/ollama.js.map +1 -0
- package/dist/embeddings/rate-limiter.d.ts +75 -0
- package/dist/embeddings/rate-limiter.d.ts.map +1 -0
- package/dist/embeddings/rate-limiter.js +145 -0
- package/dist/embeddings/rate-limiter.js.map +1 -0
- package/dist/embeddings/retry.d.ts +20 -0
- package/dist/embeddings/retry.d.ts.map +1 -0
- package/dist/embeddings/retry.js +227 -0
- package/dist/embeddings/retry.js.map +1 -0
- package/dist/embeddings/types.d.ts +103 -0
- package/dist/embeddings/types.d.ts.map +1 -0
- package/dist/embeddings/types.js +23 -0
- package/dist/embeddings/types.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2028 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/index.d.ts +63 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +168 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/search/ast-chunker.d.ts +29 -0
- package/dist/search/ast-chunker.d.ts.map +1 -0
- package/dist/search/ast-chunker.js +236 -0
- package/dist/search/ast-chunker.js.map +1 -0
- package/dist/search/chunk-utils.d.ts +24 -0
- package/dist/search/chunk-utils.d.ts.map +1 -0
- package/dist/search/chunk-utils.js +41 -0
- package/dist/search/chunk-utils.js.map +1 -0
- package/dist/search/clustering.d.ts +77 -0
- package/dist/search/clustering.d.ts.map +1 -0
- package/dist/search/clustering.js +455 -0
- package/dist/search/clustering.js.map +1 -0
- package/dist/search/indexer.d.ts +377 -0
- package/dist/search/indexer.d.ts.map +1 -0
- package/dist/search/indexer.js +1557 -0
- package/dist/search/indexer.js.map +1 -0
- package/dist/search/tree-sitter-chunker.d.ts +64 -0
- package/dist/search/tree-sitter-chunker.d.ts.map +1 -0
- package/dist/search/tree-sitter-chunker.js +412 -0
- package/dist/search/tree-sitter-chunker.js.map +1 -0
- package/dist/symbols/index.d.ts +14 -0
- package/dist/symbols/index.d.ts.map +1 -0
- package/dist/symbols/index.js +19 -0
- package/dist/symbols/index.js.map +1 -0
- package/dist/symbols/name-path.d.ts +113 -0
- package/dist/symbols/name-path.d.ts.map +1 -0
- package/dist/symbols/name-path.js +194 -0
- package/dist/symbols/name-path.js.map +1 -0
- package/dist/symbols/pattern-search.d.ts +14 -0
- package/dist/symbols/pattern-search.d.ts.map +1 -0
- package/dist/symbols/pattern-search.js +224 -0
- package/dist/symbols/pattern-search.js.map +1 -0
- package/dist/symbols/reference-finder.d.ts +38 -0
- package/dist/symbols/reference-finder.d.ts.map +1 -0
- package/dist/symbols/reference-finder.js +376 -0
- package/dist/symbols/reference-finder.js.map +1 -0
- package/dist/symbols/symbol-editor.d.ts +81 -0
- package/dist/symbols/symbol-editor.d.ts.map +1 -0
- package/dist/symbols/symbol-editor.js +257 -0
- package/dist/symbols/symbol-editor.js.map +1 -0
- package/dist/symbols/symbol-extractor.d.ts +49 -0
- package/dist/symbols/symbol-extractor.d.ts.map +1 -0
- package/dist/symbols/symbol-extractor.js +593 -0
- package/dist/symbols/symbol-extractor.js.map +1 -0
- package/dist/symbols/symbol-renamer.d.ts +81 -0
- package/dist/symbols/symbol-renamer.d.ts.map +1 -0
- package/dist/symbols/symbol-renamer.js +204 -0
- package/dist/symbols/symbol-renamer.js.map +1 -0
- package/dist/symbols/types.d.ts +234 -0
- package/dist/symbols/types.d.ts.map +1 -0
- package/dist/symbols/types.js +106 -0
- package/dist/symbols/types.js.map +1 -0
- package/dist/tools/clustering-handlers.d.ts +70 -0
- package/dist/tools/clustering-handlers.d.ts.map +1 -0
- package/dist/tools/clustering-handlers.js +150 -0
- package/dist/tools/clustering-handlers.js.map +1 -0
- package/dist/tools/commit-handlers.d.ts +77 -0
- package/dist/tools/commit-handlers.d.ts.map +1 -0
- package/dist/tools/commit-handlers.js +251 -0
- package/dist/tools/commit-handlers.js.map +1 -0
- package/dist/tools/index-handlers.d.ts +31 -0
- package/dist/tools/index-handlers.d.ts.map +1 -0
- package/dist/tools/index-handlers.js +53 -0
- package/dist/tools/index-handlers.js.map +1 -0
- package/dist/tools/instructions-handlers.d.ts +25 -0
- package/dist/tools/instructions-handlers.d.ts.map +1 -0
- package/dist/tools/instructions-handlers.js +36 -0
- package/dist/tools/instructions-handlers.js.map +1 -0
- package/dist/tools/memory-handlers.d.ts +95 -0
- package/dist/tools/memory-handlers.d.ts.map +1 -0
- package/dist/tools/memory-handlers.js +126 -0
- package/dist/tools/memory-handlers.js.map +1 -0
- package/dist/tools/search-handlers.d.ts +51 -0
- package/dist/tools/search-handlers.d.ts.map +1 -0
- package/dist/tools/search-handlers.js +128 -0
- package/dist/tools/search-handlers.js.map +1 -0
- package/dist/tools/symbol-handlers.d.ts +171 -0
- package/dist/tools/symbol-handlers.d.ts.map +1 -0
- package/dist/tools/symbol-handlers.js +456 -0
- package/dist/tools/symbol-handlers.js.map +1 -0
- package/dist/tools/types.d.ts +32 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +17 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/worktree-handlers.d.ts +96 -0
- package/dist/tools/worktree-handlers.d.ts.map +1 -0
- package/dist/tools/worktree-handlers.js +186 -0
- package/dist/tools/worktree-handlers.js.map +1 -0
- package/dist/utils/cache.d.ts +77 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +134 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/concurrency.d.ts +32 -0
- package/dist/utils/concurrency.d.ts.map +1 -0
- package/dist/utils/concurrency.js +57 -0
- package/dist/utils/concurrency.js.map +1 -0
- package/dist/utils/errors.d.ts +36 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +91 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/logger.d.ts +37 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +114 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/type-guards.d.ts +17 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +25 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/dist/worktree/index.d.ts +6 -0
- package/dist/worktree/index.d.ts.map +1 -0
- package/dist/worktree/index.js +6 -0
- package/dist/worktree/index.js.map +1 -0
- package/dist/worktree/types.d.ts +101 -0
- package/dist/worktree/types.d.ts.map +1 -0
- package/dist/worktree/types.js +6 -0
- package/dist/worktree/types.js.map +1 -0
- package/dist/worktree/worktree-manager.d.ts +80 -0
- package/dist/worktree/worktree-manager.d.ts.map +1 -0
- package/dist/worktree/worktree-manager.js +407 -0
- package/dist/worktree/worktree-manager.js.map +1 -0
- package/package.json +87 -0
- package/scripts/postinstall.js +48 -0
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
/**
|
|
3
|
+
* Tests for keyword scoring logic used in hybrid search.
|
|
4
|
+
* These tests verify the calculateKeywordScore algorithm behavior.
|
|
5
|
+
*/
|
|
6
|
+
// Recreate the scoring logic for testing (extracted from indexer.ts)
|
|
7
|
+
function calculateKeywordScore(query, content, filepath) {
|
|
8
|
+
const queryTerms = query
|
|
9
|
+
.toLowerCase()
|
|
10
|
+
.split(/\s+/)
|
|
11
|
+
.filter((t) => t.length > 2);
|
|
12
|
+
if (queryTerms.length === 0)
|
|
13
|
+
return 0;
|
|
14
|
+
const contentLower = content.toLowerCase();
|
|
15
|
+
const filepathLower = filepath.toLowerCase();
|
|
16
|
+
let matchCount = 0;
|
|
17
|
+
let exactMatchBonus = 0;
|
|
18
|
+
for (const term of queryTerms) {
|
|
19
|
+
// Check content matches
|
|
20
|
+
if (contentLower.includes(term)) {
|
|
21
|
+
matchCount++;
|
|
22
|
+
// Bonus for exact word match (not just substring)
|
|
23
|
+
const wordBoundaryRegex = new RegExp(`\\b${term}\\b`, 'i');
|
|
24
|
+
if (wordBoundaryRegex.test(content)) {
|
|
25
|
+
exactMatchBonus += 0.5;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Bonus for filename/path match
|
|
29
|
+
if (filepathLower.includes(term)) {
|
|
30
|
+
matchCount += 0.5;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Normalize score to 0-1 range
|
|
34
|
+
const baseScore = matchCount / queryTerms.length;
|
|
35
|
+
const bonusScore = Math.min(exactMatchBonus / queryTerms.length, 0.5);
|
|
36
|
+
return Math.min(baseScore + bonusScore, 1);
|
|
37
|
+
}
|
|
38
|
+
describe('calculateKeywordScore', () => {
|
|
39
|
+
describe('basic term matching', () => {
|
|
40
|
+
it('should return 0 when no terms match', () => {
|
|
41
|
+
const score = calculateKeywordScore('hello world', 'foo bar', 'test.ts');
|
|
42
|
+
expect(score).toBe(0);
|
|
43
|
+
});
|
|
44
|
+
it('should return 1 when all terms match exactly', () => {
|
|
45
|
+
const score = calculateKeywordScore('hello world', 'hello world function', 'test.ts');
|
|
46
|
+
expect(score).toBe(1);
|
|
47
|
+
});
|
|
48
|
+
it('should return partial score when some terms match', () => {
|
|
49
|
+
const score = calculateKeywordScore('hello world', 'hello foo', 'test.ts');
|
|
50
|
+
expect(score).toBeGreaterThan(0);
|
|
51
|
+
expect(score).toBeLessThan(1);
|
|
52
|
+
});
|
|
53
|
+
it('should filter terms shorter than 3 characters', () => {
|
|
54
|
+
const score = calculateKeywordScore('a ab abc', 'abc only', 'test.ts');
|
|
55
|
+
// Only 'abc' should be considered
|
|
56
|
+
expect(score).toBe(1); // abc matches exactly
|
|
57
|
+
});
|
|
58
|
+
it('should return 0 when all terms are too short', () => {
|
|
59
|
+
const score = calculateKeywordScore('a ab', 'a ab', 'test.ts');
|
|
60
|
+
expect(score).toBe(0);
|
|
61
|
+
});
|
|
62
|
+
});
|
|
63
|
+
describe('word boundary matching', () => {
|
|
64
|
+
it('should give bonus for exact word match', () => {
|
|
65
|
+
// These variables demonstrate the concept even though not directly asserted
|
|
66
|
+
const _substringOnlyScore = calculateKeywordScore('user', 'username', 'test.ts');
|
|
67
|
+
const _exactScore = calculateKeywordScore('user', 'user data', 'test.ts');
|
|
68
|
+
// Exact match should score higher due to word boundary bonus (0.5 extra)
|
|
69
|
+
// substringOnlyScore: 1/1 = 1 (base) + 0 (no word boundary) = 1
|
|
70
|
+
// exactScore: 1/1 = 1 (base) + 0.5 (word boundary) = 1.5, capped at 1
|
|
71
|
+
// Since both cap at 1, we need different test
|
|
72
|
+
// Actually substring match in 'username' still gives base score of 1
|
|
73
|
+
// Let's test with a term that doesn't substring match at all vs exact match
|
|
74
|
+
const noMatch = calculateKeywordScore('auth', 'user data', 'test.ts');
|
|
75
|
+
const withExactMatch = calculateKeywordScore('auth', 'auth data', 'test.ts');
|
|
76
|
+
expect(withExactMatch).toBeGreaterThan(noMatch);
|
|
77
|
+
});
|
|
78
|
+
it('should recognize word boundaries with punctuation', () => {
|
|
79
|
+
const score = calculateKeywordScore('test', 'const test = 1;', 'test.ts');
|
|
80
|
+
// Should get exact match bonus
|
|
81
|
+
expect(score).toBeGreaterThan(0.5);
|
|
82
|
+
});
|
|
83
|
+
it('should handle camelCase boundaries', () => {
|
|
84
|
+
// Note: the regex uses \b which may not split camelCase
|
|
85
|
+
const score = calculateKeywordScore('user', 'getUserData', 'test.ts');
|
|
86
|
+
// Substring match, no word boundary bonus
|
|
87
|
+
expect(score).toBeGreaterThan(0);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
describe('filename/path bonus', () => {
|
|
91
|
+
it('should add bonus when term matches filepath', () => {
|
|
92
|
+
const _noPathMatch = calculateKeywordScore('auth', 'authentication code', 'utils.ts');
|
|
93
|
+
const withPathMatch = calculateKeywordScore('auth', 'code here', 'auth.ts');
|
|
94
|
+
// Both should have some score, path match gives 0.5 bonus per term
|
|
95
|
+
expect(withPathMatch).toBeGreaterThan(0);
|
|
96
|
+
});
|
|
97
|
+
it('should add bonus for directory match', () => {
|
|
98
|
+
const score = calculateKeywordScore('auth', 'some code', 'src/auth/login.ts');
|
|
99
|
+
expect(score).toBeGreaterThan(0);
|
|
100
|
+
});
|
|
101
|
+
it('should combine content and path matches', () => {
|
|
102
|
+
const contentOnly = calculateKeywordScore('auth', 'auth function', 'utils.ts');
|
|
103
|
+
const pathOnly = calculateKeywordScore('auth', 'function here', 'auth.ts');
|
|
104
|
+
const both = calculateKeywordScore('auth', 'auth function', 'auth.ts');
|
|
105
|
+
// contentOnly: 1 (content match) + 0.5 (word boundary) = 1.5, capped at 1
|
|
106
|
+
// pathOnly: 0.5 (path match only) / 1 = 0.5
|
|
107
|
+
// both: 1 + 0.5 (content+boundary) + 0.5 (path) = 2, capped at 1
|
|
108
|
+
expect(both).toBeGreaterThanOrEqual(contentOnly);
|
|
109
|
+
expect(both).toBeGreaterThan(pathOnly);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
describe('score normalization', () => {
|
|
113
|
+
it('should never exceed 1', () => {
|
|
114
|
+
// Many matches, should still cap at 1
|
|
115
|
+
const score = calculateKeywordScore('auth user login', 'auth user login authentication', 'auth-user-login.ts');
|
|
116
|
+
expect(score).toBeLessThanOrEqual(1);
|
|
117
|
+
});
|
|
118
|
+
it('should scale with number of matching terms', () => {
|
|
119
|
+
const oneMatch = calculateKeywordScore('auth user login', 'auth only', 'test.ts');
|
|
120
|
+
const twoMatches = calculateKeywordScore('auth user login', 'auth user only', 'test.ts');
|
|
121
|
+
const threeMatches = calculateKeywordScore('auth user login', 'auth user login', 'test.ts');
|
|
122
|
+
// oneMatch: 1 match of 3 terms = 0.33 base + 0.5/3 word boundary bonus = ~0.5
|
|
123
|
+
// twoMatches: 2 matches of 3 terms = 0.66 base + 1.0/3 word boundary bonus = ~0.99
|
|
124
|
+
// threeMatches: 3 matches of 3 terms = 1.0 base + 0.5 word boundary (capped) = 1.0
|
|
125
|
+
expect(threeMatches).toBeGreaterThanOrEqual(twoMatches);
|
|
126
|
+
expect(twoMatches).toBeGreaterThan(oneMatch);
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe('case insensitivity', () => {
|
|
130
|
+
it('should match regardless of case', () => {
|
|
131
|
+
const lowerScore = calculateKeywordScore('auth', 'auth function', 'test.ts');
|
|
132
|
+
const upperScore = calculateKeywordScore('AUTH', 'auth function', 'test.ts');
|
|
133
|
+
const mixedScore = calculateKeywordScore('Auth', 'AUTH function', 'test.ts');
|
|
134
|
+
expect(lowerScore).toBeGreaterThan(0);
|
|
135
|
+
expect(upperScore).toBeGreaterThan(0);
|
|
136
|
+
expect(mixedScore).toBeGreaterThan(0);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
describe('edge cases', () => {
|
|
140
|
+
it('should handle empty query', () => {
|
|
141
|
+
const score = calculateKeywordScore('', 'some content', 'test.ts');
|
|
142
|
+
expect(score).toBe(0);
|
|
143
|
+
});
|
|
144
|
+
it('should handle empty content', () => {
|
|
145
|
+
const score = calculateKeywordScore('hello world', '', 'test.ts');
|
|
146
|
+
expect(score).toBe(0);
|
|
147
|
+
});
|
|
148
|
+
it('should handle special regex characters in query', () => {
|
|
149
|
+
// Should not throw
|
|
150
|
+
const score = calculateKeywordScore('file.test', 'file.test content', 'test.ts');
|
|
151
|
+
expect(score).toBeGreaterThan(0);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
describe('hybrid search scoring', () => {
|
|
156
|
+
// Test the combined 70/30 semantic/keyword formula
|
|
157
|
+
describe('combined score calculation', () => {
|
|
158
|
+
it('should weight semantic score at 70%', () => {
|
|
159
|
+
const semanticScore = 1.0;
|
|
160
|
+
const keywordScore = 0.0;
|
|
161
|
+
const combinedScore = 0.7 * semanticScore + 0.3 * keywordScore;
|
|
162
|
+
expect(combinedScore).toBe(0.7);
|
|
163
|
+
});
|
|
164
|
+
it('should weight keyword score at 30%', () => {
|
|
165
|
+
const semanticScore = 0.0;
|
|
166
|
+
const keywordScore = 1.0;
|
|
167
|
+
const combinedScore = 0.7 * semanticScore + 0.3 * keywordScore;
|
|
168
|
+
expect(combinedScore).toBe(0.3);
|
|
169
|
+
});
|
|
170
|
+
it('should sum to 1 when both scores are 1', () => {
|
|
171
|
+
const semanticScore = 1.0;
|
|
172
|
+
const keywordScore = 1.0;
|
|
173
|
+
const combinedScore = 0.7 * semanticScore + 0.3 * keywordScore;
|
|
174
|
+
expect(combinedScore).toBe(1.0);
|
|
175
|
+
});
|
|
176
|
+
it('should allow keyword boost to reorder results', () => {
|
|
177
|
+
// Scenario: result A has high semantic, low keyword
|
|
178
|
+
// Result B has medium semantic, high keyword
|
|
179
|
+
const resultA = 0.7 * 0.9 + 0.3 * 0.1; // 0.63 + 0.03 = 0.66
|
|
180
|
+
const resultB = 0.7 * 0.7 + 0.3 * 1.0; // 0.49 + 0.30 = 0.79
|
|
181
|
+
// B should rank higher despite lower semantic score
|
|
182
|
+
expect(resultB).toBeGreaterThan(resultA);
|
|
183
|
+
});
|
|
184
|
+
});
|
|
185
|
+
describe('re-ranking behavior', () => {
|
|
186
|
+
// Helper to calculate combined score with configurable weights
|
|
187
|
+
const calculateCombinedScore = (semanticScore, keywordScore, semanticWeight, keywordWeight) => semanticWeight * semanticScore + keywordWeight * keywordScore;
|
|
188
|
+
it('should maintain order when keyword scores are equal', () => {
|
|
189
|
+
// Three results with decreasing semantic scores, equal keyword scores
|
|
190
|
+
const results = [
|
|
191
|
+
{ semantic: 1.0, keyword: 0.5 },
|
|
192
|
+
{ semantic: 0.8, keyword: 0.5 },
|
|
193
|
+
{ semantic: 0.6, keyword: 0.5 },
|
|
194
|
+
];
|
|
195
|
+
const scored = results.map((r) => calculateCombinedScore(r.semantic, r.keyword, 0.7, 0.3));
|
|
196
|
+
// Order should be preserved
|
|
197
|
+
expect(scored[0]).toBeGreaterThan(scored[1]);
|
|
198
|
+
expect(scored[1]).toBeGreaterThan(scored[2]);
|
|
199
|
+
});
|
|
200
|
+
it('should reorder when keyword score difference overcomes semantic', () => {
|
|
201
|
+
// Result A: high semantic (rank 1), no keyword match
|
|
202
|
+
// Result B: lower semantic (rank 2), perfect keyword match
|
|
203
|
+
const resultA = calculateCombinedScore(1.0, 0.0, 0.7, 0.3); // 0.7
|
|
204
|
+
const resultB = calculateCombinedScore(0.6, 1.0, 0.7, 0.3); // 0.42 + 0.3 = 0.72
|
|
205
|
+
expect(resultB).toBeGreaterThan(resultA);
|
|
206
|
+
});
|
|
207
|
+
it('should preserve semantic order with small keyword differences', () => {
|
|
208
|
+
// Small keyword difference shouldn't overcome large semantic gap
|
|
209
|
+
const resultA = calculateCombinedScore(1.0, 0.3, 0.7, 0.3); // 0.7 + 0.09 = 0.79
|
|
210
|
+
const resultB = calculateCombinedScore(0.5, 0.5, 0.7, 0.3); // 0.35 + 0.15 = 0.50
|
|
211
|
+
expect(resultA).toBeGreaterThan(resultB);
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
describe('weight configuration effects', () => {
|
|
215
|
+
const calculateCombinedScore = (semanticScore, keywordScore, semanticWeight, keywordWeight) => semanticWeight * semanticScore + keywordWeight * keywordScore;
|
|
216
|
+
it('should use only semantic when keywordWeight is 0', () => {
|
|
217
|
+
const score = calculateCombinedScore(0.8, 1.0, 1.0, 0.0);
|
|
218
|
+
expect(score).toBe(0.8); // Only semantic matters
|
|
219
|
+
});
|
|
220
|
+
it('should use only keyword when semanticWeight is 0', () => {
|
|
221
|
+
const score = calculateCombinedScore(1.0, 0.5, 0.0, 1.0);
|
|
222
|
+
expect(score).toBe(0.5); // Only keyword matters
|
|
223
|
+
});
|
|
224
|
+
it('should handle equal weights (50/50)', () => {
|
|
225
|
+
const score = calculateCombinedScore(0.8, 0.4, 0.5, 0.5);
|
|
226
|
+
expect(score).toBeCloseTo(0.6); // (0.8 + 0.4) / 2
|
|
227
|
+
});
|
|
228
|
+
it('should handle inverted weights (30/70 keyword-heavy)', () => {
|
|
229
|
+
const semanticHigh = calculateCombinedScore(1.0, 0.3, 0.3, 0.7); // 0.3 + 0.21 = 0.51
|
|
230
|
+
const keywordHigh = calculateCombinedScore(0.3, 1.0, 0.3, 0.7); // 0.09 + 0.7 = 0.79
|
|
231
|
+
// With inverted weights, keyword match should dominate
|
|
232
|
+
expect(keywordHigh).toBeGreaterThan(semanticHigh);
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
describe('score boundaries', () => {
|
|
236
|
+
const calculateCombinedScore = (semanticScore, keywordScore, semanticWeight, keywordWeight) => semanticWeight * semanticScore + keywordWeight * keywordScore;
|
|
237
|
+
it('should produce 0 when both scores are 0', () => {
|
|
238
|
+
const score = calculateCombinedScore(0.0, 0.0, 0.7, 0.3);
|
|
239
|
+
expect(score).toBe(0);
|
|
240
|
+
});
|
|
241
|
+
it('should produce max 1 when weights sum to 1 and scores are 1', () => {
|
|
242
|
+
const score = calculateCombinedScore(1.0, 1.0, 0.7, 0.3);
|
|
243
|
+
expect(score).toBe(1.0);
|
|
244
|
+
});
|
|
245
|
+
it('should handle minimum non-zero scores', () => {
|
|
246
|
+
const score = calculateCombinedScore(0.001, 0.001, 0.7, 0.3);
|
|
247
|
+
expect(score).toBeGreaterThan(0);
|
|
248
|
+
expect(score).toBeLessThan(0.01);
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
describe('ranking stability', () => {
|
|
252
|
+
const calculateCombinedScore = (semanticScore, keywordScore, semanticWeight, keywordWeight) => semanticWeight * semanticScore + keywordWeight * keywordScore;
|
|
253
|
+
it('should produce stable ordering for close scores', () => {
|
|
254
|
+
// Simulate multiple results with very similar scores
|
|
255
|
+
const results = [
|
|
256
|
+
{ semantic: 0.95, keyword: 0.8, id: 'a' },
|
|
257
|
+
{ semantic: 0.93, keyword: 0.85, id: 'b' },
|
|
258
|
+
{ semantic: 0.9, keyword: 0.9, id: 'c' },
|
|
259
|
+
];
|
|
260
|
+
const scored = results.map((r) => ({
|
|
261
|
+
id: r.id,
|
|
262
|
+
score: calculateCombinedScore(r.semantic, r.keyword, 0.7, 0.3),
|
|
263
|
+
}));
|
|
264
|
+
// Sort by score descending
|
|
265
|
+
scored.sort((a, b) => b.score - a.score);
|
|
266
|
+
// Verify consistent ordering
|
|
267
|
+
expect(scored[0].score).toBeGreaterThanOrEqual(scored[1].score);
|
|
268
|
+
expect(scored[1].score).toBeGreaterThanOrEqual(scored[2].score);
|
|
269
|
+
});
|
|
270
|
+
it('should handle tie-breaking consistently', () => {
|
|
271
|
+
// Two results with identical combined scores
|
|
272
|
+
const scoreA = calculateCombinedScore(0.8, 0.6, 0.7, 0.3); // 0.56 + 0.18 = 0.74
|
|
273
|
+
const scoreB = calculateCombinedScore(0.74, 0.74, 0.7, 0.3); // 0.518 + 0.222 = 0.74
|
|
274
|
+
// Scores should be very close (floating point)
|
|
275
|
+
expect(Math.abs(scoreA - scoreB)).toBeLessThan(0.01);
|
|
276
|
+
});
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
//# sourceMappingURL=hybrid-search.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hybrid-search.test.js","sourceRoot":"","sources":["../../../src/__tests__/search/hybrid-search.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"indexer.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/search/indexer.test.ts"],"names":[],"mappings":""}
|