What's Changed
- 5f5114b fix(tests): assert the truncation marker where it actually lands (#464)
- c22939c fix(tests): correct two model-test defects that blocked the release gate
- ae09e9d fix(mcp): bound stdin writes with poll and a deadline (#418)
- 6feb43f refactor(server): unify chatFailure and responsesFailure into openAIFailure (#437)
- 7c32c61 fix(security): create the chat-history file 0600 before writing prompts into it (#473)
- f45d04f fix(stream): detect a divergent retry instead of splicing two generations (#402)
- d0984ad fix(session): fail loudly when the MCP re-prompt cap is exhausted (#435)
- 68a62f2 fix(cli): drain the pipe before waiting for exit in shellOutput (#433)
- 0a0425e fix(mcp): propagate a failed remote initialized notification (#432)
- 4f8fea9 fix(mcp): move blocking stdio I/O off the cooperative pool (#431)
- 2e06983 fix(responses): emit response.incomplete for truncated streams (#412)
- 530af98 fix(responses): 400 for malformed content, reject image parts (#409)
- 812c3ab fix(validation): reject unknown message roles instead of silently dropping them (#405)
- 6496655 fix(count-tokens): include the prompt in the total when --mcp is used (#399)
- 2350c08 fix(cli): make repeated --messages last-flag-wins (#416)
- 3411200 fix(stdin): reject unreadable and invalid-UTF-8 stdin instead of silently discarding it (#397)
- 5e28529 docs(background-service): stop recommending /tmp/apfel.log as the launchd log path (#466)
- fa0448d fix(core): reject unrepresentable JSON numbers instead of storing null (#455)
- 2ed07f6 fix(benchmark): make measure() rethrow so a failing operation fails the run (#436)
- 8e5cfec fix(tests): run the #213 permit-leak regression in CI (#434)
- d7a4db6 fix(responses): honour the truncation field instead of silently trimming (#391)
- b6f86dc fix(server): reject json_schema when MCP tools are attached (#392)
- e359a2c fix(context): join all system messages into the instructions (#390)
- 1b96455 fix(server): set an HTTP idle timeout so stalled bodies release their permit (#463)
- 6b3b547 fix(logging): gate MCP tool args and results behind --debug (#464)
- c539f13 fix(server): warn on --allowed-origins '*' the way --no-origin-check warns (#465)
- e511da2 fix(server): cap JSON nesting depth in AnyCodable (#462)
- 7cbafa7 fix(output): survive a closed stdout or stderr pipe (#389)
- 8d24ee5 fix(tool-call): do not abort on scalar tool-call arguments (#388)
- 107a20d fix(ci): install Python test deps into a venv, not the system prefix (#477)
- b39659a docs(claude): sync to v1.9.1
Install: brew install apfel
Upgrade: brew upgrade apfel