@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,228 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name2 in all)
10
+ __defProp(target, name2, { get: all[name2], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var TestRun_exports = {};
30
+ __export(TestRun_exports, {
31
+ DEFAULT_TIMEOUT_MS: () => DEFAULT_TIMEOUT_MS,
32
+ Input: () => Input,
33
+ MAX_CAPTURE_BYTES: () => MAX_CAPTURE_BYTES,
34
+ Outcome: () => Outcome,
35
+ Output: () => Output,
36
+ activity: () => activity,
37
+ capabilities: () => capabilities,
38
+ description: () => description,
39
+ effects: () => effects,
40
+ effectsFor: () => effectsFor,
41
+ flow: () => flow,
42
+ name: () => name,
43
+ presentation: () => presentation,
44
+ run: () => run,
45
+ scratchDirectory: () => scratchDirectory
46
+ });
47
+ module.exports = __toCommonJS(TestRun_exports);
48
+ var Effect = __toESM(require("effect/Effect"), 1);
49
+ var Option = __toESM(require("effect/Option"), 1);
50
+ var Schema = __toESM(require("effect/Schema"), 1);
51
+ var Container = __toESM(require("./Container.js"), 1);
52
+ var import_Declaration = require("./internal/Declaration.js");
53
+ var Exec = __toESM(require("./internal/Exec.js"), 1);
54
+ var import_GitWorktree = require("./internal/GitWorktree.js");
55
+ var Prune = __toESM(require("./internal/Prune.js"), 1);
56
+ var TestReport = __toESM(require("./internal/TestReport.js"), 1);
57
+ var import_Text = require("./internal/Text.js");
58
+ var Probe = __toESM(require("./Probe.js"), 1);
59
+ var StdError = __toESM(require("./StdError.js"), 1);
60
+ var TestRunner = __toESM(require("./TestRunner.js"), 1);
61
+ const name = "test";
62
+ const description = "Run this repository's declared test runner and get {passed, failed[ids]}, not raw output. against:'base' also runs it on the pristine base commit, so a pre-existing failure is named, not investigated.";
63
+ const scratchDirectory = Prune.testBaseScratch;
64
+ const DEFAULT_TIMEOUT_MS = 6e5;
65
+ const MAX_CAPTURE_BYTES = 8e6;
66
+ const Input = Schema.Struct({
67
+ selection: Schema.optional(Schema.Array(Schema.String)).annotate({
68
+ description: "Test ids, paths or selectors passed to the runner as arguments; all tests when omitted"
69
+ }),
70
+ against: Schema.optional(Schema.Literals(["workspace", "base"])).annotate({
71
+ description: "workspace (default) runs the tree as it stands; base also runs the pristine base commit and reports which failures are new"
72
+ }),
73
+ timeoutMs: Schema.optional(Schema.Number).annotate({ description: "Wall-clock timeout in milliseconds" })
74
+ });
75
+ const Outcome = Schema.Struct({
76
+ command: Schema.String.annotate({
77
+ description: "The logical invocation that ran, without container transport arguments"
78
+ }),
79
+ exitCode: Schema.Number,
80
+ passed: Schema.Number.annotate({ description: "Tests reported passing; 0 when parsed is false" }),
81
+ failed: Schema.Array(Schema.String).annotate({ description: "Ids of the tests reported failing or erroring" }),
82
+ parsed: Schema.Boolean.annotate({
83
+ description: "Whether the runner's complete report could be read; when false, tail is all there is. Base attribution is omitted unless both reports are complete"
84
+ }),
85
+ tail: Schema.String.annotate({ description: "The end of the runner's combined output" }),
86
+ // `<field>Truncated` beside `<field>` is the wire convention
87
+ // `@smthrs/harness/TruncatedOutput` reads to refuse a later write of these
88
+ // exact bytes. A tail written over a file replaces it with its own end.
89
+ tailTruncated: Schema.Boolean.annotate({
90
+ description: "Whether the runner printed more than tail carries, leaving tail a fragment that must not be written"
91
+ }),
92
+ tailDroppedBytes: Schema.Number.annotate({ description: "UTF-8 bytes omitted from the start of tail" }),
93
+ invalidProbe: Schema.optional(Probe.InvalidProbe)
94
+ });
95
+ const Output = Schema.Struct({
96
+ ...Outcome.fields,
97
+ base: Schema.optional(Schema.Struct({
98
+ ...Outcome.fields,
99
+ ref: Schema.String.annotate({ description: "The ref the baseline tree came from" }),
100
+ commit: Schema.String.annotate({ description: "The commit the baseline tree came from" })
101
+ })),
102
+ introduced: Schema.optional(Schema.Array(Schema.String)).annotate({
103
+ description: "Failing here and not on the base tree: the failures this working tree is responsible for"
104
+ }),
105
+ preexisting: Schema.optional(Schema.Array(Schema.String)).annotate({
106
+ description: "Failing on both trees: not yours, and not worth investigating"
107
+ }),
108
+ fixed: Schema.optional(Schema.Array(Schema.String)).annotate({
109
+ description: "Failing on the base tree and passing here"
110
+ })
111
+ });
112
+ const effects = (0, import_Declaration.envelope)({ tier: "irreversible", mode: "expected", reads: [], writes: [] });
113
+ const effectsFor = (_input) => effects;
114
+ const capabilities = [(0, import_Declaration.capability)("proc:spawn", "*")];
115
+ const flow = { name, description, input: Input, output: Output, capabilities, effects };
116
+ const activity = "tests";
117
+ const presentation = {
118
+ verb: { pending: "running", success: "ran", failure: "failed to run" },
119
+ subject: "selection",
120
+ result: "tests"
121
+ };
122
+ const invocation = (runner, selection) => ({
123
+ file: "bash",
124
+ args: ["-c", `${runner.command} "$@"`, runner.command, ...selection]
125
+ });
126
+ const failed = (message, code = "command_failed") => new StdError.StdError({ code, message });
127
+ const execute = (runner, transport, options) => Effect.gen(function* () {
128
+ const plan = invocation(runner, options.selection);
129
+ const routed = runner.container === void 0 ? { ...plan, env: runner.env } : Option.isNone(transport) ? yield* Effect.fail(Container.unavailable(runner.container)) : yield* transport.value.exec({
130
+ container: runner.container,
131
+ file: plan.file,
132
+ args: plan.args,
133
+ ...options.cwd === void 0 ? {} : { cwd: options.cwd },
134
+ ...runner.env === void 0 ? {} : { env: runner.env },
135
+ stdin: false
136
+ });
137
+ const quoted = [plan.file, ...plan.args].join(" ");
138
+ const result = yield* Exec.exec(routed.file, {
139
+ args: [...routed.args],
140
+ ...options.cwd === void 0 || runner.container !== void 0 ? {} : { cwd: options.cwd },
141
+ ...routed.env === void 0 ? {} : { env: routed.env },
142
+ timeoutMs: options.timeoutMs,
143
+ maxCaptureBytes: MAX_CAPTURE_BYTES
144
+ }).pipe(
145
+ Effect.mapError(
146
+ (error) => new StdError.StdError({
147
+ code: Exec.toStdErrorCode(error),
148
+ message: `The test runner did not run: ${error.message}`,
149
+ ...error.limitMillis === void 0 ? {} : { limitMillis: error.limitMillis }
150
+ })
151
+ )
152
+ );
153
+ const combined = result.stderr === "" ? result.stdout : result.stdout === "" ? result.stderr : `${result.stdout}
154
+ ${result.stderr}`;
155
+ const tail = (0, import_Text.truncateBytes)(combined, import_Text.MAX_SHELL_OUTPUT_BYTES, { keep: "tail" });
156
+ const report = TestReport.parse(combined);
157
+ const probe = yield* Probe.classify({
158
+ command: quoted,
159
+ exitCode: result.exitCode,
160
+ output: tail.text
161
+ }).pipe(Effect.mapError(Probe.unjudged));
162
+ const capturedDroppedBytes = result.stdoutDroppedBytes + result.stderrDroppedBytes;
163
+ return {
164
+ outcome: {
165
+ command: quoted,
166
+ exitCode: result.exitCode,
167
+ passed: report.passed,
168
+ failed: report.failed,
169
+ parsed: report.parsed,
170
+ tail: tail.text,
171
+ tailTruncated: capturedDroppedBytes > 0 || tail.truncated,
172
+ tailDroppedBytes: capturedDroppedBytes + tail.droppedBytes,
173
+ ...probe.invalidProbe === void 0 ? {} : { invalidProbe: probe.invalidProbe }
174
+ },
175
+ report
176
+ };
177
+ });
178
+ const run = Effect.fn("TestRun.run")(function* (input) {
179
+ const declaration = yield* TestRunner.TestRunner;
180
+ const runner = yield* declaration.declared;
181
+ if (input.against === "base" && runner.baseline === false) {
182
+ return yield* Effect.fail(failed(
183
+ "Baseline comparison is unavailable on this host. Run against the workspace.",
184
+ "provider_unavailable"
185
+ ));
186
+ }
187
+ const transport = yield* Effect.serviceOption(Container.Container);
188
+ const selection = input.selection ?? [];
189
+ const timeoutMs = input.timeoutMs ?? runner.timeoutMs ?? DEFAULT_TIMEOUT_MS;
190
+ const current = yield* execute(runner, transport, {
191
+ selection,
192
+ cwd: runner.cwd,
193
+ timeoutMs
194
+ });
195
+ if (input.against !== "base") return current.outcome;
196
+ const root = runner.root ?? runner.cwd;
197
+ if (root === void 0) {
198
+ return yield* Effect.fail(
199
+ failed(
200
+ "The declared runner names no repository directory, so there is no base tree to check out",
201
+ "invalid_input"
202
+ )
203
+ );
204
+ }
205
+ const base = yield* import_GitWorktree.GitWorktree.resolveCommit(
206
+ root,
207
+ runner.baseRef === void 0 ? [TestRunner.captureBase, "HEAD"] : [runner.baseRef]
208
+ ).pipe(Effect.mapError(
209
+ (error) => error.code === "not_found" ? failed(`No pristine base to compare against: ${error.message} Run against the workspace instead.`, "not_found") : error
210
+ ));
211
+ const baseline = yield* import_GitWorktree.GitWorktree.withDetachedWorktree(
212
+ root,
213
+ `${scratchDirectory}/run`,
214
+ base.commit,
215
+ (scratch) => execute(runner, transport, {
216
+ selection,
217
+ cwd: runner.cwd === void 0 ? scratch : `${runner.cwd.replace(/\/+$/, "")}${scratch.slice(root.replace(/\/+$/, "").length)}`,
218
+ timeoutMs
219
+ })
220
+ );
221
+ const difference = TestReport.attribute(current.report, baseline.report);
222
+ return {
223
+ ...current.outcome,
224
+ base: { ...baseline.outcome, ref: base.ref, commit: base.commit },
225
+ ...difference === void 0 ? {} : difference
226
+ };
227
+ });
228
+ //# sourceMappingURL=TestRun.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/TestRun.ts"],
4
+ "sourcesContent": ["/**\n * The `test` flow: run the declared suite, and answer with the two facts.\n *\n * Two things this returns that a shell command cannot. First, a *reading*:\n * `{passed, failed}` parsed from the runner's own report, with the raw tail\n * kept for whatever the parse could not carry \u2014 a suite's answer is a number\n * and a list of names, not twenty kilobytes of stdout for a model to re-read.\n *\n * Second, `against: \"base\"`: the same selection also runs against the pristine\n * base commit in a scratch checkout, and the two failure sets are differenced\n * here. That is the whole of attribution, in one call. Without it, agents pay\n * for it in frames \u2014 sphinx-8721 spent fourteen frames because a pre-existing\n * failure was never baselined, sympy-13878 spent $0.90 on the same mistake, and\n * django-24970 spent three frames. The rule the harness teaches (\"before\n * blaming your own edit, run the same command on the unmodified tree\") is only\n * cheap when the tool can do it.\n *\n * A third thing is answered on the way out: whether a non-zero exit is the\n * tree's failure at all, or the command failing to resolve a name. Jev decides\n * it through `Probe.classify`, so the flow needs an `Evaluator` and a host\n * uses its configured subscription seat. A judge that does not answer fails the call with\n * the code `Probe.unjudged` names, because a run nobody judged is not a run\n * this flow can report on.\n *\n * @since 1.0.0\n */\n\nimport type * as ChildProcessSpawner from \"@smthrs/kernel/ChildProcessSpawner\"\nimport type * as Evaluator from \"@smthrs/model/Evaluator\"\nimport * as Effect from \"effect/Effect\"\nimport * as Option from \"effect/Option\"\nimport * as Schema from \"effect/Schema\"\nimport * as Container from \"./Container.ts\"\nimport { capability, envelope } from \"./internal/Declaration.ts\"\nimport * as Exec from \"./internal/Exec.ts\"\nimport { GitWorktree } from \"./internal/GitWorktree.ts\"\nimport * as Prune from \"./internal/Prune.ts\"\nimport * as TestReport from \"./internal/TestReport.ts\"\nimport { MAX_SHELL_OUTPUT_BYTES, truncateBytes } from \"./internal/Text.ts\"\nimport * as Probe from \"./Probe.ts\"\nimport * as StdError from \"./StdError.ts\"\nimport * as TestRunner from \"./TestRunner.ts\"\n\n/**\n * Registry name for the test flow.\n *\n * @category identifiers\n * @since 1.0.0\n */\nexport const name = \"test\"\n\n/**\n * Model-facing description of the test flow.\n *\n * @category descriptions\n * @since 1.0.0\n */\nexport const description =\n \"Run this repository's declared test runner and get {passed, failed[ids]}, not raw output. against:'base' also runs it on the pristine base commit, so a pre-existing failure is named, not investigated.\"\n\n/**\n * The parent directory baseline checkouts are written into, relative to the\n * repository root, and therefore also relative to the runner's own directory.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const scratchDirectory = Prune.testBaseScratch\n\n/**\n * Default wall-clock budget for one test run.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const DEFAULT_TIMEOUT_MS = 600_000\n\n/**\n * Maximum bytes retained from each stream while a test run executes.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const MAX_CAPTURE_BYTES = 8_000_000\n\n/**\n * Input schema for the test flow.\n *\n * @category schemas\n * @since 1.0.0\n */\nexport const Input = Schema.Struct({\n selection: Schema.optional(Schema.Array(Schema.String)).annotate({\n description: \"Test ids, paths or selectors passed to the runner as arguments; all tests when omitted\"\n }),\n against: Schema.optional(Schema.Literals([\"workspace\", \"base\"])).annotate({\n description:\n \"workspace (default) runs the tree as it stands; base also runs the pristine base commit and reports which failures are new\"\n }),\n timeoutMs: Schema.optional(Schema.Number).annotate({ description: \"Wall-clock timeout in milliseconds\" })\n})\n\n/**\n * Decoded input accepted by the `test` flow.\n *\n * @category models\n * @since 1.0.0\n */\nexport type Input = typeof Input.Type\n\n/**\n * One run's outcome.\n *\n * @category schemas\n * @since 1.0.0\n */\nexport const Outcome = Schema.Struct({\n command: Schema.String.annotate({\n description: \"The logical invocation that ran, without container transport arguments\"\n }),\n exitCode: Schema.Number,\n passed: Schema.Number.annotate({ description: \"Tests reported passing; 0 when parsed is false\" }),\n failed: Schema.Array(Schema.String).annotate({ description: \"Ids of the tests reported failing or erroring\" }),\n parsed: Schema.Boolean.annotate({\n description:\n \"Whether the runner's complete report could be read; when false, tail is all there is. Base attribution is omitted unless both reports are complete\"\n }),\n tail: Schema.String.annotate({ description: \"The end of the runner's combined output\" }),\n // `<field>Truncated` beside `<field>` is the wire convention\n // `@smthrs/harness/TruncatedOutput` reads to refuse a later write of these\n // exact bytes. A tail written over a file replaces it with its own end.\n tailTruncated: Schema.Boolean.annotate({\n description: \"Whether the runner printed more than tail carries, leaving tail a fragment that must not be written\"\n }),\n tailDroppedBytes: Schema.Number.annotate({ description: \"UTF-8 bytes omitted from the start of tail\" }),\n invalidProbe: Schema.optional(Probe.InvalidProbe)\n})\n\n/**\n * Output schema for the test flow.\n *\n * @category schemas\n * @since 1.0.0\n */\nexport const Output = Schema.Struct({\n ...Outcome.fields,\n base: Schema.optional(Schema.Struct({\n ...Outcome.fields,\n ref: Schema.String.annotate({ description: \"The ref the baseline tree came from\" }),\n commit: Schema.String.annotate({ description: \"The commit the baseline tree came from\" })\n })),\n introduced: Schema.optional(Schema.Array(Schema.String)).annotate({\n description: \"Failing here and not on the base tree: the failures this working tree is responsible for\"\n }),\n preexisting: Schema.optional(Schema.Array(Schema.String)).annotate({\n description: \"Failing on both trees: not yours, and not worth investigating\"\n }),\n fixed: Schema.optional(Schema.Array(Schema.String)).annotate({\n description: \"Failing on the base tree and passing here\"\n })\n})\n\n/**\n * Decoded output returned by the `test` flow.\n *\n * @category models\n * @since 1.0.0\n */\nexport type Output = typeof Output.Type\n\n/**\n * Static conservative effect envelope for the test flow.\n *\n * @category effects\n * @since 1.0.0\n */\nexport const effects = envelope({ tier: \"irreversible\", mode: \"expected\", reads: [], writes: [] })\n\n/**\n * Narrows the effect envelope for a decoded invocation.\n *\n * @category effects\n * @since 1.0.0\n */\nexport const effectsFor = (_input: typeof Input.Type) => effects\n\n/**\n * Capabilities required by the test flow.\n *\n * @category capabilities\n * @since 1.0.0\n */\nexport const capabilities = [capability(\"proc:spawn\", \"*\")]\n\n/**\n * Declaration-only test flow.\n *\n * @category flows\n * @since 1.0.0\n */\nexport const flow = { name, description, input: Input, output: Output, capabilities, effects } as const\n\n/**\n * What a call to this flow does, for a reader of a run.\n *\n * Display metadata only. `@smthrs/registry` `Descriptor.FlowActivity` is the\n * governing vocabulary and `StandardFlows` binds this value onto the flow's\n * descriptor, where the binding site checks it. `declarationDigest` excludes\n * it, so declaring it cannot invalidate a call identity or a cached prompt.\n *\n * @category presentation\n * @since 1.0.0-rc.0\n */\nexport const activity = \"tests\" as const\n\n/**\n * How one recorded call to this flow reads: the verb for each settlement, the\n * input field that is its subject, and the measured output fields a one-line\n * summary may count.\n *\n * Display metadata only, governed by `@smthrs/registry`\n * `Descriptor.CallPresentation` and checked where `StandardFlows` binds it.\n *\n * @category presentation\n * @since 1.0.0-rc.0\n */\nexport const presentation = {\n verb: { pending: \"running\", success: \"ran\", failure: \"failed to run\" },\n subject: \"selection\",\n result: \"tests\"\n} as const\n\n/**\n * The invocation for one run: the declared command line with the selection\n * appended as arguments rather than as text.\n *\n * `bash -c '<command> \"$@\"' <command> id\u2026` is how a selection reaches a runner\n * without being quoted into it. A test id holds `::`, `[`, `]`, spaces and\n * shell metacharacters routinely, and every one of them is data here.\n */\nconst invocation = (\n runner: TestRunner.Runner,\n selection: ReadonlyArray<string>\n): { readonly file: string; readonly args: ReadonlyArray<string> } => ({\n file: \"bash\",\n args: [\"-c\", `${runner.command} \"$@\"`, runner.command, ...selection]\n})\n\nconst failed = (message: string, code: StdError.Code = \"command_failed\"): StdError.StdError =>\n new StdError.StdError({ code, message })\n\n/** Runs one invocation, in the container when the declaration names one. */\nconst execute = (\n runner: TestRunner.Runner,\n transport: Option.Option<Container.Container>,\n options: {\n readonly selection: ReadonlyArray<string>\n readonly cwd: string | undefined\n readonly timeoutMs: number\n }\n): Effect.Effect<\n { readonly outcome: typeof Outcome.Type; readonly report: TestReport.Report },\n StdError.StdError,\n ChildProcessSpawner.ChildProcessSpawner | Evaluator.Evaluator\n> =>\n Effect.gen(function*() {\n const plan = invocation(runner, options.selection)\n const routed: Container.Plan = runner.container === undefined ?\n { ...plan, env: runner.env } :\n Option.isNone(transport)\n ? yield* Effect.fail(Container.unavailable(runner.container))\n : yield* transport.value.exec({\n container: runner.container,\n file: plan.file,\n args: plan.args,\n ...(options.cwd === undefined ? {} : { cwd: options.cwd }),\n ...(runner.env === undefined ? {} : { env: runner.env }),\n stdin: false\n })\n // Report the logical invocation, never the transport or its credentials.\n const quoted = [plan.file, ...plan.args].join(\" \")\n const result = yield* Exec.exec(routed.file, {\n args: [...routed.args],\n ...(options.cwd === undefined || runner.container !== undefined ? {} : { cwd: options.cwd }),\n ...(routed.env === undefined ? {} : { env: routed.env }),\n timeoutMs: options.timeoutMs,\n maxCaptureBytes: MAX_CAPTURE_BYTES\n }).pipe(\n Effect.mapError((error) =>\n new StdError.StdError({\n code: Exec.toStdErrorCode(error),\n message: `The test runner did not run: ${error.message}`,\n ...(error.limitMillis === undefined ? {} : { limitMillis: error.limitMillis })\n })\n )\n )\n const combined = result.stderr === \"\"\n ? result.stdout\n : result.stdout === \"\"\n ? result.stderr\n : `${result.stdout}\\n${result.stderr}`\n const tail = truncateBytes(combined, MAX_SHELL_OUTPUT_BYTES, { keep: \"tail\" })\n const report = TestReport.parse(combined)\n // Judged on the text this call returns rather than the text it captured,\n // so the attribution is made from the output the reader can see. A judge\n // that does not answer fails the call: see `Probe.unjudged`.\n const probe = yield* Probe.classify({\n command: quoted,\n exitCode: result.exitCode,\n output: tail.text\n }).pipe(Effect.mapError(Probe.unjudged))\n const capturedDroppedBytes = result.stdoutDroppedBytes + result.stderrDroppedBytes\n return {\n outcome: {\n command: quoted,\n exitCode: result.exitCode,\n passed: report.passed,\n failed: report.failed,\n parsed: report.parsed,\n tail: tail.text,\n tailTruncated: capturedDroppedBytes > 0 || tail.truncated,\n tailDroppedBytes: capturedDroppedBytes + tail.droppedBytes,\n ...(probe.invalidProbe === undefined ? {} : { invalidProbe: probe.invalidProbe })\n },\n report\n }\n })\n\n/**\n * Runs the declared suite, and on request the same suite on the pristine base.\n *\n * Baseline Git and both runners use the caller-provided process service.\n * A host that cannot safely stage the base declares `baseline: false`, which\n * refuses the request before running either suite or Git. Library hosts that\n * support staging remove the detached checkout when the call ends.\n *\n * @category handlers\n * @since 1.0.0\n */\nexport const run = Effect.fn(\"TestRun.run\")(function*(\n input: typeof Input.Type\n): Effect.fn.Return<\n typeof Output.Type,\n StdError.StdError,\n ChildProcessSpawner.ChildProcessSpawner | Evaluator.Evaluator | TestRunner.TestRunner\n> {\n const declaration = yield* TestRunner.TestRunner\n const runner = yield* declaration.declared\n if (input.against === \"base\" && runner.baseline === false) {\n return yield* Effect.fail(failed(\n \"Baseline comparison is unavailable on this host. Run against the workspace.\",\n \"provider_unavailable\"\n ))\n }\n const transport = yield* Effect.serviceOption(Container.Container)\n const selection = input.selection ?? []\n const timeoutMs = input.timeoutMs ?? runner.timeoutMs ?? DEFAULT_TIMEOUT_MS\n const current = yield* execute(runner, transport, {\n selection,\n cwd: runner.cwd,\n timeoutMs\n })\n if (input.against !== \"base\") return current.outcome\n\n const root = runner.root ?? runner.cwd\n if (root === undefined) {\n return yield* Effect.fail(\n failed(\n \"The declared runner names no repository directory, so there is no base tree to check out\",\n \"invalid_input\"\n )\n )\n }\n const base = yield* GitWorktree.resolveCommit(\n root,\n runner.baseRef === undefined ? [TestRunner.captureBase, \"HEAD\"] : [runner.baseRef]\n ).pipe(Effect.mapError((error) =>\n error.code === \"not_found\"\n ? failed(`No pristine base to compare against: ${error.message} Run against the workspace instead.`, \"not_found\")\n : error\n ))\n const baseline = yield* GitWorktree.withDetachedWorktree(\n root,\n `${scratchDirectory}/run`,\n base.commit,\n (scratch) =>\n execute(runner, transport, {\n selection,\n cwd: runner.cwd === undefined\n ? scratch\n : `${runner.cwd.replace(/\\/+$/, \"\")}${scratch.slice(root.replace(/\\/+$/, \"\").length)}`,\n timeoutMs\n })\n )\n const difference = TestReport.attribute(current.report, baseline.report)\n return {\n ...current.outcome,\n base: { ...baseline.outcome, ref: base.ref, commit: base.commit },\n ...(difference === undefined ? {} : difference)\n }\n})\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,102 @@
1
+ /**
2
+ * The repository's own test invocation, declared once by the host.
3
+ *
4
+ * Every repository already knows how to run its tests, and the harness is told
5
+ * so at setup. What the measured program shows is what happens when that fact
6
+ * is not a *callable* thing: agents guess labels
7
+ * (`management_commands.test_flush`, `tests/related_lookup`, `test_axis.py` —
8
+ * none of which exist), and a guessed label costs a frame each time. Seven such
9
+ * invocations are documented across the 45 instances.
10
+ *
11
+ * So the invocation is a declaration, not a parameter: a caller of the `test`
12
+ * flow selects *which* tests, never *how* to run them.
13
+ *
14
+ * @since 1.0.0
15
+ */
16
+ import { Context, Effect, Layer } from "effect";
17
+ import * as StdError from "./StdError.ts";
18
+ /**
19
+ * The default ref naming a tree as it stood before the agent touched it.
20
+ *
21
+ * The engine records the pristine checkout under this ref, so a baseline run
22
+ * reuses what already exists instead of inventing a second notion of "base".
23
+ *
24
+ * @category constants
25
+ * @since 1.0.0
26
+ */
27
+ export declare const captureBase = "refs/flows/capture-base";
28
+ /**
29
+ * How this repository runs its tests.
30
+ *
31
+ * `cwd` is where the runner runs, and `root` is the host directory holding the
32
+ * git repository. They differ exactly when the runner runs in a container: the
33
+ * container sees the repository at `cwd`, the host sees it at `root`, and a
34
+ * baseline checkout created at `<root>/<name>` is visible to the runner at
35
+ * `<cwd>/<name>` because it is the same directory under two names.
36
+ *
37
+ * @category models
38
+ * @since 1.0.0
39
+ */
40
+ export interface Runner {
41
+ /** The runner command line, without any test selection. */
42
+ readonly command: string;
43
+ /** Where the runner runs; the container's path when `container` is set. */
44
+ readonly cwd?: string | undefined;
45
+ /** The host path of the repository, when it differs from `cwd`. */
46
+ readonly root?: string | undefined;
47
+ /** A container to route the run through, via the `Container` transport. */
48
+ readonly container?: string | undefined;
49
+ /** Environment the runner needs. */
50
+ readonly env?: Record<string, string> | undefined;
51
+ /** The ref whose commit is the pristine base; defaults to {@link captureBase}, then HEAD. */
52
+ readonly baseRef?: string | undefined;
53
+ /** False refuses baseline requests before any process runs. */
54
+ readonly baseline?: false | undefined;
55
+ /** Default wall-clock budget for one run. */
56
+ readonly timeoutMs?: number | undefined;
57
+ }
58
+ /**
59
+ * The declaration service.
60
+ *
61
+ * @category services
62
+ * @since 1.0.0
63
+ */
64
+ export interface TestRunner {
65
+ readonly declared: Effect.Effect<Runner, StdError.StdError>;
66
+ }
67
+ /**
68
+ * The {@link TestRunner} service tag.
69
+ *
70
+ * @category services
71
+ * @since 1.0.0
72
+ */
73
+ export declare const TestRunner: Context.Service<TestRunner, TestRunner>;
74
+ /**
75
+ * Declares one repository's runner.
76
+ *
77
+ * @category constructors
78
+ * @since 1.0.0
79
+ */
80
+ export declare const make: (runner: Runner) => TestRunner;
81
+ /**
82
+ * Declares that this host knows of no runner.
83
+ *
84
+ * @category constructors
85
+ * @since 1.0.0
86
+ */
87
+ export declare const makeNoop: () => TestRunner;
88
+ /**
89
+ * Provides {@link make}.
90
+ *
91
+ * @category layers
92
+ * @since 1.0.0
93
+ */
94
+ export declare const layer: (runner: Runner) => Layer.Layer<TestRunner>;
95
+ /**
96
+ * Provides {@link makeNoop}.
97
+ *
98
+ * @category layers
99
+ * @since 1.0.0
100
+ */
101
+ export declare const layerNoop: Layer.Layer<TestRunner>;
102
+ //# sourceMappingURL=TestRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestRunner.d.ts","sourceRoot":"","sources":["../../src/TestRunner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC/C,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,4BAA4B,CAAA;AAEpD;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,MAAM;IACrB,2DAA2D;IAC3D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,mEAAmE;IACnE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,2EAA2E;IAC3E,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACvC,oCAAoC;IACpC,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;IACjD,6FAA6F;IAC7F,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,+DAA+D;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAA;IACrC,6CAA6C;IAC7C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACxC;AAED;;;;;GAKG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;CAC5D;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,UAAU,CAA6C,CAAA;AAE5G;;;;;GAKG;AACH,eAAO,MAAM,IAAI,GAAI,QAAQ,MAAM,KAAG,UAAiE,CAAA;AAEvG;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,QAAO,UASxB,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,QAAQ,MAAM,KAAG,KAAK,CAAC,KAAK,CAAC,UAAU,CAA4C,CAAA;AAEzG;;;;;GAKG;AACH,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,CAAyC,CAAA"}
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var TestRunner_exports = {};
30
+ __export(TestRunner_exports, {
31
+ TestRunner: () => TestRunner,
32
+ captureBase: () => captureBase,
33
+ layer: () => layer,
34
+ layerNoop: () => layerNoop,
35
+ make: () => make,
36
+ makeNoop: () => makeNoop
37
+ });
38
+ module.exports = __toCommonJS(TestRunner_exports);
39
+ var import_effect = require("effect");
40
+ var StdError = __toESM(require("./StdError.js"), 1);
41
+ const captureBase = "refs/flows/capture-base";
42
+ const TestRunner = import_effect.Context.Service("@smthrs/std/TestRunner");
43
+ const make = (runner) => TestRunner.of({ declared: import_effect.Effect.succeed(runner) });
44
+ const makeNoop = () => TestRunner.of({
45
+ declared: import_effect.Effect.fail(
46
+ new StdError.StdError({
47
+ code: "provider_unavailable",
48
+ message: "No test runner is declared for this repository, so there is nothing for the test flow to run. Use bash with the command this project's own documentation gives."
49
+ })
50
+ )
51
+ });
52
+ const layer = (runner) => import_effect.Layer.succeed(TestRunner, make(runner));
53
+ const layerNoop = import_effect.Layer.succeed(TestRunner, makeNoop());
54
+ //# sourceMappingURL=TestRunner.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/TestRunner.ts"],
4
+ "sourcesContent": ["/**\n * The repository's own test invocation, declared once by the host.\n *\n * Every repository already knows how to run its tests, and the harness is told\n * so at setup. What the measured program shows is what happens when that fact\n * is not a *callable* thing: agents guess labels\n * (`management_commands.test_flush`, `tests/related_lookup`, `test_axis.py` \u2014\n * none of which exist), and a guessed label costs a frame each time. Seven such\n * invocations are documented across the 45 instances.\n *\n * So the invocation is a declaration, not a parameter: a caller of the `test`\n * flow selects *which* tests, never *how* to run them.\n *\n * @since 1.0.0\n */\n\nimport { Context, Effect, Layer } from \"effect\"\nimport * as StdError from \"./StdError.ts\"\n\n/**\n * The default ref naming a tree as it stood before the agent touched it.\n *\n * The engine records the pristine checkout under this ref, so a baseline run\n * reuses what already exists instead of inventing a second notion of \"base\".\n *\n * @category constants\n * @since 1.0.0\n */\nexport const captureBase = \"refs/flows/capture-base\"\n\n/**\n * How this repository runs its tests.\n *\n * `cwd` is where the runner runs, and `root` is the host directory holding the\n * git repository. They differ exactly when the runner runs in a container: the\n * container sees the repository at `cwd`, the host sees it at `root`, and a\n * baseline checkout created at `<root>/<name>` is visible to the runner at\n * `<cwd>/<name>` because it is the same directory under two names.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface Runner {\n /** The runner command line, without any test selection. */\n readonly command: string\n /** Where the runner runs; the container's path when `container` is set. */\n readonly cwd?: string | undefined\n /** The host path of the repository, when it differs from `cwd`. */\n readonly root?: string | undefined\n /** A container to route the run through, via the `Container` transport. */\n readonly container?: string | undefined\n /** Environment the runner needs. */\n readonly env?: Record<string, string> | undefined\n /** The ref whose commit is the pristine base; defaults to {@link captureBase}, then HEAD. */\n readonly baseRef?: string | undefined\n /** False refuses baseline requests before any process runs. */\n readonly baseline?: false | undefined\n /** Default wall-clock budget for one run. */\n readonly timeoutMs?: number | undefined\n}\n\n/**\n * The declaration service.\n *\n * @category services\n * @since 1.0.0\n */\nexport interface TestRunner {\n readonly declared: Effect.Effect<Runner, StdError.StdError>\n}\n\n/**\n * The {@link TestRunner} service tag.\n *\n * @category services\n * @since 1.0.0\n */\nexport const TestRunner: Context.Service<TestRunner, TestRunner> = Context.Service(\"@smthrs/std/TestRunner\")\n\n/**\n * Declares one repository's runner.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const make = (runner: Runner): TestRunner => TestRunner.of({ declared: Effect.succeed(runner) })\n\n/**\n * Declares that this host knows of no runner.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const makeNoop = (): TestRunner =>\n TestRunner.of({\n declared: Effect.fail(\n new StdError.StdError({\n code: \"provider_unavailable\",\n message:\n \"No test runner is declared for this repository, so there is nothing for the test flow to run. Use bash with the command this project's own documentation gives.\"\n })\n )\n })\n\n/**\n * Provides {@link make}.\n *\n * @category layers\n * @since 1.0.0\n */\nexport const layer = (runner: Runner): Layer.Layer<TestRunner> => Layer.succeed(TestRunner, make(runner))\n\n/**\n * Provides {@link makeNoop}.\n *\n * @category layers\n * @since 1.0.0\n */\nexport const layerNoop: Layer.Layer<TestRunner> = Layer.succeed(TestRunner, makeNoop())\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBA,oBAAuC;AACvC,eAA0B;AAWnB,MAAM,cAAc;AAiDpB,MAAM,aAAsD,sBAAQ,QAAQ,wBAAwB;AAQpG,MAAM,OAAO,CAAC,WAA+B,WAAW,GAAG,EAAE,UAAU,qBAAO,QAAQ,MAAM,EAAE,CAAC;AAQ/F,MAAM,WAAW,MACtB,WAAW,GAAG;AAAA,EACZ,UAAU,qBAAO;AAAA,IACf,IAAI,SAAS,SAAS;AAAA,MACpB,MAAM;AAAA,MACN,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AACF,CAAC;AAQI,MAAM,QAAQ,CAAC,WAA4C,oBAAM,QAAQ,YAAY,KAAK,MAAM,CAAC;AAQjG,MAAM,YAAqC,oBAAM,QAAQ,YAAY,SAAS,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,140 @@
1
+ /**
2
+ * The identity of one directory tree, measured where the tree is.
3
+ *
4
+ * `@smthrs/agent/WorkspaceObservation` measures the host workspace around
5
+ * every frame so the loop's mutation accounting is a fact rather than a
6
+ * claim. A command routed into a container writes to a filesystem that walk
7
+ * never sees: the SWE-bench rig bind-mounts the checkout into its container,
8
+ * so a container edit lands on the host too, but a container Harbor or Pier
9
+ * starts has no such mount, and every edit an agent made there read as an
10
+ * idle frame. Measured 2026-09-22 on Terminal-Bench 4.0: `read_only_cap`
11
+ * ended one run after twenty-four frames of container writes, and the claim
12
+ * judge refused another's completion as "work this run never recorded".
13
+ *
14
+ * This module is the same measurement taken inside the container: one POSIX
15
+ * shell script that lists every kept file under a directory with its size and
16
+ * modification time, in sorted order, and prints one checksum of the listing.
17
+ * `bash` runs it through the container transport before and after a
18
+ * containerised command and reports whether the two answers differ under the
19
+ * reserved {@link key}. The harness reads that key as a measured write, the
20
+ * way it reads `invalidProbe` as a measured refusal.
21
+ *
22
+ * The same properties as the host walk, and the same stated limits:
23
+ *
24
+ * - **Identity, not content.** Size and mtime per file; a rewrite that
25
+ * restores both is invisible.
26
+ * - **Pruning is the signal.** {@link defaultPrune} and
27
+ * {@link defaultIgnoreSuffixes} are the one list both measurements use, so
28
+ * a derived artifact the host walk skips is skipped here too.
29
+ * - **A partial listing says so.** The listing stops at {@link maxPaths}, and
30
+ * a measurement that stopped there reports `complete: false`; `bash` then
31
+ * reports nothing rather than a guess.
32
+ * - **Every tool it needs is POSIX or busybox.** `find -prune`, `stat -c`,
33
+ * `sort`, `head`, `cksum` and `grep -c` are in every Linux base image this
34
+ * has been run against, GNU and busybox alike. A container that lacks one
35
+ * answers with a non-zero exit, which is read as "unmeasured".
36
+ *
37
+ * @since 1.0.0
38
+ */
39
+ /**
40
+ * The reserved output key a flow reports a measured write under.
41
+ *
42
+ * A wire contract with the harness rather than a shared type, exactly as
43
+ * `Probe.key` is: `@smthrs/harness` reads this key off a `Schema.Json` result
44
+ * and must not depend on the tool library to do it. `true` means the tree the
45
+ * call targeted differed after the call from before it; `false` means it was
46
+ * measured and held still; absent means it was not measured.
47
+ *
48
+ * @category identifiers
49
+ * @since 1.0.0
50
+ */
51
+ export declare const key = "mutated";
52
+ /**
53
+ * Directory names never descended into.
54
+ *
55
+ * Every entry is a place a tool writes derived state while the run is working:
56
+ * version-control internals, dependency trees, and the caches Python, Node,
57
+ * Rust and their test runners keep beside the sources. A run that changes only
58
+ * these has changed nothing it will be judged on.
59
+ *
60
+ * @category constants
61
+ * @since 1.0.0
62
+ */
63
+ export declare const defaultPrune: ReadonlyArray<string>;
64
+ /**
65
+ * File and directory name suffixes left out of a measurement.
66
+ *
67
+ * Compiled output is the case that matters: several SWE-bench projects build
68
+ * extensions in place, which drops `.so` files next to the `.py` files they
69
+ * came from. Those move whenever the run executes its test suite, and
70
+ * counting them would report every probe as an edit.
71
+ *
72
+ * @category constants
73
+ * @since 1.0.0
74
+ */
75
+ export declare const defaultIgnoreSuffixes: ReadonlyArray<string>;
76
+ /**
77
+ * The largest number of files one measurement covers.
78
+ *
79
+ * The same bound the host walk uses, for the same reason: a listing that
80
+ * stopped here covers a prefix chosen by sort order, and a prefix holding
81
+ * still says nothing about the files being edited outside it.
82
+ *
83
+ * @category constants
84
+ * @since 1.0.0
85
+ */
86
+ export declare const maxPaths = 50000;
87
+ /**
88
+ * One measurement, as {@link parse} reads it off the script's output.
89
+ *
90
+ * @category models
91
+ * @since 1.0.0
92
+ */
93
+ export interface Measurement {
94
+ /** The checksum of the whole listing; equal for two measurements of an unchanged tree. */
95
+ readonly digest: string;
96
+ /** How many files the listing covered. */
97
+ readonly paths: number;
98
+ /** Whether the listing covered the whole tree rather than a bounded prefix. */
99
+ readonly complete: boolean;
100
+ }
101
+ /**
102
+ * The POSIX shell script that measures the current directory.
103
+ *
104
+ * Prints two lines: `cksum`'s `<crc> <bytes>` over the sorted listing, then
105
+ * the number of listing lines. The listing is capped one past
106
+ * {@link maxPaths} so the count alone says whether the bound was reached.
107
+ * Errors from `find` and `stat` are discarded: a path that vanished mid-walk
108
+ * is movement the next measurement reports, and a file the shell may not
109
+ * stat is one it could not have measured either way.
110
+ *
111
+ * @category constructors
112
+ * @since 1.0.0
113
+ */
114
+ export declare const script: (options?: {
115
+ readonly prune?: ReadonlyArray<string> | undefined;
116
+ readonly ignoreSuffixes?: ReadonlyArray<string> | undefined;
117
+ }) => string;
118
+ /**
119
+ * Reads one measurement off the script's standard output.
120
+ *
121
+ * `undefined` for anything that is not two well-formed lines: the script did
122
+ * not run, a tool it needs is missing, or the output was cut. An unmeasured
123
+ * tree is reported as unmeasured, never as unchanged.
124
+ *
125
+ * @category conversions
126
+ * @since 1.0.0
127
+ */
128
+ export declare const parse: (stdout: string) => Measurement | undefined;
129
+ /**
130
+ * Whether two measurements say the tree moved, or nothing at all.
131
+ *
132
+ * `true` and `false` are answers; `undefined` is the honest reading whenever
133
+ * either measurement is absent or bounded, because a prefix that held still
134
+ * is not a tree that held still.
135
+ *
136
+ * @category conversions
137
+ * @since 1.0.0
138
+ */
139
+ export declare const moved: (before: Measurement | undefined, after: Measurement | undefined) => boolean | undefined;
140
+ //# sourceMappingURL=TreeFingerprint.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TreeFingerprint.d.ts","sourceRoot":"","sources":["../../src/TreeFingerprint.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAIH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,GAAG,YAAY,CAAA;AAE5B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,MAAM,CAM9C,CAAA;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,EAAE,aAAa,CAAC,MAAM,CAUvD,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,QAAQ,QAAS,CAAA;AAE9B;;;;;GAKG;AACH,MAAM,WAAW,WAAW;IAC1B,0FAA0F;IAC1F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,0CAA0C;IAC1C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,+EAA+E;IAC/E,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAC3B;AAKD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,MAAM,GAAI,UAAS;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;IAClD,QAAQ,CAAC,cAAc,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,CAAA;CACvD,KAAG,MAaR,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,GAAI,QAAQ,MAAM,KAAG,WAAW,GAAG,SAapD,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,GAChB,QAAQ,WAAW,GAAG,SAAS,EAC/B,OAAO,WAAW,GAAG,SAAS,KAC7B,OAAO,GAAG,SAGuB,CAAA"}