github vercel/eve eve@0.81.0

3 hours ago

Minor Changes

  • e3d1497: Add github.attribution(ctx) to eve/extensions/git and the deprecated code({ github }) config. When it returns a { name, email } co-author, the gh tool ends every gh-signed-commit message and gh pr create body with that person's Co-authored-by trailer.

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.started binding. 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: its DELETE gives 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: false now 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 new authorization.required, and the next turn asks again. authorization.required and authorization.completed now carry grant and the connection principal's identity (no attributes), and a failed authorization.completed carries retryable. A failure without retryable, 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.completed is reported by that call's outcome, just before its action.result: authorized when the call returns, failed (with the error's reason, such as access_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 reporting authorized when its callback arrives.
  • b05d8e5: Connections or tools that share a toolResultFrom fallback 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 a toolResultFrom lookup 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.

Don't miss a new eve release

NewReleases is sending notifications on new releases.