codesift-mcp 0.15.5 → 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 (287) 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/hooks/pre-tool-use.d.ts.map +1 -1
  17. package/dist/cli/hooks/pre-tool-use.js +5 -2
  18. package/dist/cli/hooks/pre-tool-use.js.map +1 -1
  19. package/dist/cli/hooks/shared.d.ts.map +1 -1
  20. package/dist/cli/hooks/shared.js +6 -2
  21. package/dist/cli/hooks/shared.js.map +1 -1
  22. package/dist/cli/orphan-guard.d.ts +22 -0
  23. package/dist/cli/orphan-guard.d.ts.map +1 -1
  24. package/dist/cli/orphan-guard.js +30 -0
  25. package/dist/cli/orphan-guard.js.map +1 -1
  26. package/dist/cli/service.d.ts +32 -0
  27. package/dist/cli/service.d.ts.map +1 -1
  28. package/dist/cli/service.js +67 -3
  29. package/dist/cli/service.js.map +1 -1
  30. package/dist/cli/setup/codex-project-auto.d.ts +27 -0
  31. package/dist/cli/setup/codex-project-auto.d.ts.map +1 -0
  32. package/dist/cli/setup/codex-project-auto.js +98 -0
  33. package/dist/cli/setup/codex-project-auto.js.map +1 -0
  34. package/dist/cli/setup/codex.d.ts.map +1 -1
  35. package/dist/cli/setup/codex.js +101 -6
  36. package/dist/cli/setup/codex.js.map +1 -1
  37. package/dist/cli/setup/cursor.d.ts.map +1 -1
  38. package/dist/cli/setup/cursor.js +9 -1
  39. package/dist/cli/setup/cursor.js.map +1 -1
  40. package/dist/cli/setup/gemini.d.ts.map +1 -1
  41. package/dist/cli/setup/gemini.js +21 -0
  42. package/dist/cli/setup/gemini.js.map +1 -1
  43. package/dist/cli/setup/mcp.d.ts +37 -1
  44. package/dist/cli/setup/mcp.d.ts.map +1 -1
  45. package/dist/cli/setup/mcp.js +57 -4
  46. package/dist/cli/setup/mcp.js.map +1 -1
  47. package/dist/cli/setup/types.d.ts +19 -1
  48. package/dist/cli/setup/types.d.ts.map +1 -1
  49. package/dist/config.d.ts.map +1 -1
  50. package/dist/config.js +30 -6
  51. package/dist/config.js.map +1 -1
  52. package/dist/formatters-core.d.ts +1 -0
  53. package/dist/formatters-core.d.ts.map +1 -1
  54. package/dist/formatters-core.js +8 -2
  55. package/dist/formatters-core.js.map +1 -1
  56. package/dist/formatters-shortening.d.ts.map +1 -1
  57. package/dist/formatters-shortening.js +8 -2
  58. package/dist/formatters-shortening.js.map +1 -1
  59. package/dist/lsp/lsp-servers.d.ts.map +1 -1
  60. package/dist/lsp/lsp-servers.js +4 -1
  61. package/dist/lsp/lsp-servers.js.map +1 -1
  62. package/dist/register-tool-groups/meta.d.ts.map +1 -1
  63. package/dist/register-tool-groups/meta.js +23 -0
  64. package/dist/register-tool-groups/meta.js.map +1 -1
  65. package/dist/register-tools/runtime.d.ts +1 -1
  66. package/dist/register-tools/runtime.d.ts.map +1 -1
  67. package/dist/register-tools/runtime.js +9 -2
  68. package/dist/register-tools/runtime.js.map +1 -1
  69. package/dist/register-tools.d.ts +3 -1
  70. package/dist/register-tools.d.ts.map +1 -1
  71. package/dist/register-tools.js +7 -2
  72. package/dist/register-tools.js.map +1 -1
  73. package/dist/search/bm25-store.d.ts +6 -0
  74. package/dist/search/bm25-store.d.ts.map +1 -0
  75. package/dist/search/bm25-store.js +164 -0
  76. package/dist/search/bm25-store.js.map +1 -0
  77. package/dist/search/bm25.d.ts +30 -0
  78. package/dist/search/bm25.d.ts.map +1 -1
  79. package/dist/search/bm25.js +159 -34
  80. package/dist/search/bm25.js.map +1 -1
  81. package/dist/search/embed-gate.d.ts +17 -0
  82. package/dist/search/embed-gate.d.ts.map +1 -0
  83. package/dist/search/embed-gate.js +64 -0
  84. package/dist/search/embed-gate.js.map +1 -0
  85. package/dist/search/semantic.d.ts.map +1 -1
  86. package/dist/search/semantic.js +5 -2
  87. package/dist/search/semantic.js.map +1 -1
  88. package/dist/server-helpers/health-vitals.d.ts +45 -0
  89. package/dist/server-helpers/health-vitals.d.ts.map +1 -0
  90. package/dist/server-helpers/health-vitals.js +77 -0
  91. package/dist/server-helpers/health-vitals.js.map +1 -0
  92. package/dist/server-helpers/request-context.d.ts +34 -4
  93. package/dist/server-helpers/request-context.d.ts.map +1 -1
  94. package/dist/server-helpers/request-context.js +4 -0
  95. package/dist/server-helpers/request-context.js.map +1 -1
  96. package/dist/server.d.ts +9 -0
  97. package/dist/server.d.ts.map +1 -1
  98. package/dist/server.js +128 -6
  99. package/dist/server.js.map +1 -1
  100. package/dist/storage/_shared.d.ts +1 -1
  101. package/dist/storage/_shared.d.ts.map +1 -1
  102. package/dist/storage/_shared.js +41 -3
  103. package/dist/storage/_shared.js.map +1 -1
  104. package/dist/storage/index-migration.d.ts.map +1 -1
  105. package/dist/storage/index-migration.js +6 -2
  106. package/dist/storage/index-migration.js.map +1 -1
  107. package/dist/storage/index-store.d.ts +29 -0
  108. package/dist/storage/index-store.d.ts.map +1 -1
  109. package/dist/storage/index-store.js +112 -0
  110. package/dist/storage/index-store.js.map +1 -1
  111. package/dist/storage/registry.d.ts.map +1 -1
  112. package/dist/storage/registry.js +13 -1
  113. package/dist/storage/registry.js.map +1 -1
  114. package/dist/storage/sqlite/accessors.d.ts +17 -0
  115. package/dist/storage/sqlite/accessors.d.ts.map +1 -1
  116. package/dist/storage/sqlite/accessors.js +20 -0
  117. package/dist/storage/sqlite/accessors.js.map +1 -1
  118. package/dist/storage/sqlite/connection.d.ts +20 -0
  119. package/dist/storage/sqlite/connection.d.ts.map +1 -1
  120. package/dist/storage/sqlite/connection.js +61 -0
  121. package/dist/storage/sqlite/connection.js.map +1 -1
  122. package/dist/storage/sqlite/index-io.d.ts +5 -0
  123. package/dist/storage/sqlite/index-io.d.ts.map +1 -1
  124. package/dist/storage/sqlite/index-io.js +98 -9
  125. package/dist/storage/sqlite/index-io.js.map +1 -1
  126. package/dist/storage/sqlite/meta.d.ts +7 -0
  127. package/dist/storage/sqlite/meta.d.ts.map +1 -1
  128. package/dist/storage/sqlite/meta.js.map +1 -1
  129. package/dist/storage/sqlite/queries.d.ts +66 -0
  130. package/dist/storage/sqlite/queries.d.ts.map +1 -0
  131. package/dist/storage/sqlite/queries.js +196 -0
  132. package/dist/storage/sqlite/queries.js.map +1 -0
  133. package/dist/storage/sqlite/schema.d.ts +2 -2
  134. package/dist/storage/sqlite/schema.d.ts.map +1 -1
  135. package/dist/storage/sqlite/schema.js +36 -0
  136. package/dist/storage/sqlite/schema.js.map +1 -1
  137. package/dist/storage/sqlite-index-store.d.ts +3 -1
  138. package/dist/storage/sqlite-index-store.d.ts.map +1 -1
  139. package/dist/storage/sqlite-index-store.js +4 -1
  140. package/dist/storage/sqlite-index-store.js.map +1 -1
  141. package/dist/storage/telemetry/uploader.js +1 -1
  142. package/dist/storage/telemetry/uploader.js.map +1 -1
  143. package/dist/tools/boundary-tools.js +2 -2
  144. package/dist/tools/boundary-tools.js.map +1 -1
  145. package/dist/tools/community-tools.d.ts +7 -0
  146. package/dist/tools/community-tools.d.ts.map +1 -1
  147. package/dist/tools/community-tools.js +31 -14
  148. package/dist/tools/community-tools.js.map +1 -1
  149. package/dist/tools/complexity-tools.d.ts.map +1 -1
  150. package/dist/tools/complexity-tools.js +65 -45
  151. package/dist/tools/complexity-tools.js.map +1 -1
  152. package/dist/tools/conversation-index-tools.js +2 -2
  153. package/dist/tools/conversation-index-tools.js.map +1 -1
  154. package/dist/tools/conversation-search-tools.js +2 -2
  155. package/dist/tools/conversation-search-tools.js.map +1 -1
  156. package/dist/tools/coupling-tools.d.ts +2 -2
  157. package/dist/tools/coupling-tools.d.ts.map +1 -1
  158. package/dist/tools/coupling-tools.js +8 -13
  159. package/dist/tools/coupling-tools.js.map +1 -1
  160. package/dist/tools/diff-tools.d.ts.map +1 -1
  161. package/dist/tools/diff-tools.js +8 -14
  162. package/dist/tools/diff-tools.js.map +1 -1
  163. package/dist/tools/git-exec.d.ts +42 -0
  164. package/dist/tools/git-exec.d.ts.map +1 -0
  165. package/dist/tools/git-exec.js +53 -0
  166. package/dist/tools/git-exec.js.map +1 -0
  167. package/dist/tools/graph-tools.d.ts.map +1 -1
  168. package/dist/tools/graph-tools.js +5 -2
  169. package/dist/tools/graph-tools.js.map +1 -1
  170. package/dist/tools/hotspot-tools.d.ts +25 -0
  171. package/dist/tools/hotspot-tools.d.ts.map +1 -1
  172. package/dist/tools/hotspot-tools.js +24 -3
  173. package/dist/tools/hotspot-tools.js.map +1 -1
  174. package/dist/tools/impact-tools.d.ts.map +1 -1
  175. package/dist/tools/impact-tools.js +6 -9
  176. package/dist/tools/impact-tools.js.map +1 -1
  177. package/dist/tools/index-tools/file-indexer.d.ts +4 -0
  178. package/dist/tools/index-tools/file-indexer.d.ts.map +1 -1
  179. package/dist/tools/index-tools/file-indexer.js +155 -16
  180. package/dist/tools/index-tools/file-indexer.js.map +1 -1
  181. package/dist/tools/index-tools/folder-indexer.d.ts.map +1 -1
  182. package/dist/tools/index-tools/folder-indexer.js +5 -5
  183. package/dist/tools/index-tools/folder-indexer.js.map +1 -1
  184. package/dist/tools/index-tools/load-gate.d.ts +15 -0
  185. package/dist/tools/index-tools/load-gate.d.ts.map +1 -0
  186. package/dist/tools/index-tools/load-gate.js +57 -0
  187. package/dist/tools/index-tools/load-gate.js.map +1 -0
  188. package/dist/tools/index-tools/overload-guard.d.ts +16 -0
  189. package/dist/tools/index-tools/overload-guard.d.ts.map +1 -0
  190. package/dist/tools/index-tools/overload-guard.js +68 -0
  191. package/dist/tools/index-tools/overload-guard.js.map +1 -0
  192. package/dist/tools/index-tools/registry.d.ts +25 -1
  193. package/dist/tools/index-tools/registry.d.ts.map +1 -1
  194. package/dist/tools/index-tools/registry.js +149 -8
  195. package/dist/tools/index-tools/registry.js.map +1 -1
  196. package/dist/tools/index-tools/state.d.ts +20 -0
  197. package/dist/tools/index-tools/state.d.ts.map +1 -1
  198. package/dist/tools/index-tools/state.js +86 -0
  199. package/dist/tools/index-tools/state.js.map +1 -1
  200. package/dist/tools/index-tools/watcher.d.ts.map +1 -1
  201. package/dist/tools/index-tools/watcher.js +13 -5
  202. package/dist/tools/index-tools/watcher.js.map +1 -1
  203. package/dist/tools/index-tools/worktree-seed.d.ts +39 -1
  204. package/dist/tools/index-tools/worktree-seed.d.ts.map +1 -1
  205. package/dist/tools/index-tools/worktree-seed.js +154 -21
  206. package/dist/tools/index-tools/worktree-seed.js.map +1 -1
  207. package/dist/tools/index-tools.d.ts +2 -2
  208. package/dist/tools/index-tools.d.ts.map +1 -1
  209. package/dist/tools/index-tools.js +2 -2
  210. package/dist/tools/index-tools.js.map +1 -1
  211. package/dist/tools/journal-generator-helpers.d.ts.map +1 -1
  212. package/dist/tools/journal-generator-helpers.js +3 -1
  213. package/dist/tools/journal-generator-helpers.js.map +1 -1
  214. package/dist/tools/patterns/execution.d.ts.map +1 -1
  215. package/dist/tools/patterns/execution.js +28 -10
  216. package/dist/tools/patterns/execution.js.map +1 -1
  217. package/dist/tools/review-diff/checks/coupling.js +1 -1
  218. package/dist/tools/review-diff/checks/coupling.js.map +1 -1
  219. package/dist/tools/secret-detectors.d.ts +10 -1
  220. package/dist/tools/secret-detectors.d.ts.map +1 -1
  221. package/dist/tools/secret-detectors.js +16 -2
  222. package/dist/tools/secret-detectors.js.map +1 -1
  223. package/dist/tools/secret-file-scanner.d.ts +3 -1
  224. package/dist/tools/secret-file-scanner.d.ts.map +1 -1
  225. package/dist/tools/secret-file-scanner.js +4 -2
  226. package/dist/tools/secret-file-scanner.js.map +1 -1
  227. package/dist/tools/secret-tools.d.ts.map +1 -1
  228. package/dist/tools/secret-tools.js +6 -3
  229. package/dist/tools/secret-tools.js.map +1 -1
  230. package/dist/tools/status-tools.d.ts +20 -0
  231. package/dist/tools/status-tools.d.ts.map +1 -1
  232. package/dist/tools/status-tools.js +46 -0
  233. package/dist/tools/status-tools.js.map +1 -1
  234. package/dist/tools/symbol-analysis-tools.d.ts.map +1 -1
  235. package/dist/tools/symbol-analysis-tools.js +27 -2
  236. package/dist/tools/symbol-analysis-tools.js.map +1 -1
  237. package/dist/tools/symbol-reference-tools.js +4 -4
  238. package/dist/tools/symbol-reference-tools.js.map +1 -1
  239. package/dist/tools/symbol-tool-internals.d.ts +10 -0
  240. package/dist/tools/symbol-tool-internals.d.ts.map +1 -1
  241. package/dist/tools/symbol-tool-internals.js +16 -1
  242. package/dist/tools/symbol-tool-internals.js.map +1 -1
  243. package/dist/tools/test-impact-tools.js +1 -1
  244. package/dist/tools/test-impact-tools.js.map +1 -1
  245. package/dist/tools/wiki-overview-sources.d.ts.map +1 -1
  246. package/dist/tools/wiki-overview-sources.js +3 -0
  247. package/dist/tools/wiki-overview-sources.js.map +1 -1
  248. package/dist/utils/import-graph/collect.d.ts +2 -3
  249. package/dist/utils/import-graph/collect.d.ts.map +1 -1
  250. package/dist/utils/import-graph/collect.js +73 -8
  251. package/dist/utils/import-graph/collect.js.map +1 -1
  252. package/dist/utils/import-graph/edge-accumulator.d.ts.map +1 -1
  253. package/dist/utils/import-graph/edge-accumulator.js +5 -0
  254. package/dist/utils/import-graph/edge-accumulator.js.map +1 -1
  255. package/dist/utils/import-graph/edge-cache.d.ts +15 -0
  256. package/dist/utils/import-graph/edge-cache.d.ts.map +1 -0
  257. package/dist/utils/import-graph/edge-cache.js +98 -0
  258. package/dist/utils/import-graph/edge-cache.js.map +1 -0
  259. package/dist/utils/import-graph/language-imports.d.ts +2 -2
  260. package/dist/utils/import-graph/language-imports.d.ts.map +1 -1
  261. package/dist/utils/import-graph/language-imports.js.map +1 -1
  262. package/dist/utils/import-graph/path-map.d.ts +2 -2
  263. package/dist/utils/import-graph/path-map.d.ts.map +1 -1
  264. package/dist/utils/import-graph/path-map.js.map +1 -1
  265. package/dist/utils/import-graph/python-php-edge-collectors.d.ts +2 -3
  266. package/dist/utils/import-graph/python-php-edge-collectors.d.ts.map +1 -1
  267. package/dist/utils/import-graph/python-php-edge-collectors.js.map +1 -1
  268. package/dist/utils/import-graph/source-edge-collector.d.ts +2 -3
  269. package/dist/utils/import-graph/source-edge-collector.d.ts.map +1 -1
  270. package/dist/utils/import-graph/types.d.ts +36 -1
  271. package/dist/utils/import-graph/types.d.ts.map +1 -1
  272. package/dist/utils/import-graph/typescript-edge-collector.d.ts +2 -3
  273. package/dist/utils/import-graph/typescript-edge-collector.d.ts.map +1 -1
  274. package/dist/utils/import-graph/typescript-edge-collector.js +6 -2
  275. package/dist/utils/import-graph/typescript-edge-collector.js.map +1 -1
  276. package/dist/utils/import-graph/workspace-alias.d.ts +2 -2
  277. package/dist/utils/import-graph/workspace-alias.d.ts.map +1 -1
  278. package/dist/utils/import-graph/workspace-alias.js.map +1 -1
  279. package/dist/utils/language-detect.d.ts +2 -4
  280. package/dist/utils/language-detect.d.ts.map +1 -1
  281. package/dist/utils/language-detect.js +26 -4
  282. package/dist/utils/language-detect.js.map +1 -1
  283. package/dist/utils/ts-imports.d.ts +16 -0
  284. package/dist/utils/ts-imports.d.ts.map +1 -1
  285. package/dist/utils/ts-imports.js +65 -3
  286. package/dist/utils/ts-imports.js.map +1 -1
  287. package/package.json +1 -1
@@ -0,0 +1,68 @@
1
+ import { readVitals } from "../../server-helpers/health-vitals.js";
2
+ /**
3
+ * Refuse to START materialising an index while the daemon cannot afford it.
4
+ *
5
+ * A cold `getCodeIndex` reads a whole index into memory — 349 MB and hundreds of thousands of
6
+ * objects for the largest repo here — through a SYNCHRONOUS SQLite API. When the disk is saturated
7
+ * (measured 2026-09-02: 50,835 IOPS at ~6.9 KB, the process in uninterruptible I/O) that read takes
8
+ * minutes, and every other client waits behind it. The caller then hits its own timeout — 120 s in
9
+ * both harnesses — and reports "CODESIFT UNAVAILABLE", so the session runs with NO tools at all.
10
+ *
11
+ * That is the worst possible outcome and it is entirely avoidable: BM25 and the resident caches are
12
+ * usually still there and still answer in milliseconds. Losing semantic search is a degradation.
13
+ * Losing the whole server is an outage, and the difference is which one the agent is told.
14
+ *
15
+ * So this guard is deliberately narrow. It gates ONLY a cold materialisation — an index already
16
+ * resident is returned as normal, and every tool that does not need the full index is untouched. And
17
+ * it fails FAST with a message naming the condition, because two seconds of "busy, retry" is worth
18
+ * more to an agent than two minutes of silence followed by a timeout.
19
+ */
20
+ /**
21
+ * Event-loop lateness that means the thread is already oversubscribed. Below this a cold load is
22
+ * merely slow; above it, it is slow AND holding up everyone else, which is the part that turns one
23
+ * client's cold call into every client's outage.
24
+ *
25
+ * 2 s rather than something tighter: a lag of a few hundred milliseconds is ordinary during any
26
+ * large read, and refusing there would make the guard fire during healthy operation — an index that
27
+ * can never be loaded is worse than one that loads slowly.
28
+ */
29
+ const LAG_REFUSE_MS = 2_000;
30
+ /** Approaching the ceiling, another 349 MB is what tips the process into an OOM restart, and a
31
+ * restart drops every in-flight call rather than just this one. */
32
+ const HEAP_REFUSE_PCT = 85;
33
+ export function assessOverload(vitals = readVitals()) {
34
+ if (vitals.event_loop_lag_ms >= LAG_REFUSE_MS) {
35
+ return {
36
+ refuse: true,
37
+ reason: `the daemon's event loop is ${vitals.event_loop_lag_ms} ms behind — reading a whole index ` +
38
+ `now would block every other client for minutes`,
39
+ };
40
+ }
41
+ if (vitals.heap_used_pct >= HEAP_REFUSE_PCT) {
42
+ return {
43
+ refuse: true,
44
+ reason: `heap is at ${vitals.heap_used_mb}/${vitals.heap_limit_mb} MB (${vitals.heap_used_pct}%) — ` +
45
+ `loading another index risks an OOM restart, which drops every in-flight call`,
46
+ };
47
+ }
48
+ return { refuse: false };
49
+ }
50
+ /**
51
+ * Thrown instead of blocking. Structural detection (`isOverloadedError`) rather than `instanceof`,
52
+ * for the same reason as AmbiguousSymbolIdError: a duplicated module instance across a worker or
53
+ * bundler boundary breaks `instanceof` and would silently reclassify this as an unknown fault.
54
+ */
55
+ export class DaemonOverloadedError extends Error {
56
+ overloaded = true;
57
+ constructor(repoName, reason) {
58
+ super(`CodeSift is busy: ${reason}. "${repoName}" is not resident, so this call would have to read ` +
59
+ `it from disk. Nothing is broken and no retry is needed for tools that do not need the full ` +
60
+ `index — text and symbol search, outlines and file trees still answer. Retry this one in a ` +
61
+ `few seconds, or check /health (event_loop_lag_ms, heap_used_pct) to see when it clears.`);
62
+ this.name = "DaemonOverloadedError";
63
+ }
64
+ }
65
+ export function isOverloadedError(err) {
66
+ return typeof err === "object" && err !== null && err.overloaded === true;
67
+ }
68
+ //# sourceMappingURL=overload-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overload-guard.js","sourceRoot":"","sources":["../../../src/tools/index-tools/overload-guard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAEnE;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;;;;GAQG;AACH,MAAM,aAAa,GAAG,KAAK,CAAC;AAE5B;oEACoE;AACpE,MAAM,eAAe,GAAG,EAAE,CAAC;AAO3B,MAAM,UAAU,cAAc,CAAC,MAAM,GAAG,UAAU,EAAE;IAClD,IAAI,MAAM,CAAC,iBAAiB,IAAI,aAAa,EAAE,CAAC;QAC9C,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EACJ,8BAA8B,MAAM,CAAC,iBAAiB,qCAAqC;gBAC3F,gDAAgD;SACnD,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,IAAI,eAAe,EAAE,CAAC;QAC5C,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,MAAM,EACJ,cAAc,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,aAAa,QAAQ,MAAM,CAAC,aAAa,OAAO;gBAC5F,8EAA8E;SACjF,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AAC3B,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,UAAU,GAAG,IAAI,CAAC;IAC3B,YAAY,QAAgB,EAAE,MAAc;QAC1C,KAAK,CACH,qBAAqB,MAAM,MAAM,QAAQ,qDAAqD;YAC5F,6FAA6F;YAC7F,4FAA4F;YAC5F,yFAAyF,CAC5F,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAK,GAAgC,CAAC,UAAU,KAAK,IAAI,CAAC;AAC1G,CAAC"}
@@ -1,6 +1,7 @@
1
1
  import { type IndexSummary } from "../../storage/sqlite-index-store.js";
2
+ import type { SymbolQuery } from "../../storage/sqlite/queries.js";
2
3
  import type { BM25Index } from "../../search/bm25.js";
3
- import type { CodeIndex, RepoMeta } from "../../types.js";
4
+ import type { CodeIndex, RepoMeta, CodeSymbol } from "../../types.js";
4
5
  export interface RepoSummary {
5
6
  name: string;
6
7
  file_count: number;
@@ -34,6 +35,29 @@ export declare function getCodeIndex(repoName: string, options?: {
34
35
  * Returns `IndexSummary`, which has no `symbols` field at all rather than an empty one: a caller
35
36
  * that needs symbols must fail to compile, not read an empty array as "this repo has none".
36
37
  */
38
+ /**
39
+ * Symbols matching a predicate, without materialising the index.
40
+ *
41
+ * The tool-layer face of `findSymbols` (ADR-004 stage 2), resolving the repo name the same way
42
+ * `getCodeIndex` and `getIndexSummary` do so a caller never has to reach into the registry.
43
+ *
44
+ * An already-resident index answers from memory: going back to the database would be slower than
45
+ * filtering what is already being held, and it keeps the two paths returning the same objects.
46
+ * The reasoning about cache validity is `getIndexSummary`'s, unchanged.
47
+ */
48
+ export declare function findRepoSymbols(repoName: string, query: SymbolQuery, options?: {
49
+ skipFreshness?: boolean;
50
+ }): Promise<CodeSymbol[]>;
51
+ /**
52
+ * Fold over matching symbols in pages, for the tools that must see every symbol but never need
53
+ * them all resident — regex scanners, complexity scorers, adjacency builders.
54
+ *
55
+ * Returning `false` from `onBatch` stops the scan, which the wall-clock-budgeted tools need: without
56
+ * it a scorer that has run out of time keeps paging the rest of the table for results nobody reads.
57
+ */
58
+ export declare function streamRepoSymbols(repoName: string, query: SymbolQuery, onBatch: (batch: CodeSymbol[]) => void | boolean | Promise<void | boolean>, options?: {
59
+ skipFreshness?: boolean;
60
+ }): Promise<void>;
37
61
  export declare function getIndexSummary(repoName: string, options?: {
38
62
  skipFreshness?: boolean;
39
63
  }): Promise<IndexSummary | null>;
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/tools/index-tools/registry.ts"],"names":[],"mappings":"AAWA,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,qCAAqC,CAAC;AAmB7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAgBtD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG1D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC,CAa1I;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA+BxE;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAuB9E;AAED;;;GAGG;AACH;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACpC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA8C3B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACpC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAqE9B;AAmBD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CrE;AA2CD,iGAAiG;AACjG,wBAAgB,+BAA+B,IAAI,MAAM,EAAE,CAE1D;AAaD,wBAAgB,6BAA6B,IAAI,MAAM,CAEtD;AACD,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD;AAED;;;;;GAKG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,qBAAqB,CAAC,EAAE,MAAM,GAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,CAgF3C;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,CAoE3C"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/tools/index-tools/registry.ts"],"names":[],"mappings":"AAWA,OAAO,EAEL,KAAK,YAAY,EAClB,MAAM,qCAAqC,CAAC;AAK7C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAmBnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAetD,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAGtE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,WAAW,EAAE,GAAG,MAAM,EAAE,CAAC,CAa1I;AAED,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA+BxE;AAQD,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAiD9E;AAED;;;GAGG;AACH;;GAEG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACpC,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CA+D3B;AAED;;;;;;;;;;;GAWG;AACH;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,EAClB,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACpC,OAAO,CAAC,UAAU,EAAE,CAAC,CAcvB;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,EAClB,OAAO,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,GAAG,OAAO,GAAG,OAAO,CAAC,IAAI,GAAG,OAAO,CAAC,EAC1E,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACpC,OAAO,CAAC,IAAI,CAAC,CAmBf;AAiCD,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACpC,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAyE9B;AAmBD;;;GAGG;AACH,wBAAsB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6CrE;AA2CD,iGAAiG;AACjG,wBAAgB,+BAA+B,IAAI,MAAM,EAAE,CAE1D;AAaD,wBAAgB,6BAA6B,IAAI,MAAM,CAEtD;AACD,wBAAgB,kCAAkC,IAAI,IAAI,CAEzD;AAED;;;;;GAKG;AACH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,EAChB,qBAAqB,CAAC,EAAE,MAAM,GAC7B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,CAgF3C;AAED,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG,IAAI,CAAC,CAoE3C"}
@@ -5,17 +5,21 @@ import { EXTRACTOR_VERSIONS } from "../index-shared.js";
5
5
  import { loadIndex, loadIndexOrStale, loadIndexSummary, summariseIndex, collectExtractorVersionMismatches, } from "../../storage/index-store.js";
6
6
  import { classifyStorageError, } from "../../storage/sqlite-index-store.js";
7
7
  import { IndexStorageError } from "../../storage/sqlite-index-store.js";
8
+ import { assessOverload, DaemonOverloadedError } from "./overload-guard.js";
9
+ import { loadBM25Index, saveBM25Index } from "../../search/bm25-store.js";
10
+ import { findSymbols, streamSymbols } from "../../storage/index-store.js";
11
+ import { withIndexLoadSlot } from "./load-gate.js";
8
12
  import { getRepo, listRepos as listRegistryRepos, removeRepo, resolveRegisteredRepoMeta, getRepoName, } from "../../storage/registry.js";
9
13
  import { stopWatcher } from "../../storage/watcher.js";
10
14
  import { getEmbeddingPath, getEmbeddingMetaPath, loadEmbeddings, } from "../../storage/embedding-store.js";
11
15
  import { getChunkPath, getChunkEmbeddingPath } from "../../storage/chunk-store.js";
12
16
  import { getGraphPath } from "../../storage/graph-store.js";
13
17
  import { getSnapshotPath } from "../../storage/hash-snapshot.js";
14
- import { buildBM25Index } from "../../search/bm25.js";
18
+ import { buildBM25IndexYielding } from "../../search/bm25.js";
15
19
  import { loadConfig, localEmbeddingsDisabled, embeddingMemBudgetBytes } from "../../config.js";
16
20
  import { ensureIndexFresh } from "./file-indexer.js";
17
21
  import { indexFolder } from "./folder-indexer.js";
18
- import { activeWatchers, bm25Indexes, codeIndexes, embeddingCaches, embeddingCacheGenerations, embeddingCacheSources, cacheEmbeddingIfGenerationCurrent, invalidateEmbeddingCache, chunkCacheKey, invalidateEmbeddingCaches, } from "./state.js";
22
+ import { activeWatchers, bm25Indexes, codeIndexes, embeddingCaches, embeddingCacheGenerations, embeddingCacheSources, cacheEmbeddingIfGenerationCurrent, invalidateEmbeddingCache, chunkCacheKey, invalidateEmbeddingCaches, rememberBM25Index, touchBM25Index } from "./state.js";
19
23
  import { findWorkingTree } from "../../utils/worktree.js";
20
24
  export async function listAllRepos(options) {
21
25
  const config = loadConfig();
@@ -62,6 +66,11 @@ export async function invalidateCache(repoName) {
62
66
  await removeRepo(config.registryPath, repoName);
63
67
  return true;
64
68
  }
69
+ /**
70
+ * Below this, rebuilding is cheaper than the disk it would cost. 1 s is roughly where a repo is
71
+ * large enough that a restart is noticeable to whoever is waiting on the first search.
72
+ */
73
+ const BM25_PERSIST_MIN_BUILD_MS = 1_000;
65
74
  export async function getBM25Index(repoName) {
66
75
  // Resolve through the case-insensitive registry resolver (mirrors
67
76
  // getCodeIndex) so `local/Rewards-API` finds `local/rewards-api` and the
@@ -76,13 +85,36 @@ export async function getBM25Index(repoName) {
76
85
  const { resolvedName, meta } = resolved;
77
86
  await ensureIndexFresh(resolvedName);
78
87
  const cached = bm25Indexes.get(resolvedName);
79
- if (cached)
88
+ if (cached) {
89
+ touchBM25Index(resolvedName);
80
90
  return cached;
91
+ }
81
92
  const index = await loadIndex(meta.index_path);
82
93
  if (!index)
83
94
  return null;
84
- const bm25 = buildBM25Index(index.symbols);
85
- bm25Indexes.set(resolvedName, bm25);
95
+ // Reload before rebuilding. Measured on the largest index here (352,166 symbols, 12.9M tokens):
96
+ // a rebuild is 10.04 s, reconstructing the same maps from the sidecar is 0.70 s. The expensive
97
+ // half of a build is tokenising every symbol, and that result does not change until the index
98
+ // does — so it is worth writing down. A stale or unreadable sidecar returns null and we rebuild.
99
+ const restored = await loadBM25Index(meta.index_path, index);
100
+ if (restored) {
101
+ rememberBM25Index(resolvedName, restored);
102
+ return restored;
103
+ }
104
+ const buildStarted = Date.now();
105
+ const bm25 = await buildBM25IndexYielding(index.symbols);
106
+ const buildMs = Date.now() - buildStarted;
107
+ rememberBM25Index(resolvedName, bm25);
108
+ // Persist only when the rebuild actually cost something. The sidecar is not small — measured
109
+ // 112.5 MB for a 28k-symbol repo, more than twice its index database, and this machine has 865
110
+ // registered repos on the disk that is the real bottleneck. Gating on the MEASURED build time
111
+ // rather than a symbol count keeps the trade honest: the thing being bought back is exactly that
112
+ // duration, and a repo whose index rebuilds in 200 ms is not worth a hundred megabytes.
113
+ if (buildMs >= BM25_PERSIST_MIN_BUILD_MS) {
114
+ // Not awaited: the caller has a working index in memory, and making the first search wait on a
115
+ // cache write would spend the very seconds this exists to save.
116
+ void saveBM25Index(meta.index_path, bm25, index).catch(() => { });
117
+ }
86
118
  return bm25;
87
119
  }
88
120
  /**
@@ -104,7 +136,25 @@ export async function getCodeIndex(repoName, options) {
104
136
  const cached = codeIndexes.get(resolvedName);
105
137
  if (cached)
106
138
  return cached;
107
- const result = await loadIndexOrStale(meta.index_path, { ...EXTRACTOR_VERSIONS });
139
+ // Only a COLD load is gated: a resident index costs nothing and is returned above. See
140
+ // overload-guard.ts for why refusing fast beats blocking — the caller's 120 s timeout turns one
141
+ // slow read into a session with no CodeSift tools at all.
142
+ const overload = assessOverload();
143
+ if (overload.refuse) {
144
+ throw new DaemonOverloadedError(resolvedName, overload.reason ?? "overloaded");
145
+ }
146
+ const gated = await withIndexLoadSlot(async () => {
147
+ // Re-checked AFTER the wait, not before it. While this call queued, another may have loaded the
148
+ // same repo — without this the gate would only STAGGER ten sessions touching one repo into ten
149
+ // identical 349 MB allocations instead of preventing nine of them.
150
+ const nowCached = codeIndexes.get(resolvedName);
151
+ if (nowCached)
152
+ return { cached: nowCached };
153
+ return { fresh: await loadIndexOrStale(meta.index_path, { ...EXTRACTOR_VERSIONS }) };
154
+ });
155
+ if ("cached" in gated)
156
+ return gated.cached;
157
+ const result = gated.fresh;
108
158
  if (!result)
109
159
  return null;
110
160
  if (result.status === "unreadable") {
@@ -144,6 +194,93 @@ export async function getCodeIndex(repoName, options) {
144
194
  * Returns `IndexSummary`, which has no `symbols` field at all rather than an empty one: a caller
145
195
  * that needs symbols must fail to compile, not read an empty array as "this repo has none".
146
196
  */
197
+ /**
198
+ * Symbols matching a predicate, without materialising the index.
199
+ *
200
+ * The tool-layer face of `findSymbols` (ADR-004 stage 2), resolving the repo name the same way
201
+ * `getCodeIndex` and `getIndexSummary` do so a caller never has to reach into the registry.
202
+ *
203
+ * An already-resident index answers from memory: going back to the database would be slower than
204
+ * filtering what is already being held, and it keeps the two paths returning the same objects.
205
+ * The reasoning about cache validity is `getIndexSummary`'s, unchanged.
206
+ */
207
+ export async function findRepoSymbols(repoName, query, options) {
208
+ const config = loadConfig();
209
+ const resolved = await resolveRegisteredRepoMeta(config.registryPath, repoName);
210
+ if (!resolved)
211
+ return [];
212
+ const { resolvedName, meta } = resolved;
213
+ if (!options?.skipFreshness) {
214
+ await ensureIndexFresh(resolvedName);
215
+ }
216
+ const cached = codeIndexes.get(resolvedName);
217
+ if (cached)
218
+ return filterCachedSymbols(cached.symbols, query);
219
+ return findSymbols(meta.index_path, query);
220
+ }
221
+ /**
222
+ * Fold over matching symbols in pages, for the tools that must see every symbol but never need
223
+ * them all resident — regex scanners, complexity scorers, adjacency builders.
224
+ *
225
+ * Returning `false` from `onBatch` stops the scan, which the wall-clock-budgeted tools need: without
226
+ * it a scorer that has run out of time keeps paging the rest of the table for results nobody reads.
227
+ */
228
+ export async function streamRepoSymbols(repoName, query, onBatch, options) {
229
+ const config = loadConfig();
230
+ const resolved = await resolveRegisteredRepoMeta(config.registryPath, repoName);
231
+ if (!resolved)
232
+ return;
233
+ const { resolvedName, meta } = resolved;
234
+ if (!options?.skipFreshness) {
235
+ await ensureIndexFresh(resolvedName);
236
+ }
237
+ // An already-resident index is folded directly: paging it back out of the database would be
238
+ // strictly more work than walking what is already in memory.
239
+ const cached = codeIndexes.get(resolvedName);
240
+ if (cached) {
241
+ await onBatch(filterCachedSymbols(cached.symbols, query));
242
+ return;
243
+ }
244
+ return streamSymbols(meta.index_path, query, onBatch);
245
+ }
246
+ /**
247
+ * The in-memory equivalent of the SQL predicate, for when the index is already resident.
248
+ *
249
+ * Kept beside its caller rather than shared with the storage layer's JSON branch: they answer the
250
+ * same question over different inputs, and a shared helper would have to be exported from storage
251
+ * into tools purely to be reused, which is how a "narrow read" acquires a dependency on the wide
252
+ * one. Both are asserted against the SQL by the backend-parity tests.
253
+ */
254
+ function filterCachedSymbols(symbols, query) {
255
+ const ids = query.ids === undefined ? null : new Set(query.ids);
256
+ const out = [];
257
+ for (const symbol of symbols) {
258
+ if (query.limit !== undefined && out.length >= query.limit)
259
+ break;
260
+ if (query.file !== undefined && symbol.file !== query.file)
261
+ continue;
262
+ if (query.name !== undefined && symbol.name !== query.name)
263
+ continue;
264
+ if (query.namePrefix !== undefined && !symbol.name.startsWith(query.namePrefix))
265
+ continue;
266
+ if (query.kind !== undefined && symbol.kind !== query.kind)
267
+ continue;
268
+ if (query.parent !== undefined && symbol.parent !== query.parent)
269
+ continue;
270
+ if (ids !== null && !ids.has(symbol.id))
271
+ continue;
272
+ if (query.withSource) {
273
+ out.push(symbol);
274
+ }
275
+ else {
276
+ // Same contract as the SQL projection: the key is ABSENT, not undefined. A symbol carrying
277
+ // `source: undefined` reads as one whose source is genuinely empty.
278
+ const { source: _dropped, ...rest } = symbol;
279
+ out.push(rest);
280
+ }
281
+ }
282
+ return out;
283
+ }
147
284
  export async function getIndexSummary(repoName, options) {
148
285
  const config = loadConfig();
149
286
  const resolved = await resolveRegisteredRepoMeta(config.registryPath, repoName);
@@ -163,8 +300,12 @@ export async function getIndexSummary(repoName, options) {
163
300
  // so there is no window in which a cached index becomes stale. Two independent reviewers read
164
301
  // this shortcut as a missing check, which is why it is spelled out rather than left implicit.
165
302
  const cached = codeIndexes.get(resolvedName);
303
+ // `indexPath` travels with the summary so consumers that cache something alongside the index —
304
+ // the parsed-imports cache — can find the right place without reaching into the registry
305
+ // themselves. Both return paths carry it, or the cache would be active on one and silently off
306
+ // on the other depending on whether the index happened to be resident.
166
307
  if (cached)
167
- return summariseIndex(cached);
308
+ return { ...summariseIndex(cached), indexPath: meta.index_path };
168
309
  try {
169
310
  const summary = await loadIndexSummary(meta.index_path);
170
311
  if (summary === null)
@@ -190,7 +331,7 @@ export async function getIndexSummary(repoName, options) {
190
331
  `Run index_folder to refresh.`);
191
332
  return null;
192
333
  }
193
- return summary;
334
+ return { ...summary, indexPath: meta.index_path };
194
335
  }
195
336
  catch (err) {
196
337
  const code = classifyStorageError(err);
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/tools/index-tools/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/tools/index-tools/registry.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,26 @@ import type { BM25Index } from "../../search/bm25.js";
2
2
  import type { CodeIndex } from "../../types.js";
3
3
  export declare const activeWatchers: Map<string, import("@parcel/watcher").AsyncSubscription>;
4
4
  export declare const bm25Indexes: Map<string, BM25Index>;
5
+ /**
6
+ * Keep the BM25 cache inside a budget, evicting least-recently-used first.
7
+ *
8
+ * This cache had NO bound of any kind — no LRU, no budget, no entry cap — while every neighbour has
9
+ * one (`CODESIFT_MAX_INDEX_CACHE_MB` for indexes, `CODESIFT_MAX_EMBEDDING_MEM_MB` for embeddings, a
10
+ * watcher cap, an LRU parse cache). It survived because eviction happened by ACCIDENT: every
11
+ * `index_file` deleted its repo's entry, and the PostToolUse hook fires on every agent edit, so the
12
+ * map was constantly being emptied by the thing that looked like cache invalidation.
13
+ *
14
+ * 69a49cd made those edits update the index in place instead of dropping it — a 595x win on the
15
+ * edit path, and it removed the only thing keeping this map small. The daemon then climbed to the
16
+ * 16 GB heap ceiling and crash-looped: 15.1 GB, 16.0 GB, restart, repeat, with clients that
17
+ * happened to initialize during a restart window getting no tools at all for their whole session.
18
+ *
19
+ * At ~400 MB for a large repository, the budget holds two or three. That is the point: a repo
20
+ * evicted here is rebuilt on next use, which now costs one build rather than one per edit.
21
+ */
22
+ export declare function rememberBM25Index(repoName: string, index: BM25Index): void;
23
+ /** Mark an entry as most-recently-used, so eviction drops cold repos rather than merely old ones. */
24
+ export declare function touchBM25Index(repoName: string): void;
5
25
  export declare const codeIndexes: Map<string, CodeIndex>;
6
26
  export declare const embeddingCaches: Map<string, Map<string, Float32Array<ArrayBufferLike>>>;
7
27
  export declare const embeddingCacheGenerations: Map<string, number>;
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/tools/index-tools/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,eAAO,MAAM,cAAc,0DAA+B,CAAC;AAC3D,eAAO,MAAM,WAAW,wBAA+B,CAAC;AACxD,eAAO,MAAM,WAAW,wBAA+B,CAAC;AACxD,eAAO,MAAM,eAAe,yDAA+C,CAAC;AAC5E,eAAO,MAAM,yBAAyB,qBAA4B,CAAC;AACnE,eAAO,MAAM,qBAAqB,qBAA4B,CAAC;AAE/D,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI/D;AAED,wFAAwF;AACxF,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAKT;AAED,eAAO,MAAM,eAAe,qBAA4B,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAShE;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAa5F;AAID,2FAA2F;AAC3F,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,6DAA6D;AAC7D,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEzD"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/tools/index-tools/state.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAGhD,eAAO,MAAM,cAAc,0DAA+B,CAAC;AAC3D,eAAO,MAAM,WAAW,wBAA+B,CAAC;AAkBxD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,CAI1E;AAED,qGAAqG;AACrG,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAKrD;AAuCD,eAAO,MAAM,WAAW,wBAA+B,CAAC;AACxD,eAAO,MAAM,eAAe,yDAA+C,CAAC;AAC5E,eAAO,MAAM,yBAAyB,qBAA4B,CAAC;AACnE,eAAO,MAAM,qBAAqB,qBAA4B,CAAC;AAE/D,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI/D;AAED,wFAAwF;AACxF,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACrC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAKT;AAED,eAAO,MAAM,eAAe,qBAA4B,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAShE;AAMD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,oBAAoB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAa5F;AAID,2FAA2F;AAC3F,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,uBAAuB,IAAI,MAAM,CAEhD;AAED,6DAA6D;AAC7D,wBAAgB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAEzD"}
@@ -1,5 +1,91 @@
1
+ import { totalmem as osTotalmem } from "node:os";
1
2
  export const activeWatchers = new Map();
2
3
  export const bm25Indexes = new Map();
4
+ /**
5
+ * Bytes a BM25 index occupies, from its own token totals.
6
+ *
7
+ * Measured with a heapUsed delta around a real build: 352,125 symbols / 12,882,846 tokens cost
8
+ * 399 MB, i.e. 32.5 B per token — the postings maps dominate, so tokens are the quantity to price
9
+ * by, not symbols. Rounded UP to 40, on the same reasoning as the index footprint: over-reporting
10
+ * evicts something that would have fitted, under-reporting silently breaks the budget.
11
+ */
12
+ function bm25FootprintBytes(index) {
13
+ let tokens = 0;
14
+ for (const field of Object.keys(index.totalFieldLengths)) {
15
+ tokens += index.totalFieldLengths[field];
16
+ }
17
+ return tokens * 40;
18
+ }
19
+ /**
20
+ * Keep the BM25 cache inside a budget, evicting least-recently-used first.
21
+ *
22
+ * This cache had NO bound of any kind — no LRU, no budget, no entry cap — while every neighbour has
23
+ * one (`CODESIFT_MAX_INDEX_CACHE_MB` for indexes, `CODESIFT_MAX_EMBEDDING_MEM_MB` for embeddings, a
24
+ * watcher cap, an LRU parse cache). It survived because eviction happened by ACCIDENT: every
25
+ * `index_file` deleted its repo's entry, and the PostToolUse hook fires on every agent edit, so the
26
+ * map was constantly being emptied by the thing that looked like cache invalidation.
27
+ *
28
+ * 69a49cd made those edits update the index in place instead of dropping it — a 595x win on the
29
+ * edit path, and it removed the only thing keeping this map small. The daemon then climbed to the
30
+ * 16 GB heap ceiling and crash-looped: 15.1 GB, 16.0 GB, restart, repeat, with clients that
31
+ * happened to initialize during a restart window getting no tools at all for their whole session.
32
+ *
33
+ * At ~400 MB for a large repository, the budget holds two or three. That is the point: a repo
34
+ * evicted here is rebuilt on next use, which now costs one build rather than one per edit.
35
+ */
36
+ export function rememberBM25Index(repoName, index) {
37
+ bm25Indexes.delete(repoName);
38
+ bm25Indexes.set(repoName, index);
39
+ evictBM25OverBudget(repoName);
40
+ }
41
+ /** Mark an entry as most-recently-used, so eviction drops cold repos rather than merely old ones. */
42
+ export function touchBM25Index(repoName) {
43
+ const existing = bm25Indexes.get(repoName);
44
+ if (!existing)
45
+ return;
46
+ bm25Indexes.delete(repoName);
47
+ bm25Indexes.set(repoName, existing);
48
+ }
49
+ function evictBM25OverBudget(pinned) {
50
+ const budget = maxBM25CacheBytes();
51
+ let total = 0;
52
+ for (const index of bm25Indexes.values())
53
+ total += bm25FootprintBytes(index);
54
+ if (total <= budget)
55
+ return;
56
+ for (const [name, index] of bm25Indexes) {
57
+ if (total <= budget)
58
+ break;
59
+ // Never evict the repo being served, even when it alone exceeds the budget — otherwise every
60
+ // call into a large repository would rebuild and immediately discard its own index.
61
+ if (name === pinned)
62
+ continue;
63
+ total -= bm25FootprintBytes(index);
64
+ bm25Indexes.delete(name);
65
+ }
66
+ }
67
+ function maxBM25CacheBytes() {
68
+ const raw = process.env["CODESIFT_MAX_BM25_CACHE_MB"];
69
+ if (raw !== undefined) {
70
+ const parsed = Number.parseInt(raw, 10);
71
+ if (Number.isFinite(parsed) && parsed > 0)
72
+ return parsed * 1024 * 1024;
73
+ }
74
+ // Same RAM tiers as the index and embedding budgets, so the three agree about what a machine
75
+ // this size is willing to hold resident.
76
+ const totalGb = totalSystemMemoryBytes() / 1024 ** 3;
77
+ const mb = totalGb <= 16 ? 256 : totalGb <= 32 ? 512 : 1024;
78
+ return mb * 1024 * 1024;
79
+ }
80
+ function totalSystemMemoryBytes() {
81
+ try {
82
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
83
+ return osTotalmem();
84
+ }
85
+ catch {
86
+ return 8 * 1024 ** 3;
87
+ }
88
+ }
3
89
  export const codeIndexes = new Map();
4
90
  export const embeddingCaches = new Map();
5
91
  export const embeddingCacheGenerations = new Map();
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/tools/index-tools/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/tools/index-tools/state.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/tools/index-tools/watcher.ts"],"names":[],"mappings":"AAuBA;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAiDf"}
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../../src/tools/index-tools/watcher.ts"],"names":[],"mappings":"AAwBA;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAiDf"}
@@ -4,6 +4,7 @@ import { startWatcher, stopWatcher } from "../../storage/watcher.js";
4
4
  import { loadConfig } from "../../config.js";
5
5
  import { onFileChanged as scanOnChanged, onFileDeleted as scanOnDeleted, scanFileForSecrets } from "../secret-scan-shared.js";
6
6
  import { parseOneFile } from "./parse.js";
7
+ import { updateBM25ForFile } from "../../search/bm25.js";
7
8
  import { activeWatchers, bm25Indexes, codeIndexes, invalidateEmbeddingCaches } from "./state.js";
8
9
  const DEFAULT_MAX_WATCHERS = 8;
9
10
  function getMaxWatchers() {
@@ -95,15 +96,18 @@ async function handleFileChange(repoRoot, repoName, indexPath, relativeFile) {
95
96
  await saveIncremental(indexPath, relativeFile, result.symbols, result.entry);
96
97
  if (loadConfig().secretScanEnabled) {
97
98
  try {
98
- await scanFileForSecrets(fullPath, relativeFile, repoName, result.symbols);
99
+ await scanFileForSecrets(fullPath, relativeFile, repoName, () => result.symbols);
99
100
  }
100
101
  catch (err) {
101
102
  const message = err instanceof Error ? err.message : String(err);
102
103
  console.warn(`[codesift] Secret scan failed for ${relativeFile}: ${message}`);
103
104
  }
104
105
  }
105
- // Invalidate caches — lazy rebuild on next query via getBM25Index()
106
- bm25Indexes.delete(repoName);
106
+ // Swap this file's symbols in place rather than dropping the index — see updateBM25ForFile.
107
+ const cachedBm25 = bm25Indexes.get(repoName);
108
+ if (cachedBm25) {
109
+ updateBM25ForFile(cachedBm25, relativeFile, result.symbols);
110
+ }
107
111
  codeIndexes.delete(repoName);
108
112
  invalidateEmbeddingCaches(repoName);
109
113
  }
@@ -113,8 +117,12 @@ async function handleFileChange(repoRoot, repoName, indexPath, relativeFile) {
113
117
  */
114
118
  async function handleFileDelete(repoRoot, repoName, indexPath, relativeFile) {
115
119
  await removeFileFromIndex(indexPath, relativeFile);
116
- // Invalidate caches — lazy rebuild on next query via getBM25Index()
117
- bm25Indexes.delete(repoName);
120
+ // A deletion is the same swap with nothing to put back: drop the file's symbols, keep the rest
121
+ // of the index. Dropping the whole index here would make `rm` as expensive as a reindex.
122
+ const cachedBm25 = bm25Indexes.get(repoName);
123
+ if (cachedBm25) {
124
+ updateBM25ForFile(cachedBm25, relativeFile, []);
125
+ }
118
126
  codeIndexes.delete(repoName);
119
127
  invalidateEmbeddingCaches(repoName);
120
128
  scanOnDeleted(repoName, relativeFile);