@smthrs/std 0.0.0-stage → 1.0.0-rc.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +148 -0
- package/LICENSE +21 -0
- package/README.md +156 -2
- package/dist/cjs/ApplyPatch.d.ts +174 -0
- package/dist/cjs/ApplyPatch.d.ts.map +1 -0
- package/dist/cjs/ApplyPatch.js +309 -0
- package/dist/cjs/ApplyPatch.js.map +7 -0
- package/dist/cjs/Bash.d.ts +390 -0
- package/dist/cjs/Bash.d.ts.map +1 -0
- package/dist/cjs/Bash.js +333 -0
- package/dist/cjs/Bash.js.map +7 -0
- package/dist/cjs/Checkpoints.d.ts +322 -0
- package/dist/cjs/Checkpoints.d.ts.map +1 -0
- package/dist/cjs/Checkpoints.js +233 -0
- package/dist/cjs/Checkpoints.js.map +7 -0
- package/dist/cjs/Container.d.ts +132 -0
- package/dist/cjs/Container.d.ts.map +1 -0
- package/dist/cjs/Container.js +113 -0
- package/dist/cjs/Container.js.map +7 -0
- package/dist/cjs/Edit.d.ts +203 -0
- package/dist/cjs/Edit.d.ts.map +1 -0
- package/dist/cjs/Edit.js +258 -0
- package/dist/cjs/Edit.js.map +7 -0
- package/dist/cjs/ExaWebSearch.d.ts +22 -0
- package/dist/cjs/ExaWebSearch.d.ts.map +1 -0
- package/dist/cjs/ExaWebSearch.js +138 -0
- package/dist/cjs/ExaWebSearch.js.map +7 -0
- package/dist/cjs/Explore.d.ts +328 -0
- package/dist/cjs/Explore.d.ts.map +1 -0
- package/dist/cjs/Explore.js +90 -0
- package/dist/cjs/Explore.js.map +7 -0
- package/dist/cjs/Fetch.d.ts +130 -0
- package/dist/cjs/Fetch.d.ts.map +1 -0
- package/dist/cjs/Fetch.js +64 -0
- package/dist/cjs/Fetch.js.map +7 -0
- package/dist/cjs/Glob.d.ts +204 -0
- package/dist/cjs/Glob.d.ts.map +1 -0
- package/dist/cjs/Glob.js +94 -0
- package/dist/cjs/Glob.js.map +7 -0
- package/dist/cjs/Grep.d.ts +347 -0
- package/dist/cjs/Grep.d.ts.map +1 -0
- package/dist/cjs/Grep.js +181 -0
- package/dist/cjs/Grep.js.map +7 -0
- package/dist/cjs/HttpPost.d.ts +130 -0
- package/dist/cjs/HttpPost.d.ts.map +1 -0
- package/dist/cjs/HttpPost.js +72 -0
- package/dist/cjs/HttpPost.js.map +7 -0
- package/dist/cjs/LanguageServer.d.ts +90 -0
- package/dist/cjs/LanguageServer.d.ts.map +1 -0
- package/dist/cjs/LanguageServer.js +60 -0
- package/dist/cjs/LanguageServer.js.map +7 -0
- package/dist/cjs/Ls.d.ts +164 -0
- package/dist/cjs/Ls.d.ts.map +1 -0
- package/dist/cjs/Ls.js +136 -0
- package/dist/cjs/Ls.js.map +7 -0
- package/dist/cjs/Lsp.d.ts +125 -0
- package/dist/cjs/Lsp.d.ts.map +1 -0
- package/dist/cjs/Lsp.js +137 -0
- package/dist/cjs/Lsp.js.map +7 -0
- package/dist/cjs/Manifest.d.ts +918 -0
- package/dist/cjs/Manifest.d.ts.map +1 -0
- package/dist/cjs/Manifest.js +144 -0
- package/dist/cjs/Manifest.js.map +7 -0
- package/dist/cjs/NativeSearch.d.ts +38 -0
- package/dist/cjs/NativeSearch.d.ts.map +1 -0
- package/dist/cjs/NativeSearch.js +326 -0
- package/dist/cjs/NativeSearch.js.map +7 -0
- package/dist/cjs/NodeLanguageServer.d.ts +128 -0
- package/dist/cjs/NodeLanguageServer.d.ts.map +1 -0
- package/dist/cjs/NodeLanguageServer.js +796 -0
- package/dist/cjs/NodeLanguageServer.js.map +7 -0
- package/dist/cjs/PortableSearch.d.ts +36 -0
- package/dist/cjs/PortableSearch.d.ts.map +1 -0
- package/dist/cjs/PortableSearch.js +240 -0
- package/dist/cjs/PortableSearch.js.map +7 -0
- package/dist/cjs/Probe.d.ts +193 -0
- package/dist/cjs/Probe.d.ts.map +1 -0
- package/dist/cjs/Probe.js +134 -0
- package/dist/cjs/Probe.js.map +7 -0
- package/dist/cjs/Read.d.ts +189 -0
- package/dist/cjs/Read.d.ts.map +1 -0
- package/dist/cjs/Read.js +223 -0
- package/dist/cjs/Read.js.map +7 -0
- package/dist/cjs/Relocate.d.ts +73 -0
- package/dist/cjs/Relocate.d.ts.map +1 -0
- package/dist/cjs/Relocate.js +72 -0
- package/dist/cjs/Relocate.js.map +7 -0
- package/dist/cjs/RemoteSearch.d.ts +54 -0
- package/dist/cjs/RemoteSearch.d.ts.map +1 -0
- package/dist/cjs/RemoteSearch.js +134 -0
- package/dist/cjs/RemoteSearch.js.map +7 -0
- package/dist/cjs/Search.d.ts +163 -0
- package/dist/cjs/Search.d.ts.map +1 -0
- package/dist/cjs/Search.js +51 -0
- package/dist/cjs/Search.js.map +7 -0
- package/dist/cjs/SearchConformance.d.ts +115 -0
- package/dist/cjs/SearchConformance.d.ts.map +1 -0
- package/dist/cjs/SearchConformance.js +172 -0
- package/dist/cjs/SearchConformance.js.map +7 -0
- package/dist/cjs/SearchContract.d.ts +114 -0
- package/dist/cjs/SearchContract.d.ts.map +1 -0
- package/dist/cjs/SearchContract.js +339 -0
- package/dist/cjs/SearchContract.js.map +7 -0
- package/dist/cjs/ShellCommand.d.ts +164 -0
- package/dist/cjs/ShellCommand.d.ts.map +1 -0
- package/dist/cjs/ShellCommand.js +102 -0
- package/dist/cjs/ShellCommand.js.map +7 -0
- package/dist/cjs/StdError.d.ts +55 -0
- package/dist/cjs/StdError.d.ts.map +1 -0
- package/dist/cjs/StdError.js +74 -0
- package/dist/cjs/StdError.js.map +7 -0
- package/dist/cjs/TestRun.d.ts +311 -0
- package/dist/cjs/TestRun.d.ts.map +1 -0
- package/dist/cjs/TestRun.js +228 -0
- package/dist/cjs/TestRun.js.map +7 -0
- package/dist/cjs/TestRunner.d.ts +102 -0
- package/dist/cjs/TestRunner.d.ts.map +1 -0
- package/dist/cjs/TestRunner.js +54 -0
- package/dist/cjs/TestRunner.js.map +7 -0
- package/dist/cjs/TreeFingerprint.d.ts +140 -0
- package/dist/cjs/TreeFingerprint.d.ts.map +1 -0
- package/dist/cjs/TreeFingerprint.js +87 -0
- package/dist/cjs/TreeFingerprint.js.map +7 -0
- package/dist/cjs/UpdatePlan.d.ts +152 -0
- package/dist/cjs/UpdatePlan.d.ts.map +1 -0
- package/dist/cjs/UpdatePlan.js +87 -0
- package/dist/cjs/UpdatePlan.js.map +7 -0
- package/dist/cjs/WebFetch.d.ts +134 -0
- package/dist/cjs/WebFetch.d.ts.map +1 -0
- package/dist/cjs/WebFetch.js +140 -0
- package/dist/cjs/WebFetch.js.map +7 -0
- package/dist/cjs/WebSearch.d.ts +181 -0
- package/dist/cjs/WebSearch.d.ts.map +1 -0
- package/dist/cjs/WebSearch.js +86 -0
- package/dist/cjs/WebSearch.js.map +7 -0
- package/dist/cjs/Write.d.ts +147 -0
- package/dist/cjs/Write.d.ts.map +1 -0
- package/dist/cjs/Write.js +122 -0
- package/dist/cjs/Write.js.map +7 -0
- package/dist/cjs/index.d.ts +129 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +101 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/internal/ApplyPatch.d.ts +145 -0
- package/dist/cjs/internal/ApplyPatch.d.ts.map +1 -0
- package/dist/cjs/internal/ApplyPatch.js +462 -0
- package/dist/cjs/internal/ApplyPatch.js.map +7 -0
- package/dist/cjs/internal/CodexText.d.ts +73 -0
- package/dist/cjs/internal/CodexText.d.ts.map +1 -0
- package/dist/cjs/internal/CodexText.js +108 -0
- package/dist/cjs/internal/CodexText.js.map +7 -0
- package/dist/cjs/internal/Declaration.d.ts +49 -0
- package/dist/cjs/internal/Declaration.d.ts.map +1 -0
- package/dist/cjs/internal/Declaration.js +46 -0
- package/dist/cjs/internal/Declaration.js.map +7 -0
- package/dist/cjs/internal/Diagnostics.d.ts +77 -0
- package/dist/cjs/internal/Diagnostics.d.ts.map +1 -0
- package/dist/cjs/internal/Diagnostics.js +89 -0
- package/dist/cjs/internal/Diagnostics.js.map +7 -0
- package/dist/cjs/internal/EnvelopePrecheck.d.ts +69 -0
- package/dist/cjs/internal/EnvelopePrecheck.d.ts.map +1 -0
- package/dist/cjs/internal/EnvelopePrecheck.js +323 -0
- package/dist/cjs/internal/EnvelopePrecheck.js.map +7 -0
- package/dist/cjs/internal/Exec.d.ts +151 -0
- package/dist/cjs/internal/Exec.d.ts.map +1 -0
- package/dist/cjs/internal/Exec.js +207 -0
- package/dist/cjs/internal/Exec.js.map +7 -0
- package/dist/cjs/internal/FileMutation.d.ts +109 -0
- package/dist/cjs/internal/FileMutation.d.ts.map +1 -0
- package/dist/cjs/internal/FileMutation.js +116 -0
- package/dist/cjs/internal/FileMutation.js.map +7 -0
- package/dist/cjs/internal/FsFailure.d.ts +38 -0
- package/dist/cjs/internal/FsFailure.d.ts.map +1 -0
- package/dist/cjs/internal/FsFailure.js +40 -0
- package/dist/cjs/internal/FsFailure.js.map +7 -0
- package/dist/cjs/internal/GitWorktree.d.ts +108 -0
- package/dist/cjs/internal/GitWorktree.d.ts.map +1 -0
- package/dist/cjs/internal/GitWorktree.js +276 -0
- package/dist/cjs/internal/GitWorktree.js.map +7 -0
- package/dist/cjs/internal/Grouping.d.ts +51 -0
- package/dist/cjs/internal/Grouping.d.ts.map +1 -0
- package/dist/cjs/internal/Grouping.js +83 -0
- package/dist/cjs/internal/Grouping.js.map +7 -0
- package/dist/cjs/internal/Html.d.ts +20 -0
- package/dist/cjs/internal/Html.d.ts.map +1 -0
- package/dist/cjs/internal/Html.js +81 -0
- package/dist/cjs/internal/Html.js.map +7 -0
- package/dist/cjs/internal/Http.d.ts +95 -0
- package/dist/cjs/internal/Http.d.ts.map +1 -0
- package/dist/cjs/internal/Http.js +153 -0
- package/dist/cjs/internal/Http.js.map +7 -0
- package/dist/cjs/internal/HttpNetwork.d.ts +27 -0
- package/dist/cjs/internal/HttpNetwork.d.ts.map +1 -0
- package/dist/cjs/internal/HttpNetwork.js +146 -0
- package/dist/cjs/internal/HttpNetwork.js.map +7 -0
- package/dist/cjs/internal/Ignore.d.ts +37 -0
- package/dist/cjs/internal/Ignore.d.ts.map +1 -0
- package/dist/cjs/internal/Ignore.js +100 -0
- package/dist/cjs/internal/Ignore.js.map +7 -0
- package/dist/cjs/internal/LinearRegex.d.ts +19 -0
- package/dist/cjs/internal/LinearRegex.d.ts.map +1 -0
- package/dist/cjs/internal/LinearRegex.js +166 -0
- package/dist/cjs/internal/LinearRegex.js.map +7 -0
- package/dist/cjs/internal/Match.d.ts +85 -0
- package/dist/cjs/internal/Match.d.ts.map +1 -0
- package/dist/cjs/internal/Match.js +99 -0
- package/dist/cjs/internal/Match.js.map +7 -0
- package/dist/cjs/internal/Paths.d.ts +23 -0
- package/dist/cjs/internal/Paths.d.ts.map +1 -0
- package/dist/cjs/internal/Paths.js +52 -0
- package/dist/cjs/internal/Paths.js.map +7 -0
- package/dist/cjs/internal/Preserve.d.ts +25 -0
- package/dist/cjs/internal/Preserve.d.ts.map +1 -0
- package/dist/cjs/internal/Preserve.js +88 -0
- package/dist/cjs/internal/Preserve.js.map +7 -0
- package/dist/cjs/internal/Prune.d.ts +35 -0
- package/dist/cjs/internal/Prune.d.ts.map +1 -0
- package/dist/cjs/internal/Prune.js +54 -0
- package/dist/cjs/internal/Prune.js.map +7 -0
- package/dist/cjs/internal/RemoteTree.d.ts +60 -0
- package/dist/cjs/internal/RemoteTree.d.ts.map +1 -0
- package/dist/cjs/internal/RemoteTree.js +123 -0
- package/dist/cjs/internal/RemoteTree.js.map +7 -0
- package/dist/cjs/internal/SearchContract.d.ts +63 -0
- package/dist/cjs/internal/SearchContract.d.ts.map +1 -0
- package/dist/cjs/internal/SearchContract.js +46 -0
- package/dist/cjs/internal/SearchContract.js.map +7 -0
- package/dist/cjs/internal/Symbols.d.ts +39 -0
- package/dist/cjs/internal/Symbols.d.ts.map +1 -0
- package/dist/cjs/internal/Symbols.js +59 -0
- package/dist/cjs/internal/Symbols.js.map +7 -0
- package/dist/cjs/internal/Tar.d.ts +23 -0
- package/dist/cjs/internal/Tar.d.ts.map +1 -0
- package/dist/cjs/internal/Tar.js +86 -0
- package/dist/cjs/internal/Tar.js.map +7 -0
- package/dist/cjs/internal/TestReport.d.ts +52 -0
- package/dist/cjs/internal/TestReport.d.ts.map +1 -0
- package/dist/cjs/internal/TestReport.js +131 -0
- package/dist/cjs/internal/TestReport.js.map +7 -0
- package/dist/cjs/internal/Text.d.ts +125 -0
- package/dist/cjs/internal/Text.d.ts.map +1 -0
- package/dist/cjs/internal/Text.js +85 -0
- package/dist/cjs/internal/Text.js.map +7 -0
- package/dist/cjs/internal/Url.d.ts +13 -0
- package/dist/cjs/internal/Url.d.ts.map +1 -0
- package/dist/cjs/internal/Url.js +35 -0
- package/dist/cjs/internal/Url.js.map +7 -0
- package/dist/cjs/internal/Walk.d.ts +72 -0
- package/dist/cjs/internal/Walk.d.ts.map +1 -0
- package/dist/cjs/internal/Walk.js +108 -0
- package/dist/cjs/internal/Walk.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/ApplyPatch.d.ts +174 -0
- package/dist/esm/ApplyPatch.d.ts.map +1 -0
- package/dist/esm/ApplyPatch.js +346 -0
- package/dist/esm/ApplyPatch.js.map +1 -0
- package/dist/esm/Bash.d.ts +390 -0
- package/dist/esm/Bash.d.ts.map +1 -0
- package/dist/esm/Bash.js +514 -0
- package/dist/esm/Bash.js.map +1 -0
- package/dist/esm/Checkpoints.d.ts +322 -0
- package/dist/esm/Checkpoints.d.ts.map +1 -0
- package/dist/esm/Checkpoints.js +396 -0
- package/dist/esm/Checkpoints.js.map +1 -0
- package/dist/esm/Container.d.ts +132 -0
- package/dist/esm/Container.d.ts.map +1 -0
- package/dist/esm/Container.js +151 -0
- package/dist/esm/Container.js.map +1 -0
- package/dist/esm/Edit.d.ts +203 -0
- package/dist/esm/Edit.d.ts.map +1 -0
- package/dist/esm/Edit.js +296 -0
- package/dist/esm/Edit.js.map +1 -0
- package/dist/esm/ExaWebSearch.d.ts +22 -0
- package/dist/esm/ExaWebSearch.d.ts.map +1 -0
- package/dist/esm/ExaWebSearch.js +107 -0
- package/dist/esm/ExaWebSearch.js.map +1 -0
- package/dist/esm/Explore.d.ts +328 -0
- package/dist/esm/Explore.d.ts.map +1 -0
- package/dist/esm/Explore.js +106 -0
- package/dist/esm/Explore.js.map +1 -0
- package/dist/esm/Fetch.d.ts +130 -0
- package/dist/esm/Fetch.d.ts.map +1 -0
- package/dist/esm/Fetch.js +91 -0
- package/dist/esm/Fetch.js.map +1 -0
- package/dist/esm/Glob.d.ts +204 -0
- package/dist/esm/Glob.d.ts.map +1 -0
- package/dist/esm/Glob.js +177 -0
- package/dist/esm/Glob.js.map +1 -0
- package/dist/esm/Grep.d.ts +347 -0
- package/dist/esm/Grep.d.ts.map +1 -0
- package/dist/esm/Grep.js +289 -0
- package/dist/esm/Grep.js.map +1 -0
- package/dist/esm/HttpPost.d.ts +130 -0
- package/dist/esm/HttpPost.d.ts.map +1 -0
- package/dist/esm/HttpPost.js +89 -0
- package/dist/esm/HttpPost.js.map +1 -0
- package/dist/esm/LanguageServer.d.ts +90 -0
- package/dist/esm/LanguageServer.d.ts.map +1 -0
- package/dist/esm/LanguageServer.js +57 -0
- package/dist/esm/LanguageServer.js.map +1 -0
- package/dist/esm/Ls.d.ts +164 -0
- package/dist/esm/Ls.d.ts.map +1 -0
- package/dist/esm/Ls.js +178 -0
- package/dist/esm/Ls.js.map +1 -0
- package/dist/esm/Lsp.d.ts +125 -0
- package/dist/esm/Lsp.d.ts.map +1 -0
- package/dist/esm/Lsp.js +165 -0
- package/dist/esm/Lsp.js.map +1 -0
- package/dist/esm/Manifest.d.ts +918 -0
- package/dist/esm/Manifest.d.ts.map +1 -0
- package/dist/esm/Manifest.js +153 -0
- package/dist/esm/Manifest.js.map +1 -0
- package/dist/esm/NativeSearch.d.ts +38 -0
- package/dist/esm/NativeSearch.d.ts.map +1 -0
- package/dist/esm/NativeSearch.js +378 -0
- package/dist/esm/NativeSearch.js.map +1 -0
- package/dist/esm/NodeLanguageServer.d.ts +128 -0
- package/dist/esm/NodeLanguageServer.d.ts.map +1 -0
- package/dist/esm/NodeLanguageServer.js +843 -0
- package/dist/esm/NodeLanguageServer.js.map +1 -0
- package/dist/esm/PortableSearch.d.ts +36 -0
- package/dist/esm/PortableSearch.d.ts.map +1 -0
- package/dist/esm/PortableSearch.js +256 -0
- package/dist/esm/PortableSearch.js.map +1 -0
- package/dist/esm/Probe.d.ts +193 -0
- package/dist/esm/Probe.d.ts.map +1 -0
- package/dist/esm/Probe.js +225 -0
- package/dist/esm/Probe.js.map +1 -0
- package/dist/esm/Read.d.ts +189 -0
- package/dist/esm/Read.d.ts.map +1 -0
- package/dist/esm/Read.js +300 -0
- package/dist/esm/Read.js.map +1 -0
- package/dist/esm/Relocate.d.ts +73 -0
- package/dist/esm/Relocate.d.ts.map +1 -0
- package/dist/esm/Relocate.js +153 -0
- package/dist/esm/Relocate.js.map +1 -0
- package/dist/esm/RemoteSearch.d.ts +54 -0
- package/dist/esm/RemoteSearch.d.ts.map +1 -0
- package/dist/esm/RemoteSearch.js +162 -0
- package/dist/esm/RemoteSearch.js.map +1 -0
- package/dist/esm/Search.d.ts +163 -0
- package/dist/esm/Search.d.ts.map +1 -0
- package/dist/esm/Search.js +47 -0
- package/dist/esm/Search.js.map +1 -0
- package/dist/esm/SearchConformance.d.ts +115 -0
- package/dist/esm/SearchConformance.d.ts.map +1 -0
- package/dist/esm/SearchConformance.js +193 -0
- package/dist/esm/SearchConformance.js.map +1 -0
- package/dist/esm/SearchContract.d.ts +114 -0
- package/dist/esm/SearchContract.d.ts.map +1 -0
- package/dist/esm/SearchContract.js +461 -0
- package/dist/esm/SearchContract.js.map +1 -0
- package/dist/esm/ShellCommand.d.ts +164 -0
- package/dist/esm/ShellCommand.d.ts.map +1 -0
- package/dist/esm/ShellCommand.js +159 -0
- package/dist/esm/ShellCommand.js.map +1 -0
- package/dist/esm/StdError.d.ts +55 -0
- package/dist/esm/StdError.d.ts.map +1 -0
- package/dist/esm/StdError.js +71 -0
- package/dist/esm/StdError.js.map +1 -0
- package/dist/esm/TestRun.d.ts +311 -0
- package/dist/esm/TestRun.d.ts.map +1 -0
- package/dist/esm/TestRun.js +316 -0
- package/dist/esm/TestRun.js.map +1 -0
- package/dist/esm/TestRunner.d.ts +102 -0
- package/dist/esm/TestRunner.d.ts.map +1 -0
- package/dist/esm/TestRunner.js +68 -0
- package/dist/esm/TestRunner.js.map +1 -0
- package/dist/esm/TreeFingerprint.d.ts +140 -0
- package/dist/esm/TreeFingerprint.d.ts.map +1 -0
- package/dist/esm/TreeFingerprint.js +170 -0
- package/dist/esm/TreeFingerprint.js.map +1 -0
- package/dist/esm/UpdatePlan.d.ts +152 -0
- package/dist/esm/UpdatePlan.d.ts.map +1 -0
- package/dist/esm/UpdatePlan.js +129 -0
- package/dist/esm/UpdatePlan.js.map +1 -0
- package/dist/esm/WebFetch.d.ts +134 -0
- package/dist/esm/WebFetch.d.ts.map +1 -0
- package/dist/esm/WebFetch.js +151 -0
- package/dist/esm/WebFetch.js.map +1 -0
- package/dist/esm/WebSearch.d.ts +181 -0
- package/dist/esm/WebSearch.d.ts.map +1 -0
- package/dist/esm/WebSearch.js +134 -0
- package/dist/esm/WebSearch.js.map +1 -0
- package/dist/esm/Write.d.ts +147 -0
- package/dist/esm/Write.d.ts.map +1 -0
- package/dist/esm/Write.js +144 -0
- package/dist/esm/Write.js.map +1 -0
- package/dist/esm/index.d.ts +129 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +129 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/ApplyPatch.d.ts +145 -0
- package/dist/esm/internal/ApplyPatch.d.ts.map +1 -0
- package/dist/esm/internal/ApplyPatch.js +489 -0
- package/dist/esm/internal/ApplyPatch.js.map +1 -0
- package/dist/esm/internal/CodexText.d.ts +73 -0
- package/dist/esm/internal/CodexText.d.ts.map +1 -0
- package/dist/esm/internal/CodexText.js +156 -0
- package/dist/esm/internal/CodexText.js.map +1 -0
- package/dist/esm/internal/Declaration.d.ts +49 -0
- package/dist/esm/internal/Declaration.d.ts.map +1 -0
- package/dist/esm/internal/Declaration.js +42 -0
- package/dist/esm/internal/Declaration.js.map +1 -0
- package/dist/esm/internal/Diagnostics.d.ts +77 -0
- package/dist/esm/internal/Diagnostics.d.ts.map +1 -0
- package/dist/esm/internal/Diagnostics.js +99 -0
- package/dist/esm/internal/Diagnostics.js.map +1 -0
- package/dist/esm/internal/EnvelopePrecheck.d.ts +69 -0
- package/dist/esm/internal/EnvelopePrecheck.d.ts.map +1 -0
- package/dist/esm/internal/EnvelopePrecheck.js +426 -0
- package/dist/esm/internal/EnvelopePrecheck.js.map +1 -0
- package/dist/esm/internal/Exec.d.ts +151 -0
- package/dist/esm/internal/Exec.d.ts.map +1 -0
- package/dist/esm/internal/Exec.js +285 -0
- package/dist/esm/internal/Exec.js.map +1 -0
- package/dist/esm/internal/FileMutation.d.ts +109 -0
- package/dist/esm/internal/FileMutation.d.ts.map +1 -0
- package/dist/esm/internal/FileMutation.js +123 -0
- package/dist/esm/internal/FileMutation.js.map +1 -0
- package/dist/esm/internal/FsFailure.d.ts +38 -0
- package/dist/esm/internal/FsFailure.d.ts.map +1 -0
- package/dist/esm/internal/FsFailure.js +39 -0
- package/dist/esm/internal/FsFailure.js.map +1 -0
- package/dist/esm/internal/GitWorktree.d.ts +108 -0
- package/dist/esm/internal/GitWorktree.d.ts.map +1 -0
- package/dist/esm/internal/GitWorktree.js +352 -0
- package/dist/esm/internal/GitWorktree.js.map +1 -0
- package/dist/esm/internal/Grouping.d.ts +51 -0
- package/dist/esm/internal/Grouping.d.ts.map +1 -0
- package/dist/esm/internal/Grouping.js +99 -0
- package/dist/esm/internal/Grouping.js.map +1 -0
- package/dist/esm/internal/Html.d.ts +20 -0
- package/dist/esm/internal/Html.d.ts.map +1 -0
- package/dist/esm/internal/Html.js +70 -0
- package/dist/esm/internal/Html.js.map +1 -0
- package/dist/esm/internal/Http.d.ts +95 -0
- package/dist/esm/internal/Http.d.ts.map +1 -0
- package/dist/esm/internal/Http.js +154 -0
- package/dist/esm/internal/Http.js.map +1 -0
- package/dist/esm/internal/HttpNetwork.d.ts +27 -0
- package/dist/esm/internal/HttpNetwork.d.ts.map +1 -0
- package/dist/esm/internal/HttpNetwork.js +114 -0
- package/dist/esm/internal/HttpNetwork.js.map +1 -0
- package/dist/esm/internal/Ignore.d.ts +37 -0
- package/dist/esm/internal/Ignore.d.ts.map +1 -0
- package/dist/esm/internal/Ignore.js +128 -0
- package/dist/esm/internal/Ignore.js.map +1 -0
- package/dist/esm/internal/LinearRegex.d.ts +19 -0
- package/dist/esm/internal/LinearRegex.d.ts.map +1 -0
- package/dist/esm/internal/LinearRegex.js +176 -0
- package/dist/esm/internal/LinearRegex.js.map +1 -0
- package/dist/esm/internal/Match.d.ts +85 -0
- package/dist/esm/internal/Match.d.ts.map +1 -0
- package/dist/esm/internal/Match.js +142 -0
- package/dist/esm/internal/Match.js.map +1 -0
- package/dist/esm/internal/Paths.d.ts +23 -0
- package/dist/esm/internal/Paths.d.ts.map +1 -0
- package/dist/esm/internal/Paths.js +40 -0
- package/dist/esm/internal/Paths.js.map +1 -0
- package/dist/esm/internal/Preserve.d.ts +25 -0
- package/dist/esm/internal/Preserve.d.ts.map +1 -0
- package/dist/esm/internal/Preserve.js +70 -0
- package/dist/esm/internal/Preserve.js.map +1 -0
- package/dist/esm/internal/Prune.d.ts +35 -0
- package/dist/esm/internal/Prune.d.ts.map +1 -0
- package/dist/esm/internal/Prune.js +60 -0
- package/dist/esm/internal/Prune.js.map +1 -0
- package/dist/esm/internal/RemoteTree.d.ts +60 -0
- package/dist/esm/internal/RemoteTree.d.ts.map +1 -0
- package/dist/esm/internal/RemoteTree.js +132 -0
- package/dist/esm/internal/RemoteTree.js.map +1 -0
- package/dist/esm/internal/SearchContract.d.ts +63 -0
- package/dist/esm/internal/SearchContract.d.ts.map +1 -0
- package/dist/esm/internal/SearchContract.js +66 -0
- package/dist/esm/internal/SearchContract.js.map +1 -0
- package/dist/esm/internal/Symbols.d.ts +39 -0
- package/dist/esm/internal/Symbols.d.ts.map +1 -0
- package/dist/esm/internal/Symbols.js +79 -0
- package/dist/esm/internal/Symbols.js.map +1 -0
- package/dist/esm/internal/Tar.d.ts +23 -0
- package/dist/esm/internal/Tar.d.ts.map +1 -0
- package/dist/esm/internal/Tar.js +97 -0
- package/dist/esm/internal/Tar.js.map +1 -0
- package/dist/esm/internal/TestReport.d.ts +52 -0
- package/dist/esm/internal/TestReport.d.ts.map +1 -0
- package/dist/esm/internal/TestReport.js +172 -0
- package/dist/esm/internal/TestReport.js.map +1 -0
- package/dist/esm/internal/Text.d.ts +125 -0
- package/dist/esm/internal/Text.d.ts.map +1 -0
- package/dist/esm/internal/Text.js +141 -0
- package/dist/esm/internal/Text.js.map +1 -0
- package/dist/esm/internal/Url.d.ts +13 -0
- package/dist/esm/internal/Url.d.ts.map +1 -0
- package/dist/esm/internal/Url.js +27 -0
- package/dist/esm/internal/Url.js.map +1 -0
- package/dist/esm/internal/Walk.d.ts +72 -0
- package/dist/esm/internal/Walk.d.ts.map +1 -0
- package/dist/esm/internal/Walk.js +126 -0
- package/dist/esm/internal/Walk.js.map +1 -0
- package/docs/README.md +119 -0
- package/docs/api.md +499 -0
- package/docs/concepts/effects-and-capabilities.md +138 -0
- package/docs/concepts/flows-and-handlers.md +115 -0
- package/docs/concepts/limits-and-disclosure.md +105 -0
- package/docs/concepts/search-contract.md +182 -0
- package/docs/guides/bind-the-standard-flows.md +116 -0
- package/docs/guides/implement-a-search-peer.md +133 -0
- package/docs/guides/pin-a-checkpoint.md +161 -0
- package/docs/guides/query-a-language-server.md +257 -0
- package/docs/guides/reach-the-network.md +141 -0
- package/docs/guides/read-and-edit-a-file.md +240 -0
- package/docs/guides/run-a-shell-command.md +236 -0
- package/docs/guides/run-the-test-suite.md +154 -0
- package/docs/guides/search-a-workspace.md +148 -0
- package/docs/installation.md +115 -0
- package/docs/quickstart.md +125 -0
- package/docs/reference/flows.md +556 -0
- package/docs/troubleshooting.md +347 -0
- package/package.json +449 -3
- package/src/ApplyPatch.ts +458 -0
- package/src/Bash.ts +619 -0
- package/src/Checkpoints.ts +589 -0
- package/src/Container.ts +212 -0
- package/src/Edit.ts +366 -0
- package/src/ExaWebSearch.ts +145 -0
- package/src/Explore.ts +139 -0
- package/src/Fetch.ts +117 -0
- package/src/Glob.ts +200 -0
- package/src/Grep.ts +320 -0
- package/src/HttpPost.ts +120 -0
- package/src/LanguageServer.ts +110 -0
- package/src/Ls.ts +228 -0
- package/src/Lsp.ts +184 -0
- package/src/Manifest.ts +162 -0
- package/src/NativeSearch.ts +457 -0
- package/src/NodeLanguageServer.ts +1148 -0
- package/src/PortableSearch.ts +284 -0
- package/src/Probe.ts +284 -0
- package/src/Read.ts +359 -0
- package/src/Relocate.ts +166 -0
- package/src/RemoteSearch.ts +199 -0
- package/src/Search.ts +185 -0
- package/src/SearchConformance.ts +288 -0
- package/src/SearchContract.ts +489 -0
- package/src/ShellCommand.ts +201 -0
- package/src/StdError.ts +80 -0
- package/src/TestRun.ts +401 -0
- package/src/TestRunner.ts +119 -0
- package/src/TreeFingerprint.ts +200 -0
- package/src/UpdatePlan.ts +171 -0
- package/src/WebFetch.ts +194 -0
- package/src/WebSearch.ts +165 -0
- package/src/Write.ts +195 -0
- package/src/index.ts +157 -0
- package/src/internal/ApplyPatch.ts +601 -0
- package/src/internal/CodexText.ts +182 -0
- package/src/internal/Declaration.ts +60 -0
- package/src/internal/Diagnostics.ts +134 -0
- package/src/internal/EnvelopePrecheck.ts +489 -0
- package/src/internal/Exec.ts +427 -0
- package/src/internal/FileMutation.ts +231 -0
- package/src/internal/FsFailure.ts +51 -0
- package/src/internal/GitWorktree.ts +491 -0
- package/src/internal/Grouping.ts +106 -0
- package/src/internal/Html.ts +87 -0
- package/src/internal/Http.ts +209 -0
- package/src/internal/HttpNetwork.ts +153 -0
- package/src/internal/Ignore.ts +135 -0
- package/src/internal/LinearRegex.ts +173 -0
- package/src/internal/Match.ts +172 -0
- package/src/internal/Paths.ts +42 -0
- package/src/internal/Preserve.ts +108 -0
- package/src/internal/Prune.ts +62 -0
- package/src/internal/RemoteTree.ts +159 -0
- package/src/internal/SearchContract.ts +77 -0
- package/src/internal/Symbols.ts +88 -0
- package/src/internal/Tar.ts +95 -0
- package/src/internal/TestReport.ts +194 -0
- package/src/internal/Text.ts +185 -0
- package/src/internal/Url.ts +23 -0
- package/src/internal/Walk.ts +176 -0
|
@@ -0,0 +1,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `test` flow: run the declared suite, and answer with the two facts.
|
|
3
|
+
*
|
|
4
|
+
* Two things this returns that a shell command cannot. First, a *reading*:
|
|
5
|
+
* `{passed, failed}` parsed from the runner's own report, with the raw tail
|
|
6
|
+
* kept for whatever the parse could not carry — a suite's answer is a number
|
|
7
|
+
* and a list of names, not twenty kilobytes of stdout for a model to re-read.
|
|
8
|
+
*
|
|
9
|
+
* Second, `against: "base"`: the same selection also runs against the pristine
|
|
10
|
+
* base commit in a scratch checkout, and the two failure sets are differenced
|
|
11
|
+
* here. That is the whole of attribution, in one call. Without it, agents pay
|
|
12
|
+
* for it in frames — sphinx-8721 spent fourteen frames because a pre-existing
|
|
13
|
+
* failure was never baselined, sympy-13878 spent $0.90 on the same mistake, and
|
|
14
|
+
* django-24970 spent three frames. The rule the harness teaches ("before
|
|
15
|
+
* blaming your own edit, run the same command on the unmodified tree") is only
|
|
16
|
+
* cheap when the tool can do it.
|
|
17
|
+
*
|
|
18
|
+
* A third thing is answered on the way out: whether a non-zero exit is the
|
|
19
|
+
* tree's failure at all, or the command failing to resolve a name. Jev decides
|
|
20
|
+
* it through `Probe.classify`, so the flow needs an `Evaluator` and a host
|
|
21
|
+
* uses its configured subscription seat. A judge that does not answer fails the call with
|
|
22
|
+
* the code `Probe.unjudged` names, because a run nobody judged is not a run
|
|
23
|
+
* this flow can report on.
|
|
24
|
+
*
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
*/
|
|
27
|
+
import type * as ChildProcessSpawner from "@smthrs/kernel/ChildProcessSpawner";
|
|
28
|
+
import type * as Evaluator from "@smthrs/model/Evaluator";
|
|
29
|
+
import * as Effect from "effect/Effect";
|
|
30
|
+
import * as Schema from "effect/Schema";
|
|
31
|
+
import * as StdError from "./StdError.ts";
|
|
32
|
+
import * as TestRunner from "./TestRunner.ts";
|
|
33
|
+
/**
|
|
34
|
+
* Registry name for the test flow.
|
|
35
|
+
*
|
|
36
|
+
* @category identifiers
|
|
37
|
+
* @since 1.0.0
|
|
38
|
+
*/
|
|
39
|
+
export declare const name = "test";
|
|
40
|
+
/**
|
|
41
|
+
* Model-facing description of the test flow.
|
|
42
|
+
*
|
|
43
|
+
* @category descriptions
|
|
44
|
+
* @since 1.0.0
|
|
45
|
+
*/
|
|
46
|
+
export declare 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.";
|
|
47
|
+
/**
|
|
48
|
+
* The parent directory baseline checkouts are written into, relative to the
|
|
49
|
+
* repository root, and therefore also relative to the runner's own directory.
|
|
50
|
+
*
|
|
51
|
+
* @category constants
|
|
52
|
+
* @since 1.0.0
|
|
53
|
+
*/
|
|
54
|
+
export declare const scratchDirectory = ".flows-test-base";
|
|
55
|
+
/**
|
|
56
|
+
* Default wall-clock budget for one test run.
|
|
57
|
+
*
|
|
58
|
+
* @category constants
|
|
59
|
+
* @since 1.0.0
|
|
60
|
+
*/
|
|
61
|
+
export declare const DEFAULT_TIMEOUT_MS = 600000;
|
|
62
|
+
/**
|
|
63
|
+
* Maximum bytes retained from each stream while a test run executes.
|
|
64
|
+
*
|
|
65
|
+
* @category constants
|
|
66
|
+
* @since 1.0.0
|
|
67
|
+
*/
|
|
68
|
+
export declare const MAX_CAPTURE_BYTES = 8000000;
|
|
69
|
+
/**
|
|
70
|
+
* Input schema for the test flow.
|
|
71
|
+
*
|
|
72
|
+
* @category schemas
|
|
73
|
+
* @since 1.0.0
|
|
74
|
+
*/
|
|
75
|
+
export declare const Input: Schema.Struct<{
|
|
76
|
+
readonly selection: Schema.optional<Schema.$Array<Schema.String>>;
|
|
77
|
+
readonly against: Schema.optional<Schema.Literals<readonly ["workspace", "base"]>>;
|
|
78
|
+
readonly timeoutMs: Schema.optional<Schema.Number>;
|
|
79
|
+
}>;
|
|
80
|
+
/**
|
|
81
|
+
* Decoded input accepted by the `test` flow.
|
|
82
|
+
*
|
|
83
|
+
* @category models
|
|
84
|
+
* @since 1.0.0
|
|
85
|
+
*/
|
|
86
|
+
export type Input = typeof Input.Type;
|
|
87
|
+
/**
|
|
88
|
+
* One run's outcome.
|
|
89
|
+
*
|
|
90
|
+
* @category schemas
|
|
91
|
+
* @since 1.0.0
|
|
92
|
+
*/
|
|
93
|
+
export declare const Outcome: Schema.Struct<{
|
|
94
|
+
readonly command: Schema.String;
|
|
95
|
+
readonly exitCode: Schema.Number;
|
|
96
|
+
readonly passed: Schema.Number;
|
|
97
|
+
readonly failed: Schema.$Array<Schema.String>;
|
|
98
|
+
readonly parsed: Schema.Boolean;
|
|
99
|
+
readonly tail: Schema.String;
|
|
100
|
+
readonly tailTruncated: Schema.Boolean;
|
|
101
|
+
readonly tailDroppedBytes: Schema.Number;
|
|
102
|
+
readonly invalidProbe: Schema.optional<Schema.Struct<{
|
|
103
|
+
readonly reason: Schema.Literals<readonly ["unknown-command", "unknown-test", "unknown-path", "unknown-module", "unknown-environment"]>;
|
|
104
|
+
readonly evidence: Schema.String;
|
|
105
|
+
readonly message: Schema.String;
|
|
106
|
+
}>>;
|
|
107
|
+
}>;
|
|
108
|
+
/**
|
|
109
|
+
* Output schema for the test flow.
|
|
110
|
+
*
|
|
111
|
+
* @category schemas
|
|
112
|
+
* @since 1.0.0
|
|
113
|
+
*/
|
|
114
|
+
export declare const Output: Schema.Struct<{
|
|
115
|
+
readonly base: Schema.optional<Schema.Struct<{
|
|
116
|
+
readonly ref: Schema.String;
|
|
117
|
+
readonly commit: Schema.String;
|
|
118
|
+
readonly command: Schema.String;
|
|
119
|
+
readonly exitCode: Schema.Number;
|
|
120
|
+
readonly passed: Schema.Number;
|
|
121
|
+
readonly failed: Schema.$Array<Schema.String>;
|
|
122
|
+
readonly parsed: Schema.Boolean;
|
|
123
|
+
readonly tail: Schema.String;
|
|
124
|
+
readonly tailTruncated: Schema.Boolean;
|
|
125
|
+
readonly tailDroppedBytes: Schema.Number;
|
|
126
|
+
readonly invalidProbe: Schema.optional<Schema.Struct<{
|
|
127
|
+
readonly reason: Schema.Literals<readonly ["unknown-command", "unknown-test", "unknown-path", "unknown-module", "unknown-environment"]>;
|
|
128
|
+
readonly evidence: Schema.String;
|
|
129
|
+
readonly message: Schema.String;
|
|
130
|
+
}>>;
|
|
131
|
+
}>>;
|
|
132
|
+
readonly introduced: Schema.optional<Schema.$Array<Schema.String>>;
|
|
133
|
+
readonly preexisting: Schema.optional<Schema.$Array<Schema.String>>;
|
|
134
|
+
readonly fixed: Schema.optional<Schema.$Array<Schema.String>>;
|
|
135
|
+
readonly command: Schema.String;
|
|
136
|
+
readonly exitCode: Schema.Number;
|
|
137
|
+
readonly passed: Schema.Number;
|
|
138
|
+
readonly failed: Schema.$Array<Schema.String>;
|
|
139
|
+
readonly parsed: Schema.Boolean;
|
|
140
|
+
readonly tail: Schema.String;
|
|
141
|
+
readonly tailTruncated: Schema.Boolean;
|
|
142
|
+
readonly tailDroppedBytes: Schema.Number;
|
|
143
|
+
readonly invalidProbe: Schema.optional<Schema.Struct<{
|
|
144
|
+
readonly reason: Schema.Literals<readonly ["unknown-command", "unknown-test", "unknown-path", "unknown-module", "unknown-environment"]>;
|
|
145
|
+
readonly evidence: Schema.String;
|
|
146
|
+
readonly message: Schema.String;
|
|
147
|
+
}>>;
|
|
148
|
+
}>;
|
|
149
|
+
/**
|
|
150
|
+
* Decoded output returned by the `test` flow.
|
|
151
|
+
*
|
|
152
|
+
* @category models
|
|
153
|
+
* @since 1.0.0
|
|
154
|
+
*/
|
|
155
|
+
export type Output = typeof Output.Type;
|
|
156
|
+
/**
|
|
157
|
+
* Static conservative effect envelope for the test flow.
|
|
158
|
+
*
|
|
159
|
+
* @category effects
|
|
160
|
+
* @since 1.0.0
|
|
161
|
+
*/
|
|
162
|
+
export declare const effects: import("@smthrs/plan/Effects").Declaration;
|
|
163
|
+
/**
|
|
164
|
+
* Narrows the effect envelope for a decoded invocation.
|
|
165
|
+
*
|
|
166
|
+
* @category effects
|
|
167
|
+
* @since 1.0.0
|
|
168
|
+
*/
|
|
169
|
+
export declare const effectsFor: (_input: typeof Input.Type) => import("@smthrs/plan/Effects").Declaration;
|
|
170
|
+
/**
|
|
171
|
+
* Capabilities required by the test flow.
|
|
172
|
+
*
|
|
173
|
+
* @category capabilities
|
|
174
|
+
* @since 1.0.0
|
|
175
|
+
*/
|
|
176
|
+
export declare const capabilities: string[];
|
|
177
|
+
/**
|
|
178
|
+
* Declaration-only test flow.
|
|
179
|
+
*
|
|
180
|
+
* @category flows
|
|
181
|
+
* @since 1.0.0
|
|
182
|
+
*/
|
|
183
|
+
export declare const flow: {
|
|
184
|
+
readonly name: "test";
|
|
185
|
+
readonly 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.";
|
|
186
|
+
readonly input: Schema.Struct<{
|
|
187
|
+
readonly selection: Schema.optional<Schema.$Array<Schema.String>>;
|
|
188
|
+
readonly against: Schema.optional<Schema.Literals<readonly ["workspace", "base"]>>;
|
|
189
|
+
readonly timeoutMs: Schema.optional<Schema.Number>;
|
|
190
|
+
}>;
|
|
191
|
+
readonly output: Schema.Struct<{
|
|
192
|
+
readonly base: Schema.optional<Schema.Struct<{
|
|
193
|
+
readonly ref: Schema.String;
|
|
194
|
+
readonly commit: Schema.String;
|
|
195
|
+
readonly command: Schema.String;
|
|
196
|
+
readonly exitCode: Schema.Number;
|
|
197
|
+
readonly passed: Schema.Number;
|
|
198
|
+
readonly failed: Schema.$Array<Schema.String>;
|
|
199
|
+
readonly parsed: Schema.Boolean;
|
|
200
|
+
readonly tail: Schema.String;
|
|
201
|
+
readonly tailTruncated: Schema.Boolean;
|
|
202
|
+
readonly tailDroppedBytes: Schema.Number;
|
|
203
|
+
readonly invalidProbe: Schema.optional<Schema.Struct<{
|
|
204
|
+
readonly reason: Schema.Literals<readonly ["unknown-command", "unknown-test", "unknown-path", "unknown-module", "unknown-environment"]>;
|
|
205
|
+
readonly evidence: Schema.String;
|
|
206
|
+
readonly message: Schema.String;
|
|
207
|
+
}>>;
|
|
208
|
+
}>>;
|
|
209
|
+
readonly introduced: Schema.optional<Schema.$Array<Schema.String>>;
|
|
210
|
+
readonly preexisting: Schema.optional<Schema.$Array<Schema.String>>;
|
|
211
|
+
readonly fixed: Schema.optional<Schema.$Array<Schema.String>>;
|
|
212
|
+
readonly command: Schema.String;
|
|
213
|
+
readonly exitCode: Schema.Number;
|
|
214
|
+
readonly passed: Schema.Number;
|
|
215
|
+
readonly failed: Schema.$Array<Schema.String>;
|
|
216
|
+
readonly parsed: Schema.Boolean;
|
|
217
|
+
readonly tail: Schema.String;
|
|
218
|
+
readonly tailTruncated: Schema.Boolean;
|
|
219
|
+
readonly tailDroppedBytes: Schema.Number;
|
|
220
|
+
readonly invalidProbe: Schema.optional<Schema.Struct<{
|
|
221
|
+
readonly reason: Schema.Literals<readonly ["unknown-command", "unknown-test", "unknown-path", "unknown-module", "unknown-environment"]>;
|
|
222
|
+
readonly evidence: Schema.String;
|
|
223
|
+
readonly message: Schema.String;
|
|
224
|
+
}>>;
|
|
225
|
+
}>;
|
|
226
|
+
readonly capabilities: string[];
|
|
227
|
+
readonly effects: import("@smthrs/plan/Effects").Declaration;
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* What a call to this flow does, for a reader of a run.
|
|
231
|
+
*
|
|
232
|
+
* Display metadata only. `@smthrs/registry` `Descriptor.FlowActivity` is the
|
|
233
|
+
* governing vocabulary and `StandardFlows` binds this value onto the flow's
|
|
234
|
+
* descriptor, where the binding site checks it. `declarationDigest` excludes
|
|
235
|
+
* it, so declaring it cannot invalidate a call identity or a cached prompt.
|
|
236
|
+
*
|
|
237
|
+
* @category presentation
|
|
238
|
+
* @since 1.0.0-rc.0
|
|
239
|
+
*/
|
|
240
|
+
export declare const activity: "tests";
|
|
241
|
+
/**
|
|
242
|
+
* How one recorded call to this flow reads: the verb for each settlement, the
|
|
243
|
+
* input field that is its subject, and the measured output fields a one-line
|
|
244
|
+
* summary may count.
|
|
245
|
+
*
|
|
246
|
+
* Display metadata only, governed by `@smthrs/registry`
|
|
247
|
+
* `Descriptor.CallPresentation` and checked where `StandardFlows` binds it.
|
|
248
|
+
*
|
|
249
|
+
* @category presentation
|
|
250
|
+
* @since 1.0.0-rc.0
|
|
251
|
+
*/
|
|
252
|
+
export declare const presentation: {
|
|
253
|
+
readonly verb: {
|
|
254
|
+
readonly pending: "running";
|
|
255
|
+
readonly success: "ran";
|
|
256
|
+
readonly failure: "failed to run";
|
|
257
|
+
};
|
|
258
|
+
readonly subject: "selection";
|
|
259
|
+
readonly result: "tests";
|
|
260
|
+
};
|
|
261
|
+
/**
|
|
262
|
+
* Runs the declared suite, and on request the same suite on the pristine base.
|
|
263
|
+
*
|
|
264
|
+
* Baseline Git and both runners use the caller-provided process service.
|
|
265
|
+
* A host that cannot safely stage the base declares `baseline: false`, which
|
|
266
|
+
* refuses the request before running either suite or Git. Library hosts that
|
|
267
|
+
* support staging remove the detached checkout when the call ends.
|
|
268
|
+
*
|
|
269
|
+
* @category handlers
|
|
270
|
+
* @since 1.0.0
|
|
271
|
+
*/
|
|
272
|
+
export declare const run: (input: {
|
|
273
|
+
readonly timeoutMs?: number | undefined;
|
|
274
|
+
readonly selection?: readonly string[] | undefined;
|
|
275
|
+
readonly against?: "base" | "workspace" | undefined;
|
|
276
|
+
}) => Effect.Effect<{
|
|
277
|
+
readonly tail: string;
|
|
278
|
+
readonly exitCode: number;
|
|
279
|
+
readonly command: string;
|
|
280
|
+
readonly failed: readonly string[];
|
|
281
|
+
readonly passed: number;
|
|
282
|
+
readonly parsed: boolean;
|
|
283
|
+
readonly tailTruncated: boolean;
|
|
284
|
+
readonly tailDroppedBytes: number;
|
|
285
|
+
readonly fixed?: readonly string[] | undefined;
|
|
286
|
+
readonly invalidProbe?: {
|
|
287
|
+
readonly reason: "unknown-command" | "unknown-test" | "unknown-path" | "unknown-module" | "unknown-environment";
|
|
288
|
+
readonly evidence: string;
|
|
289
|
+
readonly message: string;
|
|
290
|
+
} | undefined;
|
|
291
|
+
readonly base?: {
|
|
292
|
+
readonly tail: string;
|
|
293
|
+
readonly exitCode: number;
|
|
294
|
+
readonly command: string;
|
|
295
|
+
readonly failed: readonly string[];
|
|
296
|
+
readonly ref: string;
|
|
297
|
+
readonly commit: string;
|
|
298
|
+
readonly passed: number;
|
|
299
|
+
readonly parsed: boolean;
|
|
300
|
+
readonly tailTruncated: boolean;
|
|
301
|
+
readonly tailDroppedBytes: number;
|
|
302
|
+
readonly invalidProbe?: {
|
|
303
|
+
readonly reason: "unknown-command" | "unknown-test" | "unknown-path" | "unknown-module" | "unknown-environment";
|
|
304
|
+
readonly evidence: string;
|
|
305
|
+
readonly message: string;
|
|
306
|
+
} | undefined;
|
|
307
|
+
} | undefined;
|
|
308
|
+
readonly introduced?: readonly string[] | undefined;
|
|
309
|
+
readonly preexisting?: readonly string[] | undefined;
|
|
310
|
+
}, StdError.StdError, ChildProcessSpawner.ChildProcessSpawner | Evaluator.Evaluator | TestRunner.TestRunner>;
|
|
311
|
+
//# sourceMappingURL=TestRun.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestRun.d.ts","sourceRoot":"","sources":["../../src/TestRun.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,KAAK,mBAAmB,MAAM,oCAAoC,CAAA;AAC9E,OAAO,KAAK,KAAK,SAAS,MAAM,yBAAyB,CAAA;AACzD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AASvC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AACzC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,IAAI,SAAS,CAAA;AAE1B;;;;;GAKG;AACH,eAAO,MAAM,WAAW,6MACoL,CAAA;AAE5M;;;;;;GAMG;AACH,eAAO,MAAM,gBAAgB,qBAAwB,CAAA;AAErD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,SAAU,CAAA;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,UAAY,CAAA;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,KAAK;;;;EAShB,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAErC;;;;;GAKG;AACH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;EAoBlB,CAAA;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBjB,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,OAAO,4CAA8E,CAAA;AAElG;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,OAAO,KAAK,CAAC,IAAI,+CAAY,CAAA;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,UAAkC,CAAA;AAE3D;;;;;GAKG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAsF,CAAA;AAEvG;;;;;;;;;;GAUG;AACH,eAAO,MAAM,QAAQ,EAAG,OAAgB,CAAA;AAExC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY;;;;;;;;CAIf,CAAA;AAkGV;;;;;;;;;;GAUG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4GA6Dd,CAAA"}
|
|
@@ -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
|
+
yield* import_GitWorktree.GitWorktree.open(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 yield* GitWorktree.open(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
|
+
}
|