Repository navigation
v0.27.0
Breaking for struct literals only: ReadFileTool, WriteFileTool and BashTool gain public fields (read_log, max_image_bytes, raw_output). Literals that use ..Default::default() are unaffected. Ships with yoagent-rutis 0.13.0 and yoagent-workers 0.4.0.
Safer built-in tools
- Partial reads:
write_filefromdefault_tools()refuses to overwrite a file it has read only in part (tools::ReadLog, #421). - Parallel edits:
read_file,write_fileandedit_filetake turns on a file, so parallel edits no longer lose one. 32 parallel edits of one file used to leave 1 (#423). - Images:
read_filesends only PNG, JPEG and WebP, typed by content, up to 8000 px and 3.75 MB (with_max_image_bytes). An image a provider refuses would have failed every later request (#423). bash: strips ANSI sequences (with_raw_output(true)keeps them) and names the signal that killed it (#422).edit_file: keeps CRLF line endings, and its "did you mean" snippet is numbered and bounded (#422).
Loop and providers
- Cut-off answers:
on_stopalso judges an answer cut off at the output limit, so a required verifier is no longer bypassed (#423). - Unanswered tool calls (a failed, cancelled or killed run) are answered when the next run starts, as "not run" or "outcome unknown", and never re-run.
continue_loopused to panic on such a history (#424). - Images on OpenAI-compatible APIs: images from tool results now reach OpenAI-compatible models in a user message. OpenAI used to answer 400, and DeepSeek ignored the image (#424).
ModelConfig::with_image_input(false): a text-only model gets a note in place of each image (#424).- Gemini:
RECITATIONis a refusal, not a cut-off (#423). - Opt-in:
SubAgentTool::with_max_depthandAgent::with_max_retry_after(#422). - Library principles written down in
CLAUDE.mdanddocs/design-philosophy.md(#420).
Full list: CHANGELOG.md.