Skip to content

Releases: yonasBSD/bashkit

Release v0.1.14

29 Mar 11:25
7b7e2a0

Choose a tag to compare

Highlights

  • Massive Bash compatibility push — 25+ interpreter fixes covering errexit, namerefs, associative arrays, arithmetic expansion, redirects, glob patterns, and ANSI-C quoting
  • AWK engine hardened — 8 fixes for regex literals, newline handling, printf, keyword tokenization, and multi-file FILENAME support
  • New Bash featuresset -a (allexport), BASH_SOURCE array, exec with command replacement, declare -f, compgen -c PATH scanning
  • Prebuilt CLI binaries — macOS (ARM64/x86_64) and Linux x86_64 binaries now published to GitHub Releases with Homebrew formula
  • Dependency upgrades — jaq 3.0, digest crates 0.11

What's Changed

  • feat(deps): upgrade jaq to 3.0, digest crates to 0.11 (#893) by @chaliy
  • chore(deps): require major version upgrades in maintenance checklist (#892) by @chaliy
  • ci(js): add Bun and Deno to JS CI matrix with runtime-compat tests (#889) by @chaliy
  • fix(interpreter): handle compound array assignment in local builtin (#888) by @chaliy
  • fix(interpreter): expand special variables ($#, $?, etc.) in arithmetic (#887) by @chaliy
  • chore: pre-release maintenance (test counts, fuzz fix, code cleanup) (#885) by @chaliy
  • fix(interpreter): set -e should not trigger on compound commands with && chain failure (#879) by @chaliy
  • fix(interpreter): expand assoc array keys with command substitutions (#878) by @chaliy
  • feat(release): add prebuilt CLI binary builds and Homebrew formula (#871) by @chaliy
  • fix(builtins): preserve raw bytes from /dev/urandom through pipeline (#870) by @chaliy
  • fix(interpreter): resolve namerefs in parameter expansion for assoc array subscripts (#869) by @chaliy
  • fix(interpreter): propagate errexit_suppressed through compound commands (#868) by @chaliy
  • test(parser): unskip parse_unexpected_do and parse_unexpected_rbrace (#866) by @chaliy
  • fix(parser): expand $'\n' ANSI-C quoting in concatenated function args (#865) by @chaliy
  • fix(interpreter): treat assoc array subscripts as literal strings (#864) by @chaliy
  • fix(interpreter): correct left-to-right redirect ordering for fd dup + file combos (#863) by @chaliy
  • fix(parser): handle $'...' ANSI-C quoting in parameter expansion patterns (#856) by @chaliy
  • fix(awk): check word boundary before emitting keyword tokens (#859) by @chaliy
  • fix(builtins): preserve full path in ls output for file arguments (#858) by @chaliy
  • fix(builtins): suppress rg line numbers by default (non-tty behavior) (#857) by @chaliy
  • fix(interpreter): resolve nameref for ${!ref[@]} key enumeration (#855) by @chaliy
  • fix(interpreter): fire EXIT trap inside command substitution subshell (#854) by @chaliy
  • fix(js): update exec security test for sandbox-safe exec behavior (#851) by @chaliy
  • fix(interpreter): reset last_exit_code in VFS subprocess isolation (#850) by @chaliy
  • fix(interpreter): treat invalid glob bracket expressions as literals (#845) by @chaliy
  • fix(awk): support backslash-newline line continuation (#841) by @chaliy
  • fix(awk): treat # inside regex literals as literal, not comment (#840) by @chaliy
  • fix(interpreter): resolve namerefs before nounset check (#839) by @chaliy
  • fix(builtins): sort -n extracts leading numeric prefix from strings (#838) by @chaliy
  • feat(interpreter): implement BASH_SOURCE array variable (#832) by @chaliy
  • fix(awk): treat newlines as statement separators in action blocks (#831) by @chaliy
  • feat(api): add BashBuilder::tty() for configurable terminal detection (#830) by @chaliy
  • fix(awk): accept expressions as printf format string (#829) by @chaliy
  • fix(vfs): preserve raw bytes when reading /dev/urandom (#828) by @chaliy
  • fix(awk): evaluate regex literals against $0 in boolean context (#827) by @chaliy
  • fix(parser): preserve double quotes inside $() in double-quoted strings (#826) by @chaliy
  • fix(interpreter): set -e respects AND-OR lists in functions and loops (#824) by @chaliy
  • test(allexport): add regression tests for set -a behavior (#823) by @chaliy
  • fix(builtins): implement declare -f for function display and lookup (#822) by @chaliy
  • feat(interpreter): nameref resolution for associative array operations (#821) by @chaliy
  • test(awk): add spec tests for delete array (already implemented) (#820) by @chaliy
  • feat(compgen): scan PATH directories for executables in compgen -c (#819) by @chaliy
  • feat(test): configurable -t fd terminal detection (#818) by @chaliy
  • feat(awk): route /dev/stderr and /dev/stdout to interpreter streams (#817) by @chaliy
  • feat(awk): implement FILENAME built-in variable for multi-file processing (#816) by @chaliy
  • feat(interpreter): exec with command argument — execute and don't return (#815) by @chaliy
  • feat(interpreter): implement set -a (allexport) (#814) by @chaliy
  • feat(interpreter): subprocess isolation for VFS script-by-path execution (#813) by @chaliy
  • feat(interpreter): pipe stdin to VFS script execution (#812) by @chaliy
  • refactor(scripted_tool): ScriptingToolSet returns tools() instead of implementing Tool (#789) by @chaliy

Full Changelog: everruns/bashkit@v0.1.13...v0.1.14

Release v0.1.13

23 Mar 07:30
2db057f

Choose a tag to compare

Highlights

  • Community contribution from @achicu: fixed find with multiple paths silently discarding results when one path is missing (#781)
  • Python/Node binding parity — both bindings now expose the same API surface (#785)
  • Live mount/unmount on running Bash instances for dynamic filesystem composition (#784)

What's Changed

  • fix(examples): exit langchain example to prevent NAPI event loop hang (#786) by @chaliy
  • feat(bindings): add Python/Node binding parity (#785) by @chaliy
  • feat(fs): expose live mount/unmount on running Bash instance (#784) by @chaliy
  • chore: add cargo-vet exemptions for jni-sys 0.3.1, 0.4.1 and jni-sys-macros 0.4.1 (#783) by @chaliy
  • fix: find with multiple paths no longer discards results on missing path (#781) by @achicu

Full Changelog: everruns/bashkit@v0.1.12...v0.1.13

Release v0.1.12

22 Mar 12:18
c776525

Choose a tag to compare

Highlights

  • Restored SearchCapable/SearchProvider traits for indexed filesystem search
  • Improved text file handling across 17 builtins with shared lossy read helpers

What's Changed

  • feat(fs): restore SearchCapable/SearchProvider traits (#779)
  • refactor(builtins): adopt read_text_file helper across 17 builtins (#778)
  • chore(skills): move repo skills under .agents (#777)
  • refactor(builtins): share lossy text file reads (#775)

Full Changelog: everruns/bashkit@v0.1.11...v0.1.12

Release v0.1.11

20 Mar 12:55
3eeedbd

Choose a tag to compare

Highlights

  • Second external contribution! Welcome @shubham-lohiya, who exposed the Bash class with Monty Python execution and external function handler in the Python bindings (#760) — making it easy to extend bashkit with custom Python functions
  • Browser terminal example: Bashkit now runs entirely in the browser via WebAssembly (wasm32-wasip1-threads), with a single-file terminal UI — no framework required
  • New features: structured execution trace events, per-instance memory budgets, static AST budget validation, head -c byte mode, IFS separator + $_ tracking, final environment state in ExecResult
  • Security hardening: blackbox security audit surfaced 15 vulnerabilities — all fixed; readonly variable bypass blocked; stack overflow, memory exhaustion, and source recursion depth limits enforced; shell injection prevented in JS VFS helpers
  • Major refactoring: FileSystem split into core + FileSystemExt, shared ArgParser extracted, register_builtins! macro replacing 120+ insert calls, ShellRef Context API, shell options split-brain fix

What's Changed

  • chore: pre-release maintenance — docs, fuzz, threat model, cargo-vet (#774)
  • fix(interpreter): stabilize command-not-found suggestions (#773)
  • refactor: remove blanket clippy::unwrap_used allows (#772)
  • chore: move /ship from command to skill format (#771)
  • refactor(fs): split FileSystem into core + FileSystemExt (#770)
  • refactor(builtins): extract shared ArgParser (everruns#744) (#769)
  • refactor: replace hardcoded if-name dispatch with ShellRef Context API (#767)
  • refactor: break up 6 monster functions into smaller helpers (#766)
  • refactor(interpreter): fix shell options split brain (everruns#736) (#764)
  • refactor(builtins): replace 120+ insert calls with register_builtins! macro (#762)
  • refactor(builtins): move find/xargs/timeout execution plans from interpreter to builtins (#761)
  • feat(python): expose Bash class with Monty Python execution and external function handler (#760) by @shubham-lohiya
  • fix(git): error on non-HEAD revision in git show rev:path (#758)
  • refactor(builtins): extract git_err helper to eliminate 24 identical error wrapping lines (#757)
  • refactor(error): simplify Error enum by merging Parse/ParseAt and removing dead CommandNotFound (#756)
  • refactor(fs): remove dead SearchCapable/SearchProvider traits (#755)
  • fix(vfs): use fs.remove() for patch file deletion instead of empty write (#754)
  • refactor(interpreter): deduplicate declare/local compound assignment and flag parsing (#753)
  • refactor(builtins): extract shared search utilities from grep and rg (#752)
  • refactor: deduplicate is_valid_var_name into single pub(crate) function (#751)
  • refactor(builtins): replace magic variable hack with BuiltinSideEffect enum (#750)
  • chore(skills): add design quality review phase to ship command (#749)
  • refactor(interpreter): extract glob/pattern matching to glob.rs (#748)
  • fix(skills): delegate process-issues shipping to /ship skill (#747)
  • chore: convert process-issues command to .claude/skills/ format (#746)
  • feat: IFS separator, $_ tracking, and prefix assignment order (#724)
  • fix(deps): bump ai SDK to ^5.0.52 and override jsondiffpatch >=0.7.2 (#723)
  • fix(deps): override langsmith >=0.4.6 to fix SSRF vulnerability (#722)
  • fix(js): wrap napi structs in Arc to prevent invalid pointer access (#721)
  • fix: hex escapes, POSIX classes, DEBUG trap, noclobber, indirect arrays (#719)
  • fix(js): prevent shell injection in Bash/BashTool VFS helpers (#718)
  • fix(interpreter): prevent stack overflow in nested command substitution (#717)
  • fix(builtins): bound seq output to prevent memory exhaustion (#716)
  • feat(builtins): add head -c byte count mode (#715)
  • fix(interpreter): reset transient state between exec() calls (TM-ISO-005/006/007) (#714)
  • fix(interpreter): block readonly variable bypass via unset/declare/export (TM-INJ-019/020/021) (#713)
  • fix(interpreter): enforce execution timeout via tokio::time::timeout (TM-DOS-057) (#712)
  • fix(interpreter): source recursion depth limit (TM-DOS-056) (#711)
  • fix(interpreter): declare -a/-i and local -a with inline init (#710)
  • feat(fs): optional SearchCapable trait for indexed search (#709)
  • feat(trace): structured execution trace events (#708)
  • feat(limits): per-instance memory budget for variables/arrays/functions (#707)
  • feat(limits): YAML/template depth limits + session-level cumulative counters (#706)
  • fix(fs): OverlayFs validate_path + directory count limits + accounting gaps (#701)
  • test(python): add advanced security tests for Python integration (#705)
  • test(security): add JavaScript integration security tests (#700)
  • test(security): blackbox security testing — 15 vulnerability findings (#688)
  • fix(security): guard all builtins against internal variable namespace injection (#696)
  • feat(interpreter): return final environment state in ExecResult (#695)
  • feat(parser): static budget validation on parsed AST before execution (#694)

Full Changelog: everruns/bashkit@v0.1.10...v0.1.11