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

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 (582) hide show
  1. package/CHANGELOG.md +148 -0
  2. package/LICENSE +21 -0
  3. package/README.md +156 -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 +390 -0
  9. package/dist/cjs/Bash.d.ts.map +1 -0
  10. package/dist/cjs/Bash.js +333 -0
  11. package/dist/cjs/Bash.js.map +7 -0
  12. package/dist/cjs/Checkpoints.d.ts +322 -0
  13. package/dist/cjs/Checkpoints.d.ts.map +1 -0
  14. package/dist/cjs/Checkpoints.js +233 -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 +36 -0
  73. package/dist/cjs/PortableSearch.d.ts.map +1 -0
  74. package/dist/cjs/PortableSearch.js +240 -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/RemoteSearch.d.ts +54 -0
  89. package/dist/cjs/RemoteSearch.d.ts.map +1 -0
  90. package/dist/cjs/RemoteSearch.js +134 -0
  91. package/dist/cjs/RemoteSearch.js.map +7 -0
  92. package/dist/cjs/Search.d.ts +163 -0
  93. package/dist/cjs/Search.d.ts.map +1 -0
  94. package/dist/cjs/Search.js +51 -0
  95. package/dist/cjs/Search.js.map +7 -0
  96. package/dist/cjs/SearchConformance.d.ts +115 -0
  97. package/dist/cjs/SearchConformance.d.ts.map +1 -0
  98. package/dist/cjs/SearchConformance.js +172 -0
  99. package/dist/cjs/SearchConformance.js.map +7 -0
  100. package/dist/cjs/SearchContract.d.ts +114 -0
  101. package/dist/cjs/SearchContract.d.ts.map +1 -0
  102. package/dist/cjs/SearchContract.js +339 -0
  103. package/dist/cjs/SearchContract.js.map +7 -0
  104. package/dist/cjs/ShellCommand.d.ts +164 -0
  105. package/dist/cjs/ShellCommand.d.ts.map +1 -0
  106. package/dist/cjs/ShellCommand.js +102 -0
  107. package/dist/cjs/ShellCommand.js.map +7 -0
  108. package/dist/cjs/StdError.d.ts +55 -0
  109. package/dist/cjs/StdError.d.ts.map +1 -0
  110. package/dist/cjs/StdError.js +74 -0
  111. package/dist/cjs/StdError.js.map +7 -0
  112. package/dist/cjs/TestRun.d.ts +311 -0
  113. package/dist/cjs/TestRun.d.ts.map +1 -0
  114. package/dist/cjs/TestRun.js +228 -0
  115. package/dist/cjs/TestRun.js.map +7 -0
  116. package/dist/cjs/TestRunner.d.ts +102 -0
  117. package/dist/cjs/TestRunner.d.ts.map +1 -0
  118. package/dist/cjs/TestRunner.js +54 -0
  119. package/dist/cjs/TestRunner.js.map +7 -0
  120. package/dist/cjs/TreeFingerprint.d.ts +140 -0
  121. package/dist/cjs/TreeFingerprint.d.ts.map +1 -0
  122. package/dist/cjs/TreeFingerprint.js +87 -0
  123. package/dist/cjs/TreeFingerprint.js.map +7 -0
  124. package/dist/cjs/UpdatePlan.d.ts +152 -0
  125. package/dist/cjs/UpdatePlan.d.ts.map +1 -0
  126. package/dist/cjs/UpdatePlan.js +87 -0
  127. package/dist/cjs/UpdatePlan.js.map +7 -0
  128. package/dist/cjs/WebFetch.d.ts +134 -0
  129. package/dist/cjs/WebFetch.d.ts.map +1 -0
  130. package/dist/cjs/WebFetch.js +140 -0
  131. package/dist/cjs/WebFetch.js.map +7 -0
  132. package/dist/cjs/WebSearch.d.ts +181 -0
  133. package/dist/cjs/WebSearch.d.ts.map +1 -0
  134. package/dist/cjs/WebSearch.js +86 -0
  135. package/dist/cjs/WebSearch.js.map +7 -0
  136. package/dist/cjs/Write.d.ts +147 -0
  137. package/dist/cjs/Write.d.ts.map +1 -0
  138. package/dist/cjs/Write.js +122 -0
  139. package/dist/cjs/Write.js.map +7 -0
  140. package/dist/cjs/index.d.ts +129 -0
  141. package/dist/cjs/index.d.ts.map +1 -0
  142. package/dist/cjs/index.js +101 -0
  143. package/dist/cjs/index.js.map +7 -0
  144. package/dist/cjs/internal/ApplyPatch.d.ts +145 -0
  145. package/dist/cjs/internal/ApplyPatch.d.ts.map +1 -0
  146. package/dist/cjs/internal/ApplyPatch.js +462 -0
  147. package/dist/cjs/internal/ApplyPatch.js.map +7 -0
  148. package/dist/cjs/internal/CodexText.d.ts +73 -0
  149. package/dist/cjs/internal/CodexText.d.ts.map +1 -0
  150. package/dist/cjs/internal/CodexText.js +108 -0
  151. package/dist/cjs/internal/CodexText.js.map +7 -0
  152. package/dist/cjs/internal/Declaration.d.ts +49 -0
  153. package/dist/cjs/internal/Declaration.d.ts.map +1 -0
  154. package/dist/cjs/internal/Declaration.js +46 -0
  155. package/dist/cjs/internal/Declaration.js.map +7 -0
  156. package/dist/cjs/internal/Diagnostics.d.ts +77 -0
  157. package/dist/cjs/internal/Diagnostics.d.ts.map +1 -0
  158. package/dist/cjs/internal/Diagnostics.js +89 -0
  159. package/dist/cjs/internal/Diagnostics.js.map +7 -0
  160. package/dist/cjs/internal/EnvelopePrecheck.d.ts +69 -0
  161. package/dist/cjs/internal/EnvelopePrecheck.d.ts.map +1 -0
  162. package/dist/cjs/internal/EnvelopePrecheck.js +323 -0
  163. package/dist/cjs/internal/EnvelopePrecheck.js.map +7 -0
  164. package/dist/cjs/internal/Exec.d.ts +151 -0
  165. package/dist/cjs/internal/Exec.d.ts.map +1 -0
  166. package/dist/cjs/internal/Exec.js +207 -0
  167. package/dist/cjs/internal/Exec.js.map +7 -0
  168. package/dist/cjs/internal/FileMutation.d.ts +109 -0
  169. package/dist/cjs/internal/FileMutation.d.ts.map +1 -0
  170. package/dist/cjs/internal/FileMutation.js +116 -0
  171. package/dist/cjs/internal/FileMutation.js.map +7 -0
  172. package/dist/cjs/internal/FsFailure.d.ts +38 -0
  173. package/dist/cjs/internal/FsFailure.d.ts.map +1 -0
  174. package/dist/cjs/internal/FsFailure.js +40 -0
  175. package/dist/cjs/internal/FsFailure.js.map +7 -0
  176. package/dist/cjs/internal/GitWorktree.d.ts +108 -0
  177. package/dist/cjs/internal/GitWorktree.d.ts.map +1 -0
  178. package/dist/cjs/internal/GitWorktree.js +276 -0
  179. package/dist/cjs/internal/GitWorktree.js.map +7 -0
  180. package/dist/cjs/internal/Grouping.d.ts +51 -0
  181. package/dist/cjs/internal/Grouping.d.ts.map +1 -0
  182. package/dist/cjs/internal/Grouping.js +83 -0
  183. package/dist/cjs/internal/Grouping.js.map +7 -0
  184. package/dist/cjs/internal/Html.d.ts +20 -0
  185. package/dist/cjs/internal/Html.d.ts.map +1 -0
  186. package/dist/cjs/internal/Html.js +81 -0
  187. package/dist/cjs/internal/Html.js.map +7 -0
  188. package/dist/cjs/internal/Http.d.ts +95 -0
  189. package/dist/cjs/internal/Http.d.ts.map +1 -0
  190. package/dist/cjs/internal/Http.js +153 -0
  191. package/dist/cjs/internal/Http.js.map +7 -0
  192. package/dist/cjs/internal/HttpNetwork.d.ts +27 -0
  193. package/dist/cjs/internal/HttpNetwork.d.ts.map +1 -0
  194. package/dist/cjs/internal/HttpNetwork.js +146 -0
  195. package/dist/cjs/internal/HttpNetwork.js.map +7 -0
  196. package/dist/cjs/internal/Ignore.d.ts +37 -0
  197. package/dist/cjs/internal/Ignore.d.ts.map +1 -0
  198. package/dist/cjs/internal/Ignore.js +100 -0
  199. package/dist/cjs/internal/Ignore.js.map +7 -0
  200. package/dist/cjs/internal/LinearRegex.d.ts +19 -0
  201. package/dist/cjs/internal/LinearRegex.d.ts.map +1 -0
  202. package/dist/cjs/internal/LinearRegex.js +166 -0
  203. package/dist/cjs/internal/LinearRegex.js.map +7 -0
  204. package/dist/cjs/internal/Match.d.ts +85 -0
  205. package/dist/cjs/internal/Match.d.ts.map +1 -0
  206. package/dist/cjs/internal/Match.js +99 -0
  207. package/dist/cjs/internal/Match.js.map +7 -0
  208. package/dist/cjs/internal/Paths.d.ts +23 -0
  209. package/dist/cjs/internal/Paths.d.ts.map +1 -0
  210. package/dist/cjs/internal/Paths.js +52 -0
  211. package/dist/cjs/internal/Paths.js.map +7 -0
  212. package/dist/cjs/internal/Preserve.d.ts +25 -0
  213. package/dist/cjs/internal/Preserve.d.ts.map +1 -0
  214. package/dist/cjs/internal/Preserve.js +88 -0
  215. package/dist/cjs/internal/Preserve.js.map +7 -0
  216. package/dist/cjs/internal/Prune.d.ts +35 -0
  217. package/dist/cjs/internal/Prune.d.ts.map +1 -0
  218. package/dist/cjs/internal/Prune.js +54 -0
  219. package/dist/cjs/internal/Prune.js.map +7 -0
  220. package/dist/cjs/internal/RemoteTree.d.ts +60 -0
  221. package/dist/cjs/internal/RemoteTree.d.ts.map +1 -0
  222. package/dist/cjs/internal/RemoteTree.js +123 -0
  223. package/dist/cjs/internal/RemoteTree.js.map +7 -0
  224. package/dist/cjs/internal/SearchContract.d.ts +63 -0
  225. package/dist/cjs/internal/SearchContract.d.ts.map +1 -0
  226. package/dist/cjs/internal/SearchContract.js +46 -0
  227. package/dist/cjs/internal/SearchContract.js.map +7 -0
  228. package/dist/cjs/internal/Symbols.d.ts +39 -0
  229. package/dist/cjs/internal/Symbols.d.ts.map +1 -0
  230. package/dist/cjs/internal/Symbols.js +59 -0
  231. package/dist/cjs/internal/Symbols.js.map +7 -0
  232. package/dist/cjs/internal/Tar.d.ts +23 -0
  233. package/dist/cjs/internal/Tar.d.ts.map +1 -0
  234. package/dist/cjs/internal/Tar.js +86 -0
  235. package/dist/cjs/internal/Tar.js.map +7 -0
  236. package/dist/cjs/internal/TestReport.d.ts +52 -0
  237. package/dist/cjs/internal/TestReport.d.ts.map +1 -0
  238. package/dist/cjs/internal/TestReport.js +131 -0
  239. package/dist/cjs/internal/TestReport.js.map +7 -0
  240. package/dist/cjs/internal/Text.d.ts +125 -0
  241. package/dist/cjs/internal/Text.d.ts.map +1 -0
  242. package/dist/cjs/internal/Text.js +85 -0
  243. package/dist/cjs/internal/Text.js.map +7 -0
  244. package/dist/cjs/internal/Url.d.ts +13 -0
  245. package/dist/cjs/internal/Url.d.ts.map +1 -0
  246. package/dist/cjs/internal/Url.js +35 -0
  247. package/dist/cjs/internal/Url.js.map +7 -0
  248. package/dist/cjs/internal/Walk.d.ts +72 -0
  249. package/dist/cjs/internal/Walk.d.ts.map +1 -0
  250. package/dist/cjs/internal/Walk.js +108 -0
  251. package/dist/cjs/internal/Walk.js.map +7 -0
  252. package/dist/cjs/package.json +1 -0
  253. package/dist/esm/ApplyPatch.d.ts +174 -0
  254. package/dist/esm/ApplyPatch.d.ts.map +1 -0
  255. package/dist/esm/ApplyPatch.js +346 -0
  256. package/dist/esm/ApplyPatch.js.map +1 -0
  257. package/dist/esm/Bash.d.ts +390 -0
  258. package/dist/esm/Bash.d.ts.map +1 -0
  259. package/dist/esm/Bash.js +514 -0
  260. package/dist/esm/Bash.js.map +1 -0
  261. package/dist/esm/Checkpoints.d.ts +322 -0
  262. package/dist/esm/Checkpoints.d.ts.map +1 -0
  263. package/dist/esm/Checkpoints.js +396 -0
  264. package/dist/esm/Checkpoints.js.map +1 -0
  265. package/dist/esm/Container.d.ts +132 -0
  266. package/dist/esm/Container.d.ts.map +1 -0
  267. package/dist/esm/Container.js +151 -0
  268. package/dist/esm/Container.js.map +1 -0
  269. package/dist/esm/Edit.d.ts +203 -0
  270. package/dist/esm/Edit.d.ts.map +1 -0
  271. package/dist/esm/Edit.js +296 -0
  272. package/dist/esm/Edit.js.map +1 -0
  273. package/dist/esm/ExaWebSearch.d.ts +22 -0
  274. package/dist/esm/ExaWebSearch.d.ts.map +1 -0
  275. package/dist/esm/ExaWebSearch.js +107 -0
  276. package/dist/esm/ExaWebSearch.js.map +1 -0
  277. package/dist/esm/Explore.d.ts +328 -0
  278. package/dist/esm/Explore.d.ts.map +1 -0
  279. package/dist/esm/Explore.js +106 -0
  280. package/dist/esm/Explore.js.map +1 -0
  281. package/dist/esm/Fetch.d.ts +130 -0
  282. package/dist/esm/Fetch.d.ts.map +1 -0
  283. package/dist/esm/Fetch.js +91 -0
  284. package/dist/esm/Fetch.js.map +1 -0
  285. package/dist/esm/Glob.d.ts +204 -0
  286. package/dist/esm/Glob.d.ts.map +1 -0
  287. package/dist/esm/Glob.js +177 -0
  288. package/dist/esm/Glob.js.map +1 -0
  289. package/dist/esm/Grep.d.ts +347 -0
  290. package/dist/esm/Grep.d.ts.map +1 -0
  291. package/dist/esm/Grep.js +289 -0
  292. package/dist/esm/Grep.js.map +1 -0
  293. package/dist/esm/HttpPost.d.ts +130 -0
  294. package/dist/esm/HttpPost.d.ts.map +1 -0
  295. package/dist/esm/HttpPost.js +89 -0
  296. package/dist/esm/HttpPost.js.map +1 -0
  297. package/dist/esm/LanguageServer.d.ts +90 -0
  298. package/dist/esm/LanguageServer.d.ts.map +1 -0
  299. package/dist/esm/LanguageServer.js +57 -0
  300. package/dist/esm/LanguageServer.js.map +1 -0
  301. package/dist/esm/Ls.d.ts +164 -0
  302. package/dist/esm/Ls.d.ts.map +1 -0
  303. package/dist/esm/Ls.js +178 -0
  304. package/dist/esm/Ls.js.map +1 -0
  305. package/dist/esm/Lsp.d.ts +125 -0
  306. package/dist/esm/Lsp.d.ts.map +1 -0
  307. package/dist/esm/Lsp.js +165 -0
  308. package/dist/esm/Lsp.js.map +1 -0
  309. package/dist/esm/Manifest.d.ts +918 -0
  310. package/dist/esm/Manifest.d.ts.map +1 -0
  311. package/dist/esm/Manifest.js +153 -0
  312. package/dist/esm/Manifest.js.map +1 -0
  313. package/dist/esm/NativeSearch.d.ts +38 -0
  314. package/dist/esm/NativeSearch.d.ts.map +1 -0
  315. package/dist/esm/NativeSearch.js +378 -0
  316. package/dist/esm/NativeSearch.js.map +1 -0
  317. package/dist/esm/NodeLanguageServer.d.ts +128 -0
  318. package/dist/esm/NodeLanguageServer.d.ts.map +1 -0
  319. package/dist/esm/NodeLanguageServer.js +843 -0
  320. package/dist/esm/NodeLanguageServer.js.map +1 -0
  321. package/dist/esm/PortableSearch.d.ts +36 -0
  322. package/dist/esm/PortableSearch.d.ts.map +1 -0
  323. package/dist/esm/PortableSearch.js +256 -0
  324. package/dist/esm/PortableSearch.js.map +1 -0
  325. package/dist/esm/Probe.d.ts +193 -0
  326. package/dist/esm/Probe.d.ts.map +1 -0
  327. package/dist/esm/Probe.js +225 -0
  328. package/dist/esm/Probe.js.map +1 -0
  329. package/dist/esm/Read.d.ts +189 -0
  330. package/dist/esm/Read.d.ts.map +1 -0
  331. package/dist/esm/Read.js +300 -0
  332. package/dist/esm/Read.js.map +1 -0
  333. package/dist/esm/Relocate.d.ts +73 -0
  334. package/dist/esm/Relocate.d.ts.map +1 -0
  335. package/dist/esm/Relocate.js +153 -0
  336. package/dist/esm/Relocate.js.map +1 -0
  337. package/dist/esm/RemoteSearch.d.ts +54 -0
  338. package/dist/esm/RemoteSearch.d.ts.map +1 -0
  339. package/dist/esm/RemoteSearch.js +162 -0
  340. package/dist/esm/RemoteSearch.js.map +1 -0
  341. package/dist/esm/Search.d.ts +163 -0
  342. package/dist/esm/Search.d.ts.map +1 -0
  343. package/dist/esm/Search.js +47 -0
  344. package/dist/esm/Search.js.map +1 -0
  345. package/dist/esm/SearchConformance.d.ts +115 -0
  346. package/dist/esm/SearchConformance.d.ts.map +1 -0
  347. package/dist/esm/SearchConformance.js +193 -0
  348. package/dist/esm/SearchConformance.js.map +1 -0
  349. package/dist/esm/SearchContract.d.ts +114 -0
  350. package/dist/esm/SearchContract.d.ts.map +1 -0
  351. package/dist/esm/SearchContract.js +461 -0
  352. package/dist/esm/SearchContract.js.map +1 -0
  353. package/dist/esm/ShellCommand.d.ts +164 -0
  354. package/dist/esm/ShellCommand.d.ts.map +1 -0
  355. package/dist/esm/ShellCommand.js +159 -0
  356. package/dist/esm/ShellCommand.js.map +1 -0
  357. package/dist/esm/StdError.d.ts +55 -0
  358. package/dist/esm/StdError.d.ts.map +1 -0
  359. package/dist/esm/StdError.js +71 -0
  360. package/dist/esm/StdError.js.map +1 -0
  361. package/dist/esm/TestRun.d.ts +311 -0
  362. package/dist/esm/TestRun.d.ts.map +1 -0
  363. package/dist/esm/TestRun.js +316 -0
  364. package/dist/esm/TestRun.js.map +1 -0
  365. package/dist/esm/TestRunner.d.ts +102 -0
  366. package/dist/esm/TestRunner.d.ts.map +1 -0
  367. package/dist/esm/TestRunner.js +68 -0
  368. package/dist/esm/TestRunner.js.map +1 -0
  369. package/dist/esm/TreeFingerprint.d.ts +140 -0
  370. package/dist/esm/TreeFingerprint.d.ts.map +1 -0
  371. package/dist/esm/TreeFingerprint.js +170 -0
  372. package/dist/esm/TreeFingerprint.js.map +1 -0
  373. package/dist/esm/UpdatePlan.d.ts +152 -0
  374. package/dist/esm/UpdatePlan.d.ts.map +1 -0
  375. package/dist/esm/UpdatePlan.js +129 -0
  376. package/dist/esm/UpdatePlan.js.map +1 -0
  377. package/dist/esm/WebFetch.d.ts +134 -0
  378. package/dist/esm/WebFetch.d.ts.map +1 -0
  379. package/dist/esm/WebFetch.js +151 -0
  380. package/dist/esm/WebFetch.js.map +1 -0
  381. package/dist/esm/WebSearch.d.ts +181 -0
  382. package/dist/esm/WebSearch.d.ts.map +1 -0
  383. package/dist/esm/WebSearch.js +134 -0
  384. package/dist/esm/WebSearch.js.map +1 -0
  385. package/dist/esm/Write.d.ts +147 -0
  386. package/dist/esm/Write.d.ts.map +1 -0
  387. package/dist/esm/Write.js +144 -0
  388. package/dist/esm/Write.js.map +1 -0
  389. package/dist/esm/index.d.ts +129 -0
  390. package/dist/esm/index.d.ts.map +1 -0
  391. package/dist/esm/index.js +129 -0
  392. package/dist/esm/index.js.map +1 -0
  393. package/dist/esm/internal/ApplyPatch.d.ts +145 -0
  394. package/dist/esm/internal/ApplyPatch.d.ts.map +1 -0
  395. package/dist/esm/internal/ApplyPatch.js +489 -0
  396. package/dist/esm/internal/ApplyPatch.js.map +1 -0
  397. package/dist/esm/internal/CodexText.d.ts +73 -0
  398. package/dist/esm/internal/CodexText.d.ts.map +1 -0
  399. package/dist/esm/internal/CodexText.js +156 -0
  400. package/dist/esm/internal/CodexText.js.map +1 -0
  401. package/dist/esm/internal/Declaration.d.ts +49 -0
  402. package/dist/esm/internal/Declaration.d.ts.map +1 -0
  403. package/dist/esm/internal/Declaration.js +42 -0
  404. package/dist/esm/internal/Declaration.js.map +1 -0
  405. package/dist/esm/internal/Diagnostics.d.ts +77 -0
  406. package/dist/esm/internal/Diagnostics.d.ts.map +1 -0
  407. package/dist/esm/internal/Diagnostics.js +99 -0
  408. package/dist/esm/internal/Diagnostics.js.map +1 -0
  409. package/dist/esm/internal/EnvelopePrecheck.d.ts +69 -0
  410. package/dist/esm/internal/EnvelopePrecheck.d.ts.map +1 -0
  411. package/dist/esm/internal/EnvelopePrecheck.js +426 -0
  412. package/dist/esm/internal/EnvelopePrecheck.js.map +1 -0
  413. package/dist/esm/internal/Exec.d.ts +151 -0
  414. package/dist/esm/internal/Exec.d.ts.map +1 -0
  415. package/dist/esm/internal/Exec.js +285 -0
  416. package/dist/esm/internal/Exec.js.map +1 -0
  417. package/dist/esm/internal/FileMutation.d.ts +109 -0
  418. package/dist/esm/internal/FileMutation.d.ts.map +1 -0
  419. package/dist/esm/internal/FileMutation.js +123 -0
  420. package/dist/esm/internal/FileMutation.js.map +1 -0
  421. package/dist/esm/internal/FsFailure.d.ts +38 -0
  422. package/dist/esm/internal/FsFailure.d.ts.map +1 -0
  423. package/dist/esm/internal/FsFailure.js +39 -0
  424. package/dist/esm/internal/FsFailure.js.map +1 -0
  425. package/dist/esm/internal/GitWorktree.d.ts +108 -0
  426. package/dist/esm/internal/GitWorktree.d.ts.map +1 -0
  427. package/dist/esm/internal/GitWorktree.js +352 -0
  428. package/dist/esm/internal/GitWorktree.js.map +1 -0
  429. package/dist/esm/internal/Grouping.d.ts +51 -0
  430. package/dist/esm/internal/Grouping.d.ts.map +1 -0
  431. package/dist/esm/internal/Grouping.js +99 -0
  432. package/dist/esm/internal/Grouping.js.map +1 -0
  433. package/dist/esm/internal/Html.d.ts +20 -0
  434. package/dist/esm/internal/Html.d.ts.map +1 -0
  435. package/dist/esm/internal/Html.js +70 -0
  436. package/dist/esm/internal/Html.js.map +1 -0
  437. package/dist/esm/internal/Http.d.ts +95 -0
  438. package/dist/esm/internal/Http.d.ts.map +1 -0
  439. package/dist/esm/internal/Http.js +154 -0
  440. package/dist/esm/internal/Http.js.map +1 -0
  441. package/dist/esm/internal/HttpNetwork.d.ts +27 -0
  442. package/dist/esm/internal/HttpNetwork.d.ts.map +1 -0
  443. package/dist/esm/internal/HttpNetwork.js +114 -0
  444. package/dist/esm/internal/HttpNetwork.js.map +1 -0
  445. package/dist/esm/internal/Ignore.d.ts +37 -0
  446. package/dist/esm/internal/Ignore.d.ts.map +1 -0
  447. package/dist/esm/internal/Ignore.js +128 -0
  448. package/dist/esm/internal/Ignore.js.map +1 -0
  449. package/dist/esm/internal/LinearRegex.d.ts +19 -0
  450. package/dist/esm/internal/LinearRegex.d.ts.map +1 -0
  451. package/dist/esm/internal/LinearRegex.js +176 -0
  452. package/dist/esm/internal/LinearRegex.js.map +1 -0
  453. package/dist/esm/internal/Match.d.ts +85 -0
  454. package/dist/esm/internal/Match.d.ts.map +1 -0
  455. package/dist/esm/internal/Match.js +142 -0
  456. package/dist/esm/internal/Match.js.map +1 -0
  457. package/dist/esm/internal/Paths.d.ts +23 -0
  458. package/dist/esm/internal/Paths.d.ts.map +1 -0
  459. package/dist/esm/internal/Paths.js +40 -0
  460. package/dist/esm/internal/Paths.js.map +1 -0
  461. package/dist/esm/internal/Preserve.d.ts +25 -0
  462. package/dist/esm/internal/Preserve.d.ts.map +1 -0
  463. package/dist/esm/internal/Preserve.js +70 -0
  464. package/dist/esm/internal/Preserve.js.map +1 -0
  465. package/dist/esm/internal/Prune.d.ts +35 -0
  466. package/dist/esm/internal/Prune.d.ts.map +1 -0
  467. package/dist/esm/internal/Prune.js +60 -0
  468. package/dist/esm/internal/Prune.js.map +1 -0
  469. package/dist/esm/internal/RemoteTree.d.ts +60 -0
  470. package/dist/esm/internal/RemoteTree.d.ts.map +1 -0
  471. package/dist/esm/internal/RemoteTree.js +132 -0
  472. package/dist/esm/internal/RemoteTree.js.map +1 -0
  473. package/dist/esm/internal/SearchContract.d.ts +63 -0
  474. package/dist/esm/internal/SearchContract.d.ts.map +1 -0
  475. package/dist/esm/internal/SearchContract.js +66 -0
  476. package/dist/esm/internal/SearchContract.js.map +1 -0
  477. package/dist/esm/internal/Symbols.d.ts +39 -0
  478. package/dist/esm/internal/Symbols.d.ts.map +1 -0
  479. package/dist/esm/internal/Symbols.js +79 -0
  480. package/dist/esm/internal/Symbols.js.map +1 -0
  481. package/dist/esm/internal/Tar.d.ts +23 -0
  482. package/dist/esm/internal/Tar.d.ts.map +1 -0
  483. package/dist/esm/internal/Tar.js +97 -0
  484. package/dist/esm/internal/Tar.js.map +1 -0
  485. package/dist/esm/internal/TestReport.d.ts +52 -0
  486. package/dist/esm/internal/TestReport.d.ts.map +1 -0
  487. package/dist/esm/internal/TestReport.js +172 -0
  488. package/dist/esm/internal/TestReport.js.map +1 -0
  489. package/dist/esm/internal/Text.d.ts +125 -0
  490. package/dist/esm/internal/Text.d.ts.map +1 -0
  491. package/dist/esm/internal/Text.js +141 -0
  492. package/dist/esm/internal/Text.js.map +1 -0
  493. package/dist/esm/internal/Url.d.ts +13 -0
  494. package/dist/esm/internal/Url.d.ts.map +1 -0
  495. package/dist/esm/internal/Url.js +27 -0
  496. package/dist/esm/internal/Url.js.map +1 -0
  497. package/dist/esm/internal/Walk.d.ts +72 -0
  498. package/dist/esm/internal/Walk.d.ts.map +1 -0
  499. package/dist/esm/internal/Walk.js +126 -0
  500. package/dist/esm/internal/Walk.js.map +1 -0
  501. package/docs/README.md +119 -0
  502. package/docs/api.md +499 -0
  503. package/docs/concepts/effects-and-capabilities.md +138 -0
  504. package/docs/concepts/flows-and-handlers.md +115 -0
  505. package/docs/concepts/limits-and-disclosure.md +105 -0
  506. package/docs/concepts/search-contract.md +182 -0
  507. package/docs/guides/bind-the-standard-flows.md +116 -0
  508. package/docs/guides/implement-a-search-peer.md +133 -0
  509. package/docs/guides/pin-a-checkpoint.md +161 -0
  510. package/docs/guides/query-a-language-server.md +257 -0
  511. package/docs/guides/reach-the-network.md +141 -0
  512. package/docs/guides/read-and-edit-a-file.md +240 -0
  513. package/docs/guides/run-a-shell-command.md +236 -0
  514. package/docs/guides/run-the-test-suite.md +154 -0
  515. package/docs/guides/search-a-workspace.md +148 -0
  516. package/docs/installation.md +115 -0
  517. package/docs/quickstart.md +125 -0
  518. package/docs/reference/flows.md +556 -0
  519. package/docs/troubleshooting.md +347 -0
  520. package/package.json +449 -3
  521. package/src/ApplyPatch.ts +458 -0
  522. package/src/Bash.ts +619 -0
  523. package/src/Checkpoints.ts +589 -0
  524. package/src/Container.ts +212 -0
  525. package/src/Edit.ts +366 -0
  526. package/src/ExaWebSearch.ts +145 -0
  527. package/src/Explore.ts +139 -0
  528. package/src/Fetch.ts +117 -0
  529. package/src/Glob.ts +200 -0
  530. package/src/Grep.ts +320 -0
  531. package/src/HttpPost.ts +120 -0
  532. package/src/LanguageServer.ts +110 -0
  533. package/src/Ls.ts +228 -0
  534. package/src/Lsp.ts +184 -0
  535. package/src/Manifest.ts +162 -0
  536. package/src/NativeSearch.ts +457 -0
  537. package/src/NodeLanguageServer.ts +1148 -0
  538. package/src/PortableSearch.ts +284 -0
  539. package/src/Probe.ts +284 -0
  540. package/src/Read.ts +359 -0
  541. package/src/Relocate.ts +166 -0
  542. package/src/RemoteSearch.ts +199 -0
  543. package/src/Search.ts +185 -0
  544. package/src/SearchConformance.ts +288 -0
  545. package/src/SearchContract.ts +489 -0
  546. package/src/ShellCommand.ts +201 -0
  547. package/src/StdError.ts +80 -0
  548. package/src/TestRun.ts +401 -0
  549. package/src/TestRunner.ts +119 -0
  550. package/src/TreeFingerprint.ts +200 -0
  551. package/src/UpdatePlan.ts +171 -0
  552. package/src/WebFetch.ts +194 -0
  553. package/src/WebSearch.ts +165 -0
  554. package/src/Write.ts +195 -0
  555. package/src/index.ts +157 -0
  556. package/src/internal/ApplyPatch.ts +601 -0
  557. package/src/internal/CodexText.ts +182 -0
  558. package/src/internal/Declaration.ts +60 -0
  559. package/src/internal/Diagnostics.ts +134 -0
  560. package/src/internal/EnvelopePrecheck.ts +489 -0
  561. package/src/internal/Exec.ts +427 -0
  562. package/src/internal/FileMutation.ts +231 -0
  563. package/src/internal/FsFailure.ts +51 -0
  564. package/src/internal/GitWorktree.ts +491 -0
  565. package/src/internal/Grouping.ts +106 -0
  566. package/src/internal/Html.ts +87 -0
  567. package/src/internal/Http.ts +209 -0
  568. package/src/internal/HttpNetwork.ts +153 -0
  569. package/src/internal/Ignore.ts +135 -0
  570. package/src/internal/LinearRegex.ts +173 -0
  571. package/src/internal/Match.ts +172 -0
  572. package/src/internal/Paths.ts +42 -0
  573. package/src/internal/Preserve.ts +108 -0
  574. package/src/internal/Prune.ts +62 -0
  575. package/src/internal/RemoteTree.ts +159 -0
  576. package/src/internal/SearchContract.ts +77 -0
  577. package/src/internal/Symbols.ts +88 -0
  578. package/src/internal/Tar.ts +95 -0
  579. package/src/internal/TestReport.ts +194 -0
  580. package/src/internal/Text.ts +185 -0
  581. package/src/internal/Url.ts +23 -0
  582. package/src/internal/Walk.ts +176 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Html.d.ts","sourceRoot":"","sources":["../../../src/internal/Html.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgDH;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,KAAG,MAEiF,CAAA;AAEvH;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAkBzC,CAAA"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var Html_exports = {};
20
+ __export(Html_exports, {
21
+ toMarkdown: () => toMarkdown,
22
+ toText: () => toText
23
+ });
24
+ module.exports = __toCommonJS(Html_exports);
25
+ const comments = /<!--[\s\S]*?-->/g;
26
+ const entities = { amp: "&", lt: "<", gt: ">", quot: '"', apos: "'", nbsp: " " };
27
+ const dropSkipped = (html) => {
28
+ const lower = html.replace(/[A-Z]/g, (letter) => letter.toLowerCase());
29
+ const opening = /<(head|script|style|noscript|iframe|object|embed)\b/gi;
30
+ let output = "";
31
+ let cursor = 0;
32
+ let match;
33
+ while ((match = opening.exec(html)) !== null) {
34
+ output += html.slice(cursor, match.index);
35
+ const marker = `</${match[1].toLowerCase()}`;
36
+ let close = lower.indexOf(marker, opening.lastIndex);
37
+ while (close !== -1) {
38
+ let end = close + marker.length;
39
+ while (/\s/.test(lower[end] ?? "")) end++;
40
+ if (lower[end] === ">") {
41
+ cursor = end + 1;
42
+ opening.lastIndex = cursor;
43
+ break;
44
+ }
45
+ close = lower.indexOf(marker, close + marker.length);
46
+ }
47
+ if (close === -1) return output;
48
+ }
49
+ return output + html.slice(cursor);
50
+ };
51
+ const decode = (value) => value.replace(/&(#x[\da-f]+|#\d+|[a-z]+);/gi, (match, entity) => {
52
+ if (entity[0] === "#") {
53
+ const number = Number.parseInt(
54
+ entity.slice(entity[1].toLowerCase() === "x" ? 2 : 1),
55
+ entity[1].toLowerCase() === "x" ? 16 : 10
56
+ );
57
+ return number <= 1114111 && !(number >= 55296 && number <= 57343) ? String.fromCodePoint(number) : match;
58
+ }
59
+ const key = entity.toLowerCase();
60
+ return Object.hasOwn(entities, key) ? entities[key] : match;
61
+ });
62
+ const source = (html) => dropSkipped(html.replace(comments, ""));
63
+ const toText = (html) => decode(source(html).replace(/<(br|\/p|\/div|\/li|\/h[1-6]|\/tr)\b[^>]*>/gi, "\n").replace(/<[^>]*>/g, " ")).replace(/[ \t]+\n/g, "\n").replace(/\n[ \t]+/g, "\n").replace(/\n{3,}/g, "\n\n").replace(/[ \t]{2,}/g, " ").trim();
64
+ const toMarkdown = (html) => {
65
+ const markdown = source(html).replace(
66
+ /<h([1-6])\b[^>]*>([\s\S]*?)<\/h\1>/gi,
67
+ (_all, level, text) => `
68
+
69
+ ${"#".repeat(Number(level))} ${toText(text)}
70
+
71
+ `
72
+ ).replace(/<(strong|b)\b[^>]*>([\s\S]*?)<\/\1>/gi, "**$2**").replace(/<(em|i)\b[^>]*>([\s\S]*?)<\/\1>/gi, "*$2*").replace(
73
+ /<a\b[^>]*href=["']([^"']+)["'][^>]*>([\s\S]*?)<\/a>/gi,
74
+ (_all, href, text) => `[${toText(text)}](${href})`
75
+ ).replace(/<li\b[^>]*>/gi, "\n- ").replace(
76
+ /<\/?(ul|ol|p|div|section|article|main|blockquote|pre|tr)\b[^>]*>/gi,
77
+ "\n"
78
+ ).replace(/<br\b[^>]*>/gi, "\n").replace(/<[^>]*>/g, "");
79
+ return decode(markdown).replace(/[ \t]+\n/g, "\n").replace(/\n{3,}/g, "\n\n").trim();
80
+ };
81
+ //# sourceMappingURL=Html.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/Html.ts"],
4
+ "sourcesContent": ["/**\n * Small, dependency-free HTML renderers for web retrieval.\n *\n * @since 1.0.0\n */\n\nconst comments = /<!--[\\s\\S]*?-->/g\nconst entities: Readonly<Record<string, string>> = { amp: \"&\", lt: \"<\", gt: \">\", quot: \"\\\"\", apos: \"'\", nbsp: \" \" }\n\nconst dropSkipped = (html: string): string => {\n const lower = html.replace(/[A-Z]/g, (letter) => letter.toLowerCase())\n const opening = /<(head|script|style|noscript|iframe|object|embed)\\b/gi\n let output = \"\"\n let cursor = 0\n let match: RegExpExecArray | null\n while ((match = opening.exec(html)) !== null) {\n output += html.slice(cursor, match.index)\n const marker = `</${match[1]!.toLowerCase()}`\n let close = lower.indexOf(marker, opening.lastIndex)\n while (close !== -1) {\n let end = close + marker.length\n while (/\\s/.test(lower[end] ?? \"\")) end++\n if (lower[end] === \">\") {\n cursor = end + 1\n opening.lastIndex = cursor\n break\n }\n close = lower.indexOf(marker, close + marker.length)\n }\n if (close === -1) return output\n }\n return output + html.slice(cursor)\n}\n\nconst decode = (value: string): string =>\n value.replace(/&(#x[\\da-f]+|#\\d+|[a-z]+);/gi, (match, entity: string) => {\n if (entity[0] === \"#\") {\n const number = Number.parseInt(\n entity.slice(entity[1]!.toLowerCase() === \"x\" ? 2 : 1),\n entity[1]!.toLowerCase() === \"x\" ? 16 : 10\n )\n return number <= 0x10ffff\n && !(number >= 0xd800 && number <= 0xdfff)\n ? String.fromCodePoint(number)\n : match\n }\n const key = entity.toLowerCase()\n return Object.hasOwn(entities, key) ? entities[key]! : match\n })\n\nconst source = (html: string): string => dropSkipped(html.replace(comments, \"\"))\n\n/**\n * Extracts readable text while dropping executable and presentation-only elements.\n *\n * @category rendering\n * @since 1.0.0\n */\nexport const toText = (html: string): string =>\n decode(source(html).replace(/<(br|\\/p|\\/div|\\/li|\\/h[1-6]|\\/tr)\\b[^>]*>/gi, \"\\n\").replace(/<[^>]*>/g, \" \"))\n .replace(/[ \\t]+\\n/g, \"\\n\").replace(/\\n[ \\t]+/g, \"\\n\").replace(/\\n{3,}/g, \"\\n\\n\").replace(/[ \\t]{2,}/g, \" \").trim()\n\n/**\n * Converts a conservative subset of HTML into readable Markdown.\n *\n * @category rendering\n * @since 1.0.0\n */\nexport const toMarkdown = (html: string): string => {\n const markdown = source(html)\n .replace(\n /<h([1-6])\\b[^>]*>([\\s\\S]*?)<\\/h\\1>/gi,\n (_all, level: string, text: string) => `\\n\\n${\"#\".repeat(Number(level))} ${toText(text)}\\n\\n`\n )\n .replace(/<(strong|b)\\b[^>]*>([\\s\\S]*?)<\\/\\1>/gi, \"**$2**\")\n .replace(/<(em|i)\\b[^>]*>([\\s\\S]*?)<\\/\\1>/gi, \"*$2*\")\n .replace(\n /<a\\b[^>]*href=[\"']([^\"']+)[\"'][^>]*>([\\s\\S]*?)<\\/a>/gi,\n (_all, href: string, text: string) => `[${toText(text)}](${href})`\n )\n .replace(/<li\\b[^>]*>/gi, \"\\n- \").replace(\n /<\\/?(ul|ol|p|div|section|article|main|blockquote|pre|tr)\\b[^>]*>/gi,\n \"\\n\"\n )\n .replace(/<br\\b[^>]*>/gi, \"\\n\").replace(/<[^>]*>/g, \"\")\n return decode(markdown).replace(/[ \\t]+\\n/g, \"\\n\").replace(/\\n{3,}/g, \"\\n\\n\").trim()\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,MAAM,WAAW;AACjB,MAAM,WAA6C,EAAE,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,KAAM,MAAM,KAAK,MAAM,IAAI;AAElH,MAAM,cAAc,CAAC,SAAyB;AAC5C,QAAM,QAAQ,KAAK,QAAQ,UAAU,CAAC,WAAW,OAAO,YAAY,CAAC;AACrE,QAAM,UAAU;AAChB,MAAI,SAAS;AACb,MAAI,SAAS;AACb,MAAI;AACJ,UAAQ,QAAQ,QAAQ,KAAK,IAAI,OAAO,MAAM;AAC5C,cAAU,KAAK,MAAM,QAAQ,MAAM,KAAK;AACxC,UAAM,SAAS,KAAK,MAAM,CAAC,EAAG,YAAY,CAAC;AAC3C,QAAI,QAAQ,MAAM,QAAQ,QAAQ,QAAQ,SAAS;AACnD,WAAO,UAAU,IAAI;AACnB,UAAI,MAAM,QAAQ,OAAO;AACzB,aAAO,KAAK,KAAK,MAAM,GAAG,KAAK,EAAE,EAAG;AACpC,UAAI,MAAM,GAAG,MAAM,KAAK;AACtB,iBAAS,MAAM;AACf,gBAAQ,YAAY;AACpB;AAAA,MACF;AACA,cAAQ,MAAM,QAAQ,QAAQ,QAAQ,OAAO,MAAM;AAAA,IACrD;AACA,QAAI,UAAU,GAAI,QAAO;AAAA,EAC3B;AACA,SAAO,SAAS,KAAK,MAAM,MAAM;AACnC;AAEA,MAAM,SAAS,CAAC,UACd,MAAM,QAAQ,gCAAgC,CAAC,OAAO,WAAmB;AACvE,MAAI,OAAO,CAAC,MAAM,KAAK;AACrB,UAAM,SAAS,OAAO;AAAA,MACpB,OAAO,MAAM,OAAO,CAAC,EAAG,YAAY,MAAM,MAAM,IAAI,CAAC;AAAA,MACrD,OAAO,CAAC,EAAG,YAAY,MAAM,MAAM,KAAK;AAAA,IAC1C;AACA,WAAO,UAAU,WACV,EAAE,UAAU,SAAU,UAAU,SACnC,OAAO,cAAc,MAAM,IAC3B;AAAA,EACN;AACA,QAAM,MAAM,OAAO,YAAY;AAC/B,SAAO,OAAO,OAAO,UAAU,GAAG,IAAI,SAAS,GAAG,IAAK;AACzD,CAAC;AAEH,MAAM,SAAS,CAAC,SAAyB,YAAY,KAAK,QAAQ,UAAU,EAAE,CAAC;AAQxE,MAAM,SAAS,CAAC,SACrB,OAAO,OAAO,IAAI,EAAE,QAAQ,gDAAgD,IAAI,EAAE,QAAQ,YAAY,GAAG,CAAC,EACvG,QAAQ,aAAa,IAAI,EAAE,QAAQ,aAAa,IAAI,EAAE,QAAQ,WAAW,MAAM,EAAE,QAAQ,cAAc,GAAG,EAAE,KAAK;AAQ/G,MAAM,aAAa,CAAC,SAAyB;AAClD,QAAM,WAAW,OAAO,IAAI,EACzB;AAAA,IACC;AAAA,IACA,CAAC,MAAM,OAAe,SAAiB;AAAA;AAAA,EAAO,IAAI,OAAO,OAAO,KAAK,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC;AAAA;AAAA;AAAA,EACzF,EACC,QAAQ,yCAAyC,QAAQ,EACzD,QAAQ,qCAAqC,MAAM,EACnD;AAAA,IACC;AAAA,IACA,CAAC,MAAM,MAAc,SAAiB,IAAI,OAAO,IAAI,CAAC,KAAK,IAAI;AAAA,EACjE,EACC,QAAQ,iBAAiB,MAAM,EAAE;AAAA,IAChC;AAAA,IACA;AAAA,EACF,EACC,QAAQ,iBAAiB,IAAI,EAAE,QAAQ,YAAY,EAAE;AACxD,SAAO,OAAO,QAAQ,EAAE,QAAQ,aAAa,IAAI,EAAE,QAAQ,WAAW,MAAM,EAAE,KAAK;AACrF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Shared HTTP response limits, error mapping, and request deadlines.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ import type { GrantStore } from "@smthrs/kernel/GrantStore";
7
+ import * as HttpClient from "@smthrs/kernel/HttpClient";
8
+ import * as Effect from "effect/Effect";
9
+ import * as HttpClientRequest from "effect/http/HttpClientRequest";
10
+ import * as Schema from "effect/Schema";
11
+ import * as Stream from "effect/Stream";
12
+ import * as StdError from "../StdError.ts";
13
+ /**
14
+ * Maximum captured response bytes before decoding.
15
+ *
16
+ * @category http
17
+ * @since 1.0.0
18
+ */
19
+ export declare const MAX_RESPONSE_BYTES: number;
20
+ /**
21
+ * Reads a response up to the shared byte limit and finalizes the stream on failure.
22
+ *
23
+ * @category http
24
+ * @since 1.0.0
25
+ */
26
+ export declare const readBounded: <E, R>(stream: Stream.Stream<Uint8Array, E, R>, url: string) => Effect.Effect<Uint8Array, E | StdError.StdError, R>;
27
+ /**
28
+ * Maps transport failures while preserving standard HTTP failure codes.
29
+ *
30
+ * @category http
31
+ * @since 1.0.0
32
+ */
33
+ export declare const requestError: (url: string, error: unknown) => StdError.StdError;
34
+ /**
35
+ * Looks up a response header without depending on transport normalization.
36
+ *
37
+ * @category http
38
+ * @since 1.0.0
39
+ */
40
+ export declare const header: (headers: Readonly<Record<string, string | undefined>>, name: string) => string | undefined;
41
+ /**
42
+ * Seconds; the runtime caps valid overrides at 120.
43
+ *
44
+ * @category http
45
+ * @since 1.0.0
46
+ */
47
+ export declare const Timeout: Schema.Number;
48
+ /**
49
+ * Bounds the entire request and body read with one timer. Interruption reaches
50
+ * HttpClient.execute and response.stream so Effect aborts the transport and
51
+ * finalizes the body reader before returning the timeout failure.
52
+ * `timeoutError` preserves a tool's own timeout message while sharing the
53
+ * validation, duration cap, and interruption behavior.
54
+ *
55
+ * @category http
56
+ * @since 1.0.0
57
+ */
58
+ export declare const withDeadline: <A, E, R>(effect: Effect.Effect<A, E, R>, url: string, timeout?: number, timeoutError?: (seconds: number) => StdError.StdError) => Effect.Effect<A, E | StdError.StdError, R>;
59
+ /**
60
+ * Keeps the head of rendered response text within the shared output budget and
61
+ * discloses the cut.
62
+ *
63
+ * @since 1.0.0
64
+ * @private
65
+ */
66
+ export declare const capOutput: (text: string) => {
67
+ readonly text: string;
68
+ readonly truncated: boolean;
69
+ readonly notice?: string;
70
+ };
71
+ /** Shared response contract for the GET and POST tools.
72
+ * @since 1.0.0
73
+ * @private
74
+ */
75
+ export declare const Response: Schema.Struct<{
76
+ readonly status: Schema.Number;
77
+ readonly body: Schema.String;
78
+ readonly truncated: Schema.Boolean;
79
+ readonly notice: Schema.optional<Schema.String>;
80
+ }>;
81
+ /** Validate, execute, and render one bounded HTTP request.
82
+ * @since 1.0.0
83
+ * @private
84
+ */
85
+ export declare const execute: (input: {
86
+ readonly url: string;
87
+ readonly headers?: Readonly<Record<string, string>> | undefined;
88
+ readonly timeout?: number | undefined;
89
+ }, makeRequest: (url: string) => HttpClientRequest.HttpClientRequest) => Effect.Effect<{
90
+ readonly status: number;
91
+ readonly body: string;
92
+ readonly truncated: boolean;
93
+ readonly notice?: string | undefined;
94
+ }, StdError.StdError, GrantStore | HttpClient.HttpClient>;
95
+ //# sourceMappingURL=Http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Http.d.ts","sourceRoot":"","sources":["../../../src/internal/Http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,KAAK,UAAU,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,iBAAiB,MAAM,+BAA+B,CAAA;AAClE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAK1C;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,QAAkB,CAAA;AAOjD;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,CAAC,EAC9B,QAAQ,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,EACvC,KAAK,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CA6BlD,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,EAAE,OAAO,OAAO,KAAG,QAAQ,CAAC,QAIhE,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAGrG,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,eAAkE,CAAA;AAEtF;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAClC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,KAAK,MAAM,EACX,gBAAY,EACZ,eAAe,CAAC,OAAO,EAAE,MAAM,KAAK,QAAQ,CAAC,QAAQ,KACpD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAsB3C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GACpB,MAAM,MAAM,KACX;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAShF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ;;;;;EAKnB,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO;kBAEF,MAAM;uBACD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS;uBAC5C,MAAM,GAAG,SAAS;sBAEpB,MAAM,KAAK,iBAAiB,CAAC,iBAAiB;;;;;yDA2BjE,CAAA"}
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var Http_exports = {};
30
+ __export(Http_exports, {
31
+ MAX_RESPONSE_BYTES: () => MAX_RESPONSE_BYTES,
32
+ Response: () => Response,
33
+ Timeout: () => Timeout,
34
+ capOutput: () => capOutput,
35
+ execute: () => execute,
36
+ header: () => header,
37
+ readBounded: () => readBounded,
38
+ requestError: () => requestError,
39
+ withDeadline: () => withDeadline
40
+ });
41
+ module.exports = __toCommonJS(Http_exports);
42
+ var HttpClient = __toESM(require("@smthrs/kernel/HttpClient"), 1);
43
+ var Effect = __toESM(require("effect/Effect"), 1);
44
+ var HttpClientRequest = __toESM(require("effect/http/HttpClientRequest"), 1);
45
+ var Schema = __toESM(require("effect/Schema"), 1);
46
+ var Stream = __toESM(require("effect/Stream"), 1);
47
+ var StdError = __toESM(require("../StdError.js"), 1);
48
+ var import_HttpNetwork = require("./HttpNetwork.js");
49
+ var import_Text = require("./Text.js");
50
+ var import_Url = require("./Url.js");
51
+ const MAX_RESPONSE_BYTES = 5 * 1024 * 1024;
52
+ const readBounded = (stream, url) => Stream.runFoldEffect(
53
+ stream,
54
+ () => ({ chunks: [], size: 0 }),
55
+ (state, chunk) => {
56
+ const size = state.size + chunk.byteLength;
57
+ if (size > MAX_RESPONSE_BYTES) {
58
+ return Effect.fail(
59
+ new StdError.StdError({
60
+ code: "response_too_large",
61
+ message: "Response exceeds the 5 MiB limit",
62
+ path: url
63
+ })
64
+ );
65
+ }
66
+ state.chunks.push(chunk);
67
+ state.size = size;
68
+ return Effect.succeed(state);
69
+ }
70
+ ).pipe(
71
+ Effect.map((state) => {
72
+ const output = new Uint8Array(state.size);
73
+ let offset = 0;
74
+ for (const chunk of state.chunks) {
75
+ output.set(chunk, offset);
76
+ offset += chunk.byteLength;
77
+ }
78
+ return output;
79
+ })
80
+ );
81
+ const requestError = (url, error) => error instanceof StdError.StdError ? error : (0, import_HttpNetwork.refusal)(error) ?? new StdError.StdError({
82
+ code: "request_failed",
83
+ message: `Request failed: ${url}${error instanceof Error ? ` (${error.message})` : ""}`
84
+ });
85
+ const header = (headers, name) => {
86
+ const lower = name.toLowerCase();
87
+ return Object.entries(headers).find(([key]) => key.toLowerCase() === lower)?.[1];
88
+ };
89
+ const Timeout = Schema.Number.check(Schema.isFinite(), Schema.isGreaterThan(0));
90
+ const withDeadline = (effect, url, timeout = 30, timeoutError) => {
91
+ if (!Schema.is(Timeout)(timeout)) {
92
+ return Effect.fail(
93
+ new StdError.StdError({
94
+ code: "invalid_input",
95
+ message: "Timeout must be a finite number greater than zero seconds",
96
+ path: url
97
+ })
98
+ );
99
+ }
100
+ const seconds = Math.min(timeout, 120);
101
+ return Effect.timeoutOrElse(effect, {
102
+ duration: seconds * 1e3,
103
+ orElse: () => Effect.fail(
104
+ timeoutError?.(seconds) ?? new StdError.StdError({
105
+ code: "timeout",
106
+ message: `Request timed out after ${seconds} seconds`,
107
+ path: url
108
+ })
109
+ )
110
+ });
111
+ };
112
+ const capOutput = (text) => {
113
+ const rendered = (0, import_Text.truncateBytes)(text, import_Text.MAX_OUTPUT_BYTES, { keep: "head" });
114
+ return {
115
+ text: rendered.text,
116
+ truncated: rendered.truncated,
117
+ ...rendered.truncated ? { notice: (0, import_Text.notice)("bytes", rendered.keptBytes, rendered.keptBytes + rendered.droppedBytes) } : {}
118
+ };
119
+ };
120
+ const Response = Schema.Struct({
121
+ status: Schema.Number.annotate({ description: "HTTP status code, including error statuses" }),
122
+ body: Schema.String.annotate({ description: "Response body as text" }),
123
+ truncated: Schema.Boolean.annotate({ description: "Whether the body exceeded the display budget" }),
124
+ notice: Schema.optional(Schema.String.annotate({ description: "Truncation disclosure" }))
125
+ });
126
+ const execute = Effect.fn("Http.execute")(function* (input, makeRequest) {
127
+ const url = (0, import_Url.parseHttpUrl)(input.url);
128
+ if (url === void 0) {
129
+ return yield* Effect.fail(
130
+ new StdError.StdError({
131
+ code: "invalid_input",
132
+ message: `URL must use http or https without user information: ${input.url}`,
133
+ path: input.url
134
+ })
135
+ );
136
+ }
137
+ const client = (0, import_HttpNetwork.guarded)(yield* HttpClient.HttpClient);
138
+ const request = makeRequest(url.toString());
139
+ const { status, bytes } = yield* withDeadline(
140
+ Effect.gen(function* () {
141
+ const response = yield* client.execute(
142
+ input.headers === void 0 ? request : HttpClientRequest.setHeaders(request, input.headers)
143
+ );
144
+ const bytes2 = yield* readBounded(response.stream, input.url);
145
+ return { status: response.status, bytes: bytes2 };
146
+ }).pipe(Effect.mapError((error) => requestError(input.url, error))),
147
+ input.url,
148
+ input.timeout
149
+ );
150
+ const { text, ...disclosure } = capOutput(new TextDecoder().decode(bytes));
151
+ return { status, body: text, ...disclosure };
152
+ });
153
+ //# sourceMappingURL=Http.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/Http.ts"],
4
+ "sourcesContent": ["/**\n * Shared HTTP response limits, error mapping, and request deadlines.\n *\n * @since 1.0.0\n */\n\nimport type { GrantStore } from \"@smthrs/kernel/GrantStore\"\nimport * as HttpClient from \"@smthrs/kernel/HttpClient\"\nimport * as Effect from \"effect/Effect\"\nimport * as HttpClientRequest from \"effect/http/HttpClientRequest\"\nimport * as Schema from \"effect/Schema\"\nimport * as Stream from \"effect/Stream\"\nimport * as StdError from \"../StdError.ts\"\nimport { guarded, refusal } from \"./HttpNetwork.ts\"\nimport { MAX_OUTPUT_BYTES, notice, truncateBytes } from \"./Text.ts\"\nimport { parseHttpUrl } from \"./Url.ts\"\n\n/**\n * Maximum captured response bytes before decoding.\n *\n * @category http\n * @since 1.0.0\n */\nexport const MAX_RESPONSE_BYTES = 5 * 1024 * 1024\n\ninterface BodyState {\n readonly chunks: Array<Uint8Array>\n size: number\n}\n\n/**\n * Reads a response up to the shared byte limit and finalizes the stream on failure.\n *\n * @category http\n * @since 1.0.0\n */\nexport const readBounded = <E, R>(\n stream: Stream.Stream<Uint8Array, E, R>,\n url: string\n): Effect.Effect<Uint8Array, E | StdError.StdError, R> =>\n Stream.runFoldEffect(\n stream,\n (): BodyState => ({ chunks: [], size: 0 }),\n (state, chunk) => {\n const size = state.size + chunk.byteLength\n if (size > MAX_RESPONSE_BYTES) {\n return Effect.fail(\n new StdError.StdError({\n code: \"response_too_large\",\n message: \"Response exceeds the 5 MiB limit\",\n path: url\n })\n )\n }\n state.chunks.push(chunk)\n state.size = size\n return Effect.succeed(state)\n }\n ).pipe(\n Effect.map((state) => {\n const output = new Uint8Array(state.size)\n let offset = 0\n for (const chunk of state.chunks) {\n output.set(chunk, offset)\n offset += chunk.byteLength\n }\n return output\n })\n )\n\n/**\n * Maps transport failures while preserving standard HTTP failure codes.\n *\n * @category http\n * @since 1.0.0\n */\nexport const requestError = (url: string, error: unknown): StdError.StdError =>\n error instanceof StdError.StdError ? error : refusal(error) ?? new StdError.StdError({\n code: \"request_failed\",\n message: `Request failed: ${url}${error instanceof Error ? ` (${error.message})` : \"\"}`\n })\n\n/**\n * Looks up a response header without depending on transport normalization.\n *\n * @category http\n * @since 1.0.0\n */\nexport const header = (headers: Readonly<Record<string, string | undefined>>, name: string): string | undefined => {\n const lower = name.toLowerCase()\n return Object.entries(headers).find(([key]) => key.toLowerCase() === lower)?.[1]\n}\n\n/**\n * Seconds; the runtime caps valid overrides at 120.\n *\n * @category http\n * @since 1.0.0\n */\nexport const Timeout = Schema.Number.check(Schema.isFinite(), Schema.isGreaterThan(0))\n\n/**\n * Bounds the entire request and body read with one timer. Interruption reaches\n * HttpClient.execute and response.stream so Effect aborts the transport and\n * finalizes the body reader before returning the timeout failure.\n * `timeoutError` preserves a tool's own timeout message while sharing the\n * validation, duration cap, and interruption behavior.\n *\n * @category http\n * @since 1.0.0\n */\nexport const withDeadline = <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n url: string,\n timeout = 30,\n timeoutError?: (seconds: number) => StdError.StdError\n): Effect.Effect<A, E | StdError.StdError, R> => {\n if (!Schema.is(Timeout)(timeout)) {\n return Effect.fail(\n new StdError.StdError({\n code: \"invalid_input\",\n message: \"Timeout must be a finite number greater than zero seconds\",\n path: url\n })\n )\n }\n const seconds = Math.min(timeout, 120)\n return Effect.timeoutOrElse(effect, {\n duration: seconds * 1_000,\n orElse: () =>\n Effect.fail(\n timeoutError?.(seconds) ?? new StdError.StdError({\n code: \"timeout\",\n message: `Request timed out after ${seconds} seconds`,\n path: url\n })\n )\n })\n}\n\n/**\n * Keeps the head of rendered response text within the shared output budget and\n * discloses the cut.\n *\n * @since 1.0.0\n * @private\n */\nexport const capOutput = (\n text: string\n): { readonly text: string; readonly truncated: boolean; readonly notice?: string } => {\n const rendered = truncateBytes(text, MAX_OUTPUT_BYTES, { keep: \"head\" })\n return {\n text: rendered.text,\n truncated: rendered.truncated,\n ...(rendered.truncated\n ? { notice: notice(\"bytes\", rendered.keptBytes, rendered.keptBytes + rendered.droppedBytes) }\n : {})\n }\n}\n\n/** Shared response contract for the GET and POST tools.\n * @since 1.0.0\n * @private\n */\nexport const Response = Schema.Struct({\n status: Schema.Number.annotate({ description: \"HTTP status code, including error statuses\" }),\n body: Schema.String.annotate({ description: \"Response body as text\" }),\n truncated: Schema.Boolean.annotate({ description: \"Whether the body exceeded the display budget\" }),\n notice: Schema.optional(Schema.String.annotate({ description: \"Truncation disclosure\" }))\n})\n\n/** Validate, execute, and render one bounded HTTP request.\n * @since 1.0.0\n * @private\n */\nexport const execute = Effect.fn(\"Http.execute\")(function*(\n input: {\n readonly url: string\n readonly headers?: Readonly<Record<string, string>> | undefined\n readonly timeout?: number | undefined\n },\n makeRequest: (url: string) => HttpClientRequest.HttpClientRequest\n): Effect.fn.Return<typeof Response.Type, StdError.StdError, HttpClient.HttpClient | GrantStore> {\n const url = parseHttpUrl(input.url)\n if (url === undefined) {\n return yield* Effect.fail(\n new StdError.StdError({\n code: \"invalid_input\",\n message: `URL must use http or https without user information: ${input.url}`,\n path: input.url\n })\n )\n }\n const client = guarded(yield* HttpClient.HttpClient)\n const request = makeRequest(url.toString())\n const { status, bytes } = yield* withDeadline(\n Effect.gen(function*() {\n const response = yield* client.execute(\n input.headers === undefined ? request : HttpClientRequest.setHeaders(request, input.headers)\n )\n const bytes = yield* readBounded(response.stream, input.url)\n return { status: response.status, bytes }\n }).pipe(Effect.mapError((error) => requestError(input.url, error))),\n input.url,\n input.timeout\n )\n const { text, ...disclosure } = capOutput(new TextDecoder().decode(bytes))\n return { status, body: text, ...disclosure }\n})\n"],
5
+ "mappings": "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",
6
+ "names": ["bytes"]
7
+ }
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Destination policy shared by the web tools, including every redirect hop.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ import { GrantStore } from "@smthrs/kernel/GrantStore";
7
+ import { Context, Effect } from "effect";
8
+ import * as HttpClient from "effect/http/HttpClient";
9
+ import * as HttpClientError from "effect/http/HttpClientError";
10
+ import * as StdError from "../StdError.ts";
11
+ /** Resolver seam: all addresses must be public before an unprivileged request.
12
+ * @since 1.0.0
13
+ * @private
14
+ */
15
+ export declare const ResolveHost: Context.Reference<(hostname: string) => Effect.Effect<ReadonlyArray<string>, unknown>>;
16
+ /** Decorates the supplied client before following redirects through the guard.
17
+ * The transport must honor manual redirects, as required by the kernel client.
18
+ * @since 1.0.0
19
+ * @private
20
+ */
21
+ export declare const guarded: (client: HttpClient.HttpClient, follow?: boolean) => HttpClient.HttpClient.With<HttpClientError.HttpClientError, GrantStore>;
22
+ /** Recovers the typed refusal carried through Effect's HTTP error channel.
23
+ * @since 1.0.0
24
+ * @private
25
+ */
26
+ export declare const refusal: (error: unknown) => StdError.StdError | undefined;
27
+ //# sourceMappingURL=HttpNetwork.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HttpNetwork.d.ts","sourceRoot":"","sources":["../../../src/internal/HttpNetwork.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAOtD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AAEhD,OAAO,KAAK,UAAU,MAAM,wBAAwB,CAAA;AACpD,OAAO,KAAK,eAAe,MAAM,6BAA6B,CAAA;AAG9D,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAG1C;;;GAGG;AACH,eAAO,MAAM,WAAW,+BACX,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAInE,CAAA;AAwEF;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAClB,QAAQ,UAAU,CAAC,UAAU,EAC7B,gBAAa,KACZ,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,UAAU,CAuBxE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,QAAQ,CAAC,QAAQ,GAAG,SAW5D,CAAA"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var HttpNetwork_exports = {};
30
+ __export(HttpNetwork_exports, {
31
+ ResolveHost: () => ResolveHost,
32
+ guarded: () => guarded,
33
+ refusal: () => refusal
34
+ });
35
+ module.exports = __toCommonJS(HttpNetwork_exports);
36
+ var Capability = __toESM(require("@smthrs/capability/Capability"), 1);
37
+ var import_GrantStore = require("@smthrs/kernel/GrantStore");
38
+ var import_HttpClient = require("@smthrs/kernel/HttpClient");
39
+ var import_effect = require("effect");
40
+ var FetchHttpClient = __toESM(require("effect/http/FetchHttpClient"), 1);
41
+ var HttpClient = __toESM(require("effect/http/HttpClient"), 1);
42
+ var HttpClientError = __toESM(require("effect/http/HttpClientError"), 1);
43
+ var import_promises = require("node:dns/promises");
44
+ var import_node_net = require("node:net");
45
+ var StdError = __toESM(require("../StdError.js"), 1);
46
+ var import_Url = require("./Url.js");
47
+ const ResolveHost = import_effect.Context.Reference("@smthrs/std/HttpNetwork/ResolveHost", {
48
+ defaultValue: () => (hostname) => import_effect.Effect.tryPromise(async () => (await (0, import_promises.lookup)(hostname, { all: true })).map((a) => a.address))
49
+ });
50
+ const blocked = new import_node_net.BlockList();
51
+ for (const [address, prefix] of [
52
+ ["0.0.0.0", 8],
53
+ ["10.0.0.0", 8],
54
+ ["127.0.0.0", 8],
55
+ ["169.254.0.0", 16],
56
+ ["172.16.0.0", 12],
57
+ ["192.168.0.0", 16],
58
+ ["192.0.0.0", 24],
59
+ ["100.64.0.0", 10],
60
+ ["198.18.0.0", 15],
61
+ ["224.0.0.0", 4],
62
+ ["240.0.0.0", 4]
63
+ ]) blocked.addSubnet(address, prefix, "ipv4");
64
+ const publicV6 = new import_node_net.BlockList();
65
+ publicV6.addSubnet("2000::", 3, "ipv6");
66
+ publicV6.addSubnet("::ffff:0:0", 96, "ipv6");
67
+ blocked.addSubnet("2002::", 16, "ipv6");
68
+ blocked.addSubnet("2001::", 32, "ipv6");
69
+ const isPublic = (address) => {
70
+ const family = (0, import_node_net.isIP)(address);
71
+ if (family === 4) return !blocked.check(address, "ipv4");
72
+ return family === 6 && publicV6.check(address, "ipv6") && !blocked.check(address, "ipv6");
73
+ };
74
+ const failure = (code, message, path) => new StdError.StdError({ code, message, path });
75
+ const check = import_effect.Effect.fn("HttpNetwork.check")(function* (value, client) {
76
+ const url = (0, import_Url.parseHttpUrl)(value);
77
+ if (url === void 0) {
78
+ return yield* import_effect.Effect.fail(failure("invalid_input", "URL must use http or https without user information", value));
79
+ }
80
+ if (!(0, import_HttpClient.supportsDestinationPinning)(client)) {
81
+ return yield* import_effect.Effect.fail(failure("unsupported", "HTTP host must support destination pinning", value));
82
+ }
83
+ const hostname = url.hostname.replace(/^\[|\]$/g, "");
84
+ const local = hostname.replace(/\.$/, "").toLowerCase();
85
+ const literal = (0, import_node_net.isIP)(hostname) !== 0;
86
+ const localhost = local === "localhost" || local.endsWith(".localhost");
87
+ const resolve = yield* ResolveHost;
88
+ const privateGrant = import_effect.Effect.gen(function* () {
89
+ const store = yield* import_GrantStore.GrantStore;
90
+ const capability = yield* import_effect.Effect.try({
91
+ try: () => Capability.make("net:private", url.origin),
92
+ catch: () => failure("invalid_input", "Private HTTP origin exceeds the capability resource limit", value)
93
+ });
94
+ yield* store.check(capability).pipe(
95
+ import_effect.Effect.mapError(
96
+ () => failure("permission_denied", "Private HTTP destination requires a net:private grant", value)
97
+ )
98
+ );
99
+ });
100
+ if (localhost) yield* privateGrant;
101
+ const addresses = literal ? [hostname] : [
102
+ ...yield* resolve(hostname).pipe(
103
+ import_effect.Effect.mapError(() => failure("request_failed", "Could not resolve HTTP destination", value))
104
+ )
105
+ ];
106
+ if (addresses.length === 0 || addresses.some((address) => (0, import_node_net.isIP)(address) === 0)) {
107
+ return yield* import_effect.Effect.fail(failure("request_failed", "HTTP destination has no valid addresses", value));
108
+ }
109
+ if (!localhost && !addresses.every(isPublic)) yield* privateGrant;
110
+ return Object.freeze({ origin: url.origin, addresses: Object.freeze(addresses) });
111
+ });
112
+ const guarded = (client, follow = true) => {
113
+ const checked = HttpClient.transform(
114
+ client,
115
+ (execute, request) => (0, import_HttpClient.authorizePreflight)(
116
+ request,
117
+ check(request.url, client).pipe(
118
+ import_effect.Effect.mapError(
119
+ (cause) => new HttpClientError.HttpClientError({
120
+ reason: new HttpClientError.TransportError({ request, cause, description: cause.message })
121
+ })
122
+ ),
123
+ import_effect.Effect.flatMap(
124
+ (destination) => import_effect.Effect.updateContext(execute, (context) => import_effect.Context.add(import_effect.Context.add(context, import_HttpClient.Destination, destination), FetchHttpClient.RequestInit, {
125
+ ...import_effect.Context.getOrUndefined(context, FetchHttpClient.RequestInit),
126
+ redirect: "manual"
127
+ }))
128
+ )
129
+ )
130
+ )
131
+ );
132
+ return follow ? HttpClient.followRedirects(checked) : checked;
133
+ };
134
+ const refusal = (error) => {
135
+ if (!(error instanceof HttpClientError.HttpClientError) || error.reason._tag !== "TransportError") return void 0;
136
+ if (error.reason.cause instanceof StdError.StdError) return error.reason.cause;
137
+ if (import_effect.Option.isSome((0, import_HttpClient.fromHttpClientError)(error))) {
138
+ return failure(
139
+ "permission_denied",
140
+ error.reason.description ?? "HTTP permission was refused",
141
+ error.reason.request.url
142
+ );
143
+ }
144
+ return void 0;
145
+ };
146
+ //# sourceMappingURL=HttpNetwork.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/HttpNetwork.ts"],
4
+ "sourcesContent": ["/**\n * Destination policy shared by the web tools, including every redirect hop.\n *\n * @since 1.0.0\n */\n\nimport * as Capability from \"@smthrs/capability/Capability\"\nimport { GrantStore } from \"@smthrs/kernel/GrantStore\"\nimport {\n authorizePreflight,\n Destination,\n fromHttpClientError,\n supportsDestinationPinning\n} from \"@smthrs/kernel/HttpClient\"\nimport { Context, Effect, Option } from \"effect\"\nimport * as FetchHttpClient from \"effect/http/FetchHttpClient\"\nimport * as HttpClient from \"effect/http/HttpClient\"\nimport * as HttpClientError from \"effect/http/HttpClientError\"\nimport { lookup } from \"node:dns/promises\"\nimport { BlockList, isIP } from \"node:net\"\nimport * as StdError from \"../StdError.ts\"\nimport { parseHttpUrl } from \"./Url.ts\"\n\n/** Resolver seam: all addresses must be public before an unprivileged request.\n * @since 1.0.0\n * @private\n */\nexport const ResolveHost = Context.Reference<\n (hostname: string) => Effect.Effect<ReadonlyArray<string>, unknown>\n>(\"@smthrs/std/HttpNetwork/ResolveHost\", {\n defaultValue: () => (hostname) =>\n Effect.tryPromise(async () => (await lookup(hostname, { all: true })).map((a) => a.address))\n})\n\nconst blocked = new BlockList()\nfor (\n const [address, prefix] of [\n [\"0.0.0.0\", 8],\n [\"10.0.0.0\", 8],\n [\"127.0.0.0\", 8],\n [\"169.254.0.0\", 16],\n [\"172.16.0.0\", 12],\n [\"192.168.0.0\", 16],\n [\"192.0.0.0\", 24],\n [\"100.64.0.0\", 10],\n [\"198.18.0.0\", 15],\n [\"224.0.0.0\", 4],\n [\"240.0.0.0\", 4]\n ] as const\n) blocked.addSubnet(address, prefix, \"ipv4\")\n// Allow global IPv6 and mapped IPv4 only, excluding transition tunnels.\nconst publicV6 = new BlockList()\npublicV6.addSubnet(\"2000::\", 3, \"ipv6\")\npublicV6.addSubnet(\"::ffff:0:0\", 96, \"ipv6\")\nblocked.addSubnet(\"2002::\", 16, \"ipv6\")\nblocked.addSubnet(\"2001::\", 32, \"ipv6\")\n\nconst isPublic = (address: string): boolean => {\n const family = isIP(address)\n if (family === 4) return !blocked.check(address, \"ipv4\")\n return family === 6 && publicV6.check(address, \"ipv6\") && !blocked.check(address, \"ipv6\")\n}\n\nconst failure = (code: StdError.Code, message: string, path: string) => new StdError.StdError({ code, message, path })\n\nconst check = Effect.fn(\"HttpNetwork.check\")(function*(value: string, client: HttpClient.HttpClient) {\n const url = parseHttpUrl(value)\n if (url === undefined) {\n return yield* Effect.fail(failure(\"invalid_input\", \"URL must use http or https without user information\", value))\n }\n if (!supportsDestinationPinning(client)) {\n return yield* Effect.fail(failure(\"unsupported\", \"HTTP host must support destination pinning\", value))\n }\n const hostname = url.hostname.replace(/^\\[|\\]$/g, \"\")\n const local = hostname.replace(/\\.$/, \"\").toLowerCase()\n const literal = isIP(hostname) !== 0\n const localhost = local === \"localhost\" || local.endsWith(\".localhost\")\n const resolve = yield* ResolveHost\n // Refuse localhost before DNS unless the origin is explicitly authorized.\n const privateGrant = Effect.gen(function*() {\n const store = yield* GrantStore\n const capability = yield* Effect.try({\n try: () => Capability.make(\"net:private\", url.origin),\n catch: () => failure(\"invalid_input\", \"Private HTTP origin exceeds the capability resource limit\", value)\n })\n yield* store.check(capability).pipe(\n Effect.mapError(() =>\n failure(\"permission_denied\", \"Private HTTP destination requires a net:private grant\", value)\n )\n )\n })\n if (localhost) yield* privateGrant\n const addresses = literal ? [hostname] : [\n ...yield* resolve(hostname).pipe(\n Effect.mapError(() => failure(\"request_failed\", \"Could not resolve HTTP destination\", value))\n )\n ]\n if (addresses.length === 0 || addresses.some((address) => isIP(address) === 0)) {\n return yield* Effect.fail(failure(\"request_failed\", \"HTTP destination has no valid addresses\", value))\n }\n if (!localhost && !addresses.every(isPublic)) yield* privateGrant\n return Object.freeze({ origin: url.origin, addresses: Object.freeze(addresses) })\n})\n\n/** Decorates the supplied client before following redirects through the guard.\n * The transport must honor manual redirects, as required by the kernel client.\n * @since 1.0.0\n * @private\n */\nexport const guarded = (\n client: HttpClient.HttpClient,\n follow = true\n): HttpClient.HttpClient.With<HttpClientError.HttpClientError, GrantStore> => {\n const checked = HttpClient.transform(\n client,\n (execute, request) =>\n authorizePreflight(\n request,\n check(request.url, client).pipe(\n Effect.mapError((cause) =>\n new HttpClientError.HttpClientError({\n reason: new HttpClientError.TransportError({ request, cause, description: cause.message })\n })\n ),\n Effect.flatMap((destination) =>\n Effect.updateContext(execute, (context: Context.Context<never>) =>\n Context.add(Context.add(context, Destination, destination), FetchHttpClient.RequestInit, {\n ...Context.getOrUndefined(context, FetchHttpClient.RequestInit),\n redirect: \"manual\"\n }))\n )\n )\n )\n )\n return follow ? HttpClient.followRedirects(checked) : checked\n}\n\n/** Recovers the typed refusal carried through Effect's HTTP error channel.\n * @since 1.0.0\n * @private\n */\nexport const refusal = (error: unknown): StdError.StdError | undefined => {\n if (!(error instanceof HttpClientError.HttpClientError) || error.reason._tag !== \"TransportError\") return undefined\n if (error.reason.cause instanceof StdError.StdError) return error.reason.cause\n if (Option.isSome(fromHttpClientError(error))) {\n return failure(\n \"permission_denied\",\n error.reason.description ?? \"HTTP permission was refused\",\n error.reason.request.url\n )\n }\n return undefined\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Root-scoped gitignore rules, compiled once per visited directory.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ interface Rule {
7
+ readonly expression: RegExp;
8
+ readonly directoryOnly: boolean;
9
+ readonly negated: boolean;
10
+ readonly byPath: boolean;
11
+ }
12
+ /**
13
+ * Rules belonging to one visited directory.
14
+ *
15
+ * @private
16
+ * @since 1.0.0
17
+ */
18
+ export interface Scope {
19
+ readonly directory: string;
20
+ readonly rules: ReadonlyArray<Rule>;
21
+ }
22
+ /**
23
+ * Parses gitignore lines without widening the caller-glob grammar.
24
+ *
25
+ * @private
26
+ * @since 1.0.0
27
+ */
28
+ export declare const parse: (directory: string, content: string) => Scope;
29
+ /**
30
+ * Tests an entry before descent; deeper scopes and later rules take priority.
31
+ *
32
+ * @private
33
+ * @since 1.0.0
34
+ */
35
+ export declare const ignored: (scopes: ReadonlyArray<Scope>, candidate: string, basename: string, directory: boolean, relative: (from: string, to: string) => string) => boolean;
36
+ export {};
37
+ //# sourceMappingURL=Ignore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Ignore.d.ts","sourceRoot":"","sources":["../../../src/internal/Ignore.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,UAAU,IAAI;IACZ,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB;AAED;;;;;GAKG;AACH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;CACpC;AAyDD;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,WAAW,MAAM,EAAE,SAAS,MAAM,KAAG,KAqB1D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAClB,QAAQ,aAAa,CAAC,KAAK,CAAC,EAC5B,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,WAAW,OAAO,EAClB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,KAC7C,OAYF,CAAA"}