Buffered MCP reads (#54)
MCP stdio transport now uses 4KB buffered reads instead of byte-at-a-time. Reduces syscalls from ~1000 to 1-2 per response. Extracted into a testable BufferedLineReader in ApfelCore with 11 unit tests. Thanks @wyleung!
Split MCP tool execution (#56)
executeMCPToolCalls() split into three focused functions: shared detectAndExecuteMCPTools(), executeMCPToolCallsForCLI(), and executeMCPToolCallsForServer(). Eliminates a hidden if/else dispatch branch. Thanks @wyleung!
Tests
398 total (214 unit + 184 integration), all passing.
Update
brew upgrade apfel