@smthrs/std 0.0.0-stage → 1.0.0-rc.3

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 (555) hide show
  1. package/CHANGELOG.md +130 -0
  2. package/LICENSE +21 -0
  3. package/README.md +152 -2
  4. package/dist/cjs/ApplyPatch.d.ts +174 -0
  5. package/dist/cjs/ApplyPatch.d.ts.map +1 -0
  6. package/dist/cjs/ApplyPatch.js +309 -0
  7. package/dist/cjs/ApplyPatch.js.map +7 -0
  8. package/dist/cjs/Bash.d.ts +304 -0
  9. package/dist/cjs/Bash.d.ts.map +1 -0
  10. package/dist/cjs/Bash.js +321 -0
  11. package/dist/cjs/Bash.js.map +7 -0
  12. package/dist/cjs/Checkpoints.d.ts +279 -0
  13. package/dist/cjs/Checkpoints.d.ts.map +1 -0
  14. package/dist/cjs/Checkpoints.js +145 -0
  15. package/dist/cjs/Checkpoints.js.map +7 -0
  16. package/dist/cjs/Container.d.ts +132 -0
  17. package/dist/cjs/Container.d.ts.map +1 -0
  18. package/dist/cjs/Container.js +113 -0
  19. package/dist/cjs/Container.js.map +7 -0
  20. package/dist/cjs/Edit.d.ts +203 -0
  21. package/dist/cjs/Edit.d.ts.map +1 -0
  22. package/dist/cjs/Edit.js +258 -0
  23. package/dist/cjs/Edit.js.map +7 -0
  24. package/dist/cjs/ExaWebSearch.d.ts +22 -0
  25. package/dist/cjs/ExaWebSearch.d.ts.map +1 -0
  26. package/dist/cjs/ExaWebSearch.js +138 -0
  27. package/dist/cjs/ExaWebSearch.js.map +7 -0
  28. package/dist/cjs/Explore.d.ts +328 -0
  29. package/dist/cjs/Explore.d.ts.map +1 -0
  30. package/dist/cjs/Explore.js +90 -0
  31. package/dist/cjs/Explore.js.map +7 -0
  32. package/dist/cjs/Fetch.d.ts +130 -0
  33. package/dist/cjs/Fetch.d.ts.map +1 -0
  34. package/dist/cjs/Fetch.js +64 -0
  35. package/dist/cjs/Fetch.js.map +7 -0
  36. package/dist/cjs/Glob.d.ts +204 -0
  37. package/dist/cjs/Glob.d.ts.map +1 -0
  38. package/dist/cjs/Glob.js +94 -0
  39. package/dist/cjs/Glob.js.map +7 -0
  40. package/dist/cjs/Grep.d.ts +347 -0
  41. package/dist/cjs/Grep.d.ts.map +1 -0
  42. package/dist/cjs/Grep.js +181 -0
  43. package/dist/cjs/Grep.js.map +7 -0
  44. package/dist/cjs/HttpPost.d.ts +130 -0
  45. package/dist/cjs/HttpPost.d.ts.map +1 -0
  46. package/dist/cjs/HttpPost.js +72 -0
  47. package/dist/cjs/HttpPost.js.map +7 -0
  48. package/dist/cjs/LanguageServer.d.ts +90 -0
  49. package/dist/cjs/LanguageServer.d.ts.map +1 -0
  50. package/dist/cjs/LanguageServer.js +60 -0
  51. package/dist/cjs/LanguageServer.js.map +7 -0
  52. package/dist/cjs/Ls.d.ts +164 -0
  53. package/dist/cjs/Ls.d.ts.map +1 -0
  54. package/dist/cjs/Ls.js +136 -0
  55. package/dist/cjs/Ls.js.map +7 -0
  56. package/dist/cjs/Lsp.d.ts +125 -0
  57. package/dist/cjs/Lsp.d.ts.map +1 -0
  58. package/dist/cjs/Lsp.js +137 -0
  59. package/dist/cjs/Lsp.js.map +7 -0
  60. package/dist/cjs/Manifest.d.ts +918 -0
  61. package/dist/cjs/Manifest.d.ts.map +1 -0
  62. package/dist/cjs/Manifest.js +144 -0
  63. package/dist/cjs/Manifest.js.map +7 -0
  64. package/dist/cjs/NativeSearch.d.ts +38 -0
  65. package/dist/cjs/NativeSearch.d.ts.map +1 -0
  66. package/dist/cjs/NativeSearch.js +326 -0
  67. package/dist/cjs/NativeSearch.js.map +7 -0
  68. package/dist/cjs/NodeLanguageServer.d.ts +128 -0
  69. package/dist/cjs/NodeLanguageServer.d.ts.map +1 -0
  70. package/dist/cjs/NodeLanguageServer.js +796 -0
  71. package/dist/cjs/NodeLanguageServer.js.map +7 -0
  72. package/dist/cjs/PortableSearch.d.ts +24 -0
  73. package/dist/cjs/PortableSearch.d.ts.map +1 -0
  74. package/dist/cjs/PortableSearch.js +233 -0
  75. package/dist/cjs/PortableSearch.js.map +7 -0
  76. package/dist/cjs/Probe.d.ts +193 -0
  77. package/dist/cjs/Probe.d.ts.map +1 -0
  78. package/dist/cjs/Probe.js +134 -0
  79. package/dist/cjs/Probe.js.map +7 -0
  80. package/dist/cjs/Read.d.ts +189 -0
  81. package/dist/cjs/Read.d.ts.map +1 -0
  82. package/dist/cjs/Read.js +223 -0
  83. package/dist/cjs/Read.js.map +7 -0
  84. package/dist/cjs/Relocate.d.ts +73 -0
  85. package/dist/cjs/Relocate.d.ts.map +1 -0
  86. package/dist/cjs/Relocate.js +72 -0
  87. package/dist/cjs/Relocate.js.map +7 -0
  88. package/dist/cjs/Search.d.ts +163 -0
  89. package/dist/cjs/Search.d.ts.map +1 -0
  90. package/dist/cjs/Search.js +51 -0
  91. package/dist/cjs/Search.js.map +7 -0
  92. package/dist/cjs/SearchConformance.d.ts +115 -0
  93. package/dist/cjs/SearchConformance.d.ts.map +1 -0
  94. package/dist/cjs/SearchConformance.js +172 -0
  95. package/dist/cjs/SearchConformance.js.map +7 -0
  96. package/dist/cjs/SearchContract.d.ts +114 -0
  97. package/dist/cjs/SearchContract.d.ts.map +1 -0
  98. package/dist/cjs/SearchContract.js +339 -0
  99. package/dist/cjs/SearchContract.js.map +7 -0
  100. package/dist/cjs/ShellCommand.d.ts +164 -0
  101. package/dist/cjs/ShellCommand.d.ts.map +1 -0
  102. package/dist/cjs/ShellCommand.js +102 -0
  103. package/dist/cjs/ShellCommand.js.map +7 -0
  104. package/dist/cjs/StdError.d.ts +55 -0
  105. package/dist/cjs/StdError.d.ts.map +1 -0
  106. package/dist/cjs/StdError.js +74 -0
  107. package/dist/cjs/StdError.js.map +7 -0
  108. package/dist/cjs/TestRun.d.ts +311 -0
  109. package/dist/cjs/TestRun.d.ts.map +1 -0
  110. package/dist/cjs/TestRun.js +228 -0
  111. package/dist/cjs/TestRun.js.map +7 -0
  112. package/dist/cjs/TestRunner.d.ts +102 -0
  113. package/dist/cjs/TestRunner.d.ts.map +1 -0
  114. package/dist/cjs/TestRunner.js +54 -0
  115. package/dist/cjs/TestRunner.js.map +7 -0
  116. package/dist/cjs/TreeFingerprint.d.ts +140 -0
  117. package/dist/cjs/TreeFingerprint.d.ts.map +1 -0
  118. package/dist/cjs/TreeFingerprint.js +87 -0
  119. package/dist/cjs/TreeFingerprint.js.map +7 -0
  120. package/dist/cjs/UpdatePlan.d.ts +152 -0
  121. package/dist/cjs/UpdatePlan.d.ts.map +1 -0
  122. package/dist/cjs/UpdatePlan.js +87 -0
  123. package/dist/cjs/UpdatePlan.js.map +7 -0
  124. package/dist/cjs/WebFetch.d.ts +134 -0
  125. package/dist/cjs/WebFetch.d.ts.map +1 -0
  126. package/dist/cjs/WebFetch.js +140 -0
  127. package/dist/cjs/WebFetch.js.map +7 -0
  128. package/dist/cjs/WebSearch.d.ts +181 -0
  129. package/dist/cjs/WebSearch.d.ts.map +1 -0
  130. package/dist/cjs/WebSearch.js +86 -0
  131. package/dist/cjs/WebSearch.js.map +7 -0
  132. package/dist/cjs/Write.d.ts +147 -0
  133. package/dist/cjs/Write.d.ts.map +1 -0
  134. package/dist/cjs/Write.js +122 -0
  135. package/dist/cjs/Write.js.map +7 -0
  136. package/dist/cjs/index.d.ts +127 -0
  137. package/dist/cjs/index.d.ts.map +1 -0
  138. package/dist/cjs/index.js +99 -0
  139. package/dist/cjs/index.js.map +7 -0
  140. package/dist/cjs/internal/ApplyPatch.d.ts +145 -0
  141. package/dist/cjs/internal/ApplyPatch.d.ts.map +1 -0
  142. package/dist/cjs/internal/ApplyPatch.js +462 -0
  143. package/dist/cjs/internal/ApplyPatch.js.map +7 -0
  144. package/dist/cjs/internal/CodexText.d.ts +73 -0
  145. package/dist/cjs/internal/CodexText.d.ts.map +1 -0
  146. package/dist/cjs/internal/CodexText.js +108 -0
  147. package/dist/cjs/internal/CodexText.js.map +7 -0
  148. package/dist/cjs/internal/Declaration.d.ts +49 -0
  149. package/dist/cjs/internal/Declaration.d.ts.map +1 -0
  150. package/dist/cjs/internal/Declaration.js +46 -0
  151. package/dist/cjs/internal/Declaration.js.map +7 -0
  152. package/dist/cjs/internal/Diagnostics.d.ts +77 -0
  153. package/dist/cjs/internal/Diagnostics.d.ts.map +1 -0
  154. package/dist/cjs/internal/Diagnostics.js +89 -0
  155. package/dist/cjs/internal/Diagnostics.js.map +7 -0
  156. package/dist/cjs/internal/EnvelopePrecheck.d.ts +67 -0
  157. package/dist/cjs/internal/EnvelopePrecheck.d.ts.map +1 -0
  158. package/dist/cjs/internal/EnvelopePrecheck.js +124 -0
  159. package/dist/cjs/internal/EnvelopePrecheck.js.map +7 -0
  160. package/dist/cjs/internal/Exec.d.ts +139 -0
  161. package/dist/cjs/internal/Exec.d.ts.map +1 -0
  162. package/dist/cjs/internal/Exec.js +158 -0
  163. package/dist/cjs/internal/Exec.js.map +7 -0
  164. package/dist/cjs/internal/FileMutation.d.ts +109 -0
  165. package/dist/cjs/internal/FileMutation.d.ts.map +1 -0
  166. package/dist/cjs/internal/FileMutation.js +116 -0
  167. package/dist/cjs/internal/FileMutation.js.map +7 -0
  168. package/dist/cjs/internal/FsFailure.d.ts +38 -0
  169. package/dist/cjs/internal/FsFailure.d.ts.map +1 -0
  170. package/dist/cjs/internal/FsFailure.js +40 -0
  171. package/dist/cjs/internal/FsFailure.js.map +7 -0
  172. package/dist/cjs/internal/GitWorktree.d.ts +98 -0
  173. package/dist/cjs/internal/GitWorktree.d.ts.map +1 -0
  174. package/dist/cjs/internal/GitWorktree.js +270 -0
  175. package/dist/cjs/internal/GitWorktree.js.map +7 -0
  176. package/dist/cjs/internal/Grouping.d.ts +51 -0
  177. package/dist/cjs/internal/Grouping.d.ts.map +1 -0
  178. package/dist/cjs/internal/Grouping.js +83 -0
  179. package/dist/cjs/internal/Grouping.js.map +7 -0
  180. package/dist/cjs/internal/Html.d.ts +20 -0
  181. package/dist/cjs/internal/Html.d.ts.map +1 -0
  182. package/dist/cjs/internal/Html.js +81 -0
  183. package/dist/cjs/internal/Html.js.map +7 -0
  184. package/dist/cjs/internal/Http.d.ts +95 -0
  185. package/dist/cjs/internal/Http.d.ts.map +1 -0
  186. package/dist/cjs/internal/Http.js +153 -0
  187. package/dist/cjs/internal/Http.js.map +7 -0
  188. package/dist/cjs/internal/HttpNetwork.d.ts +27 -0
  189. package/dist/cjs/internal/HttpNetwork.d.ts.map +1 -0
  190. package/dist/cjs/internal/HttpNetwork.js +146 -0
  191. package/dist/cjs/internal/HttpNetwork.js.map +7 -0
  192. package/dist/cjs/internal/Ignore.d.ts +37 -0
  193. package/dist/cjs/internal/Ignore.d.ts.map +1 -0
  194. package/dist/cjs/internal/Ignore.js +100 -0
  195. package/dist/cjs/internal/Ignore.js.map +7 -0
  196. package/dist/cjs/internal/LinearRegex.d.ts +19 -0
  197. package/dist/cjs/internal/LinearRegex.d.ts.map +1 -0
  198. package/dist/cjs/internal/LinearRegex.js +166 -0
  199. package/dist/cjs/internal/LinearRegex.js.map +7 -0
  200. package/dist/cjs/internal/Match.d.ts +85 -0
  201. package/dist/cjs/internal/Match.d.ts.map +1 -0
  202. package/dist/cjs/internal/Match.js +99 -0
  203. package/dist/cjs/internal/Match.js.map +7 -0
  204. package/dist/cjs/internal/Paths.d.ts +23 -0
  205. package/dist/cjs/internal/Paths.d.ts.map +1 -0
  206. package/dist/cjs/internal/Paths.js +52 -0
  207. package/dist/cjs/internal/Paths.js.map +7 -0
  208. package/dist/cjs/internal/Preserve.d.ts +25 -0
  209. package/dist/cjs/internal/Preserve.d.ts.map +1 -0
  210. package/dist/cjs/internal/Preserve.js +88 -0
  211. package/dist/cjs/internal/Preserve.js.map +7 -0
  212. package/dist/cjs/internal/Prune.d.ts +35 -0
  213. package/dist/cjs/internal/Prune.d.ts.map +1 -0
  214. package/dist/cjs/internal/Prune.js +54 -0
  215. package/dist/cjs/internal/Prune.js.map +7 -0
  216. package/dist/cjs/internal/SearchContract.d.ts +63 -0
  217. package/dist/cjs/internal/SearchContract.d.ts.map +1 -0
  218. package/dist/cjs/internal/SearchContract.js +46 -0
  219. package/dist/cjs/internal/SearchContract.js.map +7 -0
  220. package/dist/cjs/internal/Symbols.d.ts +39 -0
  221. package/dist/cjs/internal/Symbols.d.ts.map +1 -0
  222. package/dist/cjs/internal/Symbols.js +59 -0
  223. package/dist/cjs/internal/Symbols.js.map +7 -0
  224. package/dist/cjs/internal/TestReport.d.ts +52 -0
  225. package/dist/cjs/internal/TestReport.d.ts.map +1 -0
  226. package/dist/cjs/internal/TestReport.js +131 -0
  227. package/dist/cjs/internal/TestReport.js.map +7 -0
  228. package/dist/cjs/internal/Text.d.ts +114 -0
  229. package/dist/cjs/internal/Text.d.ts.map +1 -0
  230. package/dist/cjs/internal/Text.js +82 -0
  231. package/dist/cjs/internal/Text.js.map +7 -0
  232. package/dist/cjs/internal/Url.d.ts +13 -0
  233. package/dist/cjs/internal/Url.d.ts.map +1 -0
  234. package/dist/cjs/internal/Url.js +35 -0
  235. package/dist/cjs/internal/Url.js.map +7 -0
  236. package/dist/cjs/internal/Walk.d.ts +72 -0
  237. package/dist/cjs/internal/Walk.d.ts.map +1 -0
  238. package/dist/cjs/internal/Walk.js +108 -0
  239. package/dist/cjs/internal/Walk.js.map +7 -0
  240. package/dist/cjs/package.json +1 -0
  241. package/dist/esm/ApplyPatch.d.ts +174 -0
  242. package/dist/esm/ApplyPatch.d.ts.map +1 -0
  243. package/dist/esm/ApplyPatch.js +346 -0
  244. package/dist/esm/ApplyPatch.js.map +1 -0
  245. package/dist/esm/Bash.d.ts +304 -0
  246. package/dist/esm/Bash.d.ts.map +1 -0
  247. package/dist/esm/Bash.js +469 -0
  248. package/dist/esm/Bash.js.map +1 -0
  249. package/dist/esm/Checkpoints.d.ts +279 -0
  250. package/dist/esm/Checkpoints.d.ts.map +1 -0
  251. package/dist/esm/Checkpoints.js +298 -0
  252. package/dist/esm/Checkpoints.js.map +1 -0
  253. package/dist/esm/Container.d.ts +132 -0
  254. package/dist/esm/Container.d.ts.map +1 -0
  255. package/dist/esm/Container.js +151 -0
  256. package/dist/esm/Container.js.map +1 -0
  257. package/dist/esm/Edit.d.ts +203 -0
  258. package/dist/esm/Edit.d.ts.map +1 -0
  259. package/dist/esm/Edit.js +296 -0
  260. package/dist/esm/Edit.js.map +1 -0
  261. package/dist/esm/ExaWebSearch.d.ts +22 -0
  262. package/dist/esm/ExaWebSearch.d.ts.map +1 -0
  263. package/dist/esm/ExaWebSearch.js +107 -0
  264. package/dist/esm/ExaWebSearch.js.map +1 -0
  265. package/dist/esm/Explore.d.ts +328 -0
  266. package/dist/esm/Explore.d.ts.map +1 -0
  267. package/dist/esm/Explore.js +106 -0
  268. package/dist/esm/Explore.js.map +1 -0
  269. package/dist/esm/Fetch.d.ts +130 -0
  270. package/dist/esm/Fetch.d.ts.map +1 -0
  271. package/dist/esm/Fetch.js +91 -0
  272. package/dist/esm/Fetch.js.map +1 -0
  273. package/dist/esm/Glob.d.ts +204 -0
  274. package/dist/esm/Glob.d.ts.map +1 -0
  275. package/dist/esm/Glob.js +177 -0
  276. package/dist/esm/Glob.js.map +1 -0
  277. package/dist/esm/Grep.d.ts +347 -0
  278. package/dist/esm/Grep.d.ts.map +1 -0
  279. package/dist/esm/Grep.js +289 -0
  280. package/dist/esm/Grep.js.map +1 -0
  281. package/dist/esm/HttpPost.d.ts +130 -0
  282. package/dist/esm/HttpPost.d.ts.map +1 -0
  283. package/dist/esm/HttpPost.js +89 -0
  284. package/dist/esm/HttpPost.js.map +1 -0
  285. package/dist/esm/LanguageServer.d.ts +90 -0
  286. package/dist/esm/LanguageServer.d.ts.map +1 -0
  287. package/dist/esm/LanguageServer.js +57 -0
  288. package/dist/esm/LanguageServer.js.map +1 -0
  289. package/dist/esm/Ls.d.ts +164 -0
  290. package/dist/esm/Ls.d.ts.map +1 -0
  291. package/dist/esm/Ls.js +178 -0
  292. package/dist/esm/Ls.js.map +1 -0
  293. package/dist/esm/Lsp.d.ts +125 -0
  294. package/dist/esm/Lsp.d.ts.map +1 -0
  295. package/dist/esm/Lsp.js +165 -0
  296. package/dist/esm/Lsp.js.map +1 -0
  297. package/dist/esm/Manifest.d.ts +918 -0
  298. package/dist/esm/Manifest.d.ts.map +1 -0
  299. package/dist/esm/Manifest.js +153 -0
  300. package/dist/esm/Manifest.js.map +1 -0
  301. package/dist/esm/NativeSearch.d.ts +38 -0
  302. package/dist/esm/NativeSearch.d.ts.map +1 -0
  303. package/dist/esm/NativeSearch.js +378 -0
  304. package/dist/esm/NativeSearch.js.map +1 -0
  305. package/dist/esm/NodeLanguageServer.d.ts +128 -0
  306. package/dist/esm/NodeLanguageServer.d.ts.map +1 -0
  307. package/dist/esm/NodeLanguageServer.js +843 -0
  308. package/dist/esm/NodeLanguageServer.js.map +1 -0
  309. package/dist/esm/PortableSearch.d.ts +24 -0
  310. package/dist/esm/PortableSearch.d.ts.map +1 -0
  311. package/dist/esm/PortableSearch.js +240 -0
  312. package/dist/esm/PortableSearch.js.map +1 -0
  313. package/dist/esm/Probe.d.ts +193 -0
  314. package/dist/esm/Probe.d.ts.map +1 -0
  315. package/dist/esm/Probe.js +225 -0
  316. package/dist/esm/Probe.js.map +1 -0
  317. package/dist/esm/Read.d.ts +189 -0
  318. package/dist/esm/Read.d.ts.map +1 -0
  319. package/dist/esm/Read.js +300 -0
  320. package/dist/esm/Read.js.map +1 -0
  321. package/dist/esm/Relocate.d.ts +73 -0
  322. package/dist/esm/Relocate.d.ts.map +1 -0
  323. package/dist/esm/Relocate.js +153 -0
  324. package/dist/esm/Relocate.js.map +1 -0
  325. package/dist/esm/Search.d.ts +163 -0
  326. package/dist/esm/Search.d.ts.map +1 -0
  327. package/dist/esm/Search.js +47 -0
  328. package/dist/esm/Search.js.map +1 -0
  329. package/dist/esm/SearchConformance.d.ts +115 -0
  330. package/dist/esm/SearchConformance.d.ts.map +1 -0
  331. package/dist/esm/SearchConformance.js +193 -0
  332. package/dist/esm/SearchConformance.js.map +1 -0
  333. package/dist/esm/SearchContract.d.ts +114 -0
  334. package/dist/esm/SearchContract.d.ts.map +1 -0
  335. package/dist/esm/SearchContract.js +461 -0
  336. package/dist/esm/SearchContract.js.map +1 -0
  337. package/dist/esm/ShellCommand.d.ts +164 -0
  338. package/dist/esm/ShellCommand.d.ts.map +1 -0
  339. package/dist/esm/ShellCommand.js +159 -0
  340. package/dist/esm/ShellCommand.js.map +1 -0
  341. package/dist/esm/StdError.d.ts +55 -0
  342. package/dist/esm/StdError.d.ts.map +1 -0
  343. package/dist/esm/StdError.js +71 -0
  344. package/dist/esm/StdError.js.map +1 -0
  345. package/dist/esm/TestRun.d.ts +311 -0
  346. package/dist/esm/TestRun.d.ts.map +1 -0
  347. package/dist/esm/TestRun.js +316 -0
  348. package/dist/esm/TestRun.js.map +1 -0
  349. package/dist/esm/TestRunner.d.ts +102 -0
  350. package/dist/esm/TestRunner.d.ts.map +1 -0
  351. package/dist/esm/TestRunner.js +68 -0
  352. package/dist/esm/TestRunner.js.map +1 -0
  353. package/dist/esm/TreeFingerprint.d.ts +140 -0
  354. package/dist/esm/TreeFingerprint.d.ts.map +1 -0
  355. package/dist/esm/TreeFingerprint.js +170 -0
  356. package/dist/esm/TreeFingerprint.js.map +1 -0
  357. package/dist/esm/UpdatePlan.d.ts +152 -0
  358. package/dist/esm/UpdatePlan.d.ts.map +1 -0
  359. package/dist/esm/UpdatePlan.js +129 -0
  360. package/dist/esm/UpdatePlan.js.map +1 -0
  361. package/dist/esm/WebFetch.d.ts +134 -0
  362. package/dist/esm/WebFetch.d.ts.map +1 -0
  363. package/dist/esm/WebFetch.js +151 -0
  364. package/dist/esm/WebFetch.js.map +1 -0
  365. package/dist/esm/WebSearch.d.ts +181 -0
  366. package/dist/esm/WebSearch.d.ts.map +1 -0
  367. package/dist/esm/WebSearch.js +134 -0
  368. package/dist/esm/WebSearch.js.map +1 -0
  369. package/dist/esm/Write.d.ts +147 -0
  370. package/dist/esm/Write.d.ts.map +1 -0
  371. package/dist/esm/Write.js +144 -0
  372. package/dist/esm/Write.js.map +1 -0
  373. package/dist/esm/index.d.ts +127 -0
  374. package/dist/esm/index.d.ts.map +1 -0
  375. package/dist/esm/index.js +127 -0
  376. package/dist/esm/index.js.map +1 -0
  377. package/dist/esm/internal/ApplyPatch.d.ts +145 -0
  378. package/dist/esm/internal/ApplyPatch.d.ts.map +1 -0
  379. package/dist/esm/internal/ApplyPatch.js +489 -0
  380. package/dist/esm/internal/ApplyPatch.js.map +1 -0
  381. package/dist/esm/internal/CodexText.d.ts +73 -0
  382. package/dist/esm/internal/CodexText.d.ts.map +1 -0
  383. package/dist/esm/internal/CodexText.js +156 -0
  384. package/dist/esm/internal/CodexText.js.map +1 -0
  385. package/dist/esm/internal/Declaration.d.ts +49 -0
  386. package/dist/esm/internal/Declaration.d.ts.map +1 -0
  387. package/dist/esm/internal/Declaration.js +42 -0
  388. package/dist/esm/internal/Declaration.js.map +1 -0
  389. package/dist/esm/internal/Diagnostics.d.ts +77 -0
  390. package/dist/esm/internal/Diagnostics.d.ts.map +1 -0
  391. package/dist/esm/internal/Diagnostics.js +99 -0
  392. package/dist/esm/internal/Diagnostics.js.map +1 -0
  393. package/dist/esm/internal/EnvelopePrecheck.d.ts +67 -0
  394. package/dist/esm/internal/EnvelopePrecheck.d.ts.map +1 -0
  395. package/dist/esm/internal/EnvelopePrecheck.js +167 -0
  396. package/dist/esm/internal/EnvelopePrecheck.js.map +1 -0
  397. package/dist/esm/internal/Exec.d.ts +139 -0
  398. package/dist/esm/internal/Exec.d.ts.map +1 -0
  399. package/dist/esm/internal/Exec.js +193 -0
  400. package/dist/esm/internal/Exec.js.map +1 -0
  401. package/dist/esm/internal/FileMutation.d.ts +109 -0
  402. package/dist/esm/internal/FileMutation.d.ts.map +1 -0
  403. package/dist/esm/internal/FileMutation.js +123 -0
  404. package/dist/esm/internal/FileMutation.js.map +1 -0
  405. package/dist/esm/internal/FsFailure.d.ts +38 -0
  406. package/dist/esm/internal/FsFailure.d.ts.map +1 -0
  407. package/dist/esm/internal/FsFailure.js +39 -0
  408. package/dist/esm/internal/FsFailure.js.map +1 -0
  409. package/dist/esm/internal/GitWorktree.d.ts +98 -0
  410. package/dist/esm/internal/GitWorktree.d.ts.map +1 -0
  411. package/dist/esm/internal/GitWorktree.js +345 -0
  412. package/dist/esm/internal/GitWorktree.js.map +1 -0
  413. package/dist/esm/internal/Grouping.d.ts +51 -0
  414. package/dist/esm/internal/Grouping.d.ts.map +1 -0
  415. package/dist/esm/internal/Grouping.js +99 -0
  416. package/dist/esm/internal/Grouping.js.map +1 -0
  417. package/dist/esm/internal/Html.d.ts +20 -0
  418. package/dist/esm/internal/Html.d.ts.map +1 -0
  419. package/dist/esm/internal/Html.js +70 -0
  420. package/dist/esm/internal/Html.js.map +1 -0
  421. package/dist/esm/internal/Http.d.ts +95 -0
  422. package/dist/esm/internal/Http.d.ts.map +1 -0
  423. package/dist/esm/internal/Http.js +154 -0
  424. package/dist/esm/internal/Http.js.map +1 -0
  425. package/dist/esm/internal/HttpNetwork.d.ts +27 -0
  426. package/dist/esm/internal/HttpNetwork.d.ts.map +1 -0
  427. package/dist/esm/internal/HttpNetwork.js +114 -0
  428. package/dist/esm/internal/HttpNetwork.js.map +1 -0
  429. package/dist/esm/internal/Ignore.d.ts +37 -0
  430. package/dist/esm/internal/Ignore.d.ts.map +1 -0
  431. package/dist/esm/internal/Ignore.js +128 -0
  432. package/dist/esm/internal/Ignore.js.map +1 -0
  433. package/dist/esm/internal/LinearRegex.d.ts +19 -0
  434. package/dist/esm/internal/LinearRegex.d.ts.map +1 -0
  435. package/dist/esm/internal/LinearRegex.js +176 -0
  436. package/dist/esm/internal/LinearRegex.js.map +1 -0
  437. package/dist/esm/internal/Match.d.ts +85 -0
  438. package/dist/esm/internal/Match.d.ts.map +1 -0
  439. package/dist/esm/internal/Match.js +142 -0
  440. package/dist/esm/internal/Match.js.map +1 -0
  441. package/dist/esm/internal/Paths.d.ts +23 -0
  442. package/dist/esm/internal/Paths.d.ts.map +1 -0
  443. package/dist/esm/internal/Paths.js +40 -0
  444. package/dist/esm/internal/Paths.js.map +1 -0
  445. package/dist/esm/internal/Preserve.d.ts +25 -0
  446. package/dist/esm/internal/Preserve.d.ts.map +1 -0
  447. package/dist/esm/internal/Preserve.js +70 -0
  448. package/dist/esm/internal/Preserve.js.map +1 -0
  449. package/dist/esm/internal/Prune.d.ts +35 -0
  450. package/dist/esm/internal/Prune.d.ts.map +1 -0
  451. package/dist/esm/internal/Prune.js +60 -0
  452. package/dist/esm/internal/Prune.js.map +1 -0
  453. package/dist/esm/internal/SearchContract.d.ts +63 -0
  454. package/dist/esm/internal/SearchContract.d.ts.map +1 -0
  455. package/dist/esm/internal/SearchContract.js +66 -0
  456. package/dist/esm/internal/SearchContract.js.map +1 -0
  457. package/dist/esm/internal/Symbols.d.ts +39 -0
  458. package/dist/esm/internal/Symbols.d.ts.map +1 -0
  459. package/dist/esm/internal/Symbols.js +79 -0
  460. package/dist/esm/internal/Symbols.js.map +1 -0
  461. package/dist/esm/internal/TestReport.d.ts +52 -0
  462. package/dist/esm/internal/TestReport.d.ts.map +1 -0
  463. package/dist/esm/internal/TestReport.js +172 -0
  464. package/dist/esm/internal/TestReport.js.map +1 -0
  465. package/dist/esm/internal/Text.d.ts +114 -0
  466. package/dist/esm/internal/Text.d.ts.map +1 -0
  467. package/dist/esm/internal/Text.js +130 -0
  468. package/dist/esm/internal/Text.js.map +1 -0
  469. package/dist/esm/internal/Url.d.ts +13 -0
  470. package/dist/esm/internal/Url.d.ts.map +1 -0
  471. package/dist/esm/internal/Url.js +27 -0
  472. package/dist/esm/internal/Url.js.map +1 -0
  473. package/dist/esm/internal/Walk.d.ts +72 -0
  474. package/dist/esm/internal/Walk.d.ts.map +1 -0
  475. package/dist/esm/internal/Walk.js +126 -0
  476. package/dist/esm/internal/Walk.js.map +1 -0
  477. package/docs/README.md +117 -0
  478. package/docs/api.md +472 -0
  479. package/docs/concepts/effects-and-capabilities.md +136 -0
  480. package/docs/concepts/flows-and-handlers.md +115 -0
  481. package/docs/concepts/limits-and-disclosure.md +102 -0
  482. package/docs/concepts/search-contract.md +182 -0
  483. package/docs/guides/bind-the-standard-flows.md +114 -0
  484. package/docs/guides/implement-a-search-peer.md +133 -0
  485. package/docs/guides/pin-a-checkpoint.md +141 -0
  486. package/docs/guides/query-a-language-server.md +257 -0
  487. package/docs/guides/reach-the-network.md +141 -0
  488. package/docs/guides/read-and-edit-a-file.md +240 -0
  489. package/docs/guides/run-a-shell-command.md +215 -0
  490. package/docs/guides/run-the-test-suite.md +154 -0
  491. package/docs/guides/search-a-workspace.md +148 -0
  492. package/docs/installation.md +111 -0
  493. package/docs/quickstart.md +125 -0
  494. package/docs/reference/flows.md +556 -0
  495. package/docs/troubleshooting.md +322 -0
  496. package/package.json +439 -3
  497. package/src/ApplyPatch.ts +458 -0
  498. package/src/Bash.ts +549 -0
  499. package/src/Checkpoints.ts +422 -0
  500. package/src/Container.ts +212 -0
  501. package/src/Edit.ts +366 -0
  502. package/src/ExaWebSearch.ts +145 -0
  503. package/src/Explore.ts +139 -0
  504. package/src/Fetch.ts +117 -0
  505. package/src/Glob.ts +200 -0
  506. package/src/Grep.ts +320 -0
  507. package/src/HttpPost.ts +120 -0
  508. package/src/LanguageServer.ts +110 -0
  509. package/src/Ls.ts +228 -0
  510. package/src/Lsp.ts +184 -0
  511. package/src/Manifest.ts +162 -0
  512. package/src/NativeSearch.ts +457 -0
  513. package/src/NodeLanguageServer.ts +1148 -0
  514. package/src/PortableSearch.ts +264 -0
  515. package/src/Probe.ts +284 -0
  516. package/src/Read.ts +359 -0
  517. package/src/Relocate.ts +166 -0
  518. package/src/Search.ts +185 -0
  519. package/src/SearchConformance.ts +288 -0
  520. package/src/SearchContract.ts +489 -0
  521. package/src/ShellCommand.ts +201 -0
  522. package/src/StdError.ts +80 -0
  523. package/src/TestRun.ts +401 -0
  524. package/src/TestRunner.ts +119 -0
  525. package/src/TreeFingerprint.ts +200 -0
  526. package/src/UpdatePlan.ts +171 -0
  527. package/src/WebFetch.ts +194 -0
  528. package/src/WebSearch.ts +165 -0
  529. package/src/Write.ts +195 -0
  530. package/src/index.ts +154 -0
  531. package/src/internal/ApplyPatch.ts +601 -0
  532. package/src/internal/CodexText.ts +182 -0
  533. package/src/internal/Declaration.ts +60 -0
  534. package/src/internal/Diagnostics.ts +134 -0
  535. package/src/internal/EnvelopePrecheck.ts +233 -0
  536. package/src/internal/Exec.ts +314 -0
  537. package/src/internal/FileMutation.ts +231 -0
  538. package/src/internal/FsFailure.ts +51 -0
  539. package/src/internal/GitWorktree.ts +473 -0
  540. package/src/internal/Grouping.ts +106 -0
  541. package/src/internal/Html.ts +87 -0
  542. package/src/internal/Http.ts +209 -0
  543. package/src/internal/HttpNetwork.ts +153 -0
  544. package/src/internal/Ignore.ts +135 -0
  545. package/src/internal/LinearRegex.ts +173 -0
  546. package/src/internal/Match.ts +172 -0
  547. package/src/internal/Paths.ts +42 -0
  548. package/src/internal/Preserve.ts +108 -0
  549. package/src/internal/Prune.ts +62 -0
  550. package/src/internal/SearchContract.ts +77 -0
  551. package/src/internal/Symbols.ts +88 -0
  552. package/src/internal/TestReport.ts +194 -0
  553. package/src/internal/Text.ts +170 -0
  554. package/src/internal/Url.ts +23 -0
  555. package/src/internal/Walk.ts +176 -0
@@ -0,0 +1,796 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var NodeLanguageServer_exports = {};
30
+ __export(NodeLanguageServer_exports, {
31
+ MAX_PENDING_REQUESTS: () => MAX_PENDING_REQUESTS,
32
+ MAX_QUEUED_FRAMES: () => MAX_QUEUED_FRAMES,
33
+ layer: () => layer,
34
+ layerLazy: () => layerLazy,
35
+ make: () => make,
36
+ makeLazy: () => makeLazy
37
+ });
38
+ module.exports = __toCommonJS(NodeLanguageServer_exports);
39
+ var ChildProcessEnvironment = __toESM(require("@smthrs/kernel/ChildProcessEnvironment"), 1);
40
+ var ChildProcessSpawner = __toESM(require("@smthrs/kernel/ChildProcessSpawner"), 1);
41
+ var import_effect = require("effect");
42
+ var ChildProcess = __toESM(require("effect/unstable/process/ChildProcess"), 1);
43
+ var import_node_crypto = require("node:crypto");
44
+ var NodeFs = __toESM(require("node:fs"), 1);
45
+ var NodePath = __toESM(require("node:path"), 1);
46
+ var import_node_url = require("node:url");
47
+ var LanguageServer = __toESM(require("./LanguageServer.js"), 1);
48
+ var StdError = __toESM(require("./StdError.js"), 1);
49
+ const MAX_QUEUED_FRAMES = 256;
50
+ const MAX_PENDING_REQUESTS = 512;
51
+ const DEFAULT_SETTLE_MS = 5e3;
52
+ const DEFAULT_QUIET_MS = 300;
53
+ const BARRIER_METHOD = "$/smithers/barrier";
54
+ const BARRIER_TIMEOUT_MS = 1e3;
55
+ const METHOD_NOT_FOUND = -32601;
56
+ const LANGUAGE_IDS = {
57
+ ".ts": "typescript",
58
+ ".mts": "typescript",
59
+ ".cts": "typescript",
60
+ ".tsx": "typescriptreact",
61
+ ".js": "javascript",
62
+ ".mjs": "javascript",
63
+ ".cjs": "javascript",
64
+ ".jsx": "javascriptreact",
65
+ ".py": "python",
66
+ ".rs": "rust",
67
+ ".go": "go",
68
+ ".rb": "ruby",
69
+ ".sh": "shellscript",
70
+ ".md": "markdown",
71
+ ".yml": "yaml",
72
+ ".cc": "cpp",
73
+ ".cpp": "cpp",
74
+ ".hpp": "cpp",
75
+ ".cs": "csharp"
76
+ };
77
+ const extensionOf = (path) => NodePath.extname(path).toLowerCase();
78
+ const languageId = (path) => {
79
+ const extension = extensionOf(path);
80
+ return LANGUAGE_IDS[extension] ?? (extension.slice(1) || "plaintext");
81
+ };
82
+ const failure = (code, message) => new StdError.StdError({ code, message });
83
+ const maximumHeaderBytes = 8 * 1024;
84
+ const maximumFrameBytes = 8 * 1024 * 1024;
85
+ const headerEnd = new Uint8Array([13, 10, 13, 10]);
86
+ const contentLengthPrefix = new TextEncoder().encode("Content-Length:");
87
+ const concatenate = (left, right) => {
88
+ const combined = new Uint8Array(left.length + right.length);
89
+ combined.set(left);
90
+ combined.set(right, left.length);
91
+ return combined;
92
+ };
93
+ const makeChunkBuffer = () => {
94
+ let chunks = [];
95
+ let head = 0;
96
+ let headOffset = 0;
97
+ let length = 0;
98
+ const compact = () => {
99
+ if (head === chunks.length) {
100
+ chunks = [];
101
+ head = 0;
102
+ headOffset = 0;
103
+ } else if (head >= 64 && head * 2 >= chunks.length) {
104
+ chunks = chunks.slice(head);
105
+ head = 0;
106
+ }
107
+ };
108
+ const consume = (count, output) => {
109
+ let remaining = count;
110
+ let outputOffset = 0;
111
+ for (const chunk of chunks.slice(head)) {
112
+ if (remaining === 0) break;
113
+ const available = chunk.byteLength - headOffset;
114
+ const consumed = Math.min(available, remaining);
115
+ if (output !== void 0) {
116
+ output.set(chunk.subarray(headOffset, headOffset + consumed), outputOffset);
117
+ outputOffset += consumed;
118
+ }
119
+ headOffset += consumed;
120
+ length -= consumed;
121
+ remaining -= consumed;
122
+ if (headOffset === chunk.byteLength) {
123
+ head++;
124
+ headOffset = 0;
125
+ }
126
+ }
127
+ compact();
128
+ };
129
+ return {
130
+ get length() {
131
+ return length;
132
+ },
133
+ push: (chunk) => {
134
+ if (chunk.byteLength === 0) return;
135
+ chunks.push(chunk.slice());
136
+ length += chunk.byteLength;
137
+ },
138
+ indexOf: (needle) => {
139
+ let absolute = 0;
140
+ let matched = 0;
141
+ for (let chunkIndex = head; chunkIndex < chunks.length; chunkIndex++) {
142
+ const chunk = chunks[chunkIndex];
143
+ const start = chunkIndex === head ? headOffset : 0;
144
+ for (let index = start; index < chunk.byteLength; index++) {
145
+ const byte = chunk[index];
146
+ if (byte === needle[matched]) matched++;
147
+ else matched = byte === needle[0] ? 1 : 0;
148
+ if (matched === needle.byteLength) return absolute - needle.byteLength + 1;
149
+ absolute++;
150
+ }
151
+ }
152
+ return -1;
153
+ },
154
+ prefix: (count) => {
155
+ if (count > length) return void 0;
156
+ return {
157
+ take: () => {
158
+ const output = new Uint8Array(count);
159
+ consume(count, output);
160
+ return output;
161
+ },
162
+ discard: () => consume(count)
163
+ };
164
+ }
165
+ };
166
+ };
167
+ const malformedId = (body) => {
168
+ const match = /"id"\s*:\s*(\d+)/.exec(body);
169
+ if (match === null) return void 0;
170
+ const id = Number(match[1]);
171
+ return Number.isSafeInteger(id) ? id : void 0;
172
+ };
173
+ const makeFrameDecoder = () => {
174
+ const pending = makeChunkBuffer();
175
+ let bodyLength;
176
+ let resynchronizing = false;
177
+ return {
178
+ push: (chunk) => {
179
+ pending.push(chunk);
180
+ const events = [];
181
+ while (pending.length > 0 || bodyLength === 0) {
182
+ if (resynchronizing) {
183
+ const nextHeader = pending.indexOf(contentLengthPrefix);
184
+ if (nextHeader < 0) {
185
+ pending.prefix(Math.max(0, pending.length - contentLengthPrefix.byteLength + 1)).discard();
186
+ break;
187
+ }
188
+ pending.prefix(nextHeader).discard();
189
+ resynchronizing = false;
190
+ }
191
+ if (bodyLength !== void 0) {
192
+ const reader = pending.prefix(bodyLength);
193
+ if (reader === void 0) break;
194
+ const body = new TextDecoder().decode(reader.take());
195
+ bodyLength = void 0;
196
+ try {
197
+ events.push({ _tag: "Message", value: JSON.parse(body) });
198
+ } catch {
199
+ events.push({
200
+ _tag: "Failure",
201
+ error: failure("request_failed", "Language server returned malformed JSON"),
202
+ id: malformedId(body)
203
+ });
204
+ }
205
+ continue;
206
+ }
207
+ const delimiter = pending.indexOf(headerEnd);
208
+ if (delimiter < 0) {
209
+ if (pending.length > maximumHeaderBytes) {
210
+ events.push({
211
+ _tag: "Failure",
212
+ error: failure(
213
+ "request_failed",
214
+ `Language server frame header exceeded ${maximumHeaderBytes} bytes`
215
+ )
216
+ });
217
+ pending.prefix(1).discard();
218
+ resynchronizing = true;
219
+ continue;
220
+ }
221
+ break;
222
+ }
223
+ if (delimiter > maximumHeaderBytes) {
224
+ events.push({
225
+ _tag: "Failure",
226
+ error: failure("request_failed", `Language server frame header exceeded ${maximumHeaderBytes} bytes`)
227
+ });
228
+ pending.prefix(delimiter + headerEnd.byteLength).discard();
229
+ resynchronizing = true;
230
+ continue;
231
+ }
232
+ const header = new TextDecoder().decode(pending.prefix(delimiter).take());
233
+ pending.prefix(headerEnd.byteLength).discard();
234
+ const match = /(?:^|\r\n)Content-Length:\s*(\d+)(?:\r\n|$)/i.exec(header);
235
+ if (match === null) {
236
+ events.push({
237
+ _tag: "Failure",
238
+ error: failure("request_failed", "Language server frame omitted Content-Length")
239
+ });
240
+ resynchronizing = true;
241
+ continue;
242
+ }
243
+ const length = Number(match[1]);
244
+ if (!Number.isSafeInteger(length) || length < 0 || length > maximumFrameBytes) {
245
+ events.push({
246
+ _tag: "Failure",
247
+ error: failure("request_failed", `Language server frame exceeded ${maximumFrameBytes} bytes`)
248
+ });
249
+ resynchronizing = true;
250
+ continue;
251
+ }
252
+ bodyLength = length;
253
+ }
254
+ return events;
255
+ }
256
+ };
257
+ };
258
+ const asMessage = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
259
+ const frame = (message) => {
260
+ const body = new TextEncoder().encode(JSON.stringify(message));
261
+ const header = new TextEncoder().encode(`Content-Length: ${body.byteLength}\r
262
+ \r
263
+ `);
264
+ return concatenate(header, body);
265
+ };
266
+ const firstCallHierarchyItem = (value) => Array.isArray(value) ? value[0] : void 0;
267
+ const isFile = (path) => {
268
+ try {
269
+ return NodeFs.statSync(path, { throwIfNoEntry: false })?.isFile() === true;
270
+ } catch {
271
+ return false;
272
+ }
273
+ };
274
+ const exists = (path) => {
275
+ try {
276
+ return NodeFs.statSync(path, { throwIfNoEntry: false }) !== void 0;
277
+ } catch {
278
+ return false;
279
+ }
280
+ };
281
+ const realPath = (path) => {
282
+ try {
283
+ return NodeFs.realpathSync(path);
284
+ } catch {
285
+ return NodePath.resolve(path);
286
+ }
287
+ };
288
+ const isWithin = (root, path) => {
289
+ const relative = NodePath.relative(root, path);
290
+ return relative === "" || relative !== ".." && !relative.startsWith(`..${NodePath.sep}`) && !NodePath.isAbsolute(relative);
291
+ };
292
+ const resolveCommand = (command, cwd, path) => {
293
+ if (command.includes("/") || command.includes(NodePath.sep)) {
294
+ const candidate = NodePath.resolve(cwd, command);
295
+ return isFile(candidate) ? candidate : void 0;
296
+ }
297
+ for (const entry of (path ?? "").split(NodePath.delimiter)) {
298
+ const candidate = NodePath.resolve(cwd, entry, command);
299
+ if (!isFile(candidate)) continue;
300
+ try {
301
+ NodeFs.accessSync(candidate, NodeFs.constants.X_OK);
302
+ return candidate;
303
+ } catch {
304
+ continue;
305
+ }
306
+ }
307
+ return void 0;
308
+ };
309
+ const LAUNCHERS = /* @__PURE__ */ new Set([
310
+ "sh",
311
+ "bash",
312
+ "zsh",
313
+ "dash",
314
+ "ksh",
315
+ "fish",
316
+ "csh",
317
+ "tcsh",
318
+ "env",
319
+ "npx",
320
+ "pnpx",
321
+ "npm",
322
+ "pnpm",
323
+ "yarn",
324
+ "bunx",
325
+ "deno",
326
+ "cmd",
327
+ "powershell",
328
+ "pwsh"
329
+ ]);
330
+ const CODE_FLAGS = /* @__PURE__ */ new Set(["-e", "--eval", "-p", "--print", "-r", "--require", "--import", "--loader"]);
331
+ const launcher = (config) => {
332
+ const name = NodePath.basename(config.command).toLowerCase().replace(/\.(?:exe|cmd|bat|ps1)$/, "");
333
+ if (LAUNCHERS.has(name)) return name;
334
+ if (name !== "node" && name !== "bun" && name !== "nodejs") return void 0;
335
+ const args = config.args ?? [];
336
+ if (name === "bun" && ["x", "run", "exec"].includes(args[0] ?? "")) return `bun ${args[0]}`;
337
+ const flag = args.find((argument) => CODE_FLAGS.has(argument.split("=")[0]) || argument === "--experimental-loader");
338
+ return flag === void 0 ? void 0 : `${name} ${flag.split("=")[0]}`;
339
+ };
340
+ const workspaceProgram = (config, path) => {
341
+ const launching = launcher(config);
342
+ if (launching !== void 0) {
343
+ return failure(
344
+ "permission_denied",
345
+ `Language server command runs ${launching}, which executes a program its arguments or the workspace choose; name the server's own host binary instead`
346
+ );
347
+ }
348
+ const lexicalRoot = NodePath.resolve(config.cwd);
349
+ const realRoot = realPath(lexicalRoot);
350
+ const inWorkspace = (file) => isWithin(lexicalRoot, file) || isWithin(realRoot, file) || isWithin(realRoot, realPath(file)) || isWithin(lexicalRoot, realPath(file));
351
+ const program = resolveCommand(config.command, lexicalRoot, path);
352
+ if (program !== void 0 && inWorkspace(program)) {
353
+ return failure(
354
+ "permission_denied",
355
+ `Language server program ${program} is inside the workspace ${lexicalRoot}; run a host copy instead`
356
+ );
357
+ }
358
+ for (const argument of config.args ?? []) {
359
+ for (const value of [argument, argument.slice(argument.indexOf("=") + 1)]) {
360
+ if (value === "") continue;
361
+ const candidate = NodePath.resolve(lexicalRoot, value);
362
+ if (exists(candidate) && inWorkspace(candidate)) {
363
+ return failure(
364
+ "permission_denied",
365
+ `Language server argument names ${candidate}, a path inside the workspace ${lexicalRoot}`
366
+ );
367
+ }
368
+ }
369
+ }
370
+ return void 0;
371
+ };
372
+ const digestOf = (text) => (0, import_node_crypto.createHash)("sha256").update(text).digest("hex");
373
+ const makeClient = (config) => import_effect.Effect.gen(function* () {
374
+ const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
375
+ const timeoutMs = config.timeoutMs ?? 3e4;
376
+ const settleMs = config.settleMs ?? DEFAULT_SETTLE_MS;
377
+ const quietMs = config.quietMs ?? DEFAULT_QUIET_MS;
378
+ const env = ChildProcessEnvironment.make(process.env, config.environment);
379
+ const refused = yield* import_effect.Effect.sync(() => workspaceProgram(config, env.PATH));
380
+ if (refused !== void 0) return yield* import_effect.Effect.fail(refused);
381
+ const input = yield* import_effect.Queue.bounded(MAX_QUEUED_FRAMES);
382
+ const handle = yield* spawner.spawn(
383
+ ChildProcess.make(config.command, config.args ?? [], {
384
+ cwd: config.cwd,
385
+ env,
386
+ extendEnv: false,
387
+ stdin: { stream: import_effect.Stream.fromQueue(input), endOnDone: false }
388
+ })
389
+ ).pipe(
390
+ import_effect.Effect.mapError(
391
+ (error) => failure("provider_unavailable", `Language server process could not be started: ${error.message}`)
392
+ )
393
+ );
394
+ const pending = /* @__PURE__ */ new Map();
395
+ const decoder = makeFrameDecoder();
396
+ let nextId = 1;
397
+ let terminalError;
398
+ const maximumStderrBytes = 64 * 1024;
399
+ let stderrTail = new Uint8Array(0);
400
+ const stderrFiber = yield* handle.stderr.pipe(
401
+ import_effect.Stream.runForEach(
402
+ (chunk) => import_effect.Effect.sync(() => {
403
+ stderrTail = chunk.byteLength >= maximumStderrBytes ? chunk.slice(-maximumStderrBytes) : concatenate(
404
+ stderrTail.slice(Math.max(0, stderrTail.byteLength + chunk.byteLength - maximumStderrBytes)),
405
+ chunk
406
+ );
407
+ })
408
+ ),
409
+ import_effect.Effect.catch((cause) => import_effect.Effect.logWarning("Language server stderr stream failed", cause)),
410
+ import_effect.Effect.forkScoped({ startImmediately: true })
411
+ );
412
+ const stderr = () => {
413
+ let start = 0;
414
+ while (start < stderrTail.byteLength && start < 3 && (stderrTail[start] & 192) === 128) start++;
415
+ return new TextDecoder().decode(stderrTail.subarray(start));
416
+ };
417
+ const failPending = (error) => import_effect.Effect.flatMap(
418
+ import_effect.Effect.sync(() => {
419
+ const deferreds = [...pending.values()];
420
+ pending.clear();
421
+ return deferreds;
422
+ }),
423
+ (deferreds) => import_effect.Effect.forEach(deferreds, (deferred) => import_effect.Deferred.fail(deferred, error), { discard: true })
424
+ );
425
+ const failRequest = (id, error) => {
426
+ const deferred = pending.get(id);
427
+ if (deferred === void 0) return import_effect.Effect.void;
428
+ pending.delete(id);
429
+ return import_effect.Deferred.fail(deferred, error).pipe(import_effect.Effect.asVoid);
430
+ };
431
+ const closeWith = (error) => import_effect.Effect.gen(function* () {
432
+ yield* import_effect.Fiber.await(stderrFiber).pipe(import_effect.Effect.timeoutOption(100));
433
+ terminalError ??= error;
434
+ yield* failPending(terminalError);
435
+ });
436
+ const uriOf = (path) => (0, import_node_url.pathToFileURL)(NodePath.resolve(config.cwd, path)).href;
437
+ const documents = /* @__PURE__ */ new Map();
438
+ const versions = /* @__PURE__ */ new Map();
439
+ const published = /* @__PURE__ */ new Map();
440
+ const listeners = /* @__PURE__ */ new Map();
441
+ let publishSequence = 0;
442
+ let pullUnsupported = false;
443
+ let pullSupported = false;
444
+ let versionedPublishes = false;
445
+ let barrierAnswered = true;
446
+ const publish = (params) => {
447
+ const notification = asMessage(params);
448
+ if (typeof notification?.uri !== "string" || !Array.isArray(notification.diagnostics)) return import_effect.Effect.void;
449
+ const uri = notification.uri;
450
+ const version = typeof notification.version === "number" ? notification.version : void 0;
451
+ if (version !== void 0) versionedPublishes = true;
452
+ const previous = published.get(uri)?.version;
453
+ if (version !== void 0 && previous !== void 0 && version < previous) return import_effect.Effect.void;
454
+ published.set(uri, {
455
+ version,
456
+ sequence: ++publishSequence,
457
+ diagnostics: notification.diagnostics
458
+ });
459
+ const waiting = listeners.get(uri);
460
+ if (waiting === void 0) return import_effect.Effect.void;
461
+ listeners.delete(uri);
462
+ return import_effect.Effect.forEach(waiting, (listener) => import_effect.Deferred.succeed(listener, void 0), { discard: true });
463
+ };
464
+ const receive = (value) => {
465
+ const message = asMessage(value);
466
+ if (message?.method === "textDocument/publishDiagnostics") return publish(message.params);
467
+ if (message === void 0 || typeof message.id !== "number") return import_effect.Effect.void;
468
+ const deferred = pending.get(message.id);
469
+ if (deferred === void 0) return import_effect.Effect.void;
470
+ pending.delete(message.id);
471
+ if (message.error === void 0) return import_effect.Deferred.succeed(deferred, message.result);
472
+ const error = asMessage(message.error);
473
+ return import_effect.Deferred.fail(
474
+ deferred,
475
+ new StdError.StdError({
476
+ code: "request_failed",
477
+ message: typeof error?.message === "string" ? error.message : "Language server returned a JSON-RPC error",
478
+ ...typeof error?.code === "number" && typeof error.message === "string" ? {
479
+ rpcError: {
480
+ code: error.code,
481
+ message: error.message,
482
+ ...error.data === void 0 ? {} : { data: error.data }
483
+ }
484
+ } : {}
485
+ })
486
+ );
487
+ };
488
+ const receiveFrame = (event) => event._tag === "Message" ? receive(event.value) : event.id === void 0 ? failPending(event.error) : failRequest(event.id, event.error);
489
+ yield* handle.stdout.pipe(
490
+ import_effect.Stream.runForEach((chunk) => import_effect.Effect.forEach(decoder.push(chunk), receiveFrame, { discard: true })),
491
+ import_effect.Effect.matchEffect({
492
+ onFailure: () => closeWith(failure("request_failed", "Language server output stream failed")),
493
+ onSuccess: () => closeWith(failure("request_failed", "Language server output stream closed"))
494
+ }),
495
+ import_effect.Effect.forkScoped({ startImmediately: true })
496
+ );
497
+ yield* handle.exitCode.pipe(
498
+ import_effect.Effect.flatMap(
499
+ (exitCode) => closeWith(failure("request_failed", `Language server process exited with code ${exitCode}`))
500
+ ),
501
+ import_effect.Effect.catch(() => closeWith(failure("request_failed", "Language server process exited"))),
502
+ import_effect.Effect.forkScoped({ startImmediately: true })
503
+ );
504
+ const send = (message) => import_effect.Effect.suspend(
505
+ () => terminalError === void 0 ? import_effect.Queue.offer(input, frame(message)).pipe(
506
+ import_effect.Effect.asVoid,
507
+ import_effect.Effect.timeout(timeoutMs),
508
+ import_effect.Effect.mapError(
509
+ () => failure(
510
+ "timeout",
511
+ `Language server stdin is not being drained; frame offer exceeded ${timeoutMs}ms`
512
+ )
513
+ )
514
+ ) : import_effect.Effect.fail(terminalError)
515
+ );
516
+ const request = (method, params) => import_effect.Effect.gen(function* () {
517
+ const deferred = yield* import_effect.Deferred.make();
518
+ const registered = yield* import_effect.Effect.sync(() => {
519
+ if (terminalError !== void 0) return terminalError;
520
+ if (pending.size >= MAX_PENDING_REQUESTS) {
521
+ return failure(
522
+ "request_failed",
523
+ `Language server reached the ${MAX_PENDING_REQUESTS} pending-request cap`
524
+ );
525
+ }
526
+ const id2 = nextId++;
527
+ pending.set(id2, deferred);
528
+ return id2;
529
+ });
530
+ if (registered instanceof StdError.StdError) return yield* import_effect.Effect.fail(registered);
531
+ const id = registered;
532
+ return yield* import_effect.Effect.gen(function* () {
533
+ yield* send({ jsonrpc: "2.0", id, method, params });
534
+ return yield* import_effect.Deferred.await(deferred).pipe(
535
+ import_effect.Effect.timeout(timeoutMs),
536
+ import_effect.Effect.mapError(
537
+ (cause) => cause instanceof StdError.StdError ? cause : failure("timeout", `Language server request timed out: ${method}`)
538
+ )
539
+ );
540
+ }).pipe(
541
+ import_effect.Effect.ensuring(
542
+ import_effect.Effect.sync(() => {
543
+ pending.delete(id);
544
+ })
545
+ )
546
+ );
547
+ }).pipe(import_effect.Effect.mapError(
548
+ (error) => new StdError.StdError({
549
+ ...error,
550
+ method,
551
+ message: error.rpcError === void 0 ? error.message : `${method}: ${error.message}`,
552
+ ...stderrTail.byteLength === 0 ? {} : { stderr: stderr() }
553
+ })
554
+ ));
555
+ const notify = (method, params) => send({ jsonrpc: "2.0", method, params });
556
+ yield* request("initialize", {
557
+ processId: null,
558
+ rootUri: (0, import_node_url.pathToFileURL)(config.cwd).href,
559
+ capabilities: {
560
+ textDocument: {
561
+ synchronization: { dynamicRegistration: false },
562
+ publishDiagnostics: { versionSupport: true },
563
+ diagnostic: { dynamicRegistration: false }
564
+ }
565
+ },
566
+ ...config.initializationOptions === void 0 ? {} : { initializationOptions: config.initializationOptions }
567
+ });
568
+ yield* notify("initialized", {});
569
+ const positionParams = (position) => ({
570
+ textDocument: { uri: uriOf(position.path) },
571
+ position: { line: position.line, character: position.character }
572
+ });
573
+ const barrier = import_effect.Effect.suspend(
574
+ () => pullSupported || versionedPublishes || !barrierAnswered ? import_effect.Effect.void : request(BARRIER_METHOD, null).pipe(
575
+ import_effect.Effect.timeoutOption(Math.min(BARRIER_TIMEOUT_MS, timeoutMs)),
576
+ import_effect.Effect.flatMap(
577
+ (answer) => import_effect.Effect.sync(() => {
578
+ if (import_effect.Option.isNone(answer)) barrierAnswered = false;
579
+ })
580
+ ),
581
+ // The answer is MethodNotFound; any answer drains what came before it.
582
+ import_effect.Effect.ignore
583
+ )
584
+ );
585
+ const syncLock = yield* import_effect.Semaphore.make(1);
586
+ const sync = (path, text) => syncLock.withPermit(import_effect.Effect.andThen(barrier, () => {
587
+ const uri = uriOf(path);
588
+ const open = documents.get(uri);
589
+ const version = (versions.get(uri) ?? 0) + 1;
590
+ const sentAt = publishSequence;
591
+ const message = open === void 0 ? notify("textDocument/didOpen", {
592
+ textDocument: { uri, languageId: languageId(path), version, text }
593
+ }) : notify("textDocument/didChange", { textDocument: { uri, version }, contentChanges: [{ text }] });
594
+ return message.pipe(
595
+ import_effect.Effect.tap(
596
+ () => import_effect.Effect.sync(() => {
597
+ versions.set(uri, version);
598
+ documents.set(uri, { version, sentAt, digest: digestOf(text) });
599
+ })
600
+ )
601
+ );
602
+ }));
603
+ const closeUri = (uri) => import_effect.Effect.suspend(() => {
604
+ if (!documents.has(uri)) return import_effect.Effect.void;
605
+ documents.delete(uri);
606
+ published.delete(uri);
607
+ return notify("textDocument/didClose", { textDocument: { uri } });
608
+ });
609
+ const close = (path) => syncLock.withPermit(closeUri(uriOf(path)));
610
+ const refresh = import_effect.Effect.suspend(
611
+ () => import_effect.Effect.forEach([...documents], ([uri, open]) => {
612
+ const path = (0, import_node_url.fileURLToPath)(uri);
613
+ let text;
614
+ try {
615
+ text = NodeFs.readFileSync(path, "utf8");
616
+ } catch {
617
+ text = void 0;
618
+ }
619
+ if (text === void 0) return syncLock.withPermit(closeUri(uri));
620
+ return digestOf(text) === open.digest ? import_effect.Effect.void : sync(path, text);
621
+ }, { discard: true })
622
+ );
623
+ const current = (uri) => {
624
+ const entry = published.get(uri);
625
+ const open = documents.get(uri);
626
+ if (entry === void 0 || open === void 0) return void 0;
627
+ const fresh = entry.version === void 0 ? entry.sequence > open.sentAt : entry.version >= open.version;
628
+ return fresh ? entry : void 0;
629
+ };
630
+ const awaitPublished = (uri, after = 0) => import_effect.Effect.suspend(() => {
631
+ const entry = current(uri);
632
+ if (entry !== void 0 && entry.sequence > after) return import_effect.Effect.succeed(entry);
633
+ return import_effect.Effect.flatMap(import_effect.Deferred.make(), (listener) => {
634
+ const waiting = listeners.get(uri) ?? /* @__PURE__ */ new Set();
635
+ waiting.add(listener);
636
+ listeners.set(uri, waiting);
637
+ return import_effect.Deferred.await(listener).pipe(
638
+ import_effect.Effect.ensuring(import_effect.Effect.sync(() => {
639
+ listeners.get(uri)?.delete(listener);
640
+ })),
641
+ import_effect.Effect.flatMap(() => awaitPublished(uri, after))
642
+ );
643
+ });
644
+ });
645
+ const pushedDiagnostics = (path) => import_effect.Effect.gen(function* () {
646
+ const uri = uriOf(path);
647
+ if (!documents.has(uri)) {
648
+ const text = yield* import_effect.Effect.try({
649
+ try: () => NodeFs.readFileSync(NodePath.resolve(config.cwd, path), "utf8"),
650
+ catch: () => new StdError.StdError({ code: "not_found", message: `File not found: ${path}`, path })
651
+ });
652
+ yield* sync(path, text);
653
+ }
654
+ const started = yield* import_effect.Clock.currentTimeMillis;
655
+ const entry = yield* awaitPublished(uri).pipe(import_effect.Effect.timeoutOption(settleMs));
656
+ if (import_effect.Option.isNone(entry)) {
657
+ return yield* import_effect.Effect.fail(
658
+ new StdError.StdError({
659
+ code: "timeout",
660
+ message: `Language server published no diagnostics for ${path} within ${settleMs}ms`,
661
+ method: "textDocument/publishDiagnostics",
662
+ path
663
+ })
664
+ );
665
+ }
666
+ let latest = entry.value;
667
+ for (; ; ) {
668
+ const remaining = settleMs - ((yield* import_effect.Clock.currentTimeMillis) - started);
669
+ if (remaining <= 0) break;
670
+ const next = yield* awaitPublished(uri, latest.sequence).pipe(
671
+ import_effect.Effect.timeoutOption(Math.min(quietMs, remaining))
672
+ );
673
+ if (import_effect.Option.isNone(next)) break;
674
+ latest = next.value;
675
+ }
676
+ return { kind: "full", items: latest.diagnostics };
677
+ });
678
+ const diagnostics = (path) => pullUnsupported ? pushedDiagnostics(path) : request("textDocument/diagnostic", { textDocument: { uri: uriOf(path) } }).pipe(
679
+ import_effect.Effect.tap(
680
+ () => import_effect.Effect.sync(() => {
681
+ pullSupported = true;
682
+ })
683
+ ),
684
+ import_effect.Effect.catchIf(
685
+ (error) => error.rpcError?.code === METHOD_NOT_FOUND,
686
+ () => {
687
+ pullUnsupported = true;
688
+ return pushedDiagnostics(path);
689
+ }
690
+ )
691
+ );
692
+ const prepareCallHierarchy = (position) => request("textDocument/prepareCallHierarchy", positionParams(position));
693
+ const callHierarchy = (method, position) => prepareCallHierarchy(position).pipe(
694
+ import_effect.Effect.flatMap((prepared) => {
695
+ const item = firstCallHierarchyItem(prepared);
696
+ return item === void 0 ? import_effect.Effect.succeed([]) : request(method, { item });
697
+ })
698
+ );
699
+ return LanguageServer.make({
700
+ hover: (position) => request("textDocument/hover", positionParams(position)),
701
+ definition: (position) => request("textDocument/definition", positionParams(position)),
702
+ references: (position) => request("textDocument/references", {
703
+ ...positionParams(position),
704
+ context: { includeDeclaration: true }
705
+ }),
706
+ implementation: (position) => request("textDocument/implementation", positionParams(position)),
707
+ documentSymbols: (path) => request("textDocument/documentSymbol", { textDocument: { uri: uriOf(path) } }),
708
+ workspaceSymbols: (query) => request("workspace/symbol", { query }),
709
+ prepareCallHierarchy,
710
+ callHierarchyIncoming: (position) => callHierarchy("callHierarchy/incomingCalls", position),
711
+ callHierarchyOutgoing: (position) => callHierarchy("callHierarchy/outgoingCalls", position),
712
+ diagnostics,
713
+ sync,
714
+ close,
715
+ refresh
716
+ });
717
+ });
718
+ const normalizeExtension = (extension) => (extension.startsWith(".") ? extension : `.${extension}`).toLowerCase();
719
+ const routed = (configs, client, started) => {
720
+ const claims = configs.map((entry) => entry.extensions?.map(normalizeExtension));
721
+ const fallback = claims.findIndex((claimed) => claimed === void 0);
722
+ const indexOf = (path) => {
723
+ const extension = extensionOf(path);
724
+ const claimed = claims.findIndex((entry) => entry?.includes(extension) === true);
725
+ const index = claimed >= 0 ? claimed : fallback;
726
+ return index >= 0 ? import_effect.Effect.succeed(index) : import_effect.Effect.fail(
727
+ new StdError.StdError({
728
+ code: "unsupported",
729
+ message: `No language server is configured for ${extension || "extensionless"} files`,
730
+ path
731
+ })
732
+ );
733
+ };
734
+ const route = (path) => import_effect.Effect.flatMap(indexOf(path), client);
735
+ const byPosition = (method) => (position) => import_effect.Effect.flatMap(route(position.path), (server) => server[method](position));
736
+ const indices = configs.map((_, index) => index);
737
+ return LanguageServer.make({
738
+ hover: byPosition("hover"),
739
+ definition: byPosition("definition"),
740
+ references: byPosition("references"),
741
+ implementation: byPosition("implementation"),
742
+ prepareCallHierarchy: byPosition("prepareCallHierarchy"),
743
+ callHierarchyIncoming: byPosition("callHierarchyIncoming"),
744
+ callHierarchyOutgoing: byPosition("callHierarchyOutgoing"),
745
+ documentSymbols: (path) => import_effect.Effect.flatMap(route(path), (server) => server.documentSymbols(path)),
746
+ diagnostics: (path) => import_effect.Effect.flatMap(route(path), (server) => server.diagnostics(path)),
747
+ sync: (path, text) => import_effect.Effect.flatMap(route(path), (server) => server.sync(path, text)),
748
+ // A server that never started holds no open file.
749
+ close: (path) => import_effect.Effect.flatMap(indexOf(path), (index) => started(index)?.close(path) ?? import_effect.Effect.void),
750
+ refresh: import_effect.Effect.suspend(
751
+ () => import_effect.Effect.forEach(indices, (index) => started(index)?.refresh ?? import_effect.Effect.void, { discard: true })
752
+ ),
753
+ workspaceSymbols: (query) => configs.length === 1 ? import_effect.Effect.flatMap(client(0), (server) => server.workspaceSymbols(query)) : import_effect.Effect.forEach(
754
+ indices,
755
+ (index) => import_effect.Effect.flatMap(client(index), (server) => server.workspaceSymbols(query)),
756
+ { concurrency: "unbounded" }
757
+ ).pipe(
758
+ import_effect.Effect.map(
759
+ (answers) => answers.flatMap((answer) => Array.isArray(answer) ? answer : answer == null ? [] : [answer])
760
+ )
761
+ )
762
+ });
763
+ };
764
+ const configList = (config) => {
765
+ const configs = Array.isArray(config) ? config : [config];
766
+ return configs.length === 0 ? import_effect.Effect.fail(failure("invalid_input", "At least one language server must be configured")) : import_effect.Effect.succeed(configs);
767
+ };
768
+ const make = (config) => import_effect.Effect.gen(function* () {
769
+ const configs = yield* configList(config);
770
+ const clients = yield* import_effect.Effect.forEach(configs, makeClient);
771
+ return routed(configs, (index) => import_effect.Effect.succeed(clients[index]), (index) => clients[index]);
772
+ });
773
+ const makeLazy = (config) => import_effect.Effect.gen(function* () {
774
+ const configs = yield* configList(config);
775
+ for (const entry of configs) {
776
+ const refused = workspaceProgram(entry, ChildProcessEnvironment.make(process.env, entry.environment).PATH);
777
+ if (refused !== void 0) return yield* import_effect.Effect.fail(refused);
778
+ }
779
+ const clients = configs.map(() => void 0);
780
+ const starts = yield* import_effect.Effect.forEach(configs, (entry, index) => import_effect.Effect.gen(function* () {
781
+ const wanted = yield* import_effect.Deferred.make();
782
+ const ready = yield* import_effect.Deferred.make();
783
+ yield* import_effect.Deferred.await(wanted).pipe(
784
+ import_effect.Effect.andThen(makeClient(entry)),
785
+ import_effect.Effect.tap((client) => import_effect.Effect.sync(() => void (clients[index] = client))),
786
+ import_effect.Effect.exit,
787
+ import_effect.Effect.flatMap((exit) => import_effect.Deferred.done(ready, exit)),
788
+ import_effect.Effect.forkScoped({ startImmediately: true })
789
+ );
790
+ return import_effect.Deferred.succeed(wanted, void 0).pipe(import_effect.Effect.andThen(import_effect.Deferred.await(ready)));
791
+ }));
792
+ return routed(configs, (index) => starts[index], (index) => clients[index]);
793
+ });
794
+ const layer = (config) => import_effect.Layer.effect(LanguageServer.LanguageServer, make(config));
795
+ const layerLazy = (config) => import_effect.Layer.effect(LanguageServer.LanguageServer, makeLazy(config));
796
+ //# sourceMappingURL=NodeLanguageServer.js.map