@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 @@
1
+ {"version":3,"file":"Manifest.d.ts","sourceRoot":"","sources":["../../src/Manifest.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAcjC,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAA;AAG3C;;;;;GAKG;AACH,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBhB,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBnB,CAAA;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;qBAwEizB,CAAC;;;qBAA8tF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAtDtiH,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,KAAK,0LAoBjB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,QAAQ,gFAWpB,CAAA"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Built-in flow declarations and their separately supplied handlers.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ import * as ApplyPatch from "./ApplyPatch.js";
7
+ import * as Bash from "./Bash.js";
8
+ import * as Edit from "./Edit.js";
9
+ import * as Explore from "./Explore.js";
10
+ import * as Fetch from "./Fetch.js";
11
+ import * as Glob from "./Glob.js";
12
+ import * as Grep from "./Grep.js";
13
+ import * as HttpPost from "./HttpPost.js";
14
+ import * as Ls from "./Ls.js";
15
+ import * as Lsp from "./Lsp.js";
16
+ import * as Read from "./Read.js";
17
+ import * as ShellCommand from "./ShellCommand.js";
18
+ import * as TestRun from "./TestRun.js";
19
+ import * as UpdatePlan from "./UpdatePlan.js";
20
+ import * as WebFetch from "./WebFetch.js";
21
+ import * as WebSearch from "./WebSearch.js";
22
+ import * as Write from "./Write.js";
23
+ /**
24
+ * Frozen name-to-declaration registry for every standard flow.
25
+ *
26
+ * @category registries
27
+ * @since 1.0.0
28
+ */
29
+ export const flows = Object.freeze({
30
+ [Read.name]: Read.flow,
31
+ [Write.name]: Write.flow,
32
+ [Edit.name]: Edit.flow,
33
+ [Ls.name]: Ls.flow,
34
+ [Glob.name]: Glob.flow,
35
+ [Grep.name]: Grep.flow,
36
+ [Bash.name]: Bash.flow,
37
+ [TestRun.name]: TestRun.flow,
38
+ [ShellCommand.name]: ShellCommand.flow,
39
+ [ApplyPatch.name]: ApplyPatch.flow,
40
+ [UpdatePlan.name]: UpdatePlan.flow,
41
+ [Fetch.name]: Fetch.flow,
42
+ [HttpPost.name]: HttpPost.flow,
43
+ [Explore.name]: Explore.flow,
44
+ [WebFetch.name]: WebFetch.flow,
45
+ [WebSearch.name]: WebSearch.flow,
46
+ [Lsp.name]: Lsp.flow
47
+ });
48
+ /**
49
+ * Frozen name-to-handler registry for executable standard flows.
50
+ *
51
+ * Explore is dynamic and therefore has no handler entry.
52
+ *
53
+ * @category registries
54
+ * @since 1.0.0
55
+ */
56
+ export const handlers = Object.freeze({
57
+ [Read.name]: Read.run,
58
+ [Write.name]: Write.run,
59
+ [Edit.name]: Edit.run,
60
+ [Ls.name]: Ls.run,
61
+ [Glob.name]: Glob.run,
62
+ [Grep.name]: Grep.run,
63
+ [Bash.name]: Bash.run,
64
+ [TestRun.name]: TestRun.run,
65
+ [ShellCommand.name]: ShellCommand.run,
66
+ [ApplyPatch.name]: ApplyPatch.run,
67
+ [UpdatePlan.name]: UpdatePlan.run,
68
+ [Fetch.name]: Fetch.run,
69
+ [HttpPost.name]: HttpPost.run,
70
+ [WebFetch.name]: WebFetch.run,
71
+ [WebSearch.name]: WebSearch.run,
72
+ [Lsp.name]: Lsp.run
73
+ });
74
+ /**
75
+ * Frozen name-to-narrowing registry: the entry point for `effectsFor`.
76
+ *
77
+ * Every flow declares a registry-time worst case in `flow.effects`, and every
78
+ * module also narrows that declaration for one decoded input. Without this map
79
+ * a host holding a flow name and a decoded input has no generic way to reach
80
+ * the narrowing, so it would have to serialize conflicts against the worst case
81
+ * for every call. Explore is included even though it has no handler entry: it
82
+ * is a declaration a seat can be offered, and its envelope narrows the same way.
83
+ *
84
+ * @category registries
85
+ * @since 1.0.0
86
+ */
87
+ export const effectsFor = Object.freeze({
88
+ [Read.name]: Read.effectsFor,
89
+ [Write.name]: Write.effectsFor,
90
+ [Edit.name]: Edit.effectsFor,
91
+ [Ls.name]: Ls.effectsFor,
92
+ [Glob.name]: Glob.effectsFor,
93
+ [Grep.name]: Grep.effectsFor,
94
+ [Bash.name]: Bash.effectsFor,
95
+ [TestRun.name]: TestRun.effectsFor,
96
+ [ShellCommand.name]: ShellCommand.effectsFor,
97
+ [ApplyPatch.name]: ApplyPatch.effectsFor,
98
+ [UpdatePlan.name]: UpdatePlan.effectsFor,
99
+ [Fetch.name]: Fetch.effectsFor,
100
+ [HttpPost.name]: HttpPost.effectsFor,
101
+ [Explore.name]: Explore.effectsFor,
102
+ [WebFetch.name]: WebFetch.effectsFor,
103
+ [WebSearch.name]: WebSearch.effectsFor,
104
+ [Lsp.name]: Lsp.effectsFor
105
+ });
106
+ /**
107
+ * Frozen standard flow names in registry order.
108
+ *
109
+ * @category metadata
110
+ * @since 1.0.0
111
+ */
112
+ export const names = Object.freeze([
113
+ Read.name,
114
+ Write.name,
115
+ Edit.name,
116
+ Ls.name,
117
+ Glob.name,
118
+ Grep.name,
119
+ Bash.name,
120
+ TestRun.name,
121
+ ShellCommand.name,
122
+ ApplyPatch.name,
123
+ UpdatePlan.name,
124
+ Fetch.name,
125
+ HttpPost.name,
126
+ Explore.name,
127
+ WebFetch.name,
128
+ WebSearch.name,
129
+ Lsp.name
130
+ ]);
131
+ /**
132
+ * Frozen names visible to a seat restricted to read-only flows.
133
+ *
134
+ * Seat policies consume this list instead of duplicating name checks.
135
+ *
136
+ * `websearch` is deliberately absent: its provider contract requires
137
+ * `net:post` authority, which is mutating under the kernel capability
138
+ * taxonomy, so it cannot ride in a read-only seat.
139
+ *
140
+ * @category visibility
141
+ * @since 1.0.0
142
+ */
143
+ export const readOnly = Object.freeze([
144
+ Read.name,
145
+ Ls.name,
146
+ Glob.name,
147
+ Grep.name,
148
+ Fetch.name,
149
+ Explore.name,
150
+ WebFetch.name,
151
+ Lsp.name
152
+ ]);
153
+ //# sourceMappingURL=Manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Manifest.js","sourceRoot":"","sources":["../../src/Manifest.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Built-in flow declarations and their separately supplied handlers.\n *\n * @since 1.0.0\n */\n\nimport * as ApplyPatch from \"./ApplyPatch.ts\"\nimport * as Bash from \"./Bash.ts\"\nimport * as Edit from \"./Edit.ts\"\nimport * as Explore from \"./Explore.ts\"\nimport * as Fetch from \"./Fetch.ts\"\nimport * as Glob from \"./Glob.ts\"\nimport * as Grep from \"./Grep.ts\"\nimport * as HttpPost from \"./HttpPost.ts\"\nimport * as Ls from \"./Ls.ts\"\nimport * as Lsp from \"./Lsp.ts\"\nimport * as Read from \"./Read.ts\"\nimport * as ShellCommand from \"./ShellCommand.ts\"\nimport * as TestRun from \"./TestRun.ts\"\nimport * as UpdatePlan from \"./UpdatePlan.ts\"\nimport * as WebFetch from \"./WebFetch.ts\"\nimport * as WebSearch from \"./WebSearch.ts\"\nimport * as Write from \"./Write.ts\"\n\n/**\n * Frozen name-to-declaration registry for every standard flow.\n *\n * @category registries\n * @since 1.0.0\n */\nexport const flows = Object.freeze({\n [Read.name]: Read.flow,\n [Write.name]: Write.flow,\n [Edit.name]: Edit.flow,\n [Ls.name]: Ls.flow,\n [Glob.name]: Glob.flow,\n [Grep.name]: Grep.flow,\n [Bash.name]: Bash.flow,\n [TestRun.name]: TestRun.flow,\n [ShellCommand.name]: ShellCommand.flow,\n [ApplyPatch.name]: ApplyPatch.flow,\n [UpdatePlan.name]: UpdatePlan.flow,\n [Fetch.name]: Fetch.flow,\n [HttpPost.name]: HttpPost.flow,\n [Explore.name]: Explore.flow,\n [WebFetch.name]: WebFetch.flow,\n [WebSearch.name]: WebSearch.flow,\n [Lsp.name]: Lsp.flow\n})\n\n/**\n * Frozen name-to-handler registry for executable standard flows.\n *\n * Explore is dynamic and therefore has no handler entry.\n *\n * @category registries\n * @since 1.0.0\n */\nexport const handlers = Object.freeze({\n [Read.name]: Read.run,\n [Write.name]: Write.run,\n [Edit.name]: Edit.run,\n [Ls.name]: Ls.run,\n [Glob.name]: Glob.run,\n [Grep.name]: Grep.run,\n [Bash.name]: Bash.run,\n [TestRun.name]: TestRun.run,\n [ShellCommand.name]: ShellCommand.run,\n [ApplyPatch.name]: ApplyPatch.run,\n [UpdatePlan.name]: UpdatePlan.run,\n [Fetch.name]: Fetch.run,\n [HttpPost.name]: HttpPost.run,\n [WebFetch.name]: WebFetch.run,\n [WebSearch.name]: WebSearch.run,\n [Lsp.name]: Lsp.run\n})\n\n/**\n * Frozen name-to-narrowing registry: the entry point for `effectsFor`.\n *\n * Every flow declares a registry-time worst case in `flow.effects`, and every\n * module also narrows that declaration for one decoded input. Without this map\n * a host holding a flow name and a decoded input has no generic way to reach\n * the narrowing, so it would have to serialize conflicts against the worst case\n * for every call. Explore is included even though it has no handler entry: it\n * is a declaration a seat can be offered, and its envelope narrows the same way.\n *\n * @category registries\n * @since 1.0.0\n */\nexport const effectsFor = Object.freeze({\n [Read.name]: Read.effectsFor,\n [Write.name]: Write.effectsFor,\n [Edit.name]: Edit.effectsFor,\n [Ls.name]: Ls.effectsFor,\n [Glob.name]: Glob.effectsFor,\n [Grep.name]: Grep.effectsFor,\n [Bash.name]: Bash.effectsFor,\n [TestRun.name]: TestRun.effectsFor,\n [ShellCommand.name]: ShellCommand.effectsFor,\n [ApplyPatch.name]: ApplyPatch.effectsFor,\n [UpdatePlan.name]: UpdatePlan.effectsFor,\n [Fetch.name]: Fetch.effectsFor,\n [HttpPost.name]: HttpPost.effectsFor,\n [Explore.name]: Explore.effectsFor,\n [WebFetch.name]: WebFetch.effectsFor,\n [WebSearch.name]: WebSearch.effectsFor,\n [Lsp.name]: Lsp.effectsFor\n})\n\n/**\n * Frozen standard flow names in registry order.\n *\n * @category metadata\n * @since 1.0.0\n */\nexport const names = Object.freeze(\n [\n Read.name,\n Write.name,\n Edit.name,\n Ls.name,\n Glob.name,\n Grep.name,\n Bash.name,\n TestRun.name,\n ShellCommand.name,\n ApplyPatch.name,\n UpdatePlan.name,\n Fetch.name,\n HttpPost.name,\n Explore.name,\n WebFetch.name,\n WebSearch.name,\n Lsp.name\n ] as const\n)\n\n/**\n * Frozen names visible to a seat restricted to read-only flows.\n *\n * Seat policies consume this list instead of duplicating name checks.\n *\n * `websearch` is deliberately absent: its provider contract requires\n * `net:post` authority, which is mutating under the kernel capability\n * taxonomy, so it cannot ride in a read-only seat.\n *\n * @category visibility\n * @since 1.0.0\n */\nexport const readOnly = Object.freeze(\n [\n Read.name,\n Ls.name,\n Glob.name,\n Grep.name,\n Fetch.name,\n Explore.name,\n WebFetch.name,\n Lsp.name\n ] as const\n)\n"]}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * The `rg`-process implementation of the ripgrep search contract.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ import type * as ChildProcessSpawner from "@smthrs/kernel/ChildProcessSpawner";
7
+ import * as Path from "@smthrs/kernel/Path";
8
+ import { type Context, Layer } from "effect";
9
+ import * as FileSystem from "effect/FileSystem";
10
+ import * as Search from "./Search.ts";
11
+ /**
12
+ * Maximum bytes captured from either stream across one search operation.
13
+ *
14
+ * Native search refuses an overflow instead of truncating because a partial
15
+ * ripgrep stream could make it disagree with the portable peer. The 64 MiB
16
+ * bound is well above real repository listings: 400,000 paths occupy roughly
17
+ * 16 MiB in a typical `rg --files` stream.
18
+ *
19
+ * @category constants
20
+ * @since 1.0.0
21
+ */
22
+ export declare const MAX_CAPTURE_BYTES = 67108864;
23
+ /**
24
+ * Captures filesystem, path and process services in the native peer.
25
+ * Optional environment declarations overlay the host child-process allowlist.
26
+ *
27
+ * @category constructors
28
+ * @since 1.0.0
29
+ */
30
+ export declare const make: (services: Context.Context<FileSystem.FileSystem | Path.Path | ChildProcessSpawner.ChildProcessSpawner>, environment?: Readonly<Record<string, string>>) => Search.Search;
31
+ /**
32
+ * Provides the `rg`-driven peer.
33
+ *
34
+ * @category layers
35
+ * @since 1.0.0
36
+ */
37
+ export declare const layer: Layer.Layer<Search.Search, never, FileSystem.FileSystem | Path.Path | ChildProcessSpawner.ChildProcessSpawner>;
38
+ //# sourceMappingURL=NativeSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NativeSearch.d.ts","sourceRoot":"","sources":["../../src/NativeSearch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,KAAK,mBAAmB,MAAM,oCAAoC,CAAA;AAC9E,OAAO,KAAK,IAAI,MAAM,qBAAqB,CAAA;AAC3C,OAAO,EAAE,KAAK,OAAO,EAAU,KAAK,EAAE,MAAM,QAAQ,CAAA;AACpD,OAAO,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAK/C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAIrC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,WAAa,CAAA;AA8Y3C;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,GACf,UAAU,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,EACtG,cAAc,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,KAC7C,MAAM,CAAC,MAIN,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,KAAK,EAAE,KAAK,CAAC,KAAK,CAC7B,MAAM,CAAC,MAAM,EACb,KAAK,EACL,UAAU,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC,mBAAmB,CAI5E,CAAA"}
@@ -0,0 +1,378 @@
1
+ /**
2
+ * The `rg`-process implementation of the ripgrep search contract.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ import * as Path from "@smthrs/kernel/Path";
7
+ import { Effect, Layer } from "effect";
8
+ import * as FileSystem from "effect/FileSystem";
9
+ import * as Exec from "./internal/Exec.js";
10
+ import * as Grouping from "./internal/Grouping.js";
11
+ import { notice, truncateBytes } from "./internal/Text.js";
12
+ import * as Walk from "./internal/Walk.js";
13
+ import * as Search from "./Search.js";
14
+ import * as Contract from "./SearchContract.js";
15
+ import * as StdError from "./StdError.js";
16
+ /**
17
+ * Maximum bytes captured from either stream across one search operation.
18
+ *
19
+ * Native search refuses an overflow instead of truncating because a partial
20
+ * ripgrep stream could make it disagree with the portable peer. The 64 MiB
21
+ * bound is well above real repository listings: 400,000 paths occupy roughly
22
+ * 16 MiB in a typical `rg --files` stream.
23
+ *
24
+ * @category constants
25
+ * @since 1.0.0
26
+ */
27
+ export const MAX_CAPTURE_BYTES = 67_108_864;
28
+ const execute = (cwd, args, environment) => Exec.exec("rg", { args, cwd, env: environment, maxCaptureBytes: MAX_CAPTURE_BYTES, overflow: "refuse" }).pipe(Effect.mapError((error) => new StdError.StdError({
29
+ code: error.code === "capture_overflow" ? "command_failed" : "provider_unavailable",
30
+ message: error.code === "capture_overflow"
31
+ ? error.message
32
+ : "The native ripgrep implementation could not start rg"
33
+ })));
34
+ // Only .gitignore within the requested root participates. Disable user config,
35
+ // parent/global rules and other ignore sources so the result is host independent.
36
+ const ignoreFlags = (noIgnore) => [
37
+ "--no-config",
38
+ "--no-require-git",
39
+ "--no-ignore-global",
40
+ "--no-ignore-parent",
41
+ "--no-ignore-exclude",
42
+ "--no-ignore-dot",
43
+ ...(noIgnore ? ["--no-ignore"] : [])
44
+ ];
45
+ /**
46
+ * Reports what `rg` rejected, or `undefined` when it produced an answer.
47
+ *
48
+ * Exit status 2 means only "an error occurred", and a walk hits those
49
+ * routinely: a dangling symlink, a symlink loop, a directory the process may
50
+ * not list. `--no-messages` suppresses exactly those, leaving stderr empty and
51
+ * the results on stdout complete for everything `rg` could reach — the same
52
+ * entries the in-process peer skips, so the peers still agree. A fatal error —
53
+ * an unparsable glob, a rejected expression, a killed process — always writes
54
+ * to stderr, which `--no-messages` does not touch. Stderr is therefore the
55
+ * discriminator, and the exit status alone is not.
56
+ */
57
+ const rejection = (result) => {
58
+ const message = result.stderr.trim();
59
+ return result.exitCode > 1 && message.length > 0 ? message : undefined;
60
+ };
61
+ const nulSeparated = (stdout) => stdout.split("\0").filter((value) => value.length > 0);
62
+ const preview = (line) => {
63
+ const withoutTerminator = line.replace(/\r?\n$/, "");
64
+ const characters = Array.from(withoutTerminator);
65
+ return truncateBytes(characters.length > 500 ? characters.slice(0, 500).join("") : withoutTerminator, 500, {
66
+ keep: "head"
67
+ }).text;
68
+ };
69
+ const asRecord = (value) => typeof value === "object" && value !== null ? value : undefined;
70
+ const textAt = (record, key) => {
71
+ const nested = asRecord(record?.[key]);
72
+ return typeof nested?.text === "string" ? nested.text : undefined;
73
+ };
74
+ const malformedJson = () => new StdError.StdError({ code: "request_failed", message: "rg returned malformed JSON" });
75
+ // rg releases differ on some gitignore grammar (for example BOMs and
76
+ // unclosed character classes in 14 versus 15). Select paths through the same
77
+ // walk as portable, then name them explicitly to rg. This also prevents a
78
+ // positive caller glob from overriding ignore rules or scanning unrelated files.
79
+ const resolveRoot = (input, globs) => Effect.gen(function* () {
80
+ const fileSystem = yield* FileSystem.FileSystem;
81
+ const path = yield* Path.Path;
82
+ const included = (relative, basename) => Contract.includedByGlobs(globs, relative, basename);
83
+ const walked = yield* Walk.files(fileSystem, path, input.root, input.hidden, input.noIgnore, included);
84
+ const cwd = walked.explicitFile ? path.dirname(input.root) : input.root;
85
+ const selected = walked.explicitFile ?
86
+ walked.files :
87
+ walked.files.filter((file) => included(Walk.relativeForPattern(path, input.root, file), path.basename(file)));
88
+ const links = walked.explicitFile ? [] : yield* Walk.symbolicLinks(fileSystem, selected);
89
+ return {
90
+ cwd,
91
+ targets: selected.filter((_, index) => links[index] !== true).map((file) => path.relative(cwd, file)),
92
+ explicitFile: walked.explicitFile,
93
+ ignored: walked.ignored,
94
+ absolute: (value) => path.normalize(path.join(cwd, value.replace(/^\.\//, "")))
95
+ };
96
+ });
97
+ // Stay well below OS argv limits, including on trees with long UTF-8 names.
98
+ // Only one batch per operation is live, and the aggregate capture keeps the
99
+ // same refusal bound as a single invocation.
100
+ const executeFiles = (cwd, args, targets, environment) => Effect.gen(function* () {
101
+ if (targets.length === 0) {
102
+ return {
103
+ stdout: args.includes("--json")
104
+ ? `${JSON.stringify({ type: "summary", data: { stats: { searches: 0 } } })}\n`
105
+ : "",
106
+ stderr: "",
107
+ exitCode: 0
108
+ };
109
+ }
110
+ const encoder = new TextEncoder();
111
+ const batches = [];
112
+ let batch = [];
113
+ let size = 0;
114
+ for (const target of targets) {
115
+ const bytes = encoder.encode(target).length + 1;
116
+ if (batch.length > 0 && (batch.length >= 256 || size + bytes > 32_768)) {
117
+ batches.push(batch);
118
+ batch = [];
119
+ size = 0;
120
+ }
121
+ batch.push(target);
122
+ size += bytes;
123
+ }
124
+ batches.push(batch);
125
+ let stdout = "";
126
+ let stderr = "";
127
+ let stdoutBytes = 0;
128
+ let stderrBytes = 0;
129
+ let exitCode = 0;
130
+ for (const batch of batches) {
131
+ const result = yield* execute(cwd, [...args, ...batch], environment);
132
+ if (rejection(result) !== undefined)
133
+ return result;
134
+ stdoutBytes += encoder.encode(result.stdout).length;
135
+ stderrBytes += encoder.encode(result.stderr).length;
136
+ if (stdoutBytes > MAX_CAPTURE_BYTES || stderrBytes > MAX_CAPTURE_BYTES) {
137
+ return yield* Effect.fail(new StdError.StdError({
138
+ code: "command_failed",
139
+ message: `rg ${stdoutBytes > MAX_CAPTURE_BYTES ? "stdout" : "stderr"} exceeded the ${MAX_CAPTURE_BYTES}-byte capture cap`
140
+ }));
141
+ }
142
+ stdout += result.stdout;
143
+ stderr += result.stderr;
144
+ exitCode = Math.max(exitCode, result.exitCode);
145
+ }
146
+ return { stdout, stderr, exitCode };
147
+ });
148
+ const pathOrder = (left, right) => left.file < right.file ? -1 : left.file > right.file ? 1 : left.line - right.line;
149
+ /**
150
+ * Holds `maxCount` to the per-file match budget the contract states.
151
+ *
152
+ * `rg` labels an after-context line as a `match` when that line matches too,
153
+ * so `--max-count 2 --after-context 1` over three consecutive matching lines
154
+ * prints three `match` rows — measured against ripgrep 14.1.1. The in-process
155
+ * peer stops counting at the budget and carries the surplus line as context,
156
+ * and the generated conformance run found the two peers answering that call
157
+ * differently on four seeds. The surplus rows are demoted rather than dropped,
158
+ * because the caller asked for that context and `rg` did print it. Rows arrive
159
+ * sorted by file and line, so counting in order is counting per file.
160
+ */
161
+ const capMatches = (lines, maxCount) => {
162
+ if (maxCount === undefined)
163
+ return lines;
164
+ const counted = new Map();
165
+ return lines.map((line) => {
166
+ if (line.kind !== "match")
167
+ return line;
168
+ const seen = counted.get(line.file) ?? 0;
169
+ counted.set(line.file, seen + 1);
170
+ return seen < maxCount ? line : { ...line, kind: "context" };
171
+ });
172
+ };
173
+ const grep = (input, environment) => Effect.gen(function* () {
174
+ const fileSystem = yield* FileSystem.FileSystem;
175
+ const path = yield* Path.Path;
176
+ const root = yield* resolveRoot(input, input.globs);
177
+ const args = [
178
+ "--json",
179
+ "--stats",
180
+ ...ignoreFlags(input.noIgnore),
181
+ "--no-messages",
182
+ "--sort",
183
+ "path",
184
+ "--encoding=utf-8",
185
+ "--crlf"
186
+ ];
187
+ if (input.hidden)
188
+ args.push("--hidden");
189
+ if (input.fixedStrings)
190
+ args.push("--fixed-strings");
191
+ // `rg` documents `--smart-case` as overriding `--ignore-case`, so passing
192
+ // both makes an uppercase pattern case-SENSITIVE. The in-process peer reads
193
+ // the pair the other way round — `ignoreCase || (smartCase && no uppercase)`
194
+ // — because an explicit request beats a heuristic. `Grep.run` refuses the
195
+ // combination outright, but a host binding `Search` directly never reaches
196
+ // that check, and the generated conformance run found the two peers
197
+ // answering seven seeds differently through it.
198
+ if (input.ignoreCase)
199
+ args.push("--ignore-case");
200
+ else if (input.smartCase)
201
+ args.push("--smart-case");
202
+ if (input.beforeContext > 0)
203
+ args.push("--before-context", String(input.beforeContext));
204
+ if (input.afterContext > 0)
205
+ args.push("--after-context", String(input.afterContext));
206
+ if (input.maxCount !== undefined)
207
+ args.push("--max-count", String(input.maxCount));
208
+ args.push("--", input.pattern);
209
+ const binaryArgs = [
210
+ "--files-with-matches",
211
+ "--text",
212
+ "--null",
213
+ ...ignoreFlags(input.noIgnore),
214
+ "--no-messages",
215
+ "--sort",
216
+ "path"
217
+ ];
218
+ if (input.hidden)
219
+ binaryArgs.push("--hidden");
220
+ binaryArgs.push("--", "\\x00");
221
+ const [result, binaryResult] = yield* Effect.all([
222
+ executeFiles(root.cwd, args, root.targets, environment),
223
+ executeFiles(root.cwd, binaryArgs, root.targets, environment)
224
+ ], { concurrency: "unbounded" });
225
+ for (const outcome of [result, binaryResult]) {
226
+ const message = rejection(outcome);
227
+ if (message !== undefined) {
228
+ return yield* Effect.fail(new StdError.StdError({ code: "request_failed", message }));
229
+ }
230
+ }
231
+ const binaryFiles = new Set(nulSeparated(binaryResult.stdout).map(root.absolute));
232
+ if (root.explicitFile && binaryFiles.size > 0) {
233
+ return yield* Effect.fail(new StdError.StdError({
234
+ code: "binary_file",
235
+ message: `Cannot search binary file: ${input.root}`,
236
+ path: input.root
237
+ }));
238
+ }
239
+ const lines = [];
240
+ const files = new Set();
241
+ let sawSummary = false;
242
+ for (const encoded of result.stdout.split("\n")) {
243
+ if (encoded.length === 0)
244
+ continue;
245
+ let event;
246
+ try {
247
+ const decoded = JSON.parse(encoded);
248
+ const record = asRecord(decoded);
249
+ if (record === undefined)
250
+ return yield* Effect.fail(malformedJson());
251
+ event = record;
252
+ }
253
+ catch {
254
+ return yield* Effect.fail(malformedJson());
255
+ }
256
+ const type = event.type;
257
+ const data = asRecord(event.data);
258
+ if (type === "match" || type === "context") {
259
+ const file = textAt(data, "path");
260
+ const text = textAt(data, "lines");
261
+ const line = data?.line_number;
262
+ if (file === undefined || text === undefined || typeof line !== "number") {
263
+ return yield* Effect.fail(malformedJson());
264
+ }
265
+ const absolute = root.absolute(file);
266
+ files.add(absolute);
267
+ lines.push({ file: absolute, line, text: preview(text), kind: type });
268
+ }
269
+ else if (type === "begin") {
270
+ if (textAt(data, "path") === undefined)
271
+ return yield* Effect.fail(malformedJson());
272
+ }
273
+ else if (type === "end") {
274
+ if (textAt(data, "path") === undefined ||
275
+ (data?.binary_offset !== null && typeof data?.binary_offset !== "number"))
276
+ return yield* Effect.fail(malformedJson());
277
+ }
278
+ else if (type === "summary") {
279
+ const stats = asRecord(data?.stats);
280
+ if (typeof stats?.searches !== "number")
281
+ return yield* Effect.fail(malformedJson());
282
+ sawSummary = true;
283
+ }
284
+ else
285
+ return yield* Effect.fail(malformedJson());
286
+ }
287
+ if (!sawSummary)
288
+ return yield* Effect.fail(malformedJson());
289
+ for (const file of binaryFiles)
290
+ files.delete(file);
291
+ const visibleLines = capMatches(lines.filter((line) => !binaryFiles.has(line.file)).sort(pathOrder), input.maxCount);
292
+ const grouped = input.filesWithMatches ? [] : Grouping.group(visibleLines);
293
+ const entries = input.filesWithMatches ? [...files].sort() : grouped;
294
+ const truncated = entries.length > input.limit;
295
+ const shown = grouped.slice(0, input.limit);
296
+ // `rg` reports lines, not files, so the enclosing definition costs one read
297
+ // of each file whose hits survived the limit — never one per file searched.
298
+ const contents = new Map();
299
+ if (input.symbols) {
300
+ for (const file of new Set(shown.map((match) => match.file))) {
301
+ const bytes = yield* Effect.orElseSucceed(fileSystem.readFile(file), () => undefined);
302
+ if (bytes !== undefined)
303
+ contents.set(file, Grouping.sourceLines(new TextDecoder().decode(bytes)));
304
+ }
305
+ }
306
+ const unsatisfiable = entries.length > 0 ? undefined : yield* Contract.unsatisfiableNotice({
307
+ fileSystem,
308
+ path,
309
+ root: input.root,
310
+ globs: input.globs,
311
+ hidden: input.hidden,
312
+ noIgnore: input.noIgnore,
313
+ ignored: root.ignored
314
+ });
315
+ return {
316
+ matches: Grouping.annotate(shown, contents),
317
+ files: input.filesWithMatches ? [...files].sort().slice(0, input.limit) : [],
318
+ filesSearched: root.targets.length,
319
+ skippedBinary: binaryFiles.size,
320
+ truncated,
321
+ ...(truncated
322
+ ? { notice: notice(input.filesWithMatches ? "files" : "matches", input.limit, entries.length) }
323
+ : {}),
324
+ ...(unsatisfiable === undefined ? {} : { notice: unsatisfiable })
325
+ };
326
+ });
327
+ const glob = (input, environment) => Effect.gen(function* () {
328
+ const fileSystem = yield* FileSystem.FileSystem;
329
+ const path = yield* Path.Path;
330
+ const root = yield* resolveRoot(input, [input.pattern]);
331
+ const args = ["--files", "--null", ...ignoreFlags(input.noIgnore), "--no-messages", "--sort", "path"];
332
+ if (input.hidden)
333
+ args.push("--hidden");
334
+ args.push("--");
335
+ const result = yield* executeFiles(root.cwd, args, root.targets, environment);
336
+ const rejected = rejection(result);
337
+ if (rejected !== undefined) {
338
+ return yield* Effect.fail(new StdError.StdError({ code: "invalid_pattern", message: rejected }));
339
+ }
340
+ const paths = nulSeparated(result.stdout).map(root.absolute).filter((file) => root.explicitFile ||
341
+ Contract.includedByGlobs([input.pattern], Walk.relativeForPattern(path, input.root, file), path.basename(file))).sort();
342
+ const shown = paths.slice(0, input.limit);
343
+ const unsatisfiable = paths.length > 0 ? undefined : yield* Contract.unsatisfiableNotice({
344
+ fileSystem,
345
+ path,
346
+ root: input.root,
347
+ globs: [input.pattern],
348
+ hidden: input.hidden,
349
+ noIgnore: input.noIgnore,
350
+ ignored: root.ignored
351
+ });
352
+ return {
353
+ paths: shown,
354
+ total: paths.length,
355
+ truncated: paths.length > input.limit,
356
+ ...(paths.length > input.limit ? { notice: notice("entries", shown.length, paths.length) } : {}),
357
+ ...(unsatisfiable === undefined ? {} : { notice: unsatisfiable })
358
+ };
359
+ });
360
+ /**
361
+ * Captures filesystem, path and process services in the native peer.
362
+ * Optional environment declarations overlay the host child-process allowlist.
363
+ *
364
+ * @category constructors
365
+ * @since 1.0.0
366
+ */
367
+ export const make = (services, environment) => Search.make({
368
+ grep: (input) => Effect.provide(grep(input, environment), services),
369
+ glob: (input) => Effect.provide(glob(input, environment), services)
370
+ });
371
+ /**
372
+ * Provides the `rg`-driven peer.
373
+ *
374
+ * @category layers
375
+ * @since 1.0.0
376
+ */
377
+ export const layer = Layer.effect(Search.Search, Effect.map(Effect.context(), make));
378
+ //# sourceMappingURL=NativeSearch.js.map