Minor Changes
- 0248e69: eve now downloads attachment links itself instead of handing them to the model provider. When a channel's
fetchFilereturnsnull, or the channel has none, eve fetches a publichttps:link with the 25 MB upload cap and a 30-second timeout, at most 10 links per message and one at a time, and any other link or failed download reaches the model as a note. A private or expired link, such as a Google Drive file shared in Slack, no longer fails every later model call, and sessions that already hold such a link recover. - 0248e69:
read_filenow shows PDFs up to 20 MiB to the model as files, so the agent can reopen an attached PDF after compaction, or read one that a tool orbashwrote to the sandbox. Its output'simagefield is nowfileand carriespagesfor PDFs.read_filealso refuses images over 8000 pixels per side, which providers reject.
Patch Changes
- b6b353f: A custom channel's
fetchFilecan throwattachmentError(message)fromeve/channelsto tell the model why a file didn't arrive, such as a size limit, while the original error stays in operator logs.fetchFilenow types thesessionit already receives, andeve/channelsexports theFetchFileFunction,FetchFileContext, andFetchFileResulttypes for resolvers written in their own module. - 0248e69: Every attachment now reaches the model with a label that names its sandbox path, including images and PDFs that also arrive as bytes, so the agent can pass a visible file to
bashor open it again. eve checks image and PDF media types against the file's bytes. Only PNG, JPEG, GIF, and WebP images up to 3 MiB and 8000 pixels per side, and PDFs up to 20 MiB, go to the model as bytes, and tool results follow the same rule. A HEIC photo, an oversized screenshot, or a mislabeled file renders as its label instead of failing the model call. Live sessions pay one prompt-cache rewrite after upgrading. - 0248e69: A turn cancelled before its first model call now stages its attachments, so a photo sent just before a follow-up message no longer breaks every later turn. File parts eve can't stage become a note instead of entering session history. Byte-valued file parts cross the queue as
data:URLs, a string with any URL scheme reaches the channel'sfetchFileinstead of being decoded as base64, andmessage.receivedreports an inline file's size instead of echoing itsdata:URL. - caf61ff:
cancel()fromuseEveAgent()andEveAgentStorenow stops a turn that an approval or other input answer resumed. Previously it sent no cancel request and the resumed turn ran to completion.MessageResponse.cancel()on aClientSession.respond()response now targets that resumed turn too. - 351f66d: Memory recalled on
compaction.completedduring a turn now joins history before the turn's latest user message, whereturn.startedrecall goes, instead of after it. The question stays the last user message the model reads, with client context between the recalled memory and the question. Compaction between turns still appends the recall. - 8f50d9d: A connection tool call no longer fails with
Unrecognized keywhen the model sends a key the connection supplies throughtoolCall.providedArguments. eve drops the model's value and the provided value is used, as documented. - b6b353f:
eveChannel()acceptsfetchFile, so a web client can upload a large file to its own storage and send only the URL. eve loads the file inside the workflow step, past the platform's request body limit.defineChannelandeveChanneltake anuploadPolicythat eve now applies to every staged file, including URLs it downloads itself, on the final bytes and their verified media type. Slack, Telegram, and Teams apply their ownuploadPolicythe same way. A file over the cap or of a disallowed type reaches the model as a note. AneveChannelwithuploadPolicyorfetchFilereports its instrumentation kind aschannel:eveinstead ofhttp, as one witheventsalready does. - 66ed5f9: Importing
eve/nextfrom anode -escript, such as the loadervercel devuses fornext.config.*, no longer throwsERR_INVALID_ARG_VALUEfor"[eval]". - 15177c6: Fix a second, never-settling
web_searchpart under AI Gateway. eve no longer streams input for provider tools such asweb_search, so each search shows up once, under the call id it runs and settles with. - 2eb861a:
eve/vueandeve/svelteno longer export the internal session projection typesSessionAuthorization,SessionCall,SessionCallStatus, andSessionProjection, matchingeve/react. UseToolCallStatusandtoolCallState()to read a tool call's status. - 88edd75: just-bash sandboxes now start when the app runs from a different path than the one it was built in. The prepared artifact stores the template key, and eve resolves it under the runtime sandbox cache, so copying
.outputand.eve/sandbox-cacheto a new root no longer fails withSandboxTemplateNotProvisionedError. - dd4374e: Agents that use
mockModelfromeve/evalsnow compile withoutmodelContextWindowTokens. Before, the documented one-linemockModelexample failed with a missing AI Gateway context window error; mock models now default to a 1,000,000-token window. - 85d1fcb: Slack now removes the buttons from every settled tool-approval card when one step posts many approvals. Before, a grouped message could grow past Slack's 50-block limit as cards settled, Slack rejected the update, and settled cards kept their Approve and Cancel buttons. A settled card now shows the outcome and who answered on the card itself instead of in extra lines below it.
- 13998d2: The Slack channel now collects every file posted in a thread since the previous mention of the app, up to 10 messages back, instead of only the newest message's files, so a file shared before a follow-up question reaches the agent. It skips Google Drive, Dropbox, and other remote files, whose links stay in the message text, keeps audio and video attachments, and stops a file download after 30 seconds.
- b56b4ff: A model stream that stops sending output without closing no longer holds the turn forever. After 10 minutes without output eve abandons the stream and retries the model call, and the turn fails normally once retries run out. Time spent running tools does not count toward the timeout. eve now requires
ai7.0.137 or later. - 5d37843: When a failed turn ends the session, built-in channels now post one notice telling the person to start over, instead of a "please try again" notice followed by a "start a new session" notice for the same error.
turn.failedevents now carryterminal: truewhensession.failedfollows (andfalsewhen the session waits for the next message), so custom channel handlers can make the same choice. - 11392bd:
eve link --non-interactive --project <name>andeve deploy --non-interactive --yes --project <name>now link a multi-agent workspace from its root instead of failing with "No eve agent in this directory", so a fresh CI checkout can link and deploy every agent without a prompt.