diff --git a/CHANGELOG.md b/CHANGELOG.md index 4991fb00e..290f807b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,41 @@ # Changelog +## [0.20.3] - 2026-11-04 + +### Highlights + +- **`markkit` and `fetchkit` builtins.** Opt-in `markkit` and `fetchkit` features register both tools with the same CLI as the standalone binaries. Files come from the VFS and every HTTP hop goes through the sandbox HTTP client; host-only flags fail closed ([#2803](https://github.com/everruns/bashkit/pull/2803)). Bumped to markkit 0.3.1 and fetchkit 0.7.1 for RUSTSEC-2026-0436 ([#2823](https://github.com/everruns/bashkit/pull/2823)). +- **Fewer round trips on remote filesystems.** Tree walkers (`rg`, `find`, `du`, `grep -r`, `tar`, `cp -r`, `ls -R`, `tree`) use a bounded bulk walk hook, trust `read_dir` metadata and stay within memory and entry budgets on remote backends ([#2816](https://github.com/everruns/bashkit/pull/2816), [#2819](https://github.com/everruns/bashkit/pull/2819), [#2820](https://github.com/everruns/bashkit/pull/2820), [#2821](https://github.com/everruns/bashkit/pull/2821)). +- **Execution output to a VFS file.** `Execution::output_file` writes combined output into a capped VFS file; Python `execute`/`execute_sync` accept `output_file`, and the Deep Agents backend offloads large output natively ([#2818](https://github.com/everruns/bashkit/pull/2818)). +- **Deep Agents backend improvements.** Per-call timeouts (`ExecOptions::timeout`, Python `timeout_seconds`) that can only tighten the configured limit, base64 binary reads, and structured file-operation error codes, plus a new integration guide ([#2817](https://github.com/everruns/bashkit/pull/2817), [#2824](https://github.com/everruns/bashkit/pull/2824)). +- **Python exit crash fixed.** A timed-out async callback no longer races interpreter finalization and aborts the process on CPython < 3.13 ([#2802](https://github.com/everruns/bashkit/pull/2802)). +- **crates.io trusted publishing.** Rust crates publish through GitHub OIDC instead of a stored token ([#2801](https://github.com/everruns/bashkit/pull/2801)). + +### What's Changed + +* chore(deps): bump russh to 0.65.0 and the napi group, with vet audits ([#2826](https://github.com/everruns/bashkit/pull/2826)) by @chaliy +* docs(python): add Deep Agents integration guide ([#2824](https://github.com/everruns/bashkit/pull/2824)) by @chaliy +* fix(deps): bump markkit to 0.3.1 and fetchkit to 0.7.1 for RUSTSEC-2026-0436 ([#2823](https://github.com/everruns/bashkit/pull/2823)) by @chaliy +* fix(fs): walk directories in path order so prefetch matches consumers ([#2821](https://github.com/everruns/bashkit/pull/2821)) by @chaliy +* test(fs): large-tree stress tests; stream rg's walk, cap ls at the stdout limit ([#2820](https://github.com/everruns/bashkit/pull/2820)) by @chaliy +* fix(builtins): list ls -R and tree through bounded bulk walk batches ([#2819](https://github.com/everruns/bashkit/pull/2819)) by @chaliy +* fix(fs): cut round trips and bound memory for tree walkers on remote backends ([#2816](https://github.com/everruns/bashkit/pull/2816)) by @chaliy +* feat: tee execution output to a VFS file; native capture offload for Deep Agents ([#2818](https://github.com/everruns/bashkit/pull/2818)) by @chaliy +* feat(python): per-call timeout and multimodal reads for the Deep Agents backend ([#2817](https://github.com/everruns/bashkit/pull/2817)) by @chaliy +* feat(builtins): add markkit and fetchkit builtins with the upstream CLI ([#2803](https://github.com/everruns/bashkit/pull/2803)) by @chaliy +* chore(deps): bump the examples-npm group across 1 directory with 6 updates ([#2812](https://github.com/everruns/bashkit/pull/2812)) by @app/dependabot +* chore(ci): bump the github-actions group with 2 updates ([#2811](https://github.com/everruns/bashkit/pull/2811)) by @app/dependabot +* chore(deps): bump fancy-regex to 0.20.0 across all three lockfiles ([#2813](https://github.com/everruns/bashkit/pull/2813)) by @chaliy +* chore(deps): bump the js-npm group in /crates/bashkit-js with 5 updates ([#2809](https://github.com/everruns/bashkit/pull/2809)) by @app/dependabot +* chore(deps): bump the site-npm group in /site with 4 updates ([#2808](https://github.com/everruns/bashkit/pull/2808)) by @app/dependabot +* chore(deps): bump the docs-grep-agent-uv group in /examples/docs-grep-agent with 3 updates ([#2807](https://github.com/everruns/bashkit/pull/2807)) by @app/dependabot +* chore(builtins): sync uutils/coreutils argument surfaces and vendored modules ([#2805](https://github.com/everruns/bashkit/pull/2805)) by @chaliy +* ci: pin nightly jobs to nightly-2026-10-30 ([#2804](https://github.com/everruns/bashkit/pull/2804)) by @chaliy +* fix(python): drain abandoned callback dispatch before interpreter exit ([#2802](https://github.com/everruns/bashkit/pull/2802)) by @chaliy +* ci(release): use crates.io trusted publishing ([#2801](https://github.com/everruns/bashkit/pull/2801)) by @chaliy + +**Full Changelog**: https://github.com/everruns/bashkit/compare/v0.20.2...v0.20.3 + ## [0.20.2] - 2026-10-30 ### Highlights diff --git a/Cargo.lock b/Cargo.lock index d00df73dd..23460e4e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -426,7 +426,7 @@ checksum = "2af50177e190e07a26ab74f8b1efbfe2ef87da2116221318cb1c2e82baf7de06" [[package]] name = "bashkit" -version = "0.20.2" +version = "0.20.3" dependencies = [ "anyhow", "async-trait", @@ -511,7 +511,7 @@ dependencies = [ [[package]] name = "bashkit-bench" -version = "0.20.2" +version = "0.20.3" dependencies = [ "anyhow", "bashkit", @@ -526,7 +526,7 @@ dependencies = [ [[package]] name = "bashkit-capi" -version = "0.20.2" +version = "0.20.3" dependencies = [ "bashkit", "serde", @@ -536,7 +536,7 @@ dependencies = [ [[package]] name = "bashkit-cli" -version = "0.20.2" +version = "0.20.3" dependencies = [ "anyhow", "bashkit", @@ -550,7 +550,7 @@ dependencies = [ [[package]] name = "bashkit-coreutils-port" -version = "0.20.2" +version = "0.20.3" dependencies = [ "anyhow", "prettyplease", @@ -564,7 +564,7 @@ dependencies = [ [[package]] name = "bashkit-cpython-wasm" -version = "0.20.2" +version = "0.20.3" dependencies = [ "lzma-rs", "wasmtime", @@ -572,7 +572,7 @@ dependencies = [ [[package]] name = "bashkit-eval" -version = "0.20.2" +version = "0.20.3" dependencies = [ "anyhow", "async-trait", @@ -590,7 +590,7 @@ dependencies = [ [[package]] name = "bashkit-js" -version = "0.20.2" +version = "0.20.3" dependencies = [ "bashkit", "bashkit-scripted-tool", @@ -604,7 +604,7 @@ dependencies = [ [[package]] name = "bashkit-python" -version = "0.20.2" +version = "0.20.3" dependencies = [ "bashkit", "bashkit-scripted-tool", @@ -617,7 +617,7 @@ dependencies = [ [[package]] name = "bashkit-scripted-tool" -version = "0.20.2" +version = "0.20.3" dependencies = [ "anyhow", "async-trait", @@ -633,7 +633,7 @@ dependencies = [ [[package]] name = "bashkit-wasm" -version = "0.20.2" +version = "0.20.3" dependencies = [ "bashkit", "console_error_panic_hook", diff --git a/Cargo.toml b/Cargo.toml index 8a98ab27f..8ff361a63 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ resolver = "2" members = ["crates/*"] [workspace.package] -version = "0.20.2" +version = "0.20.3" edition = "2024" license = "MIT" authors = ["Mykhailo Chalyi ", "Everruns"] diff --git a/README.md b/README.md index 77f8a27ba..6841c4239 100644 --- a/README.md +++ b/README.md @@ -442,7 +442,7 @@ Enable the `sqlite` feature to embed [Turso](https://github.com/tursodatabase/tu ```toml [dependencies] -bashkit = { version = "0.20.2", features = ["sqlite"] } +bashkit = { version = "0.20.3", features = ["sqlite"] } ``` ```rust diff --git a/crates/bashkit-cli/Cargo.toml b/crates/bashkit-cli/Cargo.toml index baadf1045..f17aec962 100644 --- a/crates/bashkit-cli/Cargo.toml +++ b/crates/bashkit-cli/Cargo.toml @@ -39,7 +39,7 @@ interactive = ["dep:rustyline", "dep:terminal_size", "dep:signal-hook"] # `tzdata` is listed explicitly: an interactive shell must keep honouring # named `TZ=` zones in `date`, which stopped being implied when chrono-tz # moved behind a feature. -bashkit = { path = "../bashkit", version = "0.20.2", default-features = false, features = ["http_client", "ring", "git", "jq", "tzdata"] } +bashkit = { path = "../bashkit", version = "0.20.3", default-features = false, features = ["http_client", "ring", "git", "jq", "tzdata"] } tokio = { workspace = true, features = ["macros", "net", "rt", "rt-multi-thread", "time", "io-std"] } clap.workspace = true anyhow.workspace = true diff --git a/crates/bashkit-js/package.json b/crates/bashkit-js/package.json index 2ad30fb4b..6e81bd9c7 100644 --- a/crates/bashkit-js/package.json +++ b/crates/bashkit-js/package.json @@ -1,6 +1,6 @@ { "name": "@everruns/bashkit", - "version": "0.20.2", + "version": "0.20.3", "description": "Sandboxed bash interpreter for JavaScript/TypeScript", "packageManager": "pnpm@10.33.0", "main": "wrapper.js", diff --git a/crates/bashkit-scripted-tool/Cargo.toml b/crates/bashkit-scripted-tool/Cargo.toml index 2f619951d..a48e1ea5a 100644 --- a/crates/bashkit-scripted-tool/Cargo.toml +++ b/crates/bashkit-scripted-tool/Cargo.toml @@ -30,7 +30,7 @@ jq = ["bashkit/jq"] tracing = ["dep:tracing"] [dependencies] -bashkit = { path = "../bashkit", version = "0.20.2", default-features = false, features = ["bash_tool"] } +bashkit = { path = "../bashkit", version = "0.20.3", default-features = false, features = ["bash_tool"] } tokio = { workspace = true } async-trait = { workspace = true } tower = { workspace = true } diff --git a/crates/bashkit-wasm/package.json b/crates/bashkit-wasm/package.json index 27bf3f136..fec3ea717 100644 --- a/crates/bashkit-wasm/package.json +++ b/crates/bashkit-wasm/package.json @@ -1,6 +1,6 @@ { "name": "@everruns/bashkit-wasm", - "version": "0.20.2", + "version": "0.20.3", "description": "Sandboxed bash interpreter for the browser (WebAssembly). Single-threaded \u2014 no SharedArrayBuffer, no COOP/COEP headers.", "type": "module", "main": "index.js", diff --git a/crates/bashkit/Cargo.toml b/crates/bashkit/Cargo.toml index 89f164e22..3a6870e05 100644 --- a/crates/bashkit/Cargo.toml +++ b/crates/bashkit/Cargo.toml @@ -143,7 +143,7 @@ monty = { version = "=0.0.19", optional = true } # Real CPython 3.14 as a WASI guest, precompiled to Pulley (cpython feature). # See knowledge/runtimes/cpython-wasm.md. -bashkit-cpython-wasm = { path = "../bashkit-cpython-wasm", version = "0.20.2", optional = true } +bashkit-cpython-wasm = { path = "../bashkit-cpython-wasm", version = "0.20.3", optional = true } wasmtime = { workspace = true, optional = true, features = ["pooling-allocator"] } monty-types = { version = "=0.0.19", optional = true } # Monty's ruff AST uses compact_str 0.9; get-size2 >=0.10.2 only implements diff --git a/crates/bashkit/docs/cpython.md b/crates/bashkit/docs/cpython.md index 5e4397b4c..0d78ddbd4 100644 --- a/crates/bashkit/docs/cpython.md +++ b/crates/bashkit/docs/cpython.md @@ -19,7 +19,7 @@ Enable the `cpython` cargo feature and register the builtins: ```toml [dependencies] -bashkit = { version = "0.20.2", features = ["cpython"] } +bashkit = { version = "0.20.3", features = ["cpython"] } ``` ```rust @@ -242,7 +242,7 @@ executable memory. Enable `cpython-native` instead of `cpython` to compile it to machine code for your target at build time: ```toml -bashkit = { version = "0.20.2", features = ["cpython-native"] } +bashkit = { version = "0.20.3", features = ["cpython-native"] } ``` Calls get 4-10x faster (`print(1)` ~1 ms instead of ~4 ms; CPU-bound code diff --git a/crates/bashkit/docs/logging.md b/crates/bashkit/docs/logging.md index ac39697fc..41c8110dc 100644 --- a/crates/bashkit/docs/logging.md +++ b/crates/bashkit/docs/logging.md @@ -14,7 +14,7 @@ Add the `logging` feature to your `Cargo.toml`: ```toml [dependencies] -bashkit = { version = "0.20.2", features = ["logging"] } +bashkit = { version = "0.20.3", features = ["logging"] } tracing-subscriber = "0.3" # or your preferred subscriber ``` diff --git a/crates/bashkit/docs/markkit-fetchkit.md b/crates/bashkit/docs/markkit-fetchkit.md index 61b0fc0f3..4f90506e1 100644 --- a/crates/bashkit/docs/markkit-fetchkit.md +++ b/crates/bashkit/docs/markkit-fetchkit.md @@ -12,7 +12,7 @@ as their standalone binaries**: Both are **off by default**. Enable the Cargo features: ```toml -bashkit = { version = "0.20.2", features = ["markkit", "fetchkit"] } +bashkit = { version = "0.20.3", features = ["markkit", "fetchkit"] } ``` ```bash diff --git a/crates/bashkit/docs/sqlite.md b/crates/bashkit/docs/sqlite.md index 40fa0c4bf..e55e713f1 100644 --- a/crates/bashkit/docs/sqlite.md +++ b/crates/bashkit/docs/sqlite.md @@ -13,7 +13,7 @@ the `sqlite` feature. The engine is [Turso](https://github.com/tursodatabase/tur ```toml # Cargo.toml -bashkit = { version = "0.20.2", features = ["sqlite"] } +bashkit = { version = "0.20.3", features = ["sqlite"] } ``` ```rust,ignore diff --git a/crates/bashkit/fuzz/Cargo.lock b/crates/bashkit/fuzz/Cargo.lock index a1c36f7be..16525cbbf 100644 --- a/crates/bashkit/fuzz/Cargo.lock +++ b/crates/bashkit/fuzz/Cargo.lock @@ -90,7 +90,7 @@ checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" [[package]] name = "bashkit" -version = "0.20.2" +version = "0.20.3" dependencies = [ "anyhow", "async-trait", @@ -140,7 +140,7 @@ dependencies = [ [[package]] name = "bashkit-cpython-wasm" -version = "0.20.2" +version = "0.20.3" dependencies = [ "lzma-rs", "wasmtime", diff --git a/crates/bashkit/src/lib.rs b/crates/bashkit/src/lib.rs index 7fbf74cd8..9faa958b5 100644 --- a/crates/bashkit/src/lib.rs +++ b/crates/bashkit/src/lib.rs @@ -323,7 +323,7 @@ //! //! ```toml //! [dependencies] -//! bashkit = { version = "0.20.2", features = ["git"] } +//! bashkit = { version = "0.20.3", features = ["git"] } //! ``` //! //! ```rust,ignore @@ -354,7 +354,7 @@ //! //! ```toml //! [dependencies] -//! bashkit = { version = "0.20.2", features = ["python"] } +//! bashkit = { version = "0.20.3", features = ["python"] } //! ``` //! //! ```rust,ignore diff --git a/docs/builtin_typescript.md b/docs/builtin_typescript.md index 9d44b689b..bc4f234c0 100644 --- a/docs/builtin_typescript.md +++ b/docs/builtin_typescript.md @@ -12,7 +12,7 @@ Add the `typescript` feature to your `Cargo.toml`: ```toml [dependencies] -bashkit = { version = "0.20.2", features = ["typescript"] } +bashkit = { version = "0.20.3", features = ["typescript"] } ``` Enable TypeScript in the builder: diff --git a/docs/migrating-scripted-tool.md b/docs/migrating-scripted-tool.md index 558ec19ee..8381c2c76 100644 --- a/docs/migrating-scripted-tool.md +++ b/docs/migrating-scripted-tool.md @@ -23,8 +23,8 @@ features = ["scripted_tool", "python", "typescript", "jq"] After: ```toml -bashkit = { version = "0.20.2", features = ["python", "typescript", "jq"] } -bashkit-scripted-tool = { version = "0.20.2", features = ["python", "typescript", "jq"] } +bashkit = { version = "0.20.3", features = ["python", "typescript", "jq"] } +bashkit-scripted-tool = { version = "0.20.3", features = ["python", "typescript", "jq"] } ``` Keep `bashkit` only if you use it directly (`Bash`, `BashTool`, the `Tool` diff --git a/examples/hyperlight/Cargo.lock b/examples/hyperlight/Cargo.lock index a361e91be..7d47dede9 100644 --- a/examples/hyperlight/Cargo.lock +++ b/examples/hyperlight/Cargo.lock @@ -69,7 +69,7 @@ checksum = "ac07cdecf99051d9a5238b80f35af32cdeba5b336e55d957b318b50137e18da5" [[package]] name = "bashkit" -version = "0.20.2" +version = "0.20.3" dependencies = [ "anyhow", "async-trait",