@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,120 @@
1
+ /**
2
+ * HTTP POST flow declaration and portable handler.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+
7
+ import * as Effect from "effect/Effect"
8
+ import * as Schema from "effect/Schema"
9
+ import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest"
10
+ import { capability, envelope } from "./internal/Declaration.ts"
11
+ import { execute, Response, Timeout } from "./internal/Http.ts"
12
+
13
+ /**
14
+ * Registry name for the http-post flow.
15
+ *
16
+ * @category identifiers
17
+ * @since 1.0.0
18
+ */
19
+ export const name = "http-post"
20
+
21
+ /**
22
+ * Model-facing description of the http-post flow.
23
+ *
24
+ * @category descriptions
25
+ * @since 1.0.0
26
+ */
27
+ export const description =
28
+ "Post a text body to an absolute URL and return the response; this is irreversible because the remote side may already have acted."
29
+
30
+ /**
31
+ * Input schema for the http-post flow.
32
+ *
33
+ * @category schemas
34
+ * @since 1.0.0
35
+ */
36
+ export const Input = Schema.Struct({
37
+ url: Schema.String.annotate({ description: "Absolute http or https URL to post to" }),
38
+ body: Schema.String.annotate({ description: "Request body sent verbatim" }),
39
+ contentType: Schema.optional(Schema.String).annotate({
40
+ description: "Request content type; defaults to application/json"
41
+ }),
42
+ headers: Schema.optional(Schema.Record(Schema.String, Schema.String)).annotate({
43
+ description: "Additional request headers"
44
+ }),
45
+ timeout: Schema.optional(Timeout).annotate({
46
+ description: "Total request and response body timeout in seconds; defaults to 30, capped at 120"
47
+ })
48
+ })
49
+
50
+ /**
51
+ * Decoded input accepted by the `http-post` flow.
52
+ *
53
+ * @category models
54
+ * @since 1.0.0
55
+ */
56
+ export type Input = typeof Input.Type
57
+
58
+ /**
59
+ * Output schema for the http-post flow.
60
+ *
61
+ * @category schemas
62
+ * @since 1.0.0
63
+ */
64
+ export const Output = Response
65
+
66
+ /**
67
+ * Decoded output returned by the `http-post` flow.
68
+ *
69
+ * @category models
70
+ * @since 1.0.0
71
+ */
72
+ export type Output = typeof Output.Type
73
+
74
+ /**
75
+ * Static effect envelope for the http-post flow.
76
+ *
77
+ * @category effects
78
+ * @since 1.0.0
79
+ */
80
+ export const effects = envelope({ tier: "irreversible", mode: "expected", reads: [], writes: [] })
81
+
82
+ /**
83
+ * Narrows the http-post effect envelope for one decoded input.
84
+ *
85
+ * Network reach is expressed as a capability rather than a path envelope, so
86
+ * a post has nothing left to narrow.
87
+ *
88
+ * @category effects
89
+ * @since 1.0.0
90
+ */
91
+ export const effectsFor = (_input: typeof Input.Type) => effects
92
+
93
+ /**
94
+ * Capabilities required by the http-post flow.
95
+ *
96
+ * @category capabilities
97
+ * @since 1.0.0
98
+ */
99
+ export const capabilities = [capability("net:post", "*")]
100
+
101
+ /**
102
+ * Declaration-only http-post flow.
103
+ *
104
+ * @category flows
105
+ * @since 1.0.0
106
+ */
107
+ export const flow = { name, description, input: Input, output: Output, capabilities, effects } as const
108
+
109
+ /**
110
+ * Posts a body through the permission-aware kernel HTTP client.
111
+ *
112
+ * @category handlers
113
+ * @since 1.0.0
114
+ */
115
+ export const run = Effect.fn("HttpPost.run")((input: Input) =>
116
+ execute(input, (url) =>
117
+ HttpClientRequest.post(url).pipe(
118
+ HttpClientRequest.bodyText(input.body, input.contentType ?? "application/json")
119
+ ))
120
+ )
@@ -0,0 +1,110 @@
1
+ /**
2
+ * The code-intelligence seam behind the `lsp` flow.
3
+ *
4
+ * A host binds {@link LanguageServer} to a client such as
5
+ * `NodeLanguageServer.layer`. Every method answers one language-server request
6
+ * with the server's own result; {@link layerNoop} answers every request with
7
+ * `unsupported`, for a host that runs no server.
8
+ *
9
+ * @since 1.0.0
10
+ */
11
+
12
+ import { Context, Effect, Layer } from "effect"
13
+ import * as StdError from "./StdError.ts"
14
+
15
+ /**
16
+ * A point in a file, addressed the way a language server addresses it.
17
+ *
18
+ * @category models
19
+ * @since 1.0.0
20
+ */
21
+ export interface Position {
22
+ readonly path: string
23
+ readonly line: number
24
+ readonly character: number
25
+ }
26
+ /**
27
+ * The code-intelligence seam. Every method answers one language-server
28
+ * request and reports an unavailable server as a typed failure.
29
+ *
30
+ * @category models
31
+ * @since 1.0.0
32
+ */
33
+ export interface LanguageServer {
34
+ readonly hover: (position: Position) => Effect.Effect<unknown, StdError.StdError>
35
+ readonly definition: (position: Position) => Effect.Effect<unknown, StdError.StdError>
36
+ readonly references: (position: Position) => Effect.Effect<unknown, StdError.StdError>
37
+ readonly implementation: (position: Position) => Effect.Effect<unknown, StdError.StdError>
38
+ readonly documentSymbols: (path: string) => Effect.Effect<unknown, StdError.StdError>
39
+ readonly workspaceSymbols: (query: string) => Effect.Effect<unknown, StdError.StdError>
40
+ readonly prepareCallHierarchy: (position: Position) => Effect.Effect<unknown, StdError.StdError>
41
+ readonly callHierarchyIncoming: (position: Position) => Effect.Effect<unknown, StdError.StdError>
42
+ readonly callHierarchyOutgoing: (position: Position) => Effect.Effect<unknown, StdError.StdError>
43
+ /**
44
+ * The file's diagnostics as a document report, `{ kind: "full", items }`.
45
+ * A server without pull diagnostics answers with what it last published for
46
+ * the latest synced text.
47
+ */
48
+ readonly diagnostics: (path: string) => Effect.Effect<unknown, StdError.StdError>
49
+ /**
50
+ * Tells the server a file now holds `text`: opens it on first sync and sends
51
+ * the full new text on every later one.
52
+ */
53
+ readonly sync: (path: string, text: string) => Effect.Effect<void, StdError.StdError>
54
+ /** Tells the server a synced file is gone; a file never synced is a no-op. */
55
+ readonly close: (path: string) => Effect.Effect<void, StdError.StdError>
56
+ /**
57
+ * Re-reads every synced file from disk: sends the text of each that changed
58
+ * and closes each that is gone, so a file something else changed is not
59
+ * left stale on the server.
60
+ */
61
+ readonly refresh: Effect.Effect<void, StdError.StdError>
62
+ }
63
+ /**
64
+ * The {@link LanguageServer} service tag.
65
+ *
66
+ * @category services
67
+ * @since 1.0.0
68
+ */
69
+ export const LanguageServer: Context.Service<LanguageServer, LanguageServer> = Context.Service(
70
+ "@smthrs/std/LanguageServer"
71
+ )
72
+ /**
73
+ * Builds a {@link LanguageServer} from an implementation of its methods.
74
+ *
75
+ * @category constructors
76
+ * @since 1.0.0
77
+ */
78
+ export const make = (service: LanguageServer): LanguageServer => LanguageServer.of(service)
79
+ const unsupported = (): Effect.Effect<never, StdError.StdError> =>
80
+ Effect.fail(new StdError.StdError({ code: "unsupported", message: "Language server support is unavailable" }))
81
+ /**
82
+ * A {@link LanguageServer} that reports `unsupported` for every request,
83
+ * for an environment with no server configured.
84
+ *
85
+ * @category constructors
86
+ * @since 1.0.0
87
+ */
88
+ export const makeNoop = (): LanguageServer =>
89
+ make({
90
+ hover: unsupported,
91
+ definition: unsupported,
92
+ references: unsupported,
93
+ implementation: unsupported,
94
+ documentSymbols: unsupported,
95
+ workspaceSymbols: unsupported,
96
+ prepareCallHierarchy: unsupported,
97
+ callHierarchyIncoming: unsupported,
98
+ callHierarchyOutgoing: unsupported,
99
+ diagnostics: unsupported,
100
+ sync: unsupported,
101
+ close: unsupported,
102
+ refresh: unsupported()
103
+ })
104
+ /**
105
+ * Provides {@link makeNoop}.
106
+ *
107
+ * @category layers
108
+ * @since 1.0.0
109
+ */
110
+ export const layerNoop: Layer.Layer<LanguageServer> = Layer.succeed(LanguageServer, makeNoop())
package/src/Ls.ts ADDED
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Directory listing flow declaration and portable handler.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+
7
+ import * as Path from "@smthrs/kernel/Path"
8
+ import * as Effect from "effect/Effect"
9
+ import * as FileSystem from "effect/FileSystem"
10
+ import * as Schema from "effect/Schema"
11
+ import { capability, envelope } from "./internal/Declaration.ts"
12
+ import * as FsFailure from "./internal/FsFailure.ts"
13
+ import { DEFAULT_READ_LIMIT, MAX_ENTRIES, notice } from "./internal/Text.ts"
14
+ import * as StdError from "./StdError.ts"
15
+
16
+ /**
17
+ * The registry name of the `ls` flow.
18
+ *
19
+ * @category identifiers
20
+ * @since 1.0.0
21
+ */
22
+ export const name = "ls"
23
+
24
+ /**
25
+ * The one-line description the model sees for the `ls` flow.
26
+ *
27
+ * @category descriptions
28
+ * @since 1.0.0
29
+ */
30
+ export const description =
31
+ "List a directory with directories first, trailing /, and locale-independent UTF-16 code-unit ordering; use 1-based offset and limit to page large listings."
32
+
33
+ /**
34
+ * What the `ls` flow accepts.
35
+ *
36
+ * @category schemas
37
+ * @since 1.0.0
38
+ */
39
+ export const Input = Schema.Struct({
40
+ path: Schema.String.annotate({ description: "Directory path to list" }),
41
+ offset: Schema.optional(Schema.Int.check(Schema.isGreaterThanOrEqualTo(1))).annotate({
42
+ description: "1-based entry offset"
43
+ }),
44
+ limit: Schema.optional(Schema.Int.check(Schema.isGreaterThanOrEqualTo(1))).annotate({
45
+ description: "Maximum entries to return"
46
+ })
47
+ })
48
+
49
+ /**
50
+ * Decoded input accepted by the `ls` flow.
51
+ *
52
+ * @category models
53
+ * @since 1.0.0
54
+ */
55
+ export type Input = typeof Input.Type
56
+
57
+ /**
58
+ * What the `ls` flow returns.
59
+ *
60
+ * @category schemas
61
+ * @since 1.0.0
62
+ */
63
+ export const Output = Schema.Struct({
64
+ entries: Schema.Array(Schema.Struct({
65
+ name: Schema.String.annotate({ description: "Entry name; directories end in /" }),
66
+ kind: Schema.Literals(["file", "directory"]).annotate({ description: "Entry kind" })
67
+ })),
68
+ total: Schema.Number.annotate({ description: "Total entries before paging" }),
69
+ truncated: Schema.Boolean.annotate({ description: "Whether more entries remain" }),
70
+ notice: Schema.optional(Schema.String.annotate({ description: "Truncation disclosure" }))
71
+ })
72
+
73
+ /**
74
+ * Decoded output returned by the `ls` flow.
75
+ *
76
+ * @category models
77
+ * @since 1.0.0
78
+ */
79
+ export type Output = typeof Output.Type
80
+
81
+ /**
82
+ * The declared effect envelope of the `ls` flow, before any input is known.
83
+ *
84
+ * @category effects
85
+ * @since 1.0.0
86
+ */
87
+ export const effects = envelope({ tier: "sealed", mode: "hermetic", reads: ["/**"], writes: [] })
88
+
89
+ /**
90
+ * Narrows {@link effects} to what this particular input actually touches.
91
+ *
92
+ * @category effects
93
+ * @since 1.0.0
94
+ */
95
+ export const effectsFor = (input: typeof Input.Type) =>
96
+ envelope({ tier: "sealed", mode: "hermetic", reads: [input.path], writes: [] })
97
+
98
+ /**
99
+ * The authority the `ls` flow requires.
100
+ *
101
+ * @category capabilities
102
+ * @since 1.0.0
103
+ */
104
+ export const capabilities = [capability("fs:read", "/**")]
105
+
106
+ /**
107
+ * The `ls` flow declaration: schemas, capabilities, and effects, with the
108
+ * implementation attached separately.
109
+ *
110
+ * @category flows
111
+ * @since 1.0.0
112
+ */
113
+ export const flow = { name, description, input: Input, output: Output, capabilities, effects } as const
114
+
115
+ /**
116
+ * What a call to this flow does, for a reader of a run.
117
+ *
118
+ * Display metadata only. `@smthrs/registry` `Descriptor.FlowActivity` is the
119
+ * governing vocabulary and `StandardFlows` binds this value onto the flow's
120
+ * descriptor, where the binding site checks it. `declarationDigest` excludes
121
+ * it, so declaring it cannot invalidate a call identity or a cached prompt.
122
+ *
123
+ * @category presentation
124
+ * @since 1.0.0-rc.0
125
+ */
126
+ export const activity = "reads" as const
127
+
128
+ /**
129
+ * How one recorded call to this flow reads: the verb for each settlement, the
130
+ * input field that is its subject, and the measured output fields a one-line
131
+ * summary may count.
132
+ *
133
+ * Display metadata only, governed by `@smthrs/registry`
134
+ * `Descriptor.CallPresentation` and checked where `StandardFlows` binds it.
135
+ *
136
+ * @category presentation
137
+ * @since 1.0.0-rc.0
138
+ */
139
+ export const presentation = {
140
+ verb: { pending: "listing", success: "listed", failure: "failed to list" },
141
+ subject: "path",
142
+ result: "entries"
143
+ } as const
144
+
145
+ // localeCompare changes with host locale and ICU data. Code-unit comparisons
146
+ // keep journalled directory listings identical on every host.
147
+ const byText = (left: string, right: string): number => (left < right ? -1 : Number(left > right))
148
+
149
+ /**
150
+ * Lists a directory deterministically. A file supplied as `path` is reported
151
+ * as `not_a_directory`.
152
+ *
153
+ * @category handlers
154
+ * @since 1.0.0
155
+ */
156
+ export const run = Effect.fn("Ls.run")(function*(
157
+ input: typeof Input.Type
158
+ ): Effect.fn.Return<typeof Output.Type, StdError.StdError, FileSystem.FileSystem | Path.Path> {
159
+ const fileSystem = yield* FileSystem.FileSystem
160
+ const path = yield* Path.Path
161
+ const info = yield* fileSystem.stat(input.path).pipe(
162
+ Effect.mapError(FsFailure.reading(input.path, `Directory not found: ${input.path}`))
163
+ )
164
+ if (info.type !== "Directory") {
165
+ return yield* Effect.fail(
166
+ new StdError.StdError({
167
+ code: "not_a_directory",
168
+ message: `Cannot list a file: ${input.path}`,
169
+ path: input.path
170
+ })
171
+ )
172
+ }
173
+ const names = yield* fileSystem.readDirectory(input.path).pipe(
174
+ Effect.mapError(FsFailure.reading(input.path, `Directory not found: ${input.path}`))
175
+ )
176
+ const sortedNames = [...names].sort(byText)
177
+ const offset = input.offset ?? 1
178
+ // An empty directory is not an out-of-range listing: the caller asked for
179
+ // the first page and there is nothing on it. This matches `read`, which
180
+ // answers an empty page for an empty file and refuses only a real overshoot.
181
+ if (offset > Math.max(sortedNames.length, 1)) {
182
+ return yield* Effect.fail(
183
+ new StdError.StdError({
184
+ code: "offset_out_of_range",
185
+ message: `Entry offset ${offset} is outside ${input.path}, which has ${sortedNames.length} entries`,
186
+ path: input.path
187
+ })
188
+ )
189
+ }
190
+ const limit = Math.min(input.limit ?? DEFAULT_READ_LIMIT, MAX_ENTRIES)
191
+ // Every entry is described before the page is cut, because the order the
192
+ // description promises is directories first and a kind is a stat away.
193
+ // Statting only the page and ordering inside it made the order local to the
194
+ // page: a directory `zdir/` beside a file `a.txt` came back as
195
+ // `[zdir/, a.txt]` unpaged and as `[a.txt]` then `[zdir/]` at `limit: 1`, so
196
+ // `offset` addressed a different listing at every page size and an agent
197
+ // paging a large directory could see one entry twice and another never.
198
+ //
199
+ // A per-entry stat can fail on a name the directory legitimately
200
+ // contains — a dangling symlink, or a file the guarded filesystem refuses
201
+ // to describe. The name is still real (readDirectory returned it), so the
202
+ // listing reports it as a plain entry instead of dying: one broken link in
203
+ // a repository root used to fail the whole `ls` and cost the agent a frame
204
+ // per attempt.
205
+ const described = yield* Effect.forEach(
206
+ sortedNames,
207
+ (entry) =>
208
+ fileSystem.stat(path.join(input.path, entry)).pipe(
209
+ Effect.map((entryInfo) => ({
210
+ name: entryInfo.type === "Directory" ? `${entry}/` : entry,
211
+ kind: entryInfo.type === "Directory" ? "directory" as const : "file" as const
212
+ })),
213
+ Effect.catch(() => Effect.succeed({ name: entry, kind: "file" as const }))
214
+ ),
215
+ { concurrency: 16 }
216
+ )
217
+ const ordered = [...described].sort((left, right) =>
218
+ left.kind === right.kind ? byText(left.name, right.name) : left.kind === "directory" ? -1 : 1
219
+ )
220
+ const selected = ordered.slice(offset - 1, offset - 1 + limit)
221
+ const truncated = offset - 1 + selected.length < ordered.length
222
+ return {
223
+ entries: selected,
224
+ total: ordered.length,
225
+ truncated,
226
+ ...(truncated ? { notice: notice("entries", selected.length, ordered.length) } : {})
227
+ }
228
+ })
package/src/Lsp.ts ADDED
@@ -0,0 +1,184 @@
1
+ /**
2
+ * The `lsp` flow: one code-intelligence query per call.
3
+ *
4
+ * The handler checks the path and 1-based position each operation needs,
5
+ * authorizes the path as a read through the guarded `FileSystem` (the server
6
+ * process reads the file on its own), forwards the query to the bound
7
+ * `LanguageServer`, and returns the server's answer unchanged in `result`.
8
+ *
9
+ * @since 1.0.0
10
+ */
11
+
12
+ import * as Effect from "effect/Effect"
13
+ import * as FileSystem from "effect/FileSystem"
14
+ import * as Schema from "effect/Schema"
15
+ import { capability, envelope } from "./internal/Declaration.ts"
16
+ import * as FsFailure from "./internal/FsFailure.ts"
17
+ import * as LanguageServer from "./LanguageServer.ts"
18
+ import * as StdError from "./StdError.ts"
19
+
20
+ /**
21
+ * The registry name of the `lsp` flow.
22
+ *
23
+ * @category identifiers
24
+ * @since 1.0.0
25
+ */
26
+ export const name = "lsp"
27
+ /**
28
+ * The one-line description the model sees for the `lsp` flow.
29
+ *
30
+ * @category descriptions
31
+ * @since 1.0.0
32
+ */
33
+ export const description = "Inspect code intelligence through the configured language server."
34
+ /**
35
+ * What the `lsp` flow accepts.
36
+ *
37
+ * @category schemas
38
+ * @since 1.0.0
39
+ */
40
+ export const Input = Schema.Struct({
41
+ operation: Schema.Literals([
42
+ "hover",
43
+ "definition",
44
+ "references",
45
+ "implementation",
46
+ "documentSymbols",
47
+ "workspaceSymbols",
48
+ "prepareCallHierarchy",
49
+ "callHierarchyIncoming",
50
+ "callHierarchyOutgoing",
51
+ "diagnostics"
52
+ ]).annotate({
53
+ description:
54
+ "The query to run; workspaceSymbols takes query, documentSymbols and diagnostics take path, the rest take path with line and character"
55
+ }),
56
+ path: Schema.optional(Schema.String).annotate({
57
+ description: "Absolute path of the file to query; required by every operation except workspaceSymbols"
58
+ }),
59
+ line: Schema.optional(Schema.Int.check(Schema.isGreaterThanOrEqualTo(1))).annotate({
60
+ description: "1-based line of the position to query, as read and grep report it"
61
+ }),
62
+ character: Schema.optional(Schema.Int.check(Schema.isGreaterThanOrEqualTo(1))).annotate({
63
+ description: "1-based character offset within the line"
64
+ }),
65
+ query: Schema.optional(Schema.String).annotate({
66
+ description: "Symbol text to search the workspace for; workspaceSymbols only"
67
+ })
68
+ })
69
+ /**
70
+ * Decoded input accepted by the `lsp` flow.
71
+ *
72
+ * @category models
73
+ * @since 1.0.0
74
+ */
75
+ export type Input = typeof Input.Type
76
+ /**
77
+ * What the `lsp` flow returns.
78
+ *
79
+ * @category schemas
80
+ * @since 1.0.0
81
+ */
82
+ export const Output = Schema.Struct({
83
+ result: Schema.Unknown.annotate({
84
+ description: "The language server's answer for this operation, passed through in the server's own shape"
85
+ })
86
+ })
87
+ /**
88
+ * Decoded output returned by the `lsp` flow.
89
+ *
90
+ * @category models
91
+ * @since 1.0.0
92
+ */
93
+ export type Output = typeof Output.Type
94
+ /**
95
+ * The declared effect envelope of the `lsp` flow, before any input is known.
96
+ *
97
+ * @category effects
98
+ * @since 1.0.0
99
+ */
100
+ export const effects = envelope({
101
+ tier: "sealed",
102
+ mode: "hermetic",
103
+ reads: ["/**"],
104
+ writes: []
105
+ })
106
+ /**
107
+ * Returns the workspace-wide envelope every language-server query needs.
108
+ *
109
+ * @category effects
110
+ * @since 1.0.0
111
+ */
112
+ export const effectsFor = (_input: typeof Input.Type) => effects
113
+ /**
114
+ * The authority the `lsp` flow requires.
115
+ *
116
+ * @category capabilities
117
+ * @since 1.0.0
118
+ */
119
+ export const capabilities = [capability("fs:read", "/**")]
120
+ /**
121
+ * The `lsp` flow declaration: schemas, capabilities, and effects, with the
122
+ * implementation attached separately.
123
+ *
124
+ * @category flows
125
+ * @since 1.0.0
126
+ */
127
+ export const flow = {
128
+ name,
129
+ description,
130
+ input: Input,
131
+ output: Output,
132
+ capabilities,
133
+ effects
134
+ } as const
135
+ const isAbsolutePath = (path: string): boolean => path.startsWith("/") || /^[A-Za-z]:[\\/]/.test(path)
136
+ /**
137
+ * Runs the `lsp` flow: queries the configured language server.
138
+ *
139
+ * @category handlers
140
+ * @since 1.0.0
141
+ */
142
+ export const run = Effect.fn("Lsp.run")(function*(
143
+ input: typeof Input.Type
144
+ ): Effect.fn.Return<typeof Output.Type, StdError.StdError, LanguageServer.LanguageServer | FileSystem.FileSystem> {
145
+ const server = yield* LanguageServer.LanguageServer
146
+ const path = input.path
147
+ const position = path === undefined || input.line === undefined || input.character === undefined
148
+ ? undefined
149
+ : { path, line: input.line - 1, character: input.character - 1 }
150
+ if ((input.operation === "workspaceSymbols")) return { result: yield* server.workspaceSymbols(input.query ?? "") }
151
+ if (path === undefined || !isAbsolutePath(path)) {
152
+ return yield* Effect.fail(
153
+ new StdError.StdError({ code: "invalid_input", message: "A normalized absolute path is required" })
154
+ )
155
+ }
156
+ // The server reads the file itself, outside the guarded filesystem, so the
157
+ // path is authorized here: a read the caller could not make through `read`
158
+ // is not made through the language server either.
159
+ const fileSystem = yield* FileSystem.FileSystem
160
+ yield* fileSystem.stat(path).pipe(Effect.mapError(FsFailure.reading(path, `File not found: ${path}`)))
161
+ if (input.operation === "documentSymbols") return { result: yield* server.documentSymbols(path) }
162
+ if (input.operation === "diagnostics") return { result: yield* server.diagnostics(path) }
163
+ if (position === undefined) {
164
+ return yield* Effect.fail(
165
+ new StdError.StdError({ code: "invalid_input", message: "1-based line and character are required" })
166
+ )
167
+ }
168
+ switch (input.operation) {
169
+ case "hover":
170
+ return { result: yield* server.hover(position) }
171
+ case "definition":
172
+ return { result: yield* server.definition(position) }
173
+ case "references":
174
+ return { result: yield* server.references(position) }
175
+ case "implementation":
176
+ return { result: yield* server.implementation(position) }
177
+ case "prepareCallHierarchy":
178
+ return { result: yield* server.prepareCallHierarchy(position) }
179
+ case "callHierarchyIncoming":
180
+ return { result: yield* server.callHierarchyIncoming(position) }
181
+ case "callHierarchyOutgoing":
182
+ return { result: yield* server.callHierarchyOutgoing(position) }
183
+ }
184
+ })