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,229 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { handleSearchCode, handleSearchSimilar, parseSearchCodeArgs, parseSearchSimilarArgs, formatSearchResults, } from '../../tools/search-handlers.js';
3
+ import { GlanceyError } from '../../utils/errors.js';
4
+ describe('search-handlers', () => {
5
+ let mockIndexer;
6
+ let context;
7
+ beforeEach(() => {
8
+ mockIndexer = {
9
+ search: vi.fn(),
10
+ searchSimilar: vi.fn(),
11
+ };
12
+ context = {
13
+ indexer: mockIndexer,
14
+ projectPath: '/test/project',
15
+ toolGuidance: '\n---\nGuidance',
16
+ };
17
+ });
18
+ describe('parseSearchCodeArgs', () => {
19
+ it('should throw when query is missing', () => {
20
+ expect(() => parseSearchCodeArgs(undefined)).toThrow(GlanceyError);
21
+ expect(() => parseSearchCodeArgs({})).toThrow('query is required');
22
+ });
23
+ it('should throw when query is empty string', () => {
24
+ expect(() => parseSearchCodeArgs({ query: '' })).toThrow('query is required');
25
+ });
26
+ it('should parse valid query', () => {
27
+ const result = parseSearchCodeArgs({ query: 'find function' });
28
+ expect(result.query).toBe('find function');
29
+ });
30
+ it('should use default limit of 10', () => {
31
+ const result = parseSearchCodeArgs({ query: 'test' });
32
+ expect(result.limit).toBe(10);
33
+ });
34
+ it('should parse custom limit', () => {
35
+ const result = parseSearchCodeArgs({ query: 'test', limit: 20 });
36
+ expect(result.limit).toBe(20);
37
+ });
38
+ it('should ignore invalid limit', () => {
39
+ const result = parseSearchCodeArgs({ query: 'test', limit: 'invalid' });
40
+ expect(result.limit).toBe(10);
41
+ });
42
+ it('should parse pathPattern', () => {
43
+ const result = parseSearchCodeArgs({ query: 'test', pathPattern: 'src/**/*.ts' });
44
+ expect(result.pathPattern).toBe('src/**/*.ts');
45
+ });
46
+ it('should parse languages array', () => {
47
+ const result = parseSearchCodeArgs({
48
+ query: 'test',
49
+ languages: ['typescript', 'javascript'],
50
+ });
51
+ expect(result.languages).toEqual(['typescript', 'javascript']);
52
+ });
53
+ it('should ignore invalid languages', () => {
54
+ const result = parseSearchCodeArgs({ query: 'test', languages: 'typescript' });
55
+ expect(result.languages).toBeUndefined();
56
+ });
57
+ });
58
+ describe('formatSearchResults', () => {
59
+ it('should return "No results found" for empty array', () => {
60
+ expect(formatSearchResults([])).toBe('No results found.');
61
+ });
62
+ it('should format single result', () => {
63
+ const results = [
64
+ {
65
+ id: 'test.ts:1-10',
66
+ filepath: 'test.ts',
67
+ content: 'function hello() {}',
68
+ startLine: 1,
69
+ endLine: 10,
70
+ language: 'typescript',
71
+ },
72
+ ];
73
+ const formatted = formatSearchResults(results);
74
+ expect(formatted).toContain('## Result 1: test.ts:1-10');
75
+ expect(formatted).toContain('```typescript');
76
+ expect(formatted).toContain('function hello() {}');
77
+ });
78
+ it('should include symbol info when present', () => {
79
+ const results = [
80
+ {
81
+ id: 'test.ts:1-10',
82
+ filepath: 'test.ts',
83
+ content: 'function hello() {}',
84
+ startLine: 1,
85
+ endLine: 10,
86
+ language: 'typescript',
87
+ symbolName: 'hello',
88
+ symbolType: 'function',
89
+ },
90
+ ];
91
+ const formatted = formatSearchResults(results);
92
+ expect(formatted).toContain('**Symbol:** `hello`');
93
+ expect(formatted).toContain('(function)');
94
+ });
95
+ it('should format multiple results', () => {
96
+ const results = [
97
+ {
98
+ id: 'a.ts:1-5',
99
+ filepath: 'a.ts',
100
+ content: 'code a',
101
+ startLine: 1,
102
+ endLine: 5,
103
+ language: 'typescript',
104
+ },
105
+ {
106
+ id: 'b.ts:1-5',
107
+ filepath: 'b.ts',
108
+ content: 'code b',
109
+ startLine: 1,
110
+ endLine: 5,
111
+ language: 'typescript',
112
+ },
113
+ ];
114
+ const formatted = formatSearchResults(results);
115
+ expect(formatted).toContain('## Result 1: a.ts:1-5');
116
+ expect(formatted).toContain('## Result 2: b.ts:1-5');
117
+ });
118
+ });
119
+ describe('handleSearchCode', () => {
120
+ it('should call indexer.search with correct options', async () => {
121
+ vi.mocked(mockIndexer.search).mockResolvedValue([]);
122
+ await handleSearchCode({
123
+ query: 'find function',
124
+ limit: 5,
125
+ pathPattern: 'src/**/*.ts',
126
+ languages: ['typescript'],
127
+ }, context);
128
+ expect(mockIndexer.search).toHaveBeenCalledWith({
129
+ query: 'find function',
130
+ limit: 5,
131
+ pathPattern: 'src/**/*.ts',
132
+ languages: ['typescript'],
133
+ });
134
+ });
135
+ it('should return formatted results', async () => {
136
+ vi.mocked(mockIndexer.search).mockResolvedValue([
137
+ {
138
+ id: 'test.ts:1-10',
139
+ filepath: 'test.ts',
140
+ content: 'function hello() {}',
141
+ startLine: 1,
142
+ endLine: 10,
143
+ language: 'typescript',
144
+ },
145
+ ]);
146
+ const result = await handleSearchCode({ query: 'hello' }, context);
147
+ expect(result.content[0].text).toContain('test.ts:1-10');
148
+ expect(result.content[0].text).toContain('function hello()');
149
+ });
150
+ it('should return "No results found" for empty results', async () => {
151
+ vi.mocked(mockIndexer.search).mockResolvedValue([]);
152
+ const result = await handleSearchCode({ query: 'nonexistent' }, context);
153
+ expect(result.content[0].text).toContain('No results found');
154
+ });
155
+ it('should append tool guidance', async () => {
156
+ vi.mocked(mockIndexer.search).mockResolvedValue([]);
157
+ const result = await handleSearchCode({ query: 'test' }, context);
158
+ expect(result.content[0].text).toContain('Guidance');
159
+ });
160
+ });
161
+ describe('parseSearchSimilarArgs', () => {
162
+ it('should throw when neither code nor filepath provided', () => {
163
+ expect(() => parseSearchSimilarArgs({})).toThrow(GlanceyError);
164
+ expect(() => parseSearchSimilarArgs({})).toThrow('Either code or filepath must be provided');
165
+ });
166
+ it('should accept code', () => {
167
+ const result = parseSearchSimilarArgs({ code: 'function test() {}' });
168
+ expect(result.code).toBe('function test() {}');
169
+ });
170
+ it('should accept filepath', () => {
171
+ const result = parseSearchSimilarArgs({ filepath: 'src/test.ts' });
172
+ expect(result.filepath).toBe('src/test.ts');
173
+ });
174
+ it('should parse line range', () => {
175
+ const result = parseSearchSimilarArgs({ filepath: 'test.ts', startLine: 10, endLine: 20 });
176
+ expect(result.startLine).toBe(10);
177
+ expect(result.endLine).toBe(20);
178
+ });
179
+ it('should default excludeSelf to true', () => {
180
+ const result = parseSearchSimilarArgs({ code: 'test' });
181
+ expect(result.excludeSelf).toBe(true);
182
+ });
183
+ it('should allow excludeSelf to be false', () => {
184
+ const result = parseSearchSimilarArgs({ code: 'test', excludeSelf: false });
185
+ expect(result.excludeSelf).toBe(false);
186
+ });
187
+ });
188
+ describe('handleSearchSimilar', () => {
189
+ it('should call indexer.searchSimilar with correct options', async () => {
190
+ vi.mocked(mockIndexer.searchSimilar).mockResolvedValue([]);
191
+ await handleSearchSimilar({
192
+ code: 'function test() {}',
193
+ limit: 5,
194
+ threshold: 0.8,
195
+ excludeSelf: true,
196
+ }, context);
197
+ expect(mockIndexer.searchSimilar).toHaveBeenCalledWith({
198
+ code: 'function test() {}',
199
+ filepath: undefined,
200
+ startLine: undefined,
201
+ endLine: undefined,
202
+ limit: 5,
203
+ threshold: 0.8,
204
+ excludeSelf: true,
205
+ });
206
+ });
207
+ it('should return formatted results', async () => {
208
+ vi.mocked(mockIndexer.searchSimilar).mockResolvedValue([
209
+ {
210
+ id: 'similar.ts:1-10',
211
+ filepath: 'similar.ts',
212
+ content: 'function similar() {}',
213
+ startLine: 1,
214
+ endLine: 10,
215
+ language: 'typescript',
216
+ similarity: 0.85,
217
+ },
218
+ ]);
219
+ const result = await handleSearchSimilar({ code: 'function test() {}' }, context);
220
+ expect(result.content[0].text).toContain('similar.ts:1-10');
221
+ });
222
+ it('should append tool guidance', async () => {
223
+ vi.mocked(mockIndexer.searchSimilar).mockResolvedValue([]);
224
+ const result = await handleSearchSimilar({ code: 'test' }, context);
225
+ expect(result.content[0].text).toContain('Guidance');
226
+ });
227
+ });
228
+ });
229
+ //# sourceMappingURL=search-handlers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-handlers.test.js","sourceRoot":"","sources":["../../../src/__tests__/tools/search-handlers.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,IAAI,WAAiC,CAAC;IACtC,IAAI,OAAoB,CAAC;IAEzB,UAAU,CAAC,GAAG,EAAE;QACd,WAAW,GAAG;YACZ,MAAM,EAAE,EAAE,CAAC,EAAE,EAAE;YACf,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;SACvB,CAAC;QAEF,OAAO,GAAG;YACR,OAAO,EAAE,WAA0B;YACnC,WAAW,EAAE,eAAe;YAC5B,YAAY,EAAE,iBAAiB;SAChC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YACnE,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;QAChF,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACtD,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACnC,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YACjE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;YACxE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;YAClC,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;YAClF,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;YACtC,MAAM,MAAM,GAAG,mBAAmB,CAAC;gBACjC,KAAK,EAAE,MAAM;gBACb,SAAS,EAAE,CAAC,YAAY,EAAE,YAAY,CAAC;aACxC,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;YACzC,MAAM,MAAM,GAAG,mBAAmB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC;YAC/E,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,aAAa,EAAE,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;YACrC,MAAM,OAAO,GAAgB;gBAC3B;oBACE,EAAE,EAAE,cAAc;oBAClB,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,qBAAqB;oBAC9B,SAAS,EAAE,CAAC;oBACZ,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,YAAY;iBACvB;aACF,CAAC;YAEF,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAE/C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,2BAA2B,CAAC,CAAC;YACzD,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;YAC7C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;QACrD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,OAAO,GAAgB;gBAC3B;oBACE,EAAE,EAAE,cAAc;oBAClB,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,qBAAqB;oBAC9B,SAAS,EAAE,CAAC;oBACZ,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,YAAY;oBACtB,UAAU,EAAE,OAAO;oBACnB,UAAU,EAAE,UAAU;iBACvB;aACF,CAAC;YAEF,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAE/C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,qBAAqB,CAAC,CAAC;YACnD,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,OAAO,GAAgB;gBAC3B;oBACE,EAAE,EAAE,UAAU;oBACd,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,QAAQ;oBACjB,SAAS,EAAE,CAAC;oBACZ,OAAO,EAAE,CAAC;oBACV,QAAQ,EAAE,YAAY;iBACvB;gBACD;oBACE,EAAE,EAAE,UAAU;oBACd,QAAQ,EAAE,MAAM;oBAChB,OAAO,EAAE,QAAQ;oBACjB,SAAS,EAAE,CAAC;oBACZ,OAAO,EAAE,CAAC;oBACV,QAAQ,EAAE,YAAY;iBACvB;aACF,CAAC;YAEF,MAAM,SAAS,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;YAE/C,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;YACrD,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAChC,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;YAC/D,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,MAAO,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAErD,MAAM,gBAAgB,CACpB;gBACE,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,CAAC;gBACR,WAAW,EAAE,aAAa;gBAC1B,SAAS,EAAE,CAAC,YAAY,CAAC;aAC1B,EACD,OAAO,CACR,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,oBAAoB,CAAC;gBAC9C,KAAK,EAAE,eAAe;gBACtB,KAAK,EAAE,CAAC;gBACR,WAAW,EAAE,aAAa;gBAC1B,SAAS,EAAE,CAAC,YAAY,CAAC;aAC1B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,MAAO,CAAC,CAAC,iBAAiB,CAAC;gBAC/C;oBACE,EAAE,EAAE,cAAc;oBAClB,QAAQ,EAAE,SAAS;oBACnB,OAAO,EAAE,qBAAqB;oBAC9B,SAAS,EAAE,CAAC;oBACZ,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,YAAY;iBACvB;aACF,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;YAEnE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;YACzD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;YAClE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,MAAO,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC,CAAC;YAEzE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,MAAO,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAErD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;YAElE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC/D,MAAM,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,0CAA0C,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;YAC5B,MAAM,MAAM,GAAG,sBAAsB,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC;YACtE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;YAChC,MAAM,MAAM,GAAG,sBAAsB,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;YACnE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,MAAM,GAAG,sBAAsB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAC3F,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,MAAM,GAAG,sBAAsB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YACxD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sCAAsC,EAAE,GAAG,EAAE;YAC9C,MAAM,MAAM,GAAG,sBAAsB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;YAC5E,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;YACtE,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,aAAc,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAE5D,MAAM,mBAAmB,CACvB;gBACE,IAAI,EAAE,oBAAoB;gBAC1B,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,GAAG;gBACd,WAAW,EAAE,IAAI;aAClB,EACD,OAAO,CACR,CAAC;YAEF,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,oBAAoB,CAAC;gBACrD,IAAI,EAAE,oBAAoB;gBAC1B,QAAQ,EAAE,SAAS;gBACnB,SAAS,EAAE,SAAS;gBACpB,OAAO,EAAE,SAAS;gBAClB,KAAK,EAAE,CAAC;gBACR,SAAS,EAAE,GAAG;gBACd,WAAW,EAAE,IAAI;aAClB,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;YAC/C,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,aAAc,CAAC,CAAC,iBAAiB,CAAC;gBACtD;oBACE,EAAE,EAAE,iBAAiB;oBACrB,QAAQ,EAAE,YAAY;oBACtB,OAAO,EAAE,uBAAuB;oBAChC,SAAS,EAAE,CAAC;oBACZ,OAAO,EAAE,EAAE;oBACX,QAAQ,EAAE,YAAY;oBACtB,UAAU,EAAE,IAAI;iBACjB;aACF,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAAE,OAAO,CAAC,CAAC;YAElF,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;YAC3C,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,aAAc,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAE5D,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC;YAEpE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=symbol-handlers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-handlers.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/tools/symbol-handlers.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,348 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { parseGetSymbolsOverviewArgs, parseFindSymbolArgs, parseFindReferencingSymbolsArgs, parseSearchForPatternArgs, parseReplaceSymbolBodyArgs, parseInsertBeforeSymbolArgs, parseInsertAfterSymbolArgs, parseRenameSymbolArgs, formatSymbolsOverview, formatMatchedSymbols, formatSymbolEditResult, } from '../../tools/symbol-handlers.js';
3
+ import { SymbolKind, } from '../../symbols/index.js';
4
+ import { GlanceyError } from '../../utils/errors.js';
5
+ describe('symbol-handlers', () => {
6
+ // ============================================================================
7
+ // get_symbols_overview
8
+ // ============================================================================
9
+ describe('parseGetSymbolsOverviewArgs', () => {
10
+ it('should throw when relative_path is missing', () => {
11
+ expect(() => parseGetSymbolsOverviewArgs({})).toThrow(GlanceyError);
12
+ expect(() => parseGetSymbolsOverviewArgs({})).toThrow('relative_path is required');
13
+ });
14
+ it('should parse valid relative_path', () => {
15
+ const result = parseGetSymbolsOverviewArgs({ relative_path: 'src/index.ts' });
16
+ expect(result.relativePath).toBe('src/index.ts');
17
+ });
18
+ it('should default depth to 0', () => {
19
+ const result = parseGetSymbolsOverviewArgs({ relative_path: 'test.ts' });
20
+ expect(result.depth).toBe(0);
21
+ });
22
+ it('should parse custom depth', () => {
23
+ const result = parseGetSymbolsOverviewArgs({ relative_path: 'test.ts', depth: 2 });
24
+ expect(result.depth).toBe(2);
25
+ });
26
+ });
27
+ describe('formatSymbolsOverview', () => {
28
+ it('should format overview correctly', () => {
29
+ const overview = {
30
+ filepath: 'src/test.ts',
31
+ totalSymbols: 5,
32
+ byKind: {
33
+ Function: [
34
+ { name: 'foo', namePath: '/foo', lines: '1-10' },
35
+ { name: 'bar', namePath: '/bar', lines: '15-25', children: 2 },
36
+ ],
37
+ Variable: [{ name: 'count', namePath: '/count', lines: '30-30' }],
38
+ },
39
+ };
40
+ const formatted = formatSymbolsOverview(overview);
41
+ expect(formatted).toContain('## Symbols in src/test.ts');
42
+ expect(formatted).toContain('Total: 5 symbols');
43
+ expect(formatted).toContain('### Function (2)');
44
+ expect(formatted).toContain('**foo** (1-10)');
45
+ expect(formatted).toContain('**bar** (15-25) [2 children]');
46
+ expect(formatted).toContain('### Variable (1)');
47
+ expect(formatted).toContain('**count** (30-30)');
48
+ });
49
+ });
50
+ // ============================================================================
51
+ // find_symbol
52
+ // ============================================================================
53
+ describe('parseFindSymbolArgs', () => {
54
+ it('should throw when name_path_pattern is missing', () => {
55
+ expect(() => parseFindSymbolArgs({})).toThrow(GlanceyError);
56
+ expect(() => parseFindSymbolArgs({})).toThrow('name_path_pattern is required');
57
+ });
58
+ it('should parse valid name_path_pattern', () => {
59
+ const result = parseFindSymbolArgs({ name_path_pattern: 'MyClass/myMethod' });
60
+ expect(result.namePathPattern).toBe('MyClass/myMethod');
61
+ });
62
+ it('should default depth to 0', () => {
63
+ const result = parseFindSymbolArgs({ name_path_pattern: 'test' });
64
+ expect(result.depth).toBe(0);
65
+ });
66
+ it('should default includeBody to false', () => {
67
+ const result = parseFindSymbolArgs({ name_path_pattern: 'test' });
68
+ expect(result.includeBody).toBe(false);
69
+ });
70
+ it('should parse includeBody', () => {
71
+ const result = parseFindSymbolArgs({ name_path_pattern: 'test', include_body: true });
72
+ expect(result.includeBody).toBe(true);
73
+ });
74
+ it('should parse substringMatching', () => {
75
+ const result = parseFindSymbolArgs({ name_path_pattern: 'test', substring_matching: true });
76
+ expect(result.substringMatching).toBe(true);
77
+ });
78
+ it('should parse kind filters', () => {
79
+ const result = parseFindSymbolArgs({
80
+ name_path_pattern: 'test',
81
+ include_kinds: [SymbolKind.Function],
82
+ exclude_kinds: [SymbolKind.Variable],
83
+ });
84
+ expect(result.includeKinds).toEqual([SymbolKind.Function]);
85
+ expect(result.excludeKinds).toEqual([SymbolKind.Variable]);
86
+ });
87
+ });
88
+ describe('formatMatchedSymbols', () => {
89
+ it('should return message for no matches', () => {
90
+ const formatted = formatMatchedSymbols([], 'MyClass');
91
+ expect(formatted).toContain('No symbols found matching pattern: MyClass');
92
+ });
93
+ it('should format matched symbols', () => {
94
+ const symbol = {
95
+ name: 'myFunction',
96
+ kind: SymbolKind.Function,
97
+ namePath: '/myFunction',
98
+ depth: 0,
99
+ location: {
100
+ filepath: 'src/test.ts',
101
+ startLine: 10,
102
+ endLine: 20,
103
+ startColumn: 0,
104
+ endColumn: 0,
105
+ },
106
+ };
107
+ const formatted = formatMatchedSymbols([{ symbol, file: 'src/test.ts' }], 'myFunction');
108
+ expect(formatted).toContain('Found 1 matching symbol(s)');
109
+ expect(formatted).toContain('## myFunction (Function)');
110
+ expect(formatted).toContain('**Location:** src/test.ts:10-20');
111
+ });
112
+ it('should include body when present', () => {
113
+ const symbol = {
114
+ name: 'foo',
115
+ kind: SymbolKind.Function,
116
+ namePath: '/foo',
117
+ depth: 0,
118
+ location: { filepath: 'test.ts', startLine: 1, endLine: 5, startColumn: 0, endColumn: 0 },
119
+ body: 'function foo() { return 42; }',
120
+ };
121
+ const formatted = formatMatchedSymbols([{ symbol, file: 'test.ts' }], 'foo');
122
+ expect(formatted).toContain('```');
123
+ expect(formatted).toContain('function foo()');
124
+ });
125
+ it('should include children info when present', () => {
126
+ const child = {
127
+ name: 'innerMethod',
128
+ kind: SymbolKind.Method,
129
+ namePath: 'MyClass/innerMethod',
130
+ depth: 1,
131
+ location: { filepath: 'test.ts', startLine: 5, endLine: 10, startColumn: 0, endColumn: 0 },
132
+ };
133
+ const symbol = {
134
+ name: 'MyClass',
135
+ kind: SymbolKind.Class,
136
+ namePath: '/MyClass',
137
+ depth: 0,
138
+ location: { filepath: 'test.ts', startLine: 1, endLine: 20, startColumn: 0, endColumn: 0 },
139
+ children: [child],
140
+ };
141
+ const formatted = formatMatchedSymbols([{ symbol, file: 'test.ts' }], 'MyClass');
142
+ expect(formatted).toContain('**Children:** 1');
143
+ expect(formatted).toContain('innerMethod (Method, lines 5-10)');
144
+ });
145
+ });
146
+ // ============================================================================
147
+ // find_referencing_symbols
148
+ // ============================================================================
149
+ describe('parseFindReferencingSymbolsArgs', () => {
150
+ it('should throw when name_path is missing', () => {
151
+ expect(() => parseFindReferencingSymbolsArgs({ relative_path: 'test.ts' })).toThrow(GlanceyError);
152
+ });
153
+ it('should throw when relative_path is missing', () => {
154
+ expect(() => parseFindReferencingSymbolsArgs({ name_path: 'myFunc' })).toThrow(GlanceyError);
155
+ });
156
+ it('should throw when both are missing', () => {
157
+ expect(() => parseFindReferencingSymbolsArgs({})).toThrow('name_path and relative_path are required');
158
+ });
159
+ it('should parse valid arguments', () => {
160
+ const result = parseFindReferencingSymbolsArgs({
161
+ name_path: 'myFunc',
162
+ relative_path: 'src/utils.ts',
163
+ });
164
+ expect(result.namePath).toBe('myFunc');
165
+ expect(result.relativePath).toBe('src/utils.ts');
166
+ });
167
+ it('should default includeInfo to false', () => {
168
+ const result = parseFindReferencingSymbolsArgs({
169
+ name_path: 'test',
170
+ relative_path: 'test.ts',
171
+ });
172
+ expect(result.includeInfo).toBe(false);
173
+ });
174
+ it('should parse includeInfo', () => {
175
+ const result = parseFindReferencingSymbolsArgs({
176
+ name_path: 'test',
177
+ relative_path: 'test.ts',
178
+ include_info: true,
179
+ });
180
+ expect(result.includeInfo).toBe(true);
181
+ });
182
+ });
183
+ // ============================================================================
184
+ // search_for_pattern
185
+ // ============================================================================
186
+ describe('parseSearchForPatternArgs', () => {
187
+ it('should throw when substring_pattern is missing', () => {
188
+ expect(() => parseSearchForPatternArgs({})).toThrow(GlanceyError);
189
+ expect(() => parseSearchForPatternArgs({})).toThrow('substring_pattern is required');
190
+ });
191
+ it('should parse valid substring_pattern', () => {
192
+ const result = parseSearchForPatternArgs({ substring_pattern: 'TODO:' });
193
+ expect(result.substringPattern).toBe('TODO:');
194
+ });
195
+ it('should parse optional parameters', () => {
196
+ const result = parseSearchForPatternArgs({
197
+ substring_pattern: 'test',
198
+ relative_path: 'src/',
199
+ restrict_search_to_code_files: true,
200
+ paths_include_glob: '*.ts',
201
+ paths_exclude_glob: '*.test.ts',
202
+ context_lines_before: 2,
203
+ context_lines_after: 3,
204
+ max_answer_chars: 10000,
205
+ });
206
+ expect(result.relativePath).toBe('src/');
207
+ expect(result.restrictSearchToCodeFiles).toBe(true);
208
+ expect(result.pathsIncludeGlob).toBe('*.ts');
209
+ expect(result.pathsExcludeGlob).toBe('*.test.ts');
210
+ expect(result.contextLinesBefore).toBe(2);
211
+ expect(result.contextLinesAfter).toBe(3);
212
+ expect(result.maxAnswerChars).toBe(10000);
213
+ });
214
+ it('should use defaults for optional parameters', () => {
215
+ const result = parseSearchForPatternArgs({ substring_pattern: 'test' });
216
+ expect(result.restrictSearchToCodeFiles).toBe(false);
217
+ expect(result.contextLinesBefore).toBe(0);
218
+ expect(result.contextLinesAfter).toBe(0);
219
+ expect(result.maxAnswerChars).toBe(50000);
220
+ });
221
+ });
222
+ // ============================================================================
223
+ // Symbol Edit: replace_symbol_body
224
+ // ============================================================================
225
+ describe('parseReplaceSymbolBodyArgs', () => {
226
+ it('should throw when name_path is missing', () => {
227
+ expect(() => parseReplaceSymbolBodyArgs({ relative_path: 'test.ts', body: 'new body' })).toThrow(GlanceyError);
228
+ });
229
+ it('should throw when relative_path is missing', () => {
230
+ expect(() => parseReplaceSymbolBodyArgs({ name_path: 'myFunc', body: 'new body' })).toThrow(GlanceyError);
231
+ });
232
+ it('should throw when body is missing', () => {
233
+ expect(() => parseReplaceSymbolBodyArgs({ name_path: 'myFunc', relative_path: 'test.ts' })).toThrow(GlanceyError);
234
+ });
235
+ it('should parse valid arguments', () => {
236
+ const result = parseReplaceSymbolBodyArgs({
237
+ name_path: 'myFunc',
238
+ relative_path: 'src/utils.ts',
239
+ body: 'function myFunc() { return 42; }',
240
+ });
241
+ expect(result.namePath).toBe('myFunc');
242
+ expect(result.relativePath).toBe('src/utils.ts');
243
+ expect(result.body).toBe('function myFunc() { return 42; }');
244
+ });
245
+ });
246
+ describe('formatSymbolEditResult', () => {
247
+ it('should format error result', () => {
248
+ const result = {
249
+ success: false,
250
+ filepath: 'test.ts',
251
+ symbolName: 'myFunc',
252
+ error: 'Symbol not found',
253
+ };
254
+ const formatted = formatSymbolEditResult(result, 'replace');
255
+ expect(formatted).toContain('Failed to replace: Symbol not found');
256
+ });
257
+ it('should format success result', () => {
258
+ const result = {
259
+ success: true,
260
+ symbolName: 'myFunc',
261
+ filepath: 'src/utils.ts',
262
+ newRange: { startLine: 10, endLine: 20 },
263
+ };
264
+ const formatted = formatSymbolEditResult(result, 'replaced');
265
+ expect(formatted).toContain('Symbol "myFunc" replaced in src/utils.ts');
266
+ expect(formatted).toContain('New location: lines 10-20');
267
+ });
268
+ });
269
+ // ============================================================================
270
+ // Symbol Edit: insert_before_symbol
271
+ // ============================================================================
272
+ describe('parseInsertBeforeSymbolArgs', () => {
273
+ it('should throw when required args are missing', () => {
274
+ expect(() => parseInsertBeforeSymbolArgs({})).toThrow(GlanceyError);
275
+ expect(() => parseInsertBeforeSymbolArgs({})).toThrow('name_path, relative_path, and body are required');
276
+ });
277
+ it('should parse valid arguments', () => {
278
+ const result = parseInsertBeforeSymbolArgs({
279
+ name_path: 'myFunc',
280
+ relative_path: 'test.ts',
281
+ body: '// Comment',
282
+ });
283
+ expect(result.namePath).toBe('myFunc');
284
+ expect(result.relativePath).toBe('test.ts');
285
+ expect(result.body).toBe('// Comment');
286
+ });
287
+ });
288
+ // ============================================================================
289
+ // Symbol Edit: insert_after_symbol
290
+ // ============================================================================
291
+ describe('parseInsertAfterSymbolArgs', () => {
292
+ it('should throw when required args are missing', () => {
293
+ expect(() => parseInsertAfterSymbolArgs({})).toThrow(GlanceyError);
294
+ });
295
+ it('should parse valid arguments', () => {
296
+ const result = parseInsertAfterSymbolArgs({
297
+ name_path: 'myFunc',
298
+ relative_path: 'test.ts',
299
+ body: 'function newFunc() {}',
300
+ });
301
+ expect(result.namePath).toBe('myFunc');
302
+ expect(result.relativePath).toBe('test.ts');
303
+ expect(result.body).toBe('function newFunc() {}');
304
+ });
305
+ });
306
+ // ============================================================================
307
+ // Symbol Edit: rename_symbol
308
+ // ============================================================================
309
+ describe('parseRenameSymbolArgs', () => {
310
+ it('should throw when name_path is missing', () => {
311
+ expect(() => parseRenameSymbolArgs({ relative_path: 'test.ts', new_name: 'newName' })).toThrow(GlanceyError);
312
+ });
313
+ it('should throw when relative_path is missing', () => {
314
+ expect(() => parseRenameSymbolArgs({ name_path: 'oldName', new_name: 'newName' })).toThrow(GlanceyError);
315
+ });
316
+ it('should throw when new_name is missing', () => {
317
+ expect(() => parseRenameSymbolArgs({ name_path: 'oldName', relative_path: 'test.ts' })).toThrow(GlanceyError);
318
+ });
319
+ it('should parse valid arguments', () => {
320
+ const result = parseRenameSymbolArgs({
321
+ name_path: 'oldFunc',
322
+ relative_path: 'src/utils.ts',
323
+ new_name: 'newFunc',
324
+ });
325
+ expect(result.namePath).toBe('oldFunc');
326
+ expect(result.relativePath).toBe('src/utils.ts');
327
+ expect(result.newName).toBe('newFunc');
328
+ });
329
+ it('should default dryRun to false', () => {
330
+ const result = parseRenameSymbolArgs({
331
+ name_path: 'old',
332
+ relative_path: 'test.ts',
333
+ new_name: 'new',
334
+ });
335
+ expect(result.dryRun).toBe(false);
336
+ });
337
+ it('should parse dryRun', () => {
338
+ const result = parseRenameSymbolArgs({
339
+ name_path: 'old',
340
+ relative_path: 'test.ts',
341
+ new_name: 'new',
342
+ dry_run: true,
343
+ });
344
+ expect(result.dryRun).toBe(true);
345
+ });
346
+ });
347
+ });
348
+ //# sourceMappingURL=symbol-handlers.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-handlers.test.js","sourceRoot":"","sources":["../../../src/__tests__/tools/symbol-handlers.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=worktree-handlers.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree-handlers.test.d.ts","sourceRoot":"","sources":["../../../src/__tests__/tools/worktree-handlers.test.ts"],"names":[],"mappings":""}