34c10f83c3
The gateway already streams by sending a first partial message and re-editing it as tokens arrive, falling back to that path when an adapter does not support native drafts. The Buzz adapter never implemented edit_message, so it inherited the base stub that returns success=False and every reply was delivered in one block when the turn finished, however long the turn took. buzz-cli already exposes `messages edit` and `messages delete`, so no new mechanism is needed. One detail worth calling out for review: buzz-cli reports a NEW event id for each edit, but the edit TARGET stays the original id, and the stream consumer holds a single message_id for the whole stream. edit_message therefore returns the id it was given rather than the one the CLI reports. Returning the CLI's id would make every edit after the first address a message that was never sent. delete_message is included because the consumer's fresh-final cleanup path calls it when it replaces a preview rather than editing in place. Tested: 10 new cases in tests/gateway/test_buzz_adapter.py covering the edit target, stdin content, the returned id, echo suppression, finalize being inert, both no-op guards, retryable vs non-retryable CLI failures, and delete. The file goes from 33 passing to 6 failing if the adapter change is reverted while the tests stay.