@smthrs/std 0.0.0-stage → 1.0.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +304 -0
- package/dist/cjs/Bash.d.ts.map +1 -0
- package/dist/cjs/Bash.js +321 -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 +98 -0
- package/dist/cjs/internal/GitWorktree.d.ts.map +1 -0
- package/dist/cjs/internal/GitWorktree.js +270 -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 +304 -0
- package/dist/esm/Bash.d.ts.map +1 -0
- package/dist/esm/Bash.js +469 -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 +98 -0
- package/dist/esm/internal/GitWorktree.d.ts.map +1 -0
- package/dist/esm/internal/GitWorktree.js +345 -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 +549 -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 +473 -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,87 @@
|
|
|
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 key2 of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key2) && key2 !== except)
|
|
16
|
+
__defProp(to, key2, { get: () => from[key2], enumerable: !(desc = __getOwnPropDesc(from, key2)) || 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 TreeFingerprint_exports = {};
|
|
30
|
+
__export(TreeFingerprint_exports, {
|
|
31
|
+
defaultIgnoreSuffixes: () => defaultIgnoreSuffixes,
|
|
32
|
+
defaultPrune: () => defaultPrune,
|
|
33
|
+
key: () => key,
|
|
34
|
+
maxPaths: () => maxPaths,
|
|
35
|
+
moved: () => moved,
|
|
36
|
+
parse: () => parse,
|
|
37
|
+
script: () => script
|
|
38
|
+
});
|
|
39
|
+
module.exports = __toCommonJS(TreeFingerprint_exports);
|
|
40
|
+
var Prune = __toESM(require("./internal/Prune.js"), 1);
|
|
41
|
+
const key = "mutated";
|
|
42
|
+
const defaultPrune = [
|
|
43
|
+
...Prune.repositoryDirectories,
|
|
44
|
+
// Build and environment directories a search still reads, since a project
|
|
45
|
+
// may keep sources under these names, but a measurement leaves out.
|
|
46
|
+
"venv",
|
|
47
|
+
"target"
|
|
48
|
+
];
|
|
49
|
+
const defaultIgnoreSuffixes = [
|
|
50
|
+
".pyc",
|
|
51
|
+
".pyo",
|
|
52
|
+
".pyd",
|
|
53
|
+
".so",
|
|
54
|
+
".o",
|
|
55
|
+
".a",
|
|
56
|
+
".dylib",
|
|
57
|
+
".class",
|
|
58
|
+
".egg-info"
|
|
59
|
+
];
|
|
60
|
+
const maxPaths = 5e4;
|
|
61
|
+
const quoted = (name) => `'${name.replaceAll("'", `'\\''`)}'`;
|
|
62
|
+
const script = (options = {}) => {
|
|
63
|
+
const prune = (options.prune ?? defaultPrune).map((name) => `-name ${quoted(name)}`).join(" -o ");
|
|
64
|
+
const skipped = (options.ignoreSuffixes ?? defaultIgnoreSuffixes).map((suffix) => `! -name ${quoted(`*${suffix}`)}`).join(" ");
|
|
65
|
+
return [
|
|
66
|
+
"set -f",
|
|
67
|
+
`L=$(find . -xdev \\( ${prune} \\) -prune -o -type f ${skipped} -exec stat -c '%s %Y %n' {} + 2>/dev/null | LC_ALL=C sort | head -n ${maxPaths + 1})`,
|
|
68
|
+
`printf '%s' "$L" | cksum`,
|
|
69
|
+
`printf '%s' "$L" | grep -c ''`
|
|
70
|
+
].join("\n");
|
|
71
|
+
};
|
|
72
|
+
const parse = (stdout) => {
|
|
73
|
+
const lines = stdout.trim().split("\n").map((line) => line.trim());
|
|
74
|
+
if (lines.length !== 2) return void 0;
|
|
75
|
+
const checksum = /^(\d+) (\d+)$/.exec(lines[0]);
|
|
76
|
+
const count = /^(\d+)$/.exec(lines[1]);
|
|
77
|
+
if (checksum === null || count === null) return void 0;
|
|
78
|
+
const paths = Number(count[1]);
|
|
79
|
+
const bounded = paths > maxPaths;
|
|
80
|
+
return {
|
|
81
|
+
digest: `${checksum[1]}:${checksum[2]}`,
|
|
82
|
+
paths: bounded ? maxPaths : paths,
|
|
83
|
+
complete: !bounded
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
const moved = (before, after) => before === void 0 || after === void 0 || !before.complete || !after.complete ? void 0 : before.digest !== after.digest;
|
|
87
|
+
//# sourceMappingURL=TreeFingerprint.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/TreeFingerprint.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * The identity of one directory tree, measured where the tree is.\n *\n * `@smthrs/agent/WorkspaceObservation` measures the host workspace around\n * every frame so the loop's mutation accounting is a fact rather than a\n * claim. A command routed into a container writes to a filesystem that walk\n * never sees: the SWE-bench rig bind-mounts the checkout into its container,\n * so a container edit lands on the host too, but a container Harbor or Pier\n * starts has no such mount, and every edit an agent made there read as an\n * idle frame. Measured 2026-09-22 on Terminal-Bench 4.0: `read_only_cap`\n * ended one run after twenty-four frames of container writes, and the claim\n * judge refused another's completion as \"work this run never recorded\".\n *\n * This module is the same measurement taken inside the container: one POSIX\n * shell script that lists every kept file under a directory with its size and\n * modification time, in sorted order, and prints one checksum of the listing.\n * `bash` runs it through the container transport before and after a\n * containerised command and reports whether the two answers differ under the\n * reserved {@link key}. The harness reads that key as a measured write, the\n * way it reads `invalidProbe` as a measured refusal.\n *\n * The same properties as the host walk, and the same stated limits:\n *\n * - **Identity, not content.** Size and mtime per file; a rewrite that\n * restores both is invisible.\n * - **Pruning is the signal.** {@link defaultPrune} and\n * {@link defaultIgnoreSuffixes} are the one list both measurements use, so\n * a derived artifact the host walk skips is skipped here too.\n * - **A partial listing says so.** The listing stops at {@link maxPaths}, and\n * a measurement that stopped there reports `complete: false`; `bash` then\n * reports nothing rather than a guess.\n * - **Every tool it needs is POSIX or busybox.** `find -prune`, `stat -c`,\n * `sort`, `head`, `cksum` and `grep -c` are in every Linux base image this\n * has been run against, GNU and busybox alike. A container that lacks one\n * answers with a non-zero exit, which is read as \"unmeasured\".\n *\n * @since 1.0.0\n */\n\nimport * as Prune from \"./internal/Prune.ts\"\n\n/**\n * The reserved output key a flow reports a measured write under.\n *\n * A wire contract with the harness rather than a shared type, exactly as\n * `Probe.key` is: `@smthrs/harness` reads this key off a `Schema.Json` result\n * and must not depend on the tool library to do it. `true` means the tree the\n * call targeted differed after the call from before it; `false` means it was\n * measured and held still; absent means it was not measured.\n *\n * @category identifiers\n * @since 1.0.0\n */\nexport const key = \"mutated\"\n\n/**\n * Directory names never descended into.\n *\n * Every entry is a place a tool writes derived state while the run is working:\n * version-control internals, dependency trees, and the caches Python, Node,\n * Rust and their test runners keep beside the sources. A run that changes only\n * these has changed nothing it will be judged on.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const defaultPrune: ReadonlyArray<string> = [\n ...Prune.repositoryDirectories,\n // Build and environment directories a search still reads, since a project\n // may keep sources under these names, but a measurement leaves out.\n \"venv\",\n \"target\"\n]\n\n/**\n * File and directory name suffixes left out of a measurement.\n *\n * Compiled output is the case that matters: several SWE-bench projects build\n * extensions in place, which drops `.so` files next to the `.py` files they\n * came from. Those move whenever the run executes its test suite, and\n * counting them would report every probe as an edit.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const defaultIgnoreSuffixes: ReadonlyArray<string> = [\n \".pyc\",\n \".pyo\",\n \".pyd\",\n \".so\",\n \".o\",\n \".a\",\n \".dylib\",\n \".class\",\n \".egg-info\"\n]\n\n/**\n * The largest number of files one measurement covers.\n *\n * The same bound the host walk uses, for the same reason: a listing that\n * stopped here covers a prefix chosen by sort order, and a prefix holding\n * still says nothing about the files being edited outside it.\n *\n * @category constants\n * @since 1.0.0\n */\nexport const maxPaths = 50_000\n\n/**\n * One measurement, as {@link parse} reads it off the script's output.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface Measurement {\n /** The checksum of the whole listing; equal for two measurements of an unchanged tree. */\n readonly digest: string\n /** How many files the listing covered. */\n readonly paths: number\n /** Whether the listing covered the whole tree rather than a bounded prefix. */\n readonly complete: boolean\n}\n\n/** One name, single-quoted for a POSIX shell. Every name here is a constant without quotes in it. */\nconst quoted = (name: string): string => `'${name.replaceAll(\"'\", `'\\\\''`)}'`\n\n/**\n * The POSIX shell script that measures the current directory.\n *\n * Prints two lines: `cksum`'s `<crc> <bytes>` over the sorted listing, then\n * the number of listing lines. The listing is capped one past\n * {@link maxPaths} so the count alone says whether the bound was reached.\n * Errors from `find` and `stat` are discarded: a path that vanished mid-walk\n * is movement the next measurement reports, and a file the shell may not\n * stat is one it could not have measured either way.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const script = (options: {\n readonly prune?: ReadonlyArray<string> | undefined\n readonly ignoreSuffixes?: ReadonlyArray<string> | undefined\n} = {}): string => {\n const prune = (options.prune ?? defaultPrune).map((name) => `-name ${quoted(name)}`).join(\" -o \")\n const skipped = (options.ignoreSuffixes ?? defaultIgnoreSuffixes)\n .map((suffix) => `! -name ${quoted(`*${suffix}`)}`)\n .join(\" \")\n return [\n \"set -f\",\n `L=$(find . -xdev \\\\( ${prune} \\\\) -prune -o -type f ${skipped} -exec stat -c '%s %Y %n' {} + 2>/dev/null | LC_ALL=C sort | head -n ${\n maxPaths + 1\n })`,\n `printf '%s' \"$L\" | cksum`,\n `printf '%s' \"$L\" | grep -c ''`\n ].join(\"\\n\")\n}\n\n/**\n * Reads one measurement off the script's standard output.\n *\n * `undefined` for anything that is not two well-formed lines: the script did\n * not run, a tool it needs is missing, or the output was cut. An unmeasured\n * tree is reported as unmeasured, never as unchanged.\n *\n * @category conversions\n * @since 1.0.0\n */\nexport const parse = (stdout: string): Measurement | undefined => {\n const lines = stdout.trim().split(\"\\n\").map((line) => line.trim())\n if (lines.length !== 2) return undefined\n const checksum = /^(\\d+) (\\d+)$/.exec(lines[0]!)\n const count = /^(\\d+)$/.exec(lines[1]!)\n if (checksum === null || count === null) return undefined\n const paths = Number(count[1])\n const bounded = paths > maxPaths\n return {\n digest: `${checksum[1]}:${checksum[2]}`,\n paths: bounded ? maxPaths : paths,\n complete: !bounded\n }\n}\n\n/**\n * Whether two measurements say the tree moved, or nothing at all.\n *\n * `true` and `false` are answers; `undefined` is the honest reading whenever\n * either measurement is absent or bounded, because a prefix that held still\n * is not a tree that held still.\n *\n * @category conversions\n * @since 1.0.0\n */\nexport const moved = (\n before: Measurement | undefined,\n after: Measurement | undefined\n): boolean | undefined =>\n before === undefined || after === undefined || !before.complete || !after.complete\n ? undefined\n : before.digest !== after.digest\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAuCA,YAAuB;AAchB,MAAM,MAAM;AAaZ,MAAM,eAAsC;AAAA,EACjD,GAAG,MAAM;AAAA;AAAA;AAAA,EAGT;AAAA,EACA;AACF;AAaO,MAAM,wBAA+C;AAAA,EAC1D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAYO,MAAM,WAAW;AAkBxB,MAAM,SAAS,CAAC,SAAyB,IAAI,KAAK,WAAW,KAAK,OAAO,CAAC;AAenE,MAAM,SAAS,CAAC,UAGnB,CAAC,MAAc;AACjB,QAAM,SAAS,QAAQ,SAAS,cAAc,IAAI,CAAC,SAAS,SAAS,OAAO,IAAI,CAAC,EAAE,EAAE,KAAK,MAAM;AAChG,QAAM,WAAW,QAAQ,kBAAkB,uBACxC,IAAI,CAAC,WAAW,WAAW,OAAO,IAAI,MAAM,EAAE,CAAC,EAAE,EACjD,KAAK,GAAG;AACX,SAAO;AAAA,IACL;AAAA,IACA,wBAAwB,KAAK,0BAA0B,OAAO,wEAC5D,WAAW,CACb;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,KAAK,IAAI;AACb;AAYO,MAAM,QAAQ,CAAC,WAA4C;AAChE,QAAM,QAAQ,OAAO,KAAK,EAAE,MAAM,IAAI,EAAE,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC;AACjE,MAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,QAAM,WAAW,gBAAgB,KAAK,MAAM,CAAC,CAAE;AAC/C,QAAM,QAAQ,UAAU,KAAK,MAAM,CAAC,CAAE;AACtC,MAAI,aAAa,QAAQ,UAAU,KAAM,QAAO;AAChD,QAAM,QAAQ,OAAO,MAAM,CAAC,CAAC;AAC7B,QAAM,UAAU,QAAQ;AACxB,SAAO;AAAA,IACL,QAAQ,GAAG,SAAS,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;AAAA,IACrC,OAAO,UAAU,WAAW;AAAA,IAC5B,UAAU,CAAC;AAAA,EACb;AACF;AAYO,MAAM,QAAQ,CACnB,QACA,UAEA,WAAW,UAAa,UAAU,UAAa,CAAC,OAAO,YAAY,CAAC,MAAM,WACtE,SACA,OAAO,WAAW,MAAM;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* update_plan flow declaration and portable handler.
|
|
3
|
+
*
|
|
4
|
+
* A Codex CLI clone of the `update_plan` tool: an optional explanation and a
|
|
5
|
+
* list of plan items, acknowledged with "Plan updated". Pure — no host
|
|
6
|
+
* access; the harness observes plan updates through the journal.
|
|
7
|
+
*
|
|
8
|
+
* @since 1.0.0
|
|
9
|
+
*/
|
|
10
|
+
import * as Effect from "effect/Effect";
|
|
11
|
+
import * as Schema from "effect/Schema";
|
|
12
|
+
import * as StdError from "./StdError.ts";
|
|
13
|
+
/**
|
|
14
|
+
* Registry name for the update_plan flow. Matches the Codex CLI tool name.
|
|
15
|
+
*
|
|
16
|
+
* @category identifiers
|
|
17
|
+
* @since 1.0.0
|
|
18
|
+
*/
|
|
19
|
+
export declare const name = "update_plan";
|
|
20
|
+
/**
|
|
21
|
+
* Model-facing description of the update_plan flow. Matches the Codex CLI
|
|
22
|
+
* description.
|
|
23
|
+
*
|
|
24
|
+
* @category descriptions
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
*/
|
|
27
|
+
export declare const description: string;
|
|
28
|
+
/**
|
|
29
|
+
* Status of one plan step, matching Codex.
|
|
30
|
+
*
|
|
31
|
+
* @category schemas
|
|
32
|
+
* @since 1.0.0
|
|
33
|
+
*/
|
|
34
|
+
export declare const StepStatus: Schema.Literals<readonly ["pending", "in_progress", "completed"]>;
|
|
35
|
+
/**
|
|
36
|
+
* The plan itself: steps, at most one of them `in_progress`.
|
|
37
|
+
*
|
|
38
|
+
* The single-in-progress rule is the last line of the Codex description a
|
|
39
|
+
* model reads every frame, so it is enforced here rather than left as prose a
|
|
40
|
+
* decode ignores. A plan naming two running steps is a decode failure at the
|
|
41
|
+
* `plan` path, not a silent acknowledgement.
|
|
42
|
+
*
|
|
43
|
+
* @category schemas
|
|
44
|
+
* @since 1.0.0
|
|
45
|
+
*/
|
|
46
|
+
export declare const Plan: Schema.$Array<Schema.Struct<{
|
|
47
|
+
readonly step: Schema.String;
|
|
48
|
+
readonly status: Schema.Literals<readonly ["pending", "in_progress", "completed"]>;
|
|
49
|
+
}>>;
|
|
50
|
+
/**
|
|
51
|
+
* Input schema for the update_plan flow.
|
|
52
|
+
*
|
|
53
|
+
* @category schemas
|
|
54
|
+
* @since 1.0.0
|
|
55
|
+
*/
|
|
56
|
+
export declare const Input: Schema.Struct<{
|
|
57
|
+
readonly explanation: Schema.optional<Schema.String>;
|
|
58
|
+
readonly plan: Schema.$Array<Schema.Struct<{
|
|
59
|
+
readonly step: Schema.String;
|
|
60
|
+
readonly status: Schema.Literals<readonly ["pending", "in_progress", "completed"]>;
|
|
61
|
+
}>>;
|
|
62
|
+
}>;
|
|
63
|
+
/**
|
|
64
|
+
* Decoded input accepted by the `update_plan` flow.
|
|
65
|
+
*
|
|
66
|
+
* @category models
|
|
67
|
+
* @since 1.0.0
|
|
68
|
+
*/
|
|
69
|
+
export type Input = typeof Input.Type;
|
|
70
|
+
/**
|
|
71
|
+
* Output schema for the update_plan flow.
|
|
72
|
+
*
|
|
73
|
+
* @category schemas
|
|
74
|
+
* @since 1.0.0
|
|
75
|
+
*/
|
|
76
|
+
export declare const Output: Schema.Struct<{
|
|
77
|
+
readonly output: Schema.String;
|
|
78
|
+
}>;
|
|
79
|
+
/**
|
|
80
|
+
* Decoded output returned by the `update_plan` flow.
|
|
81
|
+
*
|
|
82
|
+
* @category models
|
|
83
|
+
* @since 1.0.0
|
|
84
|
+
*/
|
|
85
|
+
export type Output = typeof Output.Type;
|
|
86
|
+
/**
|
|
87
|
+
* Static effect envelope for the update_plan flow: no reads, no writes.
|
|
88
|
+
*
|
|
89
|
+
* @category effects
|
|
90
|
+
* @since 1.0.0
|
|
91
|
+
*/
|
|
92
|
+
export declare const effects: import("@smthrs/plan/Effects").Declaration;
|
|
93
|
+
/**
|
|
94
|
+
* Narrows the effect envelope for a decoded invocation.
|
|
95
|
+
*
|
|
96
|
+
* The flow touches nothing, so every invocation declares what the static
|
|
97
|
+
* envelope declares.
|
|
98
|
+
*
|
|
99
|
+
* @category effects
|
|
100
|
+
* @since 1.0.0
|
|
101
|
+
*/
|
|
102
|
+
export declare const effectsFor: (_input: typeof Input.Type) => import("@smthrs/plan/Effects").Declaration;
|
|
103
|
+
/**
|
|
104
|
+
* Capabilities required by the update_plan flow: none.
|
|
105
|
+
*
|
|
106
|
+
* @category capabilities
|
|
107
|
+
* @since 1.0.0
|
|
108
|
+
*/
|
|
109
|
+
export declare const capabilities: ReadonlyArray<string>;
|
|
110
|
+
/**
|
|
111
|
+
* Declaration-only update_plan flow.
|
|
112
|
+
*
|
|
113
|
+
* @category flows
|
|
114
|
+
* @since 1.0.0
|
|
115
|
+
*/
|
|
116
|
+
export declare const flow: {
|
|
117
|
+
readonly name: "update_plan";
|
|
118
|
+
readonly description: string;
|
|
119
|
+
readonly input: Schema.Struct<{
|
|
120
|
+
readonly explanation: Schema.optional<Schema.String>;
|
|
121
|
+
readonly plan: Schema.$Array<Schema.Struct<{
|
|
122
|
+
readonly step: Schema.String;
|
|
123
|
+
readonly status: Schema.Literals<readonly ["pending", "in_progress", "completed"]>;
|
|
124
|
+
}>>;
|
|
125
|
+
}>;
|
|
126
|
+
readonly output: Schema.Struct<{
|
|
127
|
+
readonly output: Schema.String;
|
|
128
|
+
}>;
|
|
129
|
+
readonly capabilities: readonly string[];
|
|
130
|
+
readonly effects: import("@smthrs/plan/Effects").Declaration;
|
|
131
|
+
};
|
|
132
|
+
/**
|
|
133
|
+
* Acknowledges a plan update with Codex's exact response text.
|
|
134
|
+
*
|
|
135
|
+
* The single-in-progress rule is checked again here. `Plan` refuses it at
|
|
136
|
+
* decode time, but a host that calls this handler directly never decodes, and
|
|
137
|
+
* an invariant enforced in only one of the two entrances is enforced in
|
|
138
|
+
* neither.
|
|
139
|
+
*
|
|
140
|
+
* @category handlers
|
|
141
|
+
* @since 1.0.0
|
|
142
|
+
*/
|
|
143
|
+
export declare const run: (input: {
|
|
144
|
+
readonly plan: readonly {
|
|
145
|
+
readonly step: string;
|
|
146
|
+
readonly status: "pending" | "completed" | "in_progress";
|
|
147
|
+
}[];
|
|
148
|
+
readonly explanation?: string | undefined;
|
|
149
|
+
}) => Effect.Effect<{
|
|
150
|
+
readonly output: string;
|
|
151
|
+
}, StdError.StdError, never>;
|
|
152
|
+
//# sourceMappingURL=UpdatePlan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UpdatePlan.d.ts","sourceRoot":"","sources":["../../src/UpdatePlan.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAEzC;;;;;GAKG;AACH,eAAO,MAAM,IAAI,gBAAgB,CAAA;AAEjC;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,QAE4B,CAAA;AAEpD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,mEAA2D,CAAA;AAWlF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,IAAI;;;GAU+B,CAAA;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,KAAK;;;;;;EAGhB,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AAErC;;;;;GAKG;AACH,eAAO,MAAM,MAAM;;EAEjB,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AAEvC;;;;;GAKG;AACH,eAAO,MAAM,OAAO,4CAAwE,CAAA;AAE5F;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,OAAO,KAAK,CAAC,IAAI,+CAAY,CAAA;AAEhE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,MAAM,CAAM,CAAA;AAErD;;;;;GAKG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;CAAsF,CAAA;AAEvG;;;;;;;;;;GAUG;AACH,eAAO,MAAM,GAAG;;;;;;;;4BAad,CAAA"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name2 in all)
|
|
10
|
+
__defProp(target, name2, { get: all[name2], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var UpdatePlan_exports = {};
|
|
30
|
+
__export(UpdatePlan_exports, {
|
|
31
|
+
Input: () => Input,
|
|
32
|
+
Output: () => Output,
|
|
33
|
+
Plan: () => Plan,
|
|
34
|
+
StepStatus: () => StepStatus,
|
|
35
|
+
capabilities: () => capabilities,
|
|
36
|
+
description: () => description,
|
|
37
|
+
effects: () => effects,
|
|
38
|
+
effectsFor: () => effectsFor,
|
|
39
|
+
flow: () => flow,
|
|
40
|
+
name: () => name,
|
|
41
|
+
run: () => run
|
|
42
|
+
});
|
|
43
|
+
module.exports = __toCommonJS(UpdatePlan_exports);
|
|
44
|
+
var Effect = __toESM(require("effect/Effect"), 1);
|
|
45
|
+
var Schema = __toESM(require("effect/Schema"), 1);
|
|
46
|
+
var import_Declaration = require("./internal/Declaration.js");
|
|
47
|
+
var StdError = __toESM(require("./StdError.js"), 1);
|
|
48
|
+
const name = "update_plan";
|
|
49
|
+
const description = "Updates the task plan.\nProvide an optional explanation and a list of plan items, each with a step and status.\nAt most one step can be in_progress at a time.\n";
|
|
50
|
+
const StepStatus = Schema.Literals(["pending", "in_progress", "completed"]);
|
|
51
|
+
const Step = Schema.Struct({
|
|
52
|
+
step: Schema.String.annotate({ description: "Task step text." }),
|
|
53
|
+
status: StepStatus.annotate({ description: "Step status." })
|
|
54
|
+
});
|
|
55
|
+
const inProgressCount = (plan) => plan.reduce((total, item) => item.status === "in_progress" ? total + 1 : total, 0);
|
|
56
|
+
const Plan = Schema.Array(Step).pipe(
|
|
57
|
+
Schema.check(
|
|
58
|
+
Schema.makeFilter(
|
|
59
|
+
(plan) => inProgressCount(plan) <= 1 ? void 0 : "invalid_input: at most one plan step can be in_progress at a time",
|
|
60
|
+
{ identifier: "invalid_input" }
|
|
61
|
+
)
|
|
62
|
+
)
|
|
63
|
+
).annotate({ description: "The list of steps" });
|
|
64
|
+
const Input = Schema.Struct({
|
|
65
|
+
explanation: Schema.optional(Schema.String.annotate({ description: "Optional explanation for this plan update." })),
|
|
66
|
+
plan: Plan
|
|
67
|
+
});
|
|
68
|
+
const Output = Schema.Struct({
|
|
69
|
+
output: Schema.String.annotate({ description: "Acknowledgement text, always 'Plan updated'" })
|
|
70
|
+
});
|
|
71
|
+
const effects = (0, import_Declaration.envelope)({ tier: "sealed", mode: "hermetic", reads: [], writes: [] });
|
|
72
|
+
const effectsFor = (_input) => effects;
|
|
73
|
+
const capabilities = [];
|
|
74
|
+
const flow = { name, description, input: Input, output: Output, capabilities, effects };
|
|
75
|
+
const run = Effect.fn("UpdatePlan.run")(function* (input) {
|
|
76
|
+
const running = inProgressCount(input.plan);
|
|
77
|
+
if (running > 1) {
|
|
78
|
+
return yield* Effect.fail(
|
|
79
|
+
new StdError.StdError({
|
|
80
|
+
code: "invalid_input",
|
|
81
|
+
message: `At most one step can be in_progress at a time; the plan named ${running}`
|
|
82
|
+
})
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
return { output: "Plan updated" };
|
|
86
|
+
});
|
|
87
|
+
//# sourceMappingURL=UpdatePlan.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/UpdatePlan.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * update_plan flow declaration and portable handler.\n *\n * A Codex CLI clone of the `update_plan` tool: an optional explanation and a\n * list of plan items, acknowledged with \"Plan updated\". Pure \u2014 no host\n * access; the harness observes plan updates through the journal.\n *\n * @since 1.0.0\n */\n\nimport * as Effect from \"effect/Effect\"\nimport * as Schema from \"effect/Schema\"\nimport { envelope } from \"./internal/Declaration.ts\"\nimport * as StdError from \"./StdError.ts\"\n\n/**\n * Registry name for the update_plan flow. Matches the Codex CLI tool name.\n *\n * @category identifiers\n * @since 1.0.0\n */\nexport const name = \"update_plan\"\n\n/**\n * Model-facing description of the update_plan flow. Matches the Codex CLI\n * description.\n *\n * @category descriptions\n * @since 1.0.0\n */\nexport const description = \"Updates the task plan.\\n\" +\n \"Provide an optional explanation and a list of plan items, each with a step and status.\\n\" +\n \"At most one step can be in_progress at a time.\\n\"\n\n/**\n * Status of one plan step, matching Codex.\n *\n * @category schemas\n * @since 1.0.0\n */\nexport const StepStatus = Schema.Literals([\"pending\", \"in_progress\", \"completed\"])\n\nconst Step = Schema.Struct({\n step: Schema.String.annotate({ description: \"Task step text.\" }),\n status: StepStatus.annotate({ description: \"Step status.\" })\n})\n\n/** How many steps of a plan claim to be running right now. */\nconst inProgressCount = (plan: ReadonlyArray<typeof Step.Type>): number =>\n plan.reduce((total, item) => item.status === \"in_progress\" ? total + 1 : total, 0)\n\n/**\n * The plan itself: steps, at most one of them `in_progress`.\n *\n * The single-in-progress rule is the last line of the Codex description a\n * model reads every frame, so it is enforced here rather than left as prose a\n * decode ignores. A plan naming two running steps is a decode failure at the\n * `plan` path, not a silent acknowledgement.\n *\n * @category schemas\n * @since 1.0.0\n */\nexport const Plan = Schema.Array(Step).pipe(\n Schema.check(\n Schema.makeFilter(\n (plan) =>\n inProgressCount(plan) <= 1\n ? undefined\n : \"invalid_input: at most one plan step can be in_progress at a time\",\n { identifier: \"invalid_input\" }\n )\n )\n).annotate({ description: \"The list of steps\" })\n\n/**\n * Input schema for the update_plan flow.\n *\n * @category schemas\n * @since 1.0.0\n */\nexport const Input = Schema.Struct({\n explanation: Schema.optional(Schema.String.annotate({ description: \"Optional explanation for this plan update.\" })),\n plan: Plan\n})\n\n/**\n * Decoded input accepted by the `update_plan` flow.\n *\n * @category models\n * @since 1.0.0\n */\nexport type Input = typeof Input.Type\n\n/**\n * Output schema for the update_plan flow.\n *\n * @category schemas\n * @since 1.0.0\n */\nexport const Output = Schema.Struct({\n output: Schema.String.annotate({ description: \"Acknowledgement text, always 'Plan updated'\" })\n})\n\n/**\n * Decoded output returned by the `update_plan` flow.\n *\n * @category models\n * @since 1.0.0\n */\nexport type Output = typeof Output.Type\n\n/**\n * Static effect envelope for the update_plan flow: no reads, no writes.\n *\n * @category effects\n * @since 1.0.0\n */\nexport const effects = envelope({ tier: \"sealed\", mode: \"hermetic\", reads: [], writes: [] })\n\n/**\n * Narrows the effect envelope for a decoded invocation.\n *\n * The flow touches nothing, so every invocation declares what the static\n * envelope declares.\n *\n * @category effects\n * @since 1.0.0\n */\nexport const effectsFor = (_input: typeof Input.Type) => effects\n\n/**\n * Capabilities required by the update_plan flow: none.\n *\n * @category capabilities\n * @since 1.0.0\n */\nexport const capabilities: ReadonlyArray<string> = []\n\n/**\n * Declaration-only update_plan flow.\n *\n * @category flows\n * @since 1.0.0\n */\nexport const flow = { name, description, input: Input, output: Output, capabilities, effects } as const\n\n/**\n * Acknowledges a plan update with Codex's exact response text.\n *\n * The single-in-progress rule is checked again here. `Plan` refuses it at\n * decode time, but a host that calls this handler directly never decodes, and\n * an invariant enforced in only one of the two entrances is enforced in\n * neither.\n *\n * @category handlers\n * @since 1.0.0\n */\nexport const run = Effect.fn(\"UpdatePlan.run\")(function*(\n input: typeof Input.Type\n): Effect.fn.Return<typeof Output.Type, StdError.StdError> {\n const running = inProgressCount(input.plan)\n if (running > 1) {\n return yield* Effect.fail(\n new StdError.StdError({\n code: \"invalid_input\",\n message: `At most one step can be in_progress at a time; the plan named ${running}`\n })\n )\n }\n return { output: \"Plan updated\" }\n})\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUA,aAAwB;AACxB,aAAwB;AACxB,yBAAyB;AACzB,eAA0B;AAQnB,MAAM,OAAO;AASb,MAAM,cAAc;AAUpB,MAAM,aAAa,OAAO,SAAS,CAAC,WAAW,eAAe,WAAW,CAAC;AAEjF,MAAM,OAAO,OAAO,OAAO;AAAA,EACzB,MAAM,OAAO,OAAO,SAAS,EAAE,aAAa,kBAAkB,CAAC;AAAA,EAC/D,QAAQ,WAAW,SAAS,EAAE,aAAa,eAAe,CAAC;AAC7D,CAAC;AAGD,MAAM,kBAAkB,CAAC,SACvB,KAAK,OAAO,CAAC,OAAO,SAAS,KAAK,WAAW,gBAAgB,QAAQ,IAAI,OAAO,CAAC;AAa5E,MAAM,OAAO,OAAO,MAAM,IAAI,EAAE;AAAA,EACrC,OAAO;AAAA,IACL,OAAO;AAAA,MACL,CAAC,SACC,gBAAgB,IAAI,KAAK,IACrB,SACA;AAAA,MACN,EAAE,YAAY,gBAAgB;AAAA,IAChC;AAAA,EACF;AACF,EAAE,SAAS,EAAE,aAAa,oBAAoB,CAAC;AAQxC,MAAM,QAAQ,OAAO,OAAO;AAAA,EACjC,aAAa,OAAO,SAAS,OAAO,OAAO,SAAS,EAAE,aAAa,6CAA6C,CAAC,CAAC;AAAA,EAClH,MAAM;AACR,CAAC;AAgBM,MAAM,SAAS,OAAO,OAAO;AAAA,EAClC,QAAQ,OAAO,OAAO,SAAS,EAAE,aAAa,8CAA8C,CAAC;AAC/F,CAAC;AAgBM,MAAM,cAAU,6BAAS,EAAE,MAAM,UAAU,MAAM,YAAY,OAAO,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;AAWpF,MAAM,aAAa,CAAC,WAA8B;AAQlD,MAAM,eAAsC,CAAC;AAQ7C,MAAM,OAAO,EAAE,MAAM,aAAa,OAAO,OAAO,QAAQ,QAAQ,cAAc,QAAQ;AAatF,MAAM,MAAM,OAAO,GAAG,gBAAgB,EAAE,WAC7C,OACyD;AACzD,QAAM,UAAU,gBAAgB,MAAM,IAAI;AAC1C,MAAI,UAAU,GAAG;AACf,WAAO,OAAO,OAAO;AAAA,MACnB,IAAI,SAAS,SAAS;AAAA,QACpB,MAAM;AAAA,QACN,SAAS,iEAAiE,OAAO;AAAA,MACnF,CAAC;AAAA,IACH;AAAA,EACF;AACA,SAAO,EAAE,QAAQ,eAAe;AAClC,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `webfetch` flow: an HTTP GET rendered as text, Markdown, or HTML.
|
|
3
|
+
*
|
|
4
|
+
* The handler fetches through the permission-checked `HttpClient`, follows at
|
|
5
|
+
* most ten redirects, refuses a body over 5 MiB, and returns the final URL,
|
|
6
|
+
* status, and content type beside the rendered body. The rendered body keeps
|
|
7
|
+
* its first 60,000 bytes and reports any cut with `truncated` and `notice`.
|
|
8
|
+
*
|
|
9
|
+
* @since 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
import type { GrantStore } from "@smthrs/kernel/GrantStore";
|
|
12
|
+
import * as HttpClient from "@smthrs/kernel/HttpClient";
|
|
13
|
+
import * as Effect from "effect/Effect";
|
|
14
|
+
import * as Schema from "effect/Schema";
|
|
15
|
+
import * as StdError from "./StdError.ts";
|
|
16
|
+
/**
|
|
17
|
+
* The registry name of the `webfetch` flow.
|
|
18
|
+
*
|
|
19
|
+
* @category identifiers
|
|
20
|
+
* @since 1.0.0
|
|
21
|
+
*/
|
|
22
|
+
export declare const name = "webfetch";
|
|
23
|
+
/**
|
|
24
|
+
* The one-line description the model sees for the `webfetch` flow.
|
|
25
|
+
*
|
|
26
|
+
* @category descriptions
|
|
27
|
+
* @since 1.0.0
|
|
28
|
+
*/
|
|
29
|
+
export declare const description = "Fetch an HTTP URL and render its content as text, Markdown, or HTML.";
|
|
30
|
+
/**
|
|
31
|
+
* What the `webfetch` flow accepts.
|
|
32
|
+
*
|
|
33
|
+
* @category schemas
|
|
34
|
+
* @since 1.0.0
|
|
35
|
+
*/
|
|
36
|
+
export declare const Input: Schema.Struct<{
|
|
37
|
+
readonly url: Schema.String;
|
|
38
|
+
readonly format: Schema.optional<Schema.Literals<readonly ["text", "markdown", "html"]>>;
|
|
39
|
+
readonly timeout: Schema.optional<Schema.Number>;
|
|
40
|
+
}>;
|
|
41
|
+
/**
|
|
42
|
+
* Decoded input accepted by the `webfetch` flow.
|
|
43
|
+
*
|
|
44
|
+
* @category models
|
|
45
|
+
* @since 1.0.0
|
|
46
|
+
*/
|
|
47
|
+
export type Input = typeof Input.Type;
|
|
48
|
+
/**
|
|
49
|
+
* What the `webfetch` flow returns.
|
|
50
|
+
*
|
|
51
|
+
* @category schemas
|
|
52
|
+
* @since 1.0.0
|
|
53
|
+
*/
|
|
54
|
+
export declare const Output: Schema.Struct<{
|
|
55
|
+
readonly url: Schema.String;
|
|
56
|
+
readonly status: Schema.Int;
|
|
57
|
+
readonly contentType: Schema.String;
|
|
58
|
+
readonly content: Schema.String;
|
|
59
|
+
readonly truncated: Schema.Boolean;
|
|
60
|
+
readonly notice: Schema.optional<Schema.String>;
|
|
61
|
+
}>;
|
|
62
|
+
/**
|
|
63
|
+
* Decoded output returned by the `webfetch` flow.
|
|
64
|
+
*
|
|
65
|
+
* @category models
|
|
66
|
+
* @since 1.0.0
|
|
67
|
+
*/
|
|
68
|
+
export type Output = typeof Output.Type;
|
|
69
|
+
/**
|
|
70
|
+
* The declared effect envelope of the `webfetch` flow, before any input is known.
|
|
71
|
+
*
|
|
72
|
+
* @category effects
|
|
73
|
+
* @since 1.0.0
|
|
74
|
+
*/
|
|
75
|
+
export declare const effects: import("@smthrs/plan/Effects").Declaration;
|
|
76
|
+
/**
|
|
77
|
+
* Narrows {@link effects} to what this particular input actually touches.
|
|
78
|
+
*
|
|
79
|
+
* @category effects
|
|
80
|
+
* @since 1.0.0
|
|
81
|
+
*/
|
|
82
|
+
export declare const effectsFor: (_input: typeof Input.Type) => import("@smthrs/plan/Effects").Declaration;
|
|
83
|
+
/**
|
|
84
|
+
* The authority the `webfetch` flow requires.
|
|
85
|
+
*
|
|
86
|
+
* @category capabilities
|
|
87
|
+
* @since 1.0.0
|
|
88
|
+
*/
|
|
89
|
+
export declare const capabilities: string[];
|
|
90
|
+
/**
|
|
91
|
+
* The `webfetch` flow declaration: schemas, capabilities, and effects, with the
|
|
92
|
+
* implementation attached separately.
|
|
93
|
+
*
|
|
94
|
+
* @category flows
|
|
95
|
+
* @since 1.0.0
|
|
96
|
+
*/
|
|
97
|
+
export declare const flow: {
|
|
98
|
+
readonly name: "webfetch";
|
|
99
|
+
readonly description: "Fetch an HTTP URL and render its content as text, Markdown, or HTML.";
|
|
100
|
+
readonly input: Schema.Struct<{
|
|
101
|
+
readonly url: Schema.String;
|
|
102
|
+
readonly format: Schema.optional<Schema.Literals<readonly ["text", "markdown", "html"]>>;
|
|
103
|
+
readonly timeout: Schema.optional<Schema.Number>;
|
|
104
|
+
}>;
|
|
105
|
+
readonly output: Schema.Struct<{
|
|
106
|
+
readonly url: Schema.String;
|
|
107
|
+
readonly status: Schema.Int;
|
|
108
|
+
readonly contentType: Schema.String;
|
|
109
|
+
readonly content: Schema.String;
|
|
110
|
+
readonly truncated: Schema.Boolean;
|
|
111
|
+
readonly notice: Schema.optional<Schema.String>;
|
|
112
|
+
}>;
|
|
113
|
+
readonly capabilities: string[];
|
|
114
|
+
readonly effects: import("@smthrs/plan/Effects").Declaration;
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Runs the `webfetch` flow: fetches one HTTP URL and renders it as text.
|
|
118
|
+
*
|
|
119
|
+
* @category handlers
|
|
120
|
+
* @since 1.0.0
|
|
121
|
+
*/
|
|
122
|
+
export declare const run: (input: {
|
|
123
|
+
readonly url: string;
|
|
124
|
+
readonly timeout?: number | undefined;
|
|
125
|
+
readonly format?: "text" | "markdown" | "html" | undefined;
|
|
126
|
+
}) => Effect.Effect<{
|
|
127
|
+
readonly status: number;
|
|
128
|
+
readonly content: string;
|
|
129
|
+
readonly contentType: string;
|
|
130
|
+
readonly url: string;
|
|
131
|
+
readonly truncated: boolean;
|
|
132
|
+
readonly notice?: string | undefined;
|
|
133
|
+
}, StdError.StdError, GrantStore | HttpClient.HttpClient>;
|
|
134
|
+
//# sourceMappingURL=WebFetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WebFetch.d.ts","sourceRoot":"","sources":["../../src/WebFetch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,KAAK,UAAU,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAOvC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAA;AAGzC;;;;;GAKG;AACH,eAAO,MAAM,IAAI,aAAa,CAAA;AAC9B;;;;;GAKG;AACH,eAAO,MAAM,WAAW,yEAAyE,CAAA;AACjG;;;;;GAKG;AACH,eAAO,MAAM,KAAK;;;;EAQhB,CAAA;AACF;;;;;GAKG;AACH,MAAM,MAAM,KAAK,GAAG,OAAO,KAAK,CAAC,IAAI,CAAA;AACrC;;;;;GAKG;AACH,eAAO,MAAM,MAAM;;;;;;;EAOjB,CAAA;AACF;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AACvC;;;;;GAKG;AACH,eAAO,MAAM,OAAO,4CAAwE,CAAA;AAC5F;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,OAAO,KAAK,CAAC,IAAI,+CAAY,CAAA;AAChE;;;;;GAKG;AACH,eAAO,MAAM,YAAY,UAA+B,CAAA;AACxD;;;;;;GAMG;AACH,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;CAAsF,CAAA;AAIvG;;;;;GAKG;AACH,eAAO,MAAM,GAAG;;;;;;;;;;;yDA0EsD,CAAA"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name2 in all)
|
|
10
|
+
__defProp(target, name2, { get: all[name2], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
var WebFetch_exports = {};
|
|
30
|
+
__export(WebFetch_exports, {
|
|
31
|
+
Input: () => Input,
|
|
32
|
+
Output: () => Output,
|
|
33
|
+
capabilities: () => capabilities,
|
|
34
|
+
description: () => description,
|
|
35
|
+
effects: () => effects,
|
|
36
|
+
effectsFor: () => effectsFor,
|
|
37
|
+
flow: () => flow,
|
|
38
|
+
name: () => name,
|
|
39
|
+
run: () => run
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(WebFetch_exports);
|
|
42
|
+
var HttpClient = __toESM(require("@smthrs/kernel/HttpClient"), 1);
|
|
43
|
+
var Effect = __toESM(require("effect/Effect"), 1);
|
|
44
|
+
var Schema = __toESM(require("effect/Schema"), 1);
|
|
45
|
+
var HttpClientRequest = __toESM(require("effect/unstable/http/HttpClientRequest"), 1);
|
|
46
|
+
var import_Declaration = require("./internal/Declaration.js");
|
|
47
|
+
var import_Html = require("./internal/Html.js");
|
|
48
|
+
var import_Http = require("./internal/Http.js");
|
|
49
|
+
var import_HttpNetwork = require("./internal/HttpNetwork.js");
|
|
50
|
+
var import_Url = require("./internal/Url.js");
|
|
51
|
+
var StdError = __toESM(require("./StdError.js"), 1);
|
|
52
|
+
const maxRedirects = 10;
|
|
53
|
+
const name = "webfetch";
|
|
54
|
+
const description = "Fetch an HTTP URL and render its content as text, Markdown, or HTML.";
|
|
55
|
+
const Input = Schema.Struct({
|
|
56
|
+
url: Schema.String.annotate({ description: "Absolute http or https URL to retrieve without user information" }),
|
|
57
|
+
format: Schema.optional(Schema.Literals(["text", "markdown", "html"])).annotate({
|
|
58
|
+
description: "Response rendering format; defaults to markdown"
|
|
59
|
+
}),
|
|
60
|
+
timeout: Schema.optional(import_Http.Timeout).annotate({
|
|
61
|
+
description: "Total timeout across requests, redirects, and response body in seconds, capped at 120"
|
|
62
|
+
})
|
|
63
|
+
});
|
|
64
|
+
const Output = Schema.Struct({
|
|
65
|
+
url: Schema.String.annotate({ description: "Final URL after redirects" }),
|
|
66
|
+
status: Schema.Int.annotate({ description: "HTTP status code, including error statuses" }),
|
|
67
|
+
contentType: Schema.String.annotate({ description: "Response Content-Type header, or an empty string when absent" }),
|
|
68
|
+
content: Schema.String.annotate({ description: "Response body rendered in the requested format" }),
|
|
69
|
+
truncated: Schema.Boolean.annotate({ description: "Whether the rendered body exceeded the display budget" }),
|
|
70
|
+
notice: Schema.optional(Schema.String.annotate({ description: "Truncation disclosure" }))
|
|
71
|
+
});
|
|
72
|
+
const effects = (0, import_Declaration.envelope)({ tier: "sealed", mode: "expected", reads: [], writes: [] });
|
|
73
|
+
const effectsFor = (_input) => effects;
|
|
74
|
+
const capabilities = [(0, import_Declaration.capability)("net:get", "*")];
|
|
75
|
+
const flow = { name, description, input: Input, output: Output, capabilities, effects };
|
|
76
|
+
const error = (code, message, path) => new StdError.StdError({ code, message, ...path === void 0 ? {} : { path } });
|
|
77
|
+
const run = Effect.fn("WebFetch.run")(function* (input) {
|
|
78
|
+
let url = (0, import_Url.parseHttpUrl)(input.url);
|
|
79
|
+
if (url === void 0) {
|
|
80
|
+
return yield* Effect.fail(
|
|
81
|
+
error("invalid_input", "URL must use http or https without user information", input.url)
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
const client = (0, import_HttpNetwork.guarded)(yield* HttpClient.HttpClient, false);
|
|
85
|
+
let headers = {
|
|
86
|
+
accept: input.format === "html" ? "text/html, text/plain;q=0.8" : "text/markdown, text/plain, text/html;q=0.8"
|
|
87
|
+
};
|
|
88
|
+
for (let redirect = 0; redirect <= maxRedirects; redirect++) {
|
|
89
|
+
const response = yield* client.execute(
|
|
90
|
+
HttpClientRequest.setHeaders(HttpClientRequest.get(url.toString()), headers)
|
|
91
|
+
).pipe(
|
|
92
|
+
Effect.mapError((cause) => (0, import_HttpNetwork.refusal)(cause) ?? error("request_failed", `Web fetch request failed: ${url}`))
|
|
93
|
+
);
|
|
94
|
+
const location = (0, import_Http.header)(response.headers, "location");
|
|
95
|
+
if (response.status >= 300 && response.status < 400 && location !== void 0) {
|
|
96
|
+
const next = (0, import_Url.parseHttpUrl)(location, url);
|
|
97
|
+
if (next === void 0) {
|
|
98
|
+
return yield* Effect.fail(
|
|
99
|
+
error("invalid_input", "Redirect target must use http or https without user information", location)
|
|
100
|
+
);
|
|
101
|
+
}
|
|
102
|
+
if (next.origin !== url.origin) {
|
|
103
|
+
headers = Object.fromEntries(
|
|
104
|
+
Object.entries(headers).filter(
|
|
105
|
+
([key]) => key.toLowerCase() !== "authorization" && key.toLowerCase() !== "cookie"
|
|
106
|
+
)
|
|
107
|
+
);
|
|
108
|
+
}
|
|
109
|
+
url = next;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
const contentType = (0, import_Http.header)(response.headers, "content-type") ?? "";
|
|
113
|
+
const normalizedContentType = contentType.toLowerCase();
|
|
114
|
+
if (!normalizedContentType.startsWith("text/") && !normalizedContentType.includes("json") && !normalizedContentType.includes("xml")) {
|
|
115
|
+
return yield* Effect.fail(
|
|
116
|
+
error("unsupported_content_type", `Unsupported content type: ${contentType || "unknown"}`)
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
const length = Number((0, import_Http.header)(response.headers, "content-length"));
|
|
120
|
+
if (Number.isFinite(length) && length > import_Http.MAX_RESPONSE_BYTES) {
|
|
121
|
+
return yield* Effect.fail(error("response_too_large", "Response exceeds the 5 MiB limit"));
|
|
122
|
+
}
|
|
123
|
+
const body = yield* (0, import_Http.readBounded)(response.stream, url.toString()).pipe(
|
|
124
|
+
Effect.mapError(
|
|
125
|
+
(cause) => cause instanceof StdError.StdError ? cause : error("request_failed", "Web fetch response could not be read")
|
|
126
|
+
)
|
|
127
|
+
);
|
|
128
|
+
const raw = new TextDecoder().decode(body);
|
|
129
|
+
const format = input.format ?? "markdown";
|
|
130
|
+
const { text: content, ...disclosure } = (0, import_Http.capOutput)(
|
|
131
|
+
format === "html" || !normalizedContentType.includes("html") ? raw : format === "text" ? (0, import_Html.toText)(raw) : (0, import_Html.toMarkdown)(raw)
|
|
132
|
+
);
|
|
133
|
+
return { url: url.toString(), status: response.status, contentType, content, ...disclosure };
|
|
134
|
+
}
|
|
135
|
+
return yield* Effect.fail(error("request_failed", "Web fetch exceeded the redirect limit"));
|
|
136
|
+
}, (effect, input) => (
|
|
137
|
+
// Keep the shared deadline outside the redirect loop and error mapping.
|
|
138
|
+
(0, import_Http.withDeadline)(effect, input.url, input.timeout, (seconds) => error("timeout", `Web fetch timed out after ${seconds} seconds`))
|
|
139
|
+
));
|
|
140
|
+
//# sourceMappingURL=WebFetch.js.map
|