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 features —
set -a(allexport),BASH_SOURCEarray,execwith command replacement,declare -f,compgen -cPATH 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 -ffor 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: v0.1.13...v0.1.14