Repository navigation
chore(deps): update devdependency eve to ^0.91.0 - #958
Merged
Merged
Conversation
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
3 Skipped Deployments
|
Contributor
|
Important Review skippedBot user detected. To trigger a single review, invoke the
|
@evlog/cli
evlog
@evlog/nuxthub
@evlog/signals
@evlog/telemetry
commit: |
renovate
Bot
force-pushed
the
renovate/eve
branch
from
October 26, 2026 18:29
e390110 to
74a23d6
Compare
renovate
Bot
force-pushed
the
renovate/eve
branch
from
October 26, 2026 18:53
74a23d6 to
d9108c9
Compare
Contributor
|
Thank you for following the naming conventions! 🙏 |
renovate
Bot
force-pushed
the
renovate/eve
branch
from
October 27, 2026 02:19
d9108c9 to
25b61ac
Compare
renovate
Bot
force-pushed
the
renovate/eve
branch
from
October 28, 2026 22:56
25b61ac to
8ce22db
Compare
renovate
Bot
force-pushed
the
renovate/eve
branch
from
October 30, 2026 21:08
d0ce69e to
78b6e7c
Compare
renovate
Bot
force-pushed
the
renovate/eve
branch
from
October 31, 2026 06:13
78b6e7c to
aa81245
Compare
renovate
Bot
force-pushed
the
renovate/eve
branch
from
October 31, 2026 22:04
aa81245 to
e7c36d0
Compare
renovate
Bot
force-pushed
the
renovate/eve
branch
from
November 1, 2026 22:00
e7c36d0 to
24364c6
Compare
renovate
Bot
force-pushed
the
renovate/eve
branch
from
November 2, 2026 15:10
24364c6 to
1337f9c
Compare
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Note
This PR body was truncated due to platform limits.
This PR contains the following updates:
^0.30.8→^0.91.0Release Notes
vercel/eve (eve)
v0.91.0Compare Source
Released 2026-10-30 · Compare with 0.90.0
Breaking Changes
session.clear()now cancels a running turn and every working task before it clears history, instead of waiting for the turn to finish.Previously a clear sent while a turn waited on tasks didn't run until the tasks finished, and never ran if one hung. Tasks a clear stops end with
task.endedoutcome: "cancelled", and no task result the cleared conversation hadn't read reaches the next turn. (#5619)Features
ctx.continue()fromturn.settledand*handlers.Other handlers don't receive it. It continues a completed turn, or a turn the same hook cancelled, and hooks that continue one turn share its next turn. It takes
MessageContentwithsession.send()'scontextand an optionalauth, returns{ queued }synchronously, and yields to any other turn, cancel, clear, or reset that comes first.delivery.admittedrecordssource: { channel, hook }. (#5555)Bug Fixes
bashtool now keeps only the last 50 KiB of each output stream while a command runs, so a verbose command no longer holds its whole stdout and stderr in memory.Very large output no longer fails with
Cannot create a string longer than 0x1fffffe8 characters. Output past the limit is noted asearlier output omitted, as it already was for commands left running.Thanks @mrud for reporting this in #5651. (#5653)
web_searchor programmaticcode_execution, beside a local tool.Anthropic runs that server tool after the local results arrive and returns its result at the start of the next response, so the next request must end on those local results. Until that result arrives, eve now holds a message that steers the turn for one model step, holds changed catalog or skill announcements, sends an empty-response retry's note as a system instruction, and keeps compaction from separating the deferred result from its call or adding a resumption message after the local results. When the result can no longer arrive, because the turn was cancelled, failed, or retried, or a new turn starts, eve answers the server call as one whose outcome is unknown, so the model reads the new message right away.
Thanks @jam3gw for reporting this in #4890. (#4891)
display: "select"request with an optionidlonger than 100 characters now fails with a clear error instead of posting a select whose truncated value came back as an id the request never offered, which dropped or mismatched the user's choice. (#5533)failedinstead of never settling. (#5622)Previously eve published that call a second time, so with the session-event checker on (
eve dev,eve eval, orEVE_CHECK_SESSION_EVENTS=1) the step failed withintroduced-twice, and without it the session log recorded one call introduced twice. (#5648)MODEL_SELECTION_FAILED, even when it arrives before the turn's abort signal fires.Thanks @burn2delete for reporting this and proposing the fix in #4273. (#4274)
Thanks @mrud for reporting this in #5635. (#5642)
A model-written
<!channel>or<url|label>in a prompt or tool input no longer notifies the channel or hides a link's real destination from the approver.Card(...)rendering is unchanged. (#5517)agent/connections/*.tsnow keeps anapprovalwritten as{ request, response, prompt }, so its tools ask for approval and run itsresponsepolicy.Previously only the function form was kept and the object form was dropped, so the connection's tools ran without asking anyone. A malformed
approvalnow fails resolution instead of being ignored. (#5632)A model-written
[docs](https://evil.example)no longer renders as a link whose label hides its destination. The cards useRichTextBlocktext runs, and the message text is sent as plain text. (#5529)ctx.turn.inputkeeps the turn's input after the turn pauses for an approval, a question, a sign-in, or a budget answer.Dynamic values no longer see empty input after the pause, including
auto()if its per-turn memo was invalidated. (#5628)web_fetchnow rejects atimeoutof zero or less as invalid tool input, instead of throwing an opaqueRangeErroror aborting the request immediately. (#5532)evesetup now opens browser URLs on Windows throughrundll32instead ofcmd /c start, so&or|in a URL is no longer interpreted by the shell. (#5522)v0.90.0Compare Source
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 answers
serviceandruntimeprincipals 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)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
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 a
defineTooltool,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)
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 from
channel.statecomes back at the next step. Set the field tonull(orundefined) to clear it instead. (#5549)Thanks @exbald for reporting #5564. (#5570)
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)Thanks @blicksky for reporting this in #1554, and @haydenbleasel for reporting the reaction symptom. (#4874)
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)
v0.89.0Compare Source
Released 2026-10-29 · Compare with 0.88.1
Breaking Changes
messagesnow show only the session's current conversation, so messages from before a clear no longer appear.messagesandtranscriptOf()follow each turn'sfollowsand a completed context change'sselects, asconversation(view)does, and leave out turns outside the conversation. The sessionviewstill holds every retained turn. (#5597)ghtool takes an optionalrepositoryinstead ofpermissions, runs anyghorgitsubcommand, and leaves every access decision togithub.authorize.github.principalTypeis now required and decides whatauthorizereceives:{ argv, auth, owner, repository, token }for"app", and{ argv, auth, repository, token }for"user", whererepositorymay benull. eve no longer matches--repoand other explicit targets against the declared repository or limitsgittofetch,ls-remote,pull, andpush; checkargvinauthorizeif your policy depends on them. (#5595)historypassed tosend(),create(), or the eve channel'sonMessagenow rejects an entry with a field other thanid,role, ortextinstead of dropping it.InvalidSessionHistoryErrornames the entry and its unknown fields. Map stored messages to{ id, role, text }before passing them, so fields a later release accepts never change what an existing caller sends. (#5597)v0.88.1Compare Source
Released 2026-10-29 · Compare with 0.88.0
Features
agent.approval.responder.typeandagent.approval.responder.id, an approved call's tool span records its approver asagent.tool.approver.typeandagent.tool.approver.id, and theinteraction.settledinstrumentation event carries the sameresponder.An approved call runs as the requester, so until now traces showed only the requester and an audit had to read the session stream to find the approver. The responder's id follows the same rule as the turn's principal ids: it is recorded only when the trace policy records both inputs and outputs and the conversation is public or running in development. (#5596)
agent_getnow returns an optionalstatusMessagewhile an invocation isworking.It names the tool call that is running, using the tool's activity label when it has one, so MCP clients can show progress instead of a bare
working. (#5314)Bug Fixes
A
minorchangeset always appears under Breaking Changes, so breaking changes merged with an internal PR title are no longer left out. The 0.86.0 and 0.87.0 notes now include the two breaking changes they missed. (#5588)undicito8.12.3for the security fixes published in8.12.2.A TLS 1.2 server that renegotiates to a certificate for another host now fails the
web_fetchrequest instead of crashing the process. Thanks @pedro757 for reporting this in #5589. (#5591)v0.88.0Compare Source
Release eve@0.88.0 | 2026-10-29 | minor
🚀 Features
git({ github })now requires anauthorizecallback as its only repository access control, dropsorg, and addsprincipalType: "user"to runghcommands with the caller's own GitHub permissions. #5562To migrate, remove
github.organd move the restriction intoauthorize, for exampleauthorize: ({ repository }) => repository.toLowerCase().startsWith("acme/"). Each command still declares oneowner/namerepository; app tokens are scoped to that repository in its owner's installation.With
principalType: "user", theghtool resolves the caller's token throughctx.getToken, so eve signs the caller in once for every repository and again when GitHub rejects the token.Slack channels can add each sender's display name, real name, and email to model-visible message metadata with the new
messageContext.usersoption. #5536users: trueadds names,users: { email: true }adds emails too, andusers: { name: false, email: true }adds emails only. The triggering author's profile is also written tomessage.authorand the default Slack auth attributes. Passresolve(user, next)to own caching around eve'susers.infolookup.Slack message metadata is now grouped into
<sender>,<bot>, and<thread>blocks.sender_typeandsender_idbecometypeandidinside<sender>,bot_user_idandis_mentionedbecomeidandmentionedinside<bot>, and the team, channel, and timestamp fields move into<thread>.Other Changes
See the full list of changes.
Contributors
v0.87.0Compare Source
Released 2026-10-28 · Compare with 0.86.0
Breaking Changes
eve/clienterrors now extend the newEveError(fromeve/clientandeve/sessions) with a stable snake_casecode, andsession.snapshot()now returns the full session state, including the opaqueinboxvalue.Match
SessionNotActiveErroronsession_not_activeorsession_not_readyinstead ofEVE_SESSION_NOT_ACTIVE, expectClientError.codeto behttp_errorwhen the response had none, and narrow withClientError.is(error)and friends instead ofinstanceof. Persist thesessionthatsnapshot()returns as is to keepinboxacross restores. (#5479)eve devandeve remote connectto--show-tools,--show-reasoning,--show-subagents, and--show-connection-auth.The old
--tools,--reasoning,--subagents, and--connection-authdisplay flags are no longer accepted, and rendering defaults are unchanged. Model reasoning effort still uses--reasoningoneve initandeve set model. (#5479)reset()toend()on client sessions, frontend stores/hooks, and channel/Slack handles, and the HTTP retirement endpoint toPOST /eve/v1/session/:sessionId/end(upgrade the server before using the new client).Ending keeps the retired ID: use
newSession()orclient.sessions.create()for a fresh conversation, orclear()to clear context in place; remote-agent and session-history compatibility encodings remain unchanged. (#5479)Agent
modelfields acceptEveLanguageModel,DecisionModelrequires specificationv4, memory providers returnMemoryToolSetinstead of the removedMemoryToolDefinition,TokenUsageis exported fromeve, andeve/instrumentation/otel,eve/channels/linq, andeve/channels/photonexport eve-owned span processor/exporter,LinqWebhookVerifier, andPhotonIMessageWebhookVerifier/PhotonProjectCredentialstypes. Any AI SDK language model or OpenTelemetry processor still type-checks wherever eve accepts one. (#5479)eve/workflowand run/hook operations fromeve/workflow/api, because bareworkflowimports now fail in authored modules.Both entries declare eve-owned types:
start(workflow, args?)takes no options, runs expose onlyrunId,status,returnValue, andcancel(), andgetHookByTokenis removed, so pass a deterministictokentocreateHookand callresumeHook(token, payload). Ambient Workflow types are no longer needed, though existingeve/workflow-modulestsconfig entries can stay through 1.x. (#5479)Pass
customCommandsandfilesystemasJustBashSandbox.environment({ experimental: { customCommands, filesystem } })and import their types, such asJustBashCommandandJustBashFilesystem, fromeve/experimental/sandbox/just-bash. ImportrunDiscordGatewayRelay(formerlyexperimental_runDiscordGatewayRelay) fromeve/experimental/channels/discord/gatewayinstead ofeve/channels/discord/gateway. (#5479)defineWorkspaceAgent,WorkspaceAgentDefinition, andWorkspaceAgentTransportfromeve/experimental/workspaceinstead ofeve.The helper is experimental; workspace layout and
eve/vercelremain stable. (#5479)Export
defineAgent({...})from every localagent.ts(and return it from dynamic subagents), wrap static connections indefineMcpClientConnectionordefineOpenAPIConnection(plain objects no longer default to MCP), and create sentinels only withdefineDynamic(),disableTool(), anddisableRoute(). Move anagent/sandbox.tsthat sits besideagent/sandbox/toagent/sandbox/sandbox.ts. (#5479)isDisabledToolSentinel,isDisabledRouteSentinel,isInstrumentationDisabled,answerFromText,failureOf, and Linear'sdefaultOnAgentSession.Use
failure(view, turnId)fromeve/eventson a folded view, or check rawturn.settledandsession.endedevents foroutcome === "failed". OmitonAgentSessionto keep Linear's default handler. (#5479)reconnect?: false | ReconnectOptions.Replace
streamReconnectPolicy: { reconnect: false }withreconnect: false, movestreamOpenReconnectPolicyfields underreconnect, and renameretryableErrorStatusestoretryableStatuses. TheStreamReconnectPolicyandStreamReconnectRetryPolicytypes are removed in favor ofReconnectOptions. (#5479)compaction.thresholdPercenttocompaction.threshold, which takes a 0–1 fraction.The old key now fails with migration guidance. Set
limits.sessionUsage: falseto disable usage limits, including limits inherited from a parent agent. (#5479)Hidden fields include Slack
taskCards,threadStatus, and the code-channel reply fieldsreplyThreadTsandpendingReplyThreadTs, Chat SDK streaming fields,pendingSignIns, prompt-card fields, and Discord'sinteractionToken(read it from the Discord handle), andTelegramHitlStateis no longer exported.SendTurnPayloadis now exported fromeve/client. (#5479)initialMessagenow accepts Markdown, text, raw blocks, or a card, with optional files uploaded into the root message's thread.Remove unsupported
Modal*,ExternalSelect*,TextInput*,CardJSXElement,CardJSXProps,isCardElement, andcardChildToFallbackTextexports, plus the card builders' JSX-props overloads and their*Props,ContainerProps, andChatElementtypes. Call builders with their data forms such asButton({ id, label }), useCardTextfor labels, native Slack view data for modals, andcardToFallbackTextfor whole cards (see Slack cards). (#5479)read()andwrite()inputs usesignalagain, restoring the pre-0.84.0 contract.Only backends and direct calls using the
abortSignalinput from0.84.xneed updating; memory and tool execution contexts still exposectx.abortSignal. (#5433)Features
servicePrefixsupports manually configured Vercel services and production proxying; it is not a legacy option. (#5479)v0.86.0Compare Source
Released 2026-10-28 · Compare with 0.85.0
Breaking Changes
Old scaffold imports must migrate to
eve/extensions/self-modification/local; the current local and remote extensions and the old-layout migration error remain unchanged. (#5518)Features
EVE_CALLBACK_TRUSTED_ORIGINSnow accepts a leading*.label, such ashttps://*.preview.example.com, so a remote agent can trust preview parents whose deployment URLs change on every deploy.The wildcard matches exactly one subdomain label, and
*.vercel.appand trailing dots are rejected. (#5539)eve init --channel-web-nextjsfromeve init --helpin favor ofeve add channel/web.The flag still works. The README and coding-agent setup instructions now point to
eve add channel/web, which also sets up sign-in. (#5474)dist/CHANGELOG.mdwith a version-pinned link to the full changelog. (#5446)Bug Fixes
x-vss-framework: eveheader. (#5528)Only the turn's own principal can answer a pending
ctx.ask()orask_questionby typing, whether a workflow tool, a subagent or a remote agent asked; another person's text waits and runs as their own turn instead of answering the question under the asker's auth. A typed answer updates the claims onctx.session.auth.current, so itsdelivery.consumedhook and the rest of the turn see the request that sent it. Someone else's button answer still settles the request as its responder. (#4925)v0.85.0Compare Source
Minor Changes
24c6b9f: Client requests now reject redirects by default, including session writes and event streams. Update redirecting base URLs to their final destination, useredirect: "manual"to stop at redirects, or explicitly opt into"follow"only when every redirect destination is trusted.c8328f8: Protected cross-project callbacks now require reciprocal Vercel Trusted Sources and an explicitEVE_CALLBACK_TRUSTED_ORIGINSallowlist on the remote deployment. Callback URLs no longer include the parent's deployment-wide bypass secret; listed origins instead receive the remote's short-lived OIDC credential.5cfec0e: Slack renderers can restyle approval, question, and budget prompt cards with a newinteractionCard(card, next)hook, while eve keeps routing, batching, action IDs, and card updates. Cards now update from the session for every request kind, so a question answered by a typed reply or withdrawn, or a settled budget prompt, no longer keeps live buttons.Breaking changes:
SlackChannelState.pendingApprovalCardsis replaced byinteractionCards. Cards posted before the upgrade keep their buttons.SlackTaskCardis renamed toSlackCardMessage, which bothtaskCardandinteractionCardreturn.Patch Changes
f20a7a1: Bind native Teams activities to the verified Bot Connector token's service URL before dispatch. Connector requests require HTTPS and reject redirects, keeping bearer credentials on the validated destination.4f290a7: Sessions whose deployment runs eve 0.69 through 0.83 now move to a v27 deployment the next time they receive a message while idle, or earlier when a channel prepares them for the next message, instead of staying on their original deployment until they time out. eve compacts the earlier conversation as the session moves, so the model continues from a summary; the stored transcript stays intact, and new turns continue after it. Remembered tool approvals and usage limits start over.0553a67: Keep continuation capabilities out of session lookup and child-interaction failure logs, including capability values embedded in error messages and causes. Failure diagnostics retain correlation fields and non-secret error details.e54f078: Render Teams mention display names and fallback IDs as literal text, preserving names that contain ampersands or angle brackets without changing mention identity.ba52da4: Remove the deprecated internal setup type aliasRunPnpmOptions. Setup tooling should useRunPackageManagerOptions; package-manager command behavior is unchanged.5b8a34b:to(channel, target).send(), Slack'sonEventctx.send(), dynamic schedules'to().send(), and channelreceivehooks now accept the same options asfrom(address).send(), includinghistory,idempotencyKey, andtitle. Slack derives a threadless target's session fromidempotencyKey, and a dynamic schedule's keyed send reaches the session its earlier attempt started, so a retried send no longer starts a second thread or session.6ea94da: SetcodeChannels: trueonslackChannel()to serve Slack code channels as one session per channel. The agent answers un-mentioned messages, replies top-level or in the thread a person wrote in, and follows Slack's session status and stop. The option also adds the code channel scopes and events to the app manifest. A code channel session has no thread:threadTsis empty ornull, andctx.slack.codeChannelmarks it. Address its session with{ channelId, codeChannel: true }inonEventtargets, or withslackCodeChannelContinuationToken(channelId).Two changes also reach agents that don't enable code channels: a cancelled turn now clears the Slack thread status by default, and
SlackSessionTargetis now a union, so code that readstarget.threadTsmust handle the{ channelId, codeChannel: true }variant.SlackHandlealso gains a requiredcodeChannelfield, which affects code that builds a handle by hand.2764e1e: AddopenCodeChannel(ctx, slack, message, { name })toeve/channels/slack, which a tool calls to move the Slack conversation it was called from into a new Slack code channel and continue the work there with the conversation so far. Wrap it in your own tool with your own description and inputs, and pass your Slack channel. It finds the conversation fromctx.channel, so it works when message hooks return their own auth. To write your own variant, Slack receive targets acceptcodeChannel. Message hooks can open a code channel without the model throughctx.openCodeChannel().cb14c32: Reject framework-owned adapter attachment references in HTTP messages and restrict Linq attachment downloads to bounded public HTTPS destinations. Thanks to HackerOne researcher ryota for reporting the attachment-reference boundary issue.412b077: Tools can start or reach sessions on the agent's channels withctx.to(channel, target).send(message, options), the same call route handlers and schedules use, such as forking a conversation into a new Slack thread. Ordinary tools call it directly, and workflow tools call it in a"use step"helper. PassidempotencyKey: `${ctx.session.id}:${ctx.callId}`so a retried call reaches the same session once.ctx.to()throws in a subagent, a root copy, or a remote agent call. Tools also getctx.channel, the calling session's channelkind,continuationToken, andmetadata, as hooks and dynamic resolvers read it.v0.84.1Compare Source
Patch Changes
41916a5: Dynamic models, dynamic subagent configs, andctx.agent(name, { model })overrides now read context windows from the AI Gateway model catalog recorded at build time instead of downloading it at runtime; a model that catalog doesn't list fails until you returnmodelContextWindowTokensor rebuild. Builds no longer carry built-in limits foranthropic/claude-opus-4.7,openai/gpt-5.4, andopenai/gpt-5.4-mini, so a static model needs the catalog, a cached copy, ormodelContextWindowTokensto compile offline.b322096: A compaction that fails during a turn, for example on a provider 429 that outlasts its retries, now fails that turn withMODEL_CALL_FAILEDand leaves the session waiting with its history uncompacted. Previously the error escaped the turn step, so eve replayed the step and then ended the session. Thanks @gshost1 for the report and reproduction in #5350.4276727: Messages a route forwards withctx.to()now carry the deployment and request that accepted them, so an idle session reached that way hands off to the new deployment like one reached withfrom(). Thanks @haydenbleasel for reporting this in #5408.bea10fd: Model calls that AI Gateway rejects with a 402 because it temporarily throttled the credit balance check now retry with backoff. They previously reported "AI Gateway credit balance exhausted", told users to add credits, and parked the session without retrying.105bf60:eve init apps/my-agentnow creates missing parent directories such asapps/instead of failing withENOENTfrommkdtemp. Thanks @otakusboy for reporting this in #5422.5bb6d43: Nuxt apps that call the auto-importeduseEveAgent()now hydrate innuxt dev. Theeve/nuxtmodule pre-bundleseve/vuewith Vite, which previously served its CommonJS dependencies to the browser unbundled and failed withdoes not provide an export named 'getContext'.cb1db12: Sending a message from a web client served over plain HTTP on a host other thanlocalhostno longer fails withcrypto.randomUUID is not a function. Thanks @KingAmo for reporting this in #5415.5458bc4: Reuse signed inbox routing information between client turns when the Workflow SDK and adapter support guarded resumes andEVE_INBOX_HANDLE_SECRETis configured. Refresh stale routing after a confirmed refusal without retrying uncertain deliveries.a5328b4:sandbox.spawn({ stdin: true })returns a process with a writablestdinstream; closing it sends EOF. The Vercel and Docker sandboxes support it, and just-bash and custom providers without stdin support reject the call.66103be:eve devon Windows no longer opens a console window for each Docker command, dev build process, or optional package install. Thanks @satish860 for reporting this in #5291.040519a: The browser client no longer triggers a Content Security Policyevalviolation on pages whosescript-srcomits'unsafe-eval'. eve's bundled Zod now skips itsFunction("")probe and always uses its interpreted parser. Your app's own Zod andz.config()are not affected. Thanks @wasimxyz for reporting this in #5365.v0.84.0Compare Source
Minor Changes
4a4951e: Tools and connections now share theApprovalpolicy contract;approvalKeyandApprovalContext.approvedToolsare removed.once()remembers the latest approval or denial per resolved tool for the session; custom policies must return its decision unchanged to reuse or record consent.4a4951e: Session commands now returnDeliveryreceipts with independentstream()andresult()reads; the eve HTTP message route acceptsidempotencyKeyfor retries within a session's recent-key window. Session creation returns{ session, delivery }when a message is supplied and{ session }otherwise; import shared contracts fromeve/sessions.4a4951e: Public APIs now use eve-owned contracts for history, decisions, channel integrations, and sandboxes; legacy aliases and internal helpers are no longer exported.decidetakessignalinstead ofabortSignaland returns onlyanswersandusage; update other imports using the v27 upgrade guide.4a4951e: Define dynamic capabilities withdefineDynamic(ctx => value)instead of lifecycle maps, and use ordinary functions and schemas instead ofdefineDurableCallbackanddefineDurableSchema. Cache external JSON observations withctx.memo(key, fn).4a4951e: Extension distributions now record the eve version they were built with and a distribution generation instead of per-capability epochs. Extensions built with the old epoch-based manifest must be rebuilt with this release and republished; eve rejects old manifests with rebuild guidance before loading extension code.4a4951e: Recalled memory is supplied to the model outside durable conversation history, and dynamic user instructions are added only when their content changes. Memory no longer supports compaction recall orvisibility, and compaction fails if memory capture fails.4a4951e: Sends, channels, and schedules now accept eve-ownedMessageContent; images use file parts, and Chat SDK'smessageToUserContentis renamed tomessageContentOf. File parts sent throughctx.agent().send()must contain HTTP(S) URLs, not inline bytes or base64.4a4951e:SessionStorereplacesEveAgentStore, and clients and frontend bindings usebaseUrlinstead ofhost. Frontend bindings exposeview,messages, andagentsdirectly with native tool and interaction parts; usefollowWhile(view)instead offollowIdle, andactiveTurn(view)rather than busy status for Stop controls.4a4951e:followAgents: truenow observes child sessions recursively, including workflow-created children, with predicate selection, bounded traversal, and per-session positions and progress.SessionStore.observe()supports headless capture; child readers require source-positioned opening events to verify each hop through its parent.69346ff: Remote agents no longer serve callers on eve 0.66 through 0.68 (remote agent protocol 1), and callers no longer accept remote agents on those releases. Calls in either direction now fail at start withREMOTE_AGENT_PROTOCOL_MISMATCH; upgrade both deployments to the same eve release. The/eve/v1/task-input/:tokenroute is gone. It accepted unauthenticated answers that settled approvals and added turn input as the session's current user.4a4951e: Replaceeve remote invokeand its resumable JSON workflow witheve remote connect --print <prompt>for one-shot requests that print the final assistant text and exit. Interactiveeve remote connectis unchanged; useeve/clientfor scripted multi-turn sessions and input responses.8efe110: eve's default sandbox image is now tagged by its Dockerfile contents instead of the eve version, so upgrading eve reuses existing sandbox templates unless the image itself changed. Expect one template rebuild on the first upgrade to this release.The default sandbox image no longer includes pnpm or pip, which makes it smaller. Install them in your sandbox
preparecallback when your agent needs them: runnpm install -g pnpmfor pnpm, and use a Python virtual environment for pip.4a4951e: The eve HTTP channel now rejects unknown top-level fields on session creation, message, and control requests with HTTP 400 and a list of accepted fields. Correct unsupported options and misspellings instead of relying on them being ignored.4a4951e: Channel delivery hooks now receive typedChannelDeliverypayloads and return replacements; usechannel.statefor state changes.kindHintis removed; use path-derivedchannel:<name>identities,audience()visibility classification, and the renamed CORS options described in the v27 upgrade guide.4a4951e: Slack'srenderers.taskCardnow receivesTaskCardinstead ofTaskCardView; usecallStateandcallLabelfromeve/eventsfor call rendering. Teams channel state replacespendingAuthActivityIdwithpendingAuthActivityIds.4a4951e: Evals now use v27 facts and interaction projections, with call matchers such asturn.waitForToolCall()and renamed helpers such ascalledAgent()andawaitingInput(). TheremoteUrlfield and matcher are removed; use the v27 upgrade guide to migrate legacy assertions.4a4951e: Hooks and channel handlers now receive v27 facts with coordinates inevent.scopeand session state inctx.view. Update channel handlers to(event, ctx)withctx.channel, and migrate instrumentation providers toInstrumentationEvent<K>and the new lifecycle names.4a4951e: Approvals, questions, sign-ins, and budget prompts now share theInteractionmodel, with answers shaped as{ interactionId, optionId?, text? }and approval choicesapprove/deny. Turns pause only for human input, and cancelling an agent task retires it.4a4951e: Remote agents now use protocol 3 and can still relay approvals, questions, and sign-ins from protocol-2 children. Upgrade callers before their remote agents, or both together: protocol-3 children cannot relay human-input requests to older callers.4a4951e: Session streams now use v27 facts, line-based cursors, and immutableSessionViewsnapshots queried througheve/events. Checkpoints require version 18; keep older sessions on their original deployments and follow the v27 upgrade guide before updating event consumers or restoring persisted history.Patch Changes
4a4951e: Deliver concurrent messages to the samectx.agent()session in send order, preventing out-of-order delivery from leaving calls waiting indefinitely for a reply.4a4951e: Parent session streams now record accepted child deliveries aschild.sent; useagentCallActivity(state, callId)fromeve/clientto inspect per-call child activity, including shared turns.4a4951e: An unhandled hook error now fails the running turn instead of only being logged. Cancellation requested withctx.cancel()takes effect only if the handler returns successfully.caa9172: The bundledeve devself-modification subagent is now offered only to the local developer: sessions authenticated bylocalDev()or by the linked project's Vercel development token. Chat users and principals from authored authenticators, including HTTP Basic operators, no longer get the editor and must edit files directly; there is no local authorization override, and callers forwarded by a same-machine tunnel can still get the editor if the channel useslocalDev().4a4951e: Remote child sessions no longer fail solely because the parent has already consumed their result or stopped waiting for it, such as after a lost acknowledgement.4a4951e: Remote session stream proxies now reject unexpected content types and prevent upstream responses from being served as executable content. Error responses with unexpected content types are replaced with generic JSON while preserving the error status.e7453f1: Session callbacks now reach only public addresses. The eve channel rejects callback URLs with a non-HTTP scheme or a loopback host, and callback delivery refuses to connect when a callback hostname resolves to a loopback, private, link-local, or reserved address. Loopback callbacks still work on local development servers (eve devandvercel dev).4a4951e: Built-in channels keep sign-in links and codes out of shared messages; when private delivery is unavailable, they show a credential-free status instead.4a4951e: Interrupted durable steps recover from recorded outcomes without automatically replaying observed tool calls. Exhausted step retries fail the turn without closing the session, but external effects with unrecorded outcomes still require application-level idempotency.4a4951e: v27 deployments can read v26 session history through the v27 client and stream APIs. Convert previously saved legacy events withconvertLegacyEventsfromeve/internal/legacy-events, a temporary migration aid.4a4951e:eve devnow validates session event lines before writing them and rejects lines larger than 8 MiB. SetEVE_CHECK_SESSION_EVENTS=0to disable validation or=1to enable it outside development.v0.83.3Compare Source
Patch Changes
3e96a14: An optimistic message no longer stays in thesubmittedstate when its turn is cancelled or fails before the agent reads it.EveAgentStorenow marks that messagefailed, so it keeps its own text, and later messages reconcile against their own submissions. A steered message the cancelled turn never read now also lets itssend()settle. Thanks @brettcrane for reporting this in #3102.8077f2d: Withotel({ traceChannelRequests: true }), theagent.channel.requestspan now ends when the response body finishes, fails, or is cancelled, not when the route handler returns. Session stream requests no longer logYou can only call end() on a span once.forworkflow.stream.read.connect, and request spans now cover the full streaming time. Thanks @ahcarpenter for reporting this and proposing the fix in #4256.54adf15:chatSdkChannelnow reports failed final reply delivery with an error-id notice and a note to the model, avoids reposting streamed replies, and skips unchanged final edits after state restoration. Thanks @diegojohnsonl for reporting this in #4801.4280d51: A hook that cancels the turn atcompaction.completedno longer drops the compaction's summary call from the session's usage.session.waitingand session limits now count it.181caed: Compaction no longer re-runs on every step when the current user message is most of the context window. After a compaction, eve keeps at most 20,000 tokens of the latest conversation word for word next to the summary, with tool results shortened to 2,000 characters; a current message larger than that keeps its start and end, and the cut-out middle is summarized. A compaction that cannot bring the history under the threshold now fails the session, without retrying the step, with an error that says to start a new session or send a smaller message.cea4eb0: Declarenextas an optional peer dependency, soeve/nexttypes resolve the app's ownnextin pnpm workspaces that install more than onenextversion. Thanks @laugharn for reporting this in #5341.80db4b3: A session started before eve 0.57 now imports on its next message instead of failing withIncompatibleStateLayoutErrorforeve.mode. The import drops the framework context keys that those builds saved and the current build no longer defines. Thanks @sunlanchang for reporting this in #5213.200d2d8:localDev()now refuses requests that a browser sends for another website: a non-loopback request host orOrigin. A web page open in the developer's browser can no longer start sessions or run the agent's tools on aneve devserver, including through DNS rebinding. Frontends served from any loopback host and port still authenticate.243a4a4:localDev()now refusConfiguration
📅 Schedule: (in timezone UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.