eve 0.52.4 → 0.53.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/src/cli/commands/init-agent-workspace.d.ts +2 -0
  3. package/dist/src/cli/commands/init-agent-workspace.js +1 -1
  4. package/dist/src/cli/commands/init-install.d.ts +8 -0
  5. package/dist/src/cli/commands/init-install.js +1 -0
  6. package/dist/src/cli/commands/init.d.ts +3 -4
  7. package/dist/src/cli/commands/init.js +1 -1
  8. package/dist/src/cli/dev/tui/message-queue.js +1 -1
  9. package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
  10. package/dist/src/cli/run.js +2 -2
  11. package/dist/src/cli/telemetry/index.d.ts +3 -0
  12. package/dist/src/cli/telemetry/index.js +1 -1
  13. package/dist/src/compiled/.vendor-stamp.json +17 -16
  14. package/dist/src/compiled/@ai-sdk/anthropic/index.d.ts +23 -2
  15. package/dist/src/compiled/@ai-sdk/anthropic/index.js +2 -4
  16. package/dist/src/compiled/@ai-sdk/google/index.d.ts +145 -33
  17. package/dist/src/compiled/@ai-sdk/google/index.js +10 -7
  18. package/dist/src/compiled/@ai-sdk/mcp/index.d.ts +176 -7
  19. package/dist/src/compiled/@ai-sdk/mcp/index.js +1 -1
  20. package/dist/src/compiled/@ai-sdk/openai/index.d.ts +71 -40
  21. package/dist/src/compiled/@ai-sdk/openai/index.js +8 -8
  22. package/dist/src/compiled/@ai-sdk/otel/index.js +1 -1
  23. package/dist/src/compiled/@ai-sdk/provider/index.d.ts +225 -3
  24. package/dist/src/compiled/@ai-sdk/provider-utils/index.d.ts +220 -151
  25. package/dist/src/compiled/@workflow/core/create-hook.d.ts +3 -0
  26. package/dist/src/compiled/@workflow/core/index.js +2 -2
  27. package/dist/src/compiled/@workflow/core/private.js +1 -1
  28. package/dist/src/compiled/@workflow/core/runtime/resume-hook.d.ts +59 -7
  29. package/dist/src/compiled/@workflow/core/runtime/run.d.ts +42 -0
  30. package/dist/src/compiled/@workflow/core/runtime/start.d.ts +31 -1
  31. package/dist/src/compiled/@workflow/core/runtime.d.ts +2 -2
  32. package/dist/src/compiled/@workflow/core/runtime.js +2 -2
  33. package/dist/src/compiled/@workflow/core/serialization.d.ts +22 -0
  34. package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
  35. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  36. package/dist/src/compiled/@workflow/errors/index.d.ts +37 -3
  37. package/dist/src/compiled/@workflow/errors/index.js +1 -1
  38. package/dist/src/compiled/@workflow/world/attributes-validation.d.ts +68 -0
  39. package/dist/src/compiled/@workflow/world/index.d.ts +1 -1
  40. package/dist/src/compiled/@workflow/world/interfaces.d.ts +21 -0
  41. package/dist/src/compiled/@workflow/world-local/index.js +5 -5
  42. package/dist/src/compiled/@workflow/world-vercel/index.js +3 -3
  43. package/dist/src/compiled/_chunks/workflow/attribute-changes-C6H-fRVP.js +20 -0
  44. package/dist/src/compiled/_chunks/workflow/dist-DDeH-1ER.js +40 -0
  45. package/dist/src/compiled/_chunks/workflow/dist-DhncQSl7.js +74 -0
  46. package/dist/src/compiled/_chunks/workflow/{dist-BIO9Inoc.js → dist-xTushGCp.js} +1 -1
  47. package/dist/src/compiled/_chunks/workflow/frames-DsEqSDes.js +3 -0
  48. package/dist/src/compiled/_chunks/workflow/{private-aXEeo0fU.js → private-CFJkQA7R.js} +1 -1
  49. package/dist/src/compiled/_chunks/workflow/resume-hook-BRDLAb67.js +1 -0
  50. package/dist/src/compiled/_chunks/workflow/run-BM2OFphk.js +1 -0
  51. package/dist/src/compiled/_chunks/workflow/sleep-6cG0F99-.js +1 -0
  52. package/dist/src/compiled/_chunks/workflow/{ws-transport-M7uk8HV8.js → ws-transport-DuK82LLz.js} +1 -1
  53. package/dist/src/compiler/extension-compatibility.d.ts +7 -6
  54. package/dist/src/compiler/extension-compatibility.js +1 -1
  55. package/dist/src/compiler/manifest.js +1 -1
  56. package/dist/src/compiler/normalize-agent-config.js +1 -1
  57. package/dist/src/compiler/normalize-manifest-helpers.js +1 -1
  58. package/dist/src/context/dynamic-model-lifecycle.js +1 -1
  59. package/dist/src/context/keys.d.ts +11 -2
  60. package/dist/src/context/keys.js +1 -1
  61. package/dist/src/evals/mock-model.js +1 -1
  62. package/dist/src/evals/runner/run-evals.d.ts +1 -1
  63. package/dist/src/evals/runner/run-evals.js +1 -1
  64. package/dist/src/execution/activity-cohort.d.ts +20 -0
  65. package/dist/src/execution/activity-cohort.js +1 -0
  66. package/dist/src/execution/authorization-callback-match.d.ts +1 -0
  67. package/dist/src/execution/authorization-callback-match.js +1 -1
  68. package/dist/src/execution/cancelled-model-call-batch.d.ts +15 -0
  69. package/dist/src/execution/cancelled-model-call-batch.js +1 -0
  70. package/dist/src/execution/coordination-dispatch-shared.js +1 -1
  71. package/dist/src/execution/model-call-batching.d.ts +11 -0
  72. package/dist/src/execution/model-call-batching.js +1 -0
  73. package/dist/src/execution/parked-delivery-wait.js +1 -1
  74. package/dist/src/execution/session-activity-projection.d.ts +2 -0
  75. package/dist/src/execution/session-activity-projection.js +1 -1
  76. package/dist/src/execution/skills/instructions.js +1 -1
  77. package/dist/src/execution/tools/sleep-workflow.js +1 -1
  78. package/dist/src/execution/tools/subagent/invoke-agent.d.ts +5 -5
  79. package/dist/src/execution/tools/subagent/invoke-agent.js +1 -1
  80. package/dist/src/execution/tools/subagent/start.js +1 -1
  81. package/dist/src/execution/tools/workflow/body.js +1 -1
  82. package/dist/src/execution/turn-workflow.js +1 -1
  83. package/dist/src/execution/wire/session-inbox-resume.js +1 -1
  84. package/dist/src/execution/workflow-steps.d.ts +1 -1
  85. package/dist/src/execution/workflow-steps.js +1 -1
  86. package/dist/src/harness/approval-delivery-coordinator.js +1 -1
  87. package/dist/src/harness/authorization.d.ts +1 -0
  88. package/dist/src/harness/authorization.js +1 -1
  89. package/dist/src/harness/compaction.js +1 -1
  90. package/dist/src/harness/current-messages.d.ts +8 -2
  91. package/dist/src/harness/current-messages.js +1 -1
  92. package/dist/src/harness/hitl/approval-input-requests.js +1 -1
  93. package/dist/src/harness/input-requests.js +1 -1
  94. package/dist/src/harness/pending-input-batches.d.ts +4 -0
  95. package/dist/src/harness/pending-input-batches.js +1 -1
  96. package/dist/src/harness/tool-loop.js +2 -2
  97. package/dist/src/harness/turn-client-context.d.ts +1 -1
  98. package/dist/src/internal/application/package.js +1 -1
  99. package/dist/src/internal/authored-definition/core.js +1 -1
  100. package/dist/src/internal/authored-package-boundary.js +1 -1
  101. package/dist/src/internal/mock-model-identity.d.ts +2 -0
  102. package/dist/src/internal/mock-model-identity.js +1 -0
  103. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
  104. package/dist/src/internal/workflow-bundle/authored-workflow-directives.js +1 -1
  105. package/dist/src/public/tools/index.d.ts +1 -0
  106. package/dist/src/public/tools/index.js +1 -1
  107. package/dist/src/runtime/resolve-agent.js +1 -1
  108. package/dist/src/self-modification/agent.d.ts +2 -2
  109. package/dist/src/self-modification/agent.js +1 -1
  110. package/dist/src/self-modification/config.d.ts +15 -0
  111. package/dist/src/self-modification/config.js +1 -1
  112. package/dist/src/self-modification/extension/extension.d.ts +3 -0
  113. package/dist/src/self-modification/extension/extension.js +1 -1
  114. package/dist/src/self-modification/setup.d.ts +3 -0
  115. package/dist/src/self-modification/setup.js +25 -4
  116. package/dist/src/setup/integrations/self-modification/setup.js +1 -1
  117. package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
  118. package/dist/src/setup/scaffold/create/project.js +2 -2
  119. package/dist/src/setup/scaffold/update/web-options.js +1 -1
  120. package/dist/src/shared/agent-definition.d.ts +11 -2
  121. package/dist/src/tasks/delivery-context.d.ts +2 -2
  122. package/dist/src/tasks/delivery-context.js +2 -18
  123. package/dist/src/tasks/delivery-policy.js +1 -1
  124. package/dist/src/tools/durable-callbacks.d.ts +18 -1
  125. package/dist/src/tools/durable-callbacks.js +1 -1
  126. package/dist/src/tools/workflow-definition.d.ts +38 -4
  127. package/docs/agent-config.md +44 -8
  128. package/docs/channels/overview.mdx +2 -0
  129. package/docs/channels/slack.mdx +2 -0
  130. package/docs/concepts/execution-model-and-durability.mdx +20 -2
  131. package/docs/evals/running.mdx +3 -1
  132. package/docs/guides/dev-tui.md +11 -11
  133. package/docs/guides/dynamic-capabilities.md +36 -1
  134. package/docs/guides/instrumentation.md +3 -2
  135. package/docs/instructions.mdx +1 -1
  136. package/docs/reference/cli.md +1 -1
  137. package/docs/reference/telemetry.md +1 -1
  138. package/docs/reference/typescript-api.md +36 -35
  139. package/docs/subagents/index.mdx +1 -1
  140. package/docs/tools/overview.mdx +4 -2
  141. package/docs/tools/workflows.mdx +15 -10
  142. package/package.json +17 -17
  143. package/dist/src/compiled/_chunks/workflow/attribute-changes-DpruylJZ.js +0 -20
  144. package/dist/src/compiled/_chunks/workflow/dist-ChzQSWQA.js +0 -65
  145. package/dist/src/compiled/_chunks/workflow/dist-veFIAdWV.js +0 -40
  146. package/dist/src/compiled/_chunks/workflow/frames-DKxlMf3X.js +0 -3
  147. package/dist/src/compiled/_chunks/workflow/resume-hook-DWDi_wCN.js +0 -1
  148. package/dist/src/compiled/_chunks/workflow/run-vsAdI41O.js +0 -1
  149. package/dist/src/compiled/_chunks/workflow/sleep-BKxoNDRv.js +0 -1
@@ -16,7 +16,7 @@ eve eval --timeout 60000 # per-eval timeout in milliseconds
16
16
  eve eval --max-concurrency 4 # cap concurrent eval executions (default 8)
17
17
  eve eval --junit .eve/junit.xml # write JUnit XML
18
18
  eve eval --list # print discovered evals without running
19
- eve eval --verbose # stream per-eval t.log lines to stdout
19
+ eve eval --verbose # stream per-eval logs and workflow run IDs
20
20
  eve eval --json # machine-readable output
21
21
  eve eval --skip-report # skip config and eval-defined reporters (e.g. Braintrust)
22
22
  ```
@@ -37,6 +37,8 @@ An eval that calls `t.skip(reason)` is reported as skipped, does not count as pa
37
37
 
38
38
  `eve eval --json` flushes the complete report before exiting, including when stdout is piped to another process or redirected to a file.
39
39
 
40
+ With `--verbose`, eve prefixes each line with its eval ID. It streams authored `t.log()` lines as they occur, then prints the workflow run ID for every captured primary and secondary session. Use those `wrun_...` IDs to find the corresponding runs in your workflow provider.
41
+
40
42
  ## Artifacts
41
43
 
42
44
  Each run drops artifacts under `.eve/evals/<timestamp>/`: a run `summary.json`, a `results.jsonl` index, and per-eval assertion results, verdicts, captured event streams, and `t.log` lines under `evals/`. The console output stays tight on purpose; when an eval fails, the artifact has the full story.
@@ -59,17 +59,17 @@ The UI installs planner selections in order and offers deployment once after the
59
59
 
60
60
  Type a message and press `Enter` to send it. When the agent asks a question or requests tool approval, respond in the prompt shown by the UI. Connection authorization can open a browser; keep local `eve dev` running until the browser returns to it.
61
61
 
62
- While a turn is running, `Enter` queues a follow-up message. Press `Esc` or `Ctrl+C` to cancel the turn; when messages are queued, this uses the oldest queued message as the next turn instead. At an idle prompt, press `Ctrl+C` twice to exit.
63
-
64
- | Key | Action |
65
- | ------------- | ----------------------------------------------------------------------------------- |
66
- | `Enter` | Send the current message or answer. |
67
- | `Shift+Enter` | Insert a newline. Requires a terminal that reports modified keys. |
68
- | `Esc` | Cancel a running turn, or steer with the oldest queued message. |
69
- | `Ctrl+C` | Cancel or steer during a turn; clear input, then exit on a second press, when idle. |
70
- | `↑` / `↓` | Move through input lines or sent-message history. |
71
- | `Ctrl+L` | Cycle log display modes. |
72
- | `Ctrl+R` | Redraw the screen. |
62
+ While a turn is running, `Enter` queues a follow-up message. Press `Esc` or `Ctrl+C` to cancel the turn; when messages are queued, this uses the oldest queued message as the next turn instead. If a direct cancellation requested with `/cancel` or `Ctrl+C` does not settle, press `Ctrl+C` to stop waiting. The UI then returns to the prompt and asks you to press `Ctrl+C` again to exit. At an idle prompt, press `Ctrl+C` twice to exit.
63
+
64
+ | Key | Action |
65
+ | ------------- | ----------------------------------------------------------------------------------------------------------------------- |
66
+ | `Enter` | Send the current message or answer. |
67
+ | `Shift+Enter` | Insert a newline. Requires a terminal that reports modified keys. |
68
+ | `Esc` | Cancel a running turn, or steer with the oldest queued message. |
69
+ | `Ctrl+C` | Cancel or steer during a turn; stop a pending cancellation, then exit on the next press; press twice to exit when idle. |
70
+ | `↑` / `↓` | Move through input lines or sent-message history. |
71
+ | `Ctrl+L` | Cycle log display modes. |
72
+ | `Ctrl+R` | Redraw the screen. |
73
73
 
74
74
  ## Logs and traces
75
75
 
@@ -253,7 +253,42 @@ Write callback properties as inline function expressions, arrows, method shortha
253
253
 
254
254
  Closure values must be JSON-serializable. Plain objects, arrays, strings, finite numbers, booleans, and `null` are supported; `undefined` object properties are omitted. Functions, class instances, `Date`, `Map`, symbols, non-finite numbers, and cyclic values fail resolution with the tool name and callback phase instead of being serialized lossily.
255
255
 
256
- Call expressions such as `execute: makeExecutor()` are not transformed. Put the callback body directly in `defineTool()` inside an authored module; eve-provided factories, including [memory provider tools](../memory), may also supply pre-registered callbacks. eve rejects a dynamic tool if any present callback lacks durable metadata.
256
+ Call expressions such as `execute: makeExecutor()` are not transformed. Put the callback body directly in `defineTool()` inside an authored module; eve rejects a dynamic tool if a callback lacks durable metadata.
257
+
258
+ ### Create dynamic tools in a package
259
+
260
+ Prefer an [extension](../extensions) for reusable eve integrations. Extensions contribute a namespaced set of capabilities that consumers can override. Author the final `defineTool()` calls in the extension source. Then build the package with `eve extension build` so eve transforms its callbacks.
261
+
262
+ Use `defineDurableCallback` when a provider package must return dynamic `defineTool()` values directly. eve cannot transform callback code inside an installed dependency. Put every per-tool value in the helper's `closure`. The callback receives that snapshot as its first argument. The closure follows the same JSON-serializability rules as transformed captures.
263
+
264
+ ```ts title="provider-package/search.ts"
265
+ import { defineDurableCallback, defineTool } from "eve/tools";
266
+ import { z } from "zod";
267
+
268
+ interface SearchInput {
269
+ query: string;
270
+ }
271
+
272
+ export function createSearchTool(baseUrl: string) {
273
+ return defineTool({
274
+ description: "Search the provider catalog.",
275
+ inputSchema: z.object({ query: z.string() }),
276
+ execute: defineDurableCallback({
277
+ closure: { baseUrl },
278
+ callback: async ({ baseUrl }, { query }: SearchInput) => {
279
+ const response = await fetch(`${baseUrl}/search?q=${encodeURIComponent(query)}`);
280
+ return response.json();
281
+ },
282
+ }),
283
+ });
284
+ }
285
+ ```
286
+
287
+ Wrap every callback property with the helper. This includes labels, approval policies, `approvalKey`, `execute`, and `toModelOutput`.
288
+
289
+ `closure` is the callback's only durable snapshot. Store the identifiers and configuration needed to reproduce the call there. Reconstruct clients or look up live runtime state when the callback runs. The callback may call stable imported functions, but it must not capture runtime objects outside `closure`. Those values disappear on a cold start.
290
+
291
+ eve-provided factories, including [memory provider tools](../memory), use the same durable callback mechanism.
257
292
 
258
293
  ### Identity and redeploys
259
294
 
@@ -69,8 +69,9 @@ Instrumentation providers receive `channel.delivery.started` followed by
69
69
  `channel.delivery.failed` for every inbound channel operation. The lifecycle
70
70
  covers durable processing through the terminal state of the resulting turn, not
71
71
  messages an adapter sends back to Slack, Telegram, Twilio, or another platform.
72
- Several deliveries can coalesce into one turn while retaining separate lifecycle
73
- pairs, and an adapter can consume a delivery without starting a turn.
72
+ Adjacent queued messages with matching authenticated identities and authorization
73
+ attributes can share a turn while retaining separate lifecycle pairs. An adapter
74
+ can also consume a delivery without starting a turn.
74
75
 
75
76
  Each operation has a framework-owned `deliveryId` distinct from its optional
76
77
  platform request ID. Metadata-only providers receive identity, channel, session,
@@ -86,7 +86,7 @@ See [Dynamic capabilities](./guides/dynamic-capabilities) for examples and failu
86
86
 
87
87
  [Compaction](./concepts/sessions-runs-and-streaming#compact-clear-and-reset) treats user-role instructions like ordinary conversation history, so a summary may replace their original text. Clear removes them with the rest of model-message history and does not rerun static or dynamic instructions. System-role instructions remain because they are outside history.
88
88
 
89
- Keep system-role content stable and place it before frequently changing context when practical. That gives providers the best opportunity to reuse a prompt prefix, but cache behavior and billing remain provider-specific. User-role instructions preserve the normal append-only message prefix. Framework context such as dynamic skill announcements also keeps its position before the current request across tool steps, including when a durable step resumes. eve does not promise a cache hit.
89
+ Keep system-role content stable and place it before frequently changing context when practical. That gives providers the best opportunity to reuse a prompt prefix, but cache behavior and billing remain provider-specific. User-role instructions preserve the normal append-only message prefix. Framework announcements about available skills and background tasks are retained in user-role history: changed snapshots append after earlier steps instead of replacing the context sent with those steps. Unchanged announcements are skipped until history is cleared or compacted. eve does not promise a cache hit.
90
90
 
91
91
  ## Disclaimer
92
92
 
@@ -372,7 +372,7 @@ Runs all discovered evals when no eval ids are given; ids match exactly or by di
372
372
  | `--json` | flag | off | Output results as JSON |
373
373
  | `--junit <path>` | string | none | Write JUnit XML results to a file |
374
374
  | `--skip-report` | flag | off | Skip eval-defined reporters (e.g. Braintrust) |
375
- | `--verbose` | flag | off | Stream per-eval `t.log` lines to stdout |
375
+ | `--verbose` | flag | off | Stream per-eval logs and workflow run IDs to stdout |
376
376
 
377
377
  See [Evals](../evals/overview) for authoring evals.
378
378
 
@@ -12,7 +12,7 @@ eve collects usage data from its CLI to help improve its commands and developmen
12
12
  eve sends the following information to Vercel:
13
13
 
14
14
  - The eve version, operating system, CPU architecture, and whether stdin is a terminal.
15
- - The command you ran, its outcome, and setup or onboarding steps when applicable.
15
+ - The command you ran, its outcome, and setup or onboarding steps when applicable. When setup or onboarding fails, eve sends a bounded failure category such as target resolution, scaffolding, package-manager startup, workspace probing, dependency installation, Git initialization, handoff, or onboarding. It does not send the underlying error.
16
16
  - For `eve dev`, whether you connected to a local or remote agent and whether the UI was interactive or headless.
17
17
  - Random identifiers for the CLI session, installation, and project, plus whether the installation and project identifiers are ephemeral or persistent.
18
18
 
@@ -34,6 +34,7 @@ export default defineTool({
34
34
  | ----------------------------------------------------- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------ |
35
35
  | `defineAgent` | `eve` | `agent/agent.ts` | [agent.ts](../agent-config) |
36
36
  | `defineTool` | `eve/tools` | `agent/tools/<name>.ts` | [Tools](../tools) |
37
+ | `defineDurableCallback` | `eve/tools` | provider-package dynamic tool factories | [Dynamic capabilities](../guides/dynamic-capabilities) |
37
38
  | `defineWorkflowTool` | `eve/tools` | `agent/tools/<name>.ts` | [Workflow tools](../tools/workflows) |
38
39
  | `defineDynamic` | `eve`, `eve/tools`, `eve/skills`, `eve/instructions`, `eve/connections` | dynamic model or subagent `agent.ts`; `agent/{tools,skills,instructions,connections}/` | [Dynamic capabilities](../guides/dynamic-capabilities) |
39
40
  | `defineMcpClientConnection` | `eve/connections` | `agent/connections/<name>.ts` | [MCP connections](../connections/mcp) |
@@ -54,7 +55,7 @@ export default defineTool({
54
55
  | `mockModel` | `eve/evals` | Deterministic fixture agent models | [Evals](../evals/overview) |
55
56
  | `useEveAgent` | `eve/react`, `eve/vue`, `eve/svelte` | frontend | [Frontend](../guides/frontend/overview) |
56
57
 
57
- Tool-wide authoring helpers and types such as `defineTool`, `defineWorkflowTool`, `defineDynamic`, `disableTool`, and `ToolLabelDefinition` come from `eve/tools`. Capability-specific definitions and helpers use their own subpaths (see [Built-in tools](../concepts/built-in-tools)): reusable definitions such as `bash` and `glob` come from `eve/tools/<name>`, `webSearch` comes from `eve/tools/web_search`, `experimental_workflow` comes from `eve/tools/workflow`, `sleep` comes from `eve/tools/sleep`, and approval policies and types come from `eve/tools/approval`. The route verbs `GET`/`HEAD`/`POST`/`PUT`/`PATCH`/`DELETE`/`OPTIONS`/`WS` plus `disableRoute` come from `eve/channels`, and the channel auth helpers `localDev`/`vercelOidc`/`placeholderAuth` come from `eve/channels/auth`.
58
+ Tool-wide authoring helpers and types such as `defineTool`, `defineWorkflowTool`, `defineDurableCallback`, `defineDynamic`, `disableTool`, and `ToolLabelDefinition` come from `eve/tools`. Capability-specific definitions and helpers use their own subpaths (see [Built-in tools](../concepts/built-in-tools)): reusable definitions such as `bash` and `glob` come from `eve/tools/<name>`, `webSearch` comes from `eve/tools/web_search`, `experimental_workflow` comes from `eve/tools/workflow`, `sleep` comes from `eve/tools/sleep`, and approval policies and types come from `eve/tools/approval`. The route verbs `GET`/`HEAD`/`POST`/`PUT`/`PATCH`/`DELETE`/`OPTIONS`/`WS` plus `disableRoute` come from `eve/channels`, and the channel auth helpers `localDev`/`vercelOidc`/`placeholderAuth` come from `eve/channels/auth`.
58
59
 
59
60
  `AgentReasoningDefinition` is exported from `eve` for the top-level `defineAgent({ reasoning })` setting. `AgentLimitsDefinition` is exported for `defineAgent({ limits })`. `AgentWorkflowDefinition` and `AgentWorkflowWorldDefinition` are exported from `eve` for the `defineAgent({ experimental: { workflow } })` config shape. `ExperimentalWorkflowToolInput` is exported from `eve/tools/workflow`; `WebSearchToolInput` and `WebSearchProvider` are exported from `eve/tools/web_search`.
60
61
 
@@ -108,40 +109,40 @@ import template from "../../prompts/template.txt?raw";
108
109
 
109
110
  ## Imports at a glance
110
111
 
111
- | Import | Holds |
112
- | --------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- |
113
- | `eve` | `defineAgent`, `defineRemoteAgent`, `defineDynamic`, agent config types |
114
- | `eve/tools` | `defineTool`, `defineWorkflowTool`, `defineDynamic`, `disableTool`, generic tool types |
115
- | `eve/tools/{bash,read_file,write_file,todo,web_fetch,load_skill,glob,grep}` | Individual reusable tool definitions |
116
- | `eve/tools/approval` | Approval types and `always`, `once`, `never` |
117
- | `eve/tools/web_search` | Provider-managed `webSearch` configuration |
118
- | `eve/tools/workflow` | Experimental `Workflow` tool definition |
119
- | `eve/tools/sleep` | Opt-in durable `sleep` tool |
120
- | `eve/connections` | `defineMcpClientConnection`, `defineOpenAPIConnection`, `defineDynamic` |
121
- | `eve/channels` | `defineChannel`, `disableRoute`, route verbs |
122
- | `eve/channels/eve` | `eveChannel` |
123
- | `eve/channels/auth` | `localDev`, `vercelOidc`, `placeholderAuth` |
124
- | `eve/channels/{slack,discord,teams,telegram,twilio,github}` | platform channel factories |
125
- | `eve/hooks` | `defineHook` |
126
- | `eve/schedules` | `defineSchedule` |
127
- | `eve/skills` | `defineSkill`, `defineDynamic` |
128
- | `eve/instructions` | `defineInstructions`, `defineDynamic` |
129
- | `eve/memory` | `defineMemory`, `defineMemoryProvider`, provider and lifecycle types |
130
- | `eve/memory/scope` | `byPrincipal` and memory scope helpers |
131
- | `eve/memory/file` | `fileMemory`, `inMemory`, and the conditional document backend contract |
132
- | `eve/memory/file/vercel` | `vercelBlob` and Vercel Blob backend options |
133
- | `eve/context` | `defineState`, session and state types |
134
- | `eve/sandbox` | `defineSandbox`, backends |
135
- | `eve/instrumentation` | `defineInstrumentation`, `isChannel` |
136
- | `eve/local-dev` | `getLocalDevCapability`, `LocalDevCapability` |
137
- | `eve/models/openai` | `chatgpt`, deprecated `experimental_chatgpt` |
138
- | `eve/evals` | `defineEval`, `defineEvalConfig`, `mockModel`, eval types |
139
- | `eve/evals/expect` | `includes`, `equals`, `matches`, `similarity` |
140
- | `eve/evals/reporters` | `Braintrust`, `JUnit`, `EvalReporter` |
141
- | `eve/evals/loaders` | `loadJson`, `loadYaml` |
142
- | `eve/react`, `eve/vue`, `eve/svelte` | `useEveAgent` |
143
- | `eve/next`, `eve/nuxt`, `eve/sveltekit` | framework bundler plugins |
144
- | [`eve/client`](../guides/client/overview) | `Client`, `ClientSession`, health and agent-info schemas, response errors |
112
+ | Import | Holds |
113
+ | --------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
114
+ | `eve` | `defineAgent`, `defineRemoteAgent`, `defineDynamic`, agent config types |
115
+ | `eve/tools` | `defineTool`, `defineWorkflowTool`, `defineDurableCallback`, `defineDynamic`, `disableTool`, tool types |
116
+ | `eve/tools/{bash,read_file,write_file,todo,web_fetch,load_skill,glob,grep}` | Individual reusable tool definitions |
117
+ | `eve/tools/approval` | Approval types and `always`, `once`, `never` |
118
+ | `eve/tools/web_search` | Provider-managed `webSearch` configuration |
119
+ | `eve/tools/workflow` | Experimental `Workflow` tool definition |
120
+ | `eve/tools/sleep` | Opt-in durable `sleep` tool |
121
+ | `eve/connections` | `defineMcpClientConnection`, `defineOpenAPIConnection`, `defineDynamic` |
122
+ | `eve/channels` | `defineChannel`, `disableRoute`, route verbs |
123
+ | `eve/channels/eve` | `eveChannel` |
124
+ | `eve/channels/auth` | `localDev`, `vercelOidc`, `placeholderAuth` |
125
+ | `eve/channels/{slack,discord,teams,telegram,twilio,github}` | platform channel factories |
126
+ | `eve/hooks` | `defineHook` |
127
+ | `eve/schedules` | `defineSchedule` |
128
+ | `eve/skills` | `defineSkill`, `defineDynamic` |
129
+ | `eve/instructions` | `defineInstructions`, `defineDynamic` |
130
+ | `eve/memory` | `defineMemory`, `defineMemoryProvider`, provider and lifecycle types |
131
+ | `eve/memory/scope` | `byPrincipal` and memory scope helpers |
132
+ | `eve/memory/file` | `fileMemory`, `inMemory`, and the conditional document backend contract |
133
+ | `eve/memory/file/vercel` | `vercelBlob` and Vercel Blob backend options |
134
+ | `eve/context` | `defineState`, session and state types |
135
+ | `eve/sandbox` | `defineSandbox`, backends |
136
+ | `eve/instrumentation` | `defineInstrumentation`, `isChannel` |
137
+ | `eve/local-dev` | `getLocalDevCapability`, `LocalDevCapability` |
138
+ | `eve/models/openai` | `chatgpt`, deprecated `experimental_chatgpt` |
139
+ | `eve/evals` | `defineEval`, `defineEvalConfig`, `mockModel`, eval types |
140
+ | `eve/evals/expect` | `includes`, `equals`, `matches`, `similarity` |
141
+ | `eve/evals/reporters` | `Braintrust`, `JUnit`, `EvalReporter` |
142
+ | `eve/evals/loaders` | `loadJson`, `loadYaml` |
143
+ | `eve/react`, `eve/vue`, `eve/svelte` | `useEveAgent` |
144
+ | `eve/next`, `eve/nuxt`, `eve/sveltekit` | framework bundler plugins |
145
+ | [`eve/client`](../guides/client/overview) | `Client`, `ClientSession`, health and agent-info schemas, response errors |
145
146
 
146
147
  Exported types ship from the same entrypoint as the helper they describe (for example `ToolDefinition` and `ToolContext` from `eve/tools`). The `exports` field in `packages/eve/package.json` lists every public entrypoint.
147
148
 
@@ -183,7 +183,7 @@ Each delegated subagent spins up its own child session and stream. The parent st
183
183
 
184
184
  A background task that was already admitted survives cancellation of the turn that started it; background work that has not yet been admitted is rejected with the cancelled step. Use `task_cancel` to stop an admitted task. Cancellation delivers the task's final notification to an active parent even if the task must be stopped forcibly. Parent-session finalization cancels remaining live tasks.
185
185
 
186
- Subagent model calls automatically retry classified transient provider failures, including overload errors delivered after a stream starts. eve makes at most three fresh model-call attempts, repeating only the current uncommitted call so completed earlier steps, tool results, and sandbox work remain available to the child. Other recoverable task errors fall back to Workflow's durable step retry from the last committed session snapshot. Exhausting the transient model-call attempts or the dedicated empty-response reissue returns one failed task result instead of stacking both retry budgets; terminal errors fail immediately.
186
+ Subagent model calls automatically retry classified transient provider failures, including overload errors delivered after a stream starts. eve makes at most three fresh model-call attempts, repeating only the current uncommitted call by default so completed earlier Workflow steps, tool results, and sandbox work remain available to the child. A declared subagent that opts into [Workflow checkpoint batching](./agent-config#workflow-checkpoint-batching) can instead repeat the uncommitted calls and inline tool executions in its current batch. Other recoverable task errors fall back to Workflow's durable step retry from the last committed session snapshot. Exhausting the transient model-call attempts or the dedicated empty-response reissue returns one failed task result instead of stacking both retry budgets; terminal errors fail immediately.
187
187
 
188
188
  ## Agent messaging
189
189
 
@@ -138,9 +138,11 @@ After the initiating turn accepts background tasks, eve supplies runtime-authore
138
138
  cohort and instructs the model to acknowledge that the work started without waiting for results.
139
139
  [Schedule](/docs/schedules)-initiated turns are the exception: no user prompted them, so their
140
140
  launches keep conditional delivery and send no acknowledgement.
141
- Later task-triggered parent turns receive fresh state for the same cohort. The model is instructed
142
- to keep related intermediate results silent while any task remains pending. Once every related
141
+ Later task-triggered parent turns receive fresh state for the same cohort. Once every related
143
142
  task is terminal, the state includes their outputs so the model can combine the useful results.
143
+ eve does not instruct the model to stay silent while sibling tasks are pending; a new user
144
+ question can receive an answer while background work continues. [Completion batching](/docs/subagents#completion-batching)
145
+ combines successful results already queued for the parent.
144
146
 
145
147
  ### Yield and return
146
148
 
@@ -102,9 +102,9 @@ the build with the missing import in the error.
102
102
  ### Migrate an existing workflow tool
103
103
 
104
104
  Replace `defineTool` with `defineWorkflowTool`, keep the executor's `"use workflow"` directive,
105
- and replace `agent(ctx, input)` and `ask(ctx, request)` with `ctx.agent(input)` and `ctx.ask(request)`.
106
- The `eve/workflow` entry point has been removed. Import `WorkflowToolContext`, `AgentInput`,
107
- `ToolInputRequest`, and `ToolInputResponse` from `eve/tools` when you need explicit types.
105
+ and replace `agent(ctx, input)` and `ask(ctx, request)` with `ctx.agent(target, input)` and
106
+ `ctx.ask(request)`. The `eve/workflow` entry point has been removed. Import `WorkflowToolContext`,
107
+ `AgentInput`, `ToolInputRequest`, and `ToolInputResponse` from `eve/tools` when you need explicit types.
108
108
 
109
109
  ## Wait or run in the background
110
110
 
@@ -250,17 +250,22 @@ and can only show the model's input. Both compose: `approval` before the run, `c
250
250
  Workflow tools can call a visible subagent and wait for its result:
251
251
 
252
252
  ```ts
253
- const result = await ctx.agent({
254
- key: "security-review",
255
- target: "reviewer",
253
+ const result = await ctx.agent("reviewer", {
256
254
  message: "Review the deployment plan for security risks.",
255
+ outputSchema: {
256
+ type: "object",
257
+ properties: {
258
+ findings: { type: "array", items: { type: "string" } },
259
+ },
260
+ required: ["findings"],
261
+ },
257
262
  });
258
263
  ```
259
264
 
260
- `key` is required, non-empty, and unique within the workflow run. It makes the invocation identity
261
- stable across replay, so use a fixed key for each logical call site. Parallel calls must use distinct
262
- keys. `target` is the model-visible subagent name; pass `agentId` to continue an existing child and
263
- `outputSchema` to require structured output.
265
+ The first argument is the model-visible subagent name. eve assigns each call a replay-stable
266
+ invocation identity, including repeated and parallel calls to the same subagent. Pass `agentId` to
267
+ continue an existing child. An inline `outputSchema` requires structured output and determines the
268
+ return type, so `result` in the example is typed as `{ findings: string[] }`.
264
269
 
265
270
  ## Report progress: `yield`
266
271
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eve",
3
- "version": "0.52.4",
3
+ "version": "0.53.0",
4
4
  "private": false,
5
5
  "description": "Filesystem-first framework for durable backend AI agents that run anywhere.",
6
6
  "keywords": [
@@ -442,14 +442,14 @@
442
442
  },
443
443
  "devDependencies": {
444
444
  "@agentclientprotocol/sdk": "1.3.0",
445
- "@ai-sdk/anthropic": "^4.0.36",
446
- "@ai-sdk/code-mode": "1.0.39",
447
- "@ai-sdk/google": "^4.0.39",
448
- "@ai-sdk/mcp": "^2.0.29",
449
- "@ai-sdk/openai": "^4.0.36",
450
- "@ai-sdk/otel": "^1.0.58",
451
- "@ai-sdk/provider": "^4.0.7",
452
- "@ai-sdk/provider-utils": "^5.0.25",
445
+ "@ai-sdk/anthropic": "^4.0.49",
446
+ "@ai-sdk/code-mode": "^1.0.50",
447
+ "@ai-sdk/google": "^4.0.64",
448
+ "@ai-sdk/mcp": "^2.0.45",
449
+ "@ai-sdk/openai": "^4.0.60",
450
+ "@ai-sdk/otel": "^1.0.93",
451
+ "@ai-sdk/provider": "^4.0.10",
452
+ "@ai-sdk/provider-utils": "^5.0.36",
453
453
  "@chat-adapter/slack": "4.34.0",
454
454
  "@chat-adapter/state-memory": "4.34.0",
455
455
  "@chat-adapter/twilio": "4.34.0",
@@ -476,15 +476,15 @@
476
476
  "@vercel/sandbox": "3.2.1",
477
477
  "@vercel/sandbox-drives": "npm:@vercel/sandbox@3.1.0-beta.1",
478
478
  "@vercel/sdk": "1.28.8",
479
- "@workflow/builders": "5.0.0-beta.48",
480
- "@workflow/core": "5.0.0-beta.48",
481
- "@workflow/errors": "5.0.0-beta.20",
479
+ "@workflow/builders": "5.0.0-beta.50",
480
+ "@workflow/core": "5.0.0-beta.50",
481
+ "@workflow/errors": "5.0.0-beta.21",
482
482
  "@workflow/serde": "5.0.0-beta.2",
483
483
  "@workflow/utils": "5.0.0-beta.10",
484
- "@workflow/world": "5.0.0-beta.33",
485
- "@workflow/world-local": "5.0.0-beta.42",
486
- "@workflow/world-vercel": "5.0.0-beta.44",
487
- "ai": "^7.0.82",
484
+ "@workflow/world": "5.0.0-beta.34",
485
+ "@workflow/world-local": "5.0.0-beta.43",
486
+ "@workflow/world-vercel": "5.0.0-beta.45",
487
+ "ai": "^7.0.93",
488
488
  "autoevals": "0.0.132",
489
489
  "chat": "4.34.0",
490
490
  "chokidar": "5.0.0",
@@ -517,7 +517,7 @@
517
517
  },
518
518
  "peerDependencies": {
519
519
  "@opentelemetry/api": "^1.0.0",
520
- "ai": "^7.0.82",
520
+ "ai": "^7.0.93",
521
521
  "braintrust": "^3.0.0",
522
522
  "dd-trace": "^6.13.0",
523
523
  "just-bash": "^3.1.0",