Release v0.1.8
Highlights
- Stderr and combined redirects (
2>,2>&1,&>) for real-world script compatibility - ANSI-C quoting (
$'...') and$"..."syntax support - New builtins:
base64,md5sum/sha1sum/sha256sum,find -exec,grep -L/--exclude-dir jqenhancements:setpath,leaf_paths, improvedmatch/scan- Recursive variable deref and array access in arithmetic expressions
awkuser-defined functions,curl -Fmultipart form datatar -C/-Oflags,xargscommand execution- Per-tool-call
timeout_msin ToolRequest - 244 new Oils-inspired spec tests
- 20+ interpreter/parser bug fixes: heredoc pipes, IFS splitting, subshell isolation, exit code truncation, unicode
${#x}, shift builtin, and more
What's Changed
- fix(ci): trigger Python publish workflow on release (#403)
- chore(eval): 2026-02-28 eval run across 5 models with v0.1.7 analysis (#402)
- feat: process remaining issues (#308, #310, #311, #312, #321, #327, #329, #331, #332, #333, #334) (#393)
- chore: add rebase hint to process-issues step 9 (#392)
- fix: reduce skipped spec tests, implement cut/tr features (#309, #314) (#391)
- fix(ci): switch tarpaulin to LLVM engine to fix coverage failures (#390)
- fix: implement var operators, IFS splitting, parser errors, nameref, alias (#389)
- fix(builtins): add jq -R raw input and awk printf parens (#388)
- chore: update pin-project-lite cargo-vet exemption to 0.2.17 (#387)
- feat(builtins): implement find -exec command execution (#386)
- feat(builtins): add grep -L, --exclude-dir, -s, -Z flags (#385)
- feat(builtins): implement jq setpath, leaf_paths, fix match/scan (#384)
- fix(parser): handle heredoc pipe ordering and edge cases (#379)
- fix(interpreter): count unicode chars in ${#x} and add printf \u/\U escapes (#378)
- feat(interpreter): implement stderr and combined redirects (2>, 2>&1, &>) (#377)
- fix(interpreter): isolate subshell state for functions, cwd, traps, positional params (#376)
- chore(specs): document sort/uniq flags, update spec test counts (#375)
- fix(interpreter): split command substitution output on IFS in list context (#374)
- feat(interpreter): implement recursive variable deref and array access in arithmetic (#373)
- feat(parser): implement
$'...' ANSI-C quoting and $ "..." syntax (#371) - fix(interpreter): write heredoc content when redirected to file (#370)
- feat(eval): add OpenAI Responses API provider (#366)
- fix(interpreter): truncate exit codes to 8-bit range (#365)
- fix(builtins): make xargs execute commands instead of echoing (#364)
- chore: add ignored-test review step to process-issues (#363)
- test: add 14 Oils-inspired spec test files (244 tests) (#351)
- feat(tool): add per-tool-call timeout_ms to ToolRequest (#350)
- chore(eval): expand eval suite to 52 tasks, add multi-model results (#349)
- feat(eval): add database, config, and build simulation eval categories (#344)
- feat(tool): list all 80+ builtins in help text (#343)
- fix(wc): match real bash output padding behavior (#342)
- chore(tests): update spec_tests.rs skip count from 66 to 18 (#341)
- refactor(error): add Fromregex::Error impl for Error (#340)
- chore: add /process-issues claude command (#339)
- chore: close verified-not-reproducible issues #279, #282 (#307)
- test: verify issues #275, #279, #282 are not reproducible (#306)
- feat(curl): add -F multipart form data support (#305)
- feat(find): parse -exec flag without erroring (#304)
- feat(awk): add user-defined function support (#303)
- feat(tar): add -C (change directory) and -O (stdout) flags (#302)
- feat(base64): add base64 encode/decode builtin command (#301)
- fix(eval): add /var/log to script_health_check task files (#300)
- fix(eval): accept both quoted and unquoted CSV in json_to_csv_export (#299)
- fix(jq): return ExecResult::err instead of Error::Execution for stderr suppression (#298)
- fix(test): resolve relative paths against cwd in file test operators (#297)
- fix(interpreter): shift builtin now updates positional parameters (#296)
- fix(lexer): handle backslash-newline line continuation between tokens (#295)
- fix(interpreter): forward pipeline stdin to user-defined functions (#294)
- fix(test): trim whitespace in parse_int for integer comparisons (#293)
Full Changelog: v0.1.7...v0.1.8