@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,156 @@
1
+ /**
2
+ * Faithful port of Codex CLI output truncation.
3
+ *
4
+ * Mirrors `codex-rs/utils/string/src/truncate.rs` and
5
+ * `codex-rs/utils/output-truncation/src/lib.rs`: middle truncation on UTF-8
6
+ * boundaries with a `…{n} tokens truncated…` marker and a 4-bytes-per-token
7
+ * estimate, so ChatGPT-family models see the exact shapes they were
8
+ * posttrained on.
9
+ *
10
+ * @since 1.0.0
11
+ */
12
+ const APPROX_BYTES_PER_TOKEN = 4;
13
+ const encoder = new TextEncoder();
14
+ const decoder = new TextDecoder();
15
+ /**
16
+ * UTF-8 byte length of a string.
17
+ *
18
+ * @since 1.0.0
19
+ * @private
20
+ */
21
+ export const byteLength = (text) => encoder.encode(text).byteLength;
22
+ /**
23
+ * Approximate token count: ceil(utf8Bytes / 4).
24
+ *
25
+ * @since 1.0.0
26
+ * @private
27
+ */
28
+ export const approxTokenCount = (text) => Math.floor((byteLength(text) + APPROX_BYTES_PER_TOKEN - 1) / APPROX_BYTES_PER_TOKEN);
29
+ /**
30
+ * Approximate byte budget for a token budget.
31
+ *
32
+ * @since 1.0.0
33
+ * @private
34
+ */
35
+ export const approxBytesForTokens = (tokens) => tokens * APPROX_BYTES_PER_TOKEN;
36
+ /**
37
+ * Approximate tokens represented by a byte count: ceil(bytes / 4).
38
+ *
39
+ * @since 1.0.0
40
+ * @private
41
+ */
42
+ export const approxTokensFromByteCount = (bytes) => Math.floor((bytes + APPROX_BYTES_PER_TOKEN - 1) / APPROX_BYTES_PER_TOKEN);
43
+ const formatTruncationMarker = (useTokens, removedCount) => useTokens ? `…${removedCount} tokens truncated…` : `…${removedCount} chars truncated…`;
44
+ /** A UTF-8 continuation byte is `10xxxxxx`; every other byte starts a character. */
45
+ const isContinuation = (byte) => (byte & 0b1100_0000) === 0b1000_0000;
46
+ /** The last character boundary at or before `offset`. */
47
+ const boundaryAtOrBefore = (bytes, offset) => {
48
+ let at = Math.min(offset, bytes.byteLength);
49
+ while (at > 0 && at < bytes.byteLength && isContinuation(bytes[at]))
50
+ at--;
51
+ return at;
52
+ };
53
+ /** The first character boundary at or after `offset`. */
54
+ const boundaryAtOrAfter = (bytes, offset) => {
55
+ let at = Math.max(offset, 0);
56
+ while (at < bytes.byteLength && isContinuation(bytes[at]))
57
+ at++;
58
+ return at;
59
+ };
60
+ /**
61
+ * Splits `s` into the head that fits `beginningBytes` and the tail that fits
62
+ * `endBytes`, both cut on UTF-8 character boundaries, and counts the characters
63
+ * dropped between them.
64
+ *
65
+ * The boundaries are read off the encoded bytes rather than by re-encoding one
66
+ * character at a time: a per-character `TextEncoder.encode` costs about two
67
+ * microseconds, which is nineteen seconds for the eight megabytes a bounded
68
+ * capture can hand this function.
69
+ */
70
+ const splitString = (s, beginningBytes, endBytes) => {
71
+ const bytes = encoder.encode(s);
72
+ const tailStartTarget = Math.max(bytes.byteLength - endBytes, 0);
73
+ const prefixEnd = boundaryAtOrBefore(bytes, beginningBytes);
74
+ const suffixStart = boundaryAtOrAfter(bytes, Math.max(tailStartTarget, prefixEnd));
75
+ let removedChars = 0;
76
+ for (let at = prefixEnd; at < suffixStart; at++)
77
+ if (!isContinuation(bytes[at]))
78
+ removedChars++;
79
+ return {
80
+ removedChars,
81
+ before: decoder.decode(bytes.subarray(0, prefixEnd)),
82
+ after: decoder.decode(bytes.subarray(suffixStart))
83
+ };
84
+ };
85
+ const truncateWithByteEstimate = (s, maxBytes, useTokens) => {
86
+ if (s === "")
87
+ return "";
88
+ const totalBytes = byteLength(s);
89
+ if (maxBytes === 0) {
90
+ return formatTruncationMarker(useTokens, useTokens ? approxTokensFromByteCount(totalBytes) : [...s].length);
91
+ }
92
+ if (totalBytes <= maxBytes)
93
+ return s;
94
+ const leftBudget = Math.floor(maxBytes / 2);
95
+ const rightBudget = maxBytes - leftBudget;
96
+ const { after, before, removedChars } = splitString(s, leftBudget, rightBudget);
97
+ const marker = formatTruncationMarker(useTokens, useTokens ? approxTokensFromByteCount(Math.max(totalBytes - maxBytes, 0)) : removedChars);
98
+ return `${before}${marker}${after}`;
99
+ };
100
+ /**
101
+ * Middle-truncate to a byte budget with a char-count marker.
102
+ *
103
+ * @since 1.0.0
104
+ * @private
105
+ */
106
+ export const truncateMiddleChars = (s, maxBytes) => truncateWithByteEstimate(s, maxBytes, false);
107
+ /**
108
+ * Middle-truncate to an approximate token budget, preserving the beginning
109
+ * and end. Returns the possibly truncated string and the original token
110
+ * count when truncation occurred.
111
+ *
112
+ * @since 1.0.0
113
+ * @private
114
+ */
115
+ export const truncateMiddleWithTokenBudget = (s, maxTokens) => {
116
+ if (s === "")
117
+ return { text: "", originalTokenCount: undefined };
118
+ if (maxTokens > 0 && byteLength(s) <= approxBytesForTokens(maxTokens)) {
119
+ return { text: s, originalTokenCount: undefined };
120
+ }
121
+ const truncated = truncateWithByteEstimate(s, approxBytesForTokens(maxTokens), true);
122
+ if (truncated === s)
123
+ return { text: s, originalTokenCount: undefined };
124
+ return { text: truncated, originalTokenCount: approxTokenCount(s) };
125
+ };
126
+ const countLines = (content) => {
127
+ if (content === "")
128
+ return 0;
129
+ const parts = content.split("\n");
130
+ return parts[parts.length - 1] === "" ? parts.length - 1 : parts.length;
131
+ };
132
+ /**
133
+ * Codex `format_exec_output_for_model`: exit code, wall time, optional line
134
+ * count disclosure, then the (possibly middle-truncated) output.
135
+ *
136
+ * @since 1.0.0
137
+ * @private
138
+ */
139
+ export const formatExecOutputForModel = (options) => {
140
+ const content = options.timedOutAfterMs === undefined
141
+ ? options.output
142
+ : `command timed out after ${options.timedOutAfterMs} milliseconds\n${options.output}`;
143
+ const durationSeconds = Math.round(options.durationSeconds * 10) / 10;
144
+ const totalLines = countLines(content);
145
+ const formatted = truncateMiddleWithTokenBudget(content, options.maxOutputTokens).text;
146
+ const sections = [
147
+ `Exit code: ${options.exitCode}`,
148
+ `Wall time: ${durationSeconds} seconds`
149
+ ];
150
+ if (totalLines !== countLines(formatted))
151
+ sections.push(`Total output lines: ${totalLines}`);
152
+ sections.push("Output:");
153
+ sections.push(formatted);
154
+ return sections.join("\n");
155
+ };
156
+ //# sourceMappingURL=CodexText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodexText.js","sourceRoot":"","sources":["../../../src/internal/CodexText.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Faithful port of Codex CLI output truncation.\n *\n * Mirrors `codex-rs/utils/string/src/truncate.rs` and\n * `codex-rs/utils/output-truncation/src/lib.rs`: middle truncation on UTF-8\n * boundaries with a `…{n} tokens truncated…` marker and a 4-bytes-per-token\n * estimate, so ChatGPT-family models see the exact shapes they were\n * posttrained on.\n *\n * @since 1.0.0\n */\n\nconst APPROX_BYTES_PER_TOKEN = 4\n\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\n/**\n * UTF-8 byte length of a string.\n *\n * @since 1.0.0\n * @private\n */\nexport const byteLength = (text: string): number => encoder.encode(text).byteLength\n\n/**\n * Approximate token count: ceil(utf8Bytes / 4).\n *\n * @since 1.0.0\n * @private\n */\nexport const approxTokenCount = (text: string): number =>\n Math.floor((byteLength(text) + APPROX_BYTES_PER_TOKEN - 1) / APPROX_BYTES_PER_TOKEN)\n\n/**\n * Approximate byte budget for a token budget.\n *\n * @since 1.0.0\n * @private\n */\nexport const approxBytesForTokens = (tokens: number): number => tokens * APPROX_BYTES_PER_TOKEN\n\n/**\n * Approximate tokens represented by a byte count: ceil(bytes / 4).\n *\n * @since 1.0.0\n * @private\n */\nexport const approxTokensFromByteCount = (bytes: number): number =>\n Math.floor((bytes + APPROX_BYTES_PER_TOKEN - 1) / APPROX_BYTES_PER_TOKEN)\n\nconst formatTruncationMarker = (useTokens: boolean, removedCount: number): string =>\n useTokens ? `…${removedCount} tokens truncated…` : `…${removedCount} chars truncated…`\n\ninterface Split {\n readonly removedChars: number\n readonly before: string\n readonly after: string\n}\n\n/** A UTF-8 continuation byte is `10xxxxxx`; every other byte starts a character. */\nconst isContinuation = (byte: number): boolean => (byte & 0b1100_0000) === 0b1000_0000\n\n/** The last character boundary at or before `offset`. */\nconst boundaryAtOrBefore = (bytes: Uint8Array, offset: number): number => {\n let at = Math.min(offset, bytes.byteLength)\n while (at > 0 && at < bytes.byteLength && isContinuation(bytes[at]!)) at--\n return at\n}\n\n/** The first character boundary at or after `offset`. */\nconst boundaryAtOrAfter = (bytes: Uint8Array, offset: number): number => {\n let at = Math.max(offset, 0)\n while (at < bytes.byteLength && isContinuation(bytes[at]!)) at++\n return at\n}\n\n/**\n * Splits `s` into the head that fits `beginningBytes` and the tail that fits\n * `endBytes`, both cut on UTF-8 character boundaries, and counts the characters\n * dropped between them.\n *\n * The boundaries are read off the encoded bytes rather than by re-encoding one\n * character at a time: a per-character `TextEncoder.encode` costs about two\n * microseconds, which is nineteen seconds for the eight megabytes a bounded\n * capture can hand this function.\n */\nconst splitString = (s: string, beginningBytes: number, endBytes: number): Split => {\n const bytes = encoder.encode(s)\n const tailStartTarget = Math.max(bytes.byteLength - endBytes, 0)\n const prefixEnd = boundaryAtOrBefore(bytes, beginningBytes)\n const suffixStart = boundaryAtOrAfter(bytes, Math.max(tailStartTarget, prefixEnd))\n let removedChars = 0\n for (let at = prefixEnd; at < suffixStart; at++) if (!isContinuation(bytes[at]!)) removedChars++\n return {\n removedChars,\n before: decoder.decode(bytes.subarray(0, prefixEnd)),\n after: decoder.decode(bytes.subarray(suffixStart))\n }\n}\n\nconst truncateWithByteEstimate = (s: string, maxBytes: number, useTokens: boolean): string => {\n if (s === \"\") return \"\"\n const totalBytes = byteLength(s)\n if (maxBytes === 0) {\n return formatTruncationMarker(useTokens, useTokens ? approxTokensFromByteCount(totalBytes) : [...s].length)\n }\n if (totalBytes <= maxBytes) return s\n const leftBudget = Math.floor(maxBytes / 2)\n const rightBudget = maxBytes - leftBudget\n const { after, before, removedChars } = splitString(s, leftBudget, rightBudget)\n const marker = formatTruncationMarker(\n useTokens,\n useTokens ? approxTokensFromByteCount(Math.max(totalBytes - maxBytes, 0)) : removedChars\n )\n return `${before}${marker}${after}`\n}\n\n/**\n * Middle-truncate to a byte budget with a char-count marker.\n *\n * @since 1.0.0\n * @private\n */\nexport const truncateMiddleChars = (s: string, maxBytes: number): string => truncateWithByteEstimate(s, maxBytes, false)\n\n/**\n * Middle-truncate to an approximate token budget, preserving the beginning\n * and end. Returns the possibly truncated string and the original token\n * count when truncation occurred.\n *\n * @since 1.0.0\n * @private\n */\nexport const truncateMiddleWithTokenBudget = (\n s: string,\n maxTokens: number\n): { readonly text: string; readonly originalTokenCount: number | undefined } => {\n if (s === \"\") return { text: \"\", originalTokenCount: undefined }\n if (maxTokens > 0 && byteLength(s) <= approxBytesForTokens(maxTokens)) {\n return { text: s, originalTokenCount: undefined }\n }\n const truncated = truncateWithByteEstimate(s, approxBytesForTokens(maxTokens), true)\n if (truncated === s) return { text: s, originalTokenCount: undefined }\n return { text: truncated, originalTokenCount: approxTokenCount(s) }\n}\n\nconst countLines = (content: string): number => {\n if (content === \"\") return 0\n const parts = content.split(\"\\n\")\n return parts[parts.length - 1] === \"\" ? parts.length - 1 : parts.length\n}\n\n/**\n * Codex `format_exec_output_for_model`: exit code, wall time, optional line\n * count disclosure, then the (possibly middle-truncated) output.\n *\n * @since 1.0.0\n * @private\n */\nexport const formatExecOutputForModel = (options: {\n readonly output: string\n readonly exitCode: number\n readonly durationSeconds: number\n readonly maxOutputTokens: number\n readonly timedOutAfterMs?: number | undefined\n}): string => {\n const content = options.timedOutAfterMs === undefined\n ? options.output\n : `command timed out after ${options.timedOutAfterMs} milliseconds\\n${options.output}`\n const durationSeconds = Math.round(options.durationSeconds * 10) / 10\n const totalLines = countLines(content)\n const formatted = truncateMiddleWithTokenBudget(content, options.maxOutputTokens).text\n const sections = [\n `Exit code: ${options.exitCode}`,\n `Wall time: ${durationSeconds} seconds`\n ]\n if (totalLines !== countLines(formatted)) sections.push(`Total output lines: ${totalLines}`)\n sections.push(\"Output:\")\n sections.push(formatted)\n return sections.join(\"\\n\")\n}\n"]}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Shared declaration helpers for the standard flows.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ import type * as Capability from "@smthrs/capability/Capability";
7
+ import * as Effects from "@smthrs/core/Effects";
8
+ /**
9
+ * Options accepted by {@link envelope}.
10
+ *
11
+ * @category models
12
+ * @since 1.0.0
13
+ */
14
+ export interface EnvelopeOptions {
15
+ readonly tier: "sealed" | "compensable" | "irreversible";
16
+ readonly mode: "hermetic" | "expected";
17
+ readonly reads: Iterable<string>;
18
+ readonly writes: Iterable<string>;
19
+ }
20
+ /**
21
+ * Builds a deterministic effect declaration for a standard flow.
22
+ *
23
+ * Every standard flow serializes on conflict: the library owns no lane
24
+ * partitioning of its own, so the conservative choice is the safe one.
25
+ *
26
+ * @category constructors
27
+ * @since 1.0.0
28
+ */
29
+ export declare const envelope: (options: EnvelopeOptions) => Effects.Declaration;
30
+ /**
31
+ * Formats a capability request as the `action:resource` string carried on a
32
+ * flow declaration.
33
+ *
34
+ * @category constructors
35
+ * @since 1.0.0
36
+ */
37
+ export declare const capability: (action: Capability.Action, resource: string) => string;
38
+ /**
39
+ * The read glob covering everything under one search root.
40
+ *
41
+ * `glob` and `grep` narrow their conservative `/**` declaration to the root the
42
+ * call actually names, and a declaration that disagreed between the two would
43
+ * make the same search reserve different paths depending on which flow ran it.
44
+ *
45
+ * @category constructors
46
+ * @since 1.0.0
47
+ */
48
+ export declare const rootSubtree: (root: string) => string;
49
+ //# sourceMappingURL=Declaration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Declaration.d.ts","sourceRoot":"","sources":["../../../src/internal/Declaration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,KAAK,UAAU,MAAM,+BAA+B,CAAA;AAChE,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,aAAa,GAAG,cAAc,CAAA;IACxD,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAA;IACtC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;CAClC;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,GAAI,SAAS,eAAe,KAAG,OAAO,CAAC,WAOxD,CAAA;AAEJ;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,UAAU,CAAC,MAAM,EAAE,UAAU,MAAM,KAAG,MAAiC,CAAA;AAE1G;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAAiE,CAAA"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Shared declaration helpers for the standard flows.
3
+ *
4
+ * @since 1.0.0
5
+ */
6
+ import * as Effects from "@smthrs/core/Effects";
7
+ /**
8
+ * Builds a deterministic effect declaration for a standard flow.
9
+ *
10
+ * Every standard flow serializes on conflict: the library owns no lane
11
+ * partitioning of its own, so the conservative choice is the safe one.
12
+ *
13
+ * @category constructors
14
+ * @since 1.0.0
15
+ */
16
+ export const envelope = (options) => Effects.make({
17
+ reads: options.reads,
18
+ writes: options.writes,
19
+ mode: options.mode,
20
+ onConflict: "serialize",
21
+ tier: options.tier
22
+ });
23
+ /**
24
+ * Formats a capability request as the `action:resource` string carried on a
25
+ * flow declaration.
26
+ *
27
+ * @category constructors
28
+ * @since 1.0.0
29
+ */
30
+ export const capability = (action, resource) => `${action}:${resource}`;
31
+ /**
32
+ * The read glob covering everything under one search root.
33
+ *
34
+ * `glob` and `grep` narrow their conservative `/**` declaration to the root the
35
+ * call actually names, and a declaration that disagreed between the two would
36
+ * make the same search reserve different paths depending on which flow ran it.
37
+ *
38
+ * @category constructors
39
+ * @since 1.0.0
40
+ */
41
+ export const rootSubtree = (root) => root === "/" ? "/**" : `${root.replace(/\/+$/, "")}/**`;
42
+ //# sourceMappingURL=Declaration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Declaration.js","sourceRoot":"","sources":["../../../src/internal/Declaration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAe/C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAwB,EAAuB,EAAE,CACxE,OAAO,CAAC,IAAI,CAAC;IACX,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,UAAU,EAAE,WAAW;IACvB,IAAI,EAAE,OAAO,CAAC,IAAI;CACnB,CAAC,CAAA;AAEJ;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAyB,EAAE,QAAgB,EAAU,EAAE,CAAC,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAA;AAE1G;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,CAAA","sourcesContent":["/**\n * Shared declaration helpers for the standard flows.\n *\n * @since 1.0.0\n */\n\nimport type * as Capability from \"@smthrs/capability/Capability\"\nimport * as Effects from \"@smthrs/core/Effects\"\n\n/**\n * Options accepted by {@link envelope}.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface EnvelopeOptions {\n readonly tier: \"sealed\" | \"compensable\" | \"irreversible\"\n readonly mode: \"hermetic\" | \"expected\"\n readonly reads: Iterable<string>\n readonly writes: Iterable<string>\n}\n\n/**\n * Builds a deterministic effect declaration for a standard flow.\n *\n * Every standard flow serializes on conflict: the library owns no lane\n * partitioning of its own, so the conservative choice is the safe one.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const envelope = (options: EnvelopeOptions): Effects.Declaration =>\n Effects.make({\n reads: options.reads,\n writes: options.writes,\n mode: options.mode,\n onConflict: \"serialize\",\n tier: options.tier\n })\n\n/**\n * Formats a capability request as the `action:resource` string carried on a\n * flow declaration.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const capability = (action: Capability.Action, resource: string): string => `${action}:${resource}`\n\n/**\n * The read glob covering everything under one search root.\n *\n * `glob` and `grep` narrow their conservative `/**` declaration to the root the\n * call actually names, and a declaration that disagreed between the two would\n * make the same search reserve different paths depending on which flow ran it.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const rootSubtree = (root: string): string => root === \"/\" ? \"/**\" : `${root.replace(/\\/+$/, \"\")}/**`\n"]}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Keeps a bound language server in step with the files the mutation flows
3
+ * write, and reads back the errors an edit leaves.
4
+ *
5
+ * The server is optional: a host that binds no `LanguageServer` edits files
6
+ * exactly as before, and a server that fails or times out never fails the
7
+ * write that already happened.
8
+ *
9
+ * @since 1.0.0
10
+ */
11
+ import * as Effect from "effect/Effect";
12
+ import * as Schema from "effect/Schema";
13
+ import * as LanguageServer from "../LanguageServer.ts";
14
+ /**
15
+ * Most errors attached to one result.
16
+ *
17
+ * @category internal
18
+ * @since 1.0.0
19
+ */
20
+ export declare const MAX_ERRORS = 20;
21
+ /**
22
+ * One error-severity diagnostic, at its 1-based position.
23
+ *
24
+ * @category internal
25
+ * @since 1.0.0
26
+ */
27
+ export declare const Problem: Schema.Struct<{
28
+ readonly line: Schema.Number;
29
+ readonly character: Schema.Number;
30
+ readonly message: Schema.String;
31
+ }>;
32
+ /**
33
+ * A decoded {@link Problem}.
34
+ *
35
+ * @category internal
36
+ * @since 1.0.0
37
+ */
38
+ export type Problem = typeof Problem.Type;
39
+ /**
40
+ * The error-severity items of a document diagnostic report, 1-based.
41
+ *
42
+ * @category internal
43
+ * @since 1.0.0
44
+ */
45
+ export declare const errors: (report: unknown) => ReadonlyArray<Problem>;
46
+ /**
47
+ * Sends a written file's new text to the bound server, if any. Succeeds with
48
+ * the server that took it.
49
+ *
50
+ * @category internal
51
+ * @since 1.0.0
52
+ */
53
+ export declare const sync: (path: string, text: string) => Effect.Effect<LanguageServer.LanguageServer | undefined>;
54
+ /**
55
+ * Tells the bound server, if any, that a file is gone.
56
+ *
57
+ * @category internal
58
+ * @since 1.0.0
59
+ */
60
+ export declare const close: (path: string) => Effect.Effect<void>;
61
+ /**
62
+ * Tells the bound server, if any, to re-read every file it has open, after
63
+ * something other than the mutation flows may have changed them.
64
+ *
65
+ * @category internal
66
+ * @since 1.0.0
67
+ */
68
+ export declare const refresh: Effect.Effect<void>;
69
+ /**
70
+ * The errors `server` reports for `path`, or `undefined` when it could not
71
+ * answer.
72
+ *
73
+ * @category internal
74
+ * @since 1.0.0
75
+ */
76
+ export declare const errorsOf: (server: LanguageServer.LanguageServer, path: string) => Effect.Effect<ReadonlyArray<Problem> | undefined>;
77
+ //# sourceMappingURL=Diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Diagnostics.d.ts","sourceRoot":"","sources":["../../../src/internal/Diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAA;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,KAAK,CAAA;AAE5B;;;;;GAKG;AACH,eAAO,MAAM,OAAO;;;;EAIlB,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAOzC;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,QAAQ,OAAO,KAAG,aAAa,CAAC,OAAO,CAe7D,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,GAAG,SAAS,CAUtG,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAMpD,CAAA;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAKvC,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GACnB,QAAQ,cAAc,CAAC,cAAc,EACrC,MAAM,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,CAIhD,CAAA"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Keeps a bound language server in step with the files the mutation flows
3
+ * write, and reads back the errors an edit leaves.
4
+ *
5
+ * The server is optional: a host that binds no `LanguageServer` edits files
6
+ * exactly as before, and a server that fails or times out never fails the
7
+ * write that already happened.
8
+ *
9
+ * @since 1.0.0
10
+ */
11
+ import * as Effect from "effect/Effect";
12
+ import * as Option from "effect/Option";
13
+ import * as Schema from "effect/Schema";
14
+ import * as LanguageServer from "../LanguageServer.js";
15
+ /**
16
+ * Most errors attached to one result.
17
+ *
18
+ * @category internal
19
+ * @since 1.0.0
20
+ */
21
+ export const MAX_ERRORS = 20;
22
+ /**
23
+ * One error-severity diagnostic, at its 1-based position.
24
+ *
25
+ * @category internal
26
+ * @since 1.0.0
27
+ */
28
+ export const Problem = Schema.Struct({
29
+ line: Schema.Number.annotate({ description: "1-based line" }),
30
+ character: Schema.Number.annotate({ description: "1-based character" }),
31
+ message: Schema.String
32
+ });
33
+ const record = (value) => typeof value === "object" && value !== null && !Array.isArray(value)
34
+ ? value
35
+ : undefined;
36
+ /**
37
+ * The error-severity items of a document diagnostic report, 1-based.
38
+ *
39
+ * @category internal
40
+ * @since 1.0.0
41
+ */
42
+ export const errors = (report) => {
43
+ const items = record(report)?.items;
44
+ if (!Array.isArray(items))
45
+ return [];
46
+ const found = [];
47
+ for (const item of items) {
48
+ const diagnostic = record(item);
49
+ const start = record(record(diagnostic?.range)?.start);
50
+ if (diagnostic?.severity !== 1 || typeof diagnostic.message !== "string" ||
51
+ typeof start?.line !== "number" || typeof start.character !== "number")
52
+ continue;
53
+ found.push({ line: start.line + 1, character: start.character + 1, message: diagnostic.message });
54
+ if (found.length === MAX_ERRORS)
55
+ break;
56
+ }
57
+ return found;
58
+ };
59
+ /**
60
+ * Sends a written file's new text to the bound server, if any. Succeeds with
61
+ * the server that took it.
62
+ *
63
+ * @category internal
64
+ * @since 1.0.0
65
+ */
66
+ export const sync = (path, text) => Effect.serviceOption(LanguageServer.LanguageServer).pipe(Effect.flatMap(Option.match({
67
+ onNone: () => Effect.succeed(undefined),
68
+ onSome: (server) => server.sync(path, text).pipe(Effect.as(server), Effect.orElseSucceed(() => undefined))
69
+ })));
70
+ /**
71
+ * Tells the bound server, if any, that a file is gone.
72
+ *
73
+ * @category internal
74
+ * @since 1.0.0
75
+ */
76
+ export const close = (path) => Effect.serviceOption(LanguageServer.LanguageServer).pipe(Effect.flatMap(Option.match({
77
+ onNone: () => Effect.void,
78
+ onSome: (server) => server.close(path).pipe(Effect.ignore)
79
+ })));
80
+ /**
81
+ * Tells the bound server, if any, to re-read every file it has open, after
82
+ * something other than the mutation flows may have changed them.
83
+ *
84
+ * @category internal
85
+ * @since 1.0.0
86
+ */
87
+ export const refresh = Effect.serviceOption(LanguageServer.LanguageServer).pipe(Effect.flatMap(Option.match({
88
+ onNone: () => Effect.void,
89
+ onSome: (server) => server.refresh.pipe(Effect.ignore)
90
+ })));
91
+ /**
92
+ * The errors `server` reports for `path`, or `undefined` when it could not
93
+ * answer.
94
+ *
95
+ * @category internal
96
+ * @since 1.0.0
97
+ */
98
+ export const errorsOf = (server, path) => server.diagnostics(path).pipe(Effect.map(errors), Effect.orElseSucceed(() => undefined));
99
+ //# sourceMappingURL=Diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Diagnostics.js","sourceRoot":"","sources":["../../../src/internal/Diagnostics.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Keeps a bound language server in step with the files the mutation flows\n * write, and reads back the errors an edit leaves.\n *\n * The server is optional: a host that binds no `LanguageServer` edits files\n * exactly as before, and a server that fails or times out never fails the\n * write that already happened.\n *\n * @since 1.0.0\n */\n\nimport * as Effect from \"effect/Effect\"\nimport * as Option from \"effect/Option\"\nimport * as Schema from \"effect/Schema\"\nimport * as LanguageServer from \"../LanguageServer.ts\"\n\n/**\n * Most errors attached to one result.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const MAX_ERRORS = 20\n\n/**\n * One error-severity diagnostic, at its 1-based position.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const Problem = Schema.Struct({\n line: Schema.Number.annotate({ description: \"1-based line\" }),\n character: Schema.Number.annotate({ description: \"1-based character\" }),\n message: Schema.String\n})\n\n/**\n * A decoded {@link Problem}.\n *\n * @category internal\n * @since 1.0.0\n */\nexport type Problem = typeof Problem.Type\n\nconst record = (value: unknown): Readonly<Record<string, unknown>> | undefined =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value as Readonly<Record<string, unknown>>\n : undefined\n\n/**\n * The error-severity items of a document diagnostic report, 1-based.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const errors = (report: unknown): ReadonlyArray<Problem> => {\n const items = record(report)?.items\n if (!Array.isArray(items)) return []\n const found: Array<Problem> = []\n for (const item of items) {\n const diagnostic = record(item)\n const start = record(record(diagnostic?.range)?.start)\n if (\n diagnostic?.severity !== 1 || typeof diagnostic.message !== \"string\" ||\n typeof start?.line !== \"number\" || typeof start.character !== \"number\"\n ) continue\n found.push({ line: start.line + 1, character: start.character + 1, message: diagnostic.message })\n if (found.length === MAX_ERRORS) break\n }\n return found\n}\n\n/**\n * Sends a written file's new text to the bound server, if any. Succeeds with\n * the server that took it.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const sync = (path: string, text: string): Effect.Effect<LanguageServer.LanguageServer | undefined> =>\n Effect.serviceOption(LanguageServer.LanguageServer).pipe(\n Effect.flatMap(Option.match({\n onNone: () => Effect.succeed(undefined),\n onSome: (server) =>\n server.sync(path, text).pipe(\n Effect.as(server),\n Effect.orElseSucceed(() => undefined)\n )\n }))\n )\n\n/**\n * Tells the bound server, if any, that a file is gone.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const close = (path: string): Effect.Effect<void> =>\n Effect.serviceOption(LanguageServer.LanguageServer).pipe(\n Effect.flatMap(Option.match({\n onNone: () => Effect.void,\n onSome: (server) => server.close(path).pipe(Effect.ignore)\n }))\n )\n\n/**\n * Tells the bound server, if any, to re-read every file it has open, after\n * something other than the mutation flows may have changed them.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const refresh: Effect.Effect<void> = Effect.serviceOption(LanguageServer.LanguageServer).pipe(\n Effect.flatMap(Option.match({\n onNone: () => Effect.void,\n onSome: (server) => server.refresh.pipe(Effect.ignore)\n }))\n)\n\n/**\n * The errors `server` reports for `path`, or `undefined` when it could not\n * answer.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const errorsOf = (\n server: LanguageServer.LanguageServer,\n path: string\n): Effect.Effect<ReadonlyArray<Problem> | undefined> =>\n server.diagnostics(path).pipe(\n Effect.map(errors),\n Effect.orElseSucceed(() => undefined)\n )\n"]}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * The hermetic pre-check: a lexical scan of shell text for the paths it names,
3
+ * and the refusal when one of them falls outside the declared envelope.
4
+ *
5
+ * The scan is fail-closed over explicit path tokens and nothing more. It
6
+ * cannot prove confinement — a shell can name a path no lexer sees, through a
7
+ * variable, a substitution, or a program that opens a file of its own — so a
8
+ * kernel or host sandbox must eventually enforce and report the complete read
9
+ * and write sets.
10
+ *
11
+ * It lives beside the flow rather than inside it because it is its own
12
+ * concept, with its own vocabulary (Access, PathReference) and its own
13
+ * security history: three independent bypasses, each sufficient on its own to
14
+ * defeat it, are closed here.
15
+ *
16
+ * @since 1.0.0
17
+ */
18
+ import type * as Path from "@smthrs/kernel/Path";
19
+ import * as StdError from "../StdError.ts";
20
+ /**
21
+ * The filesystem envelope one invocation declared.
22
+ *
23
+ * Structural rather than the hermetic `Bash.Input` itself: the scan needs the
24
+ * three fields and none of the rest, and depending on the flow module would
25
+ * make the flow and its pre-check import each other.
26
+ *
27
+ * @category models
28
+ * @since 1.0.0
29
+ */
30
+ export interface Envelope {
31
+ readonly cwd?: string | undefined;
32
+ readonly reads: ReadonlyArray<string>;
33
+ readonly writes: ReadonlyArray<string>;
34
+ }
35
+ /**
36
+ * How a command touches a path it names.
37
+ *
38
+ * @category models
39
+ * @since 1.0.0
40
+ */
41
+ export type Access = "read" | "write";
42
+ /**
43
+ * One path a command names, and how it touches it.
44
+ *
45
+ * @category models
46
+ * @since 1.0.0
47
+ */
48
+ export interface PathReference {
49
+ readonly access: Access;
50
+ readonly value: string;
51
+ }
52
+ /**
53
+ * Every path token the shell text names, one segment at a time.
54
+ *
55
+ * @throws {StdError.StdError} `invalid_input` when substitutions or quotes nest
56
+ * deeper than the scan reads.
57
+ * @category pre-check
58
+ * @since 1.0.0
59
+ */
60
+ export declare const commandReferences: (path: Path.Path, command: string) => ReadonlyArray<PathReference>;
61
+ /**
62
+ * The refusal shell text earns by naming a path outside its declared
63
+ * envelope, or `undefined` when every path it names is declared.
64
+ *
65
+ * @category pre-check
66
+ * @since 1.0.0
67
+ */
68
+ export declare const outsideEnvelope: (input: Envelope, text: string, path: Path.Path) => StdError.StdError | undefined;
69
+ //# sourceMappingURL=EnvelopePrecheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EnvelopePrecheck.d.ts","sourceRoot":"","sources":["../../../src/internal/EnvelopePrecheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,KAAK,IAAI,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAG1C;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACvC;AAED;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAErC;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AA0VD;;;;;;;GAOG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,KAAG,aAAa,CAAC,aAAa,CAClE,CAAA;AAmB9B;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,QAAQ,EACf,MAAM,MAAM,EACZ,MAAM,IAAI,CAAC,IAAI,KACd,QAAQ,CAAC,QAAQ,GAAG,SAgDtB,CAAA"}