@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,148 @@
1
+ ---
2
+ title: "Search a workspace"
3
+ description: "Find files with glob and search their contents with grep: roots, ordered include and exclude patterns, context lines, per-file caps, and the notices that keep an empty answer from lying."
4
+ sidebar:
5
+ order: 3
6
+ ---
7
+
8
+ Both flows go through the `Search` service, so bind either
9
+ [`PortableSearch.layer` or `NativeSearch.layer`](./bind-the-standard-flows.md)
10
+ first. The semantics are identical; see
11
+ [The search contract](../concepts/search-contract.md) for why.
12
+
13
+ ## Choose the search root
14
+
15
+ `root` defaults to `.`, resolved by the host filesystem. A guarded agent host
16
+ resolves it inside its workspace. Pass a root to search another directory:
17
+
18
+ ```ts
19
+ import * as Glob from "@smthrs/std/Glob"
20
+
21
+ const files = Glob.run({ pattern: "**/*.ts", root: "/workspace" })
22
+ // files.paths, files.total, files.truncated, files.notice
23
+ ```
24
+
25
+ Every pattern is matched against a candidate's path **relative to that root**.
26
+ An absolute pattern such as `/workspace/tests/**` is read as the root-relative
27
+ path `workspace/tests/**`, which nothing under `/workspace` can match. When that
28
+ happens, `notice` says so rather than returning a silent empty result.
29
+
30
+ Three rules follow from root-relative matching:
31
+
32
+ - No `/` in the pattern matches the basename at any depth: `*.ts` finds every
33
+ TypeScript file in the subtree.
34
+ - A `/` in the pattern anchors it at the root: `src/*.ts` matches
35
+ `<root>/src/a.ts` and not `<root>/lib/src/a.ts`.
36
+ - A leading `/` or `./` is the same anchor spelled out.
37
+
38
+ `glob` returns at most 1,000 paths per call, and `limit` lowers that. Pass
39
+ `hidden: true` to include dot files.
40
+
41
+ Both flows apply `.gitignore` rules from the search root and nested directories,
42
+ even outside Git repositories. `noIgnore` is an optional boolean defaulting to
43
+ `false`; set `noIgnore: true` to include ignored paths. Rules above the root and
44
+ global ignore files do not apply. Hidden-file and fixed directory skips still
45
+ apply when `noIgnore` is true.
46
+
47
+ ## Search contents
48
+
49
+ ```ts
50
+ import * as Grep from "@smthrs/std/Grep"
51
+
52
+ const found = Grep.run({
53
+ pattern: "def widen",
54
+ root: "/workspace",
55
+ globs: ["**/*.py", "!**/test_*.py"],
56
+ context: 2,
57
+ maxCount: 3,
58
+ limit: 50
59
+ })
60
+ ```
61
+
62
+ | Input | What it does |
63
+ | ------------------------------------------ | ------------------------------------------------------------------------- |
64
+ | `pattern` | A Smithers Ripgrep ASCII v1 expression, or a literal with `fixedStrings`. |
65
+ | `globs` | Ordered include and exclude patterns, `!` for exclusion. |
66
+ | `ignoreCase`, `smartCase` | Case handling. The two are mutually exclusive. |
67
+ | `beforeContext`, `afterContext`, `context` | Context lines. `context` cannot be combined with the other two. |
68
+ | `maxCount` | At most this many matches per file. At least 1. |
69
+ | `filesWithMatches` | Report file names only. |
70
+ | `hidden` | Include dot files. |
71
+ | `noIgnore` | Include paths excluded by `.gitignore` when true. Defaults to false. |
72
+ | `symbols` | Report the definition enclosing each hit. True by default. |
73
+ | `limit` | Global match budget, capped at 200. |
74
+
75
+ The output is match-centric:
76
+
77
+ | Output | Meaning |
78
+ | --------------------- | ------------------------------------------------------------------------- |
79
+ | `matches` | Each hit with its own `before` and `after` context and optional `symbol`. |
80
+ | `files` | The file list, which is what `filesWithMatches` fills. |
81
+ | `filesSearched` | Every file the globs admitted, including binaries and unopenable files. |
82
+ | `skippedBinary` | How many of those held a NUL byte. |
83
+ | `truncated`, `notice` | Whether the budget bit, and what was shown out of what there was. |
84
+ | `retriedAsLiteral` | Present when these results came from re-running the pattern literally. |
85
+
86
+ `limit` counts matches, not rows, so context can never crowd out the hit it
87
+ belongs to.
88
+
89
+ ## Read the definition a hit sits in
90
+
91
+ Each hit carries the definition enclosing it, when the file's shape says so
92
+ plainly. That is a read window, so the follow-up read is exact rather than a
93
+ guess at `line - 10`:
94
+
95
+ ```ts
96
+ import * as Read from "@smthrs/std/Read"
97
+
98
+ const hit = found.matches[0]
99
+ if (hit?.symbol !== undefined) {
100
+ const page = Read.run({
101
+ path: hit.file,
102
+ offset: hit.symbol.startLine,
103
+ limit: hit.symbol.endLine - hit.symbol.startLine + 1
104
+ })
105
+ }
106
+ ```
107
+
108
+ Set `symbols: false` to skip the annotation. When the shape is not plain, the
109
+ heuristic answers nothing rather than guessing a window.
110
+
111
+ ## When a regular expression finds nothing
112
+
113
+ A pattern full of metacharacters that finds nothing is the most common way a
114
+ search lies. If a pattern containing metacharacters produces no matches and no
115
+ files, the search runs again with `fixedStrings: true`, and if the literal
116
+ reading finds something the result carries `retriedAsLiteral: true` and says so
117
+ in `notice`. The retry costs one more pass only in the case that already found
118
+ nothing.
119
+
120
+ To search a literal on purpose, pass `fixedStrings: true` yourself and skip the
121
+ regular expression grammar entirely.
122
+
123
+ ## What is refused
124
+
125
+ These are `invalid_input` rather than a best guess, because two peer
126
+ implementations must not each pick their own reading:
127
+
128
+ - `ignoreCase` and `smartCase` both true.
129
+ - `context` together with `beforeContext` or `afterContext`.
130
+ - `maxCount` below 1.
131
+
132
+ File-type registries are unsupported; there is no `types` input field.
133
+
134
+ An unsupported pattern is `invalid_pattern`, with a message naming the
135
+ construct. A `root` that does not exist is `not_found`.
136
+
137
+ ## What a walk never enters
138
+
139
+ Twelve directory names are skipped during descent, including `.git`,
140
+ `node_modules`, `__pycache__`, and `.venv`. Skipping applies to descent only, so
141
+ naming one of them as the `root` searches it. An entry the process cannot read
142
+ is skipped and the walk continues.
143
+
144
+ The portable peer streams file contents when the host supports it. A guarded
145
+ host may provide atomic file reads but refuse streaming handles. If a stream
146
+ fails before delivering any bytes, search tries that same filesystem's atomic
147
+ read. A stream that fails after delivering bytes is discarded without a second
148
+ read, so two versions of a changing file cannot be combined into one result.
@@ -0,0 +1,111 @@
1
+ ---
2
+ title: "Installation"
3
+ description: "Install @smthrs/std, its runtime requirements and import forms, the browser-safe subpaths, and the packages a host adds to make the handlers runnable."
4
+ sidebar:
5
+ order: 1
6
+ ---
7
+
8
+ ## Install the package
9
+
10
+ Not on npm yet; see [Installation](https://github.com/smithersai/smithers/blob/main/packages/smithers/flows/flow/docs/installation.md#use-the-libraries).
11
+
12
+ It requires
13
+ Node.js 26.4.0 or later and ships as both ESM and CommonJS with TypeScript
14
+ declarations. Its runtime dependencies install with it:
15
+ [`effect`](https://effect.website), plus [`@smthrs/core`](/api/core) for the
16
+ flow declaration type, [`@smthrs/kernel`](/api/kernel) for the permission-aware
17
+ host services, [`@smthrs/capability`](/api/capability) for the capability
18
+ vocabulary, and [`@smthrs/control`](/api/control) for the credential seam
19
+ `ExaWebSearch` reads its API key through.
20
+
21
+ ## Import forms
22
+
23
+ The root entry point re-exports every module as a namespace:
24
+
25
+ ```ts
26
+ import { Grep, Manifest, Read, StdError } from "@smthrs/std"
27
+ ```
28
+
29
+ Each module is also importable from its own subpath, which is the form this
30
+ documentation uses and the form that keeps a bundle to what it needs:
31
+
32
+ ```ts
33
+ import * as Read from "@smthrs/std/Read"
34
+ import * as StdError from "@smthrs/std/StdError"
35
+ ```
36
+
37
+ Two subpath forms are not public: `@smthrs/std/internal/*` and
38
+ `@smthrs/std/<Module>/index`. Both are blocked in the export map and carry no
39
+ promise. `@smthrs/std/package.json` is exported.
40
+
41
+ ## The browser-safe subset
42
+
43
+ The root entry point is Node-only. It re-exports `NodeLanguageServer`, which
44
+ imports `node:url`, so importing `@smthrs/std` in a browser bundle pulls a Node
45
+ built-in in with it.
46
+
47
+ Four subpaths are browser-safe, because nothing they import reaches a Node
48
+ built-in:
49
+
50
+ - `@smthrs/std/Grep`
51
+ - `@smthrs/std/Glob`
52
+ - `@smthrs/std/Search`
53
+ - `@smthrs/std/PortableSearch`
54
+
55
+ `PortableSearch` performs its walk through the injected `FileSystem` service, so
56
+ a browser host that provides one gets working `grep` and `glob` with no external
57
+ binary.
58
+
59
+ ## What a runnable host adds
60
+
61
+ The declarations run nowhere on their own. Handlers ask for host services
62
+ through Effect's context, so a composition adds a platform package that provides
63
+ them:
64
+
65
+ ```bash
66
+ pnpm add @effect/platform-node@4.0.0-rc.115 @effect/platform-node-shared@4.0.0-rc.115
67
+ ```
68
+
69
+ `NodeServices.layer` from `@effect/platform-node` provides `FileSystem`, `Path`,
70
+ and `ChildProcessSpawner`, which is everything the filesystem, search, and shell
71
+ handlers require. A host that wants the permission kernel's capability checks in
72
+ front of those services builds them through
73
+ [`@smthrs/kernel`](/api/kernel)'s `HostServices` instead, which is what the
74
+ Smithers CLI does.
75
+
76
+ | Handler | Services it requires |
77
+ | ------------------------------------------- | ------------------------------------------------------------------------------ |
78
+ | `Read.run`, `Edit.run` | `FileSystem` |
79
+ | `Write.run`, `Ls.run`, `ApplyPatch.run` | `FileSystem`, `Path` |
80
+ | `Grep.run`, `Glob.run` | `Search` |
81
+ | `Bash.run` | `ChildProcessSpawner`, `Path`, and `Container` when a call names one |
82
+ | `TestRun.run` | `ChildProcessSpawner`, `TestRunner`, and `Container` when the runner names one |
83
+ | `ShellCommand.run` | `ChildProcessSpawner` |
84
+ | `Fetch.run`, `HttpPost.run`, `WebFetch.run` | `HttpClient`, `GrantStore` |
85
+ | `WebSearch.run` | `WebSearch` |
86
+ | `Lsp.run` | `LanguageServer` |
87
+ | `UpdatePlan.run` | none |
88
+
89
+ ## The six injected services
90
+
91
+ Six flows reach the host through a service rather than through a platform layer.
92
+ Each one has a refusal layer for a host that cannot serve it, so a flow whose
93
+ service is missing says so instead of succeeding quietly.
94
+
95
+ | Service | Refusal layer | Working layer |
96
+ | ---------------- | -------------------------- | ----------------------------------------------- |
97
+ | `Search` | `Search.layerNoop` | `PortableSearch.layer` or `NativeSearch.layer` |
98
+ | `Container` | `Container.layerNoop` | `Container.layerCommand({ program: "docker" })` |
99
+ | `TestRunner` | `TestRunner.layerNoop` | `TestRunner.layer(runner)` |
100
+ | `Checkpoints` | `Checkpoints.layerNoop` | `Checkpoints.layerGit({ root })` |
101
+ | `WebSearch` | `WebSearch.layerNoop` | `ExaWebSearch.layer(credentialId)` |
102
+ | `LanguageServer` | `LanguageServer.layerNoop` | `NodeLanguageServer.layer(config)` |
103
+
104
+ `NativeSearch.layer` drives the `rg` executable, so a host that binds it needs
105
+ ripgrep on the path. `PortableSearch.layer` needs nothing beyond `FileSystem`
106
+ and `Path`. `ExaWebSearch.layer` additionally requires
107
+ [`@smthrs/control`](/api/control)'s `Credential` service and
108
+ [`@smthrs/kernel`](/api/kernel)'s `HttpClient`.
109
+
110
+ Composing these is one job, covered in
111
+ [Bind the standard flows into a host](./guides/bind-the-standard-flows.md).
@@ -0,0 +1,125 @@
1
+ ---
2
+ title: "Quickstart"
3
+ description: "Search a real directory with grep, then read the exact definition the hit sits in, using the in-process search peer and no external binary."
4
+ sidebar:
5
+ order: 2
6
+ ---
7
+
8
+ This quickstart runs two standard flows end to end against a real directory.
9
+ `grep` finds a line and reports the definition that encloses it; `read` turns
10
+ that definition's line range into a page. By the end you will have taken the two
11
+ steps an agent takes hundreds of times a run, and you will have taken them
12
+ without an external binary and without an API key.
13
+
14
+ ## Prerequisites
15
+
16
+ - Node.js 26.4.0 or later.
17
+ - A package with the dependencies installed. Not on npm yet; see [Installation](https://github.com/smithersai/smithers/blob/main/packages/smithers/flows/flow/docs/installation.md#use-the-libraries).
18
+
19
+ ## Make a tree to search
20
+
21
+ Two files, so the glob filter has something to exclude:
22
+
23
+ ```bash
24
+ mkdir -p /tmp/std-quickstart/src
25
+ printf 'export function widen(value: number): number {\n return value * 2\n}\n' > /tmp/std-quickstart/src/widen.ts
26
+ printf 'widen is defined in src/widen.ts\n' > /tmp/std-quickstart/README.md
27
+ ```
28
+
29
+ ## Compose the host
30
+
31
+ `Grep.run` asks for the `Search` service; `Read.run` asks for `FileSystem`.
32
+ `PortableSearch` is the in-process implementation of `Search`, so the whole
33
+ composition is two layers:
34
+
35
+ ```ts
36
+ import { NodeServices } from "@effect/platform-node"
37
+ import * as PortableSearch from "@smthrs/std/PortableSearch"
38
+ import * as Layer from "effect/Layer"
39
+
40
+ /** FileSystem, Path, and ChildProcessSpawner, from the Node platform. */
41
+ const platform = NodeServices.layer
42
+
43
+ /** The in-process Search peer, built over that platform. */
44
+ const search = PortableSearch.layer.pipe(Layer.provide(platform))
45
+
46
+ const host = Layer.merge(platform, search)
47
+ ```
48
+
49
+ Swapping `PortableSearch.layer` for `NativeSearch.layer` runs the same calls
50
+ through the `rg` executable instead. Nothing else in this file changes, which is
51
+ the point of the seam. See [The search contract](./concepts/search-contract.md).
52
+
53
+ ## Search, then read what you found
54
+
55
+ Each returned hit carries the definition it sits inside, when the file's shape
56
+ says so plainly. That is a line range, so it is a read window rather than a
57
+ guess:
58
+
59
+ ```ts
60
+ import * as Grep from "@smthrs/std/Grep"
61
+ import * as Read from "@smthrs/std/Read"
62
+ import * as Effect from "effect/Effect"
63
+
64
+ const program = Effect.gen(function*() {
65
+ const found = yield* Grep.run({
66
+ pattern: "widen",
67
+ root: "/tmp/std-quickstart",
68
+ globs: ["*.ts"]
69
+ })
70
+ const hit = found.matches[0]
71
+ if (hit === undefined) return "no match"
72
+ console.log(`${hit.file}:${hit.line} ${hit.text}`)
73
+ console.log(`searched ${found.filesSearched} file(s)`)
74
+
75
+ const symbol = hit.symbol
76
+ if (symbol === undefined) return "no enclosing definition"
77
+ const page = yield* Read.run({
78
+ path: hit.file,
79
+ offset: symbol.startLine,
80
+ limit: symbol.endLine - symbol.startLine + 1
81
+ })
82
+ return `${symbol.kind} ${symbol.name}\n${page.content}`
83
+ })
84
+
85
+ console.log(await Effect.runPromise(Effect.provide(program, host)))
86
+ ```
87
+
88
+ Run the file with your TypeScript runner. The output is the hit, the file count,
89
+ and the whole definition:
90
+
91
+ ```text
92
+ /tmp/std-quickstart/src/widen.ts:1 export function widen(value: number): number {
93
+ searched 1 file(s)
94
+ function widen
95
+ export function widen(value: number): number {
96
+ return value * 2
97
+ }
98
+ ```
99
+
100
+ `filesSearched` is 1 because `globs: ["*.ts"]` excluded `README.md`. A glob
101
+ without a `/` matches a basename at any depth, so `*.ts` reaches
102
+ `src/widen.ts` without naming the directory.
103
+
104
+ ## What just happened
105
+
106
+ - `page.content` is raw file text. The line numbers came back as the sibling
107
+ fields `startLine`, `endLine`, and `totalLines`, never as a gutter inside the
108
+ text, so any line of `content` can be pasted straight into `edit` as an
109
+ anchor.
110
+ - `hit.symbol` is a heuristic that reports only what a file's shape says
111
+ plainly. When it cannot read a definition, it answers `undefined` rather than
112
+ guessing a window.
113
+ - Neither call took a limit from you, and both applied one: `grep` returns at
114
+ most 200 matches and `read` at most 2,000 lines. Whenever a limit bites, the
115
+ result says so in `truncated` and `notice`. See
116
+ [Limits are disclosed, never silent](./concepts/limits-and-disclosure.md).
117
+
118
+ ## Next steps
119
+
120
+ - [Search a workspace](./guides/search-a-workspace.md) for globs, context lines,
121
+ case rules, and the literal retry.
122
+ - [Read and edit a file](./guides/read-and-edit-a-file.md) for the two anchor
123
+ forms `edit` accepts and what a miss reports.
124
+ - [Bind the standard flows into a host](./guides/bind-the-standard-flows.md) to
125
+ offer all 17 flows to an agent instead of calling two by hand.