codesift-mcp 0.15.3 → 0.17.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 (401) hide show
  1. package/dist/cli/auto-prune.d.ts +16 -0
  2. package/dist/cli/auto-prune.d.ts.map +1 -0
  3. package/dist/cli/auto-prune.js +87 -0
  4. package/dist/cli/auto-prune.js.map +1 -0
  5. package/dist/cli/commands-admin.d.ts.map +1 -1
  6. package/dist/cli/commands-admin.js +11 -0
  7. package/dist/cli/commands-admin.js.map +1 -1
  8. package/dist/cli/commands-daemon.d.ts.map +1 -1
  9. package/dist/cli/commands-daemon.js +9 -0
  10. package/dist/cli/commands-daemon.js.map +1 -1
  11. package/dist/cli/commands-index.d.ts.map +1 -1
  12. package/dist/cli/commands-index.js +8 -0
  13. package/dist/cli/commands-index.js.map +1 -1
  14. package/dist/cli/embed-child.js +5 -1
  15. package/dist/cli/embed-child.js.map +1 -1
  16. package/dist/cli/help.js +1 -1
  17. package/dist/cli/hooks/pre-tool-use.d.ts.map +1 -1
  18. package/dist/cli/hooks/pre-tool-use.js +11 -5
  19. package/dist/cli/hooks/pre-tool-use.js.map +1 -1
  20. package/dist/cli/hooks/shared.d.ts +1 -1
  21. package/dist/cli/hooks/shared.d.ts.map +1 -1
  22. package/dist/cli/hooks/shared.js +34 -2
  23. package/dist/cli/hooks/shared.js.map +1 -1
  24. package/dist/cli/orphan-guard.d.ts +22 -0
  25. package/dist/cli/orphan-guard.d.ts.map +1 -1
  26. package/dist/cli/orphan-guard.js +30 -0
  27. package/dist/cli/orphan-guard.js.map +1 -1
  28. package/dist/cli/service.d.ts +43 -0
  29. package/dist/cli/service.d.ts.map +1 -1
  30. package/dist/cli/service.js +84 -4
  31. package/dist/cli/service.js.map +1 -1
  32. package/dist/cli/setup/codex-project-auto.d.ts +27 -0
  33. package/dist/cli/setup/codex-project-auto.d.ts.map +1 -0
  34. package/dist/cli/setup/codex-project-auto.js +98 -0
  35. package/dist/cli/setup/codex-project-auto.js.map +1 -0
  36. package/dist/cli/setup/codex.d.ts.map +1 -1
  37. package/dist/cli/setup/codex.js +101 -6
  38. package/dist/cli/setup/codex.js.map +1 -1
  39. package/dist/cli/setup/cursor.d.ts.map +1 -1
  40. package/dist/cli/setup/cursor.js +9 -1
  41. package/dist/cli/setup/cursor.js.map +1 -1
  42. package/dist/cli/setup/gemini.d.ts.map +1 -1
  43. package/dist/cli/setup/gemini.js +21 -0
  44. package/dist/cli/setup/gemini.js.map +1 -1
  45. package/dist/cli/setup/mcp.d.ts +37 -1
  46. package/dist/cli/setup/mcp.d.ts.map +1 -1
  47. package/dist/cli/setup/mcp.js +57 -4
  48. package/dist/cli/setup/mcp.js.map +1 -1
  49. package/dist/cli/setup/types.d.ts +19 -1
  50. package/dist/cli/setup/types.d.ts.map +1 -1
  51. package/dist/config.d.ts.map +1 -1
  52. package/dist/config.js +30 -6
  53. package/dist/config.js.map +1 -1
  54. package/dist/formatters-core.d.ts +2 -0
  55. package/dist/formatters-core.d.ts.map +1 -1
  56. package/dist/formatters-core.js +18 -3
  57. package/dist/formatters-core.js.map +1 -1
  58. package/dist/formatters-shortening.d.ts.map +1 -1
  59. package/dist/formatters-shortening.js +8 -2
  60. package/dist/formatters-shortening.js.map +1 -1
  61. package/dist/instructions.d.ts +17 -0
  62. package/dist/instructions.d.ts.map +1 -1
  63. package/dist/instructions.js +35 -0
  64. package/dist/instructions.js.map +1 -1
  65. package/dist/lsp/lsp-servers.d.ts.map +1 -1
  66. package/dist/lsp/lsp-servers.js +4 -1
  67. package/dist/lsp/lsp-servers.js.map +1 -1
  68. package/dist/parser/parse-cache.d.ts.map +1 -1
  69. package/dist/parser/parse-cache.js +36 -1
  70. package/dist/parser/parse-cache.js.map +1 -1
  71. package/dist/register-tool-groups/analysis.d.ts.map +1 -1
  72. package/dist/register-tool-groups/analysis.js +10 -1
  73. package/dist/register-tool-groups/analysis.js.map +1 -1
  74. package/dist/register-tool-groups/core/index.d.ts.map +1 -1
  75. package/dist/register-tool-groups/core/index.js +26 -3
  76. package/dist/register-tool-groups/core/index.js.map +1 -1
  77. package/dist/register-tool-groups/core/meta.d.ts.map +1 -1
  78. package/dist/register-tool-groups/core/meta.js +23 -1
  79. package/dist/register-tool-groups/core/meta.js.map +1 -1
  80. package/dist/register-tool-groups/core/search.d.ts +15 -0
  81. package/dist/register-tool-groups/core/search.d.ts.map +1 -1
  82. package/dist/register-tool-groups/core/search.js +60 -2
  83. package/dist/register-tool-groups/core/search.js.map +1 -1
  84. package/dist/register-tool-groups/core/symbols.d.ts.map +1 -1
  85. package/dist/register-tool-groups/core/symbols.js +13 -2
  86. package/dist/register-tool-groups/core/symbols.js.map +1 -1
  87. package/dist/register-tool-groups/meta.d.ts.map +1 -1
  88. package/dist/register-tool-groups/meta.js +23 -0
  89. package/dist/register-tool-groups/meta.js.map +1 -1
  90. package/dist/register-tools/discovery.d.ts +22 -5
  91. package/dist/register-tools/discovery.d.ts.map +1 -1
  92. package/dist/register-tools/discovery.js +95 -9
  93. package/dist/register-tools/discovery.js.map +1 -1
  94. package/dist/register-tools/runtime.d.ts +9 -1
  95. package/dist/register-tools/runtime.d.ts.map +1 -1
  96. package/dist/register-tools/runtime.js +19 -2
  97. package/dist/register-tools/runtime.js.map +1 -1
  98. package/dist/register-tools.d.ts +4 -2
  99. package/dist/register-tools.d.ts.map +1 -1
  100. package/dist/register-tools.js +20 -8
  101. package/dist/register-tools.js.map +1 -1
  102. package/dist/search/bm25-store.d.ts +6 -0
  103. package/dist/search/bm25-store.d.ts.map +1 -0
  104. package/dist/search/bm25-store.js +164 -0
  105. package/dist/search/bm25-store.js.map +1 -0
  106. package/dist/search/bm25.d.ts +30 -0
  107. package/dist/search/bm25.d.ts.map +1 -1
  108. package/dist/search/bm25.js +159 -34
  109. package/dist/search/bm25.js.map +1 -1
  110. package/dist/search/embed-gate.d.ts +17 -0
  111. package/dist/search/embed-gate.d.ts.map +1 -0
  112. package/dist/search/embed-gate.js +64 -0
  113. package/dist/search/embed-gate.js.map +1 -0
  114. package/dist/search/semantic.d.ts.map +1 -1
  115. package/dist/search/semantic.js +5 -2
  116. package/dist/search/semantic.js.map +1 -1
  117. package/dist/server-helpers/health-vitals.d.ts +45 -0
  118. package/dist/server-helpers/health-vitals.d.ts.map +1 -0
  119. package/dist/server-helpers/health-vitals.js +77 -0
  120. package/dist/server-helpers/health-vitals.js.map +1 -0
  121. package/dist/server-helpers/repo-resolution.d.ts.map +1 -1
  122. package/dist/server-helpers/repo-resolution.js +23 -3
  123. package/dist/server-helpers/repo-resolution.js.map +1 -1
  124. package/dist/server-helpers/request-context.d.ts +34 -4
  125. package/dist/server-helpers/request-context.d.ts.map +1 -1
  126. package/dist/server-helpers/request-context.js +4 -0
  127. package/dist/server-helpers/request-context.js.map +1 -1
  128. package/dist/server-helpers/response-hints.d.ts +1 -4
  129. package/dist/server-helpers/response-hints.d.ts.map +1 -1
  130. package/dist/server-helpers/response-hints.js +44 -1
  131. package/dist/server-helpers/response-hints.js.map +1 -1
  132. package/dist/server-helpers.d.ts.map +1 -1
  133. package/dist/server-helpers.js +20 -0
  134. package/dist/server-helpers.js.map +1 -1
  135. package/dist/server.d.ts +10 -0
  136. package/dist/server.d.ts.map +1 -1
  137. package/dist/server.js +165 -8
  138. package/dist/server.js.map +1 -1
  139. package/dist/storage/_shared.d.ts +1 -1
  140. package/dist/storage/_shared.d.ts.map +1 -1
  141. package/dist/storage/_shared.js +41 -3
  142. package/dist/storage/_shared.js.map +1 -1
  143. package/dist/storage/index-migration.d.ts.map +1 -1
  144. package/dist/storage/index-migration.js +6 -2
  145. package/dist/storage/index-migration.js.map +1 -1
  146. package/dist/storage/index-store.d.ts +29 -0
  147. package/dist/storage/index-store.d.ts.map +1 -1
  148. package/dist/storage/index-store.js +112 -0
  149. package/dist/storage/index-store.js.map +1 -1
  150. package/dist/storage/registry.d.ts +14 -0
  151. package/dist/storage/registry.d.ts.map +1 -1
  152. package/dist/storage/registry.js +46 -7
  153. package/dist/storage/registry.js.map +1 -1
  154. package/dist/storage/sqlite/accessors.d.ts +17 -0
  155. package/dist/storage/sqlite/accessors.d.ts.map +1 -1
  156. package/dist/storage/sqlite/accessors.js +20 -0
  157. package/dist/storage/sqlite/accessors.js.map +1 -1
  158. package/dist/storage/sqlite/connection.d.ts +20 -0
  159. package/dist/storage/sqlite/connection.d.ts.map +1 -1
  160. package/dist/storage/sqlite/connection.js +61 -0
  161. package/dist/storage/sqlite/connection.js.map +1 -1
  162. package/dist/storage/sqlite/index-io.d.ts +5 -0
  163. package/dist/storage/sqlite/index-io.d.ts.map +1 -1
  164. package/dist/storage/sqlite/index-io.js +98 -9
  165. package/dist/storage/sqlite/index-io.js.map +1 -1
  166. package/dist/storage/sqlite/meta.d.ts +7 -0
  167. package/dist/storage/sqlite/meta.d.ts.map +1 -1
  168. package/dist/storage/sqlite/meta.js.map +1 -1
  169. package/dist/storage/sqlite/queries.d.ts +66 -0
  170. package/dist/storage/sqlite/queries.d.ts.map +1 -0
  171. package/dist/storage/sqlite/queries.js +196 -0
  172. package/dist/storage/sqlite/queries.js.map +1 -0
  173. package/dist/storage/sqlite/schema.d.ts +2 -2
  174. package/dist/storage/sqlite/schema.d.ts.map +1 -1
  175. package/dist/storage/sqlite/schema.js +36 -0
  176. package/dist/storage/sqlite/schema.js.map +1 -1
  177. package/dist/storage/sqlite-index-store.d.ts +3 -1
  178. package/dist/storage/sqlite-index-store.d.ts.map +1 -1
  179. package/dist/storage/sqlite-index-store.js +4 -1
  180. package/dist/storage/sqlite-index-store.js.map +1 -1
  181. package/dist/storage/telemetry/uploader.js +1 -1
  182. package/dist/storage/telemetry/uploader.js.map +1 -1
  183. package/dist/storage/usage-tracker.d.ts.map +1 -1
  184. package/dist/storage/usage-tracker.js +54 -2
  185. package/dist/storage/usage-tracker.js.map +1 -1
  186. package/dist/tools/boundary-tools.js +2 -2
  187. package/dist/tools/boundary-tools.js.map +1 -1
  188. package/dist/tools/community-tools.d.ts +7 -0
  189. package/dist/tools/community-tools.d.ts.map +1 -1
  190. package/dist/tools/community-tools.js +31 -14
  191. package/dist/tools/community-tools.js.map +1 -1
  192. package/dist/tools/complexity-tools.d.ts.map +1 -1
  193. package/dist/tools/complexity-tools.js +65 -45
  194. package/dist/tools/complexity-tools.js.map +1 -1
  195. package/dist/tools/conversation-index-tools.js +2 -2
  196. package/dist/tools/conversation-index-tools.js.map +1 -1
  197. package/dist/tools/conversation-search-tools.js +2 -2
  198. package/dist/tools/conversation-search-tools.js.map +1 -1
  199. package/dist/tools/coupling-tools.d.ts +2 -2
  200. package/dist/tools/coupling-tools.d.ts.map +1 -1
  201. package/dist/tools/coupling-tools.js +8 -13
  202. package/dist/tools/coupling-tools.js.map +1 -1
  203. package/dist/tools/diff-tools.d.ts.map +1 -1
  204. package/dist/tools/diff-tools.js +11 -14
  205. package/dist/tools/diff-tools.js.map +1 -1
  206. package/dist/tools/git-exec.d.ts +42 -0
  207. package/dist/tools/git-exec.d.ts.map +1 -0
  208. package/dist/tools/git-exec.js +53 -0
  209. package/dist/tools/git-exec.js.map +1 -0
  210. package/dist/tools/git-tree-guard.d.ts +23 -0
  211. package/dist/tools/git-tree-guard.d.ts.map +1 -0
  212. package/dist/tools/git-tree-guard.js +33 -0
  213. package/dist/tools/git-tree-guard.js.map +1 -0
  214. package/dist/tools/graph-tools.d.ts.map +1 -1
  215. package/dist/tools/graph-tools.js +5 -2
  216. package/dist/tools/graph-tools.js.map +1 -1
  217. package/dist/tools/hotspot-tools.d.ts +25 -0
  218. package/dist/tools/hotspot-tools.d.ts.map +1 -1
  219. package/dist/tools/hotspot-tools.js +24 -3
  220. package/dist/tools/hotspot-tools.js.map +1 -1
  221. package/dist/tools/impact-tools.d.ts.map +1 -1
  222. package/dist/tools/impact-tools.js +8 -9
  223. package/dist/tools/impact-tools.js.map +1 -1
  224. package/dist/tools/index-tools/file-indexer.d.ts +6 -0
  225. package/dist/tools/index-tools/file-indexer.d.ts.map +1 -1
  226. package/dist/tools/index-tools/file-indexer.js +184 -18
  227. package/dist/tools/index-tools/file-indexer.js.map +1 -1
  228. package/dist/tools/index-tools/folder-indexer.d.ts.map +1 -1
  229. package/dist/tools/index-tools/folder-indexer.js +59 -7
  230. package/dist/tools/index-tools/folder-indexer.js.map +1 -1
  231. package/dist/tools/index-tools/load-gate.d.ts +15 -0
  232. package/dist/tools/index-tools/load-gate.d.ts.map +1 -0
  233. package/dist/tools/index-tools/load-gate.js +57 -0
  234. package/dist/tools/index-tools/load-gate.js.map +1 -0
  235. package/dist/tools/index-tools/overload-guard.d.ts +16 -0
  236. package/dist/tools/index-tools/overload-guard.d.ts.map +1 -0
  237. package/dist/tools/index-tools/overload-guard.js +68 -0
  238. package/dist/tools/index-tools/overload-guard.js.map +1 -0
  239. package/dist/tools/index-tools/parse.d.ts +9 -0
  240. package/dist/tools/index-tools/parse.d.ts.map +1 -1
  241. package/dist/tools/index-tools/parse.js +9 -2
  242. package/dist/tools/index-tools/parse.js.map +1 -1
  243. package/dist/tools/index-tools/registry.d.ts +25 -1
  244. package/dist/tools/index-tools/registry.d.ts.map +1 -1
  245. package/dist/tools/index-tools/registry.js +149 -8
  246. package/dist/tools/index-tools/registry.js.map +1 -1
  247. package/dist/tools/index-tools/state.d.ts +46 -0
  248. package/dist/tools/index-tools/state.d.ts.map +1 -1
  249. package/dist/tools/index-tools/state.js +132 -0
  250. package/dist/tools/index-tools/state.js.map +1 -1
  251. package/dist/tools/index-tools/watcher.d.ts.map +1 -1
  252. package/dist/tools/index-tools/watcher.js +13 -5
  253. package/dist/tools/index-tools/watcher.js.map +1 -1
  254. package/dist/tools/index-tools/worktree-seed.d.ts +42 -1
  255. package/dist/tools/index-tools/worktree-seed.d.ts.map +1 -1
  256. package/dist/tools/index-tools/worktree-seed.js +165 -24
  257. package/dist/tools/index-tools/worktree-seed.js.map +1 -1
  258. package/dist/tools/index-tools.d.ts +2 -2
  259. package/dist/tools/index-tools.d.ts.map +1 -1
  260. package/dist/tools/index-tools.js +2 -2
  261. package/dist/tools/index-tools.js.map +1 -1
  262. package/dist/tools/journal-generator-helpers.d.ts.map +1 -1
  263. package/dist/tools/journal-generator-helpers.js +3 -1
  264. package/dist/tools/journal-generator-helpers.js.map +1 -1
  265. package/dist/tools/nest-guard-tools.d.ts +8 -0
  266. package/dist/tools/nest-guard-tools.d.ts.map +1 -1
  267. package/dist/tools/nest-guard-tools.js +7 -1
  268. package/dist/tools/nest-guard-tools.js.map +1 -1
  269. package/dist/tools/nest-pipeline-tools.d.ts.map +1 -1
  270. package/dist/tools/nest-pipeline-tools.js +5 -1
  271. package/dist/tools/nest-pipeline-tools.js.map +1 -1
  272. package/dist/tools/outline-tools.d.ts +4 -1
  273. package/dist/tools/outline-tools.d.ts.map +1 -1
  274. package/dist/tools/outline-tools.js +41 -4
  275. package/dist/tools/outline-tools.js.map +1 -1
  276. package/dist/tools/patterns/execution.d.ts.map +1 -1
  277. package/dist/tools/patterns/execution.js +28 -10
  278. package/dist/tools/patterns/execution.js.map +1 -1
  279. package/dist/tools/review-diff/checks/coupling.js +1 -1
  280. package/dist/tools/review-diff/checks/coupling.js.map +1 -1
  281. package/dist/tools/review-diff/constants.d.ts +9 -0
  282. package/dist/tools/review-diff/constants.d.ts.map +1 -1
  283. package/dist/tools/review-diff/constants.js +9 -0
  284. package/dist/tools/review-diff/constants.js.map +1 -1
  285. package/dist/tools/review-diff/orchestrator.d.ts.map +1 -1
  286. package/dist/tools/review-diff/orchestrator.js +35 -2
  287. package/dist/tools/review-diff/orchestrator.js.map +1 -1
  288. package/dist/tools/review-diff/types.d.ts +5 -0
  289. package/dist/tools/review-diff/types.d.ts.map +1 -1
  290. package/dist/tools/route-tools/file-sources.d.ts.map +1 -1
  291. package/dist/tools/route-tools/file-sources.js +8 -1
  292. package/dist/tools/route-tools/file-sources.js.map +1 -1
  293. package/dist/tools/route-tools/hono.d.ts.map +1 -1
  294. package/dist/tools/route-tools/hono.js +18 -4
  295. package/dist/tools/route-tools/hono.js.map +1 -1
  296. package/dist/tools/route-tools/laravel.js +1 -1
  297. package/dist/tools/route-tools/laravel.js.map +1 -1
  298. package/dist/tools/route-tools/mermaid-call-chain.d.ts.map +1 -1
  299. package/dist/tools/route-tools/mermaid-call-chain.js +9 -1
  300. package/dist/tools/route-tools/mermaid-call-chain.js.map +1 -1
  301. package/dist/tools/route-tools/nest.js +2 -2
  302. package/dist/tools/route-tools/nest.js.map +1 -1
  303. package/dist/tools/route-tools/next-trace.d.ts.map +1 -1
  304. package/dist/tools/route-tools/next-trace.js +16 -1
  305. package/dist/tools/route-tools/next-trace.js.map +1 -1
  306. package/dist/tools/route-tools/next.d.ts.map +1 -1
  307. package/dist/tools/route-tools/next.js +10 -3
  308. package/dist/tools/route-tools/next.js.map +1 -1
  309. package/dist/tools/route-tools/route-mermaid.d.ts.map +1 -1
  310. package/dist/tools/route-tools/route-mermaid.js +7 -1
  311. package/dist/tools/route-tools/route-mermaid.js.map +1 -1
  312. package/dist/tools/route-tools/spring-kotlin.d.ts.map +1 -1
  313. package/dist/tools/route-tools/spring-kotlin.js +4 -1
  314. package/dist/tools/route-tools/spring-kotlin.js.map +1 -1
  315. package/dist/tools/route-tools/trace-route.d.ts.map +1 -1
  316. package/dist/tools/route-tools/trace-route.js +12 -4
  317. package/dist/tools/route-tools/trace-route.js.map +1 -1
  318. package/dist/tools/route-tools/yii2.d.ts.map +1 -1
  319. package/dist/tools/route-tools/yii2.js +14 -9
  320. package/dist/tools/route-tools/yii2.js.map +1 -1
  321. package/dist/tools/secret-detectors.d.ts +10 -1
  322. package/dist/tools/secret-detectors.d.ts.map +1 -1
  323. package/dist/tools/secret-detectors.js +16 -2
  324. package/dist/tools/secret-detectors.js.map +1 -1
  325. package/dist/tools/secret-file-scanner.d.ts +3 -1
  326. package/dist/tools/secret-file-scanner.d.ts.map +1 -1
  327. package/dist/tools/secret-file-scanner.js +4 -2
  328. package/dist/tools/secret-file-scanner.js.map +1 -1
  329. package/dist/tools/secret-tools.d.ts +7 -0
  330. package/dist/tools/secret-tools.d.ts.map +1 -1
  331. package/dist/tools/secret-tools.js +62 -5
  332. package/dist/tools/secret-tools.js.map +1 -1
  333. package/dist/tools/status-tools.d.ts +20 -0
  334. package/dist/tools/status-tools.d.ts.map +1 -1
  335. package/dist/tools/status-tools.js +46 -0
  336. package/dist/tools/status-tools.js.map +1 -1
  337. package/dist/tools/symbol-analysis-tools.d.ts.map +1 -1
  338. package/dist/tools/symbol-analysis-tools.js +27 -2
  339. package/dist/tools/symbol-analysis-tools.js.map +1 -1
  340. package/dist/tools/symbol-reference-tools.d.ts +17 -0
  341. package/dist/tools/symbol-reference-tools.d.ts.map +1 -1
  342. package/dist/tools/symbol-reference-tools.js +23 -4
  343. package/dist/tools/symbol-reference-tools.js.map +1 -1
  344. package/dist/tools/symbol-tool-internals.d.ts +10 -0
  345. package/dist/tools/symbol-tool-internals.d.ts.map +1 -1
  346. package/dist/tools/symbol-tool-internals.js +16 -1
  347. package/dist/tools/symbol-tool-internals.js.map +1 -1
  348. package/dist/tools/test-impact-tools.d.ts +3 -0
  349. package/dist/tools/test-impact-tools.d.ts.map +1 -1
  350. package/dist/tools/test-impact-tools.js +26 -4
  351. package/dist/tools/test-impact-tools.js.map +1 -1
  352. package/dist/tools/wiki-overview-sources.d.ts.map +1 -1
  353. package/dist/tools/wiki-overview-sources.js +3 -0
  354. package/dist/tools/wiki-overview-sources.js.map +1 -1
  355. package/dist/utils/import-graph/collect.d.ts +2 -3
  356. package/dist/utils/import-graph/collect.d.ts.map +1 -1
  357. package/dist/utils/import-graph/collect.js +73 -8
  358. package/dist/utils/import-graph/collect.js.map +1 -1
  359. package/dist/utils/import-graph/edge-accumulator.d.ts.map +1 -1
  360. package/dist/utils/import-graph/edge-accumulator.js +5 -0
  361. package/dist/utils/import-graph/edge-accumulator.js.map +1 -1
  362. package/dist/utils/import-graph/edge-cache.d.ts +15 -0
  363. package/dist/utils/import-graph/edge-cache.d.ts.map +1 -0
  364. package/dist/utils/import-graph/edge-cache.js +98 -0
  365. package/dist/utils/import-graph/edge-cache.js.map +1 -0
  366. package/dist/utils/import-graph/language-imports.d.ts +2 -2
  367. package/dist/utils/import-graph/language-imports.d.ts.map +1 -1
  368. package/dist/utils/import-graph/language-imports.js.map +1 -1
  369. package/dist/utils/import-graph/path-map.d.ts +2 -2
  370. package/dist/utils/import-graph/path-map.d.ts.map +1 -1
  371. package/dist/utils/import-graph/path-map.js.map +1 -1
  372. package/dist/utils/import-graph/python-php-edge-collectors.d.ts +11 -4
  373. package/dist/utils/import-graph/python-php-edge-collectors.d.ts.map +1 -1
  374. package/dist/utils/import-graph/python-php-edge-collectors.js +22 -5
  375. package/dist/utils/import-graph/python-php-edge-collectors.js.map +1 -1
  376. package/dist/utils/import-graph/source-edge-collector.d.ts +2 -3
  377. package/dist/utils/import-graph/source-edge-collector.d.ts.map +1 -1
  378. package/dist/utils/import-graph/source-edge-collector.js +7 -2
  379. package/dist/utils/import-graph/source-edge-collector.js.map +1 -1
  380. package/dist/utils/import-graph/types.d.ts +36 -1
  381. package/dist/utils/import-graph/types.d.ts.map +1 -1
  382. package/dist/utils/import-graph/typescript-edge-collector.d.ts +2 -3
  383. package/dist/utils/import-graph/typescript-edge-collector.d.ts.map +1 -1
  384. package/dist/utils/import-graph/typescript-edge-collector.js +6 -2
  385. package/dist/utils/import-graph/typescript-edge-collector.js.map +1 -1
  386. package/dist/utils/import-graph/workspace-alias.d.ts +2 -2
  387. package/dist/utils/import-graph/workspace-alias.d.ts.map +1 -1
  388. package/dist/utils/import-graph/workspace-alias.js.map +1 -1
  389. package/dist/utils/language-detect.d.ts +2 -4
  390. package/dist/utils/language-detect.d.ts.map +1 -1
  391. package/dist/utils/language-detect.js +26 -4
  392. package/dist/utils/language-detect.js.map +1 -1
  393. package/dist/utils/python-imports.d.ts +20 -0
  394. package/dist/utils/python-imports.d.ts.map +1 -1
  395. package/dist/utils/python-imports.js +52 -0
  396. package/dist/utils/python-imports.js.map +1 -1
  397. package/dist/utils/ts-imports.d.ts +16 -0
  398. package/dist/utils/ts-imports.d.ts.map +1 -1
  399. package/dist/utils/ts-imports.js +65 -3
  400. package/dist/utils/ts-imports.js.map +1 -1
  401. package/package.json +1 -1
@@ -0,0 +1,164 @@
1
+ import { createReadStream, createWriteStream } from "node:fs";
2
+ import { rename, unlink, stat } from "node:fs/promises";
3
+ import { createInterface } from "node:readline";
4
+ /**
5
+ * Persist a BM25 index next to the code index it was built from.
6
+ *
7
+ * Rebuilding costs 10.04 s on the largest repo here (352,166 symbols, 12.9M tokens) and is paid
8
+ * once per repo per process — so every daemon restart, and every eviction under the cache budget,
9
+ * charges it again. Measured alternative on the same index: reconstructing the maps from flat
10
+ * arrays is **0.70 s** and reading 400 MB off this disk is 0.06 s. 13x, and the reason is that the
11
+ * expensive half of a build is TOKENISING every symbol, not assembling the maps.
12
+ *
13
+ * Line-delimited, not one JSON document: `JSON.stringify` on the whole structure exceeds V8's
14
+ * maximum string length and throws outright. The same reason `embeddings.ndjson` is streamed.
15
+ *
16
+ * `symbols` is deliberately NOT written. Every one of those objects is already in the code index
17
+ * that gets loaded first, so persisting them would double the bytes on a disk that is, on this
18
+ * machine, the actual bottleneck. They are reattached on load from that index.
19
+ */
20
+ /** Bump on any format change: a mismatch rebuilds rather than misreads. */
21
+ const FORMAT_VERSION = 1;
22
+ const FIELDS = ["name", "signature", "docstring", "body", "comments"];
23
+ function headerFor(index, code) {
24
+ return {
25
+ v: FORMAT_VERSION,
26
+ docCount: index.docCount,
27
+ avg: index.avgFieldLengths,
28
+ tot: index.totalFieldLengths,
29
+ symbolCount: code.symbols.length,
30
+ fileCount: code.files.length,
31
+ indexUpdatedAt: code.updated_at ?? code.created_at ?? 0,
32
+ };
33
+ }
34
+ /**
35
+ * A cache that does not describe the current index is worse than no cache: it returns confident,
36
+ * wrong search results, which is the one failure mode a search tool must never have. So the check
37
+ * is deliberately cheap AND strict — any disagreement rebuilds, and nothing here tries to repair a
38
+ * partial match.
39
+ */
40
+ function isStale(header, code) {
41
+ if (header.v !== FORMAT_VERSION)
42
+ return true;
43
+ if (header.symbolCount !== code.symbols.length)
44
+ return true;
45
+ if (header.fileCount !== code.files.length)
46
+ return true;
47
+ return header.indexUpdatedAt !== (code.updated_at ?? code.created_at ?? 0);
48
+ }
49
+ export function bm25PathFor(indexPath) {
50
+ return indexPath.replace(/\.index\.json$/, "").replace(/\.index\.db$/, "") + ".bm25.ndjson";
51
+ }
52
+ export async function saveBM25Index(indexPath, index, code) {
53
+ const target = bm25PathFor(indexPath);
54
+ // Temp + rename, like every other artifact here: a process killed mid-write must not leave a
55
+ // truncated file that the next start would read as a complete index.
56
+ const temp = `${target}.tmp.${process.pid}`;
57
+ const out = createWriteStream(temp, { encoding: "utf-8" });
58
+ const write = (line) => out.write(line) ? Promise.resolve() : new Promise((r) => out.once("drain", () => r()));
59
+ try {
60
+ await write(`${JSON.stringify(headerFor(index, code))}\n`);
61
+ for (const field of FIELDS) {
62
+ for (const [token, postings] of index.fields[field]) {
63
+ // Flat [id, tf, id, tf, …]: half the JSON of an array of pairs, and it rebuilds with one
64
+ // loop rather than a destructuring per entry.
65
+ const flat = [];
66
+ for (const [id, tf] of postings) {
67
+ flat.push(id);
68
+ flat.push(tf);
69
+ }
70
+ await write(`${JSON.stringify(["p", field, token, flat])}\n`);
71
+ }
72
+ }
73
+ for (const [id, lengths] of index.fieldLengths) {
74
+ await write(`${JSON.stringify(["l", id, lengths.name, lengths.signature, lengths.docstring, lengths.body, lengths.comments])}\n`);
75
+ }
76
+ for (const [file, score] of index.centrality) {
77
+ await write(`${JSON.stringify(["c", file, score])}\n`);
78
+ }
79
+ await new Promise((resolve, reject) => {
80
+ out.end(() => resolve());
81
+ out.on("error", reject);
82
+ });
83
+ await rename(temp, target);
84
+ }
85
+ catch {
86
+ await unlink(temp).catch(() => { });
87
+ // Never fail a build over its cache. The caller has a working index in memory either way.
88
+ }
89
+ }
90
+ export async function loadBM25Index(indexPath, code) {
91
+ const target = bm25PathFor(indexPath);
92
+ try {
93
+ if (!(await stat(target)).isFile())
94
+ return null;
95
+ }
96
+ catch {
97
+ return null;
98
+ }
99
+ const fields = {
100
+ name: new Map(), signature: new Map(), docstring: new Map(),
101
+ body: new Map(), comments: new Map(),
102
+ };
103
+ const fieldLengths = new Map();
104
+ const centrality = new Map();
105
+ let header = null;
106
+ try {
107
+ const rl = createInterface({ input: createReadStream(target, { encoding: "utf-8" }), crlfDelay: Infinity });
108
+ for await (const line of rl) {
109
+ if (!line)
110
+ continue;
111
+ if (header === null) {
112
+ header = JSON.parse(line);
113
+ // Checked BEFORE reading 8.9M posting entries, not after: a stale cache should cost one
114
+ // line, not a full parse followed by a discard.
115
+ if (isStale(header, code)) {
116
+ rl.close();
117
+ return null;
118
+ }
119
+ continue;
120
+ }
121
+ const row = JSON.parse(line);
122
+ const kind = row[0];
123
+ if (kind === "p") {
124
+ const field = row[1];
125
+ const flat = row[3];
126
+ const postings = new Map();
127
+ for (let i = 0; i < flat.length; i += 2)
128
+ postings.set(flat[i], flat[i + 1]);
129
+ fields[field].set(row[2], postings);
130
+ }
131
+ else if (kind === "l") {
132
+ fieldLengths.set(row[1], {
133
+ name: row[2], signature: row[3], docstring: row[4],
134
+ body: row[5], comments: row[6],
135
+ });
136
+ }
137
+ else if (kind === "c") {
138
+ centrality.set(row[1], row[2]);
139
+ }
140
+ }
141
+ }
142
+ catch {
143
+ // Truncated, corrupt, or written by a version that disagrees. Rebuilding is always correct;
144
+ // reading half an index is not.
145
+ return null;
146
+ }
147
+ if (header === null)
148
+ return null;
149
+ // Reattached rather than persisted — see the file header. The map must be built the same way the
150
+ // builder does it (last write wins), because symbol ids are documented as non-unique.
151
+ const symbols = new Map();
152
+ for (const symbol of code.symbols)
153
+ symbols.set(symbol.id, symbol);
154
+ return {
155
+ fields,
156
+ avgFieldLengths: header.avg,
157
+ docCount: header.docCount,
158
+ symbols,
159
+ centrality,
160
+ fieldLengths,
161
+ totalFieldLengths: header.tot,
162
+ };
163
+ }
164
+ //# sourceMappingURL=bm25-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bm25-store.js","sourceRoot":"","sources":["../../src/search/bm25-store.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,12 @@ export interface BM25Index {
13
13
  centrality: Map<string, number>;
14
14
  /** Pre-computed per-document field lengths (avoids O(n*m) recomputation per search) */
15
15
  fieldLengths: Map<string, Record<FieldName, number>>;
16
+ /**
17
+ * Running per-field token totals. `avgFieldLengths` is derived from these, and keeping the
18
+ * numerator lets one file's symbols be swapped without rescanning every document. Deriving it
19
+ * back as `avg * docCount` would work on paper and accumulate float error in practice.
20
+ */
21
+ totalFieldLengths: Record<FieldName, number>;
16
22
  }
17
23
  /**
18
24
  * General-purpose tokenizer for signature, docstring, and body text.
@@ -20,7 +26,31 @@ export interface BM25Index {
20
26
  * lowercases, and filters tokens shorter than 2 chars.
21
27
  */
22
28
  export declare function tokenizeText(text: string): string[];
29
+ /**
30
+ * Swap one file's symbols in place, instead of throwing the whole index away.
31
+ *
32
+ * Editing a single file used to delete the repository's entire BM25 index, and the next search
33
+ * rebuilt it from scratch — measured 6.8 s on a 372k-symbol repository, against 952 `index_file`
34
+ * calls in a week. The agent loop is edit-then-search, so that rebuild was being paid constantly.
35
+ *
36
+ * `centrality` is deliberately NOT recomputed. It is an O(imports x files) scan over every symbol
37
+ * in the repository — the thing this function exists to avoid — and it is a ranking bonus derived
38
+ * from a substring heuristic, not a correctness input. One file's imports moving leaves it
39
+ * marginally stale until the next full build; a 6.8 s pause would not.
40
+ */
41
+ export declare function updateBM25ForFile(index: BM25Index, file: string, symbols: CodeSymbol[]): void;
42
+ /**
43
+ * Synchronous build. Correct, and fine for small inputs — the tool-ranker index is ~150 entries.
44
+ * Do NOT use it on a repository index inside the daemon: see buildBM25IndexYielding.
45
+ */
23
46
  export declare function buildBM25Index(symbols: CodeSymbol[]): BM25Index;
47
+ /**
48
+ * Same index, built without monopolising the event loop.
49
+ *
50
+ * Identical work and identical output — it simply hands the loop a turn every SYMBOLS_PER_TURN
51
+ * symbols, so other clients keep getting answers while a large repository is indexed.
52
+ */
53
+ export declare function buildBM25IndexYielding(symbols: CodeSymbol[]): Promise<BM25Index>;
24
54
  export declare function searchBM25(index: BM25Index, query: string, topK: number, fieldWeights: Record<FieldName, number>): SearchResult[];
25
55
  export declare function applyCutoff(results: SearchResult[]): SearchResult[];
26
56
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"bm25.d.ts","sourceRoot":"","sources":["../../src/search/bm25.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAe5D,KAAK,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AAE1E,MAAM,WAAW,SAAS;IACxB,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5D,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3C,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjC,sFAAsF;IACtF,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,uFAAuF;IACvF,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;CACtD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBnD;AA8CD,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,SAAS,CAoF/D;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GACtC,YAAY,EAAE,CAwFhB;AAKD,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAWnE"}
1
+ {"version":3,"file":"bm25.d.ts","sourceRoot":"","sources":["../../src/search/bm25.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAe5D,KAAK,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AAE1E,MAAM,WAAW,SAAS;IACxB,sEAAsE;IACtE,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5D,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC3C,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjC,sFAAsF;IACtF,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,uFAAuF;IACvF,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD;;;;OAIG;IACH,iBAAiB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;CAC9C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAqBnD;AA8MD;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAsB7F;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,SAAS,CAI/D;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAQtF;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,YAAY,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GACtC,YAAY,EAAE,CAwFhB;AAKD,wBAAgB,WAAW,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,CAWnE"}
@@ -73,44 +73,67 @@ function countTermFrequencies(tokens) {
73
73
  }
74
74
  return tf;
75
75
  }
76
- export function buildBM25Index(symbols) {
77
- const fieldNames = ["name", "signature", "docstring", "body", "comments"];
78
- const fields = {
79
- name: new Map(),
80
- signature: new Map(),
81
- docstring: new Map(),
82
- body: new Map(),
83
- comments: new Map(),
76
+ /**
77
+ * Symbols ingested per turn before the event loop gets one.
78
+ *
79
+ * Building this index is the single longest synchronous burst in the process. Measured on the
80
+ * largest real index here (372,949 symbols, 20,132 files): **19.5 seconds during which a 20 ms
81
+ * timer fired ZERO times**. In the shared daemon that is 19.5 seconds where nothing is answered —
82
+ * not another client's search, not `/health` — and it is the largest single contributor to what
83
+ * users reported as "CodeSift is down".
84
+ *
85
+ * The split matters for where to yield: 18.3 s of that is the tokenise-and-map loop below, and only
86
+ * 1.2 s the import-centrality pass after it. So the ingest loop is what yields.
87
+ */
88
+ /** Module scope now that ingestion is extracted — it was a local of the old single function. */
89
+ const fieldNames = ["name", "signature", "docstring", "body", "comments"];
90
+ const SYMBOLS_PER_TURN = 2000;
91
+ function yieldToEventLoop() {
92
+ return new Promise((resolve) => setImmediate(resolve));
93
+ }
94
+ function newAccumulator() {
95
+ return {
96
+ fields: {
97
+ name: new Map(), signature: new Map(), docstring: new Map(),
98
+ body: new Map(), comments: new Map(),
99
+ },
100
+ totalFieldLengths: { name: 0, signature: 0, docstring: 0, body: 0, comments: 0 },
101
+ symbolMap: new Map(),
102
+ fieldLengths: new Map(),
84
103
  };
85
- const totalFieldLengths = {
86
- name: 0,
87
- signature: 0,
88
- docstring: 0,
89
- body: 0,
90
- comments: 0,
104
+ }
105
+ /** One symbol into the inverted index. Extracted so both builders run byte-identical work. */
106
+ function ingestSymbol(acc, symbol) {
107
+ acc.symbolMap.set(symbol.id, symbol);
108
+ const fieldTokens = getFieldTokens(symbol);
109
+ const lengths = {
110
+ name: 0, signature: 0, docstring: 0, body: 0, comments: 0,
91
111
  };
92
- const symbolMap = new Map();
93
- const fieldLengths = new Map();
94
- for (const symbol of symbols) {
95
- symbolMap.set(symbol.id, symbol);
96
- const fieldTokens = getFieldTokens(symbol);
97
- const lengths = { name: 0, signature: 0, docstring: 0, body: 0, comments: 0 };
98
- for (const field of fieldNames) {
99
- const tokens = fieldTokens[field];
100
- totalFieldLengths[field] += tokens.length;
101
- lengths[field] = tokens.length;
102
- const tf = countTermFrequencies(tokens);
103
- for (const [token, freq] of tf) {
104
- let postings = fields[field].get(token);
105
- if (!postings) {
106
- postings = new Map();
107
- fields[field].set(token, postings);
108
- }
109
- postings.set(symbol.id, freq);
112
+ for (const field of fieldNames) {
113
+ const tokens = fieldTokens[field];
114
+ acc.totalFieldLengths[field] += tokens.length;
115
+ lengths[field] = tokens.length;
116
+ const tf = countTermFrequencies(tokens);
117
+ for (const [token, freq] of tf) {
118
+ let postings = acc.fields[field].get(token);
119
+ if (!postings) {
120
+ postings = new Map();
121
+ acc.fields[field].set(token, postings);
110
122
  }
123
+ postings.set(symbol.id, freq);
111
124
  }
112
- fieldLengths.set(symbol.id, lengths);
113
125
  }
126
+ acc.fieldLengths.set(symbol.id, lengths);
127
+ }
128
+ /**
129
+ * Averages plus import centrality — 1.2 s of the 19.5 on the largest index, so it stays synchronous.
130
+ *
131
+ * The inner `for (const file of allFiles)` is a linear scan per import match, i.e. O(imports x files).
132
+ * At 6% of the build it was not worth changing while fixing the blocking, but it is the obvious next
133
+ * thing if this pass ever grows.
134
+ */
135
+ function finishBuild(acc, symbols) {
136
+ const { fields, totalFieldLengths, symbolMap, fieldLengths } = acc;
114
137
  const docCount = symbols.length;
115
138
  const avgFieldLengths = {
116
139
  name: docCount > 0 ? totalFieldLengths.name / docCount : 0,
@@ -147,7 +170,109 @@ export function buildBM25Index(symbols) {
147
170
  for (const [file, count] of importCount) {
148
171
  centrality.set(file, Math.log2(1 + count));
149
172
  }
150
- return { fields, avgFieldLengths, docCount, symbols: symbolMap, centrality, fieldLengths };
173
+ return { fields, avgFieldLengths, docCount, symbols: symbolMap, centrality, fieldLengths, totalFieldLengths };
174
+ }
175
+ function recomputeAverages(index) {
176
+ const n = index.docCount;
177
+ for (const field of fieldNames) {
178
+ index.avgFieldLengths[field] = n > 0 ? index.totalFieldLengths[field] / n : 0;
179
+ }
180
+ }
181
+ /**
182
+ * Undo one symbol's contribution to the inverted index.
183
+ *
184
+ * No reverse token map is needed: the tokens a symbol contributed are a pure function of the
185
+ * symbol, and the symbol itself is still in `index.symbols`. Re-deriving them is exact and costs
186
+ * one `getFieldTokens` call, against a reverse map that would have to be kept correct forever.
187
+ *
188
+ * Field lengths come from the STORED record rather than the re-derived tokens, so the running
189
+ * totals stay symmetric with what ingest actually added even if tokenisation ever changes under a
190
+ * long-lived index.
191
+ */
192
+ function removeSymbolFromIndex(index, symbol) {
193
+ const fieldTokens = getFieldTokens(symbol);
194
+ const stored = index.fieldLengths.get(symbol.id);
195
+ for (const field of fieldNames) {
196
+ const tokens = fieldTokens[field];
197
+ index.totalFieldLengths[field] -= stored ? stored[field] : tokens.length;
198
+ const postings = index.fields[field];
199
+ for (const token of new Set(tokens)) {
200
+ const forToken = postings.get(token);
201
+ if (!forToken)
202
+ continue;
203
+ forToken.delete(symbol.id);
204
+ // A token nobody carries any more must go, or the vocabulary grows without bound across a
205
+ // long-lived daemon and every idf denominator drifts.
206
+ if (forToken.size === 0)
207
+ postings.delete(token);
208
+ }
209
+ }
210
+ index.symbols.delete(symbol.id);
211
+ index.fieldLengths.delete(symbol.id);
212
+ index.docCount--;
213
+ }
214
+ /**
215
+ * Swap one file's symbols in place, instead of throwing the whole index away.
216
+ *
217
+ * Editing a single file used to delete the repository's entire BM25 index, and the next search
218
+ * rebuilt it from scratch — measured 6.8 s on a 372k-symbol repository, against 952 `index_file`
219
+ * calls in a week. The agent loop is edit-then-search, so that rebuild was being paid constantly.
220
+ *
221
+ * `centrality` is deliberately NOT recomputed. It is an O(imports x files) scan over every symbol
222
+ * in the repository — the thing this function exists to avoid — and it is a ranking bonus derived
223
+ * from a substring heuristic, not a correctness input. One file's imports moving leaves it
224
+ * marginally stale until the next full build; a 6.8 s pause would not.
225
+ */
226
+ export function updateBM25ForFile(index, file, symbols) {
227
+ // Select by the STORED symbol's file, never by parsing the incoming ids: ids are
228
+ // `repo:file:name:line` and are documented as non-unique, so an incoming id can collide with a
229
+ // symbol that lives in a different file. Matching on the stored record cannot touch it.
230
+ const stale = [];
231
+ for (const existing of index.symbols.values()) {
232
+ if (existing.file === file)
233
+ stale.push(existing);
234
+ }
235
+ for (const symbol of stale)
236
+ removeSymbolFromIndex(index, symbol);
237
+ const acc = {
238
+ fields: index.fields,
239
+ totalFieldLengths: index.totalFieldLengths,
240
+ symbolMap: index.symbols,
241
+ fieldLengths: index.fieldLengths,
242
+ };
243
+ for (const symbol of symbols) {
244
+ ingestSymbol(acc, symbol);
245
+ index.docCount++;
246
+ }
247
+ recomputeAverages(index);
248
+ }
249
+ /**
250
+ * Synchronous build. Correct, and fine for small inputs — the tool-ranker index is ~150 entries.
251
+ * Do NOT use it on a repository index inside the daemon: see buildBM25IndexYielding.
252
+ */
253
+ export function buildBM25Index(symbols) {
254
+ const acc = newAccumulator();
255
+ for (const symbol of symbols)
256
+ ingestSymbol(acc, symbol);
257
+ return finishBuild(acc, symbols);
258
+ }
259
+ /**
260
+ * Same index, built without monopolising the event loop.
261
+ *
262
+ * Identical work and identical output — it simply hands the loop a turn every SYMBOLS_PER_TURN
263
+ * symbols, so other clients keep getting answers while a large repository is indexed.
264
+ */
265
+ export async function buildBM25IndexYielding(symbols) {
266
+ const acc = newAccumulator();
267
+ let sinceYield = 0;
268
+ for (const symbol of symbols) {
269
+ ingestSymbol(acc, symbol);
270
+ if (++sinceYield >= SYMBOLS_PER_TURN) {
271
+ sinceYield = 0;
272
+ await yieldToEventLoop();
273
+ }
274
+ }
275
+ return finishBuild(acc, symbols);
151
276
  }
152
277
  export function searchBM25(index, query, topK, fieldWeights) {
153
278
  if (index.docCount === 0 || !query.trim()) {
@@ -1 +1 @@
1
- {"version":3,"file":"bm25.js","sourceRoot":"","sources":["../../src/search/bm25.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bm25.js","sourceRoot":"","sources":["../../src/search/bm25.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Run `fn` with at most `limit` others.
3
+ *
4
+ * FIFO, so a batch that has waited longest goes next — a stack would starve the first arrival under
5
+ * sustained load, which is exactly the caller whose timeout is closest to firing.
6
+ */
7
+ export declare function withEmbedSlot<T>(fn: () => Promise<T>, options?: {
8
+ env?: NodeJS.ProcessEnv;
9
+ }): Promise<T>;
10
+ /** Tests need to observe the gate rather than infer it from timing. */
11
+ export declare function embedGateStateForTesting(): {
12
+ active: number;
13
+ waiting: number;
14
+ };
15
+ /** Tests need a clean slate between cases. */
16
+ export declare function resetEmbedGateForTesting(): void;
17
+ //# sourceMappingURL=embed-gate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed-gate.d.ts","sourceRoot":"","sources":["../../src/search/embed-gate.ts"],"names":[],"mappings":"AA8BA;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,OAAO,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;CAAE,GACpC,OAAO,CAAC,CAAC,CAAC,CAiBZ;AAED,uEAAuE;AACvE,wBAAgB,wBAAwB,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAE9E;AAED,8CAA8C;AAC9C,wBAAgB,wBAAwB,IAAI,IAAI,CAG/C"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Cap on how many embedding requests are in flight at once.
3
+ *
4
+ * Nothing limited them, and the remote does: `OLLAMA_NUM_PARALLEL=4` on the tailnet host this
5
+ * machine embeds against. So the daemon fired unbounded concurrent batches at a server that serves
6
+ * four, everything past the fourth queued until it exceeded the client's timeout, and
7
+ * `embedBatchWithStallRetry` answered each timeout by splitting the batch in two — producing MORE
8
+ * requests against the same queue. That is a congestion collapse we cause ourselves, and it is what
9
+ * filled `daemon.err.log` with hundreds of `embed batch of N stalled … retrying as N/2+N/2` lines
10
+ * and left the daemon unable to answer /health for fifteen minutes after a restart.
11
+ *
12
+ * A gate does not make embedding slower: the work was already serialised by the remote. It makes
13
+ * the QUEUE visible to us instead of hidden behind timeouts, so a batch waits rather than failing
14
+ * and multiplying.
15
+ *
16
+ * Default 4 to match the common Ollama setting. `CODESIFT_EMBED_CONCURRENCY` overrides it — a
17
+ * bigger GPU host or a hosted provider can take more, and a value of 0 or less disables the gate
18
+ * for callers who know their provider is unmetered.
19
+ */
20
+ const DEFAULT_CONCURRENCY = 4;
21
+ function configuredLimit(env) {
22
+ const raw = Number(env["CODESIFT_EMBED_CONCURRENCY"]);
23
+ if (Number.isFinite(raw))
24
+ return Math.floor(raw);
25
+ return DEFAULT_CONCURRENCY;
26
+ }
27
+ let active = 0;
28
+ const waiting = [];
29
+ /**
30
+ * Run `fn` with at most `limit` others.
31
+ *
32
+ * FIFO, so a batch that has waited longest goes next — a stack would starve the first arrival under
33
+ * sustained load, which is exactly the caller whose timeout is closest to firing.
34
+ */
35
+ export async function withEmbedSlot(fn, options) {
36
+ const limit = configuredLimit(options?.env ?? process.env);
37
+ if (limit <= 0)
38
+ return fn();
39
+ if (active >= limit) {
40
+ await new Promise((resolve) => waiting.push(resolve));
41
+ }
42
+ active++;
43
+ try {
44
+ return await fn();
45
+ }
46
+ finally {
47
+ active--;
48
+ // Release in arrival order. `shift()` on an array this short costs nothing, and the ordering is
49
+ // the property that matters.
50
+ const next = waiting.shift();
51
+ if (next)
52
+ next();
53
+ }
54
+ }
55
+ /** Tests need to observe the gate rather than infer it from timing. */
56
+ export function embedGateStateForTesting() {
57
+ return { active, waiting: waiting.length };
58
+ }
59
+ /** Tests need a clean slate between cases. */
60
+ export function resetEmbedGateForTesting() {
61
+ active = 0;
62
+ waiting.length = 0;
63
+ }
64
+ //# sourceMappingURL=embed-gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embed-gate.js","sourceRoot":"","sources":["../../src/search/embed-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAE9B,SAAS,eAAe,CAAC,GAAsB;IAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACjD,OAAO,mBAAmB,CAAC;AAC7B,CAAC;AAED,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,MAAM,OAAO,GAAsB,EAAE,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAoB,EACpB,OAAqC;IAErC,MAAM,KAAK,GAAG,eAAe,CAAC,OAAO,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3D,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,EAAE,EAAE,CAAC;IAE5B,IAAI,MAAM,IAAI,KAAK,EAAE,CAAC;QACpB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,EAAE,CAAC;IACT,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC;QACT,gGAAgG;QAChG,6BAA6B;QAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7B,IAAI,IAAI;YAAE,IAAI,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,wBAAwB;IACtC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;AAC7C,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,wBAAwB;IACtC,MAAM,GAAG,CAAC,CAAC;IACX,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACrB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../src/search/semantic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semantic.d.ts","sourceRoot":"","sources":["../../src/search/semantic.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { withEmbedSlot } from "./embed-gate.js";
1
2
  import { importTransformers, localEmbeddingRemedy } from "./optional-transformers.js";
2
3
  import { StaticEmbeddingProvider } from "./static-embedding-provider.js";
3
4
  const MAX_SYMBOL_SOURCE_CHARS = 200;
@@ -232,12 +233,14 @@ export class OllamaProvider {
232
233
  // /api/embeddings once per text — 90K sequential HTTP round-trips for a big
233
234
  // repo, which throws away most of the GPU speedup Ollama gives on Apple
234
235
  // Silicon. /api/embed embeds the whole array in one request.
235
- const response = await fetch(`${this.baseUrl}/api/embed`, {
236
+ // Through the gate: the remote serves a fixed number at a time, and firing more than that at it
237
+ // turns queueing into timeouts, and timeouts into retries that queue again. See embed-gate.ts.
238
+ const response = await withEmbedSlot(() => fetch(`${this.baseUrl}/api/embed`, {
236
239
  method: "POST",
237
240
  headers: { "Content-Type": "application/json" },
238
241
  body: JSON.stringify({ model: this.model, input: capped }),
239
242
  signal: AbortSignal.timeout(embeddingTimeoutMs(capped)),
240
- });
243
+ }));
241
244
  if (!response.ok) {
242
245
  // SEC-004: log raw body to stderr only — do not forward to the MCP client.
243
246
  const body = await response.text();