eve 0.52.3 → 0.52.5

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 (192) hide show
  1. package/CHANGELOG.md +27 -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/commands/registry-add-command.d.ts +3 -0
  9. package/dist/src/cli/commands/registry-add-command.js +1 -0
  10. package/dist/src/cli/commands/registry-metadata.d.ts +4 -1
  11. package/dist/src/cli/commands/registry-metadata.js +1 -1
  12. package/dist/src/cli/commands/registry.d.ts +1 -2
  13. package/dist/src/cli/commands/registry.js +1 -1
  14. package/dist/src/cli/run.js +2 -2
  15. package/dist/src/cli/telemetry/index.d.ts +3 -0
  16. package/dist/src/cli/telemetry/index.js +1 -1
  17. package/dist/src/compiled/.vendor-stamp.json +3 -2
  18. package/dist/src/compiled/@workflow/world-local/index.js +1 -1
  19. package/dist/src/compiler/extension-compatibility.d.ts +4 -4
  20. package/dist/src/compiler/extension-compatibility.js +1 -1
  21. package/dist/src/context/dynamic-model-lifecycle.js +1 -1
  22. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  23. package/dist/src/context/keys.d.ts +11 -2
  24. package/dist/src/context/keys.js +1 -1
  25. package/dist/src/evals/mock-model.js +1 -1
  26. package/dist/src/evals/reporters/index.d.ts +1 -0
  27. package/dist/src/evals/reporters/index.js +1 -1
  28. package/dist/src/evals/runner/reporters/datadog.d.ts +137 -0
  29. package/dist/src/evals/runner/reporters/datadog.js +3 -0
  30. package/dist/src/evals/runner/run-evals.d.ts +1 -1
  31. package/dist/src/evals/runner/run-evals.js +1 -1
  32. package/dist/src/execution/activity-cohort.d.ts +20 -0
  33. package/dist/src/execution/activity-cohort.js +1 -0
  34. package/dist/src/execution/authorization-callback-match.d.ts +1 -0
  35. package/dist/src/execution/authorization-callback-match.js +1 -1
  36. package/dist/src/execution/parked-delivery-wait.js +1 -1
  37. package/dist/src/execution/sandbox/bindings/vercel-options.d.ts +10 -0
  38. package/dist/src/execution/sandbox/bindings/vercel-options.js +1 -0
  39. package/dist/src/execution/sandbox/bindings/vercel.js +2 -1
  40. package/dist/src/execution/sandbox/shell-quote.d.ts +1 -12
  41. package/dist/src/execution/sandbox/shell-quote.js +1 -1
  42. package/dist/src/execution/session-activity-projection.d.ts +2 -0
  43. package/dist/src/execution/session-activity-projection.js +1 -1
  44. package/dist/src/execution/session-command-inbox.js +1 -1
  45. package/dist/src/execution/skills/instructions.js +1 -1
  46. package/dist/src/execution/tasks/child/workflow.js +1 -1
  47. package/dist/src/execution/tasks/parent/tool-execution.js +1 -1
  48. package/dist/src/execution/tool-auth.d.ts +4 -32
  49. package/dist/src/execution/tool-auth.js +1 -1
  50. package/dist/src/execution/tools/connection-search.js +2 -2
  51. package/dist/src/execution/tools/sleep-workflow.js +1 -1
  52. package/dist/src/execution/tools/subagent/accept-event-step.d.ts +1 -1
  53. package/dist/src/execution/tools/subagent/accept-event-step.js +1 -1
  54. package/dist/src/execution/tools/subagent/invoke-agent.js +1 -1
  55. package/dist/src/execution/tools/subagent/invoke-step.js +1 -1
  56. package/dist/src/execution/tools/workflow/ask.d.ts +3 -2
  57. package/dist/src/execution/tools/workflow/ask.js +1 -1
  58. package/dist/src/execution/tools/workflow/authorization-completion.d.ts +3 -0
  59. package/dist/src/execution/tools/workflow/authorization-completion.js +1 -0
  60. package/dist/src/execution/tools/workflow/body.d.ts +2 -0
  61. package/dist/src/execution/tools/workflow/body.js +1 -1
  62. package/dist/src/execution/tools/workflow/step-context.d.ts +31 -0
  63. package/dist/src/execution/tools/workflow/step-context.js +1 -0
  64. package/dist/src/execution/tools/workflow/step-execution.d.ts +3 -0
  65. package/dist/src/execution/tools/workflow/step-execution.js +1 -0
  66. package/dist/src/execution/tools/workflow/step.d.ts +3 -0
  67. package/dist/src/execution/tools/workflow/step.js +1 -0
  68. package/dist/src/execution/turn-workflow-tool-run.js +1 -1
  69. package/dist/src/execution/wire/session-inbox-contract.d.ts +7 -0
  70. package/dist/src/execution/wire/session-inbox-contract.js +1 -1
  71. package/dist/src/execution/wire/session-inbox-resume.d.ts +2 -0
  72. package/dist/src/execution/wire/session-inbox-resume.js +1 -1
  73. package/dist/src/execution/workflow-steps.js +1 -1
  74. package/dist/src/harness/approval-delivery-coordinator.js +1 -1
  75. package/dist/src/harness/authorization.d.ts +6 -2
  76. package/dist/src/harness/authorization.js +1 -1
  77. package/dist/src/harness/compaction.js +1 -1
  78. package/dist/src/harness/current-messages.d.ts +8 -2
  79. package/dist/src/harness/current-messages.js +1 -1
  80. package/dist/src/harness/hitl/approval-input-requests.js +1 -1
  81. package/dist/src/harness/input-requests.js +1 -1
  82. package/dist/src/harness/pending-input-batches.d.ts +4 -0
  83. package/dist/src/harness/pending-input-batches.js +1 -1
  84. package/dist/src/harness/tool-loop.js +2 -2
  85. package/dist/src/harness/turn-client-context.d.ts +1 -1
  86. package/dist/src/internal/application/package.js +1 -1
  87. package/dist/src/internal/authored-definition/connection.js +1 -1
  88. package/dist/src/internal/authored-package-boundary.js +1 -1
  89. package/dist/src/internal/mock-model-identity.d.ts +2 -0
  90. package/dist/src/internal/mock-model-identity.js +1 -0
  91. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
  92. package/dist/src/internal/vercel/build-command.d.ts +2 -1
  93. package/dist/src/internal/vercel/build-command.js +1 -1
  94. package/dist/src/internal/workflow-bundle/builder-support.js +1 -1
  95. package/dist/src/internal/workflow-bundle/workflow-builders.js +1 -1
  96. package/dist/src/internal/workflow-bundle/workflow-transformer.d.ts +3 -5
  97. package/dist/src/internal/workflow-bundle/workflow-transformer.js +4 -3
  98. package/dist/src/public/channels/github/checkout.js +1 -1
  99. package/dist/src/public/channels/slack/activity.js +1 -1
  100. package/dist/src/public/tools/index.d.ts +1 -0
  101. package/dist/src/public/tools/index.js +1 -1
  102. package/dist/src/runtime/authorization-context.d.ts +14 -0
  103. package/dist/src/runtime/authorization-context.js +1 -0
  104. package/dist/src/runtime/connections/mcp-client.js +1 -1
  105. package/dist/src/runtime/connections/scoped-authorization.d.ts +18 -2
  106. package/dist/src/runtime/connections/scoped-authorization.js +1 -1
  107. package/dist/src/runtime/resolve-connection.js +1 -1
  108. package/dist/src/runtime/sandbox/keys.js +1 -1
  109. package/dist/src/sandbox/backends/default.d.ts +2 -0
  110. package/dist/src/sandbox/backends/default.js +1 -1
  111. package/dist/src/self-modification/agent.d.ts +5 -2
  112. package/dist/src/self-modification/agent.js +1 -1
  113. package/dist/src/self-modification/config.d.ts +52 -0
  114. package/dist/src/self-modification/config.js +1 -0
  115. package/dist/src/self-modification/credentials.d.ts +18 -0
  116. package/dist/src/self-modification/credentials.js +1 -0
  117. package/dist/src/self-modification/extension/eve-add.d.ts +7 -2
  118. package/dist/src/self-modification/extension/eve-add.js +1 -1
  119. package/dist/src/self-modification/extension/extension.d.ts +46 -1
  120. package/dist/src/self-modification/extension/extension.js +1 -1
  121. package/dist/src/self-modification/extension/instructions.js +23 -9
  122. package/dist/src/self-modification/extension/production-registry-add.d.ts +42 -0
  123. package/dist/src/self-modification/extension/production-registry-add.js +1 -0
  124. package/dist/src/self-modification/extension/tools/edit_file.js +1 -1
  125. package/dist/src/self-modification/extension/tools/publish.d.ts +7 -0
  126. package/dist/src/self-modification/extension/tools/publish.js +1 -0
  127. package/dist/src/self-modification/extension/tools/registry_add.d.ts +39 -7
  128. package/dist/src/self-modification/extension/tools/registry_add.js +1 -1
  129. package/dist/src/self-modification/extension/tools/search_registry.d.ts +1 -0
  130. package/dist/src/self-modification/extension/tools/search_registry.js +1 -1
  131. package/dist/src/self-modification/filesystem.js +1 -1
  132. package/dist/src/self-modification/git-workspace.d.ts +31 -0
  133. package/dist/src/self-modification/git-workspace.js +1 -0
  134. package/dist/src/self-modification/git.d.ts +6 -0
  135. package/dist/src/self-modification/git.js +1 -0
  136. package/dist/src/self-modification/github-publisher.d.ts +27 -0
  137. package/dist/src/self-modification/github-publisher.js +2 -0
  138. package/dist/src/self-modification/identifiers.d.ts +4 -0
  139. package/dist/src/self-modification/identifiers.js +1 -0
  140. package/dist/src/self-modification/mode.d.ts +4 -0
  141. package/dist/src/self-modification/mode.js +1 -0
  142. package/dist/src/self-modification/network-policy.d.ts +1 -0
  143. package/dist/src/self-modification/network-policy.js +1 -0
  144. package/dist/src/self-modification/proposal.d.ts +39 -0
  145. package/dist/src/self-modification/proposal.js +2 -0
  146. package/dist/src/self-modification/sandbox.d.ts +25 -1
  147. package/dist/src/self-modification/sandbox.js +1 -1
  148. package/dist/src/self-modification/setup.d.ts +34 -0
  149. package/dist/src/self-modification/setup.js +22 -0
  150. package/dist/src/self-modification/workspace-lock.d.ts +2 -0
  151. package/dist/src/self-modification/workspace-lock.js +1 -0
  152. package/dist/src/setup/integrations/registry.js +1 -1
  153. package/dist/src/setup/integrations/runner.js +1 -1
  154. package/dist/src/setup/integrations/self-modification/setup.d.ts +29 -0
  155. package/dist/src/setup/integrations/self-modification/setup.js +1 -0
  156. package/dist/src/setup/integrations/types.d.ts +2 -0
  157. package/dist/src/setup/integrations/types.js +1 -1
  158. package/dist/src/setup/scaffold/create/project.js +1 -1
  159. package/dist/src/shared/empty-delivery.js +1 -1
  160. package/dist/src/shared/git.d.ts +16 -0
  161. package/dist/src/shared/git.js +1 -0
  162. package/dist/src/shared/shell-quote.d.ts +2 -0
  163. package/dist/src/shared/shell-quote.js +1 -0
  164. package/dist/src/shared/vercel-services.js +1 -1
  165. package/dist/src/tasks/delivery-context.d.ts +2 -2
  166. package/dist/src/tasks/delivery-context.js +2 -18
  167. package/dist/src/tasks/delivery-policy.js +1 -1
  168. package/dist/src/tasks/session-index.d.ts +1 -1
  169. package/dist/src/tasks/session-index.js +1 -1
  170. package/dist/src/tasks/session-task-cohorts.d.ts +10 -0
  171. package/dist/src/tasks/session-task-cohorts.js +1 -0
  172. package/dist/src/tools/durable-callbacks.d.ts +18 -1
  173. package/dist/src/tools/durable-callbacks.js +1 -1
  174. package/dist/src/tools/workflow-definition.d.ts +5 -2
  175. package/docs/channels/overview.mdx +2 -0
  176. package/docs/channels/slack.mdx +2 -0
  177. package/docs/concepts/sessions-runs-and-streaming.md +2 -0
  178. package/docs/evals/reporters.mdx +20 -1
  179. package/docs/evals/running.mdx +3 -1
  180. package/docs/guides/dynamic-capabilities.md +36 -1
  181. package/docs/guides/instrumentation.md +3 -2
  182. package/docs/instructions.mdx +1 -1
  183. package/docs/reference/cli.md +1 -1
  184. package/docs/reference/telemetry.md +1 -1
  185. package/docs/reference/typescript-api.md +36 -35
  186. package/docs/sandbox.mdx +2 -0
  187. package/docs/subagents/index.mdx +10 -0
  188. package/docs/tools/overview.mdx +4 -2
  189. package/docs/tools/workflows.mdx +61 -2
  190. package/package.json +17 -1
  191. package/dist/src/self-modification/extension/source-lock.d.ts +0 -2
  192. package/dist/src/self-modification/extension/source-lock.js +0 -1
@@ -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
 
package/docs/sandbox.mdx CHANGED
@@ -289,6 +289,8 @@ Custom backend handles implement the same boundary in `delete()`: remove the ses
289
289
 
290
290
  Session sandboxes are keyed per durable session, not per deployment, so redeploying your app does not by itself discard them. A definition change to the authored sandbox source, workspace seed content, or `revalidationKey` replaces the sandbox on the next turn and runs `onSession` again.
291
291
 
292
+ For sandboxes with `bootstrap`, unrelated agent changes preserve the template and session sandbox keys even when there are no skill or workspace seed files. You do not need to add a seed file or `revalidationKey` solely to preserve reuse across those changes.
293
+
292
294
  Reattachment still depends on the backend retaining its physical sandbox state. If a persisted Vercel sandbox is no longer available, eve creates a replacement, using the current template when one is configured. Files and other changes made after the original sandbox was created are not restored automatically. Because the durable session still has the same sandbox key, `onSession` does not run again for this replacement. Persist important artifacts outside the sandbox, and do not rely on `onSession` as the only place that applies security-critical configuration.
293
295
 
294
296
  When the eve server stops, no sandbox compute outlives it. `eve dev` stops the sandboxes it started when the dev server closes, and a self-hosted production server stops every open sandbox on shutdown (`SIGTERM`/`SIGINT`). Session state persists across the stop — the next server start reattaches each durable session from its stopped container, VM, or snapshot. Custom `SandboxBackend` adapters implement `stop()` for authored runtime calls and `shutdown()` for server teardown. Both stop the underlying compute while keeping the session reattachable from persisted state where the backend supports it; authored `stop()` failures reject, while process-wide shutdown collects and logs failures without blocking teardown.
@@ -5,6 +5,16 @@ description: "Delegate work to root-agent copies or declared specialists with th
5
5
 
6
6
  eve supports two ways to delegate work: the root-only built-in `agent` tool, which starts or continues a copy of the root agent, and declared subagents, which are specialists with their own directories. Use a subagent to run independent work in parallel, narrow the available tools, or give a task to a specialist.
7
7
 
8
+ ## Completion batching
9
+
10
+ eve automatically combines adjacent successful completions already queued from
11
+ tasks launched in the same parent turn. Every result is retained, and the parent
12
+ responds to the batch in one turn. No configuration is required.
13
+
14
+ There is no debounce timer or waiting for unfinished tasks. Failures, input
15
+ requests, explicit updates, user messages, and different task cohorts remain
16
+ separate delivery boundaries.
17
+
8
18
  ## The built-in `agent` tool
9
19
 
10
20
  The root session receives `agent` by default. The model calls it to delegate a task to a new copy of the root agent or continue an existing copy:
@@ -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
 
@@ -79,8 +79,8 @@ or days later, the run resumes, deploys, and returns. The model sees one tool re
79
79
  `start`, `getRun`, and `resumeHook` from `workflow/api` belong in steps. Your app does not install
80
80
  the SDK; for types, new projects list `eve/workflow-modules` in the tsconfig `types`.
81
81
  - In the body, `ctx` has `session`, `callId`, `toolName`, `abortSignal`, `agent`, and `ask`.
82
- `getSandbox`, `getSkill`, `getToken`, and `requireAuth` are not part of `WorkflowToolContext`.
83
- Read credentials from `process.env` in a step; session-scoped workflow authorization is not yet available.
82
+ `getToken` and `requireAuth` work inside a `"use step"` helper that receives `ctx` as a direct argument;
83
+ they throw in the workflow body. `getSandbox` and `getSkill` remain unavailable.
84
84
  - The tool's input must be a JSON object. Workflow bodies are for static tools under `agent/tools/`,
85
85
  not tools returned from `defineDynamic` resolvers.
86
86
 
@@ -154,6 +154,65 @@ Answering resumes the body in either mode.
154
154
  Promise or Node.js timer inside a step also does not create a durable workflow suspension; use
155
155
  the workflow operations for waits that must survive a restart.
156
156
 
157
+ ## Authorize inside a step
158
+
159
+ Pass `ctx` directly to a step helper and call `ctx.getToken(provider)` there. User-scoped providers
160
+ resolve as whoever launched this workflow tool, even if another person speaks in the session while it waits.
161
+ The provider declaration and the API request both stay inside the step:
162
+
163
+ ```ts
164
+ import { connect } from "@vercel/connect/eve";
165
+ import type { WorkflowToolContext } from "eve/tools";
166
+
167
+ async function readRepository(ctx: WorkflowToolContext, repository: string) {
168
+ "use step";
169
+ const provider = connect("github/my-agent");
170
+ const { token } = await ctx.getToken(provider);
171
+ const response = await fetch(`https://api.github.com/repos/${repository}`, {
172
+ headers: { Authorization: `Bearer ${token}` },
173
+ });
174
+ if (response.status === 401) ctx.requireAuth(provider);
175
+ if (!response.ok) throw new Error(`GitHub returned ${response.status}`);
176
+ return response.json();
177
+ }
178
+ ```
179
+
180
+ Connections discovered through `connection_search`, ordinary tools, and workflow steps use the same
181
+ authorization machinery for requester identity, token caching, callback completion, and rejection
182
+ after sign-in. The execution runtime owns the wait: an agent returns to its model after authorization,
183
+ while a workflow retries the interrupted step and continues the authored body.
184
+
185
+ The workflow body calls `await readRepository(ctx, repository)`.
186
+
187
+ <Callout type="warning" title="Keep tokens out of step results">
188
+ Step results enter the workflow's durable history, so do not return the token from the helper.
189
+ eve's token cache stays inside the step. The step input is recorded too and, after sign-in,
190
+ carries the provider's callback parameters, such as a one-time authorization code. This matches
191
+ how agent turns record callbacks. Bearer tokens are never written.
192
+ </Callout>
193
+
194
+ When sign-in is required, the step attempt ends and the workflow waits on its own callback hook,
195
+ without holding compute. The channel renders the sign-in challenge. After the callback, eve retries
196
+ **the whole interrupted step**, resolves the token, and continues. Previously completed steps are
197
+ not rerun. Resolve auth before other side effects in that step, and make operations before
198
+ `requireAuth` safe to retry. A token rejected immediately after sign-in fails instead of prompting
199
+ again. Provider declarations can be shared imports, but context must be passed directly, not nested
200
+ inside another argument or captured in a closure.
201
+
202
+ After a successful callback exchange, eve records a completion marker before returning to authored
203
+ code. If that code later fails and the step retries, eve reads the token from the provider instead
204
+ of exchanging the same callback again. The provider must persist the grant or token; the marker
205
+ itself contains no credentials.
206
+
207
+ A background task becomes `input_required` during sign-in. The callback resumes that task; it does
208
+ not rely on the launching agent turn still being active. Cancelling an authorization wait withdraws
209
+ its callback. Cancellation uses the existing turn or task cancellation path rather than a separate
210
+ authorization completion event.
211
+
212
+ Background workflow authorization requires a new session after upgrading. In older sessions,
213
+ `ctx.getToken` and `ctx.requireAuth` fail immediately with an instruction to start a new session.
214
+ Blocking workflows and background workflows without auth are unaffected.
215
+
157
216
  ## Ask a human: `ctx.ask`
158
217
 
159
218
  ```ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eve",
3
- "version": "0.52.3",
3
+ "version": "0.52.5",
4
4
  "private": false,
5
5
  "description": "Filesystem-first framework for durable backend AI agents that run anywhere.",
6
6
  "keywords": [
@@ -290,6 +290,11 @@
290
290
  "import": "./dist/src/public/context/index.js",
291
291
  "default": "./dist/src/public/context/index.js"
292
292
  },
293
+ "./internal/workflow-step-execution": {
294
+ "types": "./dist/src/execution/tools/workflow/step-execution.d.ts",
295
+ "import": "./dist/src/execution/tools/workflow/step-execution.js",
296
+ "default": "./dist/src/execution/tools/workflow/step-execution.js"
297
+ },
293
298
  "./internal/programmatic-source-loader": {
294
299
  "types": "./dist/src/internal/programmatic-source-loader.d.ts",
295
300
  "import": "./dist/src/internal/programmatic-source-loader.js",
@@ -420,6 +425,12 @@
420
425
  "types": "./dist/src/setup/index.d.ts",
421
426
  "import": "./dist/src/setup/index.js",
422
427
  "default": "./dist/src/setup/index.js"
428
+ },
429
+ "./self-modification/config": {
430
+ "eve-source": "./src/self-modification/config.ts",
431
+ "types": "./dist/src/self-modification/config.d.ts",
432
+ "import": "./dist/src/self-modification/config.js",
433
+ "default": "./dist/src/self-modification/config.js"
423
434
  }
424
435
  },
425
436
  "publishConfig": {
@@ -478,6 +489,7 @@
478
489
  "chat": "4.34.0",
479
490
  "chokidar": "5.0.0",
480
491
  "commander": "14.0.3",
492
+ "dd-trace": "6.13.0",
481
493
  "emulate": "0.6.0",
482
494
  "env-runner": "0.1.16",
483
495
  "eventsource-parser": "3.1.0",
@@ -507,6 +519,7 @@
507
519
  "@opentelemetry/api": "^1.0.0",
508
520
  "ai": "^7.0.82",
509
521
  "braintrust": "^3.0.0",
522
+ "dd-trace": "^6.13.0",
510
523
  "just-bash": "^3.1.0",
511
524
  "microsandbox": "^0.5.0"
512
525
  },
@@ -517,6 +530,9 @@
517
530
  "braintrust": {
518
531
  "optional": true
519
532
  },
533
+ "dd-trace": {
534
+ "optional": true
535
+ },
520
536
  "just-bash": {
521
537
  "optional": true
522
538
  },
@@ -1,2 +0,0 @@
1
- /** Runs `task` after every previously queued authored-source mutation settles. */
2
- export declare function withAuthoredSourceLock<T>(task: () => Promise<T>): Promise<T>;
@@ -1 +0,0 @@
1
- let queue=Promise.resolve();async function withAuthoredSourceLock(e){let t=queue.then(e,e);return queue=t.catch(()=>void 0),await t}export{withAuthoredSourceLock};