@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,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/ApplyPatch.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Faithful port of the Codex CLI apply_patch engine.\n *\n * Mirrors `codex-rs/apply-patch/src/{parser,streaming_parser,seek_sequence}.rs`\n * and the applier in `lib.rs`: the V4A patch grammar, the lenient heredoc\n * boundary handling, the fuzzy context-matching ladder, and every error\n * string, so ChatGPT-family models see exactly the behavior they were\n * posttrained on. Pure module: no host access.\n *\n * @since 1.0.0\n */\n\nimport * as Schema from \"effect/Schema\"\nimport { sourceLines } from \"./Text.ts\"\n\nconst BEGIN_PATCH_MARKER = \"*** Begin Patch\"\nconst END_PATCH_MARKER = \"*** End Patch\"\nconst ADD_FILE_MARKER = \"*** Add File: \"\nconst DELETE_FILE_MARKER = \"*** Delete File: \"\nconst UPDATE_FILE_MARKER = \"*** Update File: \"\nconst MOVE_TO_MARKER = \"*** Move to: \"\nconst EOF_MARKER = \"*** End of File\"\nconst CHANGE_CONTEXT_MARKER = \"@@ \"\nconst EMPTY_CHANGE_CONTEXT_MARKER = \"@@\"\nconst ENVIRONMENT_ID_MARKER = \"*** Environment ID:\"\n\n/**\n * Parse failure with Codex-identical message text.\n *\n * `invalid patch: {message}` for patch-level failures and\n * `invalid hunk at line {line}, {message}` for hunk-level failures.\n *\n * @since 1.0.0\n * @private\n */\nexport class ParseError extends Schema.TaggedError<ParseError>()(\"@smthrs/std/ParseError\", {\n kind: Schema.Literals([\"invalid_patch\", \"invalid_hunk\"]),\n detail: Schema.String,\n lineNumber: Schema.UndefinedOr(Schema.Number)\n}) {\n override get message(): string {\n return this.kind === \"invalid_patch\"\n ? `invalid patch: ${this.detail}`\n : `invalid hunk at line ${this.lineNumber}, ${this.detail}`\n }\n}\n\nconst parseError = (kind: ParseError[\"kind\"], detail: string, lineNumber?: number): ParseError =>\n new ParseError({ kind, detail, lineNumber })\n\n/**\n * One replaced region of an update hunk.\n *\n * @since 1.0.0\n * @private\n */\nexport interface UpdateFileChunk {\n changeContext: string | undefined\n oldLines: Array<string>\n newLines: Array<string>\n isEndOfFile: boolean\n}\n\n/**\n * A parsed patch hunk.\n *\n * @since 1.0.0\n * @private\n */\nexport type Hunk =\n | { readonly kind: \"add\"; readonly path: string; contents: string }\n | { readonly kind: \"delete\"; readonly path: string }\n | {\n readonly kind: \"update\"\n readonly path: string\n movePath: string | undefined\n readonly chunks: Array<UpdateFileChunk>\n }\n\n/**\n * Parsed patch: hunks plus the optional environment id preamble.\n *\n * @since 1.0.0\n * @private\n */\nexport interface ParsedPatch {\n readonly hunks: ReadonlyArray<Hunk>\n readonly environmentId: string | undefined\n}\n\ntype Mode =\n | { readonly _tag: \"NotStarted\" }\n | { readonly _tag: \"StartedPatch\" }\n | { readonly _tag: \"AddFile\" }\n | { readonly _tag: \"DeleteFile\" }\n | { readonly _tag: \"UpdateFile\"; readonly hunkLineNumber: number; readonly hunk: Extract<Hunk, { kind: \"update\" }> }\n | { readonly _tag: \"EndedPatch\" }\n\nconst invalidHunkHeader = (trimmed: string, lineNumber: number): ParseError =>\n parseError(\n \"invalid_hunk\",\n `'${trimmed}' is not a valid hunk header. Valid hunk headers: '*** Add File: {path}', '*** Delete File: {path}', '*** Update File: {path}'`,\n lineNumber\n )\n\nconst unexpectedUpdateLine = (line: string, lineNumber: number): ParseError =>\n parseError(\n \"invalid_hunk\",\n `Unexpected line found in update hunk: '${line}'. Every line should start with ' ' (context line), '+' (added line), or '-' (removed line)`,\n lineNumber\n )\n\n/**\n * Streaming line state machine for the V4A patch grammar; a faithful port of\n * `StreamingPatchParser`.\n *\n * @since 1.0.0\n * @private\n */\nexport class StreamingPatchParser {\n private lineBuffer = \"\"\n private mode: Mode = { _tag: \"NotStarted\" }\n private hunks: Array<Hunk> = []\n private lineNumber = 0\n private _environmentId: string | undefined\n\n environmentId(): string | undefined {\n return this._environmentId\n }\n\n private ensureUpdateHunkIsNotEmpty(line: string): void {\n const last = this.hunks[this.hunks.length - 1]\n if (last === undefined || last.kind !== \"update\") return\n if (last.chunks.length === 0 && this.mode._tag === \"UpdateFile\") {\n throw parseError(\n \"invalid_hunk\",\n `Update file hunk for path '${last.path}' is empty`,\n this.mode.hunkLineNumber\n )\n }\n const chunk = last.chunks[last.chunks.length - 1]\n if (chunk !== undefined && chunk.oldLines.length === 0 && chunk.newLines.length === 0) {\n if (line === END_PATCH_MARKER) {\n throw parseError(\"invalid_hunk\", \"Update hunk does not contain any lines\", this.lineNumber)\n }\n throw unexpectedUpdateLine(line, this.lineNumber)\n }\n }\n\n private handleHunkHeadersAndEndPatch(trimmed: string): boolean {\n if (this.mode._tag === \"StartedPatch\" && trimmed.startsWith(ENVIRONMENT_ID_MARKER)) {\n if (this._environmentId !== undefined) {\n throw parseError(\"invalid_patch\", \"apply_patch environment_id cannot be specified more than once\")\n }\n const environmentId = trimmed.slice(ENVIRONMENT_ID_MARKER.length).trim()\n if (environmentId === \"\") {\n throw parseError(\"invalid_patch\", \"apply_patch environment_id cannot be empty\")\n }\n this._environmentId = environmentId\n return true\n }\n if (trimmed === END_PATCH_MARKER) {\n this.ensureUpdateHunkIsNotEmpty(trimmed)\n this.mode = { _tag: \"EndedPatch\" }\n return true\n }\n if (trimmed.startsWith(ADD_FILE_MARKER)) {\n this.ensureUpdateHunkIsNotEmpty(trimmed)\n this.hunks.push({ kind: \"add\", path: trimmed.slice(ADD_FILE_MARKER.length), contents: \"\" })\n this.mode = { _tag: \"AddFile\" }\n return true\n }\n if (trimmed.startsWith(DELETE_FILE_MARKER)) {\n this.ensureUpdateHunkIsNotEmpty(trimmed)\n this.hunks.push({ kind: \"delete\", path: trimmed.slice(DELETE_FILE_MARKER.length) })\n this.mode = { _tag: \"DeleteFile\" }\n return true\n }\n if (trimmed.startsWith(UPDATE_FILE_MARKER)) {\n this.ensureUpdateHunkIsNotEmpty(trimmed)\n const hunk: Extract<Hunk, { kind: \"update\" }> = {\n kind: \"update\",\n path: trimmed.slice(UPDATE_FILE_MARKER.length),\n movePath: undefined,\n chunks: []\n }\n this.hunks.push(hunk)\n this.mode = { _tag: \"UpdateFile\", hunkLineNumber: this.lineNumber, hunk }\n return true\n }\n return false\n }\n\n pushDelta(delta: string): ReadonlyArray<Hunk> {\n for (const ch of delta) {\n if (ch === \"\\n\") {\n let line = this.lineBuffer\n this.lineBuffer = \"\"\n if (line.endsWith(\"\\r\")) line = line.slice(0, -1)\n this.lineNumber += 1\n this.processLine(line)\n } else {\n this.lineBuffer += ch\n }\n }\n return this.hunks\n }\n\n finish(): ReadonlyArray<Hunk> {\n if (this.lineBuffer !== \"\") {\n const line = this.lineBuffer\n this.lineBuffer = \"\"\n this.lineNumber += 1\n if (line.trim() === END_PATCH_MARKER) {\n this.ensureUpdateHunkIsNotEmpty(line.trim())\n this.mode = { _tag: \"EndedPatch\" }\n } else {\n this.processLine(line)\n }\n }\n if (this.mode._tag !== \"EndedPatch\") {\n throw parseError(\"invalid_patch\", \"The last line of the patch must be '*** End Patch'\")\n }\n return this.hunks\n }\n\n private processLine(line: string): void {\n const trimmed = line.trim()\n switch (this.mode._tag) {\n case \"NotStarted\": {\n if (trimmed === BEGIN_PATCH_MARKER) {\n this.mode = { _tag: \"StartedPatch\" }\n return\n }\n throw parseError(\"invalid_patch\", \"The first line of the patch must be '*** Begin Patch'\")\n }\n case \"StartedPatch\": {\n if (this.handleHunkHeadersAndEndPatch(trimmed)) return\n throw invalidHunkHeader(trimmed, this.lineNumber)\n }\n case \"AddFile\": {\n if (this.handleHunkHeadersAndEndPatch(trimmed)) return\n const last = this.hunks[this.hunks.length - 1]\n if (line.startsWith(\"+\") && last !== undefined && last.kind === \"add\") {\n last.contents += `${line.slice(1)}\\n`\n return\n }\n throw invalidHunkHeader(trimmed, this.lineNumber)\n }\n case \"DeleteFile\": {\n if (this.handleHunkHeadersAndEndPatch(trimmed)) return\n throw invalidHunkHeader(trimmed, this.lineNumber)\n }\n case \"UpdateFile\": {\n const updateLine = line.replace(/\\s+$/, \"\")\n if (this.handleHunkHeadersAndEndPatch(updateLine)) return\n\n const hunk = this.mode.hunk\n const chunks = hunk.chunks\n const lastChunk = chunks[chunks.length - 1]\n if (lastChunk !== undefined && lastChunk.isEndOfFile) {\n if (updateLine === \"\") return\n if (updateLine !== EMPTY_CHANGE_CONTEXT_MARKER && !updateLine.startsWith(CHANGE_CONTEXT_MARKER)) {\n throw parseError(\n \"invalid_hunk\",\n `Expected update hunk to start with a @@ context marker, got: '${line}'`,\n this.lineNumber\n )\n }\n }\n\n if (chunks.length === 0 && hunk.movePath === undefined && updateLine.startsWith(MOVE_TO_MARKER)) {\n hunk.movePath = updateLine.slice(MOVE_TO_MARKER.length)\n return\n }\n\n if (\n (updateLine === EMPTY_CHANGE_CONTEXT_MARKER || updateLine.startsWith(CHANGE_CONTEXT_MARKER)) &&\n lastChunk !== undefined && lastChunk.oldLines.length === 0 && lastChunk.newLines.length === 0\n ) {\n throw unexpectedUpdateLine(line, this.lineNumber)\n }\n\n if (updateLine === EMPTY_CHANGE_CONTEXT_MARKER) {\n chunks.push({ changeContext: undefined, oldLines: [], newLines: [], isEndOfFile: false })\n return\n }\n\n if (updateLine.startsWith(CHANGE_CONTEXT_MARKER)) {\n chunks.push({\n changeContext: updateLine.slice(CHANGE_CONTEXT_MARKER.length),\n oldLines: [],\n newLines: [],\n isEndOfFile: false\n })\n return\n }\n\n if (updateLine === EOF_MARKER) {\n if (lastChunk !== undefined && lastChunk.oldLines.length === 0 && lastChunk.newLines.length === 0) {\n throw parseError(\"invalid_hunk\", \"Update hunk does not contain any lines\", this.lineNumber)\n }\n if (lastChunk !== undefined) lastChunk.isEndOfFile = true\n return\n }\n\n const ensureChunk = (): UpdateFileChunk => {\n if (chunks.length === 0) {\n chunks.push({ changeContext: undefined, oldLines: [], newLines: [], isEndOfFile: false })\n }\n return chunks[chunks.length - 1]!\n }\n\n if (line === \"\") {\n const chunk = ensureChunk()\n chunk.oldLines.push(\"\")\n chunk.newLines.push(\"\")\n return\n }\n if (line.startsWith(\" \")) {\n const chunk = ensureChunk()\n chunk.oldLines.push(line.slice(1))\n chunk.newLines.push(line.slice(1))\n return\n }\n if (line.startsWith(\"+\")) {\n ensureChunk().newLines.push(line.slice(1))\n return\n }\n if (line.startsWith(\"-\")) {\n ensureChunk().oldLines.push(line.slice(1))\n return\n }\n if (lastChunk !== undefined && (lastChunk.oldLines.length > 0 || lastChunk.newLines.length > 0)) {\n throw parseError(\n \"invalid_hunk\",\n `Expected update hunk to start with a @@ context marker, got: '${line}'`,\n this.lineNumber\n )\n }\n throw unexpectedUpdateLine(line, this.lineNumber)\n }\n case \"EndedPatch\": {\n if (trimmed === \"\") return\n throw parseError(\"invalid_patch\", \"The last line of the patch must be '*** End Patch'\")\n }\n }\n }\n}\n\nconst checkStartAndEndLinesStrict = (firstLine: string | undefined, lastLine: string | undefined): void => {\n const first = firstLine?.trim()\n const last = lastLine?.trim()\n if (first === BEGIN_PATCH_MARKER && last === END_PATCH_MARKER) return\n if (first !== undefined && first !== BEGIN_PATCH_MARKER) {\n throw parseError(\"invalid_patch\", \"The first line of the patch must be '*** Begin Patch'\")\n }\n throw parseError(\"invalid_patch\", \"The last line of the patch must be '*** End Patch'\")\n}\n\nconst checkPatchBoundariesStrict = (lines: ReadonlyArray<string>): ReadonlyArray<string> => {\n checkStartAndEndLinesStrict(lines[0], lines.length === 0 ? undefined : lines[lines.length - 1])\n return lines\n}\n\nconst checkPatchBoundariesLenient = (originalLines: ReadonlyArray<string>): ReadonlyArray<string> => {\n let originalError: ParseError\n try {\n return checkPatchBoundariesStrict(originalLines)\n } catch (error) {\n originalError = error as ParseError\n }\n if (originalLines.length >= 2) {\n const first = originalLines[0]!\n const last = originalLines[originalLines.length - 1]!\n if (\n (first === \"<<EOF\" || first === \"<<'EOF'\" || first === \"<<\\\"EOF\\\"\") &&\n last.endsWith(\"EOF\") && originalLines.length >= 4\n ) {\n return checkPatchBoundariesStrict(originalLines.slice(1, -1))\n }\n }\n throw originalError\n}\n\n/**\n * Parse a complete patch text; lenient mode (heredoc unwrapping) is always\n * on, matching Codex.\n *\n * @since 1.0.0\n * @private\n */\nexport const parsePatch = (patch: string): ParsedPatch => {\n const trimmed = patch.trim()\n const lines = trimmed === \"\" ? [] : trimmed.split(\"\\n\")\n const patchLines = checkPatchBoundariesLenient(lines)\n const parser = new StreamingPatchParser()\n parser.pushDelta(`${patchLines.join(\"\\n\")}\\n`)\n const hunks = parser.finish()\n return { hunks, environmentId: parser.environmentId() }\n}\n\nconst normalise = (s: string): string =>\n [...s.trim()].map((c) => {\n switch (c) {\n case \"\u2010\":\n case \"\u2011\":\n case \"\u2012\":\n case \"\u2013\":\n case \"\u2014\":\n case \"\u2015\":\n case \"\u2212\":\n return \"-\"\n case \"\u2018\":\n case \"\u2019\":\n case \"\u201A\":\n case \"\u201B\":\n return \"'\"\n case \"\u201C\":\n case \"\u201D\":\n case \"\u201E\":\n case \"\u201F\":\n return \"\\\"\"\n case \"\u00A0\":\n case \"\u2002\":\n case \"\u2003\":\n case \"\u2004\":\n case \"\u2005\":\n case \"\u2006\":\n case \"\u2007\":\n case \"\u2008\":\n case \"\u2009\":\n case \"\u200A\":\n case \"\u202F\":\n case \"\u205F\":\n case \"\u3000\":\n return \" \"\n default:\n return c\n }\n }).join(\"\")\n\n/**\n * Fuzzy sequence search with the Codex leniency ladder: exact, rstrip, trim,\n * then unicode-normalised comparison; end-of-file patterns anchor at the end\n * first.\n *\n * @since 1.0.0\n * @private\n */\nexport const seekSequence = (\n lines: ReadonlyArray<string>,\n pattern: ReadonlyArray<string>,\n start: number,\n eof: boolean\n): number | undefined => {\n if (pattern.length === 0) return start\n if (pattern.length > lines.length) return undefined\n const searchStart = eof && lines.length >= pattern.length ? lines.length - pattern.length : start\n const upper = lines.length - pattern.length\n const passes: ReadonlyArray<(a: string, b: string) => boolean> = [\n (a, b) => a === b,\n (a, b) => a.replace(/\\s+$/, \"\") === b.replace(/\\s+$/, \"\"),\n (a, b) => a.trim() === b.trim(),\n (a, b) => normalise(a) === normalise(b)\n ]\n for (const equals of passes) {\n for (let i = searchStart; i <= upper; i++) {\n let ok = true\n for (let p = 0; p < pattern.length; p++) {\n if (!equals(lines[i + p]!, pattern[p]!)) {\n ok = false\n break\n }\n }\n if (ok) return i\n }\n }\n return undefined\n}\n\n/**\n * Applier failure carrying the Codex message text verbatim.\n *\n * `context_not_found` is an `@@` context line absent from the file;\n * `lines_not_found` is a chunk whose expected lines are absent.\n *\n * @since 1.0.0\n * @private\n */\nexport class ComputeReplacementsError extends Schema.TaggedError<ComputeReplacementsError>()(\n \"@smthrs/std/ComputeReplacementsError\",\n {\n reason: Schema.Literals([\"context_not_found\", \"lines_not_found\"]),\n path: Schema.String,\n message: Schema.String\n }\n) {}\n\ntype Replacement = readonly [startIndex: number, oldLength: number, newLines: ReadonlyArray<string>]\n\nconst computeReplacements = (\n originalLines: ReadonlyArray<string>,\n path: string,\n chunks: ReadonlyArray<UpdateFileChunk>\n): Array<Replacement> => {\n const replacements: Array<Replacement> = []\n let lineIndex = 0\n\n for (const chunk of chunks) {\n if (chunk.changeContext !== undefined) {\n const idx = seekSequence(originalLines, [chunk.changeContext], lineIndex, false)\n if (idx === undefined) {\n throw new ComputeReplacementsError({\n reason: \"context_not_found\",\n path,\n message: `Failed to find context '${chunk.changeContext}' in ${path}`\n })\n }\n lineIndex = idx + 1\n }\n\n if (chunk.oldLines.length === 0) {\n const insertionIdx = originalLines.length > 0 && originalLines[originalLines.length - 1] === \"\"\n ? originalLines.length - 1\n : originalLines.length\n replacements.push([insertionIdx, 0, [...chunk.newLines]])\n continue\n }\n\n let pattern: ReadonlyArray<string> = chunk.oldLines\n let newSlice: ReadonlyArray<string> = chunk.newLines\n let found = seekSequence(originalLines, pattern, lineIndex, chunk.isEndOfFile)\n\n if (found === undefined && pattern[pattern.length - 1] === \"\") {\n pattern = pattern.slice(0, -1)\n if (newSlice[newSlice.length - 1] === \"\") newSlice = newSlice.slice(0, -1)\n found = seekSequence(originalLines, pattern, lineIndex, chunk.isEndOfFile)\n }\n\n if (found !== undefined) {\n replacements.push([found, pattern.length, [...newSlice]])\n lineIndex = found + pattern.length\n } else {\n throw new ComputeReplacementsError({\n reason: \"lines_not_found\",\n path,\n message: `Failed to find expected lines in ${path}:\\n${chunk.oldLines.join(\"\\n\")}`\n })\n }\n }\n\n replacements.sort((a, b) => a[0] - b[0])\n return replacements\n}\n\nconst applyReplacements = (lines: Array<string>, replacements: ReadonlyArray<Replacement>): Array<string> => {\n for (let r = replacements.length - 1; r >= 0; r--) {\n const [startIdx, oldLength, newSegment] = replacements[r]!\n lines.splice(startIdx, Math.min(oldLength, Math.max(lines.length - startIdx, 0)), ...newSegment)\n }\n return lines\n}\n\n/**\n * Derive the new file contents for an update hunk from the original\n * contents, matching Codex `derive_new_contents_from_chunks`.\n *\n * @since 1.0.0\n * @private\n */\nexport const deriveNewContents = (\n originalContents: string,\n path: string,\n chunks: ReadonlyArray<UpdateFileChunk>\n): string => {\n const originalLines = sourceLines(originalContents)\n const replacements = computeReplacements(originalLines, path, chunks)\n const newLines = applyReplacements([...originalLines], replacements)\n if (newLines[newLines.length - 1] !== \"\") newLines.push(\"\")\n return newLines.join(\"\\n\")\n}\n\n/**\n * Render the Codex success summary: `Success. Updated the following files:`\n * with `A`/`M`/`D` lines for adds, updates, and deletes in that order.\n *\n * @since 1.0.0\n * @private\n */\nexport const printSummary = (affected: {\n readonly added: ReadonlyArray<string>\n readonly modified: ReadonlyArray<string>\n readonly deleted: ReadonlyArray<string>\n}): string => {\n const lines = [\"Success. Updated the following files:\"]\n for (const path of affected.added) lines.push(`A ${path}`)\n for (const path of affected.modified) lines.push(`M ${path}`)\n for (const path of affected.deleted) lines.push(`D ${path}`)\n return `${lines.join(\"\\n\")}\\n`\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Faithful port of Codex CLI output truncation.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors `codex-rs/utils/string/src/truncate.rs` and
|
|
5
|
+
* `codex-rs/utils/output-truncation/src/lib.rs`: middle truncation on UTF-8
|
|
6
|
+
* boundaries with a `…{n} tokens truncated…` marker and a 4-bytes-per-token
|
|
7
|
+
* estimate, so ChatGPT-family models see the exact shapes they were
|
|
8
|
+
* posttrained on.
|
|
9
|
+
*
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* UTF-8 byte length of a string.
|
|
14
|
+
*
|
|
15
|
+
* @since 1.0.0
|
|
16
|
+
* @private
|
|
17
|
+
*/
|
|
18
|
+
export declare const byteLength: (text: string) => number;
|
|
19
|
+
/**
|
|
20
|
+
* Approximate token count: ceil(utf8Bytes / 4).
|
|
21
|
+
*
|
|
22
|
+
* @since 1.0.0
|
|
23
|
+
* @private
|
|
24
|
+
*/
|
|
25
|
+
export declare const approxTokenCount: (text: string) => number;
|
|
26
|
+
/**
|
|
27
|
+
* Approximate byte budget for a token budget.
|
|
28
|
+
*
|
|
29
|
+
* @since 1.0.0
|
|
30
|
+
* @private
|
|
31
|
+
*/
|
|
32
|
+
export declare const approxBytesForTokens: (tokens: number) => number;
|
|
33
|
+
/**
|
|
34
|
+
* Approximate tokens represented by a byte count: ceil(bytes / 4).
|
|
35
|
+
*
|
|
36
|
+
* @since 1.0.0
|
|
37
|
+
* @private
|
|
38
|
+
*/
|
|
39
|
+
export declare const approxTokensFromByteCount: (bytes: number) => number;
|
|
40
|
+
/**
|
|
41
|
+
* Middle-truncate to a byte budget with a char-count marker.
|
|
42
|
+
*
|
|
43
|
+
* @since 1.0.0
|
|
44
|
+
* @private
|
|
45
|
+
*/
|
|
46
|
+
export declare const truncateMiddleChars: (s: string, maxBytes: number) => string;
|
|
47
|
+
/**
|
|
48
|
+
* Middle-truncate to an approximate token budget, preserving the beginning
|
|
49
|
+
* and end. Returns the possibly truncated string and the original token
|
|
50
|
+
* count when truncation occurred.
|
|
51
|
+
*
|
|
52
|
+
* @since 1.0.0
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
export declare const truncateMiddleWithTokenBudget: (s: string, maxTokens: number) => {
|
|
56
|
+
readonly text: string;
|
|
57
|
+
readonly originalTokenCount: number | undefined;
|
|
58
|
+
};
|
|
59
|
+
/**
|
|
60
|
+
* Codex `format_exec_output_for_model`: exit code, wall time, optional line
|
|
61
|
+
* count disclosure, then the (possibly middle-truncated) output.
|
|
62
|
+
*
|
|
63
|
+
* @since 1.0.0
|
|
64
|
+
* @private
|
|
65
|
+
*/
|
|
66
|
+
export declare const formatExecOutputForModel: (options: {
|
|
67
|
+
readonly output: string;
|
|
68
|
+
readonly exitCode: number;
|
|
69
|
+
readonly durationSeconds: number;
|
|
70
|
+
readonly maxOutputTokens: number;
|
|
71
|
+
readonly timedOutAfterMs?: number | undefined;
|
|
72
|
+
}) => string;
|
|
73
|
+
//# sourceMappingURL=CodexText.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodexText.d.ts","sourceRoot":"","sources":["../../../src/internal/CodexText.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAOH;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAAyC,CAAA;AAEnF;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,MACsC,CAAA;AAEtF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,KAAG,MAAyC,CAAA;AAE/F;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,GAAI,OAAO,MAAM,KAAG,MACiB,CAAA;AAqE3E;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,GAAG,MAAM,EAAE,UAAU,MAAM,KAAG,MAAsD,CAAA;AAExH;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B,GACxC,GAAG,MAAM,EACT,WAAW,MAAM,KAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,GAAG,SAAS,CAAA;CAQ1E,CAAA;AAQD;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,GAAI,SAAS;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9C,KAAG,MAeH,CAAA"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
var CodexText_exports = {};
|
|
20
|
+
__export(CodexText_exports, {
|
|
21
|
+
approxBytesForTokens: () => approxBytesForTokens,
|
|
22
|
+
approxTokenCount: () => approxTokenCount,
|
|
23
|
+
approxTokensFromByteCount: () => approxTokensFromByteCount,
|
|
24
|
+
byteLength: () => byteLength,
|
|
25
|
+
formatExecOutputForModel: () => formatExecOutputForModel,
|
|
26
|
+
truncateMiddleChars: () => truncateMiddleChars,
|
|
27
|
+
truncateMiddleWithTokenBudget: () => truncateMiddleWithTokenBudget
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(CodexText_exports);
|
|
30
|
+
const APPROX_BYTES_PER_TOKEN = 4;
|
|
31
|
+
const encoder = new TextEncoder();
|
|
32
|
+
const decoder = new TextDecoder();
|
|
33
|
+
const byteLength = (text) => encoder.encode(text).byteLength;
|
|
34
|
+
const approxTokenCount = (text) => Math.floor((byteLength(text) + APPROX_BYTES_PER_TOKEN - 1) / APPROX_BYTES_PER_TOKEN);
|
|
35
|
+
const approxBytesForTokens = (tokens) => tokens * APPROX_BYTES_PER_TOKEN;
|
|
36
|
+
const approxTokensFromByteCount = (bytes) => Math.floor((bytes + APPROX_BYTES_PER_TOKEN - 1) / APPROX_BYTES_PER_TOKEN);
|
|
37
|
+
const formatTruncationMarker = (useTokens, removedCount) => useTokens ? `\u2026${removedCount} tokens truncated\u2026` : `\u2026${removedCount} chars truncated\u2026`;
|
|
38
|
+
const isContinuation = (byte) => (byte & 192) === 128;
|
|
39
|
+
const boundaryAtOrBefore = (bytes, offset) => {
|
|
40
|
+
let at = Math.min(offset, bytes.byteLength);
|
|
41
|
+
while (at > 0 && at < bytes.byteLength && isContinuation(bytes[at])) at--;
|
|
42
|
+
return at;
|
|
43
|
+
};
|
|
44
|
+
const boundaryAtOrAfter = (bytes, offset) => {
|
|
45
|
+
let at = Math.max(offset, 0);
|
|
46
|
+
while (at < bytes.byteLength && isContinuation(bytes[at])) at++;
|
|
47
|
+
return at;
|
|
48
|
+
};
|
|
49
|
+
const splitString = (s, beginningBytes, endBytes) => {
|
|
50
|
+
const bytes = encoder.encode(s);
|
|
51
|
+
const tailStartTarget = Math.max(bytes.byteLength - endBytes, 0);
|
|
52
|
+
const prefixEnd = boundaryAtOrBefore(bytes, beginningBytes);
|
|
53
|
+
const suffixStart = boundaryAtOrAfter(bytes, Math.max(tailStartTarget, prefixEnd));
|
|
54
|
+
let removedChars = 0;
|
|
55
|
+
for (let at = prefixEnd; at < suffixStart; at++) if (!isContinuation(bytes[at])) removedChars++;
|
|
56
|
+
return {
|
|
57
|
+
removedChars,
|
|
58
|
+
before: decoder.decode(bytes.subarray(0, prefixEnd)),
|
|
59
|
+
after: decoder.decode(bytes.subarray(suffixStart))
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
const truncateWithByteEstimate = (s, maxBytes, useTokens) => {
|
|
63
|
+
if (s === "") return "";
|
|
64
|
+
const totalBytes = byteLength(s);
|
|
65
|
+
if (maxBytes === 0) {
|
|
66
|
+
return formatTruncationMarker(useTokens, useTokens ? approxTokensFromByteCount(totalBytes) : [...s].length);
|
|
67
|
+
}
|
|
68
|
+
if (totalBytes <= maxBytes) return s;
|
|
69
|
+
const leftBudget = Math.floor(maxBytes / 2);
|
|
70
|
+
const rightBudget = maxBytes - leftBudget;
|
|
71
|
+
const { after, before, removedChars } = splitString(s, leftBudget, rightBudget);
|
|
72
|
+
const marker = formatTruncationMarker(
|
|
73
|
+
useTokens,
|
|
74
|
+
useTokens ? approxTokensFromByteCount(Math.max(totalBytes - maxBytes, 0)) : removedChars
|
|
75
|
+
);
|
|
76
|
+
return `${before}${marker}${after}`;
|
|
77
|
+
};
|
|
78
|
+
const truncateMiddleChars = (s, maxBytes) => truncateWithByteEstimate(s, maxBytes, false);
|
|
79
|
+
const truncateMiddleWithTokenBudget = (s, maxTokens) => {
|
|
80
|
+
if (s === "") return { text: "", originalTokenCount: void 0 };
|
|
81
|
+
if (maxTokens > 0 && byteLength(s) <= approxBytesForTokens(maxTokens)) {
|
|
82
|
+
return { text: s, originalTokenCount: void 0 };
|
|
83
|
+
}
|
|
84
|
+
const truncated = truncateWithByteEstimate(s, approxBytesForTokens(maxTokens), true);
|
|
85
|
+
if (truncated === s) return { text: s, originalTokenCount: void 0 };
|
|
86
|
+
return { text: truncated, originalTokenCount: approxTokenCount(s) };
|
|
87
|
+
};
|
|
88
|
+
const countLines = (content) => {
|
|
89
|
+
if (content === "") return 0;
|
|
90
|
+
const parts = content.split("\n");
|
|
91
|
+
return parts[parts.length - 1] === "" ? parts.length - 1 : parts.length;
|
|
92
|
+
};
|
|
93
|
+
const formatExecOutputForModel = (options) => {
|
|
94
|
+
const content = options.timedOutAfterMs === void 0 ? options.output : `command timed out after ${options.timedOutAfterMs} milliseconds
|
|
95
|
+
${options.output}`;
|
|
96
|
+
const durationSeconds = Math.round(options.durationSeconds * 10) / 10;
|
|
97
|
+
const totalLines = countLines(content);
|
|
98
|
+
const formatted = truncateMiddleWithTokenBudget(content, options.maxOutputTokens).text;
|
|
99
|
+
const sections = [
|
|
100
|
+
`Exit code: ${options.exitCode}`,
|
|
101
|
+
`Wall time: ${durationSeconds} seconds`
|
|
102
|
+
];
|
|
103
|
+
if (totalLines !== countLines(formatted)) sections.push(`Total output lines: ${totalLines}`);
|
|
104
|
+
sections.push("Output:");
|
|
105
|
+
sections.push(formatted);
|
|
106
|
+
return sections.join("\n");
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=CodexText.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/CodexText.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Faithful port of Codex CLI output truncation.\n *\n * Mirrors `codex-rs/utils/string/src/truncate.rs` and\n * `codex-rs/utils/output-truncation/src/lib.rs`: middle truncation on UTF-8\n * boundaries with a `\u2026{n} tokens truncated\u2026` marker and a 4-bytes-per-token\n * estimate, so ChatGPT-family models see the exact shapes they were\n * posttrained on.\n *\n * @since 1.0.0\n */\n\nconst APPROX_BYTES_PER_TOKEN = 4\n\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\n/**\n * UTF-8 byte length of a string.\n *\n * @since 1.0.0\n * @private\n */\nexport const byteLength = (text: string): number => encoder.encode(text).byteLength\n\n/**\n * Approximate token count: ceil(utf8Bytes / 4).\n *\n * @since 1.0.0\n * @private\n */\nexport const approxTokenCount = (text: string): number =>\n Math.floor((byteLength(text) + APPROX_BYTES_PER_TOKEN - 1) / APPROX_BYTES_PER_TOKEN)\n\n/**\n * Approximate byte budget for a token budget.\n *\n * @since 1.0.0\n * @private\n */\nexport const approxBytesForTokens = (tokens: number): number => tokens * APPROX_BYTES_PER_TOKEN\n\n/**\n * Approximate tokens represented by a byte count: ceil(bytes / 4).\n *\n * @since 1.0.0\n * @private\n */\nexport const approxTokensFromByteCount = (bytes: number): number =>\n Math.floor((bytes + APPROX_BYTES_PER_TOKEN - 1) / APPROX_BYTES_PER_TOKEN)\n\nconst formatTruncationMarker = (useTokens: boolean, removedCount: number): string =>\n useTokens ? `\u2026${removedCount} tokens truncated\u2026` : `\u2026${removedCount} chars truncated\u2026`\n\ninterface Split {\n readonly removedChars: number\n readonly before: string\n readonly after: string\n}\n\n/** A UTF-8 continuation byte is `10xxxxxx`; every other byte starts a character. */\nconst isContinuation = (byte: number): boolean => (byte & 0b1100_0000) === 0b1000_0000\n\n/** The last character boundary at or before `offset`. */\nconst boundaryAtOrBefore = (bytes: Uint8Array, offset: number): number => {\n let at = Math.min(offset, bytes.byteLength)\n while (at > 0 && at < bytes.byteLength && isContinuation(bytes[at]!)) at--\n return at\n}\n\n/** The first character boundary at or after `offset`. */\nconst boundaryAtOrAfter = (bytes: Uint8Array, offset: number): number => {\n let at = Math.max(offset, 0)\n while (at < bytes.byteLength && isContinuation(bytes[at]!)) at++\n return at\n}\n\n/**\n * Splits `s` into the head that fits `beginningBytes` and the tail that fits\n * `endBytes`, both cut on UTF-8 character boundaries, and counts the characters\n * dropped between them.\n *\n * The boundaries are read off the encoded bytes rather than by re-encoding one\n * character at a time: a per-character `TextEncoder.encode` costs about two\n * microseconds, which is nineteen seconds for the eight megabytes a bounded\n * capture can hand this function.\n */\nconst splitString = (s: string, beginningBytes: number, endBytes: number): Split => {\n const bytes = encoder.encode(s)\n const tailStartTarget = Math.max(bytes.byteLength - endBytes, 0)\n const prefixEnd = boundaryAtOrBefore(bytes, beginningBytes)\n const suffixStart = boundaryAtOrAfter(bytes, Math.max(tailStartTarget, prefixEnd))\n let removedChars = 0\n for (let at = prefixEnd; at < suffixStart; at++) if (!isContinuation(bytes[at]!)) removedChars++\n return {\n removedChars,\n before: decoder.decode(bytes.subarray(0, prefixEnd)),\n after: decoder.decode(bytes.subarray(suffixStart))\n }\n}\n\nconst truncateWithByteEstimate = (s: string, maxBytes: number, useTokens: boolean): string => {\n if (s === \"\") return \"\"\n const totalBytes = byteLength(s)\n if (maxBytes === 0) {\n return formatTruncationMarker(useTokens, useTokens ? approxTokensFromByteCount(totalBytes) : [...s].length)\n }\n if (totalBytes <= maxBytes) return s\n const leftBudget = Math.floor(maxBytes / 2)\n const rightBudget = maxBytes - leftBudget\n const { after, before, removedChars } = splitString(s, leftBudget, rightBudget)\n const marker = formatTruncationMarker(\n useTokens,\n useTokens ? approxTokensFromByteCount(Math.max(totalBytes - maxBytes, 0)) : removedChars\n )\n return `${before}${marker}${after}`\n}\n\n/**\n * Middle-truncate to a byte budget with a char-count marker.\n *\n * @since 1.0.0\n * @private\n */\nexport const truncateMiddleChars = (s: string, maxBytes: number): string => truncateWithByteEstimate(s, maxBytes, false)\n\n/**\n * Middle-truncate to an approximate token budget, preserving the beginning\n * and end. Returns the possibly truncated string and the original token\n * count when truncation occurred.\n *\n * @since 1.0.0\n * @private\n */\nexport const truncateMiddleWithTokenBudget = (\n s: string,\n maxTokens: number\n): { readonly text: string; readonly originalTokenCount: number | undefined } => {\n if (s === \"\") return { text: \"\", originalTokenCount: undefined }\n if (maxTokens > 0 && byteLength(s) <= approxBytesForTokens(maxTokens)) {\n return { text: s, originalTokenCount: undefined }\n }\n const truncated = truncateWithByteEstimate(s, approxBytesForTokens(maxTokens), true)\n if (truncated === s) return { text: s, originalTokenCount: undefined }\n return { text: truncated, originalTokenCount: approxTokenCount(s) }\n}\n\nconst countLines = (content: string): number => {\n if (content === \"\") return 0\n const parts = content.split(\"\\n\")\n return parts[parts.length - 1] === \"\" ? parts.length - 1 : parts.length\n}\n\n/**\n * Codex `format_exec_output_for_model`: exit code, wall time, optional line\n * count disclosure, then the (possibly middle-truncated) output.\n *\n * @since 1.0.0\n * @private\n */\nexport const formatExecOutputForModel = (options: {\n readonly output: string\n readonly exitCode: number\n readonly durationSeconds: number\n readonly maxOutputTokens: number\n readonly timedOutAfterMs?: number | undefined\n}): string => {\n const content = options.timedOutAfterMs === undefined\n ? options.output\n : `command timed out after ${options.timedOutAfterMs} milliseconds\\n${options.output}`\n const durationSeconds = Math.round(options.durationSeconds * 10) / 10\n const totalLines = countLines(content)\n const formatted = truncateMiddleWithTokenBudget(content, options.maxOutputTokens).text\n const sections = [\n `Exit code: ${options.exitCode}`,\n `Wall time: ${durationSeconds} seconds`\n ]\n if (totalLines !== countLines(formatted)) sections.push(`Total output lines: ${totalLines}`)\n sections.push(\"Output:\")\n sections.push(formatted)\n return sections.join(\"\\n\")\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared declaration helpers for the standard flows.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import type * as Capability from "@smthrs/capability/Capability";
|
|
7
|
+
import * as Effects from "@smthrs/core/Effects";
|
|
8
|
+
/**
|
|
9
|
+
* Options accepted by {@link envelope}.
|
|
10
|
+
*
|
|
11
|
+
* @category models
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
export interface EnvelopeOptions {
|
|
15
|
+
readonly tier: "sealed" | "compensable" | "irreversible";
|
|
16
|
+
readonly mode: "hermetic" | "expected";
|
|
17
|
+
readonly reads: Iterable<string>;
|
|
18
|
+
readonly writes: Iterable<string>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Builds a deterministic effect declaration for a standard flow.
|
|
22
|
+
*
|
|
23
|
+
* Every standard flow serializes on conflict: the library owns no lane
|
|
24
|
+
* partitioning of its own, so the conservative choice is the safe one.
|
|
25
|
+
*
|
|
26
|
+
* @category constructors
|
|
27
|
+
* @since 1.0.0
|
|
28
|
+
*/
|
|
29
|
+
export declare const envelope: (options: EnvelopeOptions) => Effects.Declaration;
|
|
30
|
+
/**
|
|
31
|
+
* Formats a capability request as the `action:resource` string carried on a
|
|
32
|
+
* flow declaration.
|
|
33
|
+
*
|
|
34
|
+
* @category constructors
|
|
35
|
+
* @since 1.0.0
|
|
36
|
+
*/
|
|
37
|
+
export declare const capability: (action: Capability.Action, resource: string) => string;
|
|
38
|
+
/**
|
|
39
|
+
* The read glob covering everything under one search root.
|
|
40
|
+
*
|
|
41
|
+
* `glob` and `grep` narrow their conservative `/**` declaration to the root the
|
|
42
|
+
* call actually names, and a declaration that disagreed between the two would
|
|
43
|
+
* make the same search reserve different paths depending on which flow ran it.
|
|
44
|
+
*
|
|
45
|
+
* @category constructors
|
|
46
|
+
* @since 1.0.0
|
|
47
|
+
*/
|
|
48
|
+
export declare const rootSubtree: (root: string) => string;
|
|
49
|
+
//# sourceMappingURL=Declaration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Declaration.d.ts","sourceRoot":"","sources":["../../../src/internal/Declaration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,KAAK,UAAU,MAAM,+BAA+B,CAAA;AAChE,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,aAAa,GAAG,cAAc,CAAA;IACxD,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAA;IACtC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;CAClC;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,GAAI,SAAS,eAAe,KAAG,OAAO,CAAC,WAOxD,CAAA;AAEJ;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,UAAU,CAAC,MAAM,EAAE,UAAU,MAAM,KAAG,MAAiC,CAAA;AAE1G;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAAiE,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
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 Declaration_exports = {};
|
|
30
|
+
__export(Declaration_exports, {
|
|
31
|
+
capability: () => capability,
|
|
32
|
+
envelope: () => envelope,
|
|
33
|
+
rootSubtree: () => rootSubtree
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(Declaration_exports);
|
|
36
|
+
var Effects = __toESM(require("@smthrs/core/Effects"), 1);
|
|
37
|
+
const envelope = (options) => Effects.make({
|
|
38
|
+
reads: options.reads,
|
|
39
|
+
writes: options.writes,
|
|
40
|
+
mode: options.mode,
|
|
41
|
+
onConflict: "serialize",
|
|
42
|
+
tier: options.tier
|
|
43
|
+
});
|
|
44
|
+
const capability = (action, resource) => `${action}:${resource}`;
|
|
45
|
+
const rootSubtree = (root) => root === "/" ? "/**" : `${root.replace(/\/+$/, "")}/**`;
|
|
46
|
+
//# sourceMappingURL=Declaration.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/Declaration.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Shared declaration helpers for the standard flows.\n *\n * @since 1.0.0\n */\n\nimport type * as Capability from \"@smthrs/capability/Capability\"\nimport * as Effects from \"@smthrs/core/Effects\"\n\n/**\n * Options accepted by {@link envelope}.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface EnvelopeOptions {\n readonly tier: \"sealed\" | \"compensable\" | \"irreversible\"\n readonly mode: \"hermetic\" | \"expected\"\n readonly reads: Iterable<string>\n readonly writes: Iterable<string>\n}\n\n/**\n * Builds a deterministic effect declaration for a standard flow.\n *\n * Every standard flow serializes on conflict: the library owns no lane\n * partitioning of its own, so the conservative choice is the safe one.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const envelope = (options: EnvelopeOptions): Effects.Declaration =>\n Effects.make({\n reads: options.reads,\n writes: options.writes,\n mode: options.mode,\n onConflict: \"serialize\",\n tier: options.tier\n })\n\n/**\n * Formats a capability request as the `action:resource` string carried on a\n * flow declaration.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const capability = (action: Capability.Action, resource: string): string => `${action}:${resource}`\n\n/**\n * The read glob covering everything under one search root.\n *\n * `glob` and `grep` narrow their conservative `/**` declaration to the root the\n * call actually names, and a declaration that disagreed between the two would\n * make the same search reserve different paths depending on which flow ran it.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const rootSubtree = (root: string): string => root === \"/\" ? \"/**\" : `${root.replace(/\\/+$/, \"\")}/**`\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,cAAyB;AAwBlB,MAAM,WAAW,CAAC,YACvB,QAAQ,KAAK;AAAA,EACX,OAAO,QAAQ;AAAA,EACf,QAAQ,QAAQ;AAAA,EAChB,MAAM,QAAQ;AAAA,EACd,YAAY;AAAA,EACZ,MAAM,QAAQ;AAChB,CAAC;AASI,MAAM,aAAa,CAAC,QAA2B,aAA6B,GAAG,MAAM,IAAI,QAAQ;AAYjG,MAAM,cAAc,CAAC,SAAyB,SAAS,MAAM,QAAQ,GAAG,KAAK,QAAQ,QAAQ,EAAE,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keeps a bound language server in step with the files the mutation flows
|
|
3
|
+
* write, and reads back the errors an edit leaves.
|
|
4
|
+
*
|
|
5
|
+
* The server is optional: a host that binds no `LanguageServer` edits files
|
|
6
|
+
* exactly as before, and a server that fails or times out never fails the
|
|
7
|
+
* write that already happened.
|
|
8
|
+
*
|
|
9
|
+
* @since 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
import * as Effect from "effect/Effect";
|
|
12
|
+
import * as Schema from "effect/Schema";
|
|
13
|
+
import * as LanguageServer from "../LanguageServer.ts";
|
|
14
|
+
/**
|
|
15
|
+
* Most errors attached to one result.
|
|
16
|
+
*
|
|
17
|
+
* @category internal
|
|
18
|
+
* @since 1.0.0
|
|
19
|
+
*/
|
|
20
|
+
export declare const MAX_ERRORS = 20;
|
|
21
|
+
/**
|
|
22
|
+
* One error-severity diagnostic, at its 1-based position.
|
|
23
|
+
*
|
|
24
|
+
* @category internal
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
*/
|
|
27
|
+
export declare const Problem: Schema.Struct<{
|
|
28
|
+
readonly line: Schema.Number;
|
|
29
|
+
readonly character: Schema.Number;
|
|
30
|
+
readonly message: Schema.String;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* A decoded {@link Problem}.
|
|
34
|
+
*
|
|
35
|
+
* @category internal
|
|
36
|
+
* @since 1.0.0
|
|
37
|
+
*/
|
|
38
|
+
export type Problem = typeof Problem.Type;
|
|
39
|
+
/**
|
|
40
|
+
* The error-severity items of a document diagnostic report, 1-based.
|
|
41
|
+
*
|
|
42
|
+
* @category internal
|
|
43
|
+
* @since 1.0.0
|
|
44
|
+
*/
|
|
45
|
+
export declare const errors: (report: unknown) => ReadonlyArray<Problem>;
|
|
46
|
+
/**
|
|
47
|
+
* Sends a written file's new text to the bound server, if any. Succeeds with
|
|
48
|
+
* the server that took it.
|
|
49
|
+
*
|
|
50
|
+
* @category internal
|
|
51
|
+
* @since 1.0.0
|
|
52
|
+
*/
|
|
53
|
+
export declare const sync: (path: string, text: string) => Effect.Effect<LanguageServer.LanguageServer | undefined>;
|
|
54
|
+
/**
|
|
55
|
+
* Tells the bound server, if any, that a file is gone.
|
|
56
|
+
*
|
|
57
|
+
* @category internal
|
|
58
|
+
* @since 1.0.0
|
|
59
|
+
*/
|
|
60
|
+
export declare const close: (path: string) => Effect.Effect<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Tells the bound server, if any, to re-read every file it has open, after
|
|
63
|
+
* something other than the mutation flows may have changed them.
|
|
64
|
+
*
|
|
65
|
+
* @category internal
|
|
66
|
+
* @since 1.0.0
|
|
67
|
+
*/
|
|
68
|
+
export declare const refresh: Effect.Effect<void>;
|
|
69
|
+
/**
|
|
70
|
+
* The errors `server` reports for `path`, or `undefined` when it could not
|
|
71
|
+
* answer.
|
|
72
|
+
*
|
|
73
|
+
* @category internal
|
|
74
|
+
* @since 1.0.0
|
|
75
|
+
*/
|
|
76
|
+
export declare const errorsOf: (server: LanguageServer.LanguageServer, path: string) => Effect.Effect<ReadonlyArray<Problem> | undefined>;
|
|
77
|
+
//# sourceMappingURL=Diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Diagnostics.d.ts","sourceRoot":"","sources":["../../../src/internal/Diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAA;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,KAAK,CAAA;AAE5B;;;;;GAKG;AACH,eAAO,MAAM,OAAO;;;;EAIlB,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAOzC;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,QAAQ,OAAO,KAAG,aAAa,CAAC,OAAO,CAe7D,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,GAAG,SAAS,CAUtG,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAMpD,CAAA;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAKvC,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GACnB,QAAQ,cAAc,CAAC,cAAc,EACrC,MAAM,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,CAIhD,CAAA"}
|
|
@@ -0,0 +1,89 @@
|
|
|
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 Diagnostics_exports = {};
|
|
30
|
+
__export(Diagnostics_exports, {
|
|
31
|
+
MAX_ERRORS: () => MAX_ERRORS,
|
|
32
|
+
Problem: () => Problem,
|
|
33
|
+
close: () => close,
|
|
34
|
+
errors: () => errors,
|
|
35
|
+
errorsOf: () => errorsOf,
|
|
36
|
+
refresh: () => refresh,
|
|
37
|
+
sync: () => sync
|
|
38
|
+
});
|
|
39
|
+
module.exports = __toCommonJS(Diagnostics_exports);
|
|
40
|
+
var Effect = __toESM(require("effect/Effect"), 1);
|
|
41
|
+
var Option = __toESM(require("effect/Option"), 1);
|
|
42
|
+
var Schema = __toESM(require("effect/Schema"), 1);
|
|
43
|
+
var LanguageServer = __toESM(require("../LanguageServer.js"), 1);
|
|
44
|
+
const MAX_ERRORS = 20;
|
|
45
|
+
const Problem = Schema.Struct({
|
|
46
|
+
line: Schema.Number.annotate({ description: "1-based line" }),
|
|
47
|
+
character: Schema.Number.annotate({ description: "1-based character" }),
|
|
48
|
+
message: Schema.String
|
|
49
|
+
});
|
|
50
|
+
const record = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
|
|
51
|
+
const errors = (report) => {
|
|
52
|
+
const items = record(report)?.items;
|
|
53
|
+
if (!Array.isArray(items)) return [];
|
|
54
|
+
const found = [];
|
|
55
|
+
for (const item of items) {
|
|
56
|
+
const diagnostic = record(item);
|
|
57
|
+
const start = record(record(diagnostic?.range)?.start);
|
|
58
|
+
if (diagnostic?.severity !== 1 || typeof diagnostic.message !== "string" || typeof start?.line !== "number" || typeof start.character !== "number") continue;
|
|
59
|
+
found.push({ line: start.line + 1, character: start.character + 1, message: diagnostic.message });
|
|
60
|
+
if (found.length === MAX_ERRORS) break;
|
|
61
|
+
}
|
|
62
|
+
return found;
|
|
63
|
+
};
|
|
64
|
+
const sync = (path, text) => Effect.serviceOption(LanguageServer.LanguageServer).pipe(
|
|
65
|
+
Effect.flatMap(Option.match({
|
|
66
|
+
onNone: () => Effect.succeed(void 0),
|
|
67
|
+
onSome: (server) => server.sync(path, text).pipe(
|
|
68
|
+
Effect.as(server),
|
|
69
|
+
Effect.orElseSucceed(() => void 0)
|
|
70
|
+
)
|
|
71
|
+
}))
|
|
72
|
+
);
|
|
73
|
+
const close = (path) => Effect.serviceOption(LanguageServer.LanguageServer).pipe(
|
|
74
|
+
Effect.flatMap(Option.match({
|
|
75
|
+
onNone: () => Effect.void,
|
|
76
|
+
onSome: (server) => server.close(path).pipe(Effect.ignore)
|
|
77
|
+
}))
|
|
78
|
+
);
|
|
79
|
+
const refresh = Effect.serviceOption(LanguageServer.LanguageServer).pipe(
|
|
80
|
+
Effect.flatMap(Option.match({
|
|
81
|
+
onNone: () => Effect.void,
|
|
82
|
+
onSome: (server) => server.refresh.pipe(Effect.ignore)
|
|
83
|
+
}))
|
|
84
|
+
);
|
|
85
|
+
const errorsOf = (server, path) => server.diagnostics(path).pipe(
|
|
86
|
+
Effect.map(errors),
|
|
87
|
+
Effect.orElseSucceed(() => void 0)
|
|
88
|
+
);
|
|
89
|
+
//# sourceMappingURL=Diagnostics.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/Diagnostics.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Keeps a bound language server in step with the files the mutation flows\n * write, and reads back the errors an edit leaves.\n *\n * The server is optional: a host that binds no `LanguageServer` edits files\n * exactly as before, and a server that fails or times out never fails the\n * write that already happened.\n *\n * @since 1.0.0\n */\n\nimport * as Effect from \"effect/Effect\"\nimport * as Option from \"effect/Option\"\nimport * as Schema from \"effect/Schema\"\nimport * as LanguageServer from \"../LanguageServer.ts\"\n\n/**\n * Most errors attached to one result.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const MAX_ERRORS = 20\n\n/**\n * One error-severity diagnostic, at its 1-based position.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const Problem = Schema.Struct({\n line: Schema.Number.annotate({ description: \"1-based line\" }),\n character: Schema.Number.annotate({ description: \"1-based character\" }),\n message: Schema.String\n})\n\n/**\n * A decoded {@link Problem}.\n *\n * @category internal\n * @since 1.0.0\n */\nexport type Problem = typeof Problem.Type\n\nconst record = (value: unknown): Readonly<Record<string, unknown>> | undefined =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value as Readonly<Record<string, unknown>>\n : undefined\n\n/**\n * The error-severity items of a document diagnostic report, 1-based.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const errors = (report: unknown): ReadonlyArray<Problem> => {\n const items = record(report)?.items\n if (!Array.isArray(items)) return []\n const found: Array<Problem> = []\n for (const item of items) {\n const diagnostic = record(item)\n const start = record(record(diagnostic?.range)?.start)\n if (\n diagnostic?.severity !== 1 || typeof diagnostic.message !== \"string\" ||\n typeof start?.line !== \"number\" || typeof start.character !== \"number\"\n ) continue\n found.push({ line: start.line + 1, character: start.character + 1, message: diagnostic.message })\n if (found.length === MAX_ERRORS) break\n }\n return found\n}\n\n/**\n * Sends a written file's new text to the bound server, if any. Succeeds with\n * the server that took it.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const sync = (path: string, text: string): Effect.Effect<LanguageServer.LanguageServer | undefined> =>\n Effect.serviceOption(LanguageServer.LanguageServer).pipe(\n Effect.flatMap(Option.match({\n onNone: () => Effect.succeed(undefined),\n onSome: (server) =>\n server.sync(path, text).pipe(\n Effect.as(server),\n Effect.orElseSucceed(() => undefined)\n )\n }))\n )\n\n/**\n * Tells the bound server, if any, that a file is gone.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const close = (path: string): Effect.Effect<void> =>\n Effect.serviceOption(LanguageServer.LanguageServer).pipe(\n Effect.flatMap(Option.match({\n onNone: () => Effect.void,\n onSome: (server) => server.close(path).pipe(Effect.ignore)\n }))\n )\n\n/**\n * Tells the bound server, if any, to re-read every file it has open, after\n * something other than the mutation flows may have changed them.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const refresh: Effect.Effect<void> = Effect.serviceOption(LanguageServer.LanguageServer).pipe(\n Effect.flatMap(Option.match({\n onNone: () => Effect.void,\n onSome: (server) => server.refresh.pipe(Effect.ignore)\n }))\n)\n\n/**\n * The errors `server` reports for `path`, or `undefined` when it could not\n * answer.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const errorsOf = (\n server: LanguageServer.LanguageServer,\n path: string\n): Effect.Effect<ReadonlyArray<Problem> | undefined> =>\n server.diagnostics(path).pipe(\n Effect.map(errors),\n Effect.orElseSucceed(() => undefined)\n )\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,aAAwB;AACxB,aAAwB;AACxB,aAAwB;AACxB,qBAAgC;AAQzB,MAAM,aAAa;AAQnB,MAAM,UAAU,OAAO,OAAO;AAAA,EACnC,MAAM,OAAO,OAAO,SAAS,EAAE,aAAa,eAAe,CAAC;AAAA,EAC5D,WAAW,OAAO,OAAO,SAAS,EAAE,aAAa,oBAAoB,CAAC;AAAA,EACtE,SAAS,OAAO;AAClB,CAAC;AAUD,MAAM,SAAS,CAAC,UACd,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,IAC/D,QACA;AAQC,MAAM,SAAS,CAAC,WAA4C;AACjE,QAAM,QAAQ,OAAO,MAAM,GAAG;AAC9B,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC;AACnC,QAAM,QAAwB,CAAC;AAC/B,aAAW,QAAQ,OAAO;AACxB,UAAM,aAAa,OAAO,IAAI;AAC9B,UAAM,QAAQ,OAAO,OAAO,YAAY,KAAK,GAAG,KAAK;AACrD,QACE,YAAY,aAAa,KAAK,OAAO,WAAW,YAAY,YAC5D,OAAO,OAAO,SAAS,YAAY,OAAO,MAAM,cAAc,SAC9D;AACF,UAAM,KAAK,EAAE,MAAM,MAAM,OAAO,GAAG,WAAW,MAAM,YAAY,GAAG,SAAS,WAAW,QAAQ,CAAC;AAChG,QAAI,MAAM,WAAW,WAAY;AAAA,EACnC;AACA,SAAO;AACT;AASO,MAAM,OAAO,CAAC,MAAc,SACjC,OAAO,cAAc,eAAe,cAAc,EAAE;AAAA,EAClD,OAAO,QAAQ,OAAO,MAAM;AAAA,IAC1B,QAAQ,MAAM,OAAO,QAAQ,MAAS;AAAA,IACtC,QAAQ,CAAC,WACP,OAAO,KAAK,MAAM,IAAI,EAAE;AAAA,MACtB,OAAO,GAAG,MAAM;AAAA,MAChB,OAAO,cAAc,MAAM,MAAS;AAAA,IACtC;AAAA,EACJ,CAAC,CAAC;AACJ;AAQK,MAAM,QAAQ,CAAC,SACpB,OAAO,cAAc,eAAe,cAAc,EAAE;AAAA,EAClD,OAAO,QAAQ,OAAO,MAAM;AAAA,IAC1B,QAAQ,MAAM,OAAO;AAAA,IACrB,QAAQ,CAAC,WAAW,OAAO,MAAM,IAAI,EAAE,KAAK,OAAO,MAAM;AAAA,EAC3D,CAAC,CAAC;AACJ;AASK,MAAM,UAA+B,OAAO,cAAc,eAAe,cAAc,EAAE;AAAA,EAC9F,OAAO,QAAQ,OAAO,MAAM;AAAA,IAC1B,QAAQ,MAAM,OAAO;AAAA,IACrB,QAAQ,CAAC,WAAW,OAAO,QAAQ,KAAK,OAAO,MAAM;AAAA,EACvD,CAAC,CAAC;AACJ;AASO,MAAM,WAAW,CACtB,QACA,SAEA,OAAO,YAAY,IAAI,EAAE;AAAA,EACvB,OAAO,IAAI,MAAM;AAAA,EACjB,OAAO,cAAc,MAAM,MAAS;AACtC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|