Released 2026-10-29 · Compare with 0.89.0
Breaking Changes
GET /eve/v1/infonow serves only operator principals and returns 403 to end users.
The route answersserviceandruntimeprincipals and callers a configuredlocalDev()admits, and returns403with codeinfo_forbiddento everyone else. To give another credential access, returnprincipalType: "service"from itsAuthFn, orallowAgentInfo: truefrom anEveAuthFn;allowAgentInfo: falsedenies a caller that would otherwise qualify. The payload stays at version 5 with every field, andclient.info()now ignores unknown fields and reads unknown enum strings as"unrecognized", so handle that value when switching on fields such asmodeorsourceKind.kinddiscriminants stay closed, so a new variant needs a version bump. (#5542)- Tool-stub grants on Vercel OIDC subjects move from
vercelOidcto the neweveVercelOidchelper ineve/channels/eve.
vercelOidcandAuthResultfromeve/channels/authnow carry identity only. Rename grant-bearingvercelOidccalls toeveVercelOidc; the options are unchanged.vercelOidcnow throws when asubjectsentry is not a string. Type custom callbacks that returnallowToolStubsasEveAuthFnfromeve/channels/eve. (#5542)
Features
- A connection's
headersandtoolCall.providedArgumentscallbacks now receivectx.approval.responderwhile an approved tool call runs, so an MCP or OpenAPI server can act for the person who approved it.
As in adefineTooltool,ctx.approval.responder.getToken(provider)resolves the approver's token without starting a sign-in. The call still runs as the requester, and itsauthtoken stays the requester's.ctx.approvalis absent for calls that needed no approval and while eve lists the connection's tools. (#5605)
Bug Fixes
eve buildno longer fails withCannot access '<name>' before initializationwhile 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
statefields that a later deploy added to thedefineChannelseed (or to a built-in channel's state), instead of leaving themundefined.
This runs at every step boundary, so a seed field a session deletes fromchannel.statecomes back at the next step. Set the field tonull(orundefined) 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 invalidwhen the model omits an argument whose schema declares anulldefault it does not allow, such as Pydantic's{ "type": "string", "default": null }forx: 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)