Patch Changes
- 28f4063: Telegram, Discord, Teams, and
chatSdkChannelnow remove a question's or approval's buttons once it's answered and show the outcome, such asApprovedorAnswered: Saturday. This covers pressed buttons, typed replies, and requests withdrawn when a turn is cancelled. Adapters that can't edit messages keep the original prompt. - cdad50a: A follow-up message cancelled before its first model call now keeps its own sender as
ctx.session.auth.current. Previously the cancelled turn reverted to the previous caller, even when the follow-up was anonymous, soturn.cancelledhooks saw the wrong identity. - b842fe0: Discord buttons now answer every pending request when a turn asks more than one at once, such as two questions, two tool approvals, or a question beside an approval. Before, only the first request's buttons reached the session; pressing another request's buttons failed with "the target session was not found via continuation token".
- 440b2f2: Fix Docker sandbox template pruning so
eve devremoves stale template images again, and drop the intermediateeve-sandbox-dockerfileimage once its template is committed. - 8c026ee: Sessions saved before eve 0.64 that used a sandbox no longer fail every sandbox call with
Sandbox session state belongs to provider "undefined"or theSession checkpoint sandbox provider state is incompatiblehandoff error. A sandbox record without a provider is treated as no sandbox, so the next sandbox call starts a fresh one. - 58a68dd: Keep MCP connections over HTTP on the
2026-07-28protocol when the server is slow to answerserver/discover. Previously eve gave up after 1 s and fell back to the legacy handshake, which servers that only speak the new protocol reject withUnsupported protocol version: 2025-11-25. - 5919154: MCP
tools/callrequests whose arguments don't match the tool's input schema now returnstructuredContent.errorwith codeinvalid_input, like every other rejected call, instead of only a text message. - 738c8de: Detect PNG, JPEG, GIF, and WebP files from their bytes in
read_file, so images with missing or incorrect filename extensions remain viewable. Text files are always read as text, even with an image extension, and unreadable binary files now get a clear error. - 6c2e941: Channel route handlers now receive
describe(), which returns the agent's name, description, and the compiled tools a caller can run outside a turn, with their JSON schemas, without the inspection detail ofGET /eve/v1/info. - 073281c: Fix a spurious
toolResultFromidentity warning when one tool definition is mounted under more than one name, such as the code extension'sgreptool in its worker subagent.toolResultFromnow matches results from every name that definition is mounted under. - b842fe0: Pressing a Telegram question button again after the question is answered now sends that option to the agent as a new message, as it does on other channels. Before, the press was acknowledged and dropped. Button presses also act as the person who pressed them instead of an anonymous caller.
- 12ced99: A plain-text message that answers a pending
ctx.ask()question is now recorded asmessage.received, stamped with its delivery id, before theinput.resolvedit produces. Clients rendering from the session stream now show what the person typed, and an optimistic copy of the message reconciles instead of lingering. The answer joins the open turn like a steering message, so the turn's later events carry its delivery id too. Model history is unchanged.