Minor Changes
-
4a4951e: Tools and connections now share the
Approvalpolicy 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 return
Deliveryreceipts 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 with
defineDynamic(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 or
visibility, and compaction fails if memory capture fails. -
4a4951e: Sends, channels, and schedules now accept eve-owned
MessageContent; 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 with
REMOTE_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: Replace
eve 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 typed
ChannelDeliverypayloads 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's
renderers.taskCardnow receivesTaskCardinstead ofTaskCardView; usecallStateandcallLabelfromeve/eventsfor call rendering. Teams channel state replacespendingAuthActivityIdwithpendingAuthActivityIds. -
4a4951e: Evals now use v27 facts and interaction projections, with call matchers such as
turn.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 in
event.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 the
Interactionmodel, 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 immutable
SessionViewsnapshots 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 same
ctx.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 as
child.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 with
ctx.cancel()takes effect only if the handler returns successfully. - caa9172: The bundled
eve 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 with
convertLegacyEventsfromeve/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.