codegraph-java 0.1.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 (866) hide show
  1. package/README.md +131 -0
  2. package/dist/base-graph/index.d.ts +57 -0
  3. package/dist/base-graph/index.d.ts.map +1 -0
  4. package/dist/base-graph/index.js +175 -0
  5. package/dist/base-graph/index.js.map +1 -0
  6. package/dist/bin/codegraph.d.ts +28 -0
  7. package/dist/bin/codegraph.d.ts.map +1 -0
  8. package/dist/bin/codegraph.js +2615 -0
  9. package/dist/bin/codegraph.js.map +1 -0
  10. package/dist/bin/command-supervision.d.ts +49 -0
  11. package/dist/bin/command-supervision.d.ts.map +1 -0
  12. package/dist/bin/command-supervision.js +95 -0
  13. package/dist/bin/command-supervision.js.map +1 -0
  14. package/dist/bin/fatal-handler.d.ts +20 -0
  15. package/dist/bin/fatal-handler.d.ts.map +1 -0
  16. package/dist/bin/fatal-handler.js +118 -0
  17. package/dist/bin/fatal-handler.js.map +1 -0
  18. package/dist/bin/node-version-check.d.ts +45 -0
  19. package/dist/bin/node-version-check.d.ts.map +1 -0
  20. package/dist/bin/node-version-check.js +98 -0
  21. package/dist/bin/node-version-check.js.map +1 -0
  22. package/dist/bin/uninstall.d.ts +14 -0
  23. package/dist/bin/uninstall.d.ts.map +1 -0
  24. package/dist/bin/uninstall.js +36 -0
  25. package/dist/bin/uninstall.js.map +1 -0
  26. package/dist/context/formatter.d.ts +36 -0
  27. package/dist/context/formatter.d.ts.map +1 -0
  28. package/dist/context/formatter.js +269 -0
  29. package/dist/context/formatter.js.map +1 -0
  30. package/dist/context/index.d.ts +131 -0
  31. package/dist/context/index.d.ts.map +1 -0
  32. package/dist/context/index.js +1378 -0
  33. package/dist/context/index.js.map +1 -0
  34. package/dist/context/markers.d.ts +19 -0
  35. package/dist/context/markers.d.ts.map +1 -0
  36. package/dist/context/markers.js +22 -0
  37. package/dist/context/markers.js.map +1 -0
  38. package/dist/db/index.d.ts +380 -0
  39. package/dist/db/index.d.ts.map +1 -0
  40. package/dist/db/index.js +854 -0
  41. package/dist/db/index.js.map +1 -0
  42. package/dist/db/migrations.d.ts +44 -0
  43. package/dist/db/migrations.d.ts.map +1 -0
  44. package/dist/db/migrations.js +255 -0
  45. package/dist/db/migrations.js.map +1 -0
  46. package/dist/db/queries.d.ts +1060 -0
  47. package/dist/db/queries.d.ts.map +1 -0
  48. package/dist/db/queries.js +3191 -0
  49. package/dist/db/queries.js.map +1 -0
  50. package/dist/db/schema.sql +209 -0
  51. package/dist/db/sqlite-adapter.d.ts +55 -0
  52. package/dist/db/sqlite-adapter.d.ts.map +1 -0
  53. package/dist/db/sqlite-adapter.js +135 -0
  54. package/dist/db/sqlite-adapter.js.map +1 -0
  55. package/dist/db/wal-valve.d.ts +119 -0
  56. package/dist/db/wal-valve.d.ts.map +1 -0
  57. package/dist/db/wal-valve.js +290 -0
  58. package/dist/db/wal-valve.js.map +1 -0
  59. package/dist/directory.d.ts +213 -0
  60. package/dist/directory.d.ts.map +1 -0
  61. package/dist/directory.js +781 -0
  62. package/dist/directory.js.map +1 -0
  63. package/dist/errors.d.ts +150 -0
  64. package/dist/errors.d.ts.map +1 -0
  65. package/dist/errors.js +234 -0
  66. package/dist/errors.js.map +1 -0
  67. package/dist/extraction/extraction-version.d.ts +25 -0
  68. package/dist/extraction/extraction-version.d.ts.map +1 -0
  69. package/dist/extraction/extraction-version.js +28 -0
  70. package/dist/extraction/extraction-version.js.map +1 -0
  71. package/dist/extraction/function-ref.d.ts +118 -0
  72. package/dist/extraction/function-ref.d.ts.map +1 -0
  73. package/dist/extraction/function-ref.js +746 -0
  74. package/dist/extraction/function-ref.js.map +1 -0
  75. package/dist/extraction/generated-detection.d.ts +66 -0
  76. package/dist/extraction/generated-detection.d.ts.map +1 -0
  77. package/dist/extraction/generated-detection.js +248 -0
  78. package/dist/extraction/generated-detection.js.map +1 -0
  79. package/dist/extraction/grammars.d.ts +148 -0
  80. package/dist/extraction/grammars.d.ts.map +1 -0
  81. package/dist/extraction/grammars.js +558 -0
  82. package/dist/extraction/grammars.js.map +1 -0
  83. package/dist/extraction/index.d.ts +367 -0
  84. package/dist/extraction/index.d.ts.map +1 -0
  85. package/dist/extraction/index.js +2833 -0
  86. package/dist/extraction/index.js.map +1 -0
  87. package/dist/extraction/kernel/decode.d.ts +9 -0
  88. package/dist/extraction/kernel/decode.d.ts.map +1 -0
  89. package/dist/extraction/kernel/decode.js +162 -0
  90. package/dist/extraction/kernel/decode.js.map +1 -0
  91. package/dist/extraction/kernel/index.d.ts +64 -0
  92. package/dist/extraction/kernel/index.d.ts.map +1 -0
  93. package/dist/extraction/kernel/index.js +204 -0
  94. package/dist/extraction/kernel/index.js.map +1 -0
  95. package/dist/extraction/kernel/layout.d.ts +101 -0
  96. package/dist/extraction/kernel/layout.d.ts.map +1 -0
  97. package/dist/extraction/kernel/layout.js +104 -0
  98. package/dist/extraction/kernel/layout.js.map +1 -0
  99. package/dist/extraction/kernel/loader.d.ts +103 -0
  100. package/dist/extraction/kernel/loader.d.ts.map +1 -0
  101. package/dist/extraction/kernel/loader.js +146 -0
  102. package/dist/extraction/kernel/loader.js.map +1 -0
  103. package/dist/extraction/languages/c-cpp.d.ts +124 -0
  104. package/dist/extraction/languages/c-cpp.d.ts.map +1 -0
  105. package/dist/extraction/languages/c-cpp.js +1689 -0
  106. package/dist/extraction/languages/c-cpp.js.map +1 -0
  107. package/dist/extraction/languages/index.d.ts +11 -0
  108. package/dist/extraction/languages/index.d.ts.map +1 -0
  109. package/dist/extraction/languages/index.js +15 -0
  110. package/dist/extraction/languages/index.js.map +1 -0
  111. package/dist/extraction/languages/java.d.ts +3 -0
  112. package/dist/extraction/languages/java.d.ts.map +1 -0
  113. package/dist/extraction/languages/java.js +315 -0
  114. package/dist/extraction/languages/java.js.map +1 -0
  115. package/dist/extraction/languages/rust.d.ts +23 -0
  116. package/dist/extraction/languages/rust.d.ts.map +1 -0
  117. package/dist/extraction/languages/rust.js +169 -0
  118. package/dist/extraction/languages/rust.js.map +1 -0
  119. package/dist/extraction/parse-pool.d.ts +167 -0
  120. package/dist/extraction/parse-pool.d.ts.map +1 -0
  121. package/dist/extraction/parse-pool.js +421 -0
  122. package/dist/extraction/parse-pool.js.map +1 -0
  123. package/dist/extraction/parse-worker.d.ts +8 -0
  124. package/dist/extraction/parse-worker.d.ts.map +1 -0
  125. package/dist/extraction/parse-worker.js +138 -0
  126. package/dist/extraction/parse-worker.js.map +1 -0
  127. package/dist/extraction/store-worker.d.ts +24 -0
  128. package/dist/extraction/store-worker.d.ts.map +1 -0
  129. package/dist/extraction/store-worker.js +139 -0
  130. package/dist/extraction/store-worker.js.map +1 -0
  131. package/dist/extraction/store-writer.d.ts +63 -0
  132. package/dist/extraction/store-writer.d.ts.map +1 -0
  133. package/dist/extraction/store-writer.js +174 -0
  134. package/dist/extraction/store-writer.js.map +1 -0
  135. package/dist/extraction/syntax-tokens.d.ts +103 -0
  136. package/dist/extraction/syntax-tokens.d.ts.map +1 -0
  137. package/dist/extraction/syntax-tokens.js +381 -0
  138. package/dist/extraction/syntax-tokens.js.map +1 -0
  139. package/dist/extraction/tree-sitter-helpers.d.ts +28 -0
  140. package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -0
  141. package/dist/extraction/tree-sitter-helpers.js +153 -0
  142. package/dist/extraction/tree-sitter-helpers.js.map +1 -0
  143. package/dist/extraction/tree-sitter-types.d.ts +260 -0
  144. package/dist/extraction/tree-sitter-types.d.ts.map +1 -0
  145. package/dist/extraction/tree-sitter-types.js +10 -0
  146. package/dist/extraction/tree-sitter-types.js.map +1 -0
  147. package/dist/extraction/tree-sitter.d.ts +745 -0
  148. package/dist/extraction/tree-sitter.d.ts.map +1 -0
  149. package/dist/extraction/tree-sitter.js +6725 -0
  150. package/dist/extraction/tree-sitter.js.map +1 -0
  151. package/dist/extraction/wasm/tree-sitter-java.wasm +0 -0
  152. package/dist/extraction/wasm-runtime-flags.d.ts +53 -0
  153. package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -0
  154. package/dist/extraction/wasm-runtime-flags.js +130 -0
  155. package/dist/extraction/wasm-runtime-flags.js.map +1 -0
  156. package/dist/graph/branch-guards.d.ts +248 -0
  157. package/dist/graph/branch-guards.d.ts.map +1 -0
  158. package/dist/graph/branch-guards.js +2231 -0
  159. package/dist/graph/branch-guards.js.map +1 -0
  160. package/dist/graph/dead-code.d.ts +251 -0
  161. package/dist/graph/dead-code.d.ts.map +1 -0
  162. package/dist/graph/dead-code.js +756 -0
  163. package/dist/graph/dead-code.js.map +1 -0
  164. package/dist/graph/dynamic-boundary-report.d.ts +121 -0
  165. package/dist/graph/dynamic-boundary-report.d.ts.map +1 -0
  166. package/dist/graph/dynamic-boundary-report.js +283 -0
  167. package/dist/graph/dynamic-boundary-report.js.map +1 -0
  168. package/dist/graph/index.d.ts +12 -0
  169. package/dist/graph/index.d.ts.map +1 -0
  170. package/dist/graph/index.js +28 -0
  171. package/dist/graph/index.js.map +1 -0
  172. package/dist/graph/named-symbol-flow.d.ts +153 -0
  173. package/dist/graph/named-symbol-flow.d.ts.map +1 -0
  174. package/dist/graph/named-symbol-flow.js +609 -0
  175. package/dist/graph/named-symbol-flow.js.map +1 -0
  176. package/dist/graph/queries.d.ts +106 -0
  177. package/dist/graph/queries.d.ts.map +1 -0
  178. package/dist/graph/queries.js +341 -0
  179. package/dist/graph/queries.js.map +1 -0
  180. package/dist/graph/traversal.d.ts +127 -0
  181. package/dist/graph/traversal.d.ts.map +1 -0
  182. package/dist/graph/traversal.js +599 -0
  183. package/dist/graph/traversal.js.map +1 -0
  184. package/dist/graph/type-hierarchy.d.ts +155 -0
  185. package/dist/graph/type-hierarchy.d.ts.map +1 -0
  186. package/dist/graph/type-hierarchy.js +382 -0
  187. package/dist/graph/type-hierarchy.js.map +1 -0
  188. package/dist/index.d.ts +886 -0
  189. package/dist/index.d.ts.map +1 -0
  190. package/dist/index.js +2019 -0
  191. package/dist/index.js.map +1 -0
  192. package/dist/installer/beta-signup.d.ts +54 -0
  193. package/dist/installer/beta-signup.d.ts.map +1 -0
  194. package/dist/installer/beta-signup.js +178 -0
  195. package/dist/installer/beta-signup.js.map +1 -0
  196. package/dist/installer/config-writer.d.ts +28 -0
  197. package/dist/installer/config-writer.d.ts.map +1 -0
  198. package/dist/installer/config-writer.js +91 -0
  199. package/dist/installer/config-writer.js.map +1 -0
  200. package/dist/installer/index.d.ts +143 -0
  201. package/dist/installer/index.d.ts.map +1 -0
  202. package/dist/installer/index.js +632 -0
  203. package/dist/installer/index.js.map +1 -0
  204. package/dist/installer/instructions-template.d.ts +41 -0
  205. package/dist/installer/instructions-template.d.ts.map +1 -0
  206. package/dist/installer/instructions-template.js +53 -0
  207. package/dist/installer/instructions-template.js.map +1 -0
  208. package/dist/installer/targets/antigravity.d.ts +57 -0
  209. package/dist/installer/targets/antigravity.d.ts.map +1 -0
  210. package/dist/installer/targets/antigravity.js +308 -0
  211. package/dist/installer/targets/antigravity.js.map +1 -0
  212. package/dist/installer/targets/claude.d.ts +62 -0
  213. package/dist/installer/targets/claude.d.ts.map +1 -0
  214. package/dist/installer/targets/claude.js +486 -0
  215. package/dist/installer/targets/claude.js.map +1 -0
  216. package/dist/installer/targets/codex.d.ts +32 -0
  217. package/dist/installer/targets/codex.d.ts.map +1 -0
  218. package/dist/installer/targets/codex.js +202 -0
  219. package/dist/installer/targets/codex.js.map +1 -0
  220. package/dist/installer/targets/copilot-cli.d.ts +32 -0
  221. package/dist/installer/targets/copilot-cli.d.ts.map +1 -0
  222. package/dist/installer/targets/copilot-cli.js +209 -0
  223. package/dist/installer/targets/copilot-cli.js.map +1 -0
  224. package/dist/installer/targets/copilot-jetbrains.d.ts +42 -0
  225. package/dist/installer/targets/copilot-jetbrains.d.ts.map +1 -0
  226. package/dist/installer/targets/copilot-jetbrains.js +238 -0
  227. package/dist/installer/targets/copilot-jetbrains.js.map +1 -0
  228. package/dist/installer/targets/copilot-vscode.d.ts +47 -0
  229. package/dist/installer/targets/copilot-vscode.d.ts.map +1 -0
  230. package/dist/installer/targets/copilot-vscode.js +219 -0
  231. package/dist/installer/targets/copilot-vscode.js.map +1 -0
  232. package/dist/installer/targets/cursor.d.ts +35 -0
  233. package/dist/installer/targets/cursor.d.ts.map +1 -0
  234. package/dist/installer/targets/cursor.js +254 -0
  235. package/dist/installer/targets/cursor.js.map +1 -0
  236. package/dist/installer/targets/gemini.d.ts +26 -0
  237. package/dist/installer/targets/gemini.d.ts.map +1 -0
  238. package/dist/installer/targets/gemini.js +165 -0
  239. package/dist/installer/targets/gemini.js.map +1 -0
  240. package/dist/installer/targets/hermes.d.ts +18 -0
  241. package/dist/installer/targets/hermes.d.ts.map +1 -0
  242. package/dist/installer/targets/hermes.js +359 -0
  243. package/dist/installer/targets/hermes.js.map +1 -0
  244. package/dist/installer/targets/kiro.d.ts +27 -0
  245. package/dist/installer/targets/kiro.d.ts.map +1 -0
  246. package/dist/installer/targets/kiro.js +178 -0
  247. package/dist/installer/targets/kiro.js.map +1 -0
  248. package/dist/installer/targets/opencode.d.ts +38 -0
  249. package/dist/installer/targets/opencode.d.ts.map +1 -0
  250. package/dist/installer/targets/opencode.js +288 -0
  251. package/dist/installer/targets/opencode.js.map +1 -0
  252. package/dist/installer/targets/registry.d.ts +35 -0
  253. package/dist/installer/targets/registry.d.ts.map +1 -0
  254. package/dist/installer/targets/registry.js +101 -0
  255. package/dist/installer/targets/registry.js.map +1 -0
  256. package/dist/installer/targets/shared.d.ts +101 -0
  257. package/dist/installer/targets/shared.d.ts.map +1 -0
  258. package/dist/installer/targets/shared.js +264 -0
  259. package/dist/installer/targets/shared.js.map +1 -0
  260. package/dist/installer/targets/toml.d.ts +53 -0
  261. package/dist/installer/targets/toml.d.ts.map +1 -0
  262. package/dist/installer/targets/toml.js +226 -0
  263. package/dist/installer/targets/toml.js.map +1 -0
  264. package/dist/installer/targets/trae.d.ts +30 -0
  265. package/dist/installer/targets/trae.d.ts.map +1 -0
  266. package/dist/installer/targets/trae.js +164 -0
  267. package/dist/installer/targets/trae.js.map +1 -0
  268. package/dist/installer/targets/types.d.ts +108 -0
  269. package/dist/installer/targets/types.d.ts.map +1 -0
  270. package/dist/installer/targets/types.js +16 -0
  271. package/dist/installer/targets/types.js.map +1 -0
  272. package/dist/installer/targets/workbuddy.d.ts +29 -0
  273. package/dist/installer/targets/workbuddy.d.ts.map +1 -0
  274. package/dist/installer/targets/workbuddy.js +163 -0
  275. package/dist/installer/targets/workbuddy.js.map +1 -0
  276. package/dist/mcp/daemon-manager.d.ts +42 -0
  277. package/dist/mcp/daemon-manager.d.ts.map +1 -0
  278. package/dist/mcp/daemon-manager.js +129 -0
  279. package/dist/mcp/daemon-manager.js.map +1 -0
  280. package/dist/mcp/daemon-paths.d.ts +79 -0
  281. package/dist/mcp/daemon-paths.d.ts.map +1 -0
  282. package/dist/mcp/daemon-paths.js +219 -0
  283. package/dist/mcp/daemon-paths.js.map +1 -0
  284. package/dist/mcp/daemon-registry.d.ts +57 -0
  285. package/dist/mcp/daemon-registry.d.ts.map +1 -0
  286. package/dist/mcp/daemon-registry.js +281 -0
  287. package/dist/mcp/daemon-registry.js.map +1 -0
  288. package/dist/mcp/daemon.d.ts +293 -0
  289. package/dist/mcp/daemon.d.ts.map +1 -0
  290. package/dist/mcp/daemon.js +864 -0
  291. package/dist/mcp/daemon.js.map +1 -0
  292. package/dist/mcp/dynamic-boundaries.d.ts +41 -0
  293. package/dist/mcp/dynamic-boundaries.d.ts.map +1 -0
  294. package/dist/mcp/dynamic-boundaries.js +360 -0
  295. package/dist/mcp/dynamic-boundaries.js.map +1 -0
  296. package/dist/mcp/early-ppid.d.ts +26 -0
  297. package/dist/mcp/early-ppid.d.ts.map +1 -0
  298. package/dist/mcp/early-ppid.js +29 -0
  299. package/dist/mcp/early-ppid.js.map +1 -0
  300. package/dist/mcp/engine.d.ts +125 -0
  301. package/dist/mcp/engine.d.ts.map +1 -0
  302. package/dist/mcp/engine.js +392 -0
  303. package/dist/mcp/engine.js.map +1 -0
  304. package/dist/mcp/explore-dedup.d.ts +137 -0
  305. package/dist/mcp/explore-dedup.d.ts.map +1 -0
  306. package/dist/mcp/explore-dedup.js +236 -0
  307. package/dist/mcp/explore-dedup.js.map +1 -0
  308. package/dist/mcp/explore-diagnostics.d.ts +289 -0
  309. package/dist/mcp/explore-diagnostics.d.ts.map +1 -0
  310. package/dist/mcp/explore-diagnostics.js +558 -0
  311. package/dist/mcp/explore-diagnostics.js.map +1 -0
  312. package/dist/mcp/explore-session-state.d.ts +217 -0
  313. package/dist/mcp/explore-session-state.d.ts.map +1 -0
  314. package/dist/mcp/explore-session-state.js +322 -0
  315. package/dist/mcp/explore-session-state.js.map +1 -0
  316. package/dist/mcp/index.d.ts +137 -0
  317. package/dist/mcp/index.d.ts.map +1 -0
  318. package/dist/mcp/index.js +567 -0
  319. package/dist/mcp/index.js.map +1 -0
  320. package/dist/mcp/liveness-watchdog.d.ts +35 -0
  321. package/dist/mcp/liveness-watchdog.d.ts.map +1 -0
  322. package/dist/mcp/liveness-watchdog.js +269 -0
  323. package/dist/mcp/liveness-watchdog.js.map +1 -0
  324. package/dist/mcp/ppid-watchdog.d.ts +62 -0
  325. package/dist/mcp/ppid-watchdog.d.ts.map +1 -0
  326. package/dist/mcp/ppid-watchdog.js +64 -0
  327. package/dist/mcp/ppid-watchdog.js.map +1 -0
  328. package/dist/mcp/proxy.d.ts +87 -0
  329. package/dist/mcp/proxy.d.ts.map +1 -0
  330. package/dist/mcp/proxy.js +672 -0
  331. package/dist/mcp/proxy.js.map +1 -0
  332. package/dist/mcp/query-pool.d.ts +108 -0
  333. package/dist/mcp/query-pool.d.ts.map +1 -0
  334. package/dist/mcp/query-pool.js +315 -0
  335. package/dist/mcp/query-pool.js.map +1 -0
  336. package/dist/mcp/query-worker.d.ts +24 -0
  337. package/dist/mcp/query-worker.d.ts.map +1 -0
  338. package/dist/mcp/query-worker.js +87 -0
  339. package/dist/mcp/query-worker.js.map +1 -0
  340. package/dist/mcp/server-instructions.d.ts +34 -0
  341. package/dist/mcp/server-instructions.d.ts.map +1 -0
  342. package/dist/mcp/server-instructions.js +111 -0
  343. package/dist/mcp/server-instructions.js.map +1 -0
  344. package/dist/mcp/session.d.ts +109 -0
  345. package/dist/mcp/session.d.ts.map +1 -0
  346. package/dist/mcp/session.js +380 -0
  347. package/dist/mcp/session.js.map +1 -0
  348. package/dist/mcp/startup-handshake.d.ts +44 -0
  349. package/dist/mcp/startup-handshake.d.ts.map +1 -0
  350. package/dist/mcp/startup-handshake.js +73 -0
  351. package/dist/mcp/startup-handshake.js.map +1 -0
  352. package/dist/mcp/stdin-teardown.d.ts +27 -0
  353. package/dist/mcp/stdin-teardown.d.ts.map +1 -0
  354. package/dist/mcp/stdin-teardown.js +49 -0
  355. package/dist/mcp/stdin-teardown.js.map +1 -0
  356. package/dist/mcp/tools.d.ts +877 -0
  357. package/dist/mcp/tools.d.ts.map +1 -0
  358. package/dist/mcp/tools.js +6371 -0
  359. package/dist/mcp/tools.js.map +1 -0
  360. package/dist/mcp/transport.d.ts +188 -0
  361. package/dist/mcp/transport.d.ts.map +1 -0
  362. package/dist/mcp/transport.js +377 -0
  363. package/dist/mcp/transport.js.map +1 -0
  364. package/dist/mcp/version.d.ts +19 -0
  365. package/dist/mcp/version.d.ts.map +1 -0
  366. package/dist/mcp/version.js +71 -0
  367. package/dist/mcp/version.js.map +1 -0
  368. package/dist/project-config.d.ts +158 -0
  369. package/dist/project-config.d.ts.map +1 -0
  370. package/dist/project-config.js +489 -0
  371. package/dist/project-config.js.map +1 -0
  372. package/dist/resolution/c-fnptr-synthesizer.d.ts +6 -0
  373. package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -0
  374. package/dist/resolution/c-fnptr-synthesizer.js +1506 -0
  375. package/dist/resolution/c-fnptr-synthesizer.js.map +1 -0
  376. package/dist/resolution/callback-synthesizer.d.ts +59 -0
  377. package/dist/resolution/callback-synthesizer.d.ts.map +1 -0
  378. package/dist/resolution/callback-synthesizer.js +4066 -0
  379. package/dist/resolution/callback-synthesizer.js.map +1 -0
  380. package/dist/resolution/cooperative-yield.d.ts +40 -0
  381. package/dist/resolution/cooperative-yield.d.ts.map +1 -0
  382. package/dist/resolution/cooperative-yield.js +44 -0
  383. package/dist/resolution/cooperative-yield.js.map +1 -0
  384. package/dist/resolution/expo-router-synthesizer.d.ts +32 -0
  385. package/dist/resolution/expo-router-synthesizer.d.ts.map +1 -0
  386. package/dist/resolution/expo-router-synthesizer.js +189 -0
  387. package/dist/resolution/expo-router-synthesizer.js.map +1 -0
  388. package/dist/resolution/frameworks/astro.d.ts +9 -0
  389. package/dist/resolution/frameworks/astro.d.ts.map +1 -0
  390. package/dist/resolution/frameworks/astro.js +169 -0
  391. package/dist/resolution/frameworks/astro.js.map +1 -0
  392. package/dist/resolution/frameworks/cargo-workspace.d.ts +18 -0
  393. package/dist/resolution/frameworks/cargo-workspace.d.ts.map +1 -0
  394. package/dist/resolution/frameworks/cargo-workspace.js +225 -0
  395. package/dist/resolution/frameworks/cargo-workspace.js.map +1 -0
  396. package/dist/resolution/frameworks/cics.d.ts +20 -0
  397. package/dist/resolution/frameworks/cics.d.ts.map +1 -0
  398. package/dist/resolution/frameworks/cics.js +90 -0
  399. package/dist/resolution/frameworks/cics.js.map +1 -0
  400. package/dist/resolution/frameworks/csharp.d.ts +8 -0
  401. package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
  402. package/dist/resolution/frameworks/csharp.js +335 -0
  403. package/dist/resolution/frameworks/csharp.js.map +1 -0
  404. package/dist/resolution/frameworks/drupal.d.ts +51 -0
  405. package/dist/resolution/frameworks/drupal.d.ts.map +1 -0
  406. package/dist/resolution/frameworks/drupal.js +367 -0
  407. package/dist/resolution/frameworks/drupal.js.map +1 -0
  408. package/dist/resolution/frameworks/expo-modules.d.ts +3 -0
  409. package/dist/resolution/frameworks/expo-modules.d.ts.map +1 -0
  410. package/dist/resolution/frameworks/expo-modules.js +148 -0
  411. package/dist/resolution/frameworks/expo-modules.js.map +1 -0
  412. package/dist/resolution/frameworks/expo-router.d.ts +189 -0
  413. package/dist/resolution/frameworks/expo-router.d.ts.map +1 -0
  414. package/dist/resolution/frameworks/expo-router.js +785 -0
  415. package/dist/resolution/frameworks/expo-router.js.map +1 -0
  416. package/dist/resolution/frameworks/express.d.ts +8 -0
  417. package/dist/resolution/frameworks/express.d.ts.map +1 -0
  418. package/dist/resolution/frameworks/express.js +540 -0
  419. package/dist/resolution/frameworks/express.js.map +1 -0
  420. package/dist/resolution/frameworks/fabric.d.ts +3 -0
  421. package/dist/resolution/frameworks/fabric.d.ts.map +1 -0
  422. package/dist/resolution/frameworks/fabric.js +354 -0
  423. package/dist/resolution/frameworks/fabric.js.map +1 -0
  424. package/dist/resolution/frameworks/go.d.ts +8 -0
  425. package/dist/resolution/frameworks/go.d.ts.map +1 -0
  426. package/dist/resolution/frameworks/go.js +184 -0
  427. package/dist/resolution/frameworks/go.js.map +1 -0
  428. package/dist/resolution/frameworks/goframe.d.ts +41 -0
  429. package/dist/resolution/frameworks/goframe.d.ts.map +1 -0
  430. package/dist/resolution/frameworks/goframe.js +112 -0
  431. package/dist/resolution/frameworks/goframe.js.map +1 -0
  432. package/dist/resolution/frameworks/index.d.ts +30 -0
  433. package/dist/resolution/frameworks/index.d.ts.map +1 -0
  434. package/dist/resolution/frameworks/index.js +72 -0
  435. package/dist/resolution/frameworks/index.js.map +1 -0
  436. package/dist/resolution/frameworks/java.d.ts +8 -0
  437. package/dist/resolution/frameworks/java.d.ts.map +1 -0
  438. package/dist/resolution/frameworks/java.js +517 -0
  439. package/dist/resolution/frameworks/java.js.map +1 -0
  440. package/dist/resolution/frameworks/laravel.d.ts +13 -0
  441. package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
  442. package/dist/resolution/frameworks/laravel.js +257 -0
  443. package/dist/resolution/frameworks/laravel.js.map +1 -0
  444. package/dist/resolution/frameworks/nestjs.d.ts +26 -0
  445. package/dist/resolution/frameworks/nestjs.d.ts.map +1 -0
  446. package/dist/resolution/frameworks/nestjs.js +690 -0
  447. package/dist/resolution/frameworks/nestjs.js.map +1 -0
  448. package/dist/resolution/frameworks/nextjs.d.ts +76 -0
  449. package/dist/resolution/frameworks/nextjs.d.ts.map +1 -0
  450. package/dist/resolution/frameworks/nextjs.js +328 -0
  451. package/dist/resolution/frameworks/nextjs.js.map +1 -0
  452. package/dist/resolution/frameworks/object-literal.d.ts +32 -0
  453. package/dist/resolution/frameworks/object-literal.d.ts.map +1 -0
  454. package/dist/resolution/frameworks/object-literal.js +139 -0
  455. package/dist/resolution/frameworks/object-literal.js.map +1 -0
  456. package/dist/resolution/frameworks/package-deps.d.ts +14 -0
  457. package/dist/resolution/frameworks/package-deps.d.ts.map +1 -0
  458. package/dist/resolution/frameworks/package-deps.js +78 -0
  459. package/dist/resolution/frameworks/package-deps.js.map +1 -0
  460. package/dist/resolution/frameworks/play.d.ts +19 -0
  461. package/dist/resolution/frameworks/play.d.ts.map +1 -0
  462. package/dist/resolution/frameworks/play.js +111 -0
  463. package/dist/resolution/frameworks/play.js.map +1 -0
  464. package/dist/resolution/frameworks/python.d.ts +10 -0
  465. package/dist/resolution/frameworks/python.d.ts.map +1 -0
  466. package/dist/resolution/frameworks/python.js +566 -0
  467. package/dist/resolution/frameworks/python.js.map +1 -0
  468. package/dist/resolution/frameworks/react-native.d.ts +29 -0
  469. package/dist/resolution/frameworks/react-native.d.ts.map +1 -0
  470. package/dist/resolution/frameworks/react-native.js +549 -0
  471. package/dist/resolution/frameworks/react-native.js.map +1 -0
  472. package/dist/resolution/frameworks/react-router.d.ts +46 -0
  473. package/dist/resolution/frameworks/react-router.d.ts.map +1 -0
  474. package/dist/resolution/frameworks/react-router.js +187 -0
  475. package/dist/resolution/frameworks/react-router.js.map +1 -0
  476. package/dist/resolution/frameworks/react.d.ts +9 -0
  477. package/dist/resolution/frameworks/react.d.ts.map +1 -0
  478. package/dist/resolution/frameworks/react.js +257 -0
  479. package/dist/resolution/frameworks/react.js.map +1 -0
  480. package/dist/resolution/frameworks/ruby.d.ts +8 -0
  481. package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
  482. package/dist/resolution/frameworks/ruby.js +302 -0
  483. package/dist/resolution/frameworks/ruby.js.map +1 -0
  484. package/dist/resolution/frameworks/rust.d.ts +8 -0
  485. package/dist/resolution/frameworks/rust.d.ts.map +1 -0
  486. package/dist/resolution/frameworks/rust.js +304 -0
  487. package/dist/resolution/frameworks/rust.js.map +1 -0
  488. package/dist/resolution/frameworks/svelte.d.ts +9 -0
  489. package/dist/resolution/frameworks/svelte.d.ts.map +1 -0
  490. package/dist/resolution/frameworks/svelte.js +258 -0
  491. package/dist/resolution/frameworks/svelte.js.map +1 -0
  492. package/dist/resolution/frameworks/sveltekit-router.d.ts +36 -0
  493. package/dist/resolution/frameworks/sveltekit-router.d.ts.map +1 -0
  494. package/dist/resolution/frameworks/sveltekit-router.js +156 -0
  495. package/dist/resolution/frameworks/sveltekit-router.js.map +1 -0
  496. package/dist/resolution/frameworks/swift-objc.d.ts +37 -0
  497. package/dist/resolution/frameworks/swift-objc.d.ts.map +1 -0
  498. package/dist/resolution/frameworks/swift-objc.js +252 -0
  499. package/dist/resolution/frameworks/swift-objc.js.map +1 -0
  500. package/dist/resolution/frameworks/swift.d.ts +10 -0
  501. package/dist/resolution/frameworks/swift.d.ts.map +1 -0
  502. package/dist/resolution/frameworks/swift.js +410 -0
  503. package/dist/resolution/frameworks/swift.js.map +1 -0
  504. package/dist/resolution/frameworks/tanstack-router.d.ts +84 -0
  505. package/dist/resolution/frameworks/tanstack-router.d.ts.map +1 -0
  506. package/dist/resolution/frameworks/tanstack-router.js +437 -0
  507. package/dist/resolution/frameworks/tanstack-router.js.map +1 -0
  508. package/dist/resolution/frameworks/terraform.d.ts +38 -0
  509. package/dist/resolution/frameworks/terraform.d.ts.map +1 -0
  510. package/dist/resolution/frameworks/terraform.js +277 -0
  511. package/dist/resolution/frameworks/terraform.js.map +1 -0
  512. package/dist/resolution/frameworks/vue-router.d.ts +82 -0
  513. package/dist/resolution/frameworks/vue-router.d.ts.map +1 -0
  514. package/dist/resolution/frameworks/vue-router.js +377 -0
  515. package/dist/resolution/frameworks/vue-router.js.map +1 -0
  516. package/dist/resolution/frameworks/vue.d.ts +9 -0
  517. package/dist/resolution/frameworks/vue.d.ts.map +1 -0
  518. package/dist/resolution/frameworks/vue.js +303 -0
  519. package/dist/resolution/frameworks/vue.js.map +1 -0
  520. package/dist/resolution/go-module.d.ts +26 -0
  521. package/dist/resolution/go-module.d.ts.map +1 -0
  522. package/dist/resolution/go-module.js +78 -0
  523. package/dist/resolution/go-module.js.map +1 -0
  524. package/dist/resolution/goframe-synthesizer.d.ts +29 -0
  525. package/dist/resolution/goframe-synthesizer.d.ts.map +1 -0
  526. package/dist/resolution/goframe-synthesizer.js +163 -0
  527. package/dist/resolution/goframe-synthesizer.js.map +1 -0
  528. package/dist/resolution/import-resolver.d.ts +84 -0
  529. package/dist/resolution/import-resolver.d.ts.map +1 -0
  530. package/dist/resolution/import-resolver.js +2240 -0
  531. package/dist/resolution/import-resolver.js.map +1 -0
  532. package/dist/resolution/index.d.ts +343 -0
  533. package/dist/resolution/index.d.ts.map +1 -0
  534. package/dist/resolution/index.js +2352 -0
  535. package/dist/resolution/index.js.map +1 -0
  536. package/dist/resolution/lru-cache.d.ts +24 -0
  537. package/dist/resolution/lru-cache.d.ts.map +1 -0
  538. package/dist/resolution/lru-cache.js +62 -0
  539. package/dist/resolution/lru-cache.js.map +1 -0
  540. package/dist/resolution/memory-budget.d.ts +48 -0
  541. package/dist/resolution/memory-budget.d.ts.map +1 -0
  542. package/dist/resolution/memory-budget.js +162 -0
  543. package/dist/resolution/memory-budget.js.map +1 -0
  544. package/dist/resolution/name-matcher.d.ts +153 -0
  545. package/dist/resolution/name-matcher.d.ts.map +1 -0
  546. package/dist/resolution/name-matcher.js +2412 -0
  547. package/dist/resolution/name-matcher.js.map +1 -0
  548. package/dist/resolution/next-router-synthesizer.d.ts +27 -0
  549. package/dist/resolution/next-router-synthesizer.d.ts.map +1 -0
  550. package/dist/resolution/next-router-synthesizer.js +113 -0
  551. package/dist/resolution/next-router-synthesizer.js.map +1 -0
  552. package/dist/resolution/path-aliases.d.ts +70 -0
  553. package/dist/resolution/path-aliases.d.ts.map +1 -0
  554. package/dist/resolution/path-aliases.js +346 -0
  555. package/dist/resolution/path-aliases.js.map +1 -0
  556. package/dist/resolution/react-router-synthesizer.d.ts +33 -0
  557. package/dist/resolution/react-router-synthesizer.d.ts.map +1 -0
  558. package/dist/resolution/react-router-synthesizer.js +126 -0
  559. package/dist/resolution/react-router-synthesizer.js.map +1 -0
  560. package/dist/resolution/resolver-pool.d.ts +106 -0
  561. package/dist/resolution/resolver-pool.d.ts.map +1 -0
  562. package/dist/resolution/resolver-pool.js +344 -0
  563. package/dist/resolution/resolver-pool.js.map +1 -0
  564. package/dist/resolution/resolver-worker.d.ts +17 -0
  565. package/dist/resolution/resolver-worker.d.ts.map +1 -0
  566. package/dist/resolution/resolver-worker.js +141 -0
  567. package/dist/resolution/resolver-worker.js.map +1 -0
  568. package/dist/resolution/strip-comments.d.ts +27 -0
  569. package/dist/resolution/strip-comments.d.ts.map +1 -0
  570. package/dist/resolution/strip-comments.js +492 -0
  571. package/dist/resolution/strip-comments.js.map +1 -0
  572. package/dist/resolution/sveltekit-synthesizer.d.ts +58 -0
  573. package/dist/resolution/sveltekit-synthesizer.d.ts.map +1 -0
  574. package/dist/resolution/sveltekit-synthesizer.js +173 -0
  575. package/dist/resolution/sveltekit-synthesizer.js.map +1 -0
  576. package/dist/resolution/swift-objc-bridge.d.ts +134 -0
  577. package/dist/resolution/swift-objc-bridge.d.ts.map +1 -0
  578. package/dist/resolution/swift-objc-bridge.js +256 -0
  579. package/dist/resolution/swift-objc-bridge.js.map +1 -0
  580. package/dist/resolution/synth-utils.d.ts +26 -0
  581. package/dist/resolution/synth-utils.d.ts.map +1 -0
  582. package/dist/resolution/synth-utils.js +75 -0
  583. package/dist/resolution/synth-utils.js.map +1 -0
  584. package/dist/resolution/tanstack-router-synthesizer.d.ts +31 -0
  585. package/dist/resolution/tanstack-router-synthesizer.d.ts.map +1 -0
  586. package/dist/resolution/tanstack-router-synthesizer.js +114 -0
  587. package/dist/resolution/tanstack-router-synthesizer.js.map +1 -0
  588. package/dist/resolution/tier-synthesizer.d.ts +48 -0
  589. package/dist/resolution/tier-synthesizer.d.ts.map +1 -0
  590. package/dist/resolution/tier-synthesizer.js +907 -0
  591. package/dist/resolution/tier-synthesizer.js.map +1 -0
  592. package/dist/resolution/types.d.ts +290 -0
  593. package/dist/resolution/types.d.ts.map +1 -0
  594. package/dist/resolution/types.js +8 -0
  595. package/dist/resolution/types.js.map +1 -0
  596. package/dist/resolution/vue-router-synthesizer.d.ts +30 -0
  597. package/dist/resolution/vue-router-synthesizer.d.ts.map +1 -0
  598. package/dist/resolution/vue-router-synthesizer.js +115 -0
  599. package/dist/resolution/vue-router-synthesizer.js.map +1 -0
  600. package/dist/resolution/workspace-packages.d.ts +58 -0
  601. package/dist/resolution/workspace-packages.d.ts.map +1 -0
  602. package/dist/resolution/workspace-packages.js +346 -0
  603. package/dist/resolution/workspace-packages.js.map +1 -0
  604. package/dist/search/identifier-segments.d.ts +70 -0
  605. package/dist/search/identifier-segments.d.ts.map +1 -0
  606. package/dist/search/identifier-segments.js +205 -0
  607. package/dist/search/identifier-segments.js.map +1 -0
  608. package/dist/search/query-parser.d.ts +57 -0
  609. package/dist/search/query-parser.d.ts.map +1 -0
  610. package/dist/search/query-parser.js +177 -0
  611. package/dist/search/query-parser.js.map +1 -0
  612. package/dist/search/query-paths.d.ts +57 -0
  613. package/dist/search/query-paths.d.ts.map +1 -0
  614. package/dist/search/query-paths.js +298 -0
  615. package/dist/search/query-paths.js.map +1 -0
  616. package/dist/search/query-utils.d.ts +102 -0
  617. package/dist/search/query-utils.d.ts.map +1 -0
  618. package/dist/search/query-utils.js +487 -0
  619. package/dist/search/query-utils.js.map +1 -0
  620. package/dist/sync/git-hooks.d.ts +45 -0
  621. package/dist/sync/git-hooks.d.ts.map +1 -0
  622. package/dist/sync/git-hooks.js +227 -0
  623. package/dist/sync/git-hooks.js.map +1 -0
  624. package/dist/sync/index.d.ts +19 -0
  625. package/dist/sync/index.d.ts.map +1 -0
  626. package/dist/sync/index.js +35 -0
  627. package/dist/sync/index.js.map +1 -0
  628. package/dist/sync/watch-policy.d.ts +48 -0
  629. package/dist/sync/watch-policy.d.ts.map +1 -0
  630. package/dist/sync/watch-policy.js +124 -0
  631. package/dist/sync/watch-policy.js.map +1 -0
  632. package/dist/sync/watcher.d.ts +401 -0
  633. package/dist/sync/watcher.d.ts.map +1 -0
  634. package/dist/sync/watcher.js +967 -0
  635. package/dist/sync/watcher.js.map +1 -0
  636. package/dist/sync/worktree.d.ts +63 -0
  637. package/dist/sync/worktree.d.ts.map +1 -0
  638. package/dist/sync/worktree.js +182 -0
  639. package/dist/sync/worktree.js.map +1 -0
  640. package/dist/telemetry/index.d.ts +143 -0
  641. package/dist/telemetry/index.d.ts.map +1 -0
  642. package/dist/telemetry/index.js +541 -0
  643. package/dist/telemetry/index.js.map +1 -0
  644. package/dist/types.d.ts +486 -0
  645. package/dist/types.d.ts.map +1 -0
  646. package/dist/types.js +118 -0
  647. package/dist/types.js.map +1 -0
  648. package/dist/ui/color.d.ts +21 -0
  649. package/dist/ui/color.d.ts.map +1 -0
  650. package/dist/ui/color.js +42 -0
  651. package/dist/ui/color.js.map +1 -0
  652. package/dist/ui/glyphs.d.ts +67 -0
  653. package/dist/ui/glyphs.d.ts.map +1 -0
  654. package/dist/ui/glyphs.js +125 -0
  655. package/dist/ui/glyphs.js.map +1 -0
  656. package/dist/ui/shimmer-progress.d.ts +11 -0
  657. package/dist/ui/shimmer-progress.d.ts.map +1 -0
  658. package/dist/ui/shimmer-progress.js +164 -0
  659. package/dist/ui/shimmer-progress.js.map +1 -0
  660. package/dist/ui/shimmer-worker.d.ts +2 -0
  661. package/dist/ui/shimmer-worker.d.ts.map +1 -0
  662. package/dist/ui/shimmer-worker.js +126 -0
  663. package/dist/ui/shimmer-worker.js.map +1 -0
  664. package/dist/ui/types.d.ts +15 -0
  665. package/dist/ui/types.d.ts.map +1 -0
  666. package/dist/ui/types.js +3 -0
  667. package/dist/ui/types.js.map +1 -0
  668. package/dist/ui-server/api/deadcode.d.ts +84 -0
  669. package/dist/ui-server/api/deadcode.d.ts.map +1 -0
  670. package/dist/ui-server/api/deadcode.js +136 -0
  671. package/dist/ui-server/api/deadcode.js.map +1 -0
  672. package/dist/ui-server/api/effects.d.ts +87 -0
  673. package/dist/ui-server/api/effects.d.ts.map +1 -0
  674. package/dist/ui-server/api/effects.js +499 -0
  675. package/dist/ui-server/api/effects.js.map +1 -0
  676. package/dist/ui-server/api/entrypoints.d.ts +86 -0
  677. package/dist/ui-server/api/entrypoints.d.ts.map +1 -0
  678. package/dist/ui-server/api/entrypoints.js +279 -0
  679. package/dist/ui-server/api/entrypoints.js.map +1 -0
  680. package/dist/ui-server/api/events.d.ts +183 -0
  681. package/dist/ui-server/api/events.d.ts.map +1 -0
  682. package/dist/ui-server/api/events.js +430 -0
  683. package/dist/ui-server/api/events.js.map +1 -0
  684. package/dist/ui-server/api/file.d.ts +66 -0
  685. package/dist/ui-server/api/file.d.ts.map +1 -0
  686. package/dist/ui-server/api/file.js +222 -0
  687. package/dist/ui-server/api/file.js.map +1 -0
  688. package/dist/ui-server/api/filecode.d.ts +126 -0
  689. package/dist/ui-server/api/filecode.d.ts.map +1 -0
  690. package/dist/ui-server/api/filecode.js +205 -0
  691. package/dist/ui-server/api/filecode.js.map +1 -0
  692. package/dist/ui-server/api/flow.d.ts +226 -0
  693. package/dist/ui-server/api/flow.d.ts.map +1 -0
  694. package/dist/ui-server/api/flow.js +611 -0
  695. package/dist/ui-server/api/flow.js.map +1 -0
  696. package/dist/ui-server/api/hierarchy.d.ts +81 -0
  697. package/dist/ui-server/api/hierarchy.d.ts.map +1 -0
  698. package/dist/ui-server/api/hierarchy.js +92 -0
  699. package/dist/ui-server/api/hierarchy.js.map +1 -0
  700. package/dist/ui-server/api/index.d.ts +90 -0
  701. package/dist/ui-server/api/index.d.ts.map +1 -0
  702. package/dist/ui-server/api/index.js +332 -0
  703. package/dist/ui-server/api/index.js.map +1 -0
  704. package/dist/ui-server/api/map.d.ts +187 -0
  705. package/dist/ui-server/api/map.d.ts.map +1 -0
  706. package/dist/ui-server/api/map.js +498 -0
  707. package/dist/ui-server/api/map.js.map +1 -0
  708. package/dist/ui-server/api/node.d.ts +81 -0
  709. package/dist/ui-server/api/node.d.ts.map +1 -0
  710. package/dist/ui-server/api/node.js +388 -0
  711. package/dist/ui-server/api/node.js.map +1 -0
  712. package/dist/ui-server/api/nodes.d.ts +25 -0
  713. package/dist/ui-server/api/nodes.d.ts.map +1 -0
  714. package/dist/ui-server/api/nodes.js +45 -0
  715. package/dist/ui-server/api/nodes.js.map +1 -0
  716. package/dist/ui-server/api/program.d.ts +139 -0
  717. package/dist/ui-server/api/program.d.ts.map +1 -0
  718. package/dist/ui-server/api/program.js +315 -0
  719. package/dist/ui-server/api/program.js.map +1 -0
  720. package/dist/ui-server/api/respond.d.ts +76 -0
  721. package/dist/ui-server/api/respond.d.ts.map +1 -0
  722. package/dist/ui-server/api/respond.js +186 -0
  723. package/dist/ui-server/api/respond.js.map +1 -0
  724. package/dist/ui-server/api/route-roots.d.ts +39 -0
  725. package/dist/ui-server/api/route-roots.d.ts.map +1 -0
  726. package/dist/ui-server/api/route-roots.js +96 -0
  727. package/dist/ui-server/api/route-roots.js.map +1 -0
  728. package/dist/ui-server/api/routes.d.ts +59 -0
  729. package/dist/ui-server/api/routes.d.ts.map +1 -0
  730. package/dist/ui-server/api/routes.js +112 -0
  731. package/dist/ui-server/api/routes.js.map +1 -0
  732. package/dist/ui-server/api/screens.d.ts +117 -0
  733. package/dist/ui-server/api/screens.d.ts.map +1 -0
  734. package/dist/ui-server/api/screens.js +611 -0
  735. package/dist/ui-server/api/screens.js.map +1 -0
  736. package/dist/ui-server/api/search.d.ts +29 -0
  737. package/dist/ui-server/api/search.d.ts.map +1 -0
  738. package/dist/ui-server/api/search.js +232 -0
  739. package/dist/ui-server/api/search.js.map +1 -0
  740. package/dist/ui-server/api/session.d.ts +52 -0
  741. package/dist/ui-server/api/session.d.ts.map +1 -0
  742. package/dist/ui-server/api/session.js +196 -0
  743. package/dist/ui-server/api/session.js.map +1 -0
  744. package/dist/ui-server/api/source.d.ts +200 -0
  745. package/dist/ui-server/api/source.d.ts.map +1 -0
  746. package/dist/ui-server/api/source.js +419 -0
  747. package/dist/ui-server/api/source.js.map +1 -0
  748. package/dist/ui-server/api/stats.d.ts +27 -0
  749. package/dist/ui-server/api/stats.d.ts.map +1 -0
  750. package/dist/ui-server/api/stats.js +164 -0
  751. package/dist/ui-server/api/stats.js.map +1 -0
  752. package/dist/ui-server/api/steps.d.ts +274 -0
  753. package/dist/ui-server/api/steps.d.ts.map +1 -0
  754. package/dist/ui-server/api/steps.js +1446 -0
  755. package/dist/ui-server/api/steps.js.map +1 -0
  756. package/dist/ui-server/api/trail-store.d.ts +142 -0
  757. package/dist/ui-server/api/trail-store.d.ts.map +1 -0
  758. package/dist/ui-server/api/trail-store.js +323 -0
  759. package/dist/ui-server/api/trail-store.js.map +1 -0
  760. package/dist/ui-server/api/trails.d.ts +163 -0
  761. package/dist/ui-server/api/trails.d.ts.map +1 -0
  762. package/dist/ui-server/api/trails.js +369 -0
  763. package/dist/ui-server/api/trails.js.map +1 -0
  764. package/dist/ui-server/api/when.d.ts +125 -0
  765. package/dist/ui-server/api/when.d.ts.map +1 -0
  766. package/dist/ui-server/api/when.js +251 -0
  767. package/dist/ui-server/api/when.js.map +1 -0
  768. package/dist/ui-server/api/wire.d.ts +179 -0
  769. package/dist/ui-server/api/wire.d.ts.map +1 -0
  770. package/dist/ui-server/api/wire.js +231 -0
  771. package/dist/ui-server/api/wire.js.map +1 -0
  772. package/dist/ui-server/assets.d.ts +40 -0
  773. package/dist/ui-server/assets.d.ts.map +1 -0
  774. package/dist/ui-server/assets.js +110 -0
  775. package/dist/ui-server/assets.js.map +1 -0
  776. package/dist/ui-server/constants.d.ts +32 -0
  777. package/dist/ui-server/constants.d.ts.map +1 -0
  778. package/dist/ui-server/constants.js +35 -0
  779. package/dist/ui-server/constants.js.map +1 -0
  780. package/dist/ui-server/highlight/index.d.ts +113 -0
  781. package/dist/ui-server/highlight/index.d.ts.map +1 -0
  782. package/dist/ui-server/highlight/index.js +307 -0
  783. package/dist/ui-server/highlight/index.js.map +1 -0
  784. package/dist/ui-server/highlight/languages.d.ts +36 -0
  785. package/dist/ui-server/highlight/languages.d.ts.map +1 -0
  786. package/dist/ui-server/highlight/languages.js +50 -0
  787. package/dist/ui-server/highlight/languages.js.map +1 -0
  788. package/dist/ui-server/index.d.ts +92 -0
  789. package/dist/ui-server/index.d.ts.map +1 -0
  790. package/dist/ui-server/index.js +399 -0
  791. package/dist/ui-server/index.js.map +1 -0
  792. package/dist/ui-server/open-browser.d.ts +31 -0
  793. package/dist/ui-server/open-browser.d.ts.map +1 -0
  794. package/dist/ui-server/open-browser.js +79 -0
  795. package/dist/ui-server/open-browser.js.map +1 -0
  796. package/dist/ui-server/security.d.ts +127 -0
  797. package/dist/ui-server/security.d.ts.map +1 -0
  798. package/dist/ui-server/security.js +332 -0
  799. package/dist/ui-server/security.js.map +1 -0
  800. package/dist/ui-server/static.d.ts +45 -0
  801. package/dist/ui-server/static.d.ts.map +1 -0
  802. package/dist/ui-server/static.js +165 -0
  803. package/dist/ui-server/static.js.map +1 -0
  804. package/dist/upgrade/index.d.ts +177 -0
  805. package/dist/upgrade/index.d.ts.map +1 -0
  806. package/dist/upgrade/index.js +665 -0
  807. package/dist/upgrade/index.js.map +1 -0
  808. package/dist/upgrade/remove-binary.d.ts +87 -0
  809. package/dist/upgrade/remove-binary.d.ts.map +1 -0
  810. package/dist/upgrade/remove-binary.js +289 -0
  811. package/dist/upgrade/remove-binary.js.map +1 -0
  812. package/dist/upgrade/update-check.d.ts +92 -0
  813. package/dist/upgrade/update-check.d.ts.map +1 -0
  814. package/dist/upgrade/update-check.js +258 -0
  815. package/dist/upgrade/update-check.js.map +1 -0
  816. package/dist/utils.d.ts +224 -0
  817. package/dist/utils.d.ts.map +1 -0
  818. package/dist/utils.js +583 -0
  819. package/dist/utils.js.map +1 -0
  820. package/dist/viewer/assets/archivo-latin-ext-wght-normal-C4zznr8T.woff2 +0 -0
  821. package/dist/viewer/assets/archivo-latin-wght-normal-E0tuGl4L.woff2 +0 -0
  822. package/dist/viewer/assets/archivo-vietnamese-wght-normal-XAtsl5Q_.woff2 +0 -0
  823. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-italic-2syK4fUT.woff +0 -0
  824. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-italic-CBJ8pzag.woff2 +0 -0
  825. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
  826. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
  827. package/dist/viewer/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff +0 -0
  828. package/dist/viewer/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2 +0 -0
  829. package/dist/viewer/assets/ibm-plex-mono-cyrillic-600-normal-CTOM6hUh.woff2 +0 -0
  830. package/dist/viewer/assets/ibm-plex-mono-cyrillic-600-normal-fLZuRloM.woff +0 -0
  831. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-italic-B4oTjJdl.woff +0 -0
  832. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-italic-CBjNughH.woff2 +0 -0
  833. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
  834. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
  835. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff +0 -0
  836. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2 +0 -0
  837. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-600-normal-9HEixskS.woff +0 -0
  838. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-600-normal-V-xxqcpd.woff2 +0 -0
  839. package/dist/viewer/assets/ibm-plex-mono-latin-400-italic-66oory27.woff +0 -0
  840. package/dist/viewer/assets/ibm-plex-mono-latin-400-italic-BqAiT5Ww.woff2 +0 -0
  841. package/dist/viewer/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  842. package/dist/viewer/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  843. package/dist/viewer/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  844. package/dist/viewer/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  845. package/dist/viewer/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
  846. package/dist/viewer/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
  847. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-italic-B7_fu1kp.woff2 +0 -0
  848. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-italic-Bg0ZHwF4.woff +0 -0
  849. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
  850. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
  851. package/dist/viewer/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2 +0 -0
  852. package/dist/viewer/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff +0 -0
  853. package/dist/viewer/assets/ibm-plex-mono-latin-ext-600-normal-D38SheWl.woff2 +0 -0
  854. package/dist/viewer/assets/ibm-plex-mono-latin-ext-600-normal-DmB0ttJJ.woff +0 -0
  855. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-italic-D6eaYXMU.woff +0 -0
  856. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-italic-DRuN92E5.woff2 +0 -0
  857. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
  858. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
  859. package/dist/viewer/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff +0 -0
  860. package/dist/viewer/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2 +0 -0
  861. package/dist/viewer/assets/ibm-plex-mono-vietnamese-600-normal-D2EvbN8M.woff2 +0 -0
  862. package/dist/viewer/assets/ibm-plex-mono-vietnamese-600-normal-iLQfcSjf.woff +0 -0
  863. package/dist/viewer/assets/index-2IPslW5t.js +13 -0
  864. package/dist/viewer/assets/index-DSwi2Seu.css +1 -0
  865. package/dist/viewer/index.html +16 -0
  866. package/package.json +67 -0
@@ -0,0 +1,854 @@
1
+ "use strict";
2
+ /**
3
+ * Database Layer
4
+ *
5
+ * Handles SQLite database initialization and connection management.
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.DATABASE_FILENAME = exports.DatabaseConnection = exports.WAL_HEAL_THRESHOLD_BYTES = void 0;
42
+ exports.resolveWalHealBytes = resolveWalHealBytes;
43
+ exports.getDatabasePath = getDatabasePath;
44
+ exports.removeDatabaseFiles = removeDatabaseFiles;
45
+ const sqlite_adapter_1 = require("./sqlite-adapter");
46
+ const fs = __importStar(require("fs"));
47
+ const path = __importStar(require("path"));
48
+ const migrations_1 = require("./migrations");
49
+ const directory_1 = require("../directory");
50
+ /**
51
+ * Apply connection-level PRAGMAs. Shared by `initialize` and `open` so the two
52
+ * paths can't drift.
53
+ *
54
+ * `busy_timeout` is set FIRST, before any pragma that might touch the database
55
+ * file (notably `journal_mode`). If another process holds a write lock at open
56
+ * time, the later pragmas — and the connection's first query — then wait out
57
+ * the lock instead of throwing "database is locked" immediately. See issue #238.
58
+ *
59
+ * The 5s window (was 120s) rides out a normal incremental sync; the old
60
+ * 2-minute wait presented as a frozen, hung agent. With WAL, reads never block
61
+ * on a writer, so this timeout only governs cross-process write contention
62
+ * (e.g. the git-hook `cg sync` running while the MCP server writes).
63
+ */
64
+ function configureConnection(db) {
65
+ db.pragma('busy_timeout = 5000'); // MUST be first — see above
66
+ db.pragma('foreign_keys = ON');
67
+ db.pragma('journal_mode = WAL'); // node:sqlite supports WAL on every platform
68
+ db.pragma('synchronous = NORMAL'); // safe with WAL mode
69
+ db.pragma('cache_size = -64000'); // 64 MB page cache
70
+ db.pragma('temp_store = MEMORY'); // temp tables in memory
71
+ db.pragma('mmap_size = 268435456'); // 256 MB memory-mapped I/O
72
+ // Without a journal_size_limit the -wal file never shrinks below its
73
+ // high-water mark while a connection lives: checkpoints fold frames back but
74
+ // leave the file at full size, so one giant deferred-sync WAL stays giant
75
+ // forever. With the limit set, any checkpoint that resets the WAL truncates
76
+ // the file back down. Killed-process leftovers are handled separately by
77
+ // healOversizedWal() at open. (#1431)
78
+ db.pragma(`journal_size_limit = ${exports.WAL_HEAL_THRESHOLD_BYTES}`);
79
+ }
80
+ /**
81
+ * WAL size past which `healOversizedWal` (run at every `open`) checkpoints and
82
+ * truncates the file, and to which `journal_size_limit` clips the WAL after any
83
+ * resetting checkpoint. A SIGKILL'd process (the #850 liveness watchdog, OOM,
84
+ * crash) can leave an arbitrarily large WAL behind — a whole deferred-sync
85
+ * run's worth (#1248) — and before #1431 no later session ever shrank it: the
86
+ * file just grew, killed session after killed session, until the disk filled
87
+ * (25.6 GB observed). 64 MB is far above anything a healthy open ever sees
88
+ * (a clean close deletes the WAL) yet small enough to cap the leak.
89
+ * Override with `CODEGRAPH_WAL_HEAL_MB` (also feeds `journal_size_limit`).
90
+ */
91
+ exports.WAL_HEAL_THRESHOLD_BYTES = resolveWalHealBytes(process.env.CODEGRAPH_WAL_HEAL_MB);
92
+ /** Resolve the heal threshold from the env override (MB); invalid ⇒ 64 MB. */
93
+ function resolveWalHealBytes(envVal) {
94
+ if (envVal !== undefined && envVal !== '') {
95
+ const n = Number(envVal);
96
+ if (Number.isFinite(n) && n > 0)
97
+ return Math.floor(n * 1024 * 1024);
98
+ }
99
+ return 64 * 1024 * 1024;
100
+ }
101
+ /**
102
+ * Database connection wrapper with lifecycle management
103
+ */
104
+ class DatabaseConnection {
105
+ db;
106
+ dbPath;
107
+ backend;
108
+ /**
109
+ * `dev:ino` of the DB file at the moment we opened it (or null when the
110
+ * platform/filesystem reports no usable inode). Lets us notice when the file
111
+ * we hold open has been unlinked and REPLACED by a new file at the same path
112
+ * — a git worktree removed and re-added, or `.codegraph/` deleted and
113
+ * re-`init`ed under a long-lived server — at which point our fd reads a now
114
+ * dead inode forever (#925). See `isReplacedOnDisk`.
115
+ */
116
+ openedInode;
117
+ constructor(db, dbPath, backend) {
118
+ this.db = db;
119
+ this.dbPath = dbPath;
120
+ this.backend = backend;
121
+ this.openedInode = statInode(dbPath);
122
+ }
123
+ /**
124
+ * Initialize a new database at the given path
125
+ */
126
+ static initialize(dbPath) {
127
+ // Ensure parent directory exists
128
+ const dir = path.dirname(dbPath);
129
+ if (!fs.existsSync(dir)) {
130
+ fs.mkdirSync(dir, { recursive: true });
131
+ }
132
+ // Create and configure database
133
+ const { db, backend } = (0, sqlite_adapter_1.createDatabase)(dbPath);
134
+ configureConnection(db);
135
+ // Run schema initialization
136
+ const schemaPath = path.join(__dirname, 'schema.sql');
137
+ const schema = fs.readFileSync(schemaPath, 'utf-8');
138
+ db.exec(schema);
139
+ // Record current schema version so migrations aren't re-applied on open
140
+ const currentVersion = (0, migrations_1.getCurrentVersion)(db);
141
+ if (currentVersion < migrations_1.CURRENT_SCHEMA_VERSION) {
142
+ db.prepare('INSERT OR IGNORE INTO schema_versions (version, applied_at, description) VALUES (?, ?, ?)').run(migrations_1.CURRENT_SCHEMA_VERSION, Date.now(), 'Initial schema includes all migrations');
143
+ }
144
+ return new DatabaseConnection(db, dbPath, backend);
145
+ }
146
+ /**
147
+ * Open an existing database
148
+ */
149
+ static open(dbPath) {
150
+ if (!fs.existsSync(dbPath)) {
151
+ throw new Error(`Database not found: ${dbPath}`);
152
+ }
153
+ const { db, backend } = (0, sqlite_adapter_1.createDatabase)(dbPath);
154
+ configureConnection(db);
155
+ // Check and run migrations if needed
156
+ const conn = new DatabaseConnection(db, dbPath, backend);
157
+ const currentVersion = (0, migrations_1.getCurrentVersion)(db);
158
+ if (currentVersion < migrations_1.CURRENT_SCHEMA_VERSION) {
159
+ (0, migrations_1.runMigrations)(db, currentVersion);
160
+ }
161
+ // Self-heal a bulk-load window that never closed (crash between
162
+ // beginBulkNodeLoad and endBulkNodeLoad): the FTS triggers are missing and
163
+ // nodes_fts is stale. Rebuild + recreate so search stays in sync.
164
+ conn.healBulkNodeLoad();
165
+ conn.healBulkSecondaryIndexes();
166
+ // Self-heal a killed session's leftover oversized WAL (#1431) — one
167
+ // statSync when healthy, off-thread checkpoint+truncate when not.
168
+ void conn.healOversizedWal();
169
+ return conn;
170
+ }
171
+ /**
172
+ * FTS maintenance triggers dropped/recreated around a bulk load.
173
+ * Names must match schema.sql.
174
+ */
175
+ static FTS_TRIGGER_NAMES = ['nodes_ai', 'nodes_ad', 'nodes_au'];
176
+ /**
177
+ * Enter bulk-load mode: drop the per-row FTS sync triggers so mass node
178
+ * inserts skip per-row tokenization. MUST be paired with endBulkNodeLoad()
179
+ * (use try/finally); a crash inside the window is healed on the next open().
180
+ * The window is DB-wide (triggers are schema objects), which is safe because
181
+ * endBulkNodeLoad() rebuilds nodes_fts from the nodes table wholesale — any
182
+ * row written by anyone during the window is captured by the rebuild.
183
+ */
184
+ beginBulkNodeLoad() {
185
+ for (const t of DatabaseConnection.FTS_TRIGGER_NAMES) {
186
+ this.db.exec(`DROP TRIGGER IF EXISTS ${t}`);
187
+ }
188
+ }
189
+ /**
190
+ * Leave bulk-load mode: rebuild the whole FTS index from the nodes table in
191
+ * one pass (far cheaper than per-row trigger firings), then recreate the
192
+ * triggers by re-running schema.sql (idempotent — everything in it is
193
+ * IF NOT EXISTS).
194
+ */
195
+ endBulkNodeLoad() {
196
+ this.db.exec(`INSERT INTO nodes_fts(nodes_fts) VALUES('rebuild')`);
197
+ this.recreateFtsTriggers();
198
+ }
199
+ /**
200
+ * NON-UNIQUE secondary indexes maintained per-row during the parse phase's
201
+ * bulk inserts — the store-architecture arc's first lever (plan §4d: dubbo's
202
+ * parse-loop wall is 94% store-writer busy, and the #1320 post-mortem showed
203
+ * statement batching and sorted inserts are ~zero on this path because
204
+ * B-TREE MAINTENANCE is the floor). A fresh init writes every row of
205
+ * nodes/unresolved_refs/files exactly once and reads none of them until
206
+ * resolution, so the parse window can drop all of these and rebuild each in
207
+ * one table scan afterwards — the same measured trade as the resolution
208
+ * phase's edge-index window (2.8s → 1.1s inserting, ~0.3s recreating).
209
+ * Primary keys and UNIQUE constraints stay (upserts and OR-IGNORE dedup
210
+ * conflict on them).
211
+ */
212
+ static BULK_PARSE_INDEX_NAMES = [
213
+ 'idx_nodes_kind',
214
+ 'idx_nodes_name',
215
+ 'idx_nodes_qualified_name',
216
+ 'idx_nodes_file_path',
217
+ 'idx_nodes_language',
218
+ 'idx_nodes_file_line',
219
+ 'idx_nodes_lower_name',
220
+ 'idx_unresolved_from_node',
221
+ 'idx_unresolved_name',
222
+ 'idx_unresolved_file_path',
223
+ 'idx_unresolved_from_name',
224
+ 'idx_unresolved_status',
225
+ 'idx_unresolved_failed_tail',
226
+ 'idx_files_language',
227
+ 'idx_files_modified_at',
228
+ ];
229
+ /**
230
+ * Enter bulk-parse-load mode (FRESH-INIT ONLY — the caller gates on a fresh
231
+ * DB, because an incremental index deletes per-file rows mid-phase and needs
232
+ * the file_path indexes): drop every parse-lane secondary index, including
233
+ * the four non-unique edge indexes (parse inserts contains-edges too; the
234
+ * UNIQUE identity index stays for INSERT OR IGNORE dedup, and its `source`
235
+ * prefix keeps source-keyed reads indexed, as in the edge window). MUST be
236
+ * paired with endBulkParseLoad(); a crash inside the window is healed on the
237
+ * next DatabaseConnection open (schema.sql re-applies CREATE INDEX IF NOT
238
+ * EXISTS).
239
+ */
240
+ beginBulkParseLoad() {
241
+ for (const idx of DatabaseConnection.BULK_PARSE_INDEX_NAMES) {
242
+ this.db.exec(`DROP INDEX IF EXISTS ${idx}`);
243
+ }
244
+ this.beginBulkEdgeLoad();
245
+ }
246
+ /**
247
+ * Leave bulk-parse-load mode: recreate everything the window dropped, one
248
+ * table scan per index, with a yield between statements (same
249
+ * liveness-watchdog rationale as endBulkEdgeLoad — at kernel scale each
250
+ * build is a long synchronous scan). The edge indexes are rebuilt here too,
251
+ * so paths that never enter the resolution phase's own bulk-edge window
252
+ * (small runs) are left with a complete schema; the batched resolver's
253
+ * beginBulkEdgeLoad simply re-drops them (DROP IF EXISTS — idempotent).
254
+ */
255
+ async endBulkParseLoad() {
256
+ const schemaPath = path.join(__dirname, 'schema.sql');
257
+ const schema = fs.readFileSync(schemaPath, 'utf-8');
258
+ for (const idx of DatabaseConnection.BULK_PARSE_INDEX_NAMES) {
259
+ const m = schema.match(new RegExp(`CREATE INDEX IF NOT EXISTS ${idx}\\b[^;]*;`));
260
+ if (!m)
261
+ throw new Error(`schema.sql: parse index ${idx} not found for bulk-load recreation`);
262
+ this.db.exec(m[0]);
263
+ await new Promise((resolve) => setImmediate(resolve));
264
+ }
265
+ await this.endBulkEdgeLoad();
266
+ }
267
+ /**
268
+ * unresolved_refs secondary indexes NOT read by the batched resolution
269
+ * loop. The loop pages pending refs by keyset (`status='pending' AND id>?`
270
+ * — the status index + PK), deletes resolved rows by id, and parks failures
271
+ * with a status UPDATE; every other ref index serves SYNC-time paths
272
+ * (per-file re-index deletes, name-keyed retry, failed-tail heal). Each
273
+ * per-batch DELETE maintains all of them — the biggest single main-thread
274
+ * stage on the dubbo profile (deletes 1.2s of a 5.4s resolution phase) —
275
+ * so the batched loop drops them and rebuilds at the end, where the table
276
+ * holds only the surviving FAILED refs (resolved rows are gone), making
277
+ * the recreate near-free.
278
+ */
279
+ static BULK_REF_INDEX_NAMES = [
280
+ 'idx_unresolved_from_node',
281
+ 'idx_unresolved_name',
282
+ 'idx_unresolved_file_path',
283
+ 'idx_unresolved_from_name',
284
+ 'idx_unresolved_failed_tail',
285
+ ];
286
+ /**
287
+ * Enter bulk-ref mode for the batched resolution loop — see
288
+ * BULK_REF_INDEX_NAMES. MUST be paired with endBulkRefLoad(); a crash
289
+ * inside the window heals on the next open (schema.sql re-applies
290
+ * CREATE INDEX IF NOT EXISTS).
291
+ */
292
+ beginBulkRefLoad() {
293
+ for (const idx of DatabaseConnection.BULK_REF_INDEX_NAMES) {
294
+ this.db.exec(`DROP INDEX IF EXISTS ${idx}`);
295
+ }
296
+ }
297
+ /** Leave bulk-ref mode: recreate each index in one scan (yield between). */
298
+ async endBulkRefLoad() {
299
+ const schemaPath = path.join(__dirname, 'schema.sql');
300
+ const schema = fs.readFileSync(schemaPath, 'utf-8');
301
+ for (const idx of DatabaseConnection.BULK_REF_INDEX_NAMES) {
302
+ const m = schema.match(new RegExp(`CREATE INDEX IF NOT EXISTS ${idx}\\b[^;]*;`));
303
+ if (!m)
304
+ throw new Error(`schema.sql: ref index ${idx} not found for bulk-load recreation`);
305
+ this.db.exec(m[0]);
306
+ await new Promise((resolve) => setImmediate(resolve));
307
+ }
308
+ }
309
+ /**
310
+ * Names of the NON-UNIQUE edge indexes dropped for a bulk edge load.
311
+ * idx_edges_identity deliberately stays: INSERT OR IGNORE's dedup conflicts
312
+ * on it (#1034), and its leftmost column is `source`, so the source-keyed
313
+ * reads resolution makes mid-window (supertype walks over
314
+ * `implements`/`extends`) keep an index via its prefix — verified with
315
+ * EXPLAIN QUERY PLAN. Target-keyed and kind-keyed reads (traversal,
316
+ * synthesis) happen only after endBulkEdgeLoad().
317
+ */
318
+ static BULK_EDGE_INDEX_NAMES = [
319
+ 'idx_edges_kind',
320
+ 'idx_edges_source_kind',
321
+ 'idx_edges_target_kind',
322
+ 'idx_edges_provenance',
323
+ ];
324
+ /**
325
+ * Enter bulk-edge-load mode: drop the non-unique edge indexes so the mass
326
+ * INSERT OR IGNORE stream pays one B-tree (the identity index) instead of
327
+ * five — measured 2.8s → 1.1s inserting a 224k-edge resolution set, with
328
+ * recreation costing ~0.3s. MUST be paired with endBulkEdgeLoad(); a crash
329
+ * inside the window is healed on the next DatabaseConnection open (schema.sql
330
+ * re-applies CREATE INDEX IF NOT EXISTS).
331
+ */
332
+ beginBulkEdgeLoad() {
333
+ for (const idx of DatabaseConnection.BULK_EDGE_INDEX_NAMES) {
334
+ this.db.exec(`DROP INDEX IF EXISTS ${idx}`);
335
+ }
336
+ }
337
+ /**
338
+ * Leave bulk-edge-load mode: recreate the dropped indexes in one pass each
339
+ * over the (now fully loaded) edges table — far cheaper than maintaining
340
+ * them per-insert. DDL is extracted from schema.sql so it cannot drift.
341
+ *
342
+ * Async with a yield BETWEEN the four CREATE INDEX statements: each build is
343
+ * a synchronous scan of the whole edges table (~20s apiece at Linux-kernel
344
+ * scale, 79s total measured), and running them back-to-back is a single
345
+ * event-loop stall longer than the #850 liveness watchdog's 60s window — a
346
+ * daemon-triggered re-index would be SIGKILLed right after doing the work.
347
+ * One yield per statement keeps every stall to a single index build, which
348
+ * stays inside the window.
349
+ */
350
+ async endBulkEdgeLoad() {
351
+ const schemaPath = path.join(__dirname, 'schema.sql');
352
+ const schema = fs.readFileSync(schemaPath, 'utf-8');
353
+ for (const idx of DatabaseConnection.BULK_EDGE_INDEX_NAMES) {
354
+ const m = schema.match(new RegExp(`CREATE INDEX IF NOT EXISTS ${idx}\\b[^;]*;`));
355
+ if (!m)
356
+ throw new Error(`schema.sql: edge index ${idx} not found for bulk-load recreation`);
357
+ this.db.exec(m[0]);
358
+ await new Promise((resolve) => setImmediate(resolve));
359
+ }
360
+ }
361
+ /** Recreate the FTS triggers + rebuild if a bulk-load window never closed. */
362
+ healBulkNodeLoad() {
363
+ const row = this.db
364
+ .prepare(`SELECT count(*) AS c FROM sqlite_master WHERE type = 'trigger' AND name IN ('nodes_ai','nodes_ad','nodes_au')`)
365
+ .get();
366
+ if ((row?.c ?? 0) >= DatabaseConnection.FTS_TRIGGER_NAMES.length)
367
+ return;
368
+ this.endBulkNodeLoad();
369
+ }
370
+ /** Recreate every secondary index a killed bulk parse/ref/edge window may leave dropped. */
371
+ healBulkSecondaryIndexes() {
372
+ const names = [...new Set([
373
+ ...DatabaseConnection.BULK_PARSE_INDEX_NAMES,
374
+ ...DatabaseConnection.BULK_REF_INDEX_NAMES,
375
+ ...DatabaseConnection.BULK_EDGE_INDEX_NAMES,
376
+ ])];
377
+ const placeholders = names.map(() => '?').join(',');
378
+ const row = this.db
379
+ .prepare(`SELECT count(*) AS c FROM sqlite_master WHERE type = 'index' AND name IN (${placeholders})`)
380
+ .get(...names);
381
+ if ((row?.c ?? 0) >= names.length)
382
+ return;
383
+ const schemaPath = path.join(__dirname, 'schema.sql');
384
+ const schema = fs.readFileSync(schemaPath, 'utf-8');
385
+ for (const idx of names) {
386
+ const m = schema.match(new RegExp(`CREATE INDEX IF NOT EXISTS ${idx}\\b[^;]*;`));
387
+ if (!m)
388
+ throw new Error(`schema.sql: index ${idx} not found for crash recovery`);
389
+ this.db.exec(m[0]);
390
+ }
391
+ }
392
+ /**
393
+ * Recreate the FTS sync triggers from schema.sql — extracted from the file
394
+ * rather than duplicated here so the DDL cannot drift from the schema.
395
+ * (Re-execing the whole schema is not an option: it contains data INSERTs
396
+ * that are not idempotent, e.g. schema_versions.)
397
+ */
398
+ recreateFtsTriggers() {
399
+ const schemaPath = path.join(__dirname, 'schema.sql');
400
+ const schema = fs.readFileSync(schemaPath, 'utf-8');
401
+ const triggerDdls = schema.match(/CREATE TRIGGER IF NOT EXISTS nodes_a[idu]\b[\s\S]*?END;/g);
402
+ if (!triggerDdls || triggerDdls.length !== DatabaseConnection.FTS_TRIGGER_NAMES.length) {
403
+ throw new Error(`schema.sql: expected ${DatabaseConnection.FTS_TRIGGER_NAMES.length} nodes FTS triggers, found ${triggerDdls?.length ?? 0}`);
404
+ }
405
+ for (const ddl of triggerDdls) {
406
+ this.db.exec(ddl);
407
+ }
408
+ }
409
+ /**
410
+ * Get the underlying database instance
411
+ */
412
+ getDb() {
413
+ return this.db;
414
+ }
415
+ /**
416
+ * Get the SQLite backend serving this connection. Per-instance so
417
+ * MCP cross-project queries report the right backend even when
418
+ * multiple project DBs are open in the same process.
419
+ */
420
+ getBackend() {
421
+ return this.backend;
422
+ }
423
+ /**
424
+ * Get database file path
425
+ */
426
+ getPath() {
427
+ return this.dbPath;
428
+ }
429
+ /**
430
+ * The journal mode actually in effect (e.g. 'wal', 'delete').
431
+ *
432
+ * SQLite silently keeps the prior mode if WAL can't be enabled — e.g. on
433
+ * filesystems without shared-memory support (some network/virtualized mounts,
434
+ * WSL2 /mnt). So the effective mode can differ
435
+ * from what `configureConnection` requested. Surfaced in `cg status` so
436
+ * a "database is locked" report is triageable: 'wal' ⇒ readers never block on a
437
+ * writer; anything else ⇒ they can. See issue #238.
438
+ */
439
+ getJournalMode() {
440
+ const raw = this.db.pragma('journal_mode');
441
+ const row = Array.isArray(raw) ? raw[0] : raw;
442
+ const mode = row && typeof row === 'object'
443
+ ? row.journal_mode
444
+ : row;
445
+ return String(mode ?? '').toLowerCase();
446
+ }
447
+ /**
448
+ * Get current schema version
449
+ */
450
+ getSchemaVersion() {
451
+ const row = this.db
452
+ .prepare('SELECT version, applied_at, description FROM schema_versions ORDER BY version DESC LIMIT 1')
453
+ .get();
454
+ if (!row)
455
+ return null;
456
+ return {
457
+ version: row.version,
458
+ appliedAt: row.applied_at,
459
+ description: row.description ?? undefined,
460
+ };
461
+ }
462
+ /**
463
+ * Execute a function within a transaction
464
+ */
465
+ transaction(fn) {
466
+ return this.db.transaction(fn)();
467
+ }
468
+ /**
469
+ * Get database file size in bytes
470
+ */
471
+ getSize() {
472
+ const stats = fs.statSync(this.dbPath);
473
+ return stats.size;
474
+ }
475
+ /**
476
+ * Size of the `-wal` sidecar file in bytes. 0 when it doesn't exist (non-WAL
477
+ * journal mode, in-memory DB, or no write since the last checkpoint+reset).
478
+ */
479
+ getWalSizeBytes() {
480
+ if (!this.dbPath || this.dbPath === ':memory:')
481
+ return 0;
482
+ try {
483
+ return fs.statSync(`${this.dbPath}-wal`).size;
484
+ }
485
+ catch {
486
+ return 0;
487
+ }
488
+ }
489
+ /** Size of the main DB file in bytes (0 for in-memory/unknown) — the WAL
490
+ * valve scales its fold caps with it (resolveWalValveMb). */
491
+ getDbFileSizeBytes() {
492
+ if (!this.dbPath || this.dbPath === ':memory:')
493
+ return 0;
494
+ try {
495
+ return fs.statSync(this.dbPath).size;
496
+ }
497
+ catch {
498
+ return 0;
499
+ }
500
+ }
501
+ /** Current `wal_autocheckpoint` interval in pages (0 = disabled). */
502
+ getWalAutocheckpoint() {
503
+ const v = this.db.pragma('wal_autocheckpoint', { simple: true });
504
+ const n = Number(v);
505
+ return Number.isFinite(n) ? n : 0;
506
+ }
507
+ /**
508
+ * Set the connection's `wal_autocheckpoint` interval (pages; 0 disables).
509
+ * Bulk indexing defers checkpoints entirely (#1231): the default 1000-page
510
+ * auto-checkpoint re-writes hot B-tree/FTS pages into the main DB file over
511
+ * and over — measured at ~95% of ALL disk I/O during a bulk index, and the
512
+ * difference between 45s and 19+ minutes on HDD-class storage. During
513
+ * deferral a {@link WalCheckpointValve} bounds WAL growth off-thread.
514
+ */
515
+ setWalAutocheckpoint(pages) {
516
+ this.db.pragma(`wal_autocheckpoint = ${Math.max(0, Math.floor(pages))}`);
517
+ }
518
+ /**
519
+ * `PRAGMA wal_checkpoint(PASSIVE)` on a worker thread with its own
520
+ * connection. PASSIVE never blocks the writer, and running it off-thread
521
+ * means the main thread — and the #850 watchdog heartbeat — keep turning
522
+ * even when the backfill is minutes of I/O on slow storage (a synchronous
523
+ * checkpoint that exceeds the watchdog's 60s window gets a healthy index
524
+ * SIGKILLed — observed in the #1231 repro).
525
+ *
526
+ * Returns SQLite's checkpoint result row — `log === checkpointed` with
527
+ * `busy === 0` means the ENTIRE WAL was backfilled, so the writer's next
528
+ * commit restarts the WAL from the top and the file stops growing. The
529
+ * WAL valve needs that signal because a WAL file's SIZE never shrinks:
530
+ * after the first wrap, raw file size says nothing about the un-backfilled
531
+ * backlog. Best-effort: returns null on any failure (including worker
532
+ * threads being unavailable — a potentially minutes-long checkpoint must
533
+ * never run inline on the main thread).
534
+ */
535
+ async checkpointWalPassive() {
536
+ return this.checkpointWal('PASSIVE');
537
+ }
538
+ /**
539
+ * `PRAGMA wal_checkpoint(TRUNCATE)` — same off-thread pattern as PASSIVE,
540
+ * but on success the WAL FILE is chopped to zero. A completed passive
541
+ * backfill bounds the un-checkpointed backlog, yet the FILE only stops
542
+ * growing when a commit finds ZERO readers holding WAL marks — rare while
543
+ * pool workers cycle, so at kernel scale a fully-backfilled WAL still
544
+ * accreted the phase's whole write volume on disk (§7a.1: 22GB). The valve
545
+ * calls this exactly at a parked barrier (writer parked, pool drained,
546
+ * backfill complete) where the no-reader condition is guaranteed rather
547
+ * than lucky. The worker sets a short busy_timeout so a racing reader
548
+ * degrades this to a no-op (busy=1) instead of a stall.
549
+ */
550
+ async checkpointWalTruncate() {
551
+ return this.checkpointWal('TRUNCATE');
552
+ }
553
+ /**
554
+ * Shrink a leftover oversized WAL (#1431). A SIGKILL'd session — the #850
555
+ * liveness watchdog, OOM, a crash — leaves its WAL on disk, the next session
556
+ * appends to the same file, and (pre-#1431) nothing ever truncated it:
557
+ * PASSIVE checkpoints fold frames but keep the file at its high-water mark,
558
+ * and the one shrinking path (a clean last-connection close) is exactly what
559
+ * the killed world never takes. Unbounded growth until the disk fills.
560
+ *
561
+ * Called fire-and-forget from every `open()`: cost is one statSync when the
562
+ * WAL is small (the overwhelmingly common case). Past the threshold it runs
563
+ * the off-thread PASSIVE fold then TRUNCATE — both on worker connections
564
+ * with a busy_timeout, so a racing writer degrades this to a no-op that the
565
+ * next open retries rather than a stall.
566
+ */
567
+ async healOversizedWal() {
568
+ const beforeBytes = this.getWalSizeBytes();
569
+ if (beforeBytes <= exports.WAL_HEAL_THRESHOLD_BYTES) {
570
+ return { healed: false, beforeBytes, afterBytes: beforeBytes };
571
+ }
572
+ // Single-flight: open() fires this fire-and-forget and callers may also
573
+ // invoke it explicitly. Two concurrent passes DEFEAT each other — each
574
+ // checkpoint worker sees the other as a busy reader and no-ops — so share
575
+ // one in-flight pass instead of racing.
576
+ this.walHeal ??= this.runWalHeal(beforeBytes).finally(() => { this.walHeal = null; });
577
+ return this.walHeal;
578
+ }
579
+ walHeal = null;
580
+ async runWalHeal(beforeBytes) {
581
+ // A racing reader/writer (another session healing the same file, a query
582
+ // pool warming up) degrades a checkpoint pass to a busy no-op — retry a
583
+ // few times before leaving the rest to the next open.
584
+ for (let attempt = 0; attempt < 3; attempt++) {
585
+ if (attempt > 0)
586
+ await new Promise((r) => setTimeout(r, 300));
587
+ await this.checkpointWalPassive();
588
+ await this.checkpointWalTruncate();
589
+ if (this.getWalSizeBytes() <= exports.WAL_HEAL_THRESHOLD_BYTES)
590
+ break;
591
+ }
592
+ const afterBytes = this.getWalSizeBytes();
593
+ if (process.env.CODEGRAPH_WAL_VALVE_DEBUG) {
594
+ console.error(`[wal-heal] oversized WAL at open: ${Math.round(beforeBytes / (1024 * 1024))}MB -> ${Math.round(afterBytes / (1024 * 1024))}MB`);
595
+ }
596
+ return { healed: afterBytes < beforeBytes, beforeBytes, afterBytes };
597
+ }
598
+ async checkpointWal(mode) {
599
+ if (!this.dbPath || this.dbPath === ':memory:') {
600
+ try {
601
+ const row = this.db.prepare(`PRAGMA wal_checkpoint(${mode})`).get();
602
+ return row ? { busy: Number(row.busy), log: Number(row.log), checkpointed: Number(row.checkpointed) } : null;
603
+ }
604
+ catch {
605
+ return null;
606
+ }
607
+ }
608
+ try {
609
+ const { Worker } = await Promise.resolve().then(() => __importStar(require('node:worker_threads')));
610
+ const workerSource = `
611
+ const { workerData, parentPort } = require('node:worker_threads');
612
+ let row = null;
613
+ let err = null;
614
+ try {
615
+ const { DatabaseSync } = require('node:sqlite');
616
+ const db = new DatabaseSync(workerData.dbPath);
617
+ const mode = workerData.mode === 'TRUNCATE' ? 'TRUNCATE' : 'PASSIVE';
618
+ try {
619
+ if (mode === 'TRUNCATE') db.exec('PRAGMA busy_timeout = 2000');
620
+ row = db.prepare('PRAGMA wal_checkpoint(' + mode + ')').get();
621
+ } catch (e) { err = String(e && e.message || e); }
622
+ try { db.close(); } catch {}
623
+ } catch (e) { err = err || String(e && e.message || e); }
624
+ parentPort.postMessage({ row, err });
625
+ `;
626
+ return await new Promise((resolve) => {
627
+ let settled = false;
628
+ const finish = (row) => {
629
+ if (settled)
630
+ return;
631
+ settled = true;
632
+ resolve(row ? { busy: Number(row.busy), log: Number(row.log), checkpointed: Number(row.checkpointed) } : null);
633
+ };
634
+ try {
635
+ const worker = new Worker(workerSource, { eval: true, workerData: { dbPath: this.dbPath, mode } });
636
+ worker.once('message', (m) => {
637
+ if (m?.err && process.env.CODEGRAPH_WAL_VALVE_DEBUG) {
638
+ console.error(`[wal-valve] checkpoint worker (${mode}): ${m.err}`);
639
+ }
640
+ void worker.terminate();
641
+ finish(m?.row ?? null);
642
+ });
643
+ worker.once('error', () => { void worker.terminate(); finish(null); });
644
+ worker.once('exit', () => finish(null));
645
+ }
646
+ catch {
647
+ finish(null);
648
+ }
649
+ });
650
+ }
651
+ catch {
652
+ return null;
653
+ }
654
+ }
655
+ /**
656
+ * Optimize database (vacuum and analyze)
657
+ */
658
+ optimize() {
659
+ this.db.exec('VACUUM');
660
+ this.db.exec('ANALYZE');
661
+ }
662
+ /**
663
+ * Lightweight maintenance to run after bulk writes (indexAll, sync).
664
+ * Two operations:
665
+ *
666
+ * - `PRAGMA optimize` — incremental ANALYZE; SQLite only re-analyzes
667
+ * tables whose row counts changed materially since the last
668
+ * ANALYZE. Without it, the query planner has no statistics on the
669
+ * freshly-bulk-loaded tables and can pick suboptimal indexes.
670
+ *
671
+ * - `PRAGMA wal_checkpoint(PASSIVE)` — fold pending WAL pages back
672
+ * into the main database file so the WAL file doesn't grow
673
+ * unboundedly between automatic checkpoints (auto-fires at 1000
674
+ * pages by default; large indexAll runs blow past that).
675
+ *
676
+ * Runs on a WORKER THREAD with its own connection: on a multi-GB index
677
+ * these pragmas are minutes of synchronous IO (a 95k-file kernel index
678
+ * left a 593MB WAL whose checkpoint alone blew the #850 watchdog's 60s
679
+ * window and got a COMPLETED index SIGKILLed at the finish line). WAL
680
+ * checkpointing from a second connection is standard SQLite; `PRAGMA
681
+ * optimize` persists its statistics in sqlite_stat tables, so the main
682
+ * connection benefits the same. The main thread just awaits a message,
683
+ * so the event loop — and the watchdog heartbeat — keep turning.
684
+ *
685
+ * Everything is silently swallowed on failure — best-effort
686
+ * optimization, never load-bearing for correctness. If worker threads
687
+ * are unavailable, falls back to a bounded in-line `PRAGMA optimize`
688
+ * and SKIPS the checkpoint (the final close() checkpoints after the
689
+ * CLI has already disarmed its watchdog).
690
+ */
691
+ async runMaintenance() {
692
+ // In-memory / test databases: nothing worth a worker round-trip.
693
+ if (!this.dbPath || this.dbPath === ':memory:') {
694
+ try {
695
+ this.db.exec('PRAGMA optimize');
696
+ }
697
+ catch { /* ignore */ }
698
+ try {
699
+ this.db.exec('PRAGMA wal_checkpoint(PASSIVE)');
700
+ }
701
+ catch { /* ignore */ }
702
+ return;
703
+ }
704
+ await this.runPragmasOffThread(['PRAGMA analysis_limit=1000', 'PRAGMA optimize', 'PRAGMA wal_checkpoint(PASSIVE)'],
705
+ // Worker threads unavailable — bounded in-line fallback, no checkpoint.
706
+ ['PRAGMA analysis_limit=1000', 'PRAGMA optimize']);
707
+ }
708
+ /**
709
+ * Run pragmas on a worker thread against its own connection to this DB
710
+ * (shared machinery for {@link runMaintenance} and
711
+ * {@link checkpointWalPassive}). Each pragma is individually best-effort;
712
+ * the whole call is best-effort. `inlineFallback` (if any) runs on THIS
713
+ * connection only when worker threads are unavailable — keep it to pragmas
714
+ * that are safe to run synchronously on the main thread.
715
+ */
716
+ async runPragmasOffThread(pragmas, inlineFallback = []) {
717
+ try {
718
+ const { Worker } = await Promise.resolve().then(() => __importStar(require('node:worker_threads')));
719
+ const workerSource = `
720
+ const { workerData, parentPort } = require('node:worker_threads');
721
+ try {
722
+ const { DatabaseSync } = require('node:sqlite');
723
+ const db = new DatabaseSync(workerData.dbPath);
724
+ for (const p of workerData.pragmas) { try { db.exec(p); } catch {} }
725
+ try { db.close(); } catch {}
726
+ } catch {}
727
+ parentPort.postMessage('done');
728
+ `;
729
+ await new Promise((resolve) => {
730
+ let settled = false;
731
+ const finish = () => {
732
+ if (!settled) {
733
+ settled = true;
734
+ resolve();
735
+ }
736
+ };
737
+ try {
738
+ const worker = new Worker(workerSource, { eval: true, workerData: { dbPath: this.dbPath, pragmas } });
739
+ worker.once('message', () => { void worker.terminate(); finish(); });
740
+ worker.once('error', () => { void worker.terminate(); finish(); });
741
+ worker.once('exit', finish);
742
+ }
743
+ catch {
744
+ finish();
745
+ }
746
+ });
747
+ }
748
+ catch {
749
+ for (const p of inlineFallback) {
750
+ try {
751
+ this.db.exec(p);
752
+ }
753
+ catch { /* ignore */ }
754
+ }
755
+ }
756
+ }
757
+ /**
758
+ * Close the database connection
759
+ */
760
+ close() {
761
+ this.db.close();
762
+ }
763
+ /**
764
+ * Check if the database connection is open
765
+ */
766
+ isOpen() {
767
+ return this.db.open;
768
+ }
769
+ /**
770
+ * True when the DB file at our path has been REPLACED on disk since we opened
771
+ * it — a different inode now lives at the same path, so the fd we still hold
772
+ * points at a now-unlinked inode that can never receive new writes (#925).
773
+ * The trigger is removing and recreating `.codegraph/` at the same path under
774
+ * a long-lived process (`git worktree remove` + re-add, or `rm -rf
775
+ * .codegraph` + `cg init`). Returns false when the inode is unchanged,
776
+ * when the file is momentarily absent (mid-recreate — nothing to reopen onto
777
+ * yet), or when the platform doesn't report a usable inode (Windows can't
778
+ * unlink an open file and its st_ino is unreliable, so this never fires there).
779
+ */
780
+ isReplacedOnDisk() {
781
+ if (this.openedInode === null)
782
+ return false;
783
+ const current = statInode(this.dbPath);
784
+ return current !== null && current !== this.openedInode;
785
+ }
786
+ }
787
+ exports.DatabaseConnection = DatabaseConnection;
788
+ /**
789
+ * `dev:ino` for a path, or null if it can't be stat'd or the platform doesn't
790
+ * report a usable inode. Windows st_ino is unreliable across handle reopens, so
791
+ * we deliberately return null there — the deleted-but-open-inode hazard this
792
+ * guards (#925) is a POSIX file-semantics issue that doesn't arise on Windows
793
+ * (an open file can't be unlinked).
794
+ */
795
+ function statInode(p) {
796
+ if (process.platform === 'win32')
797
+ return null;
798
+ try {
799
+ const s = fs.statSync(p);
800
+ return `${s.dev}:${s.ino}`;
801
+ }
802
+ catch {
803
+ return null;
804
+ }
805
+ }
806
+ /**
807
+ * Default database filename
808
+ */
809
+ exports.DATABASE_FILENAME = 'codegraph.db';
810
+ /**
811
+ * SQLite's sidecar files in WAL mode — the write-ahead log and its shared-memory
812
+ * index. They sit beside the main DB file and are removed alongside it when the
813
+ * database is discarded (see `removeDatabaseFiles`).
814
+ */
815
+ const WAL_SIDECAR_SUFFIXES = ['-wal', '-shm'];
816
+ /**
817
+ * Get the default database path for a project
818
+ */
819
+ function getDatabasePath(projectRoot) {
820
+ return path.join((0, directory_1.getCodeGraphDir)(projectRoot), exports.DATABASE_FILENAME);
821
+ }
822
+ /**
823
+ * Delete a database file and its WAL sidecars (`-wal`/`-shm`).
824
+ *
825
+ * This is how a FULL re-index discards an existing database — rather than
826
+ * opening the old graph and DELETE-ing every row. On a large or pre-fix
827
+ * poisoned index (e.g. an old graph that scanned an ignored gitlink corpus into
828
+ * ~1.6M nodes with a multi-GB WAL, #1065) the per-row `nodes_fts` delete-trigger
829
+ * churn blocks the main thread long enough to trip the #850 liveness watchdog
830
+ * before indexing even starts, so the rebuild could never recover the bad state
831
+ * (#1067). Unlinking is O(1) regardless of DB size and also reclaims the disk
832
+ * the bloated WAL would otherwise keep.
833
+ *
834
+ * POSIX removes the directory entry even while another process (a daemon/MCP
835
+ * server) still holds the file open; that holder heals via `reopenIfReplaced`
836
+ * (#925). On Windows a live holder can make the unlink fail with EBUSY/EPERM —
837
+ * that is thrown for the caller to surface ("stop the other process and retry").
838
+ * The `-wal`/`-shm` sidecars are best-effort: SQLite recreates them on the next
839
+ * open, so a leftover sidecar is harmless.
840
+ */
841
+ function removeDatabaseFiles(dbPath) {
842
+ // The main DB file first — its removal is the operation that must succeed (or
843
+ // report why it couldn't). force:true treats an already-missing file as done.
844
+ fs.rmSync(dbPath, { force: true });
845
+ for (const suffix of WAL_SIDECAR_SUFFIXES) {
846
+ try {
847
+ fs.rmSync(dbPath + suffix, { force: true });
848
+ }
849
+ catch {
850
+ // A sidecar still held/locked is harmless — SQLite rebuilds it on open.
851
+ }
852
+ }
853
+ }
854
+ //# sourceMappingURL=index.js.map