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.
Files changed (336) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +435 -0
  3. package/dist/__tests__/ast-chunker.test.d.ts +2 -0
  4. package/dist/__tests__/ast-chunker.test.d.ts.map +1 -0
  5. package/dist/__tests__/ast-chunker.test.js +307 -0
  6. package/dist/__tests__/ast-chunker.test.js.map +1 -0
  7. package/dist/__tests__/config.test.d.ts +2 -0
  8. package/dist/__tests__/config.test.d.ts.map +1 -0
  9. package/dist/__tests__/config.test.js +242 -0
  10. package/dist/__tests__/config.test.js.map +1 -0
  11. package/dist/__tests__/dashboard/beads.test.d.ts +2 -0
  12. package/dist/__tests__/dashboard/beads.test.d.ts.map +1 -0
  13. package/dist/__tests__/dashboard/beads.test.js +151 -0
  14. package/dist/__tests__/dashboard/beads.test.js.map +1 -0
  15. package/dist/__tests__/dashboard/index.test.d.ts +2 -0
  16. package/dist/__tests__/dashboard/index.test.d.ts.map +1 -0
  17. package/dist/__tests__/dashboard/index.test.js +116 -0
  18. package/dist/__tests__/dashboard/index.test.js.map +1 -0
  19. package/dist/__tests__/dashboard/routes.test.d.ts +2 -0
  20. package/dist/__tests__/dashboard/routes.test.d.ts.map +1 -0
  21. package/dist/__tests__/dashboard/routes.test.js +125 -0
  22. package/dist/__tests__/dashboard/routes.test.js.map +1 -0
  23. package/dist/__tests__/dashboard/server.test.d.ts +2 -0
  24. package/dist/__tests__/dashboard/server.test.d.ts.map +1 -0
  25. package/dist/__tests__/dashboard/server.test.js +75 -0
  26. package/dist/__tests__/dashboard/server.test.js.map +1 -0
  27. package/dist/__tests__/dashboard/state.test.d.ts +2 -0
  28. package/dist/__tests__/dashboard/state.test.d.ts.map +1 -0
  29. package/dist/__tests__/dashboard/state.test.js +124 -0
  30. package/dist/__tests__/dashboard/state.test.js.map +1 -0
  31. package/dist/__tests__/dashboard/token-tracking.test.d.ts +2 -0
  32. package/dist/__tests__/dashboard/token-tracking.test.d.ts.map +1 -0
  33. package/dist/__tests__/dashboard/token-tracking.test.js +315 -0
  34. package/dist/__tests__/dashboard/token-tracking.test.js.map +1 -0
  35. package/dist/__tests__/embeddings/factory.test.d.ts +2 -0
  36. package/dist/__tests__/embeddings/factory.test.d.ts.map +1 -0
  37. package/dist/__tests__/embeddings/factory.test.js +157 -0
  38. package/dist/__tests__/embeddings/factory.test.js.map +1 -0
  39. package/dist/__tests__/embeddings/gemini.test.d.ts +2 -0
  40. package/dist/__tests__/embeddings/gemini.test.d.ts.map +1 -0
  41. package/dist/__tests__/embeddings/gemini.test.js +178 -0
  42. package/dist/__tests__/embeddings/gemini.test.js.map +1 -0
  43. package/dist/__tests__/embeddings/ollama.test.d.ts +2 -0
  44. package/dist/__tests__/embeddings/ollama.test.d.ts.map +1 -0
  45. package/dist/__tests__/embeddings/ollama.test.js +273 -0
  46. package/dist/__tests__/embeddings/ollama.test.js.map +1 -0
  47. package/dist/__tests__/embeddings/rate-limiter.test.d.ts +2 -0
  48. package/dist/__tests__/embeddings/rate-limiter.test.d.ts.map +1 -0
  49. package/dist/__tests__/embeddings/rate-limiter.test.js +163 -0
  50. package/dist/__tests__/embeddings/rate-limiter.test.js.map +1 -0
  51. package/dist/__tests__/embeddings/retry.test.d.ts +2 -0
  52. package/dist/__tests__/embeddings/retry.test.d.ts.map +1 -0
  53. package/dist/__tests__/embeddings/retry.test.js +334 -0
  54. package/dist/__tests__/embeddings/retry.test.js.map +1 -0
  55. package/dist/__tests__/embeddings/types.test.d.ts +2 -0
  56. package/dist/__tests__/embeddings/types.test.d.ts.map +1 -0
  57. package/dist/__tests__/embeddings/types.test.js +31 -0
  58. package/dist/__tests__/embeddings/types.test.js.map +1 -0
  59. package/dist/__tests__/mocks/embedding-backend.mock.d.ts +10 -0
  60. package/dist/__tests__/mocks/embedding-backend.mock.d.ts.map +1 -0
  61. package/dist/__tests__/mocks/embedding-backend.mock.js +39 -0
  62. package/dist/__tests__/mocks/embedding-backend.mock.js.map +1 -0
  63. package/dist/__tests__/mocks/fetch.mock.d.ts +49 -0
  64. package/dist/__tests__/mocks/fetch.mock.d.ts.map +1 -0
  65. package/dist/__tests__/mocks/fetch.mock.js +102 -0
  66. package/dist/__tests__/mocks/fetch.mock.js.map +1 -0
  67. package/dist/__tests__/mocks/lancedb.mock.d.ts +38 -0
  68. package/dist/__tests__/mocks/lancedb.mock.d.ts.map +1 -0
  69. package/dist/__tests__/mocks/lancedb.mock.js +63 -0
  70. package/dist/__tests__/mocks/lancedb.mock.js.map +1 -0
  71. package/dist/__tests__/search/clustering.test.d.ts +2 -0
  72. package/dist/__tests__/search/clustering.test.d.ts.map +1 -0
  73. package/dist/__tests__/search/clustering.test.js +230 -0
  74. package/dist/__tests__/search/clustering.test.js.map +1 -0
  75. package/dist/__tests__/search/hybrid-search.test.d.ts +2 -0
  76. package/dist/__tests__/search/hybrid-search.test.d.ts.map +1 -0
  77. package/dist/__tests__/search/hybrid-search.test.js +279 -0
  78. package/dist/__tests__/search/hybrid-search.test.js.map +1 -0
  79. package/dist/__tests__/search/indexer.test.d.ts +2 -0
  80. package/dist/__tests__/search/indexer.test.d.ts.map +1 -0
  81. package/dist/__tests__/search/indexer.test.js +1305 -0
  82. package/dist/__tests__/search/indexer.test.js.map +1 -0
  83. package/dist/__tests__/search/tree-sitter-chunker.test.d.ts +2 -0
  84. package/dist/__tests__/search/tree-sitter-chunker.test.d.ts.map +1 -0
  85. package/dist/__tests__/search/tree-sitter-chunker.test.js +228 -0
  86. package/dist/__tests__/search/tree-sitter-chunker.test.js.map +1 -0
  87. package/dist/__tests__/setup.d.ts +2 -0
  88. package/dist/__tests__/setup.d.ts.map +1 -0
  89. package/dist/__tests__/setup.js +11 -0
  90. package/dist/__tests__/setup.js.map +1 -0
  91. package/dist/__tests__/tools/clustering-handlers.test.d.ts +2 -0
  92. package/dist/__tests__/tools/clustering-handlers.test.d.ts.map +1 -0
  93. package/dist/__tests__/tools/clustering-handlers.test.js +286 -0
  94. package/dist/__tests__/tools/clustering-handlers.test.js.map +1 -0
  95. package/dist/__tests__/tools/commit-handlers.test.d.ts +2 -0
  96. package/dist/__tests__/tools/commit-handlers.test.d.ts.map +1 -0
  97. package/dist/__tests__/tools/commit-handlers.test.js +153 -0
  98. package/dist/__tests__/tools/commit-handlers.test.js.map +1 -0
  99. package/dist/__tests__/tools/index-handlers.test.d.ts +2 -0
  100. package/dist/__tests__/tools/index-handlers.test.d.ts.map +1 -0
  101. package/dist/__tests__/tools/index-handlers.test.js +184 -0
  102. package/dist/__tests__/tools/index-handlers.test.js.map +1 -0
  103. package/dist/__tests__/tools/instructions-handlers.test.d.ts +2 -0
  104. package/dist/__tests__/tools/instructions-handlers.test.d.ts.map +1 -0
  105. package/dist/__tests__/tools/instructions-handlers.test.js +53 -0
  106. package/dist/__tests__/tools/instructions-handlers.test.js.map +1 -0
  107. package/dist/__tests__/tools/memory-handlers.test.d.ts +2 -0
  108. package/dist/__tests__/tools/memory-handlers.test.d.ts.map +1 -0
  109. package/dist/__tests__/tools/memory-handlers.test.js +175 -0
  110. package/dist/__tests__/tools/memory-handlers.test.js.map +1 -0
  111. package/dist/__tests__/tools/search-handlers.test.d.ts +2 -0
  112. package/dist/__tests__/tools/search-handlers.test.d.ts.map +1 -0
  113. package/dist/__tests__/tools/search-handlers.test.js +229 -0
  114. package/dist/__tests__/tools/search-handlers.test.js.map +1 -0
  115. package/dist/__tests__/tools/symbol-handlers.test.d.ts +2 -0
  116. package/dist/__tests__/tools/symbol-handlers.test.d.ts.map +1 -0
  117. package/dist/__tests__/tools/symbol-handlers.test.js +348 -0
  118. package/dist/__tests__/tools/symbol-handlers.test.js.map +1 -0
  119. package/dist/__tests__/tools/worktree-handlers.test.d.ts +2 -0
  120. package/dist/__tests__/tools/worktree-handlers.test.d.ts.map +1 -0
  121. package/dist/__tests__/tools/worktree-handlers.test.js +297 -0
  122. package/dist/__tests__/tools/worktree-handlers.test.js.map +1 -0
  123. package/dist/__tests__/utils/cache.test.d.ts +2 -0
  124. package/dist/__tests__/utils/cache.test.d.ts.map +1 -0
  125. package/dist/__tests__/utils/cache.test.js +147 -0
  126. package/dist/__tests__/utils/cache.test.js.map +1 -0
  127. package/dist/__tests__/utils/concurrency.test.d.ts +2 -0
  128. package/dist/__tests__/utils/concurrency.test.d.ts.map +1 -0
  129. package/dist/__tests__/utils/concurrency.test.js +83 -0
  130. package/dist/__tests__/utils/concurrency.test.js.map +1 -0
  131. package/dist/__tests__/utils/errors.test.d.ts +2 -0
  132. package/dist/__tests__/utils/errors.test.d.ts.map +1 -0
  133. package/dist/__tests__/utils/errors.test.js +136 -0
  134. package/dist/__tests__/utils/errors.test.js.map +1 -0
  135. package/dist/__tests__/utils/logger.test.d.ts +2 -0
  136. package/dist/__tests__/utils/logger.test.d.ts.map +1 -0
  137. package/dist/__tests__/utils/logger.test.js +131 -0
  138. package/dist/__tests__/utils/logger.test.js.map +1 -0
  139. package/dist/__tests__/utils/type-guards.test.d.ts +2 -0
  140. package/dist/__tests__/utils/type-guards.test.d.ts.map +1 -0
  141. package/dist/__tests__/utils/type-guards.test.js +80 -0
  142. package/dist/__tests__/utils/type-guards.test.js.map +1 -0
  143. package/dist/__tests__/worktree/worktree-manager.test.d.ts +2 -0
  144. package/dist/__tests__/worktree/worktree-manager.test.d.ts.map +1 -0
  145. package/dist/__tests__/worktree/worktree-manager.test.js +403 -0
  146. package/dist/__tests__/worktree/worktree-manager.test.js.map +1 -0
  147. package/dist/config.d.ts +191 -0
  148. package/dist/config.d.ts.map +1 -0
  149. package/dist/config.js +788 -0
  150. package/dist/config.js.map +1 -0
  151. package/dist/dashboard/beads.d.ts +35 -0
  152. package/dist/dashboard/beads.d.ts.map +1 -0
  153. package/dist/dashboard/beads.js +102 -0
  154. package/dist/dashboard/beads.js.map +1 -0
  155. package/dist/dashboard/events.d.ts +64 -0
  156. package/dist/dashboard/events.d.ts.map +1 -0
  157. package/dist/dashboard/events.js +211 -0
  158. package/dist/dashboard/events.js.map +1 -0
  159. package/dist/dashboard/index.d.ts +69 -0
  160. package/dist/dashboard/index.d.ts.map +1 -0
  161. package/dist/dashboard/index.js +93 -0
  162. package/dist/dashboard/index.js.map +1 -0
  163. package/dist/dashboard/routes.d.ts +6 -0
  164. package/dist/dashboard/routes.d.ts.map +1 -0
  165. package/dist/dashboard/routes.js +505 -0
  166. package/dist/dashboard/routes.js.map +1 -0
  167. package/dist/dashboard/server.d.ts +27 -0
  168. package/dist/dashboard/server.d.ts.map +1 -0
  169. package/dist/dashboard/server.js +72 -0
  170. package/dist/dashboard/server.js.map +1 -0
  171. package/dist/dashboard/state.d.ts +172 -0
  172. package/dist/dashboard/state.d.ts.map +1 -0
  173. package/dist/dashboard/state.js +362 -0
  174. package/dist/dashboard/state.js.map +1 -0
  175. package/dist/dashboard/token-tracking.d.ts +143 -0
  176. package/dist/dashboard/token-tracking.d.ts.map +1 -0
  177. package/dist/dashboard/token-tracking.js +363 -0
  178. package/dist/dashboard/token-tracking.js.map +1 -0
  179. package/dist/dashboard/ui.d.ts +6 -0
  180. package/dist/dashboard/ui.d.ts.map +1 -0
  181. package/dist/dashboard/ui.js +2710 -0
  182. package/dist/dashboard/ui.js.map +1 -0
  183. package/dist/embeddings/gemini.d.ts +28 -0
  184. package/dist/embeddings/gemini.d.ts.map +1 -0
  185. package/dist/embeddings/gemini.js +165 -0
  186. package/dist/embeddings/gemini.js.map +1 -0
  187. package/dist/embeddings/index.d.ts +34 -0
  188. package/dist/embeddings/index.d.ts.map +1 -0
  189. package/dist/embeddings/index.js +120 -0
  190. package/dist/embeddings/index.js.map +1 -0
  191. package/dist/embeddings/ollama.d.ts +22 -0
  192. package/dist/embeddings/ollama.d.ts.map +1 -0
  193. package/dist/embeddings/ollama.js +179 -0
  194. package/dist/embeddings/ollama.js.map +1 -0
  195. package/dist/embeddings/rate-limiter.d.ts +75 -0
  196. package/dist/embeddings/rate-limiter.d.ts.map +1 -0
  197. package/dist/embeddings/rate-limiter.js +145 -0
  198. package/dist/embeddings/rate-limiter.js.map +1 -0
  199. package/dist/embeddings/retry.d.ts +20 -0
  200. package/dist/embeddings/retry.d.ts.map +1 -0
  201. package/dist/embeddings/retry.js +227 -0
  202. package/dist/embeddings/retry.js.map +1 -0
  203. package/dist/embeddings/types.d.ts +103 -0
  204. package/dist/embeddings/types.d.ts.map +1 -0
  205. package/dist/embeddings/types.js +23 -0
  206. package/dist/embeddings/types.js.map +1 -0
  207. package/dist/index.d.ts +12 -0
  208. package/dist/index.d.ts.map +1 -0
  209. package/dist/index.js +2028 -0
  210. package/dist/index.js.map +1 -0
  211. package/dist/memory/index.d.ts +63 -0
  212. package/dist/memory/index.d.ts.map +1 -0
  213. package/dist/memory/index.js +168 -0
  214. package/dist/memory/index.js.map +1 -0
  215. package/dist/search/ast-chunker.d.ts +29 -0
  216. package/dist/search/ast-chunker.d.ts.map +1 -0
  217. package/dist/search/ast-chunker.js +236 -0
  218. package/dist/search/ast-chunker.js.map +1 -0
  219. package/dist/search/chunk-utils.d.ts +24 -0
  220. package/dist/search/chunk-utils.d.ts.map +1 -0
  221. package/dist/search/chunk-utils.js +41 -0
  222. package/dist/search/chunk-utils.js.map +1 -0
  223. package/dist/search/clustering.d.ts +77 -0
  224. package/dist/search/clustering.d.ts.map +1 -0
  225. package/dist/search/clustering.js +455 -0
  226. package/dist/search/clustering.js.map +1 -0
  227. package/dist/search/indexer.d.ts +377 -0
  228. package/dist/search/indexer.d.ts.map +1 -0
  229. package/dist/search/indexer.js +1557 -0
  230. package/dist/search/indexer.js.map +1 -0
  231. package/dist/search/tree-sitter-chunker.d.ts +64 -0
  232. package/dist/search/tree-sitter-chunker.d.ts.map +1 -0
  233. package/dist/search/tree-sitter-chunker.js +412 -0
  234. package/dist/search/tree-sitter-chunker.js.map +1 -0
  235. package/dist/symbols/index.d.ts +14 -0
  236. package/dist/symbols/index.d.ts.map +1 -0
  237. package/dist/symbols/index.js +19 -0
  238. package/dist/symbols/index.js.map +1 -0
  239. package/dist/symbols/name-path.d.ts +113 -0
  240. package/dist/symbols/name-path.d.ts.map +1 -0
  241. package/dist/symbols/name-path.js +194 -0
  242. package/dist/symbols/name-path.js.map +1 -0
  243. package/dist/symbols/pattern-search.d.ts +14 -0
  244. package/dist/symbols/pattern-search.d.ts.map +1 -0
  245. package/dist/symbols/pattern-search.js +224 -0
  246. package/dist/symbols/pattern-search.js.map +1 -0
  247. package/dist/symbols/reference-finder.d.ts +38 -0
  248. package/dist/symbols/reference-finder.d.ts.map +1 -0
  249. package/dist/symbols/reference-finder.js +376 -0
  250. package/dist/symbols/reference-finder.js.map +1 -0
  251. package/dist/symbols/symbol-editor.d.ts +81 -0
  252. package/dist/symbols/symbol-editor.d.ts.map +1 -0
  253. package/dist/symbols/symbol-editor.js +257 -0
  254. package/dist/symbols/symbol-editor.js.map +1 -0
  255. package/dist/symbols/symbol-extractor.d.ts +49 -0
  256. package/dist/symbols/symbol-extractor.d.ts.map +1 -0
  257. package/dist/symbols/symbol-extractor.js +593 -0
  258. package/dist/symbols/symbol-extractor.js.map +1 -0
  259. package/dist/symbols/symbol-renamer.d.ts +81 -0
  260. package/dist/symbols/symbol-renamer.d.ts.map +1 -0
  261. package/dist/symbols/symbol-renamer.js +204 -0
  262. package/dist/symbols/symbol-renamer.js.map +1 -0
  263. package/dist/symbols/types.d.ts +234 -0
  264. package/dist/symbols/types.d.ts.map +1 -0
  265. package/dist/symbols/types.js +106 -0
  266. package/dist/symbols/types.js.map +1 -0
  267. package/dist/tools/clustering-handlers.d.ts +70 -0
  268. package/dist/tools/clustering-handlers.d.ts.map +1 -0
  269. package/dist/tools/clustering-handlers.js +150 -0
  270. package/dist/tools/clustering-handlers.js.map +1 -0
  271. package/dist/tools/commit-handlers.d.ts +77 -0
  272. package/dist/tools/commit-handlers.d.ts.map +1 -0
  273. package/dist/tools/commit-handlers.js +251 -0
  274. package/dist/tools/commit-handlers.js.map +1 -0
  275. package/dist/tools/index-handlers.d.ts +31 -0
  276. package/dist/tools/index-handlers.d.ts.map +1 -0
  277. package/dist/tools/index-handlers.js +53 -0
  278. package/dist/tools/index-handlers.js.map +1 -0
  279. package/dist/tools/instructions-handlers.d.ts +25 -0
  280. package/dist/tools/instructions-handlers.d.ts.map +1 -0
  281. package/dist/tools/instructions-handlers.js +36 -0
  282. package/dist/tools/instructions-handlers.js.map +1 -0
  283. package/dist/tools/memory-handlers.d.ts +95 -0
  284. package/dist/tools/memory-handlers.d.ts.map +1 -0
  285. package/dist/tools/memory-handlers.js +126 -0
  286. package/dist/tools/memory-handlers.js.map +1 -0
  287. package/dist/tools/search-handlers.d.ts +51 -0
  288. package/dist/tools/search-handlers.d.ts.map +1 -0
  289. package/dist/tools/search-handlers.js +128 -0
  290. package/dist/tools/search-handlers.js.map +1 -0
  291. package/dist/tools/symbol-handlers.d.ts +171 -0
  292. package/dist/tools/symbol-handlers.d.ts.map +1 -0
  293. package/dist/tools/symbol-handlers.js +456 -0
  294. package/dist/tools/symbol-handlers.js.map +1 -0
  295. package/dist/tools/types.d.ts +32 -0
  296. package/dist/tools/types.d.ts.map +1 -0
  297. package/dist/tools/types.js +17 -0
  298. package/dist/tools/types.js.map +1 -0
  299. package/dist/tools/worktree-handlers.d.ts +96 -0
  300. package/dist/tools/worktree-handlers.d.ts.map +1 -0
  301. package/dist/tools/worktree-handlers.js +186 -0
  302. package/dist/tools/worktree-handlers.js.map +1 -0
  303. package/dist/utils/cache.d.ts +77 -0
  304. package/dist/utils/cache.d.ts.map +1 -0
  305. package/dist/utils/cache.js +134 -0
  306. package/dist/utils/cache.js.map +1 -0
  307. package/dist/utils/concurrency.d.ts +32 -0
  308. package/dist/utils/concurrency.d.ts.map +1 -0
  309. package/dist/utils/concurrency.js +57 -0
  310. package/dist/utils/concurrency.js.map +1 -0
  311. package/dist/utils/errors.d.ts +36 -0
  312. package/dist/utils/errors.d.ts.map +1 -0
  313. package/dist/utils/errors.js +91 -0
  314. package/dist/utils/errors.js.map +1 -0
  315. package/dist/utils/logger.d.ts +37 -0
  316. package/dist/utils/logger.d.ts.map +1 -0
  317. package/dist/utils/logger.js +114 -0
  318. package/dist/utils/logger.js.map +1 -0
  319. package/dist/utils/type-guards.d.ts +17 -0
  320. package/dist/utils/type-guards.d.ts.map +1 -0
  321. package/dist/utils/type-guards.js +25 -0
  322. package/dist/utils/type-guards.js.map +1 -0
  323. package/dist/worktree/index.d.ts +6 -0
  324. package/dist/worktree/index.d.ts.map +1 -0
  325. package/dist/worktree/index.js +6 -0
  326. package/dist/worktree/index.js.map +1 -0
  327. package/dist/worktree/types.d.ts +101 -0
  328. package/dist/worktree/types.d.ts.map +1 -0
  329. package/dist/worktree/types.js +6 -0
  330. package/dist/worktree/types.js.map +1 -0
  331. package/dist/worktree/worktree-manager.d.ts +80 -0
  332. package/dist/worktree/worktree-manager.d.ts.map +1 -0
  333. package/dist/worktree/worktree-manager.js +407 -0
  334. package/dist/worktree/worktree-manager.js.map +1 -0
  335. package/package.json +87 -0
  336. 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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=indexer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/search/indexer.test.ts"],"names":[],"mappings":""}