Minor Changes
- e3d1497: Add
github.attribution(ctx)toeve/extensions/gitand the deprecatedcode({ github })config. When it returns a{ name, email }co-author, theghtool ends everygh-signed-commitmessage andgh pr createbody with that person'sCo-authored-bytrailer.
Patch Changes
- 5c53f1f: An approval answer that is neither Approve nor Cancel now gets feedback instead of being dropped, and a repeated answer to an approval that was already decided is discarded before the requester check, so it no longer warns whoever's delivery carried it.
- 4bc7106: Stop reading the parent session's event stream once the remote subagent stream route finds the child's
agent.startedbinding. Opening a remote subagent stream no longer replays the rest of a long parent session on every request and retry. - 932a561: MCP connections close their remote session when the step that opened it ends, instead of leaking one session per step until the process exits. A step that ends while its connection is still connecting, or a sign-in that finishes after its step, can still leave one session open. HTTP MCP connections keep at most one inbound SSE stream per session: the stream opens only after the session exists, and reconnecting never opens a second one while a stream is attached, so servers that allow a single stream no longer answer
409. Ending a session is bounded best effort: itsDELETEgives up after 5 seconds, so a server that stops answering doesn't stall the step. - 5c53f1f: The first answer to a tool approval now decides it. A repeated answer, for example from a double click, no longer leaves the session waiting when the tool has an approval response policy, and no longer overrides an earlier answer when it doesn't: Cancel followed by Approve stays cancelled. The note sent with the deciding answer, such as why it was cancelled, still reaches the model. An unauthenticated answer to a call that has a requester is rejected with feedback instead of settling it, so it can't pre-empt the requester's own answer. When the call has no requester, an unauthenticated answer is recorded as the anonymous principal that
none()gives unauthenticated callers. - 86b9c42: Resolve MCP credentials before each request so live clients use refreshed tokens after expiry. Retry a rejected bearer once through the token provider before requesting sign-in, while preserving existing permission errors.
- 0d45099: Pressing a human-in-the-loop button whose session is no longer active, for example after its run was cancelled outside eve, now retires the prompt the same way on Slack, Teams, Telegram, Discord, and Chat SDK: its buttons are replaced with
No longer active, as a resolved prompt reads, and the person who pressed is told to send a new message: privately on Slack, Discord, Chat SDK and Telegram, and on Teams by the retired card itself, or the reply to an invoke. Before, the press was only logged (or, on Chat SDK, thrown) and the prompt stayed live. - c1a6fb1: A sign-in that fails with
retryable: falsenow stops the turn from starting the same sign-in again. A later tool call in the same turn that needs the same grant for the same principal gets that failure back instead of a newauthorization.required, and the next turn asks again.authorization.requiredandauthorization.completednow carrygrantand the connection principal's identity (no attributes), and afailedauthorization.completedcarriesretryable. A failure withoutretryable, from an older eve, is treated as retryable. - 6210b1d: A call a sign-in stopped now waits in its step and runs itself once the sign-in calls back, instead of the model being asked again.
authorization.completedis reported by that call's outcome, just before itsaction.result:authorizedwhen the call returns,failed(with the error'sreason, such asaccess_denied) when it throws. Steering a held turn fails the waiting call and declines its sign-in, and cancel stops it with the turn. A turn needing a sign-in now makes one model call fewer. A session already waiting on a sign-in when this ships keeps reportingauthorizedwhen its callback arrives. - b05d8e5: Connections or tools that share a
toolResultFromfallback identity, such as two MCP connections with the same URL and description, no longer log the "could not assign a unique toolResultFrom identity" warning at startup. eve now warns once, only when atoolResultFromlookup actually needs that ambiguous fallback. - 63b1daa: Concurrent builds that need the same new Vercel sandbox template no longer fail with a 400 "sandbox with the name already exists" error. Each build now prepares its template in a private, non-persistent sandbox and records the finished snapshot under the shared template name only after the snapshot exists, so a build that fails, is killed, or times out never leaves half-prepared work where another build would reuse it.