v0.9.0
Features
- Add
interleavedfield toShellOutput: stdout and stderr merged in arrival order viaLinesStream::merge; primary text block now shows interleaved view;stdoutandstderrremain separate instructuredContentfor structured access (#742) - Add
output_collection_error: Option<String>toShellOutput: distinguishes post-exit drain timeout from size-based truncation (#742) - Emit progress notifications every 5 s for commands with
timeout_secs > 10viaemit_progress()(#742) - Apply
Content.with_priority(0.0)to allexec_commandresponse content blocks (#742) - Add
memory_limit_mbandcpu_limit_secsresource-control parameters toexec_command:RLIMIT_AS(Linux only, with warn on other platforms) andRLIMIT_CPUapplied in the forked child vianix::sys::resource::setrlimit(#733) - Add top-level
Tool.titlefield (MCP 2025-11-25) to all 10 tool annotations (#733)
Bug Fixes
exec_commandnow returnsCallToolResult::error()whentimed_out=trueorexit_code != Some(0), complying with MCP 2025-11-25isErrorsemantics (#739)- Timeout arm now captures buffered output before kill via shared
Arc<Mutex<Vec<u8>>>buffers (#739) - Shell selection prefers
bash:APTU_SHELLenv var >which::which("bash")>/bin/sh, replacing verbatim$SHELLpassthrough that failed on fish/tcsh/nu (#739) - Post-exit drain timeout (500 ms on
child.wait()) handles backgrounded processes that keep pipes open after the main process exits (#739) - Replace sequential stdout/stderr
read_to_endwithtokio::join!concurrent drain, eliminating pipe deadlocks on commands writing more than ~64 KB (#738) - Overflow outputs (>2000 lines) written to
{temp_dir}/aptu-coder-overflow/slot-{seq%8}/{stdout,stderr}; response includes last 50 lines plus a secondContentblock with the overflow file path (#738) - Add
next_start_line: Option<usize>toAnalyzeRawOutput: set toSome(end_line + 1)mid-file,nullat EOF, giving models an unambiguous pagination cursor (#737)
Documentation
- Improve all 10 MCP tool descriptions: add
Returnsclause,Fails ifconditions,git_refnotes, and example queries; remove double-hyphens; apply caveman compression (#732) - Rewrite
analyze_symboltool description andimport_lookup/def_useparameter docs following MCP best-practices Description Scope principle (#729) - Trim READMEs for low maintenance and crates.io compatibility (#743)
Tests
- Add five handler-level integration tests for
exec_commandvia in-process MCP JSON-RPC transport (tokio::io::duplex): structured output, timeout, invalid working dir, nonzero exit, stderr (#730)
Chores
- Fix release workflow: replace
curlwithgh release downloadformcp-publisherbinary fetch (#728) - Fix release workflow: bump
mcp-publisherto v1.7.8 to resolve OIDC audience mismatch (mcp-registry→https://registry.modelcontextprotocol.io) (#727)
Full Changelog: v0.8.1...v0.9.0