@ltm-alpha/alpha-cs 1.6.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 (1107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +972 -0
  3. package/dist/bin/command-supervision.d.ts +49 -0
  4. package/dist/bin/command-supervision.d.ts.map +1 -0
  5. package/dist/bin/command-supervision.js +95 -0
  6. package/dist/bin/command-supervision.js.map +1 -0
  7. package/dist/bin/fatal-handler.d.ts +20 -0
  8. package/dist/bin/fatal-handler.d.ts.map +1 -0
  9. package/dist/bin/fatal-handler.js +118 -0
  10. package/dist/bin/fatal-handler.js.map +1 -0
  11. package/dist/bin/ltm-alpha-cs.d.ts +27 -0
  12. package/dist/bin/ltm-alpha-cs.d.ts.map +1 -0
  13. package/dist/bin/ltm-alpha-cs.js +2643 -0
  14. package/dist/bin/ltm-alpha-cs.js.map +1 -0
  15. package/dist/bin/node-version-check.d.ts +37 -0
  16. package/dist/bin/node-version-check.d.ts.map +1 -0
  17. package/dist/bin/node-version-check.js +79 -0
  18. package/dist/bin/node-version-check.js.map +1 -0
  19. package/dist/bin/uninstall.d.ts +14 -0
  20. package/dist/bin/uninstall.d.ts.map +1 -0
  21. package/dist/bin/uninstall.js +36 -0
  22. package/dist/bin/uninstall.js.map +1 -0
  23. package/dist/context/formatter.d.ts +36 -0
  24. package/dist/context/formatter.d.ts.map +1 -0
  25. package/dist/context/formatter.js +269 -0
  26. package/dist/context/formatter.js.map +1 -0
  27. package/dist/context/index.d.ts +131 -0
  28. package/dist/context/index.d.ts.map +1 -0
  29. package/dist/context/index.js +1378 -0
  30. package/dist/context/index.js.map +1 -0
  31. package/dist/context/markers.d.ts +19 -0
  32. package/dist/context/markers.d.ts.map +1 -0
  33. package/dist/context/markers.js +22 -0
  34. package/dist/context/markers.js.map +1 -0
  35. package/dist/db/index.d.ts +385 -0
  36. package/dist/db/index.d.ts.map +1 -0
  37. package/dist/db/index.js +902 -0
  38. package/dist/db/index.js.map +1 -0
  39. package/dist/db/migrations.d.ts +44 -0
  40. package/dist/db/migrations.d.ts.map +1 -0
  41. package/dist/db/migrations.js +236 -0
  42. package/dist/db/migrations.js.map +1 -0
  43. package/dist/db/queries.d.ts +1095 -0
  44. package/dist/db/queries.d.ts.map +1 -0
  45. package/dist/db/queries.js +3285 -0
  46. package/dist/db/queries.js.map +1 -0
  47. package/dist/db/schema.sql +207 -0
  48. package/dist/db/sqlite-adapter.d.ts +55 -0
  49. package/dist/db/sqlite-adapter.d.ts.map +1 -0
  50. package/dist/db/sqlite-adapter.js +135 -0
  51. package/dist/db/sqlite-adapter.js.map +1 -0
  52. package/dist/db/wal-valve.d.ts +139 -0
  53. package/dist/db/wal-valve.d.ts.map +1 -0
  54. package/dist/db/wal-valve.js +333 -0
  55. package/dist/db/wal-valve.js.map +1 -0
  56. package/dist/directory.d.ts +232 -0
  57. package/dist/directory.d.ts.map +1 -0
  58. package/dist/directory.js +877 -0
  59. package/dist/directory.js.map +1 -0
  60. package/dist/errors.d.ts +150 -0
  61. package/dist/errors.d.ts.map +1 -0
  62. package/dist/errors.js +234 -0
  63. package/dist/errors.js.map +1 -0
  64. package/dist/extraction/astro-extractor.d.ts +79 -0
  65. package/dist/extraction/astro-extractor.d.ts.map +1 -0
  66. package/dist/extraction/astro-extractor.js +320 -0
  67. package/dist/extraction/astro-extractor.js.map +1 -0
  68. package/dist/extraction/cfml-extractor.d.ts +107 -0
  69. package/dist/extraction/cfml-extractor.d.ts.map +1 -0
  70. package/dist/extraction/cfml-extractor.js +505 -0
  71. package/dist/extraction/cfml-extractor.js.map +1 -0
  72. package/dist/extraction/dfm-extractor.d.ts +31 -0
  73. package/dist/extraction/dfm-extractor.d.ts.map +1 -0
  74. package/dist/extraction/dfm-extractor.js +151 -0
  75. package/dist/extraction/dfm-extractor.js.map +1 -0
  76. package/dist/extraction/extraction-version.d.ts +25 -0
  77. package/dist/extraction/extraction-version.d.ts.map +1 -0
  78. package/dist/extraction/extraction-version.js +28 -0
  79. package/dist/extraction/extraction-version.js.map +1 -0
  80. package/dist/extraction/function-ref.d.ts +118 -0
  81. package/dist/extraction/function-ref.d.ts.map +1 -0
  82. package/dist/extraction/function-ref.js +746 -0
  83. package/dist/extraction/function-ref.js.map +1 -0
  84. package/dist/extraction/generated-detection.d.ts +66 -0
  85. package/dist/extraction/generated-detection.d.ts.map +1 -0
  86. package/dist/extraction/generated-detection.js +248 -0
  87. package/dist/extraction/generated-detection.js.map +1 -0
  88. package/dist/extraction/grammars.d.ts +148 -0
  89. package/dist/extraction/grammars.d.ts.map +1 -0
  90. package/dist/extraction/grammars.js +743 -0
  91. package/dist/extraction/grammars.js.map +1 -0
  92. package/dist/extraction/index.d.ts +455 -0
  93. package/dist/extraction/index.d.ts.map +1 -0
  94. package/dist/extraction/index.js +3208 -0
  95. package/dist/extraction/index.js.map +1 -0
  96. package/dist/extraction/kernel/decode.d.ts +9 -0
  97. package/dist/extraction/kernel/decode.d.ts.map +1 -0
  98. package/dist/extraction/kernel/decode.js +162 -0
  99. package/dist/extraction/kernel/decode.js.map +1 -0
  100. package/dist/extraction/kernel/index.d.ts +64 -0
  101. package/dist/extraction/kernel/index.d.ts.map +1 -0
  102. package/dist/extraction/kernel/index.js +279 -0
  103. package/dist/extraction/kernel/index.js.map +1 -0
  104. package/dist/extraction/kernel/layout.d.ts +101 -0
  105. package/dist/extraction/kernel/layout.d.ts.map +1 -0
  106. package/dist/extraction/kernel/layout.js +104 -0
  107. package/dist/extraction/kernel/layout.js.map +1 -0
  108. package/dist/extraction/kernel/loader.d.ts +103 -0
  109. package/dist/extraction/kernel/loader.d.ts.map +1 -0
  110. package/dist/extraction/kernel/loader.js +146 -0
  111. package/dist/extraction/kernel/loader.js.map +1 -0
  112. package/dist/extraction/languages/arkts.d.ts +3 -0
  113. package/dist/extraction/languages/arkts.d.ts.map +1 -0
  114. package/dist/extraction/languages/arkts.js +127 -0
  115. package/dist/extraction/languages/arkts.js.map +1 -0
  116. package/dist/extraction/languages/c-cpp.d.ts +167 -0
  117. package/dist/extraction/languages/c-cpp.d.ts.map +1 -0
  118. package/dist/extraction/languages/c-cpp.js +1850 -0
  119. package/dist/extraction/languages/c-cpp.js.map +1 -0
  120. package/dist/extraction/languages/cfquery.d.ts +12 -0
  121. package/dist/extraction/languages/cfquery.d.ts.map +1 -0
  122. package/dist/extraction/languages/cfquery.js +28 -0
  123. package/dist/extraction/languages/cfquery.js.map +1 -0
  124. package/dist/extraction/languages/cfscript.d.ts +3 -0
  125. package/dist/extraction/languages/cfscript.d.ts.map +1 -0
  126. package/dist/extraction/languages/cfscript.js +73 -0
  127. package/dist/extraction/languages/cfscript.js.map +1 -0
  128. package/dist/extraction/languages/cobol.d.ts +33 -0
  129. package/dist/extraction/languages/cobol.d.ts.map +1 -0
  130. package/dist/extraction/languages/cobol.js +499 -0
  131. package/dist/extraction/languages/cobol.js.map +1 -0
  132. package/dist/extraction/languages/csharp.d.ts +25 -0
  133. package/dist/extraction/languages/csharp.d.ts.map +1 -0
  134. package/dist/extraction/languages/csharp.js +175 -0
  135. package/dist/extraction/languages/csharp.js.map +1 -0
  136. package/dist/extraction/languages/dart.d.ts +3 -0
  137. package/dist/extraction/languages/dart.d.ts.map +1 -0
  138. package/dist/extraction/languages/dart.js +374 -0
  139. package/dist/extraction/languages/dart.js.map +1 -0
  140. package/dist/extraction/languages/erlang.d.ts +3 -0
  141. package/dist/extraction/languages/erlang.d.ts.map +1 -0
  142. package/dist/extraction/languages/erlang.js +386 -0
  143. package/dist/extraction/languages/erlang.js.map +1 -0
  144. package/dist/extraction/languages/go.d.ts +3 -0
  145. package/dist/extraction/languages/go.d.ts.map +1 -0
  146. package/dist/extraction/languages/go.js +111 -0
  147. package/dist/extraction/languages/go.js.map +1 -0
  148. package/dist/extraction/languages/index.d.ts +10 -0
  149. package/dist/extraction/languages/index.d.ts.map +1 -0
  150. package/dist/extraction/languages/index.js +71 -0
  151. package/dist/extraction/languages/index.js.map +1 -0
  152. package/dist/extraction/languages/java.d.ts +3 -0
  153. package/dist/extraction/languages/java.d.ts.map +1 -0
  154. package/dist/extraction/languages/java.js +315 -0
  155. package/dist/extraction/languages/java.js.map +1 -0
  156. package/dist/extraction/languages/javascript.d.ts +3 -0
  157. package/dist/extraction/languages/javascript.d.ts.map +1 -0
  158. package/dist/extraction/languages/javascript.js +106 -0
  159. package/dist/extraction/languages/javascript.js.map +1 -0
  160. package/dist/extraction/languages/kotlin.d.ts +3 -0
  161. package/dist/extraction/languages/kotlin.d.ts.map +1 -0
  162. package/dist/extraction/languages/kotlin.js +512 -0
  163. package/dist/extraction/languages/kotlin.js.map +1 -0
  164. package/dist/extraction/languages/lua.d.ts +3 -0
  165. package/dist/extraction/languages/lua.d.ts.map +1 -0
  166. package/dist/extraction/languages/lua.js +153 -0
  167. package/dist/extraction/languages/lua.js.map +1 -0
  168. package/dist/extraction/languages/luau.d.ts +3 -0
  169. package/dist/extraction/languages/luau.d.ts.map +1 -0
  170. package/dist/extraction/languages/luau.js +37 -0
  171. package/dist/extraction/languages/luau.js.map +1 -0
  172. package/dist/extraction/languages/nix.d.ts +3 -0
  173. package/dist/extraction/languages/nix.d.ts.map +1 -0
  174. package/dist/extraction/languages/nix.js +294 -0
  175. package/dist/extraction/languages/nix.js.map +1 -0
  176. package/dist/extraction/languages/objc.d.ts +3 -0
  177. package/dist/extraction/languages/objc.d.ts.map +1 -0
  178. package/dist/extraction/languages/objc.js +179 -0
  179. package/dist/extraction/languages/objc.js.map +1 -0
  180. package/dist/extraction/languages/pascal.d.ts +3 -0
  181. package/dist/extraction/languages/pascal.d.ts.map +1 -0
  182. package/dist/extraction/languages/pascal.js +77 -0
  183. package/dist/extraction/languages/pascal.js.map +1 -0
  184. package/dist/extraction/languages/php.d.ts +3 -0
  185. package/dist/extraction/languages/php.d.ts.map +1 -0
  186. package/dist/extraction/languages/php.js +196 -0
  187. package/dist/extraction/languages/php.js.map +1 -0
  188. package/dist/extraction/languages/python.d.ts +3 -0
  189. package/dist/extraction/languages/python.d.ts.map +1 -0
  190. package/dist/extraction/languages/python.js +56 -0
  191. package/dist/extraction/languages/python.js.map +1 -0
  192. package/dist/extraction/languages/r.d.ts +3 -0
  193. package/dist/extraction/languages/r.d.ts.map +1 -0
  194. package/dist/extraction/languages/r.js +314 -0
  195. package/dist/extraction/languages/r.js.map +1 -0
  196. package/dist/extraction/languages/ruby.d.ts +3 -0
  197. package/dist/extraction/languages/ruby.d.ts.map +1 -0
  198. package/dist/extraction/languages/ruby.js +149 -0
  199. package/dist/extraction/languages/ruby.js.map +1 -0
  200. package/dist/extraction/languages/rust.d.ts +23 -0
  201. package/dist/extraction/languages/rust.d.ts.map +1 -0
  202. package/dist/extraction/languages/rust.js +172 -0
  203. package/dist/extraction/languages/rust.js.map +1 -0
  204. package/dist/extraction/languages/scala.d.ts +3 -0
  205. package/dist/extraction/languages/scala.d.ts.map +1 -0
  206. package/dist/extraction/languages/scala.js +219 -0
  207. package/dist/extraction/languages/scala.js.map +1 -0
  208. package/dist/extraction/languages/solidity.d.ts +3 -0
  209. package/dist/extraction/languages/solidity.d.ts.map +1 -0
  210. package/dist/extraction/languages/solidity.js +293 -0
  211. package/dist/extraction/languages/solidity.js.map +1 -0
  212. package/dist/extraction/languages/swift.d.ts +3 -0
  213. package/dist/extraction/languages/swift.d.ts.map +1 -0
  214. package/dist/extraction/languages/swift.js +152 -0
  215. package/dist/extraction/languages/swift.js.map +1 -0
  216. package/dist/extraction/languages/terraform.d.ts +3 -0
  217. package/dist/extraction/languages/terraform.d.ts.map +1 -0
  218. package/dist/extraction/languages/terraform.js +641 -0
  219. package/dist/extraction/languages/terraform.js.map +1 -0
  220. package/dist/extraction/languages/typescript.d.ts +16 -0
  221. package/dist/extraction/languages/typescript.d.ts.map +1 -0
  222. package/dist/extraction/languages/typescript.js +174 -0
  223. package/dist/extraction/languages/typescript.js.map +1 -0
  224. package/dist/extraction/languages/vbnet.d.ts +11 -0
  225. package/dist/extraction/languages/vbnet.d.ts.map +1 -0
  226. package/dist/extraction/languages/vbnet.js +141 -0
  227. package/dist/extraction/languages/vbnet.js.map +1 -0
  228. package/dist/extraction/liquid-extractor.d.ts +59 -0
  229. package/dist/extraction/liquid-extractor.d.ts.map +1 -0
  230. package/dist/extraction/liquid-extractor.js +357 -0
  231. package/dist/extraction/liquid-extractor.js.map +1 -0
  232. package/dist/extraction/mybatis-extractor.d.ts +68 -0
  233. package/dist/extraction/mybatis-extractor.d.ts.map +1 -0
  234. package/dist/extraction/mybatis-extractor.js +300 -0
  235. package/dist/extraction/mybatis-extractor.js.map +1 -0
  236. package/dist/extraction/parse-pool.d.ts +167 -0
  237. package/dist/extraction/parse-pool.d.ts.map +1 -0
  238. package/dist/extraction/parse-pool.js +421 -0
  239. package/dist/extraction/parse-pool.js.map +1 -0
  240. package/dist/extraction/parse-worker.d.ts +8 -0
  241. package/dist/extraction/parse-worker.d.ts.map +1 -0
  242. package/dist/extraction/parse-worker.js +138 -0
  243. package/dist/extraction/parse-worker.js.map +1 -0
  244. package/dist/extraction/razor-extractor.d.ts +42 -0
  245. package/dist/extraction/razor-extractor.d.ts.map +1 -0
  246. package/dist/extraction/razor-extractor.js +285 -0
  247. package/dist/extraction/razor-extractor.js.map +1 -0
  248. package/dist/extraction/store-worker.d.ts +24 -0
  249. package/dist/extraction/store-worker.d.ts.map +1 -0
  250. package/dist/extraction/store-worker.js +139 -0
  251. package/dist/extraction/store-worker.js.map +1 -0
  252. package/dist/extraction/store-writer.d.ts +63 -0
  253. package/dist/extraction/store-writer.d.ts.map +1 -0
  254. package/dist/extraction/store-writer.js +174 -0
  255. package/dist/extraction/store-writer.js.map +1 -0
  256. package/dist/extraction/svelte-extractor.d.ts +56 -0
  257. package/dist/extraction/svelte-extractor.d.ts.map +1 -0
  258. package/dist/extraction/svelte-extractor.js +275 -0
  259. package/dist/extraction/svelte-extractor.js.map +1 -0
  260. package/dist/extraction/syntax-tokens.d.ts +103 -0
  261. package/dist/extraction/syntax-tokens.d.ts.map +1 -0
  262. package/dist/extraction/syntax-tokens.js +381 -0
  263. package/dist/extraction/syntax-tokens.js.map +1 -0
  264. package/dist/extraction/tree-sitter-helpers.d.ts +28 -0
  265. package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -0
  266. package/dist/extraction/tree-sitter-helpers.js +153 -0
  267. package/dist/extraction/tree-sitter-helpers.js.map +1 -0
  268. package/dist/extraction/tree-sitter-types.d.ts +279 -0
  269. package/dist/extraction/tree-sitter-types.d.ts.map +1 -0
  270. package/dist/extraction/tree-sitter-types.js +10 -0
  271. package/dist/extraction/tree-sitter-types.js.map +1 -0
  272. package/dist/extraction/tree-sitter.d.ts +766 -0
  273. package/dist/extraction/tree-sitter.d.ts.map +1 -0
  274. package/dist/extraction/tree-sitter.js +7138 -0
  275. package/dist/extraction/tree-sitter.js.map +1 -0
  276. package/dist/extraction/vue-extractor.d.ts +51 -0
  277. package/dist/extraction/vue-extractor.d.ts.map +1 -0
  278. package/dist/extraction/vue-extractor.js +254 -0
  279. package/dist/extraction/vue-extractor.js.map +1 -0
  280. package/dist/extraction/wasm/tree-sitter-arkts.wasm +0 -0
  281. package/dist/extraction/wasm/tree-sitter-c.wasm +0 -0
  282. package/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
  283. package/dist/extraction/wasm/tree-sitter-cfml.wasm +0 -0
  284. package/dist/extraction/wasm/tree-sitter-cfquery.wasm +0 -0
  285. package/dist/extraction/wasm/tree-sitter-cfscript.wasm +0 -0
  286. package/dist/extraction/wasm/tree-sitter-cobol.wasm +0 -0
  287. package/dist/extraction/wasm/tree-sitter-cpp.wasm +0 -0
  288. package/dist/extraction/wasm/tree-sitter-dart.wasm +0 -0
  289. package/dist/extraction/wasm/tree-sitter-erlang.wasm +0 -0
  290. package/dist/extraction/wasm/tree-sitter-go.wasm +0 -0
  291. package/dist/extraction/wasm/tree-sitter-java.wasm +0 -0
  292. package/dist/extraction/wasm/tree-sitter-javascript.wasm +0 -0
  293. package/dist/extraction/wasm/tree-sitter-kotlin.wasm +0 -0
  294. package/dist/extraction/wasm/tree-sitter-lua.wasm +0 -0
  295. package/dist/extraction/wasm/tree-sitter-luau.wasm +0 -0
  296. package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  297. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  298. package/dist/extraction/wasm/tree-sitter-php.wasm +0 -0
  299. package/dist/extraction/wasm/tree-sitter-python.wasm +0 -0
  300. package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
  301. package/dist/extraction/wasm/tree-sitter-ruby.wasm +0 -0
  302. package/dist/extraction/wasm/tree-sitter-rust.wasm +0 -0
  303. package/dist/extraction/wasm/tree-sitter-scala.wasm +0 -0
  304. package/dist/extraction/wasm/tree-sitter-swift.wasm +0 -0
  305. package/dist/extraction/wasm/tree-sitter-terraform.wasm +0 -0
  306. package/dist/extraction/wasm/tree-sitter-tsx.wasm +0 -0
  307. package/dist/extraction/wasm/tree-sitter-typescript.wasm +0 -0
  308. package/dist/extraction/wasm/tree-sitter-vbnet.wasm +0 -0
  309. package/dist/extraction/wasm-runtime-flags.d.ts +53 -0
  310. package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -0
  311. package/dist/extraction/wasm-runtime-flags.js +130 -0
  312. package/dist/extraction/wasm-runtime-flags.js.map +1 -0
  313. package/dist/graph/branch-guards.d.ts +248 -0
  314. package/dist/graph/branch-guards.d.ts.map +1 -0
  315. package/dist/graph/branch-guards.js +2231 -0
  316. package/dist/graph/branch-guards.js.map +1 -0
  317. package/dist/graph/dead-code.d.ts +251 -0
  318. package/dist/graph/dead-code.d.ts.map +1 -0
  319. package/dist/graph/dead-code.js +756 -0
  320. package/dist/graph/dead-code.js.map +1 -0
  321. package/dist/graph/dynamic-boundary-report.d.ts +121 -0
  322. package/dist/graph/dynamic-boundary-report.d.ts.map +1 -0
  323. package/dist/graph/dynamic-boundary-report.js +283 -0
  324. package/dist/graph/dynamic-boundary-report.js.map +1 -0
  325. package/dist/graph/index.d.ts +12 -0
  326. package/dist/graph/index.d.ts.map +1 -0
  327. package/dist/graph/index.js +28 -0
  328. package/dist/graph/index.js.map +1 -0
  329. package/dist/graph/named-symbol-flow.d.ts +125 -0
  330. package/dist/graph/named-symbol-flow.d.ts.map +1 -0
  331. package/dist/graph/named-symbol-flow.js +552 -0
  332. package/dist/graph/named-symbol-flow.js.map +1 -0
  333. package/dist/graph/queries.d.ts +106 -0
  334. package/dist/graph/queries.d.ts.map +1 -0
  335. package/dist/graph/queries.js +341 -0
  336. package/dist/graph/queries.js.map +1 -0
  337. package/dist/graph/symbol-lookup.d.ts +83 -0
  338. package/dist/graph/symbol-lookup.d.ts.map +1 -0
  339. package/dist/graph/symbol-lookup.js +181 -0
  340. package/dist/graph/symbol-lookup.js.map +1 -0
  341. package/dist/graph/traversal.d.ts +127 -0
  342. package/dist/graph/traversal.d.ts.map +1 -0
  343. package/dist/graph/traversal.js +599 -0
  344. package/dist/graph/traversal.js.map +1 -0
  345. package/dist/graph/type-hierarchy.d.ts +155 -0
  346. package/dist/graph/type-hierarchy.d.ts.map +1 -0
  347. package/dist/graph/type-hierarchy.js +382 -0
  348. package/dist/graph/type-hierarchy.js.map +1 -0
  349. package/dist/index.d.ts +874 -0
  350. package/dist/index.d.ts.map +1 -0
  351. package/dist/index.js +2005 -0
  352. package/dist/index.js.map +1 -0
  353. package/dist/installer/config-writer.d.ts +28 -0
  354. package/dist/installer/config-writer.d.ts.map +1 -0
  355. package/dist/installer/config-writer.js +91 -0
  356. package/dist/installer/config-writer.js.map +1 -0
  357. package/dist/installer/index.d.ts +143 -0
  358. package/dist/installer/index.d.ts.map +1 -0
  359. package/dist/installer/index.js +621 -0
  360. package/dist/installer/index.js.map +1 -0
  361. package/dist/installer/instructions-template.d.ts +41 -0
  362. package/dist/installer/instructions-template.d.ts.map +1 -0
  363. package/dist/installer/instructions-template.js +53 -0
  364. package/dist/installer/instructions-template.js.map +1 -0
  365. package/dist/installer/targets/antigravity.d.ts +57 -0
  366. package/dist/installer/targets/antigravity.d.ts.map +1 -0
  367. package/dist/installer/targets/antigravity.js +308 -0
  368. package/dist/installer/targets/antigravity.js.map +1 -0
  369. package/dist/installer/targets/claude.d.ts +65 -0
  370. package/dist/installer/targets/claude.d.ts.map +1 -0
  371. package/dist/installer/targets/claude.js +514 -0
  372. package/dist/installer/targets/claude.js.map +1 -0
  373. package/dist/installer/targets/codex.d.ts +33 -0
  374. package/dist/installer/targets/codex.d.ts.map +1 -0
  375. package/dist/installer/targets/codex.js +212 -0
  376. package/dist/installer/targets/codex.js.map +1 -0
  377. package/dist/installer/targets/copilot-cli.d.ts +32 -0
  378. package/dist/installer/targets/copilot-cli.d.ts.map +1 -0
  379. package/dist/installer/targets/copilot-cli.js +215 -0
  380. package/dist/installer/targets/copilot-cli.js.map +1 -0
  381. package/dist/installer/targets/copilot-jetbrains.d.ts +42 -0
  382. package/dist/installer/targets/copilot-jetbrains.d.ts.map +1 -0
  383. package/dist/installer/targets/copilot-jetbrains.js +238 -0
  384. package/dist/installer/targets/copilot-jetbrains.js.map +1 -0
  385. package/dist/installer/targets/copilot-vscode.d.ts +47 -0
  386. package/dist/installer/targets/copilot-vscode.d.ts.map +1 -0
  387. package/dist/installer/targets/copilot-vscode.js +219 -0
  388. package/dist/installer/targets/copilot-vscode.js.map +1 -0
  389. package/dist/installer/targets/cursor.d.ts +35 -0
  390. package/dist/installer/targets/cursor.d.ts.map +1 -0
  391. package/dist/installer/targets/cursor.js +254 -0
  392. package/dist/installer/targets/cursor.js.map +1 -0
  393. package/dist/installer/targets/gemini.d.ts +26 -0
  394. package/dist/installer/targets/gemini.d.ts.map +1 -0
  395. package/dist/installer/targets/gemini.js +165 -0
  396. package/dist/installer/targets/gemini.js.map +1 -0
  397. package/dist/installer/targets/hermes.d.ts +18 -0
  398. package/dist/installer/targets/hermes.d.ts.map +1 -0
  399. package/dist/installer/targets/hermes.js +359 -0
  400. package/dist/installer/targets/hermes.js.map +1 -0
  401. package/dist/installer/targets/kiro.d.ts +27 -0
  402. package/dist/installer/targets/kiro.d.ts.map +1 -0
  403. package/dist/installer/targets/kiro.js +178 -0
  404. package/dist/installer/targets/kiro.js.map +1 -0
  405. package/dist/installer/targets/opencode.d.ts +49 -0
  406. package/dist/installer/targets/opencode.d.ts.map +1 -0
  407. package/dist/installer/targets/opencode.js +339 -0
  408. package/dist/installer/targets/opencode.js.map +1 -0
  409. package/dist/installer/targets/registry.d.ts +35 -0
  410. package/dist/installer/targets/registry.d.ts.map +1 -0
  411. package/dist/installer/targets/registry.js +97 -0
  412. package/dist/installer/targets/registry.js.map +1 -0
  413. package/dist/installer/targets/shared.d.ts +101 -0
  414. package/dist/installer/targets/shared.d.ts.map +1 -0
  415. package/dist/installer/targets/shared.js +264 -0
  416. package/dist/installer/targets/shared.js.map +1 -0
  417. package/dist/installer/targets/toml.d.ts +53 -0
  418. package/dist/installer/targets/toml.d.ts.map +1 -0
  419. package/dist/installer/targets/toml.js +226 -0
  420. package/dist/installer/targets/toml.js.map +1 -0
  421. package/dist/installer/targets/types.d.ts +108 -0
  422. package/dist/installer/targets/types.d.ts.map +1 -0
  423. package/dist/installer/targets/types.js +16 -0
  424. package/dist/installer/targets/types.js.map +1 -0
  425. package/dist/mcp/daemon-manager.d.ts +42 -0
  426. package/dist/mcp/daemon-manager.d.ts.map +1 -0
  427. package/dist/mcp/daemon-manager.js +141 -0
  428. package/dist/mcp/daemon-manager.js.map +1 -0
  429. package/dist/mcp/daemon-paths.d.ts +81 -0
  430. package/dist/mcp/daemon-paths.d.ts.map +1 -0
  431. package/dist/mcp/daemon-paths.js +228 -0
  432. package/dist/mcp/daemon-paths.js.map +1 -0
  433. package/dist/mcp/daemon-registry.d.ts +57 -0
  434. package/dist/mcp/daemon-registry.d.ts.map +1 -0
  435. package/dist/mcp/daemon-registry.js +323 -0
  436. package/dist/mcp/daemon-registry.js.map +1 -0
  437. package/dist/mcp/daemon.d.ts +294 -0
  438. package/dist/mcp/daemon.d.ts.map +1 -0
  439. package/dist/mcp/daemon.js +897 -0
  440. package/dist/mcp/daemon.js.map +1 -0
  441. package/dist/mcp/dynamic-boundaries.d.ts +32 -0
  442. package/dist/mcp/dynamic-boundaries.d.ts.map +1 -0
  443. package/dist/mcp/dynamic-boundaries.js +323 -0
  444. package/dist/mcp/dynamic-boundaries.js.map +1 -0
  445. package/dist/mcp/early-ppid.d.ts +26 -0
  446. package/dist/mcp/early-ppid.d.ts.map +1 -0
  447. package/dist/mcp/early-ppid.js +29 -0
  448. package/dist/mcp/early-ppid.js.map +1 -0
  449. package/dist/mcp/engine.d.ts +133 -0
  450. package/dist/mcp/engine.d.ts.map +1 -0
  451. package/dist/mcp/engine.js +421 -0
  452. package/dist/mcp/engine.js.map +1 -0
  453. package/dist/mcp/explore-dedup.d.ts +140 -0
  454. package/dist/mcp/explore-dedup.d.ts.map +1 -0
  455. package/dist/mcp/explore-dedup.js +239 -0
  456. package/dist/mcp/explore-dedup.js.map +1 -0
  457. package/dist/mcp/explore-diagnostics.d.ts +289 -0
  458. package/dist/mcp/explore-diagnostics.d.ts.map +1 -0
  459. package/dist/mcp/explore-diagnostics.js +558 -0
  460. package/dist/mcp/explore-diagnostics.js.map +1 -0
  461. package/dist/mcp/explore-session-state.d.ts +217 -0
  462. package/dist/mcp/explore-session-state.d.ts.map +1 -0
  463. package/dist/mcp/explore-session-state.js +322 -0
  464. package/dist/mcp/explore-session-state.js.map +1 -0
  465. package/dist/mcp/index.d.ts +139 -0
  466. package/dist/mcp/index.d.ts.map +1 -0
  467. package/dist/mcp/index.js +636 -0
  468. package/dist/mcp/index.js.map +1 -0
  469. package/dist/mcp/liveness-watchdog.d.ts +35 -0
  470. package/dist/mcp/liveness-watchdog.d.ts.map +1 -0
  471. package/dist/mcp/liveness-watchdog.js +269 -0
  472. package/dist/mcp/liveness-watchdog.js.map +1 -0
  473. package/dist/mcp/ppid-watchdog.d.ts +62 -0
  474. package/dist/mcp/ppid-watchdog.d.ts.map +1 -0
  475. package/dist/mcp/ppid-watchdog.js +64 -0
  476. package/dist/mcp/ppid-watchdog.js.map +1 -0
  477. package/dist/mcp/proxy.d.ts +87 -0
  478. package/dist/mcp/proxy.d.ts.map +1 -0
  479. package/dist/mcp/proxy.js +672 -0
  480. package/dist/mcp/proxy.js.map +1 -0
  481. package/dist/mcp/query-pool.d.ts +108 -0
  482. package/dist/mcp/query-pool.d.ts.map +1 -0
  483. package/dist/mcp/query-pool.js +315 -0
  484. package/dist/mcp/query-pool.js.map +1 -0
  485. package/dist/mcp/query-worker.d.ts +24 -0
  486. package/dist/mcp/query-worker.d.ts.map +1 -0
  487. package/dist/mcp/query-worker.js +87 -0
  488. package/dist/mcp/query-worker.js.map +1 -0
  489. package/dist/mcp/server-instructions.d.ts +34 -0
  490. package/dist/mcp/server-instructions.d.ts.map +1 -0
  491. package/dist/mcp/server-instructions.js +113 -0
  492. package/dist/mcp/server-instructions.js.map +1 -0
  493. package/dist/mcp/session.d.ts +109 -0
  494. package/dist/mcp/session.d.ts.map +1 -0
  495. package/dist/mcp/session.js +380 -0
  496. package/dist/mcp/session.js.map +1 -0
  497. package/dist/mcp/startup-handshake.d.ts +44 -0
  498. package/dist/mcp/startup-handshake.d.ts.map +1 -0
  499. package/dist/mcp/startup-handshake.js +73 -0
  500. package/dist/mcp/startup-handshake.js.map +1 -0
  501. package/dist/mcp/stdin-teardown.d.ts +27 -0
  502. package/dist/mcp/stdin-teardown.d.ts.map +1 -0
  503. package/dist/mcp/stdin-teardown.js +49 -0
  504. package/dist/mcp/stdin-teardown.js.map +1 -0
  505. package/dist/mcp/tools.d.ts +936 -0
  506. package/dist/mcp/tools.d.ts.map +1 -0
  507. package/dist/mcp/tools.js +6611 -0
  508. package/dist/mcp/tools.js.map +1 -0
  509. package/dist/mcp/transport.d.ts +188 -0
  510. package/dist/mcp/transport.d.ts.map +1 -0
  511. package/dist/mcp/transport.js +377 -0
  512. package/dist/mcp/transport.js.map +1 -0
  513. package/dist/mcp/version.d.ts +19 -0
  514. package/dist/mcp/version.d.ts.map +1 -0
  515. package/dist/mcp/version.js +71 -0
  516. package/dist/mcp/version.js.map +1 -0
  517. package/dist/mcp/writer-lock.d.ts +47 -0
  518. package/dist/mcp/writer-lock.d.ts.map +1 -0
  519. package/dist/mcp/writer-lock.js +218 -0
  520. package/dist/mcp/writer-lock.js.map +1 -0
  521. package/dist/project-config.d.ts +117 -0
  522. package/dist/project-config.d.ts.map +1 -0
  523. package/dist/project-config.js +409 -0
  524. package/dist/project-config.js.map +1 -0
  525. package/dist/resolution/alias-binding.d.ts +56 -0
  526. package/dist/resolution/alias-binding.d.ts.map +1 -0
  527. package/dist/resolution/alias-binding.js +118 -0
  528. package/dist/resolution/alias-binding.js.map +1 -0
  529. package/dist/resolution/c-fnptr-synthesizer.d.ts +6 -0
  530. package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -0
  531. package/dist/resolution/c-fnptr-synthesizer.js +1506 -0
  532. package/dist/resolution/c-fnptr-synthesizer.js.map +1 -0
  533. package/dist/resolution/callback-synthesizer.d.ts +78 -0
  534. package/dist/resolution/callback-synthesizer.d.ts.map +1 -0
  535. package/dist/resolution/callback-synthesizer.js +4105 -0
  536. package/dist/resolution/callback-synthesizer.js.map +1 -0
  537. package/dist/resolution/cooperative-yield.d.ts +40 -0
  538. package/dist/resolution/cooperative-yield.d.ts.map +1 -0
  539. package/dist/resolution/cooperative-yield.js +44 -0
  540. package/dist/resolution/cooperative-yield.js.map +1 -0
  541. package/dist/resolution/expo-router-synthesizer.d.ts +32 -0
  542. package/dist/resolution/expo-router-synthesizer.d.ts.map +1 -0
  543. package/dist/resolution/expo-router-synthesizer.js +189 -0
  544. package/dist/resolution/expo-router-synthesizer.js.map +1 -0
  545. package/dist/resolution/frameworks/astro.d.ts +9 -0
  546. package/dist/resolution/frameworks/astro.d.ts.map +1 -0
  547. package/dist/resolution/frameworks/astro.js +169 -0
  548. package/dist/resolution/frameworks/astro.js.map +1 -0
  549. package/dist/resolution/frameworks/cargo-workspace.d.ts +18 -0
  550. package/dist/resolution/frameworks/cargo-workspace.d.ts.map +1 -0
  551. package/dist/resolution/frameworks/cargo-workspace.js +225 -0
  552. package/dist/resolution/frameworks/cargo-workspace.js.map +1 -0
  553. package/dist/resolution/frameworks/cics.d.ts +20 -0
  554. package/dist/resolution/frameworks/cics.d.ts.map +1 -0
  555. package/dist/resolution/frameworks/cics.js +90 -0
  556. package/dist/resolution/frameworks/cics.js.map +1 -0
  557. package/dist/resolution/frameworks/csharp.d.ts +8 -0
  558. package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
  559. package/dist/resolution/frameworks/csharp.js +335 -0
  560. package/dist/resolution/frameworks/csharp.js.map +1 -0
  561. package/dist/resolution/frameworks/drupal.d.ts +51 -0
  562. package/dist/resolution/frameworks/drupal.d.ts.map +1 -0
  563. package/dist/resolution/frameworks/drupal.js +367 -0
  564. package/dist/resolution/frameworks/drupal.js.map +1 -0
  565. package/dist/resolution/frameworks/expo-modules.d.ts +3 -0
  566. package/dist/resolution/frameworks/expo-modules.d.ts.map +1 -0
  567. package/dist/resolution/frameworks/expo-modules.js +148 -0
  568. package/dist/resolution/frameworks/expo-modules.js.map +1 -0
  569. package/dist/resolution/frameworks/expo-router.d.ts +189 -0
  570. package/dist/resolution/frameworks/expo-router.d.ts.map +1 -0
  571. package/dist/resolution/frameworks/expo-router.js +785 -0
  572. package/dist/resolution/frameworks/expo-router.js.map +1 -0
  573. package/dist/resolution/frameworks/express.d.ts +8 -0
  574. package/dist/resolution/frameworks/express.d.ts.map +1 -0
  575. package/dist/resolution/frameworks/express.js +540 -0
  576. package/dist/resolution/frameworks/express.js.map +1 -0
  577. package/dist/resolution/frameworks/fabric.d.ts +3 -0
  578. package/dist/resolution/frameworks/fabric.d.ts.map +1 -0
  579. package/dist/resolution/frameworks/fabric.js +354 -0
  580. package/dist/resolution/frameworks/fabric.js.map +1 -0
  581. package/dist/resolution/frameworks/go.d.ts +8 -0
  582. package/dist/resolution/frameworks/go.d.ts.map +1 -0
  583. package/dist/resolution/frameworks/go.js +184 -0
  584. package/dist/resolution/frameworks/go.js.map +1 -0
  585. package/dist/resolution/frameworks/goframe.d.ts +41 -0
  586. package/dist/resolution/frameworks/goframe.d.ts.map +1 -0
  587. package/dist/resolution/frameworks/goframe.js +112 -0
  588. package/dist/resolution/frameworks/goframe.js.map +1 -0
  589. package/dist/resolution/frameworks/index.d.ts +55 -0
  590. package/dist/resolution/frameworks/index.d.ts.map +1 -0
  591. package/dist/resolution/frameworks/index.js +203 -0
  592. package/dist/resolution/frameworks/index.js.map +1 -0
  593. package/dist/resolution/frameworks/java.d.ts +8 -0
  594. package/dist/resolution/frameworks/java.d.ts.map +1 -0
  595. package/dist/resolution/frameworks/java.js +539 -0
  596. package/dist/resolution/frameworks/java.js.map +1 -0
  597. package/dist/resolution/frameworks/laravel.d.ts +13 -0
  598. package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
  599. package/dist/resolution/frameworks/laravel.js +257 -0
  600. package/dist/resolution/frameworks/laravel.js.map +1 -0
  601. package/dist/resolution/frameworks/nestjs.d.ts +26 -0
  602. package/dist/resolution/frameworks/nestjs.d.ts.map +1 -0
  603. package/dist/resolution/frameworks/nestjs.js +690 -0
  604. package/dist/resolution/frameworks/nestjs.js.map +1 -0
  605. package/dist/resolution/frameworks/nextjs.d.ts +76 -0
  606. package/dist/resolution/frameworks/nextjs.d.ts.map +1 -0
  607. package/dist/resolution/frameworks/nextjs.js +328 -0
  608. package/dist/resolution/frameworks/nextjs.js.map +1 -0
  609. package/dist/resolution/frameworks/object-literal.d.ts +32 -0
  610. package/dist/resolution/frameworks/object-literal.d.ts.map +1 -0
  611. package/dist/resolution/frameworks/object-literal.js +139 -0
  612. package/dist/resolution/frameworks/object-literal.js.map +1 -0
  613. package/dist/resolution/frameworks/package-deps.d.ts +14 -0
  614. package/dist/resolution/frameworks/package-deps.d.ts.map +1 -0
  615. package/dist/resolution/frameworks/package-deps.js +78 -0
  616. package/dist/resolution/frameworks/package-deps.js.map +1 -0
  617. package/dist/resolution/frameworks/play.d.ts +19 -0
  618. package/dist/resolution/frameworks/play.d.ts.map +1 -0
  619. package/dist/resolution/frameworks/play.js +111 -0
  620. package/dist/resolution/frameworks/play.js.map +1 -0
  621. package/dist/resolution/frameworks/python.d.ts +10 -0
  622. package/dist/resolution/frameworks/python.d.ts.map +1 -0
  623. package/dist/resolution/frameworks/python.js +566 -0
  624. package/dist/resolution/frameworks/python.js.map +1 -0
  625. package/dist/resolution/frameworks/react-native.d.ts +29 -0
  626. package/dist/resolution/frameworks/react-native.d.ts.map +1 -0
  627. package/dist/resolution/frameworks/react-native.js +549 -0
  628. package/dist/resolution/frameworks/react-native.js.map +1 -0
  629. package/dist/resolution/frameworks/react-router.d.ts +46 -0
  630. package/dist/resolution/frameworks/react-router.d.ts.map +1 -0
  631. package/dist/resolution/frameworks/react-router.js +187 -0
  632. package/dist/resolution/frameworks/react-router.js.map +1 -0
  633. package/dist/resolution/frameworks/react.d.ts +9 -0
  634. package/dist/resolution/frameworks/react.d.ts.map +1 -0
  635. package/dist/resolution/frameworks/react.js +257 -0
  636. package/dist/resolution/frameworks/react.js.map +1 -0
  637. package/dist/resolution/frameworks/ruby.d.ts +8 -0
  638. package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
  639. package/dist/resolution/frameworks/ruby.js +302 -0
  640. package/dist/resolution/frameworks/ruby.js.map +1 -0
  641. package/dist/resolution/frameworks/rust.d.ts +8 -0
  642. package/dist/resolution/frameworks/rust.d.ts.map +1 -0
  643. package/dist/resolution/frameworks/rust.js +304 -0
  644. package/dist/resolution/frameworks/rust.js.map +1 -0
  645. package/dist/resolution/frameworks/svelte.d.ts +9 -0
  646. package/dist/resolution/frameworks/svelte.d.ts.map +1 -0
  647. package/dist/resolution/frameworks/svelte.js +258 -0
  648. package/dist/resolution/frameworks/svelte.js.map +1 -0
  649. package/dist/resolution/frameworks/sveltekit-router.d.ts +36 -0
  650. package/dist/resolution/frameworks/sveltekit-router.d.ts.map +1 -0
  651. package/dist/resolution/frameworks/sveltekit-router.js +156 -0
  652. package/dist/resolution/frameworks/sveltekit-router.js.map +1 -0
  653. package/dist/resolution/frameworks/swift-objc.d.ts +37 -0
  654. package/dist/resolution/frameworks/swift-objc.d.ts.map +1 -0
  655. package/dist/resolution/frameworks/swift-objc.js +252 -0
  656. package/dist/resolution/frameworks/swift-objc.js.map +1 -0
  657. package/dist/resolution/frameworks/swift.d.ts +10 -0
  658. package/dist/resolution/frameworks/swift.d.ts.map +1 -0
  659. package/dist/resolution/frameworks/swift.js +410 -0
  660. package/dist/resolution/frameworks/swift.js.map +1 -0
  661. package/dist/resolution/frameworks/tanstack-router.d.ts +84 -0
  662. package/dist/resolution/frameworks/tanstack-router.d.ts.map +1 -0
  663. package/dist/resolution/frameworks/tanstack-router.js +437 -0
  664. package/dist/resolution/frameworks/tanstack-router.js.map +1 -0
  665. package/dist/resolution/frameworks/terraform.d.ts +38 -0
  666. package/dist/resolution/frameworks/terraform.d.ts.map +1 -0
  667. package/dist/resolution/frameworks/terraform.js +277 -0
  668. package/dist/resolution/frameworks/terraform.js.map +1 -0
  669. package/dist/resolution/frameworks/vue-router.d.ts +82 -0
  670. package/dist/resolution/frameworks/vue-router.d.ts.map +1 -0
  671. package/dist/resolution/frameworks/vue-router.js +377 -0
  672. package/dist/resolution/frameworks/vue-router.js.map +1 -0
  673. package/dist/resolution/frameworks/vue.d.ts +9 -0
  674. package/dist/resolution/frameworks/vue.d.ts.map +1 -0
  675. package/dist/resolution/frameworks/vue.js +303 -0
  676. package/dist/resolution/frameworks/vue.js.map +1 -0
  677. package/dist/resolution/go-module.d.ts +26 -0
  678. package/dist/resolution/go-module.d.ts.map +1 -0
  679. package/dist/resolution/go-module.js +78 -0
  680. package/dist/resolution/go-module.js.map +1 -0
  681. package/dist/resolution/goframe-synthesizer.d.ts +29 -0
  682. package/dist/resolution/goframe-synthesizer.d.ts.map +1 -0
  683. package/dist/resolution/goframe-synthesizer.js +163 -0
  684. package/dist/resolution/goframe-synthesizer.js.map +1 -0
  685. package/dist/resolution/import-resolver.d.ts +122 -0
  686. package/dist/resolution/import-resolver.d.ts.map +1 -0
  687. package/dist/resolution/import-resolver.js +2490 -0
  688. package/dist/resolution/import-resolver.js.map +1 -0
  689. package/dist/resolution/index.d.ts +402 -0
  690. package/dist/resolution/index.d.ts.map +1 -0
  691. package/dist/resolution/index.js +2581 -0
  692. package/dist/resolution/index.js.map +1 -0
  693. package/dist/resolution/js-builtins.d.ts +11 -0
  694. package/dist/resolution/js-builtins.d.ts.map +1 -0
  695. package/dist/resolution/js-builtins.js +23 -0
  696. package/dist/resolution/js-builtins.js.map +1 -0
  697. package/dist/resolution/lru-cache.d.ts +24 -0
  698. package/dist/resolution/lru-cache.d.ts.map +1 -0
  699. package/dist/resolution/lru-cache.js +62 -0
  700. package/dist/resolution/lru-cache.js.map +1 -0
  701. package/dist/resolution/memory-budget.d.ts +48 -0
  702. package/dist/resolution/memory-budget.d.ts.map +1 -0
  703. package/dist/resolution/memory-budget.js +162 -0
  704. package/dist/resolution/memory-budget.js.map +1 -0
  705. package/dist/resolution/name-matcher.d.ts +196 -0
  706. package/dist/resolution/name-matcher.d.ts.map +1 -0
  707. package/dist/resolution/name-matcher.js +3484 -0
  708. package/dist/resolution/name-matcher.js.map +1 -0
  709. package/dist/resolution/next-router-synthesizer.d.ts +27 -0
  710. package/dist/resolution/next-router-synthesizer.d.ts.map +1 -0
  711. package/dist/resolution/next-router-synthesizer.js +113 -0
  712. package/dist/resolution/next-router-synthesizer.js.map +1 -0
  713. package/dist/resolution/path-aliases.d.ts +70 -0
  714. package/dist/resolution/path-aliases.d.ts.map +1 -0
  715. package/dist/resolution/path-aliases.js +346 -0
  716. package/dist/resolution/path-aliases.js.map +1 -0
  717. package/dist/resolution/react-router-synthesizer.d.ts +33 -0
  718. package/dist/resolution/react-router-synthesizer.d.ts.map +1 -0
  719. package/dist/resolution/react-router-synthesizer.js +126 -0
  720. package/dist/resolution/react-router-synthesizer.js.map +1 -0
  721. package/dist/resolution/resolver-pool.d.ts +106 -0
  722. package/dist/resolution/resolver-pool.d.ts.map +1 -0
  723. package/dist/resolution/resolver-pool.js +344 -0
  724. package/dist/resolution/resolver-pool.js.map +1 -0
  725. package/dist/resolution/resolver-worker.d.ts +17 -0
  726. package/dist/resolution/resolver-worker.d.ts.map +1 -0
  727. package/dist/resolution/resolver-worker.js +141 -0
  728. package/dist/resolution/resolver-worker.js.map +1 -0
  729. package/dist/resolution/strip-comments.d.ts +33 -0
  730. package/dist/resolution/strip-comments.d.ts.map +1 -0
  731. package/dist/resolution/strip-comments.js +550 -0
  732. package/dist/resolution/strip-comments.js.map +1 -0
  733. package/dist/resolution/sveltekit-synthesizer.d.ts +58 -0
  734. package/dist/resolution/sveltekit-synthesizer.d.ts.map +1 -0
  735. package/dist/resolution/sveltekit-synthesizer.js +173 -0
  736. package/dist/resolution/sveltekit-synthesizer.js.map +1 -0
  737. package/dist/resolution/swift-objc-bridge.d.ts +134 -0
  738. package/dist/resolution/swift-objc-bridge.d.ts.map +1 -0
  739. package/dist/resolution/swift-objc-bridge.js +256 -0
  740. package/dist/resolution/swift-objc-bridge.js.map +1 -0
  741. package/dist/resolution/synth-utils.d.ts +26 -0
  742. package/dist/resolution/synth-utils.d.ts.map +1 -0
  743. package/dist/resolution/synth-utils.js +75 -0
  744. package/dist/resolution/synth-utils.js.map +1 -0
  745. package/dist/resolution/tanstack-router-synthesizer.d.ts +31 -0
  746. package/dist/resolution/tanstack-router-synthesizer.d.ts.map +1 -0
  747. package/dist/resolution/tanstack-router-synthesizer.js +114 -0
  748. package/dist/resolution/tanstack-router-synthesizer.js.map +1 -0
  749. package/dist/resolution/tier-synthesizer.d.ts +48 -0
  750. package/dist/resolution/tier-synthesizer.d.ts.map +1 -0
  751. package/dist/resolution/tier-synthesizer.js +907 -0
  752. package/dist/resolution/tier-synthesizer.js.map +1 -0
  753. package/dist/resolution/types.d.ts +323 -0
  754. package/dist/resolution/types.d.ts.map +1 -0
  755. package/dist/resolution/types.js +58 -0
  756. package/dist/resolution/types.js.map +1 -0
  757. package/dist/resolution/vue-router-synthesizer.d.ts +30 -0
  758. package/dist/resolution/vue-router-synthesizer.d.ts.map +1 -0
  759. package/dist/resolution/vue-router-synthesizer.js +115 -0
  760. package/dist/resolution/vue-router-synthesizer.js.map +1 -0
  761. package/dist/resolution/workspace-packages.d.ts +58 -0
  762. package/dist/resolution/workspace-packages.d.ts.map +1 -0
  763. package/dist/resolution/workspace-packages.js +346 -0
  764. package/dist/resolution/workspace-packages.js.map +1 -0
  765. package/dist/search/identifier-segments.d.ts +70 -0
  766. package/dist/search/identifier-segments.d.ts.map +1 -0
  767. package/dist/search/identifier-segments.js +205 -0
  768. package/dist/search/identifier-segments.js.map +1 -0
  769. package/dist/search/query-parser.d.ts +57 -0
  770. package/dist/search/query-parser.d.ts.map +1 -0
  771. package/dist/search/query-parser.js +177 -0
  772. package/dist/search/query-parser.js.map +1 -0
  773. package/dist/search/query-paths.d.ts +57 -0
  774. package/dist/search/query-paths.d.ts.map +1 -0
  775. package/dist/search/query-paths.js +298 -0
  776. package/dist/search/query-paths.js.map +1 -0
  777. package/dist/search/query-utils.d.ts +102 -0
  778. package/dist/search/query-utils.d.ts.map +1 -0
  779. package/dist/search/query-utils.js +487 -0
  780. package/dist/search/query-utils.js.map +1 -0
  781. package/dist/sync/git-hooks.d.ts +45 -0
  782. package/dist/sync/git-hooks.d.ts.map +1 -0
  783. package/dist/sync/git-hooks.js +227 -0
  784. package/dist/sync/git-hooks.js.map +1 -0
  785. package/dist/sync/index.d.ts +19 -0
  786. package/dist/sync/index.d.ts.map +1 -0
  787. package/dist/sync/index.js +35 -0
  788. package/dist/sync/index.js.map +1 -0
  789. package/dist/sync/watch-policy.d.ts +48 -0
  790. package/dist/sync/watch-policy.d.ts.map +1 -0
  791. package/dist/sync/watch-policy.js +124 -0
  792. package/dist/sync/watch-policy.js.map +1 -0
  793. package/dist/sync/watcher.d.ts +402 -0
  794. package/dist/sync/watcher.d.ts.map +1 -0
  795. package/dist/sync/watcher.js +978 -0
  796. package/dist/sync/watcher.js.map +1 -0
  797. package/dist/sync/worktree.d.ts +63 -0
  798. package/dist/sync/worktree.d.ts.map +1 -0
  799. package/dist/sync/worktree.js +182 -0
  800. package/dist/sync/worktree.js.map +1 -0
  801. package/dist/telemetry/index.d.ts +145 -0
  802. package/dist/telemetry/index.d.ts.map +1 -0
  803. package/dist/telemetry/index.js +592 -0
  804. package/dist/telemetry/index.js.map +1 -0
  805. package/dist/types.d.ts +473 -0
  806. package/dist/types.d.ts.map +1 -0
  807. package/dist/types.js +118 -0
  808. package/dist/types.js.map +1 -0
  809. package/dist/ui/color.d.ts +21 -0
  810. package/dist/ui/color.d.ts.map +1 -0
  811. package/dist/ui/color.js +42 -0
  812. package/dist/ui/color.js.map +1 -0
  813. package/dist/ui/glyphs.d.ts +67 -0
  814. package/dist/ui/glyphs.d.ts.map +1 -0
  815. package/dist/ui/glyphs.js +125 -0
  816. package/dist/ui/glyphs.js.map +1 -0
  817. package/dist/ui/shimmer-progress.d.ts +11 -0
  818. package/dist/ui/shimmer-progress.d.ts.map +1 -0
  819. package/dist/ui/shimmer-progress.js +164 -0
  820. package/dist/ui/shimmer-progress.js.map +1 -0
  821. package/dist/ui/shimmer-worker.d.ts +2 -0
  822. package/dist/ui/shimmer-worker.d.ts.map +1 -0
  823. package/dist/ui/shimmer-worker.js +126 -0
  824. package/dist/ui/shimmer-worker.js.map +1 -0
  825. package/dist/ui/types.d.ts +15 -0
  826. package/dist/ui/types.d.ts.map +1 -0
  827. package/dist/ui/types.js +3 -0
  828. package/dist/ui/types.js.map +1 -0
  829. package/dist/ui-server/api/deadcode.d.ts +84 -0
  830. package/dist/ui-server/api/deadcode.d.ts.map +1 -0
  831. package/dist/ui-server/api/deadcode.js +136 -0
  832. package/dist/ui-server/api/deadcode.js.map +1 -0
  833. package/dist/ui-server/api/effects.d.ts +87 -0
  834. package/dist/ui-server/api/effects.d.ts.map +1 -0
  835. package/dist/ui-server/api/effects.js +499 -0
  836. package/dist/ui-server/api/effects.js.map +1 -0
  837. package/dist/ui-server/api/entrypoints.d.ts +86 -0
  838. package/dist/ui-server/api/entrypoints.d.ts.map +1 -0
  839. package/dist/ui-server/api/entrypoints.js +279 -0
  840. package/dist/ui-server/api/entrypoints.js.map +1 -0
  841. package/dist/ui-server/api/events.d.ts +183 -0
  842. package/dist/ui-server/api/events.d.ts.map +1 -0
  843. package/dist/ui-server/api/events.js +430 -0
  844. package/dist/ui-server/api/events.js.map +1 -0
  845. package/dist/ui-server/api/file.d.ts +66 -0
  846. package/dist/ui-server/api/file.d.ts.map +1 -0
  847. package/dist/ui-server/api/file.js +235 -0
  848. package/dist/ui-server/api/file.js.map +1 -0
  849. package/dist/ui-server/api/filecode.d.ts +126 -0
  850. package/dist/ui-server/api/filecode.d.ts.map +1 -0
  851. package/dist/ui-server/api/filecode.js +205 -0
  852. package/dist/ui-server/api/filecode.js.map +1 -0
  853. package/dist/ui-server/api/flow.d.ts +226 -0
  854. package/dist/ui-server/api/flow.d.ts.map +1 -0
  855. package/dist/ui-server/api/flow.js +611 -0
  856. package/dist/ui-server/api/flow.js.map +1 -0
  857. package/dist/ui-server/api/hierarchy.d.ts +81 -0
  858. package/dist/ui-server/api/hierarchy.d.ts.map +1 -0
  859. package/dist/ui-server/api/hierarchy.js +92 -0
  860. package/dist/ui-server/api/hierarchy.js.map +1 -0
  861. package/dist/ui-server/api/index.d.ts +90 -0
  862. package/dist/ui-server/api/index.d.ts.map +1 -0
  863. package/dist/ui-server/api/index.js +332 -0
  864. package/dist/ui-server/api/index.js.map +1 -0
  865. package/dist/ui-server/api/map.d.ts +238 -0
  866. package/dist/ui-server/api/map.d.ts.map +1 -0
  867. package/dist/ui-server/api/map.js +681 -0
  868. package/dist/ui-server/api/map.js.map +1 -0
  869. package/dist/ui-server/api/node.d.ts +81 -0
  870. package/dist/ui-server/api/node.d.ts.map +1 -0
  871. package/dist/ui-server/api/node.js +388 -0
  872. package/dist/ui-server/api/node.js.map +1 -0
  873. package/dist/ui-server/api/nodes.d.ts +25 -0
  874. package/dist/ui-server/api/nodes.d.ts.map +1 -0
  875. package/dist/ui-server/api/nodes.js +45 -0
  876. package/dist/ui-server/api/nodes.js.map +1 -0
  877. package/dist/ui-server/api/program.d.ts +139 -0
  878. package/dist/ui-server/api/program.d.ts.map +1 -0
  879. package/dist/ui-server/api/program.js +315 -0
  880. package/dist/ui-server/api/program.js.map +1 -0
  881. package/dist/ui-server/api/respond.d.ts +76 -0
  882. package/dist/ui-server/api/respond.d.ts.map +1 -0
  883. package/dist/ui-server/api/respond.js +186 -0
  884. package/dist/ui-server/api/respond.js.map +1 -0
  885. package/dist/ui-server/api/route-roots.d.ts +39 -0
  886. package/dist/ui-server/api/route-roots.d.ts.map +1 -0
  887. package/dist/ui-server/api/route-roots.js +96 -0
  888. package/dist/ui-server/api/route-roots.js.map +1 -0
  889. package/dist/ui-server/api/routes.d.ts +59 -0
  890. package/dist/ui-server/api/routes.d.ts.map +1 -0
  891. package/dist/ui-server/api/routes.js +112 -0
  892. package/dist/ui-server/api/routes.js.map +1 -0
  893. package/dist/ui-server/api/screens.d.ts +117 -0
  894. package/dist/ui-server/api/screens.d.ts.map +1 -0
  895. package/dist/ui-server/api/screens.js +611 -0
  896. package/dist/ui-server/api/screens.js.map +1 -0
  897. package/dist/ui-server/api/search.d.ts +29 -0
  898. package/dist/ui-server/api/search.d.ts.map +1 -0
  899. package/dist/ui-server/api/search.js +232 -0
  900. package/dist/ui-server/api/search.js.map +1 -0
  901. package/dist/ui-server/api/session.d.ts +52 -0
  902. package/dist/ui-server/api/session.d.ts.map +1 -0
  903. package/dist/ui-server/api/session.js +199 -0
  904. package/dist/ui-server/api/session.js.map +1 -0
  905. package/dist/ui-server/api/source.d.ts +200 -0
  906. package/dist/ui-server/api/source.d.ts.map +1 -0
  907. package/dist/ui-server/api/source.js +419 -0
  908. package/dist/ui-server/api/source.js.map +1 -0
  909. package/dist/ui-server/api/stats.d.ts +27 -0
  910. package/dist/ui-server/api/stats.d.ts.map +1 -0
  911. package/dist/ui-server/api/stats.js +164 -0
  912. package/dist/ui-server/api/stats.js.map +1 -0
  913. package/dist/ui-server/api/steps.d.ts +274 -0
  914. package/dist/ui-server/api/steps.d.ts.map +1 -0
  915. package/dist/ui-server/api/steps.js +1446 -0
  916. package/dist/ui-server/api/steps.js.map +1 -0
  917. package/dist/ui-server/api/trail-store.d.ts +142 -0
  918. package/dist/ui-server/api/trail-store.d.ts.map +1 -0
  919. package/dist/ui-server/api/trail-store.js +323 -0
  920. package/dist/ui-server/api/trail-store.js.map +1 -0
  921. package/dist/ui-server/api/trails.d.ts +163 -0
  922. package/dist/ui-server/api/trails.d.ts.map +1 -0
  923. package/dist/ui-server/api/trails.js +369 -0
  924. package/dist/ui-server/api/trails.js.map +1 -0
  925. package/dist/ui-server/api/when.d.ts +125 -0
  926. package/dist/ui-server/api/when.d.ts.map +1 -0
  927. package/dist/ui-server/api/when.js +251 -0
  928. package/dist/ui-server/api/when.js.map +1 -0
  929. package/dist/ui-server/api/wire.d.ts +179 -0
  930. package/dist/ui-server/api/wire.d.ts.map +1 -0
  931. package/dist/ui-server/api/wire.js +231 -0
  932. package/dist/ui-server/api/wire.js.map +1 -0
  933. package/dist/ui-server/assets.d.ts +40 -0
  934. package/dist/ui-server/assets.d.ts.map +1 -0
  935. package/dist/ui-server/assets.js +110 -0
  936. package/dist/ui-server/assets.js.map +1 -0
  937. package/dist/ui-server/constants.d.ts +32 -0
  938. package/dist/ui-server/constants.d.ts.map +1 -0
  939. package/dist/ui-server/constants.js +35 -0
  940. package/dist/ui-server/constants.js.map +1 -0
  941. package/dist/ui-server/highlight/index.d.ts +113 -0
  942. package/dist/ui-server/highlight/index.d.ts.map +1 -0
  943. package/dist/ui-server/highlight/index.js +307 -0
  944. package/dist/ui-server/highlight/index.js.map +1 -0
  945. package/dist/ui-server/highlight/languages.d.ts +36 -0
  946. package/dist/ui-server/highlight/languages.d.ts.map +1 -0
  947. package/dist/ui-server/highlight/languages.js +50 -0
  948. package/dist/ui-server/highlight/languages.js.map +1 -0
  949. package/dist/ui-server/index.d.ts +92 -0
  950. package/dist/ui-server/index.d.ts.map +1 -0
  951. package/dist/ui-server/index.js +399 -0
  952. package/dist/ui-server/index.js.map +1 -0
  953. package/dist/ui-server/open-browser.d.ts +31 -0
  954. package/dist/ui-server/open-browser.d.ts.map +1 -0
  955. package/dist/ui-server/open-browser.js +79 -0
  956. package/dist/ui-server/open-browser.js.map +1 -0
  957. package/dist/ui-server/security.d.ts +127 -0
  958. package/dist/ui-server/security.d.ts.map +1 -0
  959. package/dist/ui-server/security.js +332 -0
  960. package/dist/ui-server/security.js.map +1 -0
  961. package/dist/ui-server/static.d.ts +45 -0
  962. package/dist/ui-server/static.d.ts.map +1 -0
  963. package/dist/ui-server/static.js +165 -0
  964. package/dist/ui-server/static.js.map +1 -0
  965. package/dist/upgrade/index.d.ts +164 -0
  966. package/dist/upgrade/index.d.ts.map +1 -0
  967. package/dist/upgrade/index.js +649 -0
  968. package/dist/upgrade/index.js.map +1 -0
  969. package/dist/upgrade/remove-binary.d.ts +87 -0
  970. package/dist/upgrade/remove-binary.d.ts.map +1 -0
  971. package/dist/upgrade/remove-binary.js +289 -0
  972. package/dist/upgrade/remove-binary.js.map +1 -0
  973. package/dist/upgrade/update-check.d.ts +92 -0
  974. package/dist/upgrade/update-check.d.ts.map +1 -0
  975. package/dist/upgrade/update-check.js +258 -0
  976. package/dist/upgrade/update-check.js.map +1 -0
  977. package/dist/utils.d.ts +238 -0
  978. package/dist/utils.d.ts.map +1 -0
  979. package/dist/utils.js +601 -0
  980. package/dist/utils.js.map +1 -0
  981. package/dist/viewer/assets/archivo-latin-ext-wght-normal-C4zznr8T.woff2 +0 -0
  982. package/dist/viewer/assets/archivo-latin-wght-normal-E0tuGl4L.woff2 +0 -0
  983. package/dist/viewer/assets/archivo-vietnamese-wght-normal-XAtsl5Q_.woff2 +0 -0
  984. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-italic-2syK4fUT.woff +0 -0
  985. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-italic-CBJ8pzag.woff2 +0 -0
  986. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
  987. package/dist/viewer/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
  988. package/dist/viewer/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff +0 -0
  989. package/dist/viewer/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2 +0 -0
  990. package/dist/viewer/assets/ibm-plex-mono-cyrillic-600-normal-CTOM6hUh.woff2 +0 -0
  991. package/dist/viewer/assets/ibm-plex-mono-cyrillic-600-normal-fLZuRloM.woff +0 -0
  992. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-italic-B4oTjJdl.woff +0 -0
  993. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-italic-CBjNughH.woff2 +0 -0
  994. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
  995. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
  996. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff +0 -0
  997. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2 +0 -0
  998. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-600-normal-9HEixskS.woff +0 -0
  999. package/dist/viewer/assets/ibm-plex-mono-cyrillic-ext-600-normal-V-xxqcpd.woff2 +0 -0
  1000. package/dist/viewer/assets/ibm-plex-mono-latin-400-italic-66oory27.woff +0 -0
  1001. package/dist/viewer/assets/ibm-plex-mono-latin-400-italic-BqAiT5Ww.woff2 +0 -0
  1002. package/dist/viewer/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
  1003. package/dist/viewer/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
  1004. package/dist/viewer/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
  1005. package/dist/viewer/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
  1006. package/dist/viewer/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
  1007. package/dist/viewer/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
  1008. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-italic-B7_fu1kp.woff2 +0 -0
  1009. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-italic-Bg0ZHwF4.woff +0 -0
  1010. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
  1011. package/dist/viewer/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
  1012. package/dist/viewer/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2 +0 -0
  1013. package/dist/viewer/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff +0 -0
  1014. package/dist/viewer/assets/ibm-plex-mono-latin-ext-600-normal-D38SheWl.woff2 +0 -0
  1015. package/dist/viewer/assets/ibm-plex-mono-latin-ext-600-normal-DmB0ttJJ.woff +0 -0
  1016. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-italic-D6eaYXMU.woff +0 -0
  1017. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-italic-DRuN92E5.woff2 +0 -0
  1018. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
  1019. package/dist/viewer/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
  1020. package/dist/viewer/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff +0 -0
  1021. package/dist/viewer/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2 +0 -0
  1022. package/dist/viewer/assets/ibm-plex-mono-vietnamese-600-normal-D2EvbN8M.woff2 +0 -0
  1023. package/dist/viewer/assets/ibm-plex-mono-vietnamese-600-normal-iLQfcSjf.woff +0 -0
  1024. package/dist/viewer/assets/index-2LG7iXtP.js +97 -0
  1025. package/dist/viewer/assets/index-AtMBttuU.css +1 -0
  1026. package/dist/viewer/index.html +16 -0
  1027. package/package.json +69 -0
  1028. package/scripts/add-lang/bench.sh +60 -0
  1029. package/scripts/add-lang/check-grammar.mjs +75 -0
  1030. package/scripts/add-lang/dump-ast.mjs +103 -0
  1031. package/scripts/add-lang/verify-extraction.mjs +70 -0
  1032. package/scripts/agent-eval/ab-adoption.sh +91 -0
  1033. package/scripts/agent-eval/ab-hook.sh +86 -0
  1034. package/scripts/agent-eval/ab-impl.sh +78 -0
  1035. package/scripts/agent-eval/ab-new-vs-baseline.sh +161 -0
  1036. package/scripts/agent-eval/ab-sufficiency.sh +78 -0
  1037. package/scripts/agent-eval/allocation-fixtures.json +344 -0
  1038. package/scripts/agent-eval/arms-F.sh +21 -0
  1039. package/scripts/agent-eval/arms-matrix.sh +37 -0
  1040. package/scripts/agent-eval/audit.sh +68 -0
  1041. package/scripts/agent-eval/bench-readme.sh +48 -0
  1042. package/scripts/agent-eval/bench-why-repo.sh +22 -0
  1043. package/scripts/agent-eval/block-read-hook.sh +19 -0
  1044. package/scripts/agent-eval/compare-arms.mjs +209 -0
  1045. package/scripts/agent-eval/diff-index-drift.mjs +102 -0
  1046. package/scripts/agent-eval/hook-settings.json +15 -0
  1047. package/scripts/agent-eval/itrun.sh +120 -0
  1048. package/scripts/agent-eval/no-cli-shim.sh +96 -0
  1049. package/scripts/agent-eval/offload-eval-3arm.sh +72 -0
  1050. package/scripts/agent-eval/offload-eval-cost.mjs +133 -0
  1051. package/scripts/agent-eval/offload-eval-effort.mjs +108 -0
  1052. package/scripts/agent-eval/offload-eval-frontload-matrix.sh +25 -0
  1053. package/scripts/agent-eval/offload-eval-frontload.sh +47 -0
  1054. package/scripts/agent-eval/offload-eval-ground-truth.json +18 -0
  1055. package/scripts/agent-eval/offload-eval-hook.mjs +84 -0
  1056. package/scripts/agent-eval/offload-eval-judge.mjs +103 -0
  1057. package/scripts/agent-eval/offload-eval-matrix.sh +20 -0
  1058. package/scripts/agent-eval/offload-eval-metrics.mjs +94 -0
  1059. package/scripts/agent-eval/offload-eval-refs1.sh +50 -0
  1060. package/scripts/agent-eval/offload-eval-setup.sh +24 -0
  1061. package/scripts/agent-eval/offload-eval-styles.sh +72 -0
  1062. package/scripts/agent-eval/offload-eval-summarize.mjs +68 -0
  1063. package/scripts/agent-eval/offload-eval.md +76 -0
  1064. package/scripts/agent-eval/parse-arms.mjs +116 -0
  1065. package/scripts/agent-eval/parse-bench-readme.mjs +238 -0
  1066. package/scripts/agent-eval/parse-run.mjs +1401 -0
  1067. package/scripts/agent-eval/parse-session.mjs +130 -0
  1068. package/scripts/agent-eval/probe-allocation.mjs +335 -0
  1069. package/scripts/agent-eval/probe-context.mjs +21 -0
  1070. package/scripts/agent-eval/probe-decl-only.mjs +198 -0
  1071. package/scripts/agent-eval/probe-explore.mjs +40 -0
  1072. package/scripts/agent-eval/probe-factory-closure.mjs +147 -0
  1073. package/scripts/agent-eval/probe-file-spend.mjs +195 -0
  1074. package/scripts/agent-eval/probe-named-symbol.mjs +163 -0
  1075. package/scripts/agent-eval/probe-node.mjs +20 -0
  1076. package/scripts/agent-eval/probe-suite-envelope.mjs +124 -0
  1077. package/scripts/agent-eval/probe-sweep.mjs +119 -0
  1078. package/scripts/agent-eval/probe-trace.mjs +20 -0
  1079. package/scripts/agent-eval/redirect-read-hook.sh +38 -0
  1080. package/scripts/agent-eval/repro-concurrent-explore.mjs +119 -0
  1081. package/scripts/agent-eval/repro-daemon-clients.mjs +125 -0
  1082. package/scripts/agent-eval/run-agent.sh +34 -0
  1083. package/scripts/agent-eval/run-all.sh +149 -0
  1084. package/scripts/agent-eval/run-arms.sh +56 -0
  1085. package/scripts/agent-eval/seq-matrix.mjs +137 -0
  1086. package/scripts/benchmarks/measure-index.cjs +128 -0
  1087. package/scripts/benchmarks/observe-index.py +91 -0
  1088. package/scripts/build-bundle.sh +154 -0
  1089. package/scripts/build-kernel.sh +87 -0
  1090. package/scripts/check-ui-build.mjs +157 -0
  1091. package/scripts/check-ui-package.mjs +192 -0
  1092. package/scripts/clean-remaining.mjs +243 -0
  1093. package/scripts/count-codegraph.mjs +26 -0
  1094. package/scripts/deep-clean.mjs +66 -0
  1095. package/scripts/dump-graph.mjs +57 -0
  1096. package/scripts/extract-release-notes.mjs +130 -0
  1097. package/scripts/final-codegraph-cleanup.mjs +57 -0
  1098. package/scripts/go-rebrand.mjs +114 -0
  1099. package/scripts/kernel-parity.mjs +283 -0
  1100. package/scripts/local-install.sh +41 -0
  1101. package/scripts/npm-sdk.js +75 -0
  1102. package/scripts/npm-shim.js +279 -0
  1103. package/scripts/pack-npm.sh +123 -0
  1104. package/scripts/prepare-release.mjs +270 -0
  1105. package/scripts/rebrand.mjs +129 -0
  1106. package/scripts/sync-ui-version.mjs +47 -0
  1107. package/scripts/try-repo.sh +112 -0
@@ -0,0 +1,978 @@
1
+ "use strict";
2
+ /**
3
+ * File Watcher
4
+ *
5
+ * Watches the project directory for file changes and triggers debounced sync
6
+ * operations to keep the code graph up-to-date.
7
+ *
8
+ * Uses Node's built-in `fs.watch` directly (no third-party watcher, no native
9
+ * addon) with a per-platform strategy chosen to keep the open-descriptor /
10
+ * kernel-watch cost BOUNDED rather than growing with the number of files:
11
+ *
12
+ * - macOS / Windows: a SINGLE recursive `fs.watch(root, {recursive:true})`.
13
+ * libuv maps this to one FSEvents stream (macOS) / one
14
+ * ReadDirectoryChangesW handle (Windows), so it costs O(1) descriptors no
15
+ * matter how large the tree. This is the fix for the macOS file-table
16
+ * exhaustion (#644 / #496 / #555 / #628): the previous watcher held one
17
+ * open fd PER WATCHED FILE on macOS (tens of thousands of REG fds), which
18
+ * exhausted `kern.maxfiles` and crashed unrelated processes system-wide.
19
+ *
20
+ * - Linux: recursive `fs.watch` is unsupported, so we watch each (non-ignored)
21
+ * DIRECTORY with one inotify watch — O(directories), NOT O(files). New
22
+ * directories are picked up dynamically and an overall watch cap bounds
23
+ * inotify usage on pathological monorepos (#579). A single inotify watch on
24
+ * a directory already reports create/modify/delete for its children, so
25
+ * per-file watches are never needed.
26
+ *
27
+ * Excluded trees (node_modules/, dist/, .git/, …) are filtered via the
28
+ * indexer's `buildScopeIgnore` (built-in defaults + root `.gitignore` +
29
+ * `.git/info/exclude` + `core.excludesFile` + git ignored-untracked dirs) —
30
+ * on Linux they're never descended into (so they cost no watch), and on
31
+ * macOS/Windows the single recursive stream still covers them but their
32
+ * events are dropped before any sync is scheduled. Either way the watcher's
33
+ * scope matches `git ls-files --exclude-standard` (#276 / #407 / #1728).
34
+ */
35
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
36
+ if (k2 === undefined) k2 = k;
37
+ var desc = Object.getOwnPropertyDescriptor(m, k);
38
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
39
+ desc = { enumerable: true, get: function() { return m[k]; } };
40
+ }
41
+ Object.defineProperty(o, k2, desc);
42
+ }) : (function(o, m, k, k2) {
43
+ if (k2 === undefined) k2 = k;
44
+ o[k2] = m[k];
45
+ }));
46
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
47
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
48
+ }) : function(o, v) {
49
+ o["default"] = v;
50
+ });
51
+ var __importStar = (this && this.__importStar) || (function () {
52
+ var ownKeys = function(o) {
53
+ ownKeys = Object.getOwnPropertyNames || function (o) {
54
+ var ar = [];
55
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
56
+ return ar;
57
+ };
58
+ return ownKeys(o);
59
+ };
60
+ return function (mod) {
61
+ if (mod && mod.__esModule) return mod;
62
+ var result = {};
63
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
64
+ __setModuleDefault(result, mod);
65
+ return result;
66
+ };
67
+ })();
68
+ Object.defineProperty(exports, "__esModule", { value: true });
69
+ exports.FileWatcher = exports.LockUnavailableError = void 0;
70
+ exports.__setFsWatchForTests = __setFsWatchForTests;
71
+ exports.__emitWatchEventForTests = __emitWatchEventForTests;
72
+ const fs = __importStar(require("fs"));
73
+ const path = __importStar(require("path"));
74
+ const extraction_1 = require("../extraction");
75
+ const project_config_1 = require("../project-config");
76
+ const errors_1 = require("../errors");
77
+ const utils_1 = require("../utils");
78
+ const directory_1 = require("../directory");
79
+ const watch_policy_1 = require("./watch-policy");
80
+ /**
81
+ * Number of consecutive lock-contention retries the watcher tolerates before
82
+ * it gives up and degrades auto-sync. Brief contention (another writer for a
83
+ * few cycles) stays under this; a long-lived external writer crosses it.
84
+ */
85
+ const MAX_LOCK_RETRIES = 5;
86
+ /**
87
+ * Number of consecutive GENERIC (non-lock) sync failures the watcher tolerates
88
+ * before it degrades auto-sync. A deterministic failure — a tree-sitter
89
+ * extractor that crashes on one file, DB corruption, `SQLITE_FULL`, an OOM in
90
+ * batched resolution — recurs every debounce cycle, so left unbounded it would
91
+ * retry forever (log + work spam) while the auto-update guarantee is silently
92
+ * dead (#1127). A single clean sync resets the streak, so a transient hiccup
93
+ * that recovers within the budget never degrades.
94
+ */
95
+ const MAX_SYNC_FAILURE_RETRIES = 5;
96
+ /** Cap on the exponential retry backoff (either mode) so it never sleeps absurdly long. */
97
+ const MAX_RETRY_BACKOFF_MS = 30_000;
98
+ /**
99
+ * Adaptive debounce: a pending set this small fires after the quick quiet
100
+ * window instead of the full debounce — a lone save (or editor + test file
101
+ * pair) syncs near-instantly, while larger bursts keep the full window and
102
+ * coalesce exactly as before.
103
+ */
104
+ const QUICK_SYNC_MAX_PENDING = 2;
105
+ const QUICK_SYNC_QUIET_MS = 300;
106
+ /**
107
+ * Scoped-sync ceiling: above this many pending files a full scan-diff is
108
+ * simpler and comparably fast (a branch checkout emits thousands of events),
109
+ * and it self-heals anything event coalescing dropped along the way.
110
+ */
111
+ const SCOPED_SYNC_MAX_PENDING = 500;
112
+ /** Actionable degrade message; both exhaustion paths share it verbatim. */
113
+ const EXHAUSTION_REASON = 'OS watch/file limit exhausted; auto-sync disabled. Run `codegraph sync` ' +
114
+ '(or install git sync hooks) to refresh the graph after changes.';
115
+ /**
116
+ * Actionable, NON-fatal warning for Linux inotify watch-count exhaustion.
117
+ * Unlike {@link EXHAUSTION_REASON} this does not disable the watcher — the
118
+ * watches already installed keep working — so it names the exact kernel knob to
119
+ * raise instead.
120
+ */
121
+ const INOTIFY_LIMIT_REASON = 'Linux inotify watch limit reached (fs.inotify.max_user_watches); live ' +
122
+ 'watching now covers only part of the project, so edits in unwatched ' +
123
+ 'directories will not auto-sync. Raise the limit (e.g. `sudo sysctl ' +
124
+ 'fs.inotify.max_user_watches=1048576`, persisted in /etc/sysctl.d) and ' +
125
+ 'restart, or run `codegraph sync` (or install git sync hooks) to refresh.';
126
+ /**
127
+ * True when an error is OS watch/file-descriptor exhaustion (EMFILE/ENFILE).
128
+ * Prefers the structured `err.code`; falls back to message matching ONLY when
129
+ * no code is present (some platforms surface a bare Error from `fs.watch`).
130
+ */
131
+ function isWatchResourceExhaustion(err) {
132
+ const e = err;
133
+ if (e?.code === 'EMFILE' || e?.code === 'ENFILE')
134
+ return true;
135
+ if (!e?.code && e?.message) {
136
+ return /EMFILE|ENFILE|too many open files/i.test(e.message);
137
+ }
138
+ return false;
139
+ }
140
+ /**
141
+ * True when an error is Linux inotify *watch-count* exhaustion. `fs.watch`
142
+ * surfaces a hit `fs.inotify.max_user_watches` as ENOSPC ("no space" = no watch
143
+ * descriptors left, NOT disk space). This only arises on the Linux
144
+ * per-directory path; it is non-fatal (raise the limit and partial watching
145
+ * keeps working), so it warns rather than degrading.
146
+ */
147
+ function isInotifyWatchExhaustion(err) {
148
+ return err?.code === 'ENOSPC';
149
+ }
150
+ /**
151
+ * Native recursive `fs.watch` is only reliable on macOS and Windows; on Linux
152
+ * (and AIX) it throws `ERR_FEATURE_UNAVAILABLE_ON_PLATFORM`. We branch on this
153
+ * to pick the recursive vs per-directory strategy.
154
+ */
155
+ function supportsRecursiveWatch() {
156
+ return process.platform === 'darwin' || process.platform === 'win32';
157
+ }
158
+ let watchImpl = fs.watch;
159
+ /** @internal Test-only seam to inject a fake fs.watch implementation. */
160
+ function __setFsWatchForTests(fn) {
161
+ watchImpl = fn ?? fs.watch;
162
+ }
163
+ /**
164
+ * Upper bound on simultaneously-watched directories on the Linux per-directory
165
+ * path. Each is one inotify watch; the kernel's `fs.inotify.max_user_watches`
166
+ * is the hard limit (commonly 8k–128k). We stop adding watches past this and
167
+ * log once — partial live-watch (with `codegraph sync` as the backstop) is far
168
+ * better than exhausting the user's inotify budget and breaking watching
169
+ * system-wide (#579). Tunable via CODEGRAPH_MAX_DIR_WATCHES.
170
+ */
171
+ const DEFAULT_MAX_DIR_WATCHES = 50_000;
172
+ function maxDirWatches() {
173
+ const raw = process.env.CODEGRAPH_MAX_DIR_WATCHES;
174
+ if (raw && /^\d+$/.test(raw)) {
175
+ const n = Number(raw);
176
+ if (n > 0)
177
+ return n;
178
+ }
179
+ return DEFAULT_MAX_DIR_WATCHES;
180
+ }
181
+ /**
182
+ * Test seam (see {@link __emitWatchEventForTests}). Maps a watcher's project
183
+ * root to its live instance so tests can synthesize a change event
184
+ * deterministically — real fs.watch delivery latency races under parallel
185
+ * vitest (the reason the previous chokidar mock existed). Only populated under
186
+ * a test runner, so production carries no bookkeeping or retained references.
187
+ */
188
+ const liveWatchersForTests = new Map();
189
+ const IS_TEST_RUNTIME = !!(process.env.VITEST || process.env.NODE_ENV === 'test');
190
+ /**
191
+ * Thrown by a `syncFn` to signal that the underlying sync couldn't acquire
192
+ * the cross-process write lock (#449). The watcher treats this as "no
193
+ * progress" — preserves `pendingFiles`, skips `onSyncComplete`, and the
194
+ * `finally` block reschedules. Quiet (debug-only) because a long-running
195
+ * external indexer can hit this every debounce cycle.
196
+ */
197
+ class LockUnavailableError extends Error {
198
+ constructor(message = 'Alpha Code Sense file lock unavailable; another process is writing') {
199
+ super(message);
200
+ this.name = 'LockUnavailableError';
201
+ }
202
+ }
203
+ exports.LockUnavailableError = LockUnavailableError;
204
+ /**
205
+ * FileWatcher monitors a project directory for changes and triggers
206
+ * debounced sync operations via a provided callback.
207
+ *
208
+ * Design goals:
209
+ * - Bounded resource usage: O(1) descriptors on macOS/Windows (one recursive
210
+ * watch), O(directories) inotify watches on Linux — never O(files), which
211
+ * was the system-crashing fd leak on macOS (#644/#496/#555/#628).
212
+ * - Debounced to avoid thrashing on rapid saves
213
+ * - Filters to supported source files by extension
214
+ * - Ignores .alpha-cs/ and .git/ regardless of .gitignore
215
+ * - Tracks per-file pending state so MCP tools can flag stale results
216
+ * without blocking on a sync (issue #403)
217
+ */
218
+ class FileWatcher {
219
+ /** macOS/Windows: the single recursive watcher. Null on Linux. */
220
+ recursiveWatcher = null;
221
+ /** Linux: one watcher per watched directory (keyed by absolute path). */
222
+ dirWatchers = new Map();
223
+ /** Set once the per-directory watch cap is hit, so we log only once. */
224
+ dirCapWarned = false;
225
+ /**
226
+ * Set once the Linux inotify watch limit (ENOSPC) is hit. Double duty: we
227
+ * warn only once, AND we stop attempting new directory watches for the rest
228
+ * of the session — once the kernel budget is exhausted every further
229
+ * `inotify_add_watch` fails too, so trying the rest of the tree is pure
230
+ * waste. NON-fatal (does not degrade): installed watches keep working.
231
+ */
232
+ inotifyLimitWarned = false;
233
+ /**
234
+ * One-way latch: the reason live watching was permanently disabled at runtime
235
+ * (watch-resource exhaustion, lock contention past the retry budget, or a
236
+ * persistent generic sync failure past the retry budget), or null while
237
+ * healthy. Set by {@link degrade}; cleared only by a fresh start().
238
+ */
239
+ degradedReason = null;
240
+ /** Consecutive lock-contention retries for watcher-triggered syncs. */
241
+ lockRetryCount = 0;
242
+ /** Consecutive generic (non-lock) sync failures; reset only by a clean sync. */
243
+ syncFailureRetryCount = 0;
244
+ /** Test-only inert mode: started, but with no OS watcher installed. */
245
+ inert = false;
246
+ debounceTimer = null;
247
+ /**
248
+ * True when the pending set does NOT exactly describe the change (a
249
+ * directory removal's children are unknown from the event, #1285) — the
250
+ * next sync must be a full scan-diff. Cleared only after a successful FULL
251
+ * sync reconciles the tree.
252
+ */
253
+ needsFullScan = false;
254
+ /**
255
+ * Files seen by the watcher since the last successful sync — populated on
256
+ * every change event, cleared at the start of a sync, and re-populated by
257
+ * events that arrive mid-sync (or restored on sync failure). Keyed by the
258
+ * same project-relative POSIX path the rest of the codebase uses, so a
259
+ * caller can intersect tool-response file paths against this map cheaply.
260
+ */
261
+ pendingFiles = new Map();
262
+ /**
263
+ * Wall-clock ms at which the in-flight sync began. Combined with
264
+ * {@link pendingFiles}'s `lastSeenMs`, this distinguishes "still in the
265
+ * debounce window" (lastSeen > syncStarted, sync hasn't started yet for
266
+ * this edit) from "currently being indexed" (lastSeen <= syncStarted).
267
+ */
268
+ syncStartedMs = 0;
269
+ syncing = false;
270
+ stopped = false;
271
+ /**
272
+ * True once the initial watch set is established. Unlike the previous
273
+ * chokidar implementation there is no asynchronous initial "crawl" emitting
274
+ * an `add` per existing file — `fs.watch` only reports changes from the
275
+ * moment it's installed — so this flips to true synchronously at the end of
276
+ * `start()`. The startup reconcile against on-disk state is handled
277
+ * separately by the engine's catch-up sync, not by the watcher.
278
+ */
279
+ ready = false;
280
+ /**
281
+ * Callbacks that resolve when the watch set is established. Used by tests
282
+ * (and any production caller that cares about a clean baseline) to
283
+ * deterministically gate on watcher readiness.
284
+ */
285
+ readyWaiters = [];
286
+ // The shared scope matcher from `buildScopeIgnore` (built-in defaults +
287
+ // root `.gitignore` + `.git/info/exclude` + `core.excludesFile` + dirs
288
+ // `git ls-files --exclude-standard` reports ignored + `codegraph.json`
289
+ // exclude/include, with embedded child repos matched by their OWN rules —
290
+ // #514), built at start() and REBUILT whenever one of the files it is
291
+ // derived from changes (see `refreshScope`, #1590). Same construction the
292
+ // indexer uses for scoped sync, so watcher scope cannot diverge from index
293
+ // scope (#1728). An embedded repo created after start() joins the scope on
294
+ // the next scope refresh / watcher restart / re-index.
295
+ ignoreMatcher = null;
296
+ projectRoot;
297
+ debounceMs;
298
+ syncFn;
299
+ onSyncComplete;
300
+ onSyncError;
301
+ onDegraded;
302
+ inertForTests;
303
+ constructor(projectRoot, syncFn, options = {}) {
304
+ this.projectRoot = projectRoot;
305
+ this.syncFn = syncFn;
306
+ this.debounceMs = options.debounceMs ?? 2000;
307
+ this.onSyncComplete = options.onSyncComplete;
308
+ this.onSyncError = options.onSyncError;
309
+ this.onDegraded = options.onDegraded;
310
+ this.inertForTests = options.inertForTests ?? false;
311
+ }
312
+ /**
313
+ * Start watching for file changes.
314
+ * Returns true if watching started successfully, false otherwise.
315
+ */
316
+ start() {
317
+ if (this.recursiveWatcher || this.dirWatchers.size > 0 || this.inert)
318
+ return true; // Already watching
319
+ this.stopped = false;
320
+ this.degradedReason = null;
321
+ this.lockRetryCount = 0;
322
+ this.syncFailureRetryCount = 0;
323
+ // Some environments make filesystem watching unusable — most notably
324
+ // WSL2 /mnt/ drives, where the underlying fs.watch calls block long
325
+ // enough to break MCP startup handshakes (issue #199). Skip watching
326
+ // there; callers fall back to manual `codegraph sync` or git sync hooks.
327
+ const disabledReason = (0, watch_policy_1.watchDisabledReason)(this.projectRoot);
328
+ if (disabledReason) {
329
+ (0, errors_1.logDebug)('File watcher disabled', { reason: disabledReason, projectRoot: this.projectRoot });
330
+ return false;
331
+ }
332
+ // Reuse the indexer's ignore set so the watcher and indexer agree on scope.
333
+ this.ignoreMatcher = (0, extraction_1.buildScopeIgnore)(this.projectRoot);
334
+ try {
335
+ if (this.inertForTests) {
336
+ // Test-only: install no OS watcher; the seam drives events instead.
337
+ this.inert = true;
338
+ }
339
+ else if (supportsRecursiveWatch()) {
340
+ this.startRecursive();
341
+ }
342
+ else {
343
+ this.startPerDirectory();
344
+ }
345
+ // The per-directory (Linux) path catches watch-resource exhaustion inside
346
+ // watchTree and degrades synchronously rather than throwing, so it never
347
+ // reaches the catch below. Surface that as a failed start here so both
348
+ // strategies report exhaustion identically (start() === false).
349
+ if (this.degradedReason)
350
+ return false;
351
+ // No async crawl to wait on: as soon as the watch set is installed we
352
+ // have a clean baseline (pendingFiles is only populated by post-start
353
+ // events). Clear defensively and flip ready.
354
+ this.pendingFiles.clear();
355
+ this.ready = true;
356
+ for (const cb of this.readyWaiters)
357
+ cb();
358
+ this.readyWaiters.length = 0;
359
+ if (IS_TEST_RUNTIME)
360
+ liveWatchersForTests.set(this.projectRoot, this);
361
+ (0, errors_1.logDebug)('File watcher started', {
362
+ projectRoot: this.projectRoot,
363
+ debounceMs: this.debounceMs,
364
+ mode: this.inertForTests ? 'inert' : supportsRecursiveWatch() ? 'recursive' : 'per-directory',
365
+ watchedDirs: this.dirWatchers.size || undefined,
366
+ });
367
+ return true;
368
+ }
369
+ catch (err) {
370
+ // Watcher setup failed. Watch-resource exhaustion (EMFILE/ENFILE on the
371
+ // recursive path) is terminal — degrade cleanly with one actionable
372
+ // warning instead of leaving a half-broken watcher. Everything else
373
+ // (permission denied, missing directory) keeps the prior quiet-stop.
374
+ if (isWatchResourceExhaustion(err)) {
375
+ this.degrade(EXHAUSTION_REASON, { error: String(err) });
376
+ }
377
+ else {
378
+ (0, errors_1.logWarn)('Could not start file watcher', { error: String(err) });
379
+ this.stop();
380
+ }
381
+ return false;
382
+ }
383
+ }
384
+ /**
385
+ * macOS/Windows: one recursive watcher for the whole tree. O(1) descriptors.
386
+ * `filename` arrives relative to the project root (with subdirectories), so
387
+ * it maps straight to a project-relative path.
388
+ */
389
+ startRecursive() {
390
+ this.recursiveWatcher = watchImpl(this.projectRoot, { recursive: true, persistent: true }, (_event, filename) => {
391
+ if (this.stopped || filename == null)
392
+ return;
393
+ this.handleChange((0, utils_1.normalizePath)(String(filename)));
394
+ });
395
+ this.recursiveWatcher.on('error', (err) => {
396
+ if (isWatchResourceExhaustion(err)) {
397
+ this.degrade(EXHAUSTION_REASON, { error: String(err) });
398
+ return;
399
+ }
400
+ (0, errors_1.logWarn)('File watcher error', { error: String(err) });
401
+ });
402
+ }
403
+ /**
404
+ * Linux: walk the (non-ignored) tree and watch each directory. One inotify
405
+ * watch per directory reports create/modify/delete for that directory's
406
+ * direct children, so we never watch individual files.
407
+ */
408
+ startPerDirectory() {
409
+ this.watchTree(this.projectRoot, /* markExisting */ false);
410
+ }
411
+ /**
412
+ * Add an inotify watch for `dir` and recurse into its non-ignored
413
+ * subdirectories. When `markExisting` is true (a directory that appeared
414
+ * AFTER startup), the source files already inside it are recorded as pending
415
+ * — this closes the `mkdir + write` race where files created before the new
416
+ * directory's watch is installed would otherwise be missed until the next
417
+ * full sync. The initial startup walk passes false (the engine's catch-up
418
+ * sync owns the baseline).
419
+ */
420
+ watchTree(dir, markExisting) {
421
+ // A degrade() mid-walk (exhaustion on an earlier directory) calls stop(),
422
+ // which sets `stopped`; bail so the recursion unwinds without adding more
423
+ // watches to a watcher that is shutting down. `inotifyLimitWarned` does the
424
+ // same after ENOSPC — the kernel budget is gone, so stop trying the rest of
425
+ // the tree (every add would fail) while keeping the watches already set.
426
+ if (this.stopped || this.degradedReason || this.inotifyLimitWarned)
427
+ return;
428
+ if (this.dirWatchers.has(dir))
429
+ return;
430
+ if (this.dirWatchers.size >= maxDirWatches()) {
431
+ if (!this.dirCapWarned) {
432
+ this.dirCapWarned = true;
433
+ (0, errors_1.logWarn)('File watcher hit directory-watch cap; remaining subtrees rely on manual/periodic sync', {
434
+ cap: maxDirWatches(),
435
+ });
436
+ }
437
+ return;
438
+ }
439
+ let w;
440
+ try {
441
+ w = watchImpl(dir, { persistent: true }, (_event, filename) => this.handleDirEvent(dir, filename));
442
+ }
443
+ catch (err) {
444
+ // EMFILE/ENFILE means the PROCESS is out of descriptors — every further
445
+ // directory would fail too, so degrade the whole watcher rather than
446
+ // limping along with a partial watch set.
447
+ if (isWatchResourceExhaustion(err)) {
448
+ this.degrade(EXHAUSTION_REASON, { error: String(err), dir });
449
+ }
450
+ else if (isInotifyWatchExhaustion(err)) {
451
+ // ENOSPC = inotify watch budget exhausted. NON-fatal: keep the watches
452
+ // we have and tell the user the knob to raise (warn once).
453
+ this.warnInotifyLimit({ error: String(err), dir });
454
+ }
455
+ // ENOENT / EACCES on a single directory stays non-fatal: skip it quietly.
456
+ return;
457
+ }
458
+ w.on('error', (err) => {
459
+ if (isWatchResourceExhaustion(err)) {
460
+ this.degrade(EXHAUSTION_REASON, { error: String(err), dir });
461
+ return;
462
+ }
463
+ if (isInotifyWatchExhaustion(err)) {
464
+ this.warnInotifyLimit({ error: String(err), dir });
465
+ }
466
+ this.unwatchDir(dir);
467
+ });
468
+ this.dirWatchers.set(dir, w);
469
+ let entries;
470
+ try {
471
+ entries = fs.readdirSync(dir, { withFileTypes: true });
472
+ }
473
+ catch {
474
+ return;
475
+ }
476
+ for (const entry of entries) {
477
+ const child = path.join(dir, entry.name);
478
+ if (entry.isDirectory()) {
479
+ if (this.shouldIgnoreDir(child))
480
+ continue;
481
+ this.watchTree(child, markExisting);
482
+ }
483
+ else if (markExisting && entry.isFile()) {
484
+ this.handleChange((0, utils_1.normalizePath)(path.relative(this.projectRoot, child)));
485
+ }
486
+ }
487
+ }
488
+ /**
489
+ * Linux per-directory event handler. `filename` is relative to `dir`. A new
490
+ * sub-directory is picked up by extending the watch tree; everything else is
491
+ * routed through the shared change handler.
492
+ */
493
+ handleDirEvent(dir, filename) {
494
+ if (this.stopped || filename == null)
495
+ return;
496
+ const full = path.join(dir, String(filename));
497
+ // A newly-created directory needs its own watch (recursive isn't available
498
+ // on Linux). statSync is cheap and these events are rare relative to file
499
+ // edits. If the path vanished (rapid create/delete) the stat throws and we
500
+ // fall through to the change handler, which no-ops on a non-source path.
501
+ try {
502
+ if (fs.statSync(full).isDirectory()) {
503
+ if (!this.shouldIgnoreDir(full))
504
+ this.watchTree(full, /* markExisting */ true);
505
+ return;
506
+ }
507
+ }
508
+ catch {
509
+ // deleted/inaccessible — treat as a normal change below
510
+ }
511
+ this.handleChange((0, utils_1.normalizePath)(path.relative(this.projectRoot, full)));
512
+ }
513
+ /**
514
+ * Shared change handler for both watch strategies. `rel` is a
515
+ * project-relative POSIX path. Applies the ignore + source-file filters and,
516
+ * for a real source change, records it as pending (#403) and schedules a
517
+ * debounced sync.
518
+ *
519
+ * The recursive (macOS/Windows) watcher reports events for ignored trees too
520
+ * (one stream covers the whole repo), so the ignore check here is load-bearing
521
+ * — it drops node_modules/dist/.git churn before any sync is scheduled.
522
+ */
523
+ handleChange(rel) {
524
+ if (!rel || rel === '.' || rel.startsWith('..'))
525
+ return;
526
+ // `.git/info/exclude` is otherwise always-ignored with the rest of `.git/`,
527
+ // but it feeds `buildScopeIgnore` — allow it through as a scope refresh
528
+ // when the platform delivers the event (recursive watchers may; Linux
529
+ // per-directory watching does not descend into `.git/`) (#1728).
530
+ if (rel === '.git/info/exclude') {
531
+ this.refreshScope(rel);
532
+ return;
533
+ }
534
+ if (this.isAlwaysIgnored(rel))
535
+ return;
536
+ // The two root files the scope matcher is derived from are handled BEFORE
537
+ // the matcher is consulted: a user `exclude` pattern that happens to cover
538
+ // them (`*.json`, `.*`) must not be able to hide their own edits (#1590).
539
+ if (rel === project_config_1.PROJECT_CONFIG_FILENAME || rel === '.gitignore') {
540
+ this.refreshScope(rel);
541
+ return;
542
+ }
543
+ if (this.ignoreMatcher && this.ignoreMatcher.ignores(rel))
544
+ return;
545
+ // A nested `.gitignore` (an embedded child repo's own rules, #514, or a
546
+ // subdirectory rule the git-backed full scan honors) is only a scope
547
+ // change when it sits INSIDE the current scope — checked after the matcher
548
+ // on purpose, so the thousands of package-local `.gitignore`s an
549
+ // `npm install` writes under an ignored `node_modules/` never trigger a
550
+ // rebuild storm.
551
+ if (rel.endsWith('/.gitignore')) {
552
+ this.refreshScope(rel);
553
+ return;
554
+ }
555
+ if (!(0, extraction_1.isSourceFile)(rel, (0, project_config_1.loadExtensionOverrides)(this.projectRoot))) {
556
+ this.maybeScheduleForRemovedDir(rel);
557
+ return;
558
+ }
559
+ (0, errors_1.logDebug)('File change detected', { file: rel });
560
+ if (this.ready) {
561
+ const now = Date.now();
562
+ const existing = this.pendingFiles.get(rel);
563
+ this.pendingFiles.set(rel, {
564
+ firstSeenMs: existing?.firstSeenMs ?? now,
565
+ lastSeenMs: now,
566
+ });
567
+ }
568
+ this.scheduleSync();
569
+ }
570
+ /**
571
+ * A scope-defining file changed (`codegraph.json`, a `.gitignore`): rebuild
572
+ * the ignore matcher and make the next sync a FULL reconcile (#1590).
573
+ *
574
+ * The matcher used to be built once in `start()` and kept for the watcher's
575
+ * lifetime — in a long-lived MCP daemon that meant a `codegraph.json`
576
+ * created or edited after startup was invisible to the live watcher, while
577
+ * `codegraph sync` (a fresh process) honoured it immediately: the CLI
578
+ * removed a newly excluded file and the watcher re-added it seconds later.
579
+ * `loadExtensionOverrides()` on the same filter line was already read live
580
+ * (mtime-cached), so two fields of the same config file disagreed.
581
+ *
582
+ * Rebuilding costs one `git ls-files` pass (embedded-repo discovery), which
583
+ * is fine per config edit — never per event. Replacing the field is enough
584
+ * for both strategies: the recursive handler and the per-directory
585
+ * `shouldIgnoreDir` walk read `this.ignoreMatcher` on every call. The full
586
+ * scan is required because a scope change has no per-file events: newly
587
+ * excluded files must be REMOVED from the index and newly included ones
588
+ * added, and only the scan-diff (which builds its own fresh matcher) knows
589
+ * which those are.
590
+ */
591
+ refreshScope(rel) {
592
+ (0, errors_1.logDebug)('Scope config changed; rebuilding watcher scope', { file: rel });
593
+ this.ignoreMatcher = (0, extraction_1.buildScopeIgnore)(this.projectRoot);
594
+ this.needsFullScan = true;
595
+ this.scheduleSync();
596
+ }
597
+ /**
598
+ * A deleted DIRECTORY arrives as one event on the directory's own path —
599
+ * no source extension, so the source-file filter drops it, and the files
600
+ * underneath may never get events of their own (Windows's recursive
601
+ * watcher reports only the top-most removed entry; macOS FSEvents can
602
+ * coalesce a tree deletion the same way). The index then kept every child
603
+ * record until some unrelated edit happened to trigger a sync (#1285).
604
+ *
605
+ * If a non-source path no longer exists on disk, treat it as a potential
606
+ * subtree removal and schedule the debounced sync — its scan-diff removes
607
+ * whatever is gone, which is the ground truth for what was underneath.
608
+ * pendingFiles is left alone (we can't know the children from the event).
609
+ * An event for an EXISTING non-source file stays fully ignored, so build
610
+ * churn on live files never schedules work; a deleted non-source file
611
+ * costs at most one no-op scan-diff, absorbed by the debounce.
612
+ */
613
+ maybeScheduleForRemovedDir(rel) {
614
+ try {
615
+ fs.statSync(path.join(this.projectRoot, rel));
616
+ return; // still on disk — an ordinary non-source change, ignore
617
+ }
618
+ catch {
619
+ /* gone — fall through */
620
+ }
621
+ (0, errors_1.logDebug)('Non-source path removed; scheduling sync for possible directory removal', {
622
+ path: rel,
623
+ });
624
+ this.needsFullScan = true;
625
+ this.scheduleSync();
626
+ }
627
+ /** Close and forget the watch for a directory that errored/was removed. */
628
+ unwatchDir(dir) {
629
+ const w = this.dirWatchers.get(dir);
630
+ if (w) {
631
+ try {
632
+ w.close();
633
+ }
634
+ catch {
635
+ /* already closed */
636
+ }
637
+ this.dirWatchers.delete(dir);
638
+ }
639
+ }
640
+ /** Our own dirs are always ignored, regardless of .gitignore. */
641
+ isAlwaysIgnored(rel) {
642
+ // First path segment. Ignore any Alpha Code Sense data dir — the active one AND a
643
+ // sibling like `.codegraph-win` a second environment (Windows/WSL) created
644
+ // in the same tree, so neither side watches the other's index (#636).
645
+ const top = rel.split('/')[0] ?? rel;
646
+ return ((0, directory_1.isAlphaCsDataDir)(top) ||
647
+ rel === '.git' || rel.startsWith('.git/'));
648
+ }
649
+ /**
650
+ * True for any directory that should NOT be watched (used while building the
651
+ * Linux per-directory watch tree). Tests the directory form of the path so a
652
+ * dir-only ignore rule like `build/` matches.
653
+ */
654
+ shouldIgnoreDir(dirPath) {
655
+ const rel = (0, utils_1.normalizePath)(path.relative(this.projectRoot, dirPath));
656
+ if (!rel || rel === '.' || rel.startsWith('..'))
657
+ return false; // root / outside
658
+ if (this.isAlwaysIgnored(rel))
659
+ return true;
660
+ if (!this.ignoreMatcher)
661
+ return false;
662
+ return this.ignoreMatcher.ignores(rel + '/');
663
+ }
664
+ /**
665
+ * Permanently disable live watching after a terminal runtime failure
666
+ * (watch-resource exhaustion, lock contention past the retry budget, or a
667
+ * persistent generic sync failure past the retry budget).
668
+ * Idempotent: logs one actionable warning, fires {@link WatchOptions.onDegraded}
669
+ * once, and stops the watcher. A subsequent start() clears the latch.
670
+ */
671
+ degrade(reason, context = {}) {
672
+ if (this.degradedReason)
673
+ return;
674
+ this.degradedReason = reason;
675
+ (0, errors_1.logWarn)('File watcher disabled', { projectRoot: this.projectRoot, reason, ...context });
676
+ this.onDegraded?.(reason);
677
+ this.stop();
678
+ }
679
+ /**
680
+ * Warn ONCE that the Linux inotify watch budget is exhausted (ENOSPC), and
681
+ * stop adding new watches for the rest of this session — every further
682
+ * `inotify_add_watch` would fail too, so walking the rest of the tree is
683
+ * waste. Unlike {@link degrade} this is NON-fatal: the watches already
684
+ * installed keep firing, and `codegraph sync` covers the unwatched remainder.
685
+ * The message names the kernel knob to raise (`fs.inotify.max_user_watches`).
686
+ */
687
+ warnInotifyLimit(context = {}) {
688
+ if (this.inotifyLimitWarned)
689
+ return;
690
+ this.inotifyLimitWarned = true;
691
+ (0, errors_1.logWarn)(INOTIFY_LIMIT_REASON, { watchedDirs: this.dirWatchers.size, ...context });
692
+ }
693
+ /**
694
+ * Whether live watching has degraded permanently (until the next start()).
695
+ * Distinct from {@link isActive}: a degraded watcher is inactive, but an
696
+ * inactive watcher is not necessarily degraded (it may simply be stopped or
697
+ * never started). Hosts use this to tell the user auto-sync is off.
698
+ */
699
+ isDegraded() {
700
+ return this.degradedReason !== null;
701
+ }
702
+ /** The reason live watching degraded, or null if it is healthy. */
703
+ getDegradedReason() {
704
+ return this.degradedReason;
705
+ }
706
+ /**
707
+ * Stop watching for file changes.
708
+ */
709
+ stop() {
710
+ this.stopped = true;
711
+ if (this.debounceTimer) {
712
+ clearTimeout(this.debounceTimer);
713
+ this.debounceTimer = null;
714
+ }
715
+ if (this.recursiveWatcher) {
716
+ try {
717
+ this.recursiveWatcher.close();
718
+ }
719
+ catch {
720
+ /* already closed */
721
+ }
722
+ this.recursiveWatcher = null;
723
+ }
724
+ for (const w of this.dirWatchers.values()) {
725
+ try {
726
+ w.close();
727
+ }
728
+ catch {
729
+ /* already closed */
730
+ }
731
+ }
732
+ this.dirWatchers.clear();
733
+ this.dirCapWarned = false;
734
+ this.inotifyLimitWarned = false;
735
+ this.lockRetryCount = 0;
736
+ this.syncFailureRetryCount = 0;
737
+ // NB: degradedReason is intentionally NOT reset here — it must survive the
738
+ // stop() that degrade() triggers so isDegraded() stays true. start() clears it.
739
+ this.inert = false;
740
+ this.pendingFiles.clear();
741
+ this.ready = false;
742
+ this.ignoreMatcher = null;
743
+ if (IS_TEST_RUNTIME)
744
+ liveWatchersForTests.delete(this.projectRoot);
745
+ (0, errors_1.logDebug)('File watcher stopped');
746
+ }
747
+ /**
748
+ * @internal Test-only: feed a synthetic project-relative change through the
749
+ * same filter → pendingFiles → debounced-sync path a real fs.watch event
750
+ * takes. Lets the watcher / staleness-banner suites stay deterministic
751
+ * instead of racing on OS watch-delivery latency. See
752
+ * {@link __emitWatchEventForTests}.
753
+ */
754
+ ingestEventForTests(relPath) {
755
+ this.handleChange((0, utils_1.normalizePath)(relPath));
756
+ }
757
+ /**
758
+ * Whether the watcher is currently active.
759
+ */
760
+ isActive() {
761
+ return (this.recursiveWatcher !== null || this.dirWatchers.size > 0 || this.inert) && !this.stopped;
762
+ }
763
+ /**
764
+ * Resolves once the watch set has been installed (or immediately if it
765
+ * already has). Useful for tests that need a deterministic boundary before
766
+ * asserting on `pendingFiles`.
767
+ *
768
+ * Production callers don't need this: `pendingFiles` is read continuously,
769
+ * the staleness banner is always correct (empty or populated), and there is
770
+ * no asynchronous initial-scan window with `fs.watch`.
771
+ */
772
+ waitUntilReady(timeoutMs = 10000) {
773
+ if (this.ready)
774
+ return Promise.resolve();
775
+ return new Promise((resolve, reject) => {
776
+ const t = setTimeout(() => {
777
+ const idx = this.readyWaiters.indexOf(handler);
778
+ if (idx >= 0)
779
+ this.readyWaiters.splice(idx, 1);
780
+ reject(new Error(`FileWatcher.waitUntilReady timed out after ${timeoutMs}ms`));
781
+ }, timeoutMs);
782
+ const handler = () => { clearTimeout(t); resolve(); };
783
+ this.readyWaiters.push(handler);
784
+ });
785
+ }
786
+ /**
787
+ * Schedule a normal debounced sync after a source edit.
788
+ */
789
+ scheduleSync() {
790
+ if (this.debounceTimer) {
791
+ clearTimeout(this.debounceTimer);
792
+ }
793
+ // Adaptive quiet window: a lone save (or a pair — editor + its test file)
794
+ // fires fast so the graph feels instant; anything bigger keeps the full
795
+ // configured window so an agent's multi-file burst still coalesces into
796
+ // one sync exactly as before. Re-arming on each event preserves the
797
+ // trailing-edge semantics either way: if more events arrive inside the
798
+ // quick window, the reschedule sees the larger pending set and extends to
799
+ // the full window. Never exceeds the configured debounce (a user-lowered
800
+ // CODEGRAPH_WATCH_DEBOUNCE_MS stays authoritative), floor 100ms.
801
+ const quickMs = Math.max(100, Math.min(QUICK_SYNC_QUIET_MS, this.debounceMs));
802
+ const delay = this.pendingFiles.size <= QUICK_SYNC_MAX_PENDING ? quickMs : this.debounceMs;
803
+ this.debounceTimer = setTimeout(() => {
804
+ this.debounceTimer = null;
805
+ this.flush();
806
+ }, delay);
807
+ }
808
+ /**
809
+ * Schedule a retry after a recoverable sync failure (lock contention). Kept
810
+ * separate from {@link scheduleSync} so prolonged contention backs off
811
+ * exponentially instead of hammering the lock every debounce cycle.
812
+ */
813
+ scheduleRetrySync(delayMs) {
814
+ if (this.debounceTimer) {
815
+ clearTimeout(this.debounceTimer);
816
+ }
817
+ this.debounceTimer = setTimeout(() => {
818
+ this.debounceTimer = null;
819
+ this.flush();
820
+ }, delayMs);
821
+ }
822
+ /**
823
+ * Flush pending changes by running sync.
824
+ *
825
+ * pendingFiles is NOT cleared at the start of sync — entries are removed
826
+ * only after sync commits successfully, and only for entries whose
827
+ * lastSeenMs <= syncStartedMs. That way, a query that arrives mid-sync
828
+ * still sees the affected files marked stale (the DB hasn't been updated
829
+ * yet), and an event that lands mid-sync persists into the follow-up.
830
+ *
831
+ * On sync failure pendingFiles is left untouched — every edit is still
832
+ * unindexed, and the rescheduled sync will absorb the same set next time.
833
+ */
834
+ async flush() {
835
+ // If already syncing, the post-sync check will re-trigger
836
+ if (this.syncing || this.stopped)
837
+ return;
838
+ this.syncStartedMs = Date.now();
839
+ this.syncing = true;
840
+ // Scoped fast path: when every pending change is a known file event, hand
841
+ // the exact paths to sync and skip its O(repo) scan-diff. Anything the
842
+ // events can't fully describe — a directory removal, an empty pending set
843
+ // (retry paths), or an event storm past the ceiling — runs the full
844
+ // scan-diff, which remains the ground truth.
845
+ const scoped = !this.needsFullScan && this.pendingFiles.size > 0 && this.pendingFiles.size <= SCOPED_SYNC_MAX_PENDING
846
+ ? [...this.pendingFiles.keys()]
847
+ : undefined;
848
+ try {
849
+ const result = await this.syncFn(scoped);
850
+ if (!scoped)
851
+ this.needsFullScan = false;
852
+ this.lockRetryCount = 0; // a clean sync clears any contention backoff
853
+ this.syncFailureRetryCount = 0; // ...and any generic-failure backoff
854
+ // Remove entries whose most recent event predates this sync — those
855
+ // edits are now in the DB. Entries with lastSeenMs > syncStartedMs
856
+ // arrived mid-sync; whether the in-flight sync captured them depends
857
+ // on when sync read that file, so we keep them as pending and let
858
+ // the follow-up sync handle them. We prefer false positives ("shown
859
+ // stale, actually fresh" → at worst one extra Read) over false
860
+ // negatives ("shown fresh, actually stale" → misleads the agent).
861
+ for (const [filePath, info] of this.pendingFiles) {
862
+ if (info.lastSeenMs <= this.syncStartedMs) {
863
+ this.pendingFiles.delete(filePath);
864
+ }
865
+ }
866
+ this.onSyncComplete?.(result);
867
+ }
868
+ catch (err) {
869
+ if (err instanceof LockUnavailableError) {
870
+ this.lockRetryCount += 1;
871
+ // Lock-failure no-op (another writer holds the lock). pendingFiles
872
+ // stays intact and the `finally` block reschedules with backoff. Keep
873
+ // brief contention quiet (debug-only — a long external index would
874
+ // otherwise spam stderr every cycle), but stop retrying forever: once a
875
+ // writer holds the lock past the budget, degrade auto-sync explicitly.
876
+ (0, errors_1.logDebug)('Watch sync skipped: file lock unavailable', {
877
+ pendingFiles: this.pendingFiles.size,
878
+ retryCount: this.lockRetryCount,
879
+ });
880
+ if (this.lockRetryCount > MAX_LOCK_RETRIES) {
881
+ this.degrade('Alpha Code Sense file lock held by another process past the retry budget; ' +
882
+ 'auto-sync disabled. Run `codegraph sync` once the other writer finishes ' +
883
+ '(or install git sync hooks) to refresh the graph.', { pendingFiles: this.pendingFiles.size, retryCount: this.lockRetryCount });
884
+ }
885
+ }
886
+ else {
887
+ this.lockRetryCount = 0; // a non-lock failure isn't contention; reset that streak
888
+ this.syncFailureRetryCount += 1;
889
+ const error = err instanceof Error ? err : new Error(String(err));
890
+ (0, errors_1.logWarn)('Watch sync failed', {
891
+ error: error.message,
892
+ retryCount: this.syncFailureRetryCount,
893
+ });
894
+ this.onSyncError?.(error);
895
+ // A persistent (deterministic) sync failure — a broken extractor on a
896
+ // specific file, DB corruption, SQLITE_FULL, an OOM in resolution —
897
+ // would otherwise retry forever at the debounce cadence, spamming logs
898
+ // and work while the auto-update guarantee is silently dead (#1127).
899
+ // Bound it exactly like lock contention: the `finally` block backs off
900
+ // exponentially, and past the budget we degrade so the dead guarantee
901
+ // is surfaced (onDegraded / isDegraded) instead of hidden. A single
902
+ // clean sync resets the streak, so a transient hiccup never degrades.
903
+ if (this.syncFailureRetryCount > MAX_SYNC_FAILURE_RETRIES) {
904
+ this.degrade(`Alpha Code Sense auto-sync failed ${this.syncFailureRetryCount} times in a row; ` +
905
+ 'auto-sync disabled. Run `codegraph sync` (or install git sync hooks) to ' +
906
+ `refresh the graph after changes. Last error: ${error.message}`, { error: error.message, retryCount: this.syncFailureRetryCount });
907
+ }
908
+ }
909
+ // Failure: leave pendingFiles untouched. Every edit it tracks is
910
+ // still unindexed; the rescheduled sync sees the same set.
911
+ }
912
+ finally {
913
+ this.syncing = false;
914
+ // If pending files remain (mid-sync events, or this sync failed),
915
+ // schedule another pass. After EITHER failure mode — lock contention or a
916
+ // generic sync failure — back off exponentially (debounceMs · 2^(n-1),
917
+ // capped) instead of retrying at the normal debounce cadence; a clean
918
+ // sync resets both counters so normal edits keep the fast debounce. Use
919
+ // the larger streak so interleaved failures still back off. A degrade()
920
+ // above already set `stopped`, so this won't reschedule a watcher that
921
+ // has given up.
922
+ if (this.pendingFiles.size > 0 && !this.stopped) {
923
+ const retryCount = Math.max(this.lockRetryCount, this.syncFailureRetryCount);
924
+ if (retryCount > 0) {
925
+ const retryDelayMs = Math.min(this.debounceMs * 2 ** Math.max(0, retryCount - 1), MAX_RETRY_BACKOFF_MS);
926
+ this.scheduleRetrySync(retryDelayMs);
927
+ }
928
+ else {
929
+ this.scheduleSync();
930
+ }
931
+ }
932
+ }
933
+ }
934
+ /**
935
+ * Snapshot of files seen by the watcher since the last successful sync.
936
+ *
937
+ * Used by MCP tool responses to mark stale results without blocking on a
938
+ * sync: a tool that returns a hit in `src/foo.ts` while `src/foo.ts` is in
939
+ * this list tells the agent "Read this file directly, the index lags."
940
+ *
941
+ * `indexing` is true when a sync is currently in flight whose start time is
942
+ * AFTER this file's most recent event — i.e. that sync will absorb the
943
+ * edit. False means the file is still inside the debounce window and no
944
+ * sync has started yet (a follow-up call a few hundred ms later may show
945
+ * `indexing: true` or the file may have left the list entirely).
946
+ *
947
+ * Cheap: O(pendingFiles.size), no I/O, no locks.
948
+ */
949
+ getPendingFiles() {
950
+ const result = [];
951
+ for (const [filePath, info] of this.pendingFiles) {
952
+ result.push({
953
+ path: filePath,
954
+ firstSeenMs: info.firstSeenMs,
955
+ lastSeenMs: info.lastSeenMs,
956
+ indexing: this.syncing && this.syncStartedMs >= info.lastSeenMs,
957
+ });
958
+ }
959
+ return result;
960
+ }
961
+ }
962
+ exports.FileWatcher = FileWatcher;
963
+ /**
964
+ * Test-only: synthesize a source-file change for the live watcher running at
965
+ * `projectRoot`, exercising the real filter → pendingFiles → debounced-sync
966
+ * logic without depending on fs.watch delivery timing (which races under
967
+ * parallel vitest). `relPath` is project-relative POSIX (e.g. "src/foo.ts").
968
+ * Returns false if no live watcher is registered for that root (e.g. outside a
969
+ * test runtime, where the registry is intentionally not populated).
970
+ */
971
+ function __emitWatchEventForTests(projectRoot, relPath) {
972
+ const w = liveWatchersForTests.get(projectRoot);
973
+ if (!w)
974
+ return false;
975
+ w.ingestEventForTests(relPath);
976
+ return true;
977
+ }
978
+ //# sourceMappingURL=watcher.js.map