@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,99 @@
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 Match_exports = {};
20
+ __export(Match_exports, {
21
+ hunk: () => hunk,
22
+ lineAt: () => lineAt,
23
+ locate: () => locate,
24
+ nearest: () => nearest
25
+ });
26
+ module.exports = __toCommonJS(Match_exports);
27
+ var import_Text = require("./Text.js");
28
+ const lineAt = (content, offset) => {
29
+ let line = 1;
30
+ for (let index = 0; index < offset && index < content.length; index++) {
31
+ if (content[index] === "\n") line++;
32
+ }
33
+ return line;
34
+ };
35
+ const locate = (content, needle) => {
36
+ const found = [];
37
+ let cursor = content.indexOf(needle);
38
+ let line = 1;
39
+ let scanned = 0;
40
+ while (cursor >= 0) {
41
+ for (let index = scanned; index < cursor; index++) {
42
+ if (content[index] === "\n") line++;
43
+ }
44
+ scanned = cursor;
45
+ const startLine = line;
46
+ let endLine = line;
47
+ for (let index = 0; index < needle.length - 1; index++) {
48
+ if (needle[index] === "\n") endLine++;
49
+ }
50
+ found.push({ start: cursor, end: cursor + needle.length, startLine, endLine });
51
+ cursor = content.indexOf(needle, cursor + needle.length);
52
+ }
53
+ return found;
54
+ };
55
+ const trimmedRight = (line) => line.replace(/[ \t]+$/, "");
56
+ const collapsed = (line) => line.replace(/[ \t]+/g, " ").trim();
57
+ const matchByLine = (haystack, wanted, normalize) => {
58
+ const target = wanted.map(normalize);
59
+ const normalized = haystack.map(normalize);
60
+ for (let index = 0; index + target.length <= haystack.length; index++) {
61
+ let matched = true;
62
+ for (let step = 0; step < target.length; step++) {
63
+ if (normalized[index + step] !== target[step]) {
64
+ matched = false;
65
+ break;
66
+ }
67
+ }
68
+ if (matched) return index;
69
+ }
70
+ return -1;
71
+ };
72
+ const nearest = (content, needle, pad = 3) => {
73
+ const haystack = (0, import_Text.sourceLines)(content);
74
+ const wanted = [...(0, import_Text.sourceLines)(needle)];
75
+ while (wanted.length > 0 && wanted[wanted.length - 1] === "") wanted.pop();
76
+ if (wanted.length === 0) return void 0;
77
+ let at = matchByLine(haystack, wanted, trimmedRight);
78
+ let span = wanted.length;
79
+ if (at < 0) at = matchByLine(haystack, wanted, collapsed);
80
+ if (at < 0) {
81
+ const anchor = wanted.map(collapsed).find((line) => line !== "");
82
+ if (anchor === void 0) return void 0;
83
+ at = haystack.findIndex((line) => collapsed(line) === anchor);
84
+ span = 1;
85
+ }
86
+ if (at < 0) return void 0;
87
+ const from = Math.max(0, at - pad);
88
+ const to = Math.min(haystack.length, at + span + pad);
89
+ return { startLine: from + 1, endLine: to, text: haystack.slice(from, to).join("\n") };
90
+ };
91
+ const hunk = (content, start, end, pad = 2) => {
92
+ const startLine = lineAt(content, start);
93
+ const endLine = startLine + Math.max(0, content.slice(start, end).split("\n").length - 1);
94
+ const haystack = (0, import_Text.sourceLines)(content);
95
+ const from = Math.max(0, startLine - 1 - pad);
96
+ const to = Math.min(haystack.length, endLine + pad);
97
+ return { startLine: from + 1, endLine: to, text: haystack.slice(from, to).join("\n") };
98
+ };
99
+ //# sourceMappingURL=Match.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/Match.ts"],
4
+ "sourcesContent": ["/**\n * Exact block location, and the pre-image reported when it misses.\n *\n * The editing flows locate a caller's block byte-exactly and refuse everything\n * else. The tolerant cascade this module used to apply \u2014 trailing-whitespace\n * insensitive, then inner-whitespace collapsed \u2014 is gone from the *apply* path,\n * because a match that is not the caller's bytes is an edit the caller never\n * inspected: on django-11490 a sixteen-space anchor matched inside a\n * twenty-space line and silently dedented a guard, and on sympy-15380 a\n * \"successful\" fuzzy apply corrupted the file it reported editing. Prior art is\n * `reference/opencode`'s replacer cascade (`tool/edit.ts`), and this is where we\n * deviate from it deliberately.\n *\n * The cascade survives as *diagnosis*. A miss is only expensive when it is\n * silent: the agent re-reads, re-guesses, and re-misses. {@link nearest} runs\n * the same loose strategies to find where the caller's block actually sits and\n * returns that region's real bytes and line range, so the failing cell can\n * re-anchor from reality inside the same frame rather than buying another one.\n *\n * @since 1.0.0\n */\n\nimport { sourceLines } from \"./Text.ts\"\n\n/**\n * One located block: the exact source span the needle matched.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface Located {\n readonly start: number\n readonly end: number\n readonly startLine: number\n readonly endLine: number\n}\n\n/**\n * The real file region nearest a needle that did not match.\n *\n * `text` is raw file bytes, never line-number prefixed, so a caller can quote it\n * back as an anchor without editing it first.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface Nearest {\n readonly startLine: number\n readonly endLine: number\n readonly text: string\n}\n\n/**\n * The 1-based line a byte offset falls on.\n *\n * @category matching\n * @since 1.0.0\n */\nexport const lineAt = (content: string, offset: number): number => {\n let line = 1\n for (let index = 0; index < offset && index < content.length; index++) {\n if (content[index] === \"\\n\") line++\n }\n return line\n}\n\n/**\n * Every byte-exact occurrence of `needle` in `content`.\n *\n * @category matching\n * @since 1.0.0\n */\nexport const locate = (content: string, needle: string): ReadonlyArray<Located> => {\n const found: Array<Located> = []\n let cursor = content.indexOf(needle)\n let line = 1\n let scanned = 0\n while (cursor >= 0) {\n for (let index = scanned; index < cursor; index++) {\n if (content[index] === \"\\n\") line++\n }\n scanned = cursor\n const startLine = line\n let endLine = line\n for (let index = 0; index < needle.length - 1; index++) {\n if (needle[index] === \"\\n\") endLine++\n }\n found.push({ start: cursor, end: cursor + needle.length, startLine, endLine })\n // Resume past the match, not one byte into it. A caller replaces these spans\n // in order, so overlapping occurrences are not separately replaceable: in\n // \"aaa\" the anchor \"aa\" is reported once, because consuming the first\n // occurrence leaves no second one. Scanning by one byte instead reported\n // both, and the splice wrote the replacement over bytes the first span\n // already owned.\n cursor = content.indexOf(needle, cursor + needle.length)\n }\n return found\n}\n\nconst trimmedRight = (line: string): string => line.replace(/[ \\t]+$/, \"\")\n\nconst collapsed = (line: string): string => line.replace(/[ \\t]+/g, \" \").trim()\n\nconst matchByLine = (\n haystack: ReadonlyArray<string>,\n wanted: ReadonlyArray<string>,\n normalize: (line: string) => string\n): number => {\n const target = wanted.map(normalize)\n const normalized = haystack.map(normalize)\n for (let index = 0; index + target.length <= haystack.length; index++) {\n let matched = true\n for (let step = 0; step < target.length; step++) {\n if (normalized[index + step] !== target[step]) {\n matched = false\n break\n }\n }\n if (matched) return index\n }\n return -1\n}\n\n/**\n * The real region a failed needle was aiming at, with its line range.\n *\n * The loose strategies run in order \u2014 trailing whitespace, then collapsed inner\n * whitespace, then the needle's first non-blank line alone \u2014 and the first that\n * locates a region wins. `undefined` means not even one line of the needle\n * occurs in the file, which is itself the answer: this is the wrong file.\n *\n * @category matching\n * @since 1.0.0\n */\nexport const nearest = (content: string, needle: string, pad = 3): Nearest | undefined => {\n const haystack = sourceLines(content)\n const wanted = [...sourceLines(needle)]\n while (wanted.length > 0 && wanted[wanted.length - 1] === \"\") wanted.pop()\n if (wanted.length === 0) return undefined\n let at = matchByLine(haystack, wanted, trimmedRight)\n let span = wanted.length\n if (at < 0) at = matchByLine(haystack, wanted, collapsed)\n if (at < 0) {\n const anchor = wanted.map(collapsed).find((line) => line !== \"\")\n if (anchor === undefined) return undefined\n at = haystack.findIndex((line) => collapsed(line) === anchor)\n span = 1\n }\n if (at < 0) return undefined\n const from = Math.max(0, at - pad)\n const to = Math.min(haystack.length, at + span + pad)\n return { startLine: from + 1, endLine: to, text: haystack.slice(from, to).join(\"\\n\") }\n}\n\n/**\n * The applied region rendered back for inspection: raw bytes, plus its range.\n *\n * A bad edit is only expensive when it is invisible. sphinx-7233 lost its\n * verdict to an in-cell string surgery that captured an `else` branch, and the\n * model never saw the hunk it had written.\n *\n * @category matching\n * @since 1.0.0\n */\nexport const hunk = (content: string, start: number, end: number, pad = 2): Nearest => {\n const startLine = lineAt(content, start)\n const endLine = startLine + Math.max(0, content.slice(start, end).split(\"\\n\").length - 1)\n const haystack = sourceLines(content)\n const from = Math.max(0, startLine - 1 - pad)\n const to = Math.min(haystack.length, endLine + pad)\n return { startLine: from + 1, endLine: to, text: haystack.slice(from, to).join(\"\\n\") }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBA,kBAA4B;AAoCrB,MAAM,SAAS,CAAC,SAAiB,WAA2B;AACjE,MAAI,OAAO;AACX,WAAS,QAAQ,GAAG,QAAQ,UAAU,QAAQ,QAAQ,QAAQ,SAAS;AACrE,QAAI,QAAQ,KAAK,MAAM,KAAM;AAAA,EAC/B;AACA,SAAO;AACT;AAQO,MAAM,SAAS,CAAC,SAAiB,WAA2C;AACjF,QAAM,QAAwB,CAAC;AAC/B,MAAI,SAAS,QAAQ,QAAQ,MAAM;AACnC,MAAI,OAAO;AACX,MAAI,UAAU;AACd,SAAO,UAAU,GAAG;AAClB,aAAS,QAAQ,SAAS,QAAQ,QAAQ,SAAS;AACjD,UAAI,QAAQ,KAAK,MAAM,KAAM;AAAA,IAC/B;AACA,cAAU;AACV,UAAM,YAAY;AAClB,QAAI,UAAU;AACd,aAAS,QAAQ,GAAG,QAAQ,OAAO,SAAS,GAAG,SAAS;AACtD,UAAI,OAAO,KAAK,MAAM,KAAM;AAAA,IAC9B;AACA,UAAM,KAAK,EAAE,OAAO,QAAQ,KAAK,SAAS,OAAO,QAAQ,WAAW,QAAQ,CAAC;AAO7E,aAAS,QAAQ,QAAQ,QAAQ,SAAS,OAAO,MAAM;AAAA,EACzD;AACA,SAAO;AACT;AAEA,MAAM,eAAe,CAAC,SAAyB,KAAK,QAAQ,WAAW,EAAE;AAEzE,MAAM,YAAY,CAAC,SAAyB,KAAK,QAAQ,WAAW,GAAG,EAAE,KAAK;AAE9E,MAAM,cAAc,CAClB,UACA,QACA,cACW;AACX,QAAM,SAAS,OAAO,IAAI,SAAS;AACnC,QAAM,aAAa,SAAS,IAAI,SAAS;AACzC,WAAS,QAAQ,GAAG,QAAQ,OAAO,UAAU,SAAS,QAAQ,SAAS;AACrE,QAAI,UAAU;AACd,aAAS,OAAO,GAAG,OAAO,OAAO,QAAQ,QAAQ;AAC/C,UAAI,WAAW,QAAQ,IAAI,MAAM,OAAO,IAAI,GAAG;AAC7C,kBAAU;AACV;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAS,QAAO;AAAA,EACtB;AACA,SAAO;AACT;AAaO,MAAM,UAAU,CAAC,SAAiB,QAAgB,MAAM,MAA2B;AACxF,QAAM,eAAW,yBAAY,OAAO;AACpC,QAAM,SAAS,CAAC,OAAG,yBAAY,MAAM,CAAC;AACtC,SAAO,OAAO,SAAS,KAAK,OAAO,OAAO,SAAS,CAAC,MAAM,GAAI,QAAO,IAAI;AACzE,MAAI,OAAO,WAAW,EAAG,QAAO;AAChC,MAAI,KAAK,YAAY,UAAU,QAAQ,YAAY;AACnD,MAAI,OAAO,OAAO;AAClB,MAAI,KAAK,EAAG,MAAK,YAAY,UAAU,QAAQ,SAAS;AACxD,MAAI,KAAK,GAAG;AACV,UAAM,SAAS,OAAO,IAAI,SAAS,EAAE,KAAK,CAAC,SAAS,SAAS,EAAE;AAC/D,QAAI,WAAW,OAAW,QAAO;AACjC,SAAK,SAAS,UAAU,CAAC,SAAS,UAAU,IAAI,MAAM,MAAM;AAC5D,WAAO;AAAA,EACT;AACA,MAAI,KAAK,EAAG,QAAO;AACnB,QAAM,OAAO,KAAK,IAAI,GAAG,KAAK,GAAG;AACjC,QAAM,KAAK,KAAK,IAAI,SAAS,QAAQ,KAAK,OAAO,GAAG;AACpD,SAAO,EAAE,WAAW,OAAO,GAAG,SAAS,IAAI,MAAM,SAAS,MAAM,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;AACvF;AAYO,MAAM,OAAO,CAAC,SAAiB,OAAe,KAAa,MAAM,MAAe;AACrF,QAAM,YAAY,OAAO,SAAS,KAAK;AACvC,QAAM,UAAU,YAAY,KAAK,IAAI,GAAG,QAAQ,MAAM,OAAO,GAAG,EAAE,MAAM,IAAI,EAAE,SAAS,CAAC;AACxF,QAAM,eAAW,yBAAY,OAAO;AACpC,QAAM,OAAO,KAAK,IAAI,GAAG,YAAY,IAAI,GAAG;AAC5C,QAAM,KAAK,KAAK,IAAI,SAAS,QAAQ,UAAU,GAAG;AAClD,SAAO,EAAE,WAAW,OAAO,GAAG,SAAS,IAAI,MAAM,SAAS,MAAM,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;AACvF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Path containment checks against a declared effect envelope.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ /**
7
+ * Whether a path is covered by any entry of a declared read or write set.
8
+ *
9
+ * An entry covers itself, everything beneath it when it names a directory,
10
+ * and everything matched by the prefix-glob subset `/core` supports.
11
+ *
12
+ * @category predicates
13
+ * @since 1.0.0
14
+ */
15
+ export declare const withinEnvelope: (declared: ReadonlyArray<string>, path: string) => boolean;
16
+ /**
17
+ * A path without its trailing slashes, so a root compares and joins as one name.
18
+ *
19
+ * @category conversions
20
+ * @since 1.0.0
21
+ */
22
+ export declare const withoutTrailingSlash: (path: string) => string;
23
+ //# sourceMappingURL=Paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Paths.d.ts","sourceRoot":"","sources":["../../../src/internal/Paths.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GAAI,UAAU,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,KAAG,OAS9E,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,MAAM,MAAM,KAAG,MAAkC,CAAA"}
@@ -0,0 +1,52 @@
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 Paths_exports = {};
30
+ __export(Paths_exports, {
31
+ withinEnvelope: () => withinEnvelope,
32
+ withoutTrailingSlash: () => withoutTrailingSlash
33
+ });
34
+ module.exports = __toCommonJS(Paths_exports);
35
+ var Effects = __toESM(require("@smthrs/core/Effects"), 1);
36
+ const normalize = (path) => {
37
+ const collapsed = path.replace(/\/+/g, "/");
38
+ return collapsed.length > 1 ? collapsed.replace(/\/+$/, "") : collapsed;
39
+ };
40
+ const hasDotSegment = (path) => path.split("/").some((segment) => segment === "." || segment === "..");
41
+ const withinEnvelope = (declared, path) => {
42
+ const candidate = normalize(path);
43
+ if (candidate === "" || hasDotSegment(candidate)) return false;
44
+ return declared.some((entry) => {
45
+ const normalized = normalize(entry);
46
+ if (normalized === "") return false;
47
+ const envelope = normalized === "/" ? "/**" : normalized;
48
+ return Effects.covers(envelope, candidate) || candidate.startsWith(`${normalized}/`);
49
+ });
50
+ };
51
+ const withoutTrailingSlash = (path) => path.replace(/\/+$/, "");
52
+ //# sourceMappingURL=Paths.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/Paths.ts"],
4
+ "sourcesContent": ["/**\n * Path containment checks against a declared effect envelope.\n *\n * @since 1.0.0\n */\n\nimport * as Effects from \"@smthrs/core/Effects\"\n\nconst normalize = (path: string): string => {\n const collapsed = path.replace(/\\/+/g, \"/\")\n return collapsed.length > 1 ? collapsed.replace(/\\/+$/, \"\") : collapsed\n}\n\nconst hasDotSegment = (path: string): boolean => path.split(\"/\").some((segment) => segment === \".\" || segment === \"..\")\n\n/**\n * Whether a path is covered by any entry of a declared read or write set.\n *\n * An entry covers itself, everything beneath it when it names a directory,\n * and everything matched by the prefix-glob subset `/core` supports.\n *\n * @category predicates\n * @since 1.0.0\n */\nexport const withinEnvelope = (declared: ReadonlyArray<string>, path: string): boolean => {\n const candidate = normalize(path)\n if (candidate === \"\" || hasDotSegment(candidate)) return false\n return declared.some((entry) => {\n const normalized = normalize(entry)\n if (normalized === \"\") return false\n const envelope = normalized === \"/\" ? \"/**\" : normalized\n return Effects.covers(envelope, candidate) || candidate.startsWith(`${normalized}/`)\n })\n}\n\n/**\n * A path without its trailing slashes, so a root compares and joins as one name.\n *\n * @category conversions\n * @since 1.0.0\n */\nexport const withoutTrailingSlash = (path: string): string => path.replace(/\\/+$/, \"\")\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,cAAyB;AAEzB,MAAM,YAAY,CAAC,SAAyB;AAC1C,QAAM,YAAY,KAAK,QAAQ,QAAQ,GAAG;AAC1C,SAAO,UAAU,SAAS,IAAI,UAAU,QAAQ,QAAQ,EAAE,IAAI;AAChE;AAEA,MAAM,gBAAgB,CAAC,SAA0B,KAAK,MAAM,GAAG,EAAE,KAAK,CAAC,YAAY,YAAY,OAAO,YAAY,IAAI;AAW/G,MAAM,iBAAiB,CAAC,UAAiC,SAA0B;AACxF,QAAM,YAAY,UAAU,IAAI;AAChC,MAAI,cAAc,MAAM,cAAc,SAAS,EAAG,QAAO;AACzD,SAAO,SAAS,KAAK,CAAC,UAAU;AAC9B,UAAM,aAAa,UAAU,KAAK;AAClC,QAAI,eAAe,GAAI,QAAO;AAC9B,UAAM,WAAW,eAAe,MAAM,QAAQ;AAC9C,WAAO,QAAQ,OAAO,UAAU,SAAS,KAAK,UAAU,WAAW,GAAG,UAAU,GAAG;AAAA,EACrF,CAAC;AACH;AAQO,MAAM,uBAAuB,CAAC,SAAyB,KAAK,QAAQ,QAAQ,EAAE;",
6
+ "names": []
7
+ }
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Per-file atomic replacement that preserves permission bits and ownership.
3
+ * The sibling is complete before rename; no crash-durability guarantee is made.
4
+ * A file whose owner this process cannot assign is rewritten in place instead.
5
+ *
6
+ * @since 1.0.0
7
+ */
8
+ import * as Effect from "effect/Effect";
9
+ import type * as FileSystem from "effect/FileSystem";
10
+ import type * as PlatformError from "effect/PlatformError";
11
+ /**
12
+ * Replaces a file's text atomically, preserving its permission bits and owner.
13
+ *
14
+ * @category filesystem
15
+ * @since 1.0.0
16
+ */
17
+ export declare const writeFileString: (fileSystem: FileSystem.FileSystem, path: string, content: string) => Effect.Effect<void, PlatformError.PlatformError>;
18
+ /**
19
+ * Replaces a file's bytes with the same atomic boundary used for text writes.
20
+ *
21
+ * @category filesystem
22
+ * @since 1.0.0
23
+ */
24
+ export declare const writeFile: (fileSystem: FileSystem.FileSystem, path: string, content: Uint8Array) => Effect.Effect<void, PlatformError.PlatformError>;
25
+ //# sourceMappingURL=Preserve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Preserve.d.ts","sourceRoot":"","sources":["../../../src/internal/Preserve.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAEpD,OAAO,KAAK,KAAK,aAAa,MAAM,sBAAsB,CAAA;AAI1D;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAC1B,YAAY,UAAU,CAAC,UAAU,EACjC,MAAM,MAAM,EACZ,SAAS,MAAM,KACd,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,aAAa,CAC8D,CAAA;AAEhH;;;;;GAKG;AACH,eAAO,MAAM,SAAS,GACpB,YAAY,UAAU,CAAC,UAAU,EACjC,MAAM,MAAM,EACZ,SAAS,UAAU,KAClB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,aAAa,CAAC,aAAa,CACwD,CAAA"}
@@ -0,0 +1,88 @@
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 Preserve_exports = {};
30
+ __export(Preserve_exports, {
31
+ writeFile: () => writeFile,
32
+ writeFileString: () => writeFileString
33
+ });
34
+ module.exports = __toCommonJS(Preserve_exports);
35
+ var Effect = __toESM(require("effect/Effect"), 1);
36
+ var Option = __toESM(require("effect/Option"), 1);
37
+ const permissions = 4095;
38
+ const writeFileString = (fileSystem, path, content) => replace(fileSystem, path, (target, flag, mode) => fileSystem.writeFileString(target, content, { flag, mode }));
39
+ const writeFile = (fileSystem, path, content) => replace(fileSystem, path, (target, flag, mode) => fileSystem.writeFile(target, content, { flag, mode }));
40
+ const replace = (fileSystem, path, write) => Effect.gen(function* () {
41
+ const before = yield* fileSystem.stat(path).pipe(
42
+ Effect.catch((error) => error.reason._tag === "NotFound" ? Effect.succeed(void 0) : Effect.fail(error))
43
+ );
44
+ const destination = before === void 0 ? path : yield* fileSystem.realPath(path);
45
+ const temporary = destination.replace(/[^/\\]+$/, `.smithers-${globalThis.crypto.randomUUID()}.tmp`);
46
+ let owned = true;
47
+ let inPlace = false;
48
+ yield* Effect.uninterruptibleMask(
49
+ (restore) => Effect.gen(function* () {
50
+ yield* write(temporary, "wx", before === void 0 ? void 0 : before.mode & permissions).pipe(
51
+ Effect.tapError(
52
+ (error) => Effect.sync(() => {
53
+ if (error.reason._tag === "AlreadyExists") owned = false;
54
+ })
55
+ )
56
+ );
57
+ yield* restore(Effect.gen(function* () {
58
+ if (before === void 0) return;
59
+ const after = yield* fileSystem.stat(temporary);
60
+ const uid = Option.getOrUndefined(before.uid);
61
+ const gid = Option.getOrUndefined(before.gid);
62
+ const ownerChanged = uid !== void 0 && uid !== Option.getOrUndefined(after.uid) || gid !== void 0 && gid !== Option.getOrUndefined(after.gid);
63
+ if (ownerChanged) {
64
+ const chowned = yield* fileSystem.chown(temporary, uid ?? -1, gid ?? -1).pipe(
65
+ Effect.as(true),
66
+ Effect.catch(
67
+ (error) => error.reason._tag === "PermissionDenied" ? Effect.succeed(false) : Effect.fail(error)
68
+ )
69
+ );
70
+ if (!chowned) {
71
+ inPlace = true;
72
+ return;
73
+ }
74
+ }
75
+ if (ownerChanged || (after.mode & permissions) !== (before.mode & permissions)) {
76
+ yield* fileSystem.chmod(temporary, before.mode & permissions);
77
+ }
78
+ }));
79
+ if (!inPlace) yield* fileSystem.rename(temporary, destination);
80
+ }).pipe(
81
+ Effect.ensuring(
82
+ Effect.suspend(() => owned ? fileSystem.remove(temporary, { force: true }).pipe(Effect.orDie) : Effect.void)
83
+ )
84
+ )
85
+ );
86
+ if (inPlace) yield* write(destination, "w", void 0);
87
+ });
88
+ //# sourceMappingURL=Preserve.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/Preserve.ts"],
4
+ "sourcesContent": ["/**\n * Per-file atomic replacement that preserves permission bits and ownership.\n * The sibling is complete before rename; no crash-durability guarantee is made.\n * A file whose owner this process cannot assign is rewritten in place instead.\n *\n * @since 1.0.0\n */\n\nimport * as Effect from \"effect/Effect\"\nimport type * as FileSystem from \"effect/FileSystem\"\nimport * as Option from \"effect/Option\"\nimport type * as PlatformError from \"effect/PlatformError\"\n\nconst permissions = 0o7777\n\n/**\n * Replaces a file's text atomically, preserving its permission bits and owner.\n *\n * @category filesystem\n * @since 1.0.0\n */\nexport const writeFileString = (\n fileSystem: FileSystem.FileSystem,\n path: string,\n content: string\n): Effect.Effect<void, PlatformError.PlatformError> =>\n replace(fileSystem, path, (target, flag, mode) => fileSystem.writeFileString(target, content, { flag, mode }))\n\n/**\n * Replaces a file's bytes with the same atomic boundary used for text writes.\n *\n * @category filesystem\n * @since 1.0.0\n */\nexport const writeFile = (\n fileSystem: FileSystem.FileSystem,\n path: string,\n content: Uint8Array\n): Effect.Effect<void, PlatformError.PlatformError> =>\n replace(fileSystem, path, (target, flag, mode) => fileSystem.writeFile(target, content, { flag, mode }))\n\nconst replace = (\n fileSystem: FileSystem.FileSystem,\n path: string,\n write: (\n target: string,\n flag: \"wx\" | \"w\",\n mode: number | undefined\n ) => Effect.Effect<void, PlatformError.PlatformError>\n): Effect.Effect<void, PlatformError.PlatformError> =>\n Effect.gen(function*() {\n const before = yield* fileSystem.stat(path).pipe(\n Effect.catch((error) => error.reason._tag === \"NotFound\" ? Effect.succeed(undefined) : Effect.fail(error))\n )\n // Keep following an existing symlink, as an in-place write did.\n const destination = before === undefined ? path : yield* fileSystem.realPath(path)\n const temporary = destination.replace(/[^/\\\\]+$/, `.smithers-${globalThis.crypto.randomUUID()}.tmp`)\n let owned = true\n // Set when the sibling cannot take the file's owner; see the chown below.\n let inPlace = false\n yield* Effect.uninterruptibleMask((restore) =>\n Effect.gen(function*() {\n // Let the host finish its write before cancellation can unlink the name.\n yield* write(temporary, \"wx\", before === undefined ? undefined : before.mode & permissions).pipe(\n Effect.tapError((error) =>\n Effect.sync(() => {\n if (error.reason._tag === \"AlreadyExists\") owned = false\n })\n )\n )\n yield* restore(Effect.gen(function*() {\n if (before === undefined) return\n const after = yield* fileSystem.stat(temporary)\n const uid = Option.getOrUndefined(before.uid)\n const gid = Option.getOrUndefined(before.gid)\n const ownerChanged = (uid !== undefined && uid !== Option.getOrUndefined(after.uid)) ||\n (gid !== undefined && gid !== Option.getOrUndefined(after.gid))\n if (ownerChanged) {\n // Only root may give a file away. A writable file owned by another\n // user (a shared checkout, a bind mount) cannot be replaced by a\n // sibling this process owns without changing its owner, so it is\n // rewritten in place instead: same inode, owner, and mode, at the\n // cost of atomicity.\n const chowned = yield* fileSystem.chown(temporary, uid ?? -1, gid ?? -1).pipe(\n Effect.as(true),\n Effect.catch((error) =>\n error.reason._tag === \"PermissionDenied\" ? Effect.succeed(false) : Effect.fail(error)\n )\n )\n if (!chowned) {\n inPlace = true\n return\n }\n }\n // chown may clear set-id bits, so permissions are restored last.\n if (ownerChanged || (after.mode & permissions) !== (before.mode & permissions)) {\n yield* fileSystem.chmod(temporary, before.mode & permissions)\n }\n }))\n if (!inPlace) yield* fileSystem.rename(temporary, destination)\n }).pipe(\n Effect.ensuring(\n Effect.suspend(() => owned ? fileSystem.remove(temporary, { force: true }).pipe(Effect.orDie) : Effect.void)\n )\n )\n )\n if (inPlace) yield* write(destination, \"w\", undefined)\n })\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQA,aAAwB;AAExB,aAAwB;AAGxB,MAAM,cAAc;AAQb,MAAM,kBAAkB,CAC7B,YACA,MACA,YAEA,QAAQ,YAAY,MAAM,CAAC,QAAQ,MAAM,SAAS,WAAW,gBAAgB,QAAQ,SAAS,EAAE,MAAM,KAAK,CAAC,CAAC;AAQxG,MAAM,YAAY,CACvB,YACA,MACA,YAEA,QAAQ,YAAY,MAAM,CAAC,QAAQ,MAAM,SAAS,WAAW,UAAU,QAAQ,SAAS,EAAE,MAAM,KAAK,CAAC,CAAC;AAEzG,MAAM,UAAU,CACd,YACA,MACA,UAMA,OAAO,IAAI,aAAY;AACrB,QAAM,SAAS,OAAO,WAAW,KAAK,IAAI,EAAE;AAAA,IAC1C,OAAO,MAAM,CAAC,UAAU,MAAM,OAAO,SAAS,aAAa,OAAO,QAAQ,MAAS,IAAI,OAAO,KAAK,KAAK,CAAC;AAAA,EAC3G;AAEA,QAAM,cAAc,WAAW,SAAY,OAAO,OAAO,WAAW,SAAS,IAAI;AACjF,QAAM,YAAY,YAAY,QAAQ,YAAY,aAAa,WAAW,OAAO,WAAW,CAAC,MAAM;AACnG,MAAI,QAAQ;AAEZ,MAAI,UAAU;AACd,SAAO,OAAO;AAAA,IAAoB,CAAC,YACjC,OAAO,IAAI,aAAY;AAErB,aAAO,MAAM,WAAW,MAAM,WAAW,SAAY,SAAY,OAAO,OAAO,WAAW,EAAE;AAAA,QAC1F,OAAO;AAAA,UAAS,CAAC,UACf,OAAO,KAAK,MAAM;AAChB,gBAAI,MAAM,OAAO,SAAS,gBAAiB,SAAQ;AAAA,UACrD,CAAC;AAAA,QACH;AAAA,MACF;AACA,aAAO,QAAQ,OAAO,IAAI,aAAY;AACpC,YAAI,WAAW,OAAW;AAC1B,cAAM,QAAQ,OAAO,WAAW,KAAK,SAAS;AAC9C,cAAM,MAAM,OAAO,eAAe,OAAO,GAAG;AAC5C,cAAM,MAAM,OAAO,eAAe,OAAO,GAAG;AAC5C,cAAM,eAAgB,QAAQ,UAAa,QAAQ,OAAO,eAAe,MAAM,GAAG,KAC/E,QAAQ,UAAa,QAAQ,OAAO,eAAe,MAAM,GAAG;AAC/D,YAAI,cAAc;AAMhB,gBAAM,UAAU,OAAO,WAAW,MAAM,WAAW,OAAO,IAAI,OAAO,EAAE,EAAE;AAAA,YACvE,OAAO,GAAG,IAAI;AAAA,YACd,OAAO;AAAA,cAAM,CAAC,UACZ,MAAM,OAAO,SAAS,qBAAqB,OAAO,QAAQ,KAAK,IAAI,OAAO,KAAK,KAAK;AAAA,YACtF;AAAA,UACF;AACA,cAAI,CAAC,SAAS;AACZ,sBAAU;AACV;AAAA,UACF;AAAA,QACF;AAEA,YAAI,iBAAiB,MAAM,OAAO,kBAAkB,OAAO,OAAO,cAAc;AAC9E,iBAAO,WAAW,MAAM,WAAW,OAAO,OAAO,WAAW;AAAA,QAC9D;AAAA,MACF,CAAC,CAAC;AACF,UAAI,CAAC,QAAS,QAAO,WAAW,OAAO,WAAW,WAAW;AAAA,IAC/D,CAAC,EAAE;AAAA,MACD,OAAO;AAAA,QACL,OAAO,QAAQ,MAAM,QAAQ,WAAW,OAAO,WAAW,EAAE,OAAO,KAAK,CAAC,EAAE,KAAK,OAAO,KAAK,IAAI,OAAO,IAAI;AAAA,MAC7G;AAAA,IACF;AAAA,EACF;AACA,MAAI,QAAS,QAAO,MAAM,aAAa,KAAK,MAAS;AACvD,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,35 @@
1
+ /**
2
+ * The one list of directory names a repository walk leaves out.
3
+ *
4
+ * `grep`, `glob` and `ls` walks, the tree fingerprint, and workspace
5
+ * observation all read this list, so a directory one of them skips is never
6
+ * counted, matched, or fingerprinted by another. Every entry is derived state:
7
+ * version-control internals, dependency trees, caches, and the scratch
8
+ * checkouts the checkpoint and test-baseline flows create inside the
9
+ * workspace. A scratch checkout is a full copy of the repository at an older
10
+ * commit, so walking it duplicates every match from a stale tree.
11
+ *
12
+ * @since 1.0.0
13
+ */
14
+ /**
15
+ * Workspace-relative directory holding checkpoint checkouts.
16
+ *
17
+ * @private
18
+ * @since 1.0.0
19
+ */
20
+ export declare const checkpointScratch = ".flows-checkpoints";
21
+ /**
22
+ * Workspace-relative directory holding test-baseline checkouts.
23
+ *
24
+ * @private
25
+ * @since 1.0.0
26
+ */
27
+ export declare const testBaseScratch = ".flows-test-base";
28
+ /**
29
+ * Directory basenames no repository walk descends into.
30
+ *
31
+ * @private
32
+ * @since 1.0.0
33
+ */
34
+ export declare const repositoryDirectories: ReadonlyArray<string>;
35
+ //# sourceMappingURL=Prune.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Prune.d.ts","sourceRoot":"","sources":["../../../src/internal/Prune.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,uBAAuB,CAAA;AAErD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,qBAAqB,CAAA;AAEjD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC,MAAM,CAyBvD,CAAA"}
@@ -0,0 +1,54 @@
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 Prune_exports = {};
20
+ __export(Prune_exports, {
21
+ checkpointScratch: () => checkpointScratch,
22
+ repositoryDirectories: () => repositoryDirectories,
23
+ testBaseScratch: () => testBaseScratch
24
+ });
25
+ module.exports = __toCommonJS(Prune_exports);
26
+ const checkpointScratch = ".flows-checkpoints";
27
+ const testBaseScratch = ".flows-test-base";
28
+ const repositoryDirectories = [
29
+ ".git",
30
+ ".hg",
31
+ ".jj",
32
+ ".svn",
33
+ ".flows",
34
+ ".artifacts",
35
+ ".backend-go-modcache",
36
+ ".pnpm-store",
37
+ ".worktrees",
38
+ "worktrees",
39
+ checkpointScratch,
40
+ testBaseScratch,
41
+ "node_modules",
42
+ "__pycache__",
43
+ ".venv",
44
+ ".tox",
45
+ ".nox",
46
+ ".eggs",
47
+ ".mypy_cache",
48
+ ".pytest_cache",
49
+ ".ruff_cache",
50
+ ".gradle",
51
+ ".turbo",
52
+ ".next"
53
+ ];
54
+ //# sourceMappingURL=Prune.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/Prune.ts"],
4
+ "sourcesContent": ["/**\n * The one list of directory names a repository walk leaves out.\n *\n * `grep`, `glob` and `ls` walks, the tree fingerprint, and workspace\n * observation all read this list, so a directory one of them skips is never\n * counted, matched, or fingerprinted by another. Every entry is derived state:\n * version-control internals, dependency trees, caches, and the scratch\n * checkouts the checkpoint and test-baseline flows create inside the\n * workspace. A scratch checkout is a full copy of the repository at an older\n * commit, so walking it duplicates every match from a stale tree.\n *\n * @since 1.0.0\n */\n\n/**\n * Workspace-relative directory holding checkpoint checkouts.\n *\n * @private\n * @since 1.0.0\n */\nexport const checkpointScratch = \".flows-checkpoints\"\n\n/**\n * Workspace-relative directory holding test-baseline checkouts.\n *\n * @private\n * @since 1.0.0\n */\nexport const testBaseScratch = \".flows-test-base\"\n\n/**\n * Directory basenames no repository walk descends into.\n *\n * @private\n * @since 1.0.0\n */\nexport const repositoryDirectories: ReadonlyArray<string> = [\n \".git\",\n \".hg\",\n \".jj\",\n \".svn\",\n \".flows\",\n \".artifacts\",\n \".backend-go-modcache\",\n \".pnpm-store\",\n \".worktrees\",\n \"worktrees\",\n checkpointScratch,\n testBaseScratch,\n \"node_modules\",\n \"__pycache__\",\n \".venv\",\n \".tox\",\n \".nox\",\n \".eggs\",\n \".mypy_cache\",\n \".pytest_cache\",\n \".ruff_cache\",\n \".gradle\",\n \".turbo\",\n \".next\"\n]\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBO,MAAM,oBAAoB;AAQ1B,MAAM,kBAAkB;AAQxB,MAAM,wBAA+C;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,63 @@
1
+ /**
2
+ * The failure constructors and the literal escape both Search peers share.
3
+ *
4
+ * The validation and matching rules themselves are public, in
5
+ * `../SearchContract.ts`, because an external peer has to build on them. What
6
+ * is left here is what an external peer never calls: the three `StdError`
7
+ * shapes the contract fails with, the root-failure mapping, and the regex escape a fixed-string search
8
+ * applies before compiling.
9
+ *
10
+ * @since 1.0.0
11
+ */
12
+ import type * as PlatformError from "effect/PlatformError";
13
+ import * as StdError from "../StdError.ts";
14
+ /**
15
+ * Constructs the common unsupported-pattern failure.
16
+ *
17
+ * @private
18
+ * @since 1.0.0
19
+ */
20
+ export declare const invalidPattern: (pattern: string, detail: string) => StdError.StdError;
21
+ /**
22
+ * How every rejection {@link invalidPattern} writes begins.
23
+ *
24
+ * @private
25
+ * @since 1.0.0
26
+ */
27
+ export declare const rejectionPrefix = "Unsupported ripgrep pattern ";
28
+ /**
29
+ * Constructs the common invalid-options failure.
30
+ *
31
+ * @private
32
+ * @since 1.0.0
33
+ */
34
+ export declare const invalidInput: (detail: string) => StdError.StdError;
35
+ /**
36
+ * Constructs the common missing-root failure.
37
+ *
38
+ * @private
39
+ * @since 1.0.0
40
+ */
41
+ export declare const notFound: (path: string) => StdError.StdError;
42
+ /**
43
+ * Maps a failure to inspect the search root onto the contract's failures.
44
+ *
45
+ * Only a root that does not exist is `not_found`. Every other reason a stat
46
+ * or listing can fail (a guarded host that fails closed, a permission the
47
+ * process lacks, an I/O error) is a host operation failing, and it is
48
+ * reported as `command_failed` with the platform's own message, so the
49
+ * caller reads the real cause instead of a missing-path claim about a path
50
+ * that exists.
51
+ *
52
+ * @private
53
+ * @since 1.0.0
54
+ */
55
+ export declare const rootFailure: (path: string, error: PlatformError.PlatformError) => StdError.StdError;
56
+ /**
57
+ * Escapes literal text for JavaScript regular expressions.
58
+ *
59
+ * @private
60
+ * @since 1.0.0
61
+ */
62
+ export declare const escapeRegex: (value: string) => string;
63
+ //# sourceMappingURL=SearchContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchContract.d.ts","sourceRoot":"","sources":["../../../src/internal/SearchContract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,KAAK,aAAa,MAAM,sBAAsB,CAAA;AAC1D,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,SAAS,MAAM,EAAE,QAAQ,MAAM,KAAG,QAAQ,CAAC,QACgC,CAAA;AAE1G;;;;;GAKG;AACH,eAAO,MAAM,eAAe,iCAAiC,CAAA;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,KAAG,QAAQ,CAAC,QAC0C,CAAA;AAEjG;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,KAAG,QAAQ,CAAC,QACuC,CAAA;AAExF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,OAAO,aAAa,CAAC,aAAa,KAAG,QAAQ,CAAC,QAKyB,CAAA;AAEjH;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,MAAsD,CAAA"}
@@ -0,0 +1,46 @@
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 SearchContract_exports = {};
30
+ __export(SearchContract_exports, {
31
+ escapeRegex: () => escapeRegex,
32
+ invalidInput: () => invalidInput,
33
+ invalidPattern: () => invalidPattern,
34
+ notFound: () => notFound,
35
+ rejectionPrefix: () => rejectionPrefix,
36
+ rootFailure: () => rootFailure
37
+ });
38
+ module.exports = __toCommonJS(SearchContract_exports);
39
+ var StdError = __toESM(require("../StdError.js"), 1);
40
+ const invalidPattern = (pattern, detail) => new StdError.StdError({ code: "invalid_pattern", message: `${rejectionPrefix}"${pattern}": ${detail}` });
41
+ const rejectionPrefix = "Unsupported ripgrep pattern ";
42
+ const invalidInput = (detail) => new StdError.StdError({ code: "invalid_input", message: `Invalid ripgrep options: ${detail}` });
43
+ const notFound = (path) => new StdError.StdError({ code: "not_found", message: `Path not found: ${path}`, path });
44
+ const rootFailure = (path, error) => error.reason._tag === "NotFound" ? notFound(path) : error.reason._tag === "PermissionDenied" ? new StdError.StdError({ code: "permission_denied", message: `Cannot search ${path}: ${error.message}`, path }) : new StdError.StdError({ code: "command_failed", message: `Cannot search ${path}: ${error.message}`, path });
45
+ const escapeRegex = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
46
+ //# sourceMappingURL=SearchContract.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/SearchContract.ts"],
4
+ "sourcesContent": ["/**\n * The failure constructors and the literal escape both Search peers share.\n *\n * The validation and matching rules themselves are public, in\n * `../SearchContract.ts`, because an external peer has to build on them. What\n * is left here is what an external peer never calls: the three `StdError`\n * shapes the contract fails with, the root-failure mapping, and the regex escape a fixed-string search\n * applies before compiling.\n *\n * @since 1.0.0\n */\n\nimport type * as PlatformError from \"effect/PlatformError\"\nimport * as StdError from \"../StdError.ts\"\n\n/**\n * Constructs the common unsupported-pattern failure.\n *\n * @private\n * @since 1.0.0\n */\nexport const invalidPattern = (pattern: string, detail: string): StdError.StdError =>\n new StdError.StdError({ code: \"invalid_pattern\", message: `${rejectionPrefix}\"${pattern}\": ${detail}` })\n\n/**\n * How every rejection {@link invalidPattern} writes begins.\n *\n * @private\n * @since 1.0.0\n */\nexport const rejectionPrefix = \"Unsupported ripgrep pattern \"\n\n/**\n * Constructs the common invalid-options failure.\n *\n * @private\n * @since 1.0.0\n */\nexport const invalidInput = (detail: string): StdError.StdError =>\n new StdError.StdError({ code: \"invalid_input\", message: `Invalid ripgrep options: ${detail}` })\n\n/**\n * Constructs the common missing-root failure.\n *\n * @private\n * @since 1.0.0\n */\nexport const notFound = (path: string): StdError.StdError =>\n new StdError.StdError({ code: \"not_found\", message: `Path not found: ${path}`, path })\n\n/**\n * Maps a failure to inspect the search root onto the contract's failures.\n *\n * Only a root that does not exist is `not_found`. Every other reason a stat\n * or listing can fail (a guarded host that fails closed, a permission the\n * process lacks, an I/O error) is a host operation failing, and it is\n * reported as `command_failed` with the platform's own message, so the\n * caller reads the real cause instead of a missing-path claim about a path\n * that exists.\n *\n * @private\n * @since 1.0.0\n */\nexport const rootFailure = (path: string, error: PlatformError.PlatformError): StdError.StdError =>\n error.reason._tag === \"NotFound\"\n ? notFound(path)\n : error.reason._tag === \"PermissionDenied\"\n ? new StdError.StdError({ code: \"permission_denied\", message: `Cannot search ${path}: ${error.message}`, path })\n : new StdError.StdError({ code: \"command_failed\", message: `Cannot search ${path}: ${error.message}`, path })\n\n/**\n * Escapes literal text for JavaScript regular expressions.\n *\n * @private\n * @since 1.0.0\n */\nexport const escapeRegex = (value: string): string => value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\")\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaA,eAA0B;AAQnB,MAAM,iBAAiB,CAAC,SAAiB,WAC9C,IAAI,SAAS,SAAS,EAAE,MAAM,mBAAmB,SAAS,GAAG,eAAe,IAAI,OAAO,MAAM,MAAM,GAAG,CAAC;AAQlG,MAAM,kBAAkB;AAQxB,MAAM,eAAe,CAAC,WAC3B,IAAI,SAAS,SAAS,EAAE,MAAM,iBAAiB,SAAS,4BAA4B,MAAM,GAAG,CAAC;AAQzF,MAAM,WAAW,CAAC,SACvB,IAAI,SAAS,SAAS,EAAE,MAAM,aAAa,SAAS,mBAAmB,IAAI,IAAI,KAAK,CAAC;AAehF,MAAM,cAAc,CAAC,MAAc,UACxC,MAAM,OAAO,SAAS,aAClB,SAAS,IAAI,IACb,MAAM,OAAO,SAAS,qBACtB,IAAI,SAAS,SAAS,EAAE,MAAM,qBAAqB,SAAS,iBAAiB,IAAI,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,IAC7G,IAAI,SAAS,SAAS,EAAE,MAAM,kBAAkB,SAAS,iBAAiB,IAAI,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC;AAQzG,MAAM,cAAc,CAAC,UAA0B,MAAM,QAAQ,uBAAuB,MAAM;",
6
+ "names": []
7
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * The definition a line sits inside, read off the file's own shape.
3
+ *
4
+ * A search hit is a line number, and a line number is not a read window. Agents
5
+ * guess one: `offset: line - 10, limit: 40`, which lands short (astropy-15569
6
+ * missed `get_lookup` by one line and probed the wrong binding) or long (six
7
+ * blind-offset reads on sympy-13878). The enclosing definition is the window the
8
+ * hit actually belongs to, and for indentation- and brace-structured source it
9
+ * is derivable from the text already in hand.
10
+ *
11
+ * This is a heuristic and reports only what it can see plainly: a declaration
12
+ * keyword, a name, and the block that keyword opens. When the shape is not
13
+ * plain — a match at top level, a language this table does not name, a
14
+ * declaration split across lines — it answers `undefined` rather than guessing,
15
+ * because a wrong window is worse than none.
16
+ *
17
+ * @since 1.0.0
18
+ */
19
+ /**
20
+ * The definition enclosing a line.
21
+ *
22
+ * @category models
23
+ * @since 1.0.0
24
+ */
25
+ export interface Symbol {
26
+ readonly kind: string;
27
+ readonly name: string;
28
+ readonly startLine: number;
29
+ readonly endLine: number;
30
+ }
31
+ /**
32
+ * The definition enclosing a 1-based line, or `undefined` when there is none to
33
+ * read plainly.
34
+ *
35
+ * @category navigation
36
+ * @since 1.0.0
37
+ */
38
+ export declare const enclosing: (lines: ReadonlyArray<string>, line: number) => Symbol | undefined;
39
+ //# sourceMappingURL=Symbols.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Symbols.d.ts","sourceRoot":"","sources":["../../../src/internal/Symbols.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;;GAKG;AACH,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAgBD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GAAI,OAAO,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAkC/E,CAAA"}