github vercel/eve eve@0.90.0

2 hours ago

Released 2026-10-29 · Compare with 0.89.0

Breaking Changes

  • GET /eve/v1/info now serves only operator principals and returns 403 to end users.
    The route answers service and runtime principals and callers a configured localDev() admits, and returns 403 with code info_forbidden to everyone else. To give another credential access, return principalType: "service" from its AuthFn, or allowAgentInfo: true from an EveAuthFn; allowAgentInfo: false denies a caller that would otherwise qualify. The payload stays at version 5 with every field, and client.info() now ignores unknown fields and reads unknown enum strings as "unrecognized", so handle that value when switching on fields such as mode or sourceKind. kind discriminants stay closed, so a new variant needs a version bump. (#5542)
  • Tool-stub grants on Vercel OIDC subjects move from vercelOidc to the new eveVercelOidc helper in eve/channels/eve.
    vercelOidc and AuthResult from eve/channels/auth now carry identity only. Rename grant-bearing vercelOidc calls to eveVercelOidc; the options are unchanged. vercelOidc now throws when a subjects entry is not a string. Type custom callbacks that return allowToolStubs as EveAuthFn from eve/channels/eve. (#5542)

Features

  • A connection's headers and toolCall.providedArguments callbacks now receive ctx.approval.responder while an approved tool call runs, so an MCP or OpenAPI server can act for the person who approved it.
    As in a defineTool tool, ctx.approval.responder.getToken(provider) resolves the approver's token without starting a sign-in. The call still runs as the requester, and its auth token stays the requester's. ctx.approval is absent for calls that needed no approval and while eve lists the connection's tools. (#5605)

Bug Fixes

  • eve build no longer fails with Cannot access '<name>' before initialization while evaluating authored modules whose shared bundle chunks import each other.
    Compile now keeps top-level evaluation in source order. Thanks @blaesild for reporting this and pinpointing the fix in #5514. (#5516)
  • Resumed sessions now fill in top-level channel state fields that a later deploy added to the defineChannel seed (or to a built-in channel's state), instead of leaving them undefined.
    This runs at every step boundary, so a seed field a session deletes from channel.state comes back at the next step. Set the field to null (or undefined) to clear it instead. (#5549)
  • A connection tool call with an approval policy now runs once the sign-in it stopped for completes, instead of failing as if its connection had changed.
    Thanks @exbald for reporting #5564. (#5570)
  • A connection tool call no longer fails with Instance type "null" is invalid when the model omits an argument whose schema declares a null default it does not allow, such as Pydantic's { "type": "string", "default": null } for x: str = None. eve fills schema defaults once, when the call runs, instead of filling them before approval and rejecting them on the second check. (#5510)
  • The GitHub channel now applies the state a later webhook brings to an existing session, so a turn after a push (or a comment after a push) checks out the new PR head instead of the old one, and reacts to the comment that triggered it.
    Thanks @blicksky for reporting this in #1554, and @haydenbleasel for reporting the reaction symptom. (#4874)
  • Messages a schedule sends with to() on Vercel now carry the deployment that ran the schedule, so an idle session they continue hands off to the new deployment like one a route reaches.
    Thanks @dohooo for reporting this in #5598. (#5599)
  • eve dev --agent <name> in an agent workspace now uses the model connection saved by /login.
    Previously the dev host looked for it under the member directory, so a Vercel account sign-in failed every model call with "The model connection is unavailable". Thanks @cnaccio for reporting this in #5505. (#5506)

Don't miss a new eve release

NewReleases is sending notifications on new releases.