github vercel/eve eve@0.70.0

2 hours ago

Minor Changes

  • ddc8e12: A connection sign-in or tool approval now holds the turn open, like a question or task: the stream emits turn.waiting instead of turn.completed and session.waiting, and the same turn resumes once the person acts. Every turn.waiting now carries on: "input" when a person must act, "tasks" when the turn waits on its own work. A message from that person steers the turn and cancels the pending sign-in or approval, messages from anyone else wait for the turn to end, and cancelling the turn withdraws both, so an approval no longer stays answerable after a cancel. A message sent while a session-limit prompt holds the turn waits in that turn and runs once the budget is granted. Slack's sign-in prompt gains a Cancel button.
  • 9553b51: The first local subagent turn now uses its caller's trace; remote turns remain separate roots with dispatch links, and later child turns start new traces. Queries that followed local eve.link.type=agent.dispatch links must use parentSpanId or agent.parent_run.id and agent.parent_call.id; third-party spans receive the conversation ID only when they do not set one.
  • 63f86de: The TUI's --logs and /loglevel modes are now none, error (default), warn, debug, and all, replacing the stderr and sandbox filters. Console warnings retain their severity across local server workers, stay hidden by default, and render yellow when enabled; unclassified output is shown only with all, in neutral styling. Complete log records now commit immediately instead of holding completed turns in the clipped live region.
  • 8aca3d8: Frontend hooks and EveAgentStore now share one conversation client: default hooks return ConversationState (messages plus root turns, input requests, tasks, and agent sessions) instead of EveMessageData, and every snapshot exposes canonical conversation alongside a custom reducer's data. Answers to open input requests are accepted while a turn runs, followSubagents: true follows each agent tool's session into conversation.agents, a held turn stays streaming with turns[turnId].waiting set, and EveAgentStore adds a client option plus compact(), clear(), and retire().

Patch Changes

  • 8aca3d8: A sign-in prompt that eve raises while checking who may answer an approval now includes its attemptId, so clients match the completion to that prompt instead of leaving it open.
  • ddc8e12: A plain connection_search no longer asks the user to sign in: connections they have not authorized appear under unavailable with requiresSignIn: true, and the model signs in to one connection at a time with connection_search({ connection, signIn: true }). A turn waiting on several sign-ins resumes once all of them are done.
  • ac77188: The build now fails when a dynamic remote agent's auth or headers uses a value declared inside the event handler. Before, eve moved the credentials to module scope anyway, so they threw at request time or silently read a same-named module value. Dynamic remote agents imported through an alias or import * as eve now compile their credentials too.
  • 1094e52: Eval results now list the models their steps started with: derived.models on each session holds the distinct model ids in first-use order, and the eval result's derived.models merges them in session order. Only the sessions an eval created or attached are covered.
  • 8aca3d8: The eve dev terminal UI now runs on the shared agent store: the prompt stays open while the agent works, including turns the agent starts on its own, approvals and questions open as soon as they arrive, and slash commands run immediately. Esc or Ctrl+C cancels the running turn instead of steering with queued messages, and an approval or question names the task that asked. While a sign-in is open, the turn bar names the connection it waits for, and a turn cancelled from another client puts its message back in the prompt.
  • 001cc00: Tool, agent, and connection names now read as plain words in activity labels, approval prompts, and the Slack status and task card. An extension or memory namespace before __ is dropped, and sync_accounts or syncAccounts shows as Sync accounts. A connection call shows as Linear: List issues, and its approval asks Approve Linear: List issues? instead of naming connection_execute. Agent calls read as Researcher: Find the March incidents. Labels set with label.start are unchanged.
  • 8aca3d8: Keep a tool's completed result visible when an approval decision arrives after that result. The TUI no longer shows a finished workflow call as interrupted during subsequent turns.
  • 4361876: Extensions mounted inside a contributed subagent can now read the enclosing extension's configuration. Previously the nested mount saw an unbound handle, so deriving its configuration from the parent extension failed with Invalid extension config.
  • 3f6d9cf: eve/nuxt now shares the Next.js dev-server startup: it waits up to 180 seconds by default (configurable with the new devServerTimeoutMs option), ignores non-local URLs in eve's startup output, and prefixes eve's logs with [eve:dev]. Restarting nuxt dev no longer leaves eve requests proxied to a stopped dev server.
  • ddc8e12: Tools and connections that share one Vercel Connect connector now ask the user to sign in once. Before, each tool that called ctx.getToken(connect(...)) and each connection using the same connector posted its own sign-in prompt for the same grant.
  • a79fca4: Task starts in the terminal UI now use ordinary tool-call styling. A bounded activity drawer above the prompt shows readable subagent labels, nested work, and the parent's current state and elapsed time. Activity remains visible above questions and approvals when screen space permits.
  • 4403122: On Vercel, a remote agent's spans now carry its own session ID as vercel.session_id instead of the calling deployment's root session, and its local subagents carry the same ID. Agent Runs in the receiving project lists the remote agent as its own session, with its turns, subagents, and token usage. gen_ai.conversation.id still names the caller's conversation.
  • 384af57: Session workflow steps that only publish events or update session state, such as a workflow tool's progress report, no longer store the conversation history in their Workflow step input, so their stored size stops growing with the conversation. The session handoff checkpoint changed shape, so an idle session does not move between deployments on either side of this release; its current owner keeps running it.
  • ff12e85: session.waiting, turn.waiting, session.failed, and session.completed now carry usage, the session's running token usage and cost including what the agents it delegated to spent. Eval results expose it as derived.usage, per session and summed for the eval, so a delegating eval no longer reports only its own model calls.
  • ddc8e12: A completed sign-in now resumes the turn as the user who started it. Before, when someone else posted in a shared thread while the sign-in was pending, the resumed turn ran as that last speaker and failed with "the service rejected the token immediately after authorization".
  • ddc8e12: Slack now cleans up after a tool approval. Once it resolves, the separate tool-input post is deleted, a direct-message approval's Waiting on approval note in the thread shows the outcome, and the card loses its buttons even when the approval ends without a click. The Checking whether you can respond to this approval… notice is no longer posted, since Slack cannot remove it afterwards.
  • 490ac0d: Slack no longer drops a final reply without a trace. When Slack refuses eve's default reply as too large or malformed, eve uploads it as a Markdown snippet. When a reply still isn't delivered, including when a custom renderer throws, eve posts a short notice with an error id, without the reply, and tells the model on the next message that the user never saw it. Custom renderers can opt in to the same fallbacks by posting through postCompletedSlackReply from eve/channels/slack, which tries their blocks, then native Markdown, then a snippet, using only the content they pass.
  • ddc8e12: Slack now identifies a person by the app installation workspace on both messages and button clicks, as slack:<installation team>:<user>. Before, a Slack Connect or Enterprise Grid user could get one principal from their messages and another from approval clicks, so they were asked to sign in to the same connection again. Their principal changes once with this release, so they sign in to user-scoped connections one more time.
  • 19a2b4f: Slack onMessage now receives only newly posted messages. Edits, deletions, and other system message events go to onEvent, so updating the agent's own HITL card in a DM no longer starts a stray session.
  • 001cc00: Channels can now handle step.started, which fires before each model call in a turn. The default Slack channel uses it to replace a stale thread status when the model starts another step. The status shows Reviewing results... after a task finishes and Thinking... after a tool call. Before, Waiting on 3 tasks... or a finished tool's label lingered until the model streamed its next output.
  • ddc8e12: Slack sign-in prompts now say which service they are for and why. The private message reads Connect Linear: To continue, I need access to your Linear account with a Connect Linear button, and a device code, when the provider issues one, appears as a short hint below the button instead of leading with Use code … when prompted. The thread status names who it is waiting on, as in Waiting for @alice to connect Linear….
  • 8aca3d8: The default message reducer gives assistant text and reasoning parts a stable id across streaming, completion, and replay, and keeps late-arriving participant messages ahead of their turn's response. Authorization parts match completions by attemptId and mark callback-backed sign-ins with awaitsCallback; replayed tool events no longer reopen a settled approval, and rejected tool results render as denied.
  • b3fc842: Pressing a Telegram inline button for an ask_question question now answers it. Since eve@0.65.0 the press was dropped and the agent kept waiting for an answer.
  • e1130dd: Fix generated Web Chat service builds with root-installed pnpm dependencies, and honor Vercel services configuration during project creation instead of prompting to switch to Next.js or eve. Deployment now shows Vercel build logs in the CLI and TUI and provides a command to retrieve them after a failure.

Don't miss a new eve release

NewReleases is sending notifications on new releases.