codevault 1.8.3 → 1.8.5

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 (479) hide show
  1. package/README.md +33 -5
  2. package/dist/chunking/file-grouper.d.ts +1 -1
  3. package/dist/chunking/file-grouper.d.ts.map +1 -1
  4. package/dist/chunking/file-grouper.js +3 -3
  5. package/dist/chunking/file-grouper.js.map +1 -1
  6. package/dist/chunking/semantic-chunker.d.ts +1 -1
  7. package/dist/chunking/semantic-chunker.d.ts.map +1 -1
  8. package/dist/chunking/token-counter.d.ts +1 -1
  9. package/dist/chunking/token-counter.d.ts.map +1 -1
  10. package/dist/chunking/token-counter.js +16 -10
  11. package/dist/chunking/token-counter.js.map +1 -1
  12. package/dist/cli/commands/ask-cmd.js +15 -15
  13. package/dist/cli/commands/ask-cmd.js.map +1 -1
  14. package/dist/cli/commands/chat-cmd.d.ts.map +1 -1
  15. package/dist/cli/commands/chat-cmd.js +40 -40
  16. package/dist/cli/commands/chat-cmd.js.map +1 -1
  17. package/dist/cli/commands/config-cmd.d.ts.map +1 -1
  18. package/dist/cli/commands/config-cmd.js +61 -52
  19. package/dist/cli/commands/config-cmd.js.map +1 -1
  20. package/dist/cli/commands/context.d.ts.map +1 -1
  21. package/dist/cli/commands/context.js +20 -11
  22. package/dist/cli/commands/context.js.map +1 -1
  23. package/dist/cli/commands/index-cmd.d.ts.map +1 -1
  24. package/dist/cli/commands/index-cmd.js +109 -85
  25. package/dist/cli/commands/index-cmd.js.map +1 -1
  26. package/dist/cli/commands/info-cmd.d.ts.map +1 -1
  27. package/dist/cli/commands/info-cmd.js +12 -11
  28. package/dist/cli/commands/info-cmd.js.map +1 -1
  29. package/dist/cli/commands/interactive-config.d.ts.map +1 -1
  30. package/dist/cli/commands/interactive-config.js +60 -20
  31. package/dist/cli/commands/interactive-config.js.map +1 -1
  32. package/dist/cli/commands/search-cmd.d.ts.map +1 -1
  33. package/dist/cli/commands/search-cmd.js +22 -11
  34. package/dist/cli/commands/search-cmd.js.map +1 -1
  35. package/dist/cli/commands/search-with-code-cmd.d.ts.map +1 -1
  36. package/dist/cli/commands/search-with-code-cmd.js +25 -16
  37. package/dist/cli/commands/search-with-code-cmd.js.map +1 -1
  38. package/dist/cli/commands/update-cmd.d.ts.map +1 -1
  39. package/dist/cli/commands/update-cmd.js +16 -7
  40. package/dist/cli/commands/update-cmd.js.map +1 -1
  41. package/dist/cli/commands/watch-cmd.d.ts.map +1 -1
  42. package/dist/cli/commands/watch-cmd.js +21 -11
  43. package/dist/cli/commands/watch-cmd.js.map +1 -1
  44. package/dist/cli/index.js.map +1 -1
  45. package/dist/cli/utils.d.ts +56 -0
  46. package/dist/cli/utils.d.ts.map +1 -0
  47. package/dist/cli/utils.js +98 -0
  48. package/dist/cli/utils.js.map +1 -0
  49. package/dist/cli.js +0 -0
  50. package/dist/codemap/io.js.map +1 -1
  51. package/dist/config/constants.d.ts +4 -0
  52. package/dist/config/constants.d.ts.map +1 -1
  53. package/dist/config/constants.js +2 -0
  54. package/dist/config/constants.js.map +1 -1
  55. package/dist/config/loader.js.map +1 -1
  56. package/dist/context/packs.d.ts +2 -2
  57. package/dist/context/packs.d.ts.map +1 -1
  58. package/dist/context/packs.js +7 -4
  59. package/dist/context/packs.js.map +1 -1
  60. package/dist/core/IndexerEngine.d.ts +2 -0
  61. package/dist/core/IndexerEngine.d.ts.map +1 -1
  62. package/dist/core/IndexerEngine.js +34 -26
  63. package/dist/core/IndexerEngine.js.map +1 -1
  64. package/dist/core/SearchService.d.ts +2 -1
  65. package/dist/core/SearchService.d.ts.map +1 -1
  66. package/dist/core/SearchService.js +25 -18
  67. package/dist/core/SearchService.js.map +1 -1
  68. package/dist/core/batch-indexer.d.ts +4 -3
  69. package/dist/core/batch-indexer.d.ts.map +1 -1
  70. package/dist/core/batch-indexer.js +32 -35
  71. package/dist/core/batch-indexer.js.map +1 -1
  72. package/dist/core/indexing/FileProcessor.d.ts +1 -0
  73. package/dist/core/indexing/FileProcessor.d.ts.map +1 -1
  74. package/dist/core/indexing/FileProcessor.js +32 -9
  75. package/dist/core/indexing/FileProcessor.js.map +1 -1
  76. package/dist/core/indexing/IndexContext.d.ts +6 -4
  77. package/dist/core/indexing/IndexContext.d.ts.map +1 -1
  78. package/dist/core/indexing/IndexContext.js +3 -3
  79. package/dist/core/indexing/IndexContext.js.map +1 -1
  80. package/dist/core/indexing/IndexFinalizationStage.d.ts +6 -1
  81. package/dist/core/indexing/IndexFinalizationStage.d.ts.map +1 -1
  82. package/dist/core/indexing/IndexFinalizationStage.js +22 -3
  83. package/dist/core/indexing/IndexFinalizationStage.js.map +1 -1
  84. package/dist/core/indexing/IndexState.d.ts +3 -8
  85. package/dist/core/indexing/IndexState.d.ts.map +1 -1
  86. package/dist/core/indexing/IndexState.js.map +1 -1
  87. package/dist/core/indexing/PersistManager.d.ts +1 -1
  88. package/dist/core/indexing/PersistManager.d.ts.map +1 -1
  89. package/dist/core/indexing/PersistManager.js +17 -17
  90. package/dist/core/indexing/PersistManager.js.map +1 -1
  91. package/dist/core/indexing/chunk-pipeline.d.ts +33 -7
  92. package/dist/core/indexing/chunk-pipeline.d.ts.map +1 -1
  93. package/dist/core/indexing/chunk-pipeline.js +20 -8
  94. package/dist/core/indexing/chunk-pipeline.js.map +1 -1
  95. package/dist/core/metadata.d.ts +1 -1
  96. package/dist/core/metadata.d.ts.map +1 -1
  97. package/dist/core/metadata.js +1 -1
  98. package/dist/core/metadata.js.map +1 -1
  99. package/dist/core/search/CandidateRetriever.d.ts +1 -1
  100. package/dist/core/search/CandidateRetriever.d.ts.map +1 -1
  101. package/dist/core/search/CandidateRetriever.js +7 -5
  102. package/dist/core/search/CandidateRetriever.js.map +1 -1
  103. package/dist/core/search/HybridFusion.d.ts +1 -2
  104. package/dist/core/search/HybridFusion.d.ts.map +1 -1
  105. package/dist/core/search/HybridFusion.js +5 -17
  106. package/dist/core/search/HybridFusion.js.map +1 -1
  107. package/dist/core/search/ResultMapper.d.ts +0 -1
  108. package/dist/core/search/ResultMapper.d.ts.map +1 -1
  109. package/dist/core/search/ResultMapper.js +3 -14
  110. package/dist/core/search/ResultMapper.js.map +1 -1
  111. package/dist/core/search/SearchContextManager.d.ts +4 -1
  112. package/dist/core/search/SearchContextManager.d.ts.map +1 -1
  113. package/dist/core/search/SearchContextManager.js +19 -6
  114. package/dist/core/search/SearchContextManager.js.map +1 -1
  115. package/dist/core/search.d.ts.map +1 -1
  116. package/dist/core/search.js +9 -4
  117. package/dist/core/search.js.map +1 -1
  118. package/dist/core/types.d.ts +2 -2
  119. package/dist/core/types.d.ts.map +1 -1
  120. package/dist/database/db.d.ts +14 -14
  121. package/dist/database/db.d.ts.map +1 -1
  122. package/dist/database/db.js +14 -14
  123. package/dist/database/db.js.map +1 -1
  124. package/dist/indexer/merkle.js +1 -1
  125. package/dist/indexer/merkle.js.map +1 -1
  126. package/dist/languages/rules.d.ts +2 -1
  127. package/dist/languages/rules.d.ts.map +1 -1
  128. package/dist/languages/rules.js +14 -5
  129. package/dist/languages/rules.js.map +1 -1
  130. package/dist/languages/tree-sitter-loader.d.ts +24 -24
  131. package/dist/languages/tree-sitter-loader.d.ts.map +1 -1
  132. package/dist/languages/tree-sitter-loader.js +14 -10
  133. package/dist/languages/tree-sitter-loader.js.map +1 -1
  134. package/dist/mcp/handlers/context.d.ts +5 -11
  135. package/dist/mcp/handlers/context.d.ts.map +1 -1
  136. package/dist/mcp/handlers/context.js.map +1 -1
  137. package/dist/mcp/handlers/project.d.ts +9 -27
  138. package/dist/mcp/handlers/project.d.ts.map +1 -1
  139. package/dist/mcp/handlers/search.d.ts +24 -18
  140. package/dist/mcp/handlers/search.d.ts.map +1 -1
  141. package/dist/mcp/handlers/search.js +8 -2
  142. package/dist/mcp/handlers/search.js.map +1 -1
  143. package/dist/mcp/handlers/synthesis.d.ts +15 -11
  144. package/dist/mcp/handlers/synthesis.d.ts.map +1 -1
  145. package/dist/mcp/handlers/synthesis.js +4 -1
  146. package/dist/mcp/handlers/synthesis.js.map +1 -1
  147. package/dist/mcp/schemas.d.ts +2 -2
  148. package/dist/mcp/tools/ask-codebase.d.ts +10 -28
  149. package/dist/mcp/tools/ask-codebase.d.ts.map +1 -1
  150. package/dist/mcp/tools/ask-codebase.js +1 -1
  151. package/dist/mcp/tools/ask-codebase.js.map +1 -1
  152. package/dist/mcp/tools/use-context-pack.d.ts +14 -23
  153. package/dist/mcp/tools/use-context-pack.d.ts.map +1 -1
  154. package/dist/mcp/tools/use-context-pack.js +4 -3
  155. package/dist/mcp/tools/use-context-pack.js.map +1 -1
  156. package/dist/mcp-server.d.ts +1 -0
  157. package/dist/mcp-server.d.ts.map +1 -1
  158. package/dist/mcp-server.js +39 -24
  159. package/dist/mcp-server.js.map +1 -1
  160. package/dist/providers/base.d.ts +3 -2
  161. package/dist/providers/base.d.ts.map +1 -1
  162. package/dist/providers/base.js +3 -10
  163. package/dist/providers/base.js.map +1 -1
  164. package/dist/providers/chat-llm.d.ts +3 -2
  165. package/dist/providers/chat-llm.d.ts.map +1 -1
  166. package/dist/providers/chat-llm.js +13 -9
  167. package/dist/providers/chat-llm.js.map +1 -1
  168. package/dist/providers/mock.d.ts.map +1 -1
  169. package/dist/providers/mock.js +6 -5
  170. package/dist/providers/mock.js.map +1 -1
  171. package/dist/providers/openai.d.ts +2 -1
  172. package/dist/providers/openai.d.ts.map +1 -1
  173. package/dist/providers/openai.js +15 -19
  174. package/dist/providers/openai.js.map +1 -1
  175. package/dist/providers/token-counter.d.ts.map +1 -1
  176. package/dist/providers/token-counter.js +11 -3
  177. package/dist/providers/token-counter.js.map +1 -1
  178. package/dist/ranking/api-reranker.d.ts +1 -1
  179. package/dist/ranking/api-reranker.d.ts.map +1 -1
  180. package/dist/ranking/api-reranker.js +50 -13
  181. package/dist/ranking/api-reranker.js.map +1 -1
  182. package/dist/ranking/symbol-boost.d.ts.map +1 -1
  183. package/dist/ranking/symbol-boost.js +4 -11
  184. package/dist/ranking/symbol-boost.js.map +1 -1
  185. package/dist/search/bm25.d.ts +10 -0
  186. package/dist/search/bm25.d.ts.map +1 -1
  187. package/dist/search/bm25.js +16 -0
  188. package/dist/search/bm25.js.map +1 -1
  189. package/dist/search/hybrid.js.map +1 -1
  190. package/dist/search/scope.d.ts.map +1 -1
  191. package/dist/search/scope.js +3 -2
  192. package/dist/search/scope.js.map +1 -1
  193. package/dist/storage/encrypted-chunks.d.ts +3 -0
  194. package/dist/storage/encrypted-chunks.d.ts.map +1 -1
  195. package/dist/storage/encrypted-chunks.js +126 -47
  196. package/dist/storage/encrypted-chunks.js.map +1 -1
  197. package/dist/symbols/extract.d.ts.map +1 -1
  198. package/dist/symbols/extract.js +3 -2
  199. package/dist/symbols/extract.js.map +1 -1
  200. package/dist/symbols/graph.d.ts.map +1 -1
  201. package/dist/symbols/graph.js +14 -8
  202. package/dist/symbols/graph.js.map +1 -1
  203. package/dist/synthesis/conversational-synthesizer.d.ts +2 -1
  204. package/dist/synthesis/conversational-synthesizer.d.ts.map +1 -1
  205. package/dist/synthesis/conversational-synthesizer.js +6 -1
  206. package/dist/synthesis/conversational-synthesizer.js.map +1 -1
  207. package/dist/synthesis/markdown-formatter.d.ts.map +1 -1
  208. package/dist/synthesis/markdown-formatter.js +1 -1
  209. package/dist/synthesis/markdown-formatter.js.map +1 -1
  210. package/dist/synthesis/prompt-builder.d.ts.map +1 -1
  211. package/dist/synthesis/prompt-builder.js +42 -15
  212. package/dist/synthesis/prompt-builder.js.map +1 -1
  213. package/dist/synthesis/synthesizer.d.ts.map +1 -1
  214. package/dist/synthesis/synthesizer.js +23 -10
  215. package/dist/synthesis/synthesizer.js.map +1 -1
  216. package/dist/tests/api-reranker.test.d.ts +2 -0
  217. package/dist/tests/api-reranker.test.d.ts.map +1 -0
  218. package/dist/tests/api-reranker.test.js +575 -0
  219. package/dist/tests/api-reranker.test.js.map +1 -0
  220. package/dist/tests/bm25.test.d.ts +2 -0
  221. package/dist/tests/bm25.test.d.ts.map +1 -0
  222. package/dist/tests/bm25.test.js +340 -0
  223. package/dist/tests/bm25.test.js.map +1 -0
  224. package/dist/tests/chunking/file-grouper.test.d.ts +2 -0
  225. package/dist/tests/chunking/file-grouper.test.d.ts.map +1 -0
  226. package/dist/tests/chunking/file-grouper.test.js +495 -0
  227. package/dist/tests/chunking/file-grouper.test.js.map +1 -0
  228. package/dist/tests/chunking/semantic-chunker.test.d.ts +2 -0
  229. package/dist/tests/chunking/semantic-chunker.test.d.ts.map +1 -0
  230. package/dist/tests/chunking/semantic-chunker.test.js +509 -0
  231. package/dist/tests/chunking/semantic-chunker.test.js.map +1 -0
  232. package/dist/tests/chunking/token-counter.test.d.ts +2 -0
  233. package/dist/tests/chunking/token-counter.test.d.ts.map +1 -0
  234. package/dist/tests/chunking/token-counter.test.js +441 -0
  235. package/dist/tests/chunking/token-counter.test.js.map +1 -0
  236. package/dist/tests/cli/ask-cmd.test.d.ts +2 -0
  237. package/dist/tests/cli/ask-cmd.test.d.ts.map +1 -0
  238. package/dist/tests/cli/ask-cmd.test.js +152 -0
  239. package/dist/tests/cli/ask-cmd.test.js.map +1 -0
  240. package/dist/tests/cli/chat-cmd.test.d.ts +2 -0
  241. package/dist/tests/cli/chat-cmd.test.d.ts.map +1 -0
  242. package/dist/tests/cli/chat-cmd.test.js +118 -0
  243. package/dist/tests/cli/chat-cmd.test.js.map +1 -0
  244. package/dist/tests/cli/config-cmd.test.d.ts +2 -0
  245. package/dist/tests/cli/config-cmd.test.d.ts.map +1 -0
  246. package/dist/tests/cli/config-cmd.test.js +226 -0
  247. package/dist/tests/cli/config-cmd.test.js.map +1 -0
  248. package/dist/tests/cli/context.test.d.ts +2 -0
  249. package/dist/tests/cli/context.test.d.ts.map +1 -0
  250. package/dist/tests/cli/context.test.js +158 -0
  251. package/dist/tests/cli/context.test.js.map +1 -0
  252. package/dist/tests/cli/index-cmd.test.d.ts +2 -0
  253. package/dist/tests/cli/index-cmd.test.d.ts.map +1 -0
  254. package/dist/tests/cli/index-cmd.test.js +89 -0
  255. package/dist/tests/cli/index-cmd.test.js.map +1 -0
  256. package/dist/tests/cli/index.test.d.ts +2 -0
  257. package/dist/tests/cli/index.test.d.ts.map +1 -0
  258. package/dist/tests/cli/index.test.js +167 -0
  259. package/dist/tests/cli/index.test.js.map +1 -0
  260. package/dist/tests/cli/info-cmd.test.d.ts +2 -0
  261. package/dist/tests/cli/info-cmd.test.d.ts.map +1 -0
  262. package/dist/tests/cli/info-cmd.test.js +47 -0
  263. package/dist/tests/cli/info-cmd.test.js.map +1 -0
  264. package/dist/tests/cli/interactive-config.test.d.ts +2 -0
  265. package/dist/tests/cli/interactive-config.test.d.ts.map +1 -0
  266. package/dist/tests/cli/interactive-config.test.js +30 -0
  267. package/dist/tests/cli/interactive-config.test.js.map +1 -0
  268. package/dist/tests/cli/mcp-cmd.test.d.ts +2 -0
  269. package/dist/tests/cli/mcp-cmd.test.d.ts.map +1 -0
  270. package/dist/tests/cli/mcp-cmd.test.js +47 -0
  271. package/dist/tests/cli/mcp-cmd.test.js.map +1 -0
  272. package/dist/tests/cli/search-cmd.test.d.ts +2 -0
  273. package/dist/tests/cli/search-cmd.test.d.ts.map +1 -0
  274. package/dist/tests/cli/search-cmd.test.js +120 -0
  275. package/dist/tests/cli/search-cmd.test.js.map +1 -0
  276. package/dist/tests/cli/search-with-code-cmd.test.d.ts +2 -0
  277. package/dist/tests/cli/search-with-code-cmd.test.d.ts.map +1 -0
  278. package/dist/tests/cli/search-with-code-cmd.test.js +140 -0
  279. package/dist/tests/cli/search-with-code-cmd.test.js.map +1 -0
  280. package/dist/tests/cli/update-cmd.test.d.ts +2 -0
  281. package/dist/tests/cli/update-cmd.test.d.ts.map +1 -0
  282. package/dist/tests/cli/update-cmd.test.js +75 -0
  283. package/dist/tests/cli/update-cmd.test.js.map +1 -0
  284. package/dist/tests/cli/utils.test.d.ts +2 -0
  285. package/dist/tests/cli/utils.test.d.ts.map +1 -0
  286. package/dist/tests/cli/utils.test.js +119 -0
  287. package/dist/tests/cli/utils.test.js.map +1 -0
  288. package/dist/tests/cli/watch-cmd.test.d.ts +2 -0
  289. package/dist/tests/cli/watch-cmd.test.d.ts.map +1 -0
  290. package/dist/tests/cli/watch-cmd.test.js +84 -0
  291. package/dist/tests/cli/watch-cmd.test.js.map +1 -0
  292. package/dist/tests/cli-ui.test.d.ts +2 -0
  293. package/dist/tests/cli-ui.test.d.ts.map +1 -0
  294. package/dist/tests/cli-ui.test.js +608 -0
  295. package/dist/tests/cli-ui.test.js.map +1 -0
  296. package/dist/tests/codemap-io.test.d.ts +2 -0
  297. package/dist/tests/codemap-io.test.d.ts.map +1 -0
  298. package/dist/tests/codemap-io.test.js +992 -0
  299. package/dist/tests/codemap-io.test.js.map +1 -0
  300. package/dist/tests/config/apply-env.test.d.ts +2 -0
  301. package/dist/tests/config/apply-env.test.d.ts.map +1 -0
  302. package/dist/tests/config/apply-env.test.js +717 -0
  303. package/dist/tests/config/apply-env.test.js.map +1 -0
  304. package/dist/tests/config/constants.test.d.ts +2 -0
  305. package/dist/tests/config/constants.test.d.ts.map +1 -0
  306. package/dist/tests/config/constants.test.js +406 -0
  307. package/dist/tests/config/constants.test.js.map +1 -0
  308. package/dist/tests/config/loader.test.d.ts +2 -0
  309. package/dist/tests/config/loader.test.d.ts.map +1 -0
  310. package/dist/tests/config/loader.test.js +716 -0
  311. package/dist/tests/config/loader.test.js.map +1 -0
  312. package/dist/tests/config/resolver.test.d.ts +2 -0
  313. package/dist/tests/config/resolver.test.d.ts.map +1 -0
  314. package/dist/tests/config/resolver.test.js +402 -0
  315. package/dist/tests/config/resolver.test.js.map +1 -0
  316. package/dist/tests/config/types.test.d.ts +2 -0
  317. package/dist/tests/config/types.test.d.ts.map +1 -0
  318. package/dist/tests/config/types.test.js +460 -0
  319. package/dist/tests/config/types.test.js.map +1 -0
  320. package/dist/tests/context-packs.test.d.ts +2 -0
  321. package/dist/tests/context-packs.test.d.ts.map +1 -0
  322. package/dist/tests/context-packs.test.js +826 -0
  323. package/dist/tests/context-packs.test.js.map +1 -0
  324. package/dist/tests/conversational-synthesizer.test.d.ts +2 -0
  325. package/dist/tests/conversational-synthesizer.test.d.ts.map +1 -0
  326. package/dist/tests/conversational-synthesizer.test.js +595 -0
  327. package/dist/tests/conversational-synthesizer.test.js.map +1 -0
  328. package/dist/tests/database.test.d.ts +2 -0
  329. package/dist/tests/database.test.d.ts.map +1 -0
  330. package/dist/tests/database.test.js +965 -0
  331. package/dist/tests/database.test.js.map +1 -0
  332. package/dist/tests/encrypted-chunks.test.d.ts +2 -0
  333. package/dist/tests/encrypted-chunks.test.d.ts.map +1 -0
  334. package/dist/tests/encrypted-chunks.test.js +1470 -0
  335. package/dist/tests/encrypted-chunks.test.js.map +1 -0
  336. package/dist/tests/hybrid.test.d.ts +2 -0
  337. package/dist/tests/hybrid.test.d.ts.map +1 -0
  338. package/dist/tests/hybrid.test.js +456 -0
  339. package/dist/tests/hybrid.test.js.map +1 -0
  340. package/dist/tests/indexer/ChangeQueue.test.d.ts +12 -0
  341. package/dist/tests/indexer/ChangeQueue.test.d.ts.map +1 -0
  342. package/dist/tests/indexer/ChangeQueue.test.js +441 -0
  343. package/dist/tests/indexer/ChangeQueue.test.js.map +1 -0
  344. package/dist/tests/indexer/ProviderManager.test.d.ts +12 -0
  345. package/dist/tests/indexer/ProviderManager.test.d.ts.map +1 -0
  346. package/dist/tests/indexer/ProviderManager.test.js +290 -0
  347. package/dist/tests/indexer/ProviderManager.test.js.map +1 -0
  348. package/dist/tests/indexer/WatchService.test.d.ts +14 -0
  349. package/dist/tests/indexer/WatchService.test.d.ts.map +1 -0
  350. package/dist/tests/indexer/WatchService.test.js +667 -0
  351. package/dist/tests/indexer/WatchService.test.js.map +1 -0
  352. package/dist/tests/indexer/merkle.test.d.ts +11 -0
  353. package/dist/tests/indexer/merkle.test.d.ts.map +1 -0
  354. package/dist/tests/indexer/merkle.test.js +497 -0
  355. package/dist/tests/indexer/merkle.test.js.map +1 -0
  356. package/dist/tests/indexer/update.test.d.ts +10 -0
  357. package/dist/tests/indexer/update.test.d.ts.map +1 -0
  358. package/dist/tests/indexer/update.test.js +317 -0
  359. package/dist/tests/indexer/update.test.js.map +1 -0
  360. package/dist/tests/indexer/watch.test.d.ts +8 -0
  361. package/dist/tests/indexer/watch.test.d.ts.map +1 -0
  362. package/dist/tests/indexer/watch.test.js +95 -0
  363. package/dist/tests/indexer/watch.test.js.map +1 -0
  364. package/dist/tests/integration/index-search.integration.test.js +6 -4
  365. package/dist/tests/integration/index-search.integration.test.js.map +1 -1
  366. package/dist/tests/languages.test.d.ts +2 -0
  367. package/dist/tests/languages.test.d.ts.map +1 -0
  368. package/dist/tests/languages.test.js +575 -0
  369. package/dist/tests/languages.test.js.map +1 -0
  370. package/dist/tests/logger-redaction.test.d.ts +2 -0
  371. package/dist/tests/logger-redaction.test.d.ts.map +1 -0
  372. package/dist/tests/logger-redaction.test.js +48 -0
  373. package/dist/tests/logger-redaction.test.js.map +1 -0
  374. package/dist/tests/logger.test.d.ts +2 -0
  375. package/dist/tests/logger.test.d.ts.map +1 -0
  376. package/dist/tests/logger.test.js +468 -0
  377. package/dist/tests/logger.test.js.map +1 -0
  378. package/dist/tests/markdown-formatter.test.d.ts +2 -0
  379. package/dist/tests/markdown-formatter.test.d.ts.map +1 -0
  380. package/dist/tests/markdown-formatter.test.js +453 -0
  381. package/dist/tests/markdown-formatter.test.js.map +1 -0
  382. package/dist/tests/mcp/tools/use-context-pack.test.d.ts +7 -0
  383. package/dist/tests/mcp/tools/use-context-pack.test.d.ts.map +1 -0
  384. package/dist/tests/mcp/tools/use-context-pack.test.js +505 -0
  385. package/dist/tests/mcp/tools/use-context-pack.test.js.map +1 -0
  386. package/dist/tests/mutex.test.d.ts +2 -0
  387. package/dist/tests/mutex.test.d.ts.map +1 -0
  388. package/dist/tests/mutex.test.js +489 -0
  389. package/dist/tests/mutex.test.js.map +1 -0
  390. package/dist/tests/path-helpers.test.d.ts +2 -0
  391. package/dist/tests/path-helpers.test.d.ts.map +1 -0
  392. package/dist/tests/path-helpers.test.js +332 -0
  393. package/dist/tests/path-helpers.test.js.map +1 -0
  394. package/dist/tests/prompt-builder.test.d.ts +2 -0
  395. package/dist/tests/prompt-builder.test.d.ts.map +1 -0
  396. package/dist/tests/prompt-builder.test.js +417 -0
  397. package/dist/tests/prompt-builder.test.js.map +1 -0
  398. package/dist/tests/providers/base.test.d.ts +2 -0
  399. package/dist/tests/providers/base.test.d.ts.map +1 -0
  400. package/dist/tests/providers/base.test.js +299 -0
  401. package/dist/tests/providers/base.test.js.map +1 -0
  402. package/dist/tests/providers/chat-llm.test.d.ts +2 -0
  403. package/dist/tests/providers/chat-llm.test.d.ts.map +1 -0
  404. package/dist/tests/providers/chat-llm.test.js +435 -0
  405. package/dist/tests/providers/chat-llm.test.js.map +1 -0
  406. package/dist/tests/providers/index.test.d.ts +2 -0
  407. package/dist/tests/providers/index.test.d.ts.map +1 -0
  408. package/dist/tests/providers/index.test.js +204 -0
  409. package/dist/tests/providers/index.test.js.map +1 -0
  410. package/dist/tests/providers/mock.test.d.ts +2 -0
  411. package/dist/tests/providers/mock.test.d.ts.map +1 -0
  412. package/dist/tests/providers/mock.test.js +225 -0
  413. package/dist/tests/providers/mock.test.js.map +1 -0
  414. package/dist/tests/providers/openai.test.d.ts +2 -0
  415. package/dist/tests/providers/openai.test.d.ts.map +1 -0
  416. package/dist/tests/providers/openai.test.js +408 -0
  417. package/dist/tests/providers/openai.test.js.map +1 -0
  418. package/dist/tests/providers/token-counter.test.d.ts +2 -0
  419. package/dist/tests/providers/token-counter.test.d.ts.map +1 -0
  420. package/dist/tests/providers/token-counter.test.js +247 -0
  421. package/dist/tests/providers/token-counter.test.js.map +1 -0
  422. package/dist/tests/rate-limiter.test.js +392 -1
  423. package/dist/tests/rate-limiter.test.js.map +1 -1
  424. package/dist/tests/scope.test.d.ts +2 -0
  425. package/dist/tests/scope.test.d.ts.map +1 -0
  426. package/dist/tests/scope.test.js +529 -0
  427. package/dist/tests/scope.test.js.map +1 -0
  428. package/dist/tests/search-normalization.test.js.map +1 -1
  429. package/dist/tests/semantic-chunker.test.js.map +1 -1
  430. package/dist/tests/simple-lru.test.js +377 -0
  431. package/dist/tests/simple-lru.test.js.map +1 -1
  432. package/dist/tests/symbol-boost.test.js +730 -10
  433. package/dist/tests/symbol-boost.test.js.map +1 -1
  434. package/dist/tests/symbols-extract.test.d.ts +2 -0
  435. package/dist/tests/symbols-extract.test.d.ts.map +1 -0
  436. package/dist/tests/symbols-extract.test.js +536 -0
  437. package/dist/tests/symbols-extract.test.js.map +1 -0
  438. package/dist/tests/symbols-graph.test.d.ts +2 -0
  439. package/dist/tests/symbols-graph.test.d.ts.map +1 -0
  440. package/dist/tests/symbols-graph.test.js +656 -0
  441. package/dist/tests/symbols-graph.test.js.map +1 -0
  442. package/dist/tests/synthesizer.test.d.ts +2 -0
  443. package/dist/tests/synthesizer.test.d.ts.map +1 -0
  444. package/dist/tests/synthesizer.test.js +381 -0
  445. package/dist/tests/synthesizer.test.js.map +1 -0
  446. package/dist/types/codemap.d.ts +2 -2
  447. package/dist/types/codemap.d.ts.map +1 -1
  448. package/dist/types/codemap.js +17 -9
  449. package/dist/types/codemap.js.map +1 -1
  450. package/dist/types/context-pack.d.ts +5 -5
  451. package/dist/types/context-pack.d.ts.map +1 -1
  452. package/dist/types/context-pack.js +6 -3
  453. package/dist/types/context-pack.js.map +1 -1
  454. package/dist/utils/cli-ui.d.ts +1 -1
  455. package/dist/utils/cli-ui.d.ts.map +1 -1
  456. package/dist/utils/cli-ui.js +26 -26
  457. package/dist/utils/cli-ui.js.map +1 -1
  458. package/dist/utils/indexer-with-progress.d.ts.map +1 -1
  459. package/dist/utils/indexer-with-progress.js +0 -6
  460. package/dist/utils/indexer-with-progress.js.map +1 -1
  461. package/dist/utils/logger.d.ts +10 -1
  462. package/dist/utils/logger.d.ts.map +1 -1
  463. package/dist/utils/logger.js +158 -6
  464. package/dist/utils/logger.js.map +1 -1
  465. package/dist/utils/mutex.d.ts +7 -2
  466. package/dist/utils/mutex.d.ts.map +1 -1
  467. package/dist/utils/mutex.js +35 -7
  468. package/dist/utils/mutex.js.map +1 -1
  469. package/dist/utils/path-helpers.d.ts.map +1 -1
  470. package/dist/utils/path-helpers.js +5 -2
  471. package/dist/utils/path-helpers.js.map +1 -1
  472. package/dist/utils/rate-limiter.d.ts.map +1 -1
  473. package/dist/utils/rate-limiter.js +23 -4
  474. package/dist/utils/rate-limiter.js.map +1 -1
  475. package/dist/utils/simple-lru.d.ts +6 -0
  476. package/dist/utils/simple-lru.d.ts.map +1 -1
  477. package/dist/utils/simple-lru.js +26 -0
  478. package/dist/utils/simple-lru.js.map +1 -1
  479. package/package.json +1 -1
@@ -0,0 +1,509 @@
1
+ import test from 'node:test';
2
+ import assert from 'node:assert/strict';
3
+ import { findSemanticSubdivisions, findLastCompleteBoundary, extractSignature, extractLinesBeforeNode, extractParentContext, getLineNumber, analyzeNodeForChunking, batchAnalyzeNodes, yieldStatementChunks } from '../../chunking/semantic-chunker.js';
4
+ function makeNode(type, children = [], startIndex = 0, endIndex = 0) {
5
+ return {
6
+ type,
7
+ startIndex,
8
+ endIndex,
9
+ childCount: children.length,
10
+ child: (idx) => children[idx] ?? null
11
+ };
12
+ }
13
+ // Base profile without token counting (character-based)
14
+ const charProfile = {
15
+ maxTokens: 1000,
16
+ optimalTokens: 500,
17
+ minChunkTokens: 50,
18
+ maxChunkTokens: 800,
19
+ overlapTokens: 100,
20
+ optimalChars: 2000,
21
+ minChunkChars: 100,
22
+ maxChunkChars: 1600,
23
+ overlapChars: 200,
24
+ dimensions: 1536,
25
+ useTokens: false,
26
+ tokenizerType: 'estimate'
27
+ };
28
+ // Profile with token counting
29
+ const tokenProfile = {
30
+ ...charProfile,
31
+ useTokens: true,
32
+ tokenCounter: (text) => Math.ceil(text.length / 4) // 4 chars per token
33
+ };
34
+ // -------------------------------------------------------------------
35
+ // Tests for findSemanticSubdivisions
36
+ // -------------------------------------------------------------------
37
+ test('findSemanticSubdivisions returns empty array for null node', () => {
38
+ const rule = { subdivisionTypes: { class: ['method'] } };
39
+ const subs = findSemanticSubdivisions(null, rule);
40
+ assert.deepEqual(subs, []);
41
+ });
42
+ test('findSemanticSubdivisions returns empty array for null rule', () => {
43
+ const node = makeNode('class');
44
+ const subs = findSemanticSubdivisions(node, null);
45
+ assert.deepEqual(subs, []);
46
+ });
47
+ test('findSemanticSubdivisions returns empty when no subdivisionTypes defined', () => {
48
+ const child = makeNode('method');
49
+ const parent = makeNode('class', [child]);
50
+ const rule = {};
51
+ const subs = findSemanticSubdivisions(parent, rule);
52
+ assert.deepEqual(subs, []);
53
+ });
54
+ test('findSemanticSubdivisions returns empty when node type not in subdivisionTypes', () => {
55
+ const child = makeNode('method');
56
+ const parent = makeNode('interface', [child]);
57
+ const rule = { subdivisionTypes: { class: ['method'] } };
58
+ const subs = findSemanticSubdivisions(parent, rule);
59
+ assert.deepEqual(subs, []);
60
+ });
61
+ test('findSemanticSubdivisions finds direct children matching subdivision types', () => {
62
+ const method1 = makeNode('method');
63
+ const method2 = makeNode('method');
64
+ const parent = makeNode('class', [method1, method2]);
65
+ const rule = { subdivisionTypes: { class: ['method'] } };
66
+ const subs = findSemanticSubdivisions(parent, rule);
67
+ assert.equal(subs.length, 2);
68
+ assert.equal(subs[0], method1);
69
+ assert.equal(subs[1], method2);
70
+ });
71
+ test('findSemanticSubdivisions finds nested subdivision candidates', () => {
72
+ const method = makeNode('method');
73
+ const body = makeNode('class_body', [method]);
74
+ const parent = makeNode('class', [body]);
75
+ const rule = { subdivisionTypes: { class: ['method'] } };
76
+ const subs = findSemanticSubdivisions(parent, rule);
77
+ assert.equal(subs.length, 1);
78
+ assert.equal(subs[0], method);
79
+ });
80
+ test('findSemanticSubdivisions does not include root node itself', () => {
81
+ const root = makeNode('method');
82
+ const rule = { subdivisionTypes: { method: ['method'] } };
83
+ const subs = findSemanticSubdivisions(root, rule);
84
+ assert.equal(subs.length, 0);
85
+ });
86
+ test('findSemanticSubdivisions stops recursion when match found', () => {
87
+ const innerMethod = makeNode('method');
88
+ const outerMethod = makeNode('method', [innerMethod]);
89
+ const parent = makeNode('class', [outerMethod]);
90
+ const rule = { subdivisionTypes: { class: ['method'] } };
91
+ const subs = findSemanticSubdivisions(parent, rule);
92
+ // Should only find outerMethod, not recurse into it
93
+ assert.equal(subs.length, 1);
94
+ assert.equal(subs[0], outerMethod);
95
+ });
96
+ test('findSemanticSubdivisions handles multiple subdivision types', () => {
97
+ const method = makeNode('method_definition');
98
+ const field = makeNode('field_declaration');
99
+ const parent = makeNode('class_declaration', [method, field]);
100
+ const rule = { subdivisionTypes: { class_declaration: ['method_definition', 'field_declaration'] } };
101
+ const subs = findSemanticSubdivisions(parent, rule);
102
+ assert.equal(subs.length, 2);
103
+ });
104
+ // -------------------------------------------------------------------
105
+ // Tests for findLastCompleteBoundary
106
+ // -------------------------------------------------------------------
107
+ test('findLastCompleteBoundary finds closing brace boundary', () => {
108
+ const code = 'function foo() {\n return 1;\n}\nfunction bar() {';
109
+ const result = findLastCompleteBoundary(code, 40);
110
+ // Should find the } followed by newline
111
+ assert.ok(result > 0);
112
+ assert.ok(result <= 40);
113
+ assert.ok(code.substring(0, result).trim().endsWith('}'));
114
+ });
115
+ test('findLastCompleteBoundary finds semicolon boundary', () => {
116
+ const code = 'const a = 1;\nconst b = 2;\nconst c = 3';
117
+ const result = findLastCompleteBoundary(code, 25);
118
+ // Should find semicolon boundary
119
+ assert.ok(result > 0);
120
+ assert.ok(result <= 25);
121
+ });
122
+ test('findLastCompleteBoundary finds newline boundary as fallback', () => {
123
+ const code = 'line1\nline2\nline3';
124
+ const result = findLastCompleteBoundary(code, 10);
125
+ // Should find newline
126
+ assert.ok(result > 0);
127
+ assert.ok(result <= 10);
128
+ });
129
+ test('findLastCompleteBoundary returns maxSize when no boundary found', () => {
130
+ const code = 'abcdefghijklmnopqrstuvwxyz';
131
+ const result = findLastCompleteBoundary(code, 10);
132
+ assert.equal(result, 10);
133
+ });
134
+ test('findLastCompleteBoundary handles empty code', () => {
135
+ const result = findLastCompleteBoundary('', 10);
136
+ assert.equal(result, 10);
137
+ });
138
+ test('findLastCompleteBoundary handles code shorter than maxSize', () => {
139
+ const code = 'const a = 1;';
140
+ const result = findLastCompleteBoundary(code, 100);
141
+ // Should find the semicolon
142
+ assert.ok(result <= code.length);
143
+ });
144
+ // -------------------------------------------------------------------
145
+ // Tests for extractSignature
146
+ // -------------------------------------------------------------------
147
+ test('extractSignature extracts function signature before brace', () => {
148
+ const source = 'function calculate(a, b) {\n return a + b;\n}';
149
+ const node = makeNode('function', [], 0, source.length);
150
+ const sig = extractSignature(node, source);
151
+ assert.equal(sig, 'function calculate(a, b) {');
152
+ });
153
+ test('extractSignature handles class signature', () => {
154
+ const source = 'class MyClass extends Base {\n constructor() {}\n}';
155
+ const node = makeNode('class', [], 0, source.length);
156
+ const sig = extractSignature(node, source);
157
+ assert.equal(sig, 'class MyClass extends Base {');
158
+ });
159
+ test('extractSignature returns first line when no brace found', () => {
160
+ const source = 'const value = 42\nconst other = 43';
161
+ const node = makeNode('declaration', [], 0, 16);
162
+ const sig = extractSignature(node, source);
163
+ assert.equal(sig, 'const value = 42');
164
+ });
165
+ test('extractSignature handles arrow functions', () => {
166
+ const source = 'const fn = (x) => {\n return x * 2;\n}';
167
+ const node = makeNode('arrow_function', [], 0, source.length);
168
+ const sig = extractSignature(node, source);
169
+ assert.equal(sig, 'const fn = (x) => {');
170
+ });
171
+ test('extractSignature handles single-line code', () => {
172
+ const source = 'const x = 1;';
173
+ const node = makeNode('declaration', [], 0, source.length);
174
+ const sig = extractSignature(node, source);
175
+ assert.equal(sig, 'const x = 1;');
176
+ });
177
+ // -------------------------------------------------------------------
178
+ // Tests for extractLinesBeforeNode
179
+ // -------------------------------------------------------------------
180
+ test('extractLinesBeforeNode returns specified number of lines', () => {
181
+ const source = 'line1\nline2\nline3\nline4\nfunction start()';
182
+ // Node starts at position after 'line1\nline2\nline3\nline4\n' (24 chars)
183
+ const node = makeNode('function', [], 24, source.length);
184
+ const lines = extractLinesBeforeNode(node, source, 2);
185
+ // The function takes 'line1\nline2\nline3\nline4\n' (before the node)
186
+ // splits by \n = ['line1', 'line2', 'line3', 'line4', ''] (note empty string after last \n)
187
+ // takes last 2: ['line4', '']
188
+ // joins with \n: 'line4\n' + '' = 'line4\n'
189
+ // Wait, this isn't right. Let me recalculate:
190
+ // Before node (index 24): 'line1\nline2\nline3\nline4\n'
191
+ // Split by \n: ['line1', 'line2', 'line3', 'line4', '']
192
+ // Slice(-2): ['line4', '']
193
+ // Join with \n: 'line4\n'
194
+ assert.equal(lines, 'line4\n');
195
+ });
196
+ test('extractLinesBeforeNode handles fewer lines than requested', () => {
197
+ const source = 'line1\nfunction start()';
198
+ // Node at index 6 (after 'line1\n')
199
+ const node = makeNode('function', [], 6, source.length);
200
+ const lines = extractLinesBeforeNode(node, source, 5);
201
+ // Before node: 'line1\n'
202
+ // Split: ['line1', '']
203
+ // Slice(-5): ['line1', '']
204
+ // Join: 'line1\n'
205
+ assert.equal(lines, 'line1\n');
206
+ });
207
+ test('extractLinesBeforeNode handles node at start', () => {
208
+ const source = 'function start() {}';
209
+ const node = makeNode('function', [], 0, source.length);
210
+ const lines = extractLinesBeforeNode(node, source, 2);
211
+ assert.equal(lines, '');
212
+ });
213
+ test('extractLinesBeforeNode handles empty source', () => {
214
+ const node = makeNode('function', [], 0, 0);
215
+ const lines = extractLinesBeforeNode(node, '', 2);
216
+ assert.equal(lines, '');
217
+ });
218
+ // -------------------------------------------------------------------
219
+ // Tests for getLineNumber
220
+ // -------------------------------------------------------------------
221
+ test('getLineNumber returns 1 for offset 0', () => {
222
+ const source = 'line1\nline2\nline3';
223
+ assert.equal(getLineNumber(0, source), 1);
224
+ });
225
+ test('getLineNumber returns correct line for middle of file', () => {
226
+ const source = 'line1\nline2\nline3';
227
+ // 'line1\n' is 6 chars, so offset 6 is start of line 2
228
+ assert.equal(getLineNumber(6, source), 2);
229
+ });
230
+ test('getLineNumber returns correct line for end of file', () => {
231
+ const source = 'line1\nline2\nline3';
232
+ assert.equal(getLineNumber(source.length, source), 3);
233
+ });
234
+ test('getLineNumber handles empty source', () => {
235
+ assert.equal(getLineNumber(0, ''), 1);
236
+ });
237
+ test('getLineNumber handles single line', () => {
238
+ const source = 'single line content';
239
+ assert.equal(getLineNumber(10, source), 1);
240
+ });
241
+ // -------------------------------------------------------------------
242
+ // Tests for extractParentContext
243
+ // -------------------------------------------------------------------
244
+ test('extractParentContext returns signature and line numbers', () => {
245
+ const source = 'function foo() {\n return 1;\n}';
246
+ const node = makeNode('function', [], 0, source.length);
247
+ const ctx = extractParentContext(node, source);
248
+ assert.equal(ctx.signature, 'function foo() {');
249
+ assert.equal(ctx.startLine, 1);
250
+ assert.equal(ctx.endLine, 3);
251
+ });
252
+ test('extractParentContext handles multi-line class', () => {
253
+ const source = 'class MyClass {\n method1() {}\n method2() {}\n}';
254
+ const node = makeNode('class', [], 0, source.length);
255
+ const ctx = extractParentContext(node, source);
256
+ assert.equal(ctx.signature, 'class MyClass {');
257
+ assert.equal(ctx.startLine, 1);
258
+ assert.equal(ctx.endLine, 4);
259
+ });
260
+ // -------------------------------------------------------------------
261
+ // Tests for analyzeNodeForChunking
262
+ // -------------------------------------------------------------------
263
+ test('analyzeNodeForChunking identifies small node as single chunk', async () => {
264
+ const source = 'const x = 1;';
265
+ const node = makeNode('declaration', [], 0, source.length);
266
+ const rule = {};
267
+ const analysis = await analyzeNodeForChunking(node, source, rule, charProfile);
268
+ assert.equal(analysis.isSingleChunk, true);
269
+ assert.equal(analysis.needsSubdivision, false);
270
+ assert.equal(analysis.size, source.length);
271
+ assert.equal(analysis.unit, 'characters');
272
+ assert.equal(analysis.method, 'chars');
273
+ });
274
+ test('analyzeNodeForChunking identifies large node needing subdivision', async () => {
275
+ // Create source larger than maxChunkChars (1600)
276
+ const source = 'x'.repeat(2000);
277
+ const node = makeNode('class', [], 0, source.length);
278
+ const rule = { subdivisionTypes: { class: ['method'] } };
279
+ const analysis = await analyzeNodeForChunking(node, source, rule, charProfile);
280
+ assert.equal(analysis.isSingleChunk, false);
281
+ assert.equal(analysis.needsSubdivision, true);
282
+ assert.equal(analysis.size, 2000);
283
+ });
284
+ test('analyzeNodeForChunking uses token counter when available', async () => {
285
+ const source = 'const variable = "test value";'; // 30 chars = ~7.5 tokens
286
+ const node = makeNode('declaration', [], 0, source.length);
287
+ const analysis = await analyzeNodeForChunking(node, source, {}, tokenProfile);
288
+ assert.equal(analysis.method, 'tokenized');
289
+ assert.equal(analysis.unit, 'tokens');
290
+ // Token count should be ceil(30/4) = 8
291
+ assert.equal(analysis.size, 8);
292
+ });
293
+ test('analyzeNodeForChunking returns subdivision candidates', async () => {
294
+ const method1 = makeNode('method');
295
+ const method2 = makeNode('method');
296
+ const source = 'class Test {\n method1() {}\n method2() {}\n}';
297
+ const classNode = makeNode('class_declaration', [method1, method2], 0, source.length);
298
+ const rule = { subdivisionTypes: { class_declaration: ['method'] } };
299
+ const analysis = await analyzeNodeForChunking(classNode, source, rule, charProfile);
300
+ assert.equal(analysis.subdivisionCandidates.length, 2);
301
+ });
302
+ test('analyzeNodeForChunking calculates estimated subchunks', async () => {
303
+ // 4000 chars with optimal of 2000 = 2 subchunks
304
+ const source = 'x'.repeat(4000);
305
+ const node = makeNode('class', [], 0, source.length);
306
+ const analysis = await analyzeNodeForChunking(node, source, {}, charProfile);
307
+ assert.equal(analysis.estimatedSubchunks, 2);
308
+ });
309
+ // -------------------------------------------------------------------
310
+ // Tests for batchAnalyzeNodes
311
+ // -------------------------------------------------------------------
312
+ test('batchAnalyzeNodes analyzes multiple nodes', async () => {
313
+ const source = 'function a() {}\nfunction b() {}\nfunction c() {}';
314
+ const nodes = [
315
+ makeNode('function', [], 0, 15),
316
+ makeNode('function', [], 16, 31),
317
+ makeNode('function', [], 32, 47)
318
+ ];
319
+ const results = await batchAnalyzeNodes(nodes, source, {}, charProfile);
320
+ assert.equal(results.length, 3);
321
+ results.forEach((result) => {
322
+ assert.ok('node' in result);
323
+ assert.ok('size' in result);
324
+ assert.ok('isSingleChunk' in result);
325
+ });
326
+ });
327
+ test('batchAnalyzeNodes uses token counter when available', async () => {
328
+ const source = 'const a = 1;\nconst b = 2;';
329
+ const nodes = [
330
+ makeNode('declaration', [], 0, 12),
331
+ makeNode('declaration', [], 13, 25)
332
+ ];
333
+ let tokenCounterCalls = 0;
334
+ const countingProfile = {
335
+ ...tokenProfile,
336
+ tokenCounter: (text) => {
337
+ tokenCounterCalls++;
338
+ return Math.ceil(text.length / 4);
339
+ }
340
+ };
341
+ const results = await batchAnalyzeNodes(nodes, source, {}, countingProfile);
342
+ assert.equal(results.length, 2);
343
+ assert.ok(tokenCounterCalls > 0);
344
+ });
345
+ test('batchAnalyzeNodes handles empty node array', async () => {
346
+ const results = await batchAnalyzeNodes([], 'some source', {}, charProfile);
347
+ assert.deepEqual(results, []);
348
+ });
349
+ test('batchAnalyzeNodes finds subdivisions for each node', async () => {
350
+ const method1 = makeNode('method');
351
+ const method2 = makeNode('method');
352
+ const source = 'class A { m1() {} }\nclass B { m2() {} }';
353
+ const classA = makeNode('class', [method1], 0, 19);
354
+ const classB = makeNode('class', [method2], 20, 39);
355
+ const rule = { subdivisionTypes: { class: ['method'] } };
356
+ const results = await batchAnalyzeNodes([classA, classB], source, rule, charProfile);
357
+ assert.equal(results[0].subdivisionCandidates.length, 1);
358
+ assert.equal(results[1].subdivisionCandidates.length, 1);
359
+ });
360
+ test('batchAnalyzeNodes respects isSubdivision parameter', async () => {
361
+ const source = 'const x = 1;';
362
+ const nodes = [makeNode('declaration', [], 0, 12)];
363
+ // Test with isSubdivision = true
364
+ const results = await batchAnalyzeNodes(nodes, source, {}, tokenProfile, true);
365
+ assert.equal(results.length, 1);
366
+ });
367
+ // -------------------------------------------------------------------
368
+ // Tests for yieldStatementChunks
369
+ // -------------------------------------------------------------------
370
+ test('yieldStatementChunks splits large code into chunks', async () => {
371
+ const lines = Array.from({ length: 20 }, (_, i) => `line${i + 1}: const x = ${i};`);
372
+ const source = lines.join('\n');
373
+ const node = makeNode('function', [], 0, source.length);
374
+ const chunks = await yieldStatementChunks(node, source, 100, // maxSize in characters
375
+ 20, // overlapSize
376
+ charProfile);
377
+ assert.ok(chunks.length > 1);
378
+ chunks.forEach((chunk) => {
379
+ assert.ok(chunk.code.length > 0);
380
+ assert.ok(chunk.size > 0);
381
+ assert.equal(chunk.unit, 'characters');
382
+ });
383
+ });
384
+ test('yieldStatementChunks maintains 20% minimum overlap', async () => {
385
+ const lines = Array.from({ length: 50 }, (_, i) => `line${i + 1}`);
386
+ const source = lines.join('\n');
387
+ const node = makeNode('function', [], 0, source.length);
388
+ const chunks = await yieldStatementChunks(node, source, 100, 10, charProfile);
389
+ // Verify overlap exists between consecutive chunks
390
+ for (let i = 0; i < chunks.length - 1; i++) {
391
+ const currentLines = chunks[i].code.split('\n');
392
+ const nextLines = chunks[i + 1].code.split('\n');
393
+ // Last line of current should appear in next chunk
394
+ const lastLine = currentLines[currentLines.length - 1];
395
+ const foundOverlap = nextLines.some((line) => line === lastLine);
396
+ assert.ok(foundOverlap, `Expected overlap between chunk ${i} and ${i + 1}`);
397
+ }
398
+ });
399
+ test('yieldStatementChunks uses token counter when profile has it', async () => {
400
+ const source = 'line1\nline2\nline3\nline4\nline5';
401
+ const node = makeNode('function', [], 0, source.length);
402
+ let tokenCounterCalls = 0;
403
+ const profile = {
404
+ ...tokenProfile,
405
+ tokenCounter: (text) => {
406
+ tokenCounterCalls++;
407
+ return text.length; // 1:1 mapping for test
408
+ }
409
+ };
410
+ await yieldStatementChunks(node, source, 10, 2, profile);
411
+ // Should call token counter once per line
412
+ assert.equal(tokenCounterCalls, 5);
413
+ });
414
+ test('yieldStatementChunks handles single line code', async () => {
415
+ const source = 'const x = 1;';
416
+ const node = makeNode('declaration', [], 0, source.length);
417
+ const chunks = await yieldStatementChunks(node, source, 100, 10, charProfile);
418
+ assert.equal(chunks.length, 1);
419
+ assert.equal(chunks[0].code, source);
420
+ });
421
+ test('yieldStatementChunks handles empty code', async () => {
422
+ const node = makeNode('empty', [], 0, 0);
423
+ const chunks = await yieldStatementChunks(node, '', 100, 10, charProfile);
424
+ // Empty input still produces one chunk with empty content
425
+ assert.equal(chunks.length, 1);
426
+ assert.equal(chunks[0].code, '');
427
+ });
428
+ test('yieldStatementChunks reports correct unit for tokens', async () => {
429
+ const source = 'line1\nline2\nline3';
430
+ const node = makeNode('function', [], 0, source.length);
431
+ const chunks = await yieldStatementChunks(node, source, 20, 4, tokenProfile);
432
+ chunks.forEach((chunk) => {
433
+ assert.equal(chunk.unit, 'tokens');
434
+ });
435
+ });
436
+ test('yieldStatementChunks respects maxSize limit', async () => {
437
+ const lines = Array.from({ length: 100 }, () => 'x'.repeat(10));
438
+ const source = lines.join('\n');
439
+ const node = makeNode('function', [], 0, source.length);
440
+ const maxSize = 50;
441
+ const chunks = await yieldStatementChunks(node, source, maxSize, 10, charProfile);
442
+ // First chunk should respect maxSize, allowing some flexibility due to line-based splitting
443
+ chunks.slice(0, -1).forEach((chunk, i) => {
444
+ // Allow some slack for line-based chunking
445
+ assert.ok(chunk.size <= maxSize + 20, `Chunk ${i} exceeds maxSize: ${chunk.size} > ${maxSize + 20}`);
446
+ });
447
+ });
448
+ test('yieldStatementChunks handles very long lines', async () => {
449
+ const longLine = 'x'.repeat(500);
450
+ const source = `${longLine}\nshort\n${longLine}`;
451
+ const node = makeNode('function', [], 0, source.length);
452
+ const chunks = await yieldStatementChunks(node, source, 100, 20, charProfile);
453
+ // Should still produce chunks, even if individual lines exceed maxSize
454
+ assert.ok(chunks.length >= 1);
455
+ });
456
+ test('yieldStatementChunks with async token counter', async () => {
457
+ const source = 'line1\nline2\nline3';
458
+ const node = makeNode('function', [], 0, source.length);
459
+ const asyncProfile = {
460
+ ...tokenProfile,
461
+ tokenCounter: async (text) => {
462
+ // Simulate async operation
463
+ await new Promise((resolve) => setTimeout(resolve, 1));
464
+ return text.length;
465
+ }
466
+ };
467
+ const chunks = await yieldStatementChunks(node, source, 20, 4, asyncProfile);
468
+ assert.ok(chunks.length >= 1);
469
+ assert.equal(chunks[0].unit, 'tokens');
470
+ });
471
+ // -------------------------------------------------------------------
472
+ // Edge case tests
473
+ // -------------------------------------------------------------------
474
+ test('handles node with very small code', async () => {
475
+ const source = 'x';
476
+ const node = makeNode('identifier', [], 0, 1);
477
+ const analysis = await analyzeNodeForChunking(node, source, {}, charProfile);
478
+ assert.equal(analysis.isSingleChunk, true);
479
+ assert.equal(analysis.size, 1);
480
+ });
481
+ test('handles deeply nested subdivisions', () => {
482
+ const innermost = makeNode('method');
483
+ const inner = makeNode('class_body', [innermost]);
484
+ const outer = makeNode('class_body', [inner]);
485
+ const root = makeNode('class', [outer]);
486
+ const rule = { subdivisionTypes: { class: ['method'] } };
487
+ const subs = findSemanticSubdivisions(root, rule);
488
+ assert.equal(subs.length, 1);
489
+ assert.equal(subs[0], innermost);
490
+ });
491
+ test('handles code with special characters', async () => {
492
+ const source = 'const emoji = "\\uD83D\\uDE00";\nconst special = "<>&";';
493
+ const node = makeNode('declarations', [], 0, source.length);
494
+ const analysis = await analyzeNodeForChunking(node, source, {}, charProfile);
495
+ assert.equal(analysis.size, source.length);
496
+ });
497
+ test('handles code with Windows line endings', async () => {
498
+ const source = 'line1\r\nline2\r\nline3';
499
+ const node = makeNode('function', [], 0, source.length);
500
+ const chunks = await yieldStatementChunks(node, source, 20, 5, charProfile);
501
+ assert.ok(chunks.length >= 1);
502
+ });
503
+ test('handles mixed indentation', async () => {
504
+ const source = ' line1\n\t\tline2\n line3';
505
+ const node = makeNode('function', [], 0, source.length);
506
+ const chunks = await yieldStatementChunks(node, source, 30, 5, charProfile);
507
+ assert.ok(chunks.length >= 1);
508
+ });
509
+ //# sourceMappingURL=semantic-chunker.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"semantic-chunker.test.js","sourceRoot":"","sources":["../../../src/tests/chunking/semantic-chunker.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=token-counter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-counter.test.d.ts","sourceRoot":"","sources":["../../../src/tests/chunking/token-counter.test.ts"],"names":[],"mappings":""}