Skip to content

Tags: adeelahmad/bashkit

Tags

v0.11.0

Toggle v0.11.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
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)_

v0.10.0

Toggle v0.10.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
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.

v0.9.0

Toggle v0.9.0's commit message

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
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)_

v0.8.0

Toggle v0.8.0's commit message
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)_

v0.7.2

Toggle v0.7.2's commit message
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

v0.7.1

Toggle v0.7.1's commit message
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'`.

v0.7.0

Toggle v0.7.0's commit message
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.

v0.6.0

Toggle v0.6.0's commit message
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

v0.5.0

Toggle v0.5.0's commit message
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)_

v0.4.1

Toggle v0.4.1's commit message
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)_