Tags: adeelahmad/bashkit
Tags
chore(release): prepare v0.11.0 (everruns#2080) ## Release v0.11.0 Minor release — adds new user-facing binding surface on top of a broad fix/hardening cycle since v0.10.0. ### Highlight - **`cwd` and `env` construction options for the Node and Python bindings** — callers can now set the starting working directory and initial environment directly at `Bash` construction time, instead of paying for a leading `cd`/`export` prelude on every run ([everruns#2072](everruns#2072)). ### Version bump | Manifest | 0.10.0 → 0.11.0 | |---|---| | `Cargo.toml` (workspace) | ✅ | | `crates/bashkit-cli/Cargo.toml` (path-dep pin) | ✅ | | `crates/bashkit-js/package.json` | ✅ | | `Cargo.lock` (7 workspace crates) | ✅ | ### Publish-readiness report - `cargo fmt --check` — ✅ clean. - `cargo publish --dry-run -p bashkit` — ✅ packages successfully after the CI `monty`/`python` strip (replicated locally; matches `publish.yml`). - `cargo publish --dry-run -p bashkit-cli` — resolves against published `bashkit` on crates.io; CI publishes `bashkit` first and waits for the index (standard ordering), so it cannot be validated standalone before the core crate is live. - Version sync — all manifests read `0.11.0`, greater than latest published `0.10.0` on every registry. ### What's Changed See [CHANGELOG.md](https://github.com/everruns/bashkit/blob/claude/amazing-hypatia-3wx06s/CHANGELOG.md) for the full list (17 PRs). **Full Changelog**: everruns/bashkit@v0.10.0...v0.11.0 On merge, `release.yml` will tag `v0.11.0`, create the GitHub Release, and dispatch the crates.io / PyPI / npm / Homebrew publish workflows. --- _Generated by [Claude Code](https://claude.ai/code/session_016KufmYgNYcPpM5mcHQkpNj)_
chore(release): prepare v0.10.0 (everruns#2037) First external contribution this cycle: VFS access for Python custom builtins (everruns#2010) by @dedeswim. Audit advisory RUSTSEC-2026-0176 (pyo3) suppressed pending pyo3-async-runtimes 0.29.
chore(release): prepare v0.9.0 (everruns#1844) ## Release v0.9.0 Minor release covering 35 commits since v0.8.0. ### Highlights - **Pyodide/Emscripten (wasm32) Python wheel** — a reduced-feature `wasm32-unknown-emscripten` Python wheel now ships, enabling the embedded Python builtin in browser/wasm hosts ([everruns#1811](everruns#1811)). - **Broad resource-safety hardening sweep** — fuel/budget enforcement and memory caps across the interpreter, parser, `rg`, `sqlite`, snapshot, and expansion paths (arithmetic expansion bounds, coproc/process-substitution budgets, heredoc reinjection fuel, brace-step overflow, compound-array limits, replacement-growth caps, sqlite result memory cap). - **JS BashTool snapshot authentication** plus keyed snapshot APIs and snapshot counter/byte-accounting fixes for correct resume. - Benches snapshot site page and CI hardening for the release/publish workflows. ### Version bump - Workspace `Cargo.toml`: `0.8.0` → `0.9.0` - `crates/bashkit-cli/Cargo.toml` path-dep pin → `0.9.0` - `crates/bashkit-js/package.json` → `0.9.0` - `Cargo.lock` regenerated ### Publish-readiness report - `cargo fmt --check` — pass - `cargo clippy --workspace --features http_client,ssh,sqlite --all-targets` — pass (no warnings) - `cargo publish --dry-run -p bashkit` — **pass** after replicating the `publish.yml` git-dep strip (monty is a git-only dep, stripped at publish time); packaging completed, upload aborted by dry-run as expected. - `cargo publish --dry-run -p bashkit-cli` — packaging succeeded; version resolution against crates.io defers to publish-time (bashkit `0.9.0` must land on crates.io first, which CI publishes in dependency order). This is the normal chicken-and-egg and matches prior releases. - **Version sync**: all manifests read `0.9.0`; `0.9.0` > latest published `0.8.0` on crates.io / PyPI / npm. ### What's Changed See [CHANGELOG.md](https://github.com/everruns/bashkit/blob/claude/hopeful-heisenberg-NLFgZ/CHANGELOG.md) for the full list. **Full Changelog**: everruns/bashkit@v0.8.0...v0.9.0 --- _Generated by [Claude Code](https://claude.ai/code/session_01BksyW8fAESKzvUuMfJ44dY)_
chore(release): prepare v0.8.0 (everruns#1808) ## Release v0.8.0 Minor release. New feature: VFS-backed Python `open()` support. ### Highlights - **Python `open()` support** — VFS-backed `open()` / `Path.open()` read, write, and append now work in the embedded Python builtin, so LLM-generated `with open("/tmp/...")` scripts run instead of failing. Host filesystem and network stay unavailable to Python ([everruns#1800](everruns#1800)). - Further `rg` parity and hardening fixes (default type globs, JSON context fanout cap, root-arg allocation) plus interpreter fixes for variable attribute/nameref persistence and persistent file descriptor validation. ### What's Changed * ci: reclaim runner disk before disk-hungry scheduled jobs ([everruns#1807](everruns#1807)) by @chaliy * fix(rg): align r and tf default type globs with ripgrep ([everruns#1805](everruns#1805)) by @chaliy * fix(rg): cap JSON context event fanout ([everruns#1804](everruns#1804)) by @chaliy * fix(interpreter): persist var attrs and namerefs across shell state restore ([everruns#1803](everruns#1803)) by @chaliy * fix(interpreter): reject negative persistent file descriptors ([everruns#1802](everruns#1802)) by @chaliy * fix(rg): avoid root arg string cloning across candidates ([everruns#1801](everruns#1801)) by @chaliy * feat(python): support vfs-backed open ([everruns#1800](everruns#1800)) by @chaliy * feat(site): add bashkit logo assets ([everruns#1799](everruns#1799)) by @chaliy * fix(ci): bypass pnpm `--` separator that breaks napi build flag forwarding ([everruns#1798](everruns#1798)) by @chaliy * fix(site): add homepage canonical link header ([everruns#1797](everruns#1797)) by @chaliy **Full Changelog**: everruns/bashkit@v0.7.2...v0.8.0 ### Version bump `0.7.2` → `0.8.0` across `Cargo.toml`, `crates/bashkit-cli/Cargo.toml`, `crates/bashkit-js/package.json`, and `Cargo.lock`. ### Publish-readiness report - ✅ `cargo fmt --check` — clean - ✅ `cargo clippy --workspace --all-targets --features http_client,ssh,sqlite -- -D warnings` — clean - ✅ `cargo test --workspace --lib --bins --tests --features http_client,ssh,sqlite` — green (with pinned ripgrep 15.1.0, matching CI's `RG_VERSION`) - ✅ `cargo test --features python -p bashkit` — green - ✅ `cargo publish --dry-run -p bashkit` — succeeds after replicating the workflow's monty/python strip step (git-only `monty` dep is stripped before publish, as in `publish.yml`) - ✅ `bashkit-cli` packages cleanly; its dry-run's only remaining step is resolving `bashkit ^0.8.0` from crates.io, which the workflow satisfies by publishing `bashkit` first (30s index wait) then `bashkit-cli` - ✅ Version sync: all manifests read `0.8.0`; crates.io latest is `0.7.2`, so `0.8.0` is a strict increment on every registry (npm/PyPI versions are derived from the same pipeline) Notes: in this sandbox the `rg` differential case and `ssh_supabase_connects` test initially failed only because of environment (preinstalled ripgrep 14.1.0 vs CI's pinned 15.1.0, and no egress to the external `supabase.sh` SSH host); both are environmental, not code regressions. --- _Generated by [Claude Code](https://claude.ai/code/session_01URKhGRWFuMgjHQR1YhyNHN)_
chore(release): prepare v0.7.2 (everruns#1796) ## Summary Maintenance release rolling up 50 commits since v0.7.1. ## Highlights - **Maintenance release** — rolls up ~25 `rg` hardening fixes, a CoW subshell-snapshot perf landmark (everruns#1767), security tightening (FD cap everruns#1780, tool-hook enforcement for `command` everruns#1781), a `BuiltinHelper` refactor (everruns#1788), and test/build hygiene work. ## Publish-readiness report | Check | Result | |-------|--------| | `cargo fmt --check` | clean | | `cargo clippy --all-targets -- -D warnings` | clean | | `cargo test --features http_client` | 2965 pass (environmental rg-diff failure resolved with pinned ripgrep 15.1) | | `cargo publish --dry-run -p bashkit` (with CI's monty strip) | succeeds | | `cargo publish --dry-run -p bashkit-cli` | packaging succeeds; resolution fails only because bashkit 0.7.2 isn't on crates.io yet (chicken-and-egg, resolves post-merge per `publish.yml`) | | Version sync (Cargo.toml, bashkit-cli/Cargo.toml, bashkit-js/package.json, Cargo.lock) | all 0.7.2 | | Registry version checks (crates.io / npm / PyPI) | all currently 0.7.1; 0.7.2 > 0.7.1 | ## Test plan - [ ] CI green on this PR - [ ] Merge → `release.yml` creates GitHub Release + tag `v0.7.2` - [ ] `publish.yml` publishes bashkit + bashkit-cli to crates.io - [ ] `publish-python.yml` publishes wheels to PyPI - [ ] `publish-js.yml` publishes `@everruns/bashkit` to npm - [ ] `cli-binaries.yml` ships prebuilt binaries and bumps Homebrew tap
chore(release): prepare v0.7.1 (everruns#1740) Skip the `Run AI examples` step on Windows + Node 24 to unblock npm publish. v0.7.0 shipped to crates.io / PyPI / Homebrew but not npm because the AI-example scripts trigger a libuv shutdown assertion (`!(handle->flags & UV_HANDLE_CLOSING)`) only on that single matrix entry; the same scripts pass on every other platform/Node combination, so the step is gated off via `runner.os == 'Windows' && matrix.node == '24'`.
chore(release): prepare v0.7.0 (everruns#1738) 100 commits since v0.6.0. Minor bump — additive APIs, no breaking changes. Highlights: ripgrep parity push (~80 PRs), host-owned BuiltinRegistry API for JS/Python/Rust embedders, readonly_filesystem enforcement for live mounts, dependency maintenance pass.
chore(release): prepare v0.6.0 (everruns#1630) ## Release v0.6.0 Bumps workspace version `0.5.0 → 0.6.0`, regenerates `Cargo.lock`, syncs `bashkit-cli` path-dep pin, `crates/bashkit-js/package.json` + `package-lock.json`, and adds the v0.6.0 entry to `CHANGELOG.md`. ### Highlights - **Continue coreutils adoption experiment** — Extends codegen beyond `uu_app()` args to vendor whole upstream uutils modules with a manifest and drift-detection CI. `tee`, `mktemp`, `realpath`, `stat`, and `od` now flow through codegen; `printf` runs on a vendored copy of uucore's format implementation; and `env` is ported through a virtual-env shim (TM-INF-024) (everruns#1592, everruns#1593, everruns#1594). - **MCP server mode removed from CLI** — `bashkit mcp` and its CLI transport are gone; embed bashkit via the library bindings instead (breaking — see below). - **Security hardening across the sandbox** — Fail-closed fixes across realfs, snapshot/restore, sqlite (`VACUUM` rejected, row caps, engine cache invalidation), network (SSRF precheck fails closed, IPv4-mapped IPv6 normalization), jq (`halt` replaced; fancy-regex + file-binding caps), and ssh (sftp `ls` escaping, try `none`-auth first). The final 6 OPEN threat-model entries are now mitigated (everruns#1568). ### Breaking Changes - **CLI MCP server mode removed**: the `bashkit mcp` subcommand and bundled MCP server transport are gone. Migrate by embedding bashkit via the library bindings (`bashkit` crate, `@everruns/bashkit` on npm, `bashkit` on PyPI) and exposing tools through your own MCP server. ### Publish-readiness report - **Manifest version sync** — `Cargo.toml`, `crates/bashkit-cli/Cargo.toml` (path-dep pin), `crates/bashkit-js/package.json`, `crates/bashkit-js/package-lock.json` (top-level + `packages.""`), and `Cargo.lock` all read `0.6.0`. - **Registry freshness** — `cargo search bashkit` / `cargo search bashkit-cli` / `npm view @everruns/bashkit version` / `pip index versions bashkit` all return `0.5.0`; `0.6.0` is the next version on every registry. - **`cargo fmt --check`** — clean. - **`cargo clippy --all-targets --all-features -- -D warnings`** — clean. - **`cargo test --workspace`** — passes (workspace + doctests; `CARGO_PROFILE_*_DEBUG=0` set locally so test binaries fit in the runner's disk). - **`cargo publish --dry-run -p bashkit --allow-dirty`** — passes after the same `monty`/python-feature strip that `.github/workflows/publish.yml` performs at publish time (matches the existing CI flow). - **`cargo publish --dry-run -p bashkit-cli --allow-dirty`** — fails locally with `failed to select a version for the requirement bashkit = "^0.6.0"` because `bashkit 0.6.0` isn't on crates.io yet. This is the expected order — `publish-bashkit` runs first in `publish.yml`, then `publish-bashkit-cli` resolves the new version. No action needed. - **PyPI / npm packaging** — no packaging-touching changes in this release, so the `maturin build` / `napi build` smoke tests were skipped per `specs/release-process.md` step 5. ### Post-merge Once merged, `release.yml` will tag `v0.6.0`, publish a GitHub Release from the changelog entry, and dispatch `publish.yml`, `publish-python.yml`, `publish-js.yml`, and `cli-binaries.yml`. I'll watch the workflows and verify all four targets (crates.io, PyPI, npm, Homebrew) report `0.6.0` before declaring the release shipped. **Full Changelog**: everruns/bashkit@v0.5.0...v0.6.0
chore(release): prepare v0.5.0 (everruns#1543) Minor release `0.4.1` → `0.5.0`. Two new builtins (`shuf`, `truncate`), a coreutils-codegen pipeline that ports uutils' `uu_app()` clap definitions for `cat`/`tac`/`truncate`/`shuf`/`readlink`, and `tool_def` flag-syntax improvements. ## Highlights - **Coreutils argument surface via codegen** — Ports uutils' `uu_app()` clap definitions into bashkit so builtins share the real coreutils argument shape; `cat`, `tac`, `truncate`, `shuf`, and `readlink` now flow through this surface, with a coreutils differential testing harness to catch parity drift. Pipeline reads a single pinned uutils revision so generated builtins, the differential harness, and CI all agree on the upstream source of truth (everruns#1529, everruns#1535, everruns#1536, everruns#1537, everruns#1538, everruns#1542). - **Site updates** — Bashkit agent skill is now published on the site, alongside rustdoc guides and content signal declarations for discoverability. ## What's Changed * refactor(builtins): migrate readlink to codegen-ported argument surface (everruns#1542) * chore(site): publish bashkit agent skill (everruns#1541) * chore(site): declare content signals * docs(site): publish rustdoc guides * feat(builtins): add shuf via codegen with helper-fn inlining (everruns#1538) * chore(builtins): pin uutils revision as single source of truth (everruns#1537) * feat(builtins): add truncate via codegen-ported argument surface (everruns#1536) * test(builtins): add coreutils differential testing harness (everruns#1535) * feat(builtins): port uutils argument surfaces via codegen (POC: cat, tac) (everruns#1529) * feat(tool_def): accept --flag key=value... syntax for object/array flags (everruns#1528) * fix(tool_def): coerce stringified JSON for array/object flag schemas (everruns#1527) ## Publish-readiness report Per the updated `specs/release-process.md`: - [x] `cargo fmt --check` clean - [x] `cargo clippy --all-targets --all-features -- -D warnings` clean - [x] `cargo build` clean - [x] Versions synced across `Cargo.toml`, `crates/bashkit-cli/Cargo.toml`, `crates/bashkit-js/package.json`, `package-lock.json`, `Cargo.lock` - [x] `cargo publish --dry-run -p bashkit --allow-dirty` (after CI's monty-strip): **success** - [x] `cargo publish --dry-run -p bashkit-cli`: blocked only on ordering (`bashkit 0.5.0` not yet on crates.io) — resolves at real publish time when `publish-bashkit` runs first per `publish.yml`'s `needs:` chain. - [x] New `0.5.0` > latest published versions on crates.io / PyPI / npm (`0.4.1`). ## Companion change This branch also includes `chore(specs): document publish verification and post-merge monitoring`, codifying the verify-before-tag and watch-after-merge flow that this release follows. On merge, `release.yml` will create the GitHub Release `v0.5.0` and dispatch publish workflows for crates.io, PyPI, npm, and Homebrew. **Full Changelog**: everruns/bashkit@v0.4.1...v0.5.0 --- _Generated by [Claude Code](https://claude.ai/code/session_01SvuLdA8pMAmP4woG2HqxKw)_
chore(release): prepare v0.4.1 (everruns#1525) Patch release `0.4.0` → `0.4.1` to fix the broken crates.io publish from v0.4.0. ## Why v0.4.0 shipped to PyPI, npm, and Homebrew but the **crates.io** publish failed: ``` error: couldn't read `src/../../../docs/clap-builtins.md`: No such file or directory ``` The `clap-builtins` rustdoc guide was at the repo root (`docs/clap-builtins.md`), so `cargo publish` (which packages only the crate directory) couldn't find it. PyPI/npm/Homebrew builds compile from the workspace tree, so they didn't hit this — only crates.io did. ## What - `git mv docs/clap-builtins.md crates/bashkit/docs/clap-builtins.md` to match the rustdoc-guides convention from AGENTS.md. - `crates/bashkit/src/lib.rs`: `include_str!("../../../docs/clap-builtins.md")` → `include_str!("../docs/clap-builtins.md")`. - Workspace version `0.4.0` → `0.4.1` (`Cargo.toml`, `crates/bashkit-cli/Cargo.toml`, `Cargo.lock`). - JS package `0.4.0` → `0.4.1` (`crates/bashkit-js/package.json`, `package-lock.json`). - `CHANGELOG.md` — new `[0.4.1] - 2026-05-04` section. ## Verification - `cargo build -p bashkit --features clap-builtins` — clean - `cargo doc -p bashkit --features clap-builtins --no-deps` — clean - `cargo fmt --check` — clean - `cargo clippy -p bashkit --features clap-builtins -- -D warnings` — clean On merge, `release.yml` will create the GitHub Release v0.4.1 and dispatch publish workflows for crates.io, PyPI, npm, and Homebrew. **Full Changelog**: everruns/bashkit@v0.4.0...v0.4.1 --- _Generated by [Claude Code](https://claude.ai/code/session_01MTiBUK5YiumTRtqjogv9A5)_
PreviousNext