@smthrs/std 0.0.0-stage → 1.0.0-rc.4
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 +130 -0
- package/LICENSE +21 -0
- package/README.md +152 -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 +380 -0
- package/dist/cjs/Bash.d.ts.map +1 -0
- package/dist/cjs/Bash.js +332 -0
- package/dist/cjs/Bash.js.map +7 -0
- package/dist/cjs/Checkpoints.d.ts +279 -0
- package/dist/cjs/Checkpoints.d.ts.map +1 -0
- package/dist/cjs/Checkpoints.js +145 -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 +24 -0
- package/dist/cjs/PortableSearch.d.ts.map +1 -0
- package/dist/cjs/PortableSearch.js +233 -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/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 +127 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +99 -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 +67 -0
- package/dist/cjs/internal/EnvelopePrecheck.d.ts.map +1 -0
- package/dist/cjs/internal/EnvelopePrecheck.js +124 -0
- package/dist/cjs/internal/EnvelopePrecheck.js.map +7 -0
- package/dist/cjs/internal/Exec.d.ts +139 -0
- package/dist/cjs/internal/Exec.d.ts.map +1 -0
- package/dist/cjs/internal/Exec.js +158 -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/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/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 +114 -0
- package/dist/cjs/internal/Text.d.ts.map +1 -0
- package/dist/cjs/internal/Text.js +82 -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 +380 -0
- package/dist/esm/Bash.d.ts.map +1 -0
- package/dist/esm/Bash.js +505 -0
- package/dist/esm/Bash.js.map +1 -0
- package/dist/esm/Checkpoints.d.ts +279 -0
- package/dist/esm/Checkpoints.d.ts.map +1 -0
- package/dist/esm/Checkpoints.js +298 -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 +24 -0
- package/dist/esm/PortableSearch.d.ts.map +1 -0
- package/dist/esm/PortableSearch.js +240 -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/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 +127 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +127 -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 +67 -0
- package/dist/esm/internal/EnvelopePrecheck.d.ts.map +1 -0
- package/dist/esm/internal/EnvelopePrecheck.js +167 -0
- package/dist/esm/internal/EnvelopePrecheck.js.map +1 -0
- package/dist/esm/internal/Exec.d.ts +139 -0
- package/dist/esm/internal/Exec.d.ts.map +1 -0
- package/dist/esm/internal/Exec.js +193 -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/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/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 +114 -0
- package/dist/esm/internal/Text.d.ts.map +1 -0
- package/dist/esm/internal/Text.js +130 -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 +117 -0
- package/docs/api.md +472 -0
- package/docs/concepts/effects-and-capabilities.md +136 -0
- package/docs/concepts/flows-and-handlers.md +115 -0
- package/docs/concepts/limits-and-disclosure.md +102 -0
- package/docs/concepts/search-contract.md +182 -0
- package/docs/guides/bind-the-standard-flows.md +114 -0
- package/docs/guides/implement-a-search-peer.md +133 -0
- package/docs/guides/pin-a-checkpoint.md +141 -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 +215 -0
- package/docs/guides/run-the-test-suite.md +154 -0
- package/docs/guides/search-a-workspace.md +148 -0
- package/docs/installation.md +111 -0
- package/docs/quickstart.md +125 -0
- package/docs/reference/flows.md +556 -0
- package/docs/troubleshooting.md +322 -0
- package/package.json +439 -3
- package/src/ApplyPatch.ts +458 -0
- package/src/Bash.ts +607 -0
- package/src/Checkpoints.ts +422 -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 +264 -0
- package/src/Probe.ts +284 -0
- package/src/Read.ts +359 -0
- package/src/Relocate.ts +166 -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 +154 -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 +233 -0
- package/src/internal/Exec.ts +314 -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/SearchContract.ts +77 -0
- package/src/internal/Symbols.ts +88 -0
- package/src/internal/TestReport.ts +194 -0
- package/src/internal/Text.ts +170 -0
- package/src/internal/Url.ts +23 -0
- package/src/internal/Walk.ts +176 -0
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var SearchContract_exports = {};
|
|
30
|
+
__export(SearchContract_exports, {
|
|
31
|
+
canonicalGlob: () => canonicalGlob,
|
|
32
|
+
expression: () => expression,
|
|
33
|
+
includedByGlobs: () => includedByGlobs,
|
|
34
|
+
isContractRejection: () => isContractRejection,
|
|
35
|
+
matchesGlob: () => matchesGlob,
|
|
36
|
+
unsatisfiableNotice: () => unsatisfiableNotice,
|
|
37
|
+
validateGlob: () => validateGlob,
|
|
38
|
+
validatePattern: () => validatePattern
|
|
39
|
+
});
|
|
40
|
+
module.exports = __toCommonJS(SearchContract_exports);
|
|
41
|
+
var import_effect = require("effect");
|
|
42
|
+
var LinearRegex = __toESM(require("./internal/LinearRegex.js"), 1);
|
|
43
|
+
var import_SearchContract = require("./internal/SearchContract.js");
|
|
44
|
+
var Walk = __toESM(require("./internal/Walk.js"), 1);
|
|
45
|
+
const validatePattern = (pattern, fixedStrings) => {
|
|
46
|
+
if (pattern.length > 4096) return (0, import_SearchContract.invalidPattern)(pattern, "patterns must not exceed 4096 bytes");
|
|
47
|
+
if (!/^[\x20-\x7e]*$/.test(pattern)) return (0, import_SearchContract.invalidPattern)(pattern, "patterns must contain printable ASCII only");
|
|
48
|
+
if (fixedStrings) return void 0;
|
|
49
|
+
if (pattern.includes("(?")) return (0, import_SearchContract.invalidPattern)(pattern, "special groups and lookaround are not supported");
|
|
50
|
+
let inClass = false;
|
|
51
|
+
let classCharacters = 0;
|
|
52
|
+
for (let index = 0; index < pattern.length; index++) {
|
|
53
|
+
const character = pattern[index];
|
|
54
|
+
if (character === "\\") {
|
|
55
|
+
const escaped = pattern[index + 1];
|
|
56
|
+
if (escaped === void 0 || /[A-Za-z0-9]/.test(escaped)) {
|
|
57
|
+
return (0, import_SearchContract.invalidPattern)(pattern, "backreferences, shorthand classes and encoded escapes are not supported");
|
|
58
|
+
}
|
|
59
|
+
index++;
|
|
60
|
+
if (inClass) classCharacters++;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
if (character === "[" && inClass) {
|
|
64
|
+
return (0, import_SearchContract.invalidPattern)(pattern, "nested and named character classes are not supported");
|
|
65
|
+
}
|
|
66
|
+
if (character === "[") {
|
|
67
|
+
inClass = true;
|
|
68
|
+
classCharacters = 0;
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (character === "{" && !inClass) {
|
|
72
|
+
const closing = pattern.indexOf("}", index + 1);
|
|
73
|
+
if (closing >= 0) {
|
|
74
|
+
const counts = pattern.slice(index + 1, closing).split(",").filter((value) => value.length > 0);
|
|
75
|
+
if (counts.some((value) => /^\d+$/.test(value) && Number(value) > 1e3)) {
|
|
76
|
+
return (0, import_SearchContract.invalidPattern)(pattern, "repetition counts above 1000 are not supported");
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (character === "]" && inClass) {
|
|
81
|
+
if (classCharacters === 0 || classCharacters === 1 && pattern[index - 1] === "^") {
|
|
82
|
+
return (0, import_SearchContract.invalidPattern)(pattern, "empty character classes are not supported");
|
|
83
|
+
}
|
|
84
|
+
inClass = false;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
if (inClass) {
|
|
88
|
+
if (character === "&" && pattern[index + 1] === "&" || character === "-" && pattern[index + 1] === "-" || character === "~" && pattern[index + 1] === "~") {
|
|
89
|
+
return (0, import_SearchContract.invalidPattern)(pattern, "character-class set operations are not supported");
|
|
90
|
+
}
|
|
91
|
+
classCharacters++;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
new RegExp(pattern, "u");
|
|
96
|
+
} catch (error) {
|
|
97
|
+
return (0, import_SearchContract.invalidPattern)(pattern, malformed(pattern) ?? engineReason(error));
|
|
98
|
+
}
|
|
99
|
+
try {
|
|
100
|
+
LinearRegex.compile(pattern, false);
|
|
101
|
+
return void 0;
|
|
102
|
+
} catch (error) {
|
|
103
|
+
return (0, import_SearchContract.invalidPattern)(pattern, error.message);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
const countedRepetition = /^\{\d+(,\d*)?\}/;
|
|
107
|
+
const malformed = (pattern) => {
|
|
108
|
+
const open = [];
|
|
109
|
+
let repeatable = false;
|
|
110
|
+
for (let index = 0; index < pattern.length; index++) {
|
|
111
|
+
const character = pattern[index];
|
|
112
|
+
const at = `"${character}" at column ${index + 1}`;
|
|
113
|
+
if (character === "\\") {
|
|
114
|
+
index++;
|
|
115
|
+
repeatable = true;
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
if (character === "[") {
|
|
119
|
+
let end = index + 1;
|
|
120
|
+
if (pattern[end] === "^") end++;
|
|
121
|
+
while (end < pattern.length && pattern[end] !== "]") end += pattern[end] === "\\" ? 2 : 1;
|
|
122
|
+
if (end >= pattern.length) return `${at} is never closed; write \\[ for a literal bracket`;
|
|
123
|
+
index = end;
|
|
124
|
+
repeatable = true;
|
|
125
|
+
continue;
|
|
126
|
+
}
|
|
127
|
+
if (character === "(") {
|
|
128
|
+
open.push(index);
|
|
129
|
+
repeatable = false;
|
|
130
|
+
continue;
|
|
131
|
+
}
|
|
132
|
+
if (character === ")") {
|
|
133
|
+
if (open.pop() === void 0) return `${at} closes nothing; write \\) for a literal parenthesis`;
|
|
134
|
+
repeatable = true;
|
|
135
|
+
continue;
|
|
136
|
+
}
|
|
137
|
+
if (character === "{") {
|
|
138
|
+
const count = countedRepetition.exec(pattern.slice(index));
|
|
139
|
+
if (count === null) return `${at} is not a repetition count; write \\{ for a literal brace`;
|
|
140
|
+
if (!repeatable) return `${at} repeats nothing; write \\{ for a literal brace`;
|
|
141
|
+
index += count[0].length - 1;
|
|
142
|
+
continue;
|
|
143
|
+
}
|
|
144
|
+
if (character === "}" || character === "]") {
|
|
145
|
+
return `${at} closes nothing; write \\${character} for a literal ${character === "}" ? "brace" : "bracket"}`;
|
|
146
|
+
}
|
|
147
|
+
if (character === "*" || character === "+" || character === "?") {
|
|
148
|
+
if (!repeatable) return `${at} repeats nothing; write \\${character} for a literal ${character}`;
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
repeatable = character !== "|" && character !== "^" && character !== "$";
|
|
152
|
+
}
|
|
153
|
+
const unclosed = open.at(-1);
|
|
154
|
+
return unclosed === void 0 ? void 0 : `"(" at column ${unclosed + 1} is never closed; write \\( for a literal parenthesis`;
|
|
155
|
+
};
|
|
156
|
+
const engineReason = (error) => {
|
|
157
|
+
const reason = error.message.replace(/^Invalid regular expression: (\/.*\/[a-z]*: )?/, "").trim();
|
|
158
|
+
return `invalid expression: ${reason}`;
|
|
159
|
+
};
|
|
160
|
+
const isContractRejection = (error) => error.code === "invalid_pattern" && error.message.startsWith(`${import_SearchContract.rejectionPrefix}"`);
|
|
161
|
+
const validateGlob = (glob) => {
|
|
162
|
+
const pattern = glob.startsWith("!") ? glob.slice(1) : glob;
|
|
163
|
+
if (pattern.replace(/ +$/, "").length === 0) return (0, import_SearchContract.invalidPattern)(glob, "glob patterns must not be empty");
|
|
164
|
+
if (!/^[\x20-\x7e]*$/.test(pattern)) return (0, import_SearchContract.invalidPattern)(glob, "globs must contain printable ASCII only");
|
|
165
|
+
if (pattern.includes("\\") || pattern.includes("[") || pattern.includes("]")) {
|
|
166
|
+
return (0, import_SearchContract.invalidPattern)(glob, "glob escapes and character classes are not supported");
|
|
167
|
+
}
|
|
168
|
+
let inBrace = false;
|
|
169
|
+
let alternatives = 1;
|
|
170
|
+
let expansionCount = 1;
|
|
171
|
+
for (let index = 0; index < pattern.length; index++) {
|
|
172
|
+
const character = pattern[index];
|
|
173
|
+
if (character === "{") {
|
|
174
|
+
if (inBrace) return (0, import_SearchContract.invalidPattern)(glob, "nested brace alternatives are not supported");
|
|
175
|
+
inBrace = true;
|
|
176
|
+
alternatives = 1;
|
|
177
|
+
} else if (character === "," && inBrace) {
|
|
178
|
+
alternatives++;
|
|
179
|
+
} else if (character === "}") {
|
|
180
|
+
if (!inBrace || alternatives < 2) return (0, import_SearchContract.invalidPattern)(glob, "braces must contain alternatives");
|
|
181
|
+
inBrace = false;
|
|
182
|
+
expansionCount *= alternatives;
|
|
183
|
+
if (expansionCount > 256) return (0, import_SearchContract.invalidPattern)(glob, "glob brace expansion exceeds 256 patterns");
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
if (inBrace) return (0, import_SearchContract.invalidPattern)(glob, "glob braces must be balanced");
|
|
187
|
+
return void 0;
|
|
188
|
+
};
|
|
189
|
+
const expression = (pattern, fixedStrings, insensitive) => {
|
|
190
|
+
const input = fixedStrings ? (0, import_SearchContract.escapeRegex)(pattern) : pattern;
|
|
191
|
+
let source = "";
|
|
192
|
+
let inClass = false;
|
|
193
|
+
for (let index = 0; index < input.length; index++) {
|
|
194
|
+
const character = input[index];
|
|
195
|
+
if (character === "\\") {
|
|
196
|
+
source += `${character}${input[index + 1] ?? ""}`;
|
|
197
|
+
index++;
|
|
198
|
+
} else if (character === "[") {
|
|
199
|
+
inClass = true;
|
|
200
|
+
source += character;
|
|
201
|
+
} else if (character === "]" && inClass) {
|
|
202
|
+
inClass = false;
|
|
203
|
+
source += character;
|
|
204
|
+
} else if (!inClass && character === ".") {
|
|
205
|
+
source += "[^\\n]";
|
|
206
|
+
} else if (!inClass && character === "$") {
|
|
207
|
+
source += "(?![\\s\\S])";
|
|
208
|
+
} else {
|
|
209
|
+
source += character;
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return new RegExp(source, insensitive ? "iu" : "u");
|
|
213
|
+
};
|
|
214
|
+
const expandBraces = (pattern) => {
|
|
215
|
+
const opening = pattern.indexOf("{");
|
|
216
|
+
if (opening < 0) return [pattern];
|
|
217
|
+
const closing = pattern.indexOf("}", opening + 1);
|
|
218
|
+
if (closing < 0) return [pattern];
|
|
219
|
+
const alternatives = pattern.slice(opening + 1, closing).split(",");
|
|
220
|
+
if (alternatives.length < 2) return [pattern];
|
|
221
|
+
return alternatives.flatMap(
|
|
222
|
+
(alternative) => expandBraces(
|
|
223
|
+
`${pattern.slice(0, opening)}${alternative}${pattern.slice(closing + 1)}`
|
|
224
|
+
)
|
|
225
|
+
);
|
|
226
|
+
};
|
|
227
|
+
const globExpression = (pattern) => {
|
|
228
|
+
let source = "";
|
|
229
|
+
for (let index = 0; index < pattern.length; index++) {
|
|
230
|
+
const character = pattern[index];
|
|
231
|
+
const next = pattern[index + 1];
|
|
232
|
+
if (character === "*" && next === "*" && (index === 0 || pattern[index - 1] === "/") && (pattern[index + 2] === void 0 || pattern[index + 2] === "/")) {
|
|
233
|
+
source += pattern[index + 2] === "/" ? "(?:.*/)?" : ".*";
|
|
234
|
+
index += pattern[index + 2] === "/" ? 2 : 1;
|
|
235
|
+
} else if (character === "*") source += "[^/]*";
|
|
236
|
+
else if (character === "?") source += "[^/]";
|
|
237
|
+
else source += character.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
|
|
238
|
+
}
|
|
239
|
+
return new RegExp(`^${source}$`);
|
|
240
|
+
};
|
|
241
|
+
const outsidePrintableAscii = /[^\x20-\x7e]/;
|
|
242
|
+
const utf8ByteString = (value) => outsidePrintableAscii.test(value) ? Array.from(new TextEncoder().encode(value), (byte) => String.fromCharCode(byte)).join("") : value;
|
|
243
|
+
const canonicalGlob = (glob) => {
|
|
244
|
+
const excluded = glob.startsWith("!");
|
|
245
|
+
const pattern = excluded ? glob.slice(1) : glob;
|
|
246
|
+
const canonical = pattern.replace(/ +$/, "").replace(/\/\.(?=\/)/g, "").replace(/^\.\//, "/");
|
|
247
|
+
return excluded ? `!${canonical}` : canonical;
|
|
248
|
+
};
|
|
249
|
+
const compiled = /* @__PURE__ */ new Map();
|
|
250
|
+
const compileGlob = (pattern) => {
|
|
251
|
+
const cached = compiled.get(pattern);
|
|
252
|
+
if (cached !== void 0) return cached;
|
|
253
|
+
const matchers = expandBraces(canonicalGlob(pattern)).map((expanded) => {
|
|
254
|
+
const rooted = expanded.startsWith("/");
|
|
255
|
+
const normalized = rooted ? expanded.slice(1) : expanded;
|
|
256
|
+
return { byPath: rooted || normalized.includes("/"), expression: globExpression(normalized) };
|
|
257
|
+
});
|
|
258
|
+
if (compiled.size >= 256) compiled.clear();
|
|
259
|
+
compiled.set(pattern, matchers);
|
|
260
|
+
return matchers;
|
|
261
|
+
};
|
|
262
|
+
const matchesGlob = (pattern, relative, basename) => compileGlob(pattern).some((matcher) => matcher.expression.test(utf8ByteString(matcher.byPath ? relative : basename)));
|
|
263
|
+
const includedByGlobs = (globs, relative, basename) => {
|
|
264
|
+
const positives = globs.filter((glob) => !glob.startsWith("!"));
|
|
265
|
+
let included = positives.length === 0;
|
|
266
|
+
for (const glob of globs) {
|
|
267
|
+
const excluded = glob.startsWith("!");
|
|
268
|
+
if (matchesGlob(excluded ? glob.slice(1) : glob, relative, basename)) included = !excluded;
|
|
269
|
+
}
|
|
270
|
+
return included;
|
|
271
|
+
};
|
|
272
|
+
const wildcard = /[*?{}]/;
|
|
273
|
+
const literalDirectory = (pattern) => {
|
|
274
|
+
if (!pattern.includes("/")) return [];
|
|
275
|
+
const segments = pattern.replace(/^\//, "").split("/").filter((segment) => segment.length > 0);
|
|
276
|
+
const wildcardAt = segments.findIndex((segment) => wildcard.test(segment));
|
|
277
|
+
return wildcardAt < 0 ? segments.slice(0, -1) : segments.slice(0, wildcardAt);
|
|
278
|
+
};
|
|
279
|
+
const rootRelativeSuffix = (pattern, root, path) => {
|
|
280
|
+
const anchored = pattern.replace(/^\/+/, "");
|
|
281
|
+
const patternRoot = path.sep === "\\" ? root.replaceAll("\\", "/") : root;
|
|
282
|
+
const stem = patternRoot.replace(/^\/+/, "").replace(/\/+$/, "");
|
|
283
|
+
return stem.length > 0 && anchored.startsWith(`${stem}/`) ? anchored.slice(stem.length + 1) : void 0;
|
|
284
|
+
};
|
|
285
|
+
const unsatisfiedReason = (options, pattern) => import_effect.Effect.gen(function* () {
|
|
286
|
+
const reasons = [];
|
|
287
|
+
for (const alternative of expandBraces(pattern)) {
|
|
288
|
+
const segments = literalDirectory(alternative);
|
|
289
|
+
if (segments.length === 0) return void 0;
|
|
290
|
+
const skipped = segments.find((segment) => Walk.skippedDirectories.has(segment));
|
|
291
|
+
if (skipped !== void 0) {
|
|
292
|
+
reasons.push(`${skipped} is never descended into; name it as the search root to look inside it`);
|
|
293
|
+
continue;
|
|
294
|
+
}
|
|
295
|
+
if (!options.hidden && segments.some((segment) => segment.startsWith("."))) {
|
|
296
|
+
reasons.push("hidden paths are excluded unless hidden is true");
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
const directory = segments.join("/");
|
|
300
|
+
const present = yield* options.fileSystem.stat(options.path.join(options.root, directory)).pipe(
|
|
301
|
+
import_effect.Effect.map((info) => info.type === "Directory"),
|
|
302
|
+
import_effect.Effect.orElseSucceed(() => false)
|
|
303
|
+
);
|
|
304
|
+
if (present) return void 0;
|
|
305
|
+
reasons.push(`there is no ${directory} directory there`);
|
|
306
|
+
}
|
|
307
|
+
return reasons[0];
|
|
308
|
+
});
|
|
309
|
+
const unsatisfiableNotice = (options) => import_effect.Effect.gen(function* () {
|
|
310
|
+
const walkable = yield* options.fileSystem.stat(options.root).pipe(
|
|
311
|
+
import_effect.Effect.map((info) => info.type === "Directory"),
|
|
312
|
+
import_effect.Effect.orElseSucceed(() => false)
|
|
313
|
+
);
|
|
314
|
+
if (!walkable) return void 0;
|
|
315
|
+
const sentences = [];
|
|
316
|
+
for (const glob of options.globs) {
|
|
317
|
+
if (glob.startsWith("!")) continue;
|
|
318
|
+
const canonical = canonicalGlob(glob);
|
|
319
|
+
const reason = yield* unsatisfiedReason(options, canonical);
|
|
320
|
+
if (reason === void 0) continue;
|
|
321
|
+
const suffix = rootRelativeSuffix(canonical, options.root, options.path);
|
|
322
|
+
sentences.push(
|
|
323
|
+
`No file under ${options.root} can match "${glob}": ${suffix === void 0 ? reason : `glob patterns are relative to the search root, so use "${suffix}" instead`}.`
|
|
324
|
+
);
|
|
325
|
+
}
|
|
326
|
+
if (sentences.length > 0 && sentences.length === options.globs.filter((glob) => !glob.startsWith("!")).length) {
|
|
327
|
+
return sentences.join(" ");
|
|
328
|
+
}
|
|
329
|
+
const included = (relative, basename) => includedByGlobs(options.globs, relative, basename);
|
|
330
|
+
const ignored = options.noIgnore ? false : options.ignored ?? (yield* Walk.files(options.fileSystem, options.path, options.root, options.hidden, false, included).pipe(
|
|
331
|
+
import_effect.Effect.map((walked) => walked.ignored),
|
|
332
|
+
import_effect.Effect.orElseSucceed(() => false)
|
|
333
|
+
));
|
|
334
|
+
if (ignored) {
|
|
335
|
+
sentences.push("No results; ignore files excluded paths. Retry with noIgnore: true to include them.");
|
|
336
|
+
}
|
|
337
|
+
return sentences.length === 0 ? void 0 : sentences.join(" ");
|
|
338
|
+
});
|
|
339
|
+
//# sourceMappingURL=SearchContract.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/SearchContract.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * The validation and matching rules every Search implementation shares.\n *\n * Both peers shipped here match globs through {@link includedByGlobs} and\n * canonicalize them through {@link canonicalGlob}, so the two implementations\n * cannot drift on what a pattern means, and an external peer binding its own\n * `Search` builds on the same functions. {@link unsatisfiableNotice} is the\n * shared explanation for empty answers caused by impossible globs or ignore\n * exclusions.\n *\n * @since 1.0.0\n */\n\nimport type * as Path from \"@smthrs/kernel/Path\"\nimport { Effect } from \"effect\"\nimport type * as FileSystem from \"effect/FileSystem\"\nimport * as LinearRegex from \"./internal/LinearRegex.ts\"\nimport { escapeRegex, invalidPattern, rejectionPrefix } from \"./internal/SearchContract.ts\"\nimport * as Walk from \"./internal/Walk.ts\"\nimport type * as StdError from \"./StdError.ts\"\n\n/**\n * Validates Smithers Ripgrep ASCII v1. It is deliberately the intersection of\n * Rust regex and JavaScript RegExp: ASCII patterns, captures, alternation,\n * ASCII character classes and ordinary quantifiers. Lookaround,\n * backreferences, named/inline groups, Unicode/shorthand classes and control\n * escapes are rejected before either implementation runs. Patterns are\n * limited to 4096 bytes, counted repetitions to 1000, group nesting to 128\n * and expanded state machines to 8192 states. Both peers share this\n * compilation boundary; portable matching never backtracks over input.\n *\n * @category validation\n * @since 1.0.0\n */\nexport const validatePattern = (pattern: string, fixedStrings: boolean): StdError.StdError | undefined => {\n if (pattern.length > 4096) return invalidPattern(pattern, \"patterns must not exceed 4096 bytes\")\n if (!/^[\\x20-\\x7e]*$/.test(pattern)) return invalidPattern(pattern, \"patterns must contain printable ASCII only\")\n if (fixedStrings) return undefined\n if (pattern.includes(\"(?\")) return invalidPattern(pattern, \"special groups and lookaround are not supported\")\n let inClass = false\n let classCharacters = 0\n for (let index = 0; index < pattern.length; index++) {\n const character = pattern[index]\n if (character === \"\\\\\") {\n const escaped = pattern[index + 1]\n if (escaped === undefined || /[A-Za-z0-9]/.test(escaped)) {\n return invalidPattern(pattern, \"backreferences, shorthand classes and encoded escapes are not supported\")\n }\n index++\n if (inClass) classCharacters++\n continue\n }\n if (character === \"[\" && inClass) {\n return invalidPattern(pattern, \"nested and named character classes are not supported\")\n }\n if (character === \"[\") {\n inClass = true\n classCharacters = 0\n continue\n }\n if (character === \"{\" && !inClass) {\n const closing = pattern.indexOf(\"}\", index + 1)\n if (closing >= 0) {\n const counts = pattern.slice(index + 1, closing).split(\",\").filter((value) => value.length > 0)\n if (counts.some((value) => /^\\d+$/.test(value) && Number(value) > 1000)) {\n return invalidPattern(pattern, \"repetition counts above 1000 are not supported\")\n }\n }\n }\n if (character === \"]\" && inClass) {\n if (classCharacters === 0 || (classCharacters === 1 && pattern[index - 1] === \"^\")) {\n return invalidPattern(pattern, \"empty character classes are not supported\")\n }\n inClass = false\n continue\n }\n if (inClass) {\n if (\n (character === \"&\" && pattern[index + 1] === \"&\") ||\n (character === \"-\" && pattern[index + 1] === \"-\") ||\n (character === \"~\" && pattern[index + 1] === \"~\")\n ) {\n return invalidPattern(pattern, \"character-class set operations are not supported\")\n }\n classCharacters++\n }\n }\n try {\n new RegExp(pattern, \"u\")\n } catch (error) {\n return invalidPattern(pattern, malformed(pattern) ?? engineReason(error as Error))\n }\n try {\n LinearRegex.compile(pattern, false)\n return undefined\n } catch (error) {\n // LinearRegex.compile throws Error for its nesting and state budgets.\n return invalidPattern(pattern, (error as Error).message)\n }\n}\n\nconst countedRepetition = /^\\{\\d+(,\\d*)?\\}/\n\n/**\n * Names the first construct that keeps `pattern` from parsing, with its\n * 1-based column and the escape that makes it literal.\n *\n * A caller told only that a pattern is unsupported guesses at which character\n * broke it; `Rule({` reads as a literal search to its author and as an unclosed\n * group plus a count with no digits to the parser. Only the syntax errors a\n * search author commonly makes are named here; anything else falls back to the\n * engine's own reason.\n */\nconst malformed = (pattern: string): string | undefined => {\n const open: Array<number> = []\n let repeatable = false\n for (let index = 0; index < pattern.length; index++) {\n const character = pattern[index]!\n const at = `\"${character}\" at column ${index + 1}`\n if (character === \"\\\\\") {\n index++\n repeatable = true\n continue\n }\n if (character === \"[\") {\n let end = index + 1\n if (pattern[end] === \"^\") end++\n while (end < pattern.length && pattern[end] !== \"]\") end += pattern[end] === \"\\\\\" ? 2 : 1\n if (end >= pattern.length) return `${at} is never closed; write \\\\[ for a literal bracket`\n index = end\n repeatable = true\n continue\n }\n if (character === \"(\") {\n open.push(index)\n repeatable = false\n continue\n }\n if (character === \")\") {\n if (open.pop() === undefined) return `${at} closes nothing; write \\\\) for a literal parenthesis`\n repeatable = true\n continue\n }\n if (character === \"{\") {\n const count = countedRepetition.exec(pattern.slice(index))\n if (count === null) return `${at} is not a repetition count; write \\\\{ for a literal brace`\n if (!repeatable) return `${at} repeats nothing; write \\\\{ for a literal brace`\n index += count[0].length - 1\n continue\n }\n if (character === \"}\" || character === \"]\") {\n return `${at} closes nothing; write \\\\${character} for a literal ${character === \"}\" ? \"brace\" : \"bracket\"}`\n }\n if (character === \"*\" || character === \"+\" || character === \"?\") {\n if (!repeatable) return `${at} repeats nothing; write \\\\${character} for a literal ${character}`\n continue\n }\n repeatable = character !== \"|\" && character !== \"^\" && character !== \"$\"\n }\n const unclosed = open.at(-1)\n return unclosed === undefined\n ? undefined\n : `\"(\" at column ${unclosed + 1} is never closed; write \\\\( for a literal parenthesis`\n}\n\n/** The JavaScript engine's reason, without its prefix or its echo of the pattern. */\nconst engineReason = (error: Error): string => {\n const reason = error.message.replace(/^Invalid regular expression: (\\/.*\\/[a-z]*: )?/, \"\").trim()\n return `invalid expression: ${reason}`\n}\n\n/**\n * Whether `error` is a pattern or glob rejection this contract wrote.\n *\n * Those messages are host-authored and name the construct that broke, so a\n * caller may show them to a model. A peer's `invalid_pattern` built from\n * `rg`'s stderr is not one of them and stays private.\n *\n * @category validation\n * @since 1.0.0\n */\nexport const isContractRejection = (error: StdError.StdError): boolean =>\n error.code === \"invalid_pattern\" && error.message.startsWith(`${rejectionPrefix}\"`)\n\n/**\n * Validates the portable `-g` grammar before either peer sees it.\n *\n * @category validation\n * @since 1.0.0\n */\nexport const validateGlob = (glob: string): StdError.StdError | undefined => {\n const pattern = glob.startsWith(\"!\") ? glob.slice(1) : glob\n // `rg` drops the trailing spaces and then ignores a glob that is left blank,\n // which filters nothing at all. Rejecting it keeps a typo from silently\n // widening the search instead of narrowing it.\n if (pattern.replace(/ +$/, \"\").length === 0) return invalidPattern(glob, \"glob patterns must not be empty\")\n if (!/^[\\x20-\\x7e]*$/.test(pattern)) return invalidPattern(glob, \"globs must contain printable ASCII only\")\n if (pattern.includes(\"\\\\\") || pattern.includes(\"[\") || pattern.includes(\"]\")) {\n return invalidPattern(glob, \"glob escapes and character classes are not supported\")\n }\n let inBrace = false\n let alternatives = 1\n let expansionCount = 1\n for (let index = 0; index < pattern.length; index++) {\n const character = pattern[index]\n if (character === \"{\") {\n if (inBrace) return invalidPattern(glob, \"nested brace alternatives are not supported\")\n inBrace = true\n alternatives = 1\n } else if (character === \",\" && inBrace) {\n alternatives++\n } else if (character === \"}\") {\n if (!inBrace || alternatives < 2) return invalidPattern(glob, \"braces must contain alternatives\")\n inBrace = false\n expansionCount *= alternatives\n if (expansionCount > 256) return invalidPattern(glob, \"glob brace expansion exceeds 256 patterns\")\n }\n }\n if (inBrace) return invalidPattern(glob, \"glob braces must be balanced\")\n return undefined\n}\n\n/**\n * Compiles a pattern after common validation.\n *\n * @category matching\n * @since 1.0.0\n */\nexport const expression = (pattern: string, fixedStrings: boolean, insensitive: boolean): RegExp => {\n const input = fixedStrings ? escapeRegex(pattern) : pattern\n let source = \"\"\n let inClass = false\n for (let index = 0; index < input.length; index++) {\n const character = input[index]\n if (character === \"\\\\\") {\n source += `${character}${input[index + 1] ?? \"\"}`\n index++\n } else if (character === \"[\") {\n inClass = true\n source += character\n } else if (character === \"]\" && inClass) {\n inClass = false\n source += character\n } else if (!inClass && character === \".\") {\n source += \"[^\\\\n]\"\n } else if (!inClass && character === \"$\") {\n source += \"(?![\\\\s\\\\S])\"\n } else {\n source += character\n }\n }\n return new RegExp(source, insensitive ? \"iu\" : \"u\")\n}\n\nconst expandBraces = (pattern: string): ReadonlyArray<string> => {\n const opening = pattern.indexOf(\"{\")\n if (opening < 0) return [pattern]\n const closing = pattern.indexOf(\"}\", opening + 1)\n if (closing < 0) return [pattern]\n const alternatives = pattern.slice(opening + 1, closing).split(\",\")\n if (alternatives.length < 2) return [pattern]\n return alternatives.flatMap((alternative) =>\n expandBraces(\n `${pattern.slice(0, opening)}${alternative}${pattern.slice(closing + 1)}`\n )\n )\n}\n\nconst globExpression = (pattern: string): RegExp => {\n let source = \"\"\n for (let index = 0; index < pattern.length; index++) {\n const character = pattern[index]!\n const next = pattern[index + 1]\n if (\n character === \"*\" && next === \"*\" &&\n (index === 0 || pattern[index - 1] === \"/\") &&\n (pattern[index + 2] === undefined || pattern[index + 2] === \"/\")\n ) {\n source += pattern[index + 2] === \"/\" ? \"(?:.*/)?\" : \".*\"\n index += pattern[index + 2] === \"/\" ? 2 : 1\n } else if (character === \"*\") source += \"[^/]*\"\n else if (character === \"?\") source += \"[^/]\"\n else source += character.replace(/[\\\\^$.*+?()[\\]{}|]/g, \"\\\\$&\")\n }\n return new RegExp(`^${source}$`)\n}\n\nconst outsidePrintableAscii = /[^\\x20-\\x7e]/\n\n// Printable ASCII is its own UTF-8 encoding, and paths are overwhelmingly\n// printable ASCII, so the encoder only runs for the paths that need it.\nconst utf8ByteString = (value: string): string =>\n outsidePrintableAscii.test(value)\n ? Array.from(new TextEncoder().encode(value), (byte) => String.fromCharCode(byte)).join(\"\")\n : value\n\n/**\n * Rewrites a glob into the one spelling both peers match against.\n *\n * `.` is never a path component either peer can produce, so a leading `./` and\n * every interior `/./` would silently make a pattern unmatchable. Both are\n * folded into the root anchor, which is what a caller writing `./src/**` means.\n * Trailing spaces are dropped because `rg` reads `-g` by gitignore's rules and\n * drops them too, so `\"a.ts \"` finds `a.ts` in the native peer and has to find\n * it in the in-process one. A leading `!` is preserved so exclusion globs\n * canonicalize the same way.\n *\n * @category matching\n * @since 1.0.0\n */\nexport const canonicalGlob = (glob: string): string => {\n const excluded = glob.startsWith(\"!\")\n const pattern = excluded ? glob.slice(1) : glob\n const canonical = pattern.replace(/ +$/, \"\").replace(/\\/\\.(?=\\/)/g, \"\").replace(/^\\.\\//, \"/\")\n return excluded ? `!${canonical}` : canonical\n}\n\ninterface CompiledGlob {\n readonly byPath: boolean\n readonly expression: RegExp\n}\n\nconst compiled = new Map<string, ReadonlyArray<CompiledGlob>>()\n\n/**\n * Compiles one glob into its alternatives, once per distinct pattern.\n *\n * The in-process peer asks whether a pattern matches for every candidate file\n * in the walk, so canonicalizing, brace expanding and compiling the pattern\n * inside that loop makes the work quadratic in the tree. A pattern compiles to\n * the same matchers every time, so the compilation is cached; the cache is\n * bounded because callers, not the tree, supply the patterns.\n */\nconst compileGlob = (pattern: string): ReadonlyArray<CompiledGlob> => {\n const cached = compiled.get(pattern)\n if (cached !== undefined) return cached\n const matchers = expandBraces(canonicalGlob(pattern)).map((expanded) => {\n const rooted = expanded.startsWith(\"/\")\n const normalized = rooted ? expanded.slice(1) : expanded\n return { byPath: rooted || normalized.includes(\"/\"), expression: globExpression(normalized) }\n })\n if (compiled.size >= 256) compiled.clear()\n compiled.set(pattern, matchers)\n return matchers\n}\n\n/**\n * Matches the supported `-g` subset against a root-relative candidate path.\n *\n * A pattern without `/` matches the basename at any depth. Every other pattern\n * is matched against the candidate's path relative to the search root, anchored\n * at the root, whether or not it carries the optional leading `/`.\n *\n * @category matching\n * @since 1.0.0\n */\nexport const matchesGlob = (pattern: string, relative: string, basename: string): boolean =>\n compileGlob(pattern).some((matcher) => matcher.expression.test(utf8ByteString(matcher.byPath ? relative : basename)))\n\n/**\n * Applies ripgrep `-g` ordering: positive globs include and `!` globs exclude.\n *\n * @category matching\n * @since 1.0.0\n */\nexport const includedByGlobs = (globs: ReadonlyArray<string>, relative: string, basename: string): boolean => {\n const positives = globs.filter((glob) => !glob.startsWith(\"!\"))\n let included = positives.length === 0\n for (const glob of globs) {\n const excluded = glob.startsWith(\"!\")\n if (matchesGlob(excluded ? glob.slice(1) : glob, relative, basename)) included = !excluded\n }\n return included\n}\n\nconst wildcard = /[*?{}]/\n\nconst literalDirectory = (pattern: string): ReadonlyArray<string> => {\n if (!pattern.includes(\"/\")) return []\n const segments = pattern.replace(/^\\//, \"\").split(\"/\").filter((segment) => segment.length > 0)\n const wildcardAt = segments.findIndex((segment) => wildcard.test(segment))\n return wildcardAt < 0 ? segments.slice(0, -1) : segments.slice(0, wildcardAt)\n}\n\nconst rootRelativeSuffix = (pattern: string, root: string, path: Path.Path): string | undefined => {\n const anchored = pattern.replace(/^\\/+/, \"\")\n const patternRoot = path.sep === \"\\\\\" ? root.replaceAll(\"\\\\\", \"/\") : root\n const stem = patternRoot.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\")\n return stem.length > 0 && anchored.startsWith(`${stem}/`) ? anchored.slice(stem.length + 1) : undefined\n}\n\nconst unsatisfiedReason = (\n options: {\n readonly fileSystem: FileSystem.FileSystem\n readonly path: Path.Path\n readonly root: string\n readonly hidden: boolean\n },\n pattern: string\n): Effect.Effect<string | undefined> =>\n Effect.gen(function*() {\n const reasons: Array<string> = []\n for (const alternative of expandBraces(pattern)) {\n const segments = literalDirectory(alternative)\n if (segments.length === 0) return undefined\n const skipped = segments.find((segment) => Walk.skippedDirectories.has(segment))\n if (skipped !== undefined) {\n reasons.push(`${skipped} is never descended into; name it as the search root to look inside it`)\n continue\n }\n if (!options.hidden && segments.some((segment) => segment.startsWith(\".\"))) {\n reasons.push(\"hidden paths are excluded unless hidden is true\")\n continue\n }\n const directory = segments.join(\"/\")\n const present = yield* options.fileSystem.stat(options.path.join(options.root, directory)).pipe(\n Effect.map((info) => info.type === \"Directory\"),\n Effect.orElseSucceed(() => false)\n )\n if (present) return undefined\n reasons.push(`there is no ${directory} directory there`)\n }\n return reasons[0]\n })\n\n/**\n * Explains the positive globs that no file under the root could ever match.\n *\n * A search that returns nothing is ambiguous: the tree may hold no match, or\n * the pattern may be unsatisfiable \u2014 an absolute path written where a\n * root-relative one belongs, a directory that does not exist, a skipped\n * directory, a hidden path with `hidden` left false. Callers attach the result\n * to `notice` when they produced no entries. Ignore exclusions name the\n * `noIgnore: true` escape hatch, while impossible globs explain the correction.\n * This keeps the cases\n * distinguishable. Exclusion globs are ignored: excluding what is not there\n * changes nothing.\n *\n * @category diagnostics\n * @since 1.0.0\n */\nexport const unsatisfiableNotice = (options: {\n readonly fileSystem: FileSystem.FileSystem\n readonly path: Path.Path\n readonly root: string\n readonly globs: ReadonlyArray<string>\n readonly noIgnore?: boolean | undefined\n readonly ignored?: boolean | undefined\n readonly hidden: boolean\n}): Effect.Effect<string | undefined> =>\n Effect.gen(function*() {\n // Globs filter a walk. A root that names one file is searched whatever the\n // globs say \u2014 `rg` always searches a path given on the command line \u2014 so\n // there is no unsatisfiable pattern to report and no directory to stat.\n const walkable = yield* options.fileSystem.stat(options.root).pipe(\n Effect.map((info) => info.type === \"Directory\"),\n Effect.orElseSucceed(() => false)\n )\n if (!walkable) return undefined\n const sentences: Array<string> = []\n for (const glob of options.globs) {\n if (glob.startsWith(\"!\")) continue\n const canonical = canonicalGlob(glob)\n const reason = yield* unsatisfiedReason(options, canonical)\n if (reason === undefined) continue\n const suffix = rootRelativeSuffix(canonical, options.root, options.path)\n sentences.push(\n `No file under ${options.root} can match \"${glob}\": ${\n suffix === undefined\n ? reason\n : `glob patterns are relative to the search root, so use \"${suffix}\" instead`\n }.`\n )\n }\n // An impossible glob cannot be repaired by opting out of ignores.\n if (sentences.length > 0 && sentences.length === options.globs.filter((glob) => !glob.startsWith(\"!\")).length) {\n return sentences.join(\" \")\n }\n const included = (relative: string, basename: string) => includedByGlobs(options.globs, relative, basename)\n const ignored = options.noIgnore ? false : options.ignored ??\n (yield* Walk.files(options.fileSystem, options.path, options.root, options.hidden, false, included).pipe(\n Effect.map((walked) => walked.ignored),\n Effect.orElseSucceed(() => false)\n ))\n if (ignored) {\n sentences.push(\"No results; ignore files excluded paths. Retry with noIgnore: true to include them.\")\n }\n return sentences.length === 0 ? undefined : sentences.join(\" \")\n })\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* shell_command flow declaration and portable handler.
|
|
3
|
+
*
|
|
4
|
+
* A Codex CLI clone of the `shell_command` tool: string command, `workdir`,
|
|
5
|
+
* `timeout_ms`, and the Codex output format (`Exit code:` / `Wall time:` /
|
|
6
|
+
* `Output:` with middle token-budget truncation).
|
|
7
|
+
*
|
|
8
|
+
* Codex's `sandbox_permissions` / `justification` / `prefix_rule` approval
|
|
9
|
+
* parameters are deliberately absent: the permission kernel owns
|
|
10
|
+
* sandboxing and escalation in this harness.
|
|
11
|
+
*
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
import type * as ChildProcessSpawner from "@smthrs/kernel/ChildProcessSpawner";
|
|
15
|
+
import * as Effect from "effect/Effect";
|
|
16
|
+
import * as Schema from "effect/Schema";
|
|
17
|
+
import type * as StdError from "./StdError.ts";
|
|
18
|
+
/**
|
|
19
|
+
* Registry name for the shell_command flow. Matches the Codex CLI tool name.
|
|
20
|
+
*
|
|
21
|
+
* @category identifiers
|
|
22
|
+
* @since 1.0.0
|
|
23
|
+
*/
|
|
24
|
+
export declare const name = "shell_command";
|
|
25
|
+
/**
|
|
26
|
+
* Model-facing description of the shell_command flow. Matches the Codex CLI
|
|
27
|
+
* (non-Windows) description.
|
|
28
|
+
*
|
|
29
|
+
* @category descriptions
|
|
30
|
+
* @since 1.0.0
|
|
31
|
+
*/
|
|
32
|
+
export declare const description: string;
|
|
33
|
+
/**
|
|
34
|
+
* Default command timeout in milliseconds, matching Codex.
|
|
35
|
+
*
|
|
36
|
+
* @category constants
|
|
37
|
+
* @since 1.0.0
|
|
38
|
+
*/
|
|
39
|
+
export declare const DEFAULT_TIMEOUT_MS = 10000;
|
|
40
|
+
/**
|
|
41
|
+
* Maximum bytes retained from each stream while a shell command executes.
|
|
42
|
+
*
|
|
43
|
+
* This is far above the 10,000-token model budget because
|
|
44
|
+
* `formatExecOutputForModel` keeps the head and tail while the capture bound
|
|
45
|
+
* keeps only the tail. Commands below this bound therefore render byte for
|
|
46
|
+
* byte as before, while larger output costs the bound instead of its full size.
|
|
47
|
+
*
|
|
48
|
+
* @category constants
|
|
49
|
+
* @since 1.0.0
|
|
50
|
+
*/
|
|
51
|
+
export declare const MAX_CAPTURE_BYTES = 8000000;
|
|
52
|
+
/**
|
|
53
|
+
* Default output token budget, matching Codex.
|
|
54
|
+
*
|
|
55
|
+
* @category constants
|
|
56
|
+
* @since 1.0.0
|
|
57
|
+
*/
|
|
58
|
+
export declare const DEFAULT_MAX_OUTPUT_TOKENS = 10000;
|
|
59
|
+
/**
|
|
60
|
+
* Timeout exit code reported to the model, matching Codex exec.
|
|
61
|
+
*
|
|
62
|
+
* @category constants
|
|
63
|
+
* @since 1.0.0
|
|
64
|
+
*/
|
|
65
|
+
export declare const TIMEOUT_EXIT_CODE = 124;
|
|
66
|
+
/**
|
|
67
|
+
* Input schema for the shell_command flow.
|
|
68
|
+
*
|
|
69
|
+
* @category schemas
|
|
70
|
+
* @since 1.0.0
|
|
71
|
+
*/
|
|
72
|
+
export declare const Input: Schema.Struct<{
|
|
73
|
+
readonly command: Schema.String;
|
|
74
|
+
readonly workdir: Schema.optional<Schema.String>;
|
|
75
|
+
readonly timeout_ms: Schema.optional<Schema.Number>;
|
|
76
|
+
}>;
|
|
77
|
+
/**
|
|
78
|
+
* Decoded input accepted by the `shell_command` flow.
|
|
79
|
+
*
|
|
80
|
+
* @category models
|
|
81
|
+
* @since 1.0.0
|
|
82
|
+
*/
|
|
83
|
+
export type Input = typeof Input.Type;
|
|
84
|
+
/**
|
|
85
|
+
* Output schema for the shell_command flow.
|
|
86
|
+
*
|
|
87
|
+
* @category schemas
|
|
88
|
+
* @since 1.0.0
|
|
89
|
+
*/
|
|
90
|
+
export declare const Output: Schema.Struct<{
|
|
91
|
+
readonly output: Schema.String;
|
|
92
|
+
readonly exitCode: Schema.Number;
|
|
93
|
+
}>;
|
|
94
|
+
/**
|
|
95
|
+
* Decoded output returned by the `shell_command` flow.
|
|
96
|
+
*
|
|
97
|
+
* @category models
|
|
98
|
+
* @since 1.0.0
|
|
99
|
+
*/
|
|
100
|
+
export type Output = typeof Output.Type;
|
|
101
|
+
/**
|
|
102
|
+
* Static conservative effect envelope for the shell_command flow.
|
|
103
|
+
*
|
|
104
|
+
* @category effects
|
|
105
|
+
* @since 1.0.0
|
|
106
|
+
*/
|
|
107
|
+
export declare const effects: import("@smthrs/plan/Effects").Declaration;
|
|
108
|
+
/**
|
|
109
|
+
* Narrows the effect envelope for a decoded invocation.
|
|
110
|
+
*
|
|
111
|
+
* A command line carries no declared envelope, so an invocation says nothing
|
|
112
|
+
* the registry-time worst case does not already say.
|
|
113
|
+
*
|
|
114
|
+
* @category effects
|
|
115
|
+
* @since 1.0.0
|
|
116
|
+
*/
|
|
117
|
+
export declare const effectsFor: (_input: typeof Input.Type) => import("@smthrs/plan/Effects").Declaration;
|
|
118
|
+
/**
|
|
119
|
+
* Capabilities required by the shell_command flow.
|
|
120
|
+
*
|
|
121
|
+
* @category capabilities
|
|
122
|
+
* @since 1.0.0
|
|
123
|
+
*/
|
|
124
|
+
export declare const capabilities: string[];
|
|
125
|
+
/**
|
|
126
|
+
* Declaration-only shell_command flow.
|
|
127
|
+
*
|
|
128
|
+
* @category flows
|
|
129
|
+
* @since 1.0.0
|
|
130
|
+
*/
|
|
131
|
+
export declare const flow: {
|
|
132
|
+
readonly name: "shell_command";
|
|
133
|
+
readonly description: string;
|
|
134
|
+
readonly input: Schema.Struct<{
|
|
135
|
+
readonly command: Schema.String;
|
|
136
|
+
readonly workdir: Schema.optional<Schema.String>;
|
|
137
|
+
readonly timeout_ms: Schema.optional<Schema.Number>;
|
|
138
|
+
}>;
|
|
139
|
+
readonly output: Schema.Struct<{
|
|
140
|
+
readonly output: Schema.String;
|
|
141
|
+
readonly exitCode: Schema.Number;
|
|
142
|
+
}>;
|
|
143
|
+
readonly capabilities: string[];
|
|
144
|
+
readonly effects: import("@smthrs/plan/Effects").Declaration;
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Executes a shell command through the permission-aware kernel service and
|
|
148
|
+
* renders the Codex model-facing output format.
|
|
149
|
+
*
|
|
150
|
+
* Non-zero exit codes and timeouts remain successful values, exactly as in
|
|
151
|
+
* Codex; only host and permission failures use the typed error channel.
|
|
152
|
+
*
|
|
153
|
+
* @category handlers
|
|
154
|
+
* @since 1.0.0
|
|
155
|
+
*/
|
|
156
|
+
export declare const run: (input: {
|
|
157
|
+
readonly command: string;
|
|
158
|
+
readonly workdir?: string | undefined;
|
|
159
|
+
readonly timeout_ms?: number | undefined;
|
|
160
|
+
}) => Effect.Effect<{
|
|
161
|
+
readonly output: string;
|
|
162
|
+
readonly exitCode: number;
|
|
163
|
+
}, StdError.StdError, ChildProcessSpawner.ChildProcessSpawner>;
|
|
164
|
+
//# sourceMappingURL=ShellCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ShellCommand.d.ts","sourceRoot":"","sources":["../../src/ShellCommand.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,KAAK,mBAAmB,MAAM,oCAAoC,CAAA;AAC9E,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAIvC,OAAO,KAAK,KAAK,QAAQ,MAAM,eAAe,CAAA;AAE9C;;;;;GAKG;AACH,eAAO,MAAM,IAAI,kBAAkB,CAAA;AAEnC;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,QACgG,CAAA;AAExH;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,QAAS,CAAA;AAExC;;;;;;;;;;GAUG;AACH,eAAO,MAAM,iBAAiB,UAAY,CAAA;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,QAAS,CAAA;AAE/C;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,MAAM,CAAA;AAEpC;;;;;GAKG;AACH,eAAO,MAAM,KAAK;;;;EAQhB,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAErC;;;;;GAKG;AACH,eAAO,MAAM,MAAM;;;EAKjB,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,OAAO,4CAA8E,CAAA;AAElG;;;;;;;;GAQG;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;;;;;;;;;GASG;AACH,eAAO,MAAM,GAAG;;;;;;;8DAiCd,CAAA"}
|