eve 0.66.2 → 0.67.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 (398) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/dist/src/channel/channel-address.d.ts +0 -2
  3. package/dist/src/channel/channel-address.js +1 -1
  4. package/dist/src/channel/channel-operations.d.ts +0 -5
  5. package/dist/src/channel/channel-operations.js +1 -1
  6. package/dist/src/channel/compiled-channel.d.ts +8 -0
  7. package/dist/src/channel/compiled-channel.js +2 -2
  8. package/dist/src/channel/conversation-context.js +1 -1
  9. package/dist/src/channel/routes.d.ts +1 -2
  10. package/dist/src/channel/schedule.d.ts +2 -2
  11. package/dist/src/channel/schedule.js +1 -1
  12. package/dist/src/channel/types.d.ts +8 -13
  13. package/dist/src/chunks/{use-eve-agent-PbSMyJ6e.js → use-eve-agent-DzdyI97Z.js} +0 -5
  14. package/dist/src/chunks/{use-eve-agent-Di1u2zKu.js → use-eve-agent-OCHP4s0z.js} +0 -5
  15. package/dist/src/cli/acp/command.js +3 -3
  16. package/dist/src/cli/commands/logs.d.ts +3 -3
  17. package/dist/src/cli/commands/logs.js +1 -1
  18. package/dist/src/cli/commands/register-integration-commands.js +1 -1
  19. package/dist/src/cli/commands/registry-declared-setups.d.ts +0 -1
  20. package/dist/src/cli/commands/registry-declared-setups.js +1 -1
  21. package/dist/src/cli/commands/registry.d.ts +5 -1
  22. package/dist/src/cli/commands/registry.js +1 -1
  23. package/dist/src/cli/commands/trace.js +1 -1
  24. package/dist/src/cli/dev/command.d.ts +9 -5
  25. package/dist/src/cli/dev/command.js +1 -3
  26. package/dist/src/cli/dev/run-interactive-ui.d.ts +0 -1
  27. package/dist/src/cli/dev/run-interactive-ui.js +1 -1
  28. package/dist/src/cli/dev/tui/argument-typeahead.d.ts +1 -2
  29. package/dist/src/cli/dev/tui/argument-typeahead.js +2 -2
  30. package/dist/src/cli/dev/tui/blocks.d.ts +5 -1
  31. package/dist/src/cli/dev/tui/blocks.js +4 -4
  32. package/dist/src/cli/dev/tui/flow-drawer.d.ts +11 -0
  33. package/dist/src/cli/dev/tui/flow-drawer.js +1 -0
  34. package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
  35. package/dist/src/cli/dev/tui/prompt-commands.d.ts +199 -0
  36. package/dist/src/cli/dev/tui/prompt-commands.js +2 -2
  37. package/dist/src/cli/dev/tui/question-panel.d.ts +4 -4
  38. package/dist/src/cli/dev/tui/question-panel.js +1 -1
  39. package/dist/src/cli/dev/tui/registry-result-message.d.ts +15 -4
  40. package/dist/src/cli/dev/tui/registry-result-message.js +4 -4
  41. package/dist/src/cli/dev/tui/runner.d.ts +18 -6
  42. package/dist/src/cli/dev/tui/runner.js +3 -2
  43. package/dist/src/cli/dev/tui/setup-commands.d.ts +5 -22
  44. package/dist/src/cli/dev/tui/setup-commands.js +2 -1
  45. package/dist/src/cli/dev/tui/setup-flow.d.ts +2 -10
  46. package/dist/src/cli/dev/tui/setup-panel.d.ts +4 -23
  47. package/dist/src/cli/dev/tui/setup-panel.js +3 -3
  48. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +11 -7
  49. package/dist/src/cli/dev/tui/terminal-renderer.js +11 -11
  50. package/dist/src/cli/dev/tui/theme.d.ts +1 -1
  51. package/dist/src/cli/dev/tui/tui-prompter.js +1 -1
  52. package/dist/src/cli/dev/tui/tui.js +1 -1
  53. package/dist/src/cli/dev/url-target.js +1 -1
  54. package/dist/src/cli/invoke/command.d.ts +2 -5
  55. package/dist/src/cli/invoke/command.js +1 -1
  56. package/dist/src/cli/invoke/invoke.d.ts +2 -2
  57. package/dist/src/cli/invoke/invoke.js +1 -1
  58. package/dist/src/cli/invoke/result.d.ts +14 -194
  59. package/dist/src/cli/invoke/result.js +1 -1
  60. package/dist/src/cli/run.d.ts +0 -4
  61. package/dist/src/cli/run.js +2 -2
  62. package/dist/src/cli/telemetry/index.js +1 -1
  63. package/dist/src/client/message-reducer.js +1 -1
  64. package/dist/src/compiled/.vendor-stamp.json +6 -6
  65. package/dist/src/compiled/@workflow/core/create-hook.d.ts +38 -1
  66. package/dist/src/compiled/@workflow/core/global.d.ts +2 -0
  67. package/dist/src/compiled/@workflow/core/index.js +2 -2
  68. package/dist/src/compiled/@workflow/core/private.js +1 -1
  69. package/dist/src/compiled/@workflow/core/runtime/constants.d.ts +9 -0
  70. package/dist/src/compiled/@workflow/core/runtime/helpers.js +1 -1
  71. package/dist/src/compiled/@workflow/core/runtime/hook-wake.d.ts +89 -0
  72. package/dist/src/compiled/@workflow/core/runtime/open-hook-wait-state.d.ts +55 -0
  73. package/dist/src/compiled/@workflow/core/runtime/quickjs-runtime.d.ts +2 -0
  74. package/dist/src/compiled/@workflow/core/runtime/suspension-handler.d.ts +8 -1
  75. package/dist/src/compiled/@workflow/core/runtime.js +4 -4
  76. package/dist/src/compiled/@workflow/core/serialization/types.d.ts +8 -0
  77. package/dist/src/compiled/@workflow/core/serialization.d.ts +8 -0
  78. package/dist/src/compiled/@workflow/core/serialization.js +1 -1
  79. package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
  80. package/dist/src/compiled/@workflow/core/workflow.js +1 -1
  81. package/dist/src/compiled/@workflow/errors/index.d.ts +23 -0
  82. package/dist/src/compiled/@workflow/errors/index.js +1 -1
  83. package/dist/src/compiled/@workflow/world/events.d.ts +34 -0
  84. package/dist/src/compiled/@workflow/world/hooks.d.ts +27 -0
  85. package/dist/src/compiled/@workflow/world/index.d.ts +2 -2
  86. package/dist/src/compiled/@workflow/world/interfaces.d.ts +24 -0
  87. package/dist/src/compiled/@workflow/world/spec-version.d.ts +32 -11
  88. package/dist/src/compiled/@workflow/world-local/index.js +3 -3
  89. package/dist/src/compiled/@workflow/world-vercel/index.js +17 -17
  90. package/dist/src/compiled/_chunks/workflow/{attribute-changes-89Nwz7XW.js → attribute-changes-DzJovO_f.js} +1 -1
  91. package/dist/src/compiled/_chunks/workflow/dist-BQSf8Hax.js +1 -0
  92. package/dist/src/compiled/_chunks/workflow/dist-BfMqXLK3.js +3 -0
  93. package/dist/src/compiled/_chunks/workflow/frames-qKc30rjg.js +3 -0
  94. package/dist/src/compiled/_chunks/workflow/{global-DIlFoH2w.js → global-BQnKzRXo.js} +1 -1
  95. package/dist/src/compiled/_chunks/workflow/{helpers-k3zcudWr.js → helpers-CNMO7zB1.js} +1 -1
  96. package/dist/src/compiled/_chunks/workflow/{logger-Bzc8jWWj.js → logger-BCEj9caG.js} +1 -1
  97. package/dist/src/compiled/_chunks/workflow/resume-hook-QS_cMwHn.js +1 -0
  98. package/dist/src/compiled/_chunks/workflow/run-CA5wWV2S.js +1 -0
  99. package/dist/src/compiled/_chunks/workflow/serialization-CJ265vSe.js +3 -0
  100. package/dist/src/compiled/_chunks/workflow/sleep-CBn94Ayv.js +1 -0
  101. package/dist/src/compiled/_chunks/workflow/{wait-until-DXLZx3tU.js → wait-until-Bo2U6ON9.js} +1 -1
  102. package/dist/src/compiled/_chunks/workflow/{ws-transport-BSM_Cl7a.js → ws-transport-BrsMYqJg.js} +1 -1
  103. package/dist/src/compiler/compile-from-memory.d.ts +0 -1
  104. package/dist/src/compiler/compile-from-memory.js +1 -1
  105. package/dist/src/compiler/extension-compatibility.d.ts +25 -18
  106. package/dist/src/compiler/extension-compatibility.js +1 -1
  107. package/dist/src/compiler/manifest.d.ts +48 -14
  108. package/dist/src/compiler/manifest.js +1 -1
  109. package/dist/src/compiler/normalize-agent-config.js +1 -1
  110. package/dist/src/compiler/normalize-channel.js +1 -1
  111. package/dist/src/compiler/normalize-connection.js +1 -1
  112. package/dist/src/compiler/normalize-manifest-helpers.js +1 -1
  113. package/dist/src/compiler/normalize-subagent.d.ts +0 -2
  114. package/dist/src/compiler/normalize-subagent.js +1 -1
  115. package/dist/src/compiler/remote-agent-node.d.ts +0 -2
  116. package/dist/src/compiler/remote-agent-node.js +1 -1
  117. package/dist/src/compiler/workspace-resources.js +1 -1
  118. package/dist/src/context/dynamic-subagent-lifecycle.js +1 -1
  119. package/dist/src/context/keys.d.ts +0 -3
  120. package/dist/src/context/keys.js +1 -1
  121. package/dist/src/context/memory-lifecycle.d.ts +1 -0
  122. package/dist/src/context/memory-lifecycle.js +1 -1
  123. package/dist/src/discover/project.js +1 -1
  124. package/dist/src/eve-channel/create-request.d.ts +0 -3
  125. package/dist/src/eve-channel/create-request.js +1 -1
  126. package/dist/src/eve-channel/index.js +1 -1
  127. package/dist/src/eve-channel/request.js +1 -1
  128. package/dist/src/eve-channel/types.d.ts +1 -1
  129. package/dist/src/execution/delegated-session-context.d.ts +2 -0
  130. package/dist/src/execution/delegated-session-context.js +1 -0
  131. package/dist/src/execution/dynamic-connections.d.ts +4 -1
  132. package/dist/src/execution/dynamic-connections.js +1 -1
  133. package/dist/src/execution/dynamic-workflow/tool.js +1 -1
  134. package/dist/src/execution/effective-agent-config.js +1 -1
  135. package/dist/src/execution/legacy-session/input.d.ts +0 -2
  136. package/dist/src/execution/legacy-session/input.js +1 -1
  137. package/dist/src/execution/legacy-session/prepare-step.d.ts +0 -1
  138. package/dist/src/execution/legacy-session/turn-workflow.js +1 -1
  139. package/dist/src/execution/node-step.d.ts +4 -2
  140. package/dist/src/execution/node-step.js +1 -1
  141. package/dist/src/execution/proxied-deliver-step.js +1 -1
  142. package/dist/src/execution/publish-channel-event.d.ts +23 -0
  143. package/dist/src/execution/publish-channel-event.js +1 -0
  144. package/dist/src/execution/runtime-context.js +1 -1
  145. package/dist/src/execution/session/entry-input.d.ts +4 -0
  146. package/dist/src/execution/session/entry-input.js +1 -1
  147. package/dist/src/execution/session/entry.js +1 -1
  148. package/dist/src/execution/session/event-sink.d.ts +1 -1
  149. package/dist/src/execution/session/event-sink.js +1 -1
  150. package/dist/src/execution/session/finalization.d.ts +1 -4
  151. package/dist/src/execution/session/finalization.js +1 -1
  152. package/dist/src/execution/session/handoff.d.ts +1 -3
  153. package/dist/src/execution/session/handoff.js +1 -1
  154. package/dist/src/execution/session/input-queue.d.ts +0 -1
  155. package/dist/src/execution/session/input-queue.js +1 -1
  156. package/dist/src/execution/session/next-input.d.ts +0 -1
  157. package/dist/src/execution/session/next-input.js +1 -1
  158. package/dist/src/execution/session/program.d.ts +0 -3
  159. package/dist/src/execution/session/program.js +1 -1
  160. package/dist/src/execution/session/turn-step-result.d.ts +1 -2
  161. package/dist/src/execution/session/turn-step-result.js +1 -1
  162. package/dist/src/execution/session/turn-step.js +1 -1
  163. package/dist/src/execution/session/turn.d.ts +2 -2
  164. package/dist/src/execution/session/turn.js +1 -1
  165. package/dist/src/execution/settle-cancelled-turn-step.js +1 -1
  166. package/dist/src/execution/tasks/parent/hitl-proxy-steps.js +1 -1
  167. package/dist/src/execution/tools/agent-router-workflow.js +1 -1
  168. package/dist/src/execution/tools/agent-router.d.ts +0 -2
  169. package/dist/src/execution/tools/agent-router.js +1 -1
  170. package/dist/src/execution/tools/ask-question-workflow.js +1 -1
  171. package/dist/src/execution/tools/connection-search.d.ts +1 -0
  172. package/dist/src/execution/tools/connection-search.js +1 -1
  173. package/dist/src/execution/tools/sleep-workflow.js +1 -1
  174. package/dist/src/execution/tools/subagent/invoke-preparation.js +1 -1
  175. package/dist/src/execution/workflow-runtime.js +1 -1
  176. package/dist/src/extensions/code/extension/lib/connect-authentication.js +1 -1
  177. package/dist/src/extensions/code/extension/lib/github-shell.js +1 -1
  178. package/dist/src/extensions/code/extension/lib/prwatch-github.js +1 -1
  179. package/dist/src/framework/sources/registry.js +1 -1
  180. package/dist/src/harness/approval-delivery-coordinator.d.ts +3 -13
  181. package/dist/src/harness/approval-delivery-coordinator.js +1 -1
  182. package/dist/src/harness/emission.d.ts +2 -3
  183. package/dist/src/harness/emission.js +1 -1
  184. package/dist/src/harness/input-request-resolution.d.ts +2 -0
  185. package/dist/src/harness/input-request-resolution.js +1 -1
  186. package/dist/src/harness/input-requests.d.ts +3 -3
  187. package/dist/src/harness/input-requests.js +1 -1
  188. package/dist/src/harness/pending-input-batches.d.ts +3 -3
  189. package/dist/src/harness/pending-input-batches.js +1 -1
  190. package/dist/src/harness/proxy-input-requests.d.ts +2 -0
  191. package/dist/src/harness/proxy-input-requests.js +1 -1
  192. package/dist/src/harness/session-limit-enforcement.d.ts +2 -3
  193. package/dist/src/harness/session-limit-enforcement.js +1 -1
  194. package/dist/src/harness/tool-loop.js +2 -2
  195. package/dist/src/harness/tools.js +1 -1
  196. package/dist/src/harness/types.d.ts +11 -13
  197. package/dist/src/instrumentation/session-context.js +1 -1
  198. package/dist/src/instrumentation/session-init.js +1 -1
  199. package/dist/src/internal/application/package.js +1 -1
  200. package/dist/src/internal/authored-definition/core.js +1 -1
  201. package/dist/src/internal/authored-module-loader.js +1 -2
  202. package/dist/src/internal/authored-package-boundary.d.ts +0 -1
  203. package/dist/src/internal/authored-package-boundary.js +1 -1
  204. package/dist/src/internal/authored-relative-extension-resolver.js +1 -1
  205. package/dist/src/internal/external-resources-snapshot.d.ts +46 -0
  206. package/dist/src/internal/external-resources-snapshot.js +1 -0
  207. package/dist/src/internal/external-resources.d.ts +20 -0
  208. package/dist/src/internal/external-resources.js +1 -0
  209. package/dist/src/internal/invocation/workflow-execution.d.ts +0 -2
  210. package/dist/src/internal/invocation/workflow-execution.js +1 -1
  211. package/dist/src/internal/nitro/host/build-application.js +1 -1
  212. package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
  213. package/dist/src/internal/nitro/host/instrumentation-entry.d.ts +3 -0
  214. package/dist/src/internal/nitro/host/instrumentation-entry.js +2 -0
  215. package/dist/src/internal/nitro/host/start-development-server.d.ts +0 -8
  216. package/dist/src/internal/nitro/host/start-development-server.js +2 -2
  217. package/dist/src/internal/nitro/host.d.ts +1 -1
  218. package/dist/src/internal/nitro/host.js +1 -1
  219. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
  220. package/dist/src/internal/nitro/routes/index.js +72 -3
  221. package/dist/src/internal/workflow/development-world-client.js +1 -1
  222. package/dist/src/node_modules/.pnpm/{@vercel_cli-config@0.2.7 → @vercel_cli-config@0.3.0}/node_modules/@vercel/cli-config/dist/index.js +1 -1
  223. package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/authorization.js +1 -1
  224. package/dist/src/node_modules/.pnpm/@vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494/node_modules/@vercel/connect/dist/connector.js +1 -0
  225. package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/installation.js +1 -1
  226. package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/token.js +1 -1
  227. package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/token-util.js +1 -1
  228. package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/token.js +1 -1
  229. package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/version.js +1 -1
  230. package/dist/src/protocol/message.d.ts +4 -0
  231. package/dist/src/protocol/message.js +1 -1
  232. package/dist/src/public/channels/chat-sdk/chatSdkChannel.d.ts +0 -1
  233. package/dist/src/public/channels/chat-sdk/chatSdkChannel.js +1 -1
  234. package/dist/src/public/channels/mcp.js +1 -1
  235. package/dist/src/public/channels/slack/activity-plan.d.ts +2 -1
  236. package/dist/src/public/channels/slack/activity-plan.js +1 -1
  237. package/dist/src/public/channels/slack/activity.d.ts +2 -0
  238. package/dist/src/public/channels/slack/activity.js +1 -1
  239. package/dist/src/public/channels/slack/api.d.ts +7 -0
  240. package/dist/src/public/channels/slack/api.js +1 -1
  241. package/dist/src/public/channels/slack/app-manifest.d.ts +9 -0
  242. package/dist/src/public/channels/slack/app-manifest.js +1 -0
  243. package/dist/src/public/channels/slack/attachments.d.ts +5 -2
  244. package/dist/src/public/channels/slack/attachments.js +1 -1
  245. package/dist/src/public/channels/slack/inbound-content.js +6 -3
  246. package/dist/src/public/channels/slack/index.d.ts +1 -0
  247. package/dist/src/public/channels/slack/input-response.d.ts +2 -0
  248. package/dist/src/public/channels/slack/input-response.js +1 -1
  249. package/dist/src/public/channels/slack/interaction-cards.js +1 -1
  250. package/dist/src/public/channels/slack/interactions.d.ts +2 -0
  251. package/dist/src/public/channels/slack/interactions.js +1 -1
  252. package/dist/src/public/channels/slack/slackChannel.d.ts +7 -1
  253. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  254. package/dist/src/public/channels/slack/slash-command.d.ts +5 -1
  255. package/dist/src/public/channels/slack/slash-command.js +1 -1
  256. package/dist/src/public/channels/slack/transport.d.ts +76 -0
  257. package/dist/src/public/channels/slack/transport.js +1 -0
  258. package/dist/src/public/definitions/remote-agent.d.ts +0 -9
  259. package/dist/src/public/definitions/workspace-agent.d.ts +0 -3
  260. package/dist/src/public/definitions/workspace-agent.js +1 -1
  261. package/dist/src/runtime/agent/bootstrap.d.ts +0 -1
  262. package/dist/src/runtime/agent/bootstrap.js +1 -1
  263. package/dist/src/runtime/connections/mcp-client.js +1 -1
  264. package/dist/src/runtime/connections/mcp-tracing.d.ts +27 -0
  265. package/dist/src/runtime/connections/mcp-tracing.js +1 -0
  266. package/dist/src/runtime/resolve-agent-graph.js +1 -1
  267. package/dist/src/runtime/resolve-agent.js +1 -1
  268. package/dist/src/runtime/subagents/dynamic-agent-config.d.ts +0 -2
  269. package/dist/src/runtime/subagents/dynamic-agent-config.js +1 -1
  270. package/dist/src/runtime/subagents/dynamic-remote-agent-config.d.ts +0 -2
  271. package/dist/src/runtime/subagents/dynamic-remote-agent-config.js +1 -1
  272. package/dist/src/runtime/types.d.ts +1 -2
  273. package/dist/src/services/dev-client/vercel-auth-error.d.ts +1 -1
  274. package/dist/src/setup/cli/channel-setup-prompter.d.ts +2 -9
  275. package/dist/src/setup/cli/channel-setup-prompter.js +1 -1
  276. package/dist/src/setup/cli/index.d.ts +1 -1
  277. package/dist/src/setup/connection-connector.js +1 -1
  278. package/dist/src/setup/flows/model-login-connection.d.ts +0 -16
  279. package/dist/src/setup/flows/model-login-connection.js +1 -1
  280. package/dist/src/setup/flows/model-login-options.d.ts +59 -0
  281. package/dist/src/setup/flows/model-login-options.js +1 -0
  282. package/dist/src/setup/flows/model-login.js +1 -1
  283. package/dist/src/setup/flows/model-source-change.d.ts +0 -2
  284. package/dist/src/setup/flows/model-source-change.js +1 -1
  285. package/dist/src/setup/flows/registry-session.d.ts +15 -13
  286. package/dist/src/setup/flows/registry-session.js +1 -1
  287. package/dist/src/setup/flows/registry.js +1 -1
  288. package/dist/src/setup/flows/vercel-model-login.js +1 -1
  289. package/dist/src/setup/integrations/photon/setup-flow.js +1 -1
  290. package/dist/src/setup/prompter.d.ts +2 -2
  291. package/dist/src/setup/registry-setup-client.js +1 -1
  292. package/dist/src/setup/registry-setup-protocol.d.ts +0 -4
  293. package/dist/src/setup/scaffold/create/project.js +1 -1
  294. package/dist/src/setup/slack-connect-lifecycle.js +1 -1
  295. package/dist/src/setup/verified-remote-agent.d.ts +1 -0
  296. package/dist/src/setup/verified-remote-agent.js +1 -1
  297. package/dist/src/shared/action-types.d.ts +2 -2
  298. package/dist/src/shared/agent-definition.d.ts +0 -9
  299. package/dist/src/shared/agent-turn-outcome.d.ts +1 -1
  300. package/dist/src/shared/channel-definition.d.ts +2 -2
  301. package/dist/src/shared/conversation-context.d.ts +0 -4
  302. package/dist/src/shared/conversation-context.js +1 -1
  303. package/dist/src/shared/validate-authorization.js +1 -1
  304. package/dist/src/shared/vercel-connect-metadata.d.ts +12 -0
  305. package/dist/src/shared/vercel-connect-metadata.js +1 -0
  306. package/dist/src/subagents/agent-handle-errors.d.ts +0 -4
  307. package/dist/src/subagents/agent-handle-errors.js +1 -1
  308. package/dist/src/subagents/callback-route.js +1 -1
  309. package/dist/src/subagents/callback-step.d.ts +0 -22
  310. package/dist/src/subagents/callback-step.js +1 -1
  311. package/dist/src/subagents/event-proxy-step.js +1 -1
  312. package/dist/src/subagents/hitl-proxy.d.ts +3 -5
  313. package/dist/src/subagents/hitl-proxy.js +1 -1
  314. package/dist/src/subagents/invocation.d.ts +5 -6
  315. package/dist/src/subagents/parent-notification.d.ts +1 -18
  316. package/dist/src/subagents/parent-notification.js +1 -1
  317. package/dist/src/subagents/remote-dispatch.js +1 -1
  318. package/dist/src/subagents/tool.d.ts +0 -3
  319. package/dist/src/subagents/tool.js +1 -1
  320. package/dist/src/svelte/index.js +1 -1
  321. package/dist/src/svelte/use-eve-agent.js +1 -1
  322. package/dist/src/tools/framework/agent-contract.d.ts +0 -2
  323. package/dist/src/tools/framework/agent-contract.js +1 -1
  324. package/dist/src/tracing/agent-action-instrumentation.js +1 -1
  325. package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
  326. package/dist/src/tracing/agent-memory-instrumentation.js +1 -1
  327. package/dist/src/tracing/agent-otel-provider.js +2 -2
  328. package/dist/src/tracing/agent-otel-session-context.js +1 -1
  329. package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
  330. package/dist/src/tracing/agent-tool-span-context.d.ts +15 -0
  331. package/dist/src/tracing/agent-tool-span-context.js +1 -0
  332. package/dist/src/tracing/otel-declaration.d.ts +4 -9
  333. package/dist/src/vue/index.js +1 -1
  334. package/dist/src/vue/use-eve-agent.js +1 -1
  335. package/docs/agent-config.md +12 -13
  336. package/docs/channels/chat-sdk.mdx +1 -1
  337. package/docs/channels/custom.mdx +1 -1
  338. package/docs/channels/eve.mdx +4 -4
  339. package/docs/channels/mcp.mdx +10 -10
  340. package/docs/channels/slack.mdx +32 -3
  341. package/docs/concepts/sessions-runs-and-streaming.md +5 -6
  342. package/docs/connections/overview.mdx +22 -0
  343. package/docs/guides/deployment/overview.md +1 -1
  344. package/docs/guides/deployment/self-hosting.md +1 -1
  345. package/docs/guides/deployment/vercel.mdx +2 -2
  346. package/docs/guides/dev-tui.md +7 -7
  347. package/docs/guides/dynamic-capabilities.md +2 -2
  348. package/docs/guides/frontend/overview.mdx +5 -3
  349. package/docs/guides/hooks.md +4 -2
  350. package/docs/guides/instrumentation/agent-runs.mdx +7 -7
  351. package/docs/guides/instrumentation/instrumentation.mdx +22 -5
  352. package/docs/guides/instrumentation/otel.mdx +30 -0
  353. package/docs/guides/remote-agents.md +3 -4
  354. package/docs/guides/self-modification.md +1 -1
  355. package/docs/memory/custom-provider.md +1 -1
  356. package/docs/protocols/acp.md +1 -1
  357. package/docs/reference/cli.md +91 -97
  358. package/docs/schedules.mdx +4 -5
  359. package/docs/subagents/index.mdx +5 -7
  360. package/docs/tools/human-in-the-loop.md +4 -0
  361. package/docs/tools/overview.mdx +2 -0
  362. package/docs/tools/workflows.mdx +1 -1
  363. package/docs/tutorial/remember-definitions.mdx +1 -1
  364. package/docs/tutorial/ship-it.mdx +1 -1
  365. package/package.json +8 -7
  366. package/dist/src/cli/commands/channels.d.ts +0 -9
  367. package/dist/src/cli/commands/channels.js +0 -1
  368. package/dist/src/compiled/_chunks/workflow/dist-CNT2vjZ4.js +0 -1
  369. package/dist/src/compiled/_chunks/workflow/dist-DtXwQbZr.js +0 -3
  370. package/dist/src/compiled/_chunks/workflow/frames-DnrfSd1P.js +0 -3
  371. package/dist/src/compiled/_chunks/workflow/resume-hook-BmJ263ZR.js +0 -1
  372. package/dist/src/compiled/_chunks/workflow/run-NLvREued.js +0 -1
  373. package/dist/src/compiled/_chunks/workflow/serialization-HCDeQWcR.js +0 -3
  374. package/dist/src/compiled/_chunks/workflow/sleep-Bi508qmg.js +0 -1
  375. package/dist/src/execution/effective-output-schema.d.ts +0 -22
  376. package/dist/src/execution/effective-output-schema.js +0 -1
  377. package/dist/src/node_modules/.pnpm/@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38/node_modules/@vercel/connect/dist/connector.js +0 -1
  378. package/dist/src/public/channels/slack/api-errors.d.ts +0 -33
  379. package/dist/src/public/channels/slack/api-errors.js +0 -1
  380. package/dist/src/shared/run-mode.d.ts +0 -7
  381. package/dist/src/shared/run-mode.js +0 -1
  382. package/dist/src/subagents/parent-result.d.ts +0 -14
  383. package/dist/src/subagents/parent-result.js +0 -1
  384. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/index.js +0 -0
  385. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/internal/base-url.js +0 -0
  386. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/internal/default-scopes.js +0 -0
  387. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/internal/env.js +0 -0
  388. /package/dist/src/node_modules/.pnpm/{@vercel_connect@2.2.0_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_37d5e4f23f0f03cba2e0819e67e81b38 → @vercel_connect@2.3.3_@ai-sdk_mcp@2.0.52_zod@4.5.4__@auth_core@0.41.2_@chat-adapter_sla_a37674779346d612fa7d2ca9bd316494}/node_modules/@vercel/connect/dist/internal/url-validation.js +0 -0
  389. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/auth-errors.js +0 -0
  390. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/exchange-vercel-oidc-token.js +0 -0
  391. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/get-context.js +0 -0
  392. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-sync.js +0 -0
  393. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/get-vercel-oidc-token-with-refresh.js +0 -0
  394. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/index.js +0 -0
  395. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/oauth.js +0 -0
  396. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/token-error.js +0 -0
  397. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/token-io.js +0 -0
  398. /package/dist/src/node_modules/.pnpm/{@vercel_oidc@3.8.8 → @vercel_oidc@3.8.9}/node_modules/@vercel/oidc/dist/verify-vercel-oidc-token.js +0 -0
@@ -18,7 +18,7 @@ export default defineAgent({
18
18
  ```
19
19
 
20
20
  For a static AI Gateway model ID, you can make the same source change from the
21
- project root with `eve set --model anthropic/claude-opus-5.5` or from the local
21
+ project root with `eve set model anthropic/claude-opus-5.5` or from the local
22
22
  dev TUI with `/model anthropic/claude-opus-5.5`.
23
23
 
24
24
  The root `agent.ts` can be omitted when no runtime config is needed. eve then selects its default `agent.ts` source at the same slot, configured with `spacexai/grok-4.7`; authoring the file replaces that source.
@@ -133,7 +133,7 @@ A dynamic model selection can return `reasoning` alongside `model` to override
133
133
  the agent-level setting for that selection. Omitting it inherits the agent setting;
134
134
  `"provider-default"` explicitly uses the provider's default.
135
135
 
136
- Run `eve set --reasoning high` to update this field from the command line.
136
+ Run `eve set model --reasoning high` to update this field from the command line.
137
137
 
138
138
  ## Compaction
139
139
 
@@ -191,8 +191,8 @@ could retry against a fresh quota share. A reply that answers neither option
191
191
  is queued while the existing prompt stays pending; eve does not raise another
192
192
  copy. The reply is processed once the budget is granted.
193
193
 
194
- Sessions that cannot reach a human — task-mode runs such as schedules and
195
- delegated runs without input proxying — skip the prompt and fail the next model
194
+ Sessions that cannot request input from a human, such as markdown schedules and
195
+ delegated runs without input proxying, skip the prompt and fail the next model
196
196
  call with `SESSION_TOKEN_LIMIT_REACHED` for token budgets or
197
197
  `SESSION_TOKEN_COST_LIMIT_REACHED` for model token cost. A delegated task with
198
198
  no inherited quota also fails instead of raising a continuation prompt that
@@ -328,15 +328,14 @@ it falls back to the World's default retention period.
328
328
 
329
329
  `defineAgent` takes a few more fields, all optional. For the exported types, see the [TypeScript API Reference](./reference/typescript-api).
330
330
 
331
- | Field | Type | Default | Description |
332
- | -------------- | --------------------------------------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
333
- | `reasoning` | `AgentReasoningDefinition` | provider default | Provider-agnostic reasoning effort forwarded to the agent's turn model calls. |
334
- | `modelOptions` | `AgentModelOptionsDefinition` | none | Provider option overrides forwarded to the model call. |
335
- | `limits` | `AgentLimitsDefinition` | field-specific | Framework-owned runtime limits. Sessions complete after 30 days by default; usage-limit defaults and inheritance are described above. Set a limit to `false` to disable it. |
336
- | `experimental` | `AgentExperimentalDefinition` | unset | Unstable opt-ins. `workflow.world` selects the Workflow world package on the root agent; `workflow.modelCallsPerStep` batches sequential model calls into a wider replay unit; `workflow.retention` controls how long the durable runtime keeps run data. |
337
- | `outputSchema` | Standard Schema or a JSON Schema object | none | Structured return type for function-like invocations such as a subagent turn, schedule, or remote job. Ordinary interactive turns ignore it unless the client supplies a per-message schema. |
338
- | `build` | `{ externalDependencies?: string[] }` | none | Hosted-build packaging controls. `externalDependencies` keeps listed packages external while eve compiles authored modules such as tools and channels, and traces those packages into the hosted output. |
339
- | `tool` | `boolean` | `true` | Exposes this agent to its parent model as a tool. On the root agent, controls the built-in `agent` tool. A subagent with `tool: false` remains callable from authored workflow tools through `ctx.agent()`. |
331
+ | Field | Type | Default | Description |
332
+ | -------------- | ------------------------------------- | ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
333
+ | `reasoning` | `AgentReasoningDefinition` | provider default | Provider-agnostic reasoning effort forwarded to the agent's turn model calls. |
334
+ | `modelOptions` | `AgentModelOptionsDefinition` | none | Provider option overrides forwarded to the model call. |
335
+ | `limits` | `AgentLimitsDefinition` | field-specific | Framework-owned runtime limits. Sessions complete after 30 days by default; usage-limit defaults and inheritance are described above. Set a limit to `false` to disable it. |
336
+ | `experimental` | `AgentExperimentalDefinition` | unset | Unstable opt-ins. `workflow.world` selects the Workflow world package on the root agent; `workflow.modelCallsPerStep` batches sequential model calls into a wider replay unit; `workflow.retention` controls how long the durable runtime keeps run data. |
337
+ | `build` | `{ externalDependencies?: string[] }` | none | Hosted-build packaging controls. `externalDependencies` keeps listed packages external while eve compiles authored modules such as tools and channels, and traces those packages into the hosted output. |
338
+ | `tool` | `boolean` | `true` | Exposes this agent to its parent model as a tool. On the root agent, controls the built-in `agent` tool. A subagent with `tool: false` remains callable from authored workflow tools through `ctx.agent()`. |
340
339
 
341
340
  `externalDependencies` is a packaging control only. It keeps selected packages as runtime dependencies in the hosted output; it does not authorize, configure, or review any third-party service those packages may call.
342
341
 
@@ -104,7 +104,7 @@ bot.onNewMention(async (thread, message) => {
104
104
  });
105
105
  ```
106
106
 
107
- `options` accepts `{ thread, auth?, title?, mode?, callback?, adapterName?, turnPolicy? }`. `title` sets the eve session's display title without changing the model message; `auth` attaches an authenticated principal to the turn.
107
+ `options` accepts `{ thread, auth?, title?, callback?, adapterName?, turnPolicy? }`. `title` sets the eve session's display title without changing the model message; `auth` attaches an authenticated principal to the turn.
108
108
 
109
109
  ### Steering
110
110
 
@@ -334,7 +334,7 @@ export default defineChannel({
334
334
  });
335
335
  ```
336
336
 
337
- The input contains the channel's `state`, `caller`, `channel`, `mode`, and `environment`. A principal caller omits `principalId`, `issuer`, and `subject`, but its `attributes` come from route auth and can still contain identifying values. Return `"public"`, `"private"`, or `"unknown"`. Return `"unknown"` when the channel does not have enough evidence to classify confidently; consumers treat it as non-public. A missing, throwing, asynchronous, or malformed classifier also fails closed to `"unknown"`.
337
+ The input contains the channel's `state`, `caller`, `channel`, and `environment`. A principal caller omits `principalId`, `issuer`, and `subject`, but its `attributes` come from route auth and can still contain identifying values. Return `"public"`, `"private"`, or `"unknown"`. Return `"unknown"` when the channel does not have enough evidence to classify confidently; consumers treat it as non-public. A missing, throwing, asynchronous, or malformed classifier also fails closed to `"unknown"`.
338
338
 
339
339
  When you explicitly annotate a callback, use `AudienceContext<TState>`. `AudienceInput<TState>` remains supported for existing callbacks while you migrate.
340
340
 
@@ -49,8 +49,8 @@ See [Start a session](../concepts/sessions-runs-and-streaming#start-a-session) f
49
49
  initialization boundary, first-turn identity, readiness response, and retry behavior.
50
50
 
51
51
  The create request still requires route auth. Session audience and the timeout are selected
52
- at creation; they do not change when the first message arrives. Task mode and turn-scoped
53
- fields such as `clientContext` and `outputSchema` require a message on the create request.
52
+ at creation; they do not change when the first message arrives. Turn-scoped fields such as
53
+ `clientContext` and `outputSchema` require a message on the create request.
54
54
 
55
55
  Include an initial message to create the session and start its first turn in one request:
56
56
 
@@ -200,8 +200,8 @@ call the endpoint. `auth` still controls access. For a classification that
200
200
  depends on channel state or application-specific verified data, use a [custom
201
201
  channel audience](./custom#conversation-audience).
202
202
 
203
- You can also pass a function that receives `caller`, channel, run mode, and
204
- deployment environment. Classification is fixed at session creation, so a later
203
+ You can also pass a function that receives `caller`, channel, and deployment
204
+ environment. Classification is fixed at session creation, so a later
205
205
  turn from a different caller does not reclassify the session.
206
206
 
207
207
  For a remote agent, a trusted dispatch can forward the original audience and
@@ -168,7 +168,7 @@ MCP clients receive four tools:
168
168
 
169
169
  | Tool | Input | Purpose |
170
170
  | -------------- | ----------------------------- | ----------------------------------------------------------- |
171
- | `agent_start` | `{ message, outputSchema? }` | Start durable work and immediately return an invocation ID. |
171
+ | `agent_start` | `{ message }` | Start durable work and immediately return an invocation ID. |
172
172
  | `agent_get` | `{ invocationId }` | Read the invocation's complete current state. |
173
173
  | `agent_update` | `{ invocationId, responses }` | Answer the complete pending human-input batch. |
174
174
  | `agent_cancel` | `{ invocationId }` | Request cooperative cancellation of non-terminal work. |
@@ -177,7 +177,7 @@ The server also returns `instructions` from `initialize` and `server/discover` t
177
177
  protocol for the connecting model, so a hosted client does not have to infer it from the tool
178
178
  schemas alone.
179
179
 
180
- `agent_start` creates one task-mode eve session and returns after durable acceptance without
180
+ `agent_start` creates one eve session and returns after durable acceptance without
181
181
  waiting for the session continuation hook to become readable. Keep its `invocationId`, then call
182
182
  `agent_get` until the invocation reaches a terminal state. While the status is `working`, wait at
183
183
  least `pollAfterMs` before polling again.
@@ -187,22 +187,22 @@ The invocation response is discriminated by `status`:
187
187
  - `working`: work is active; continue polling according to `pollAfterMs`.
188
188
  - `input_required`: present `inputRequests`, then send the complete answer batch through `agent_update`. A successful update returns the current invocation state.
189
189
  - `authorization_required`: present the returned sign-in URL, user code, or instructions. The connection callback resumes the invocation automatically; continue polling.
190
- - `completed`: consume the optional `result`.
190
+ - `completed`: the agent's turn settled. Consume the optional `result`: the final assistant message.
191
191
  - `failed`: inspect the structured `error`.
192
192
  - `cancelled`: cancellation reached a terminal state.
193
193
 
194
194
  A tool result with `isError: true` means the call itself was rejected. A `failed` status means the call succeeded and the task itself failed. Handle them differently: correct the call in the first case, report the task failure in the second. Rejected calls carry `structuredContent.error` with a stable `code`, a short `message`, and `retryable`:
195
195
 
196
- | `code` | Meaning | `retryable` |
197
- | --------------- | ------------------------------------------------------------------------------ | ----------- |
198
- | `invalid_input` | An argument was rejected, for example an oversized or external `outputSchema`. | `false` |
199
- | `not_found` | The invocation does not exist, has expired, or belongs to another caller. | `false` |
200
- | `conflict` | The invocation is not in the expected state; read it with `agent_get` first. | `true` |
201
- | `internal` | eve failed; `errorId` correlates with server logs. No details are exposed. | `false` |
196
+ | `code` | Meaning | `retryable` |
197
+ | --------------- | ---------------------------------------------------------------------------- | ----------- |
198
+ | `invalid_input` | An argument was rejected, for example an oversized `message`. | `false` |
199
+ | `not_found` | The invocation does not exist, has expired, or belongs to another caller. | `false` |
200
+ | `conflict` | The invocation is not in the expected state; read it with `agent_get` first. | `true` |
201
+ | `internal` | eve failed; `errorId` correlates with server logs. No details are exposed. | `false` |
202
202
 
203
203
  Cancellation is cooperative, so call `agent_get` after `agent_cancel` until the state becomes terminal.
204
204
 
205
- Requests are bounded: the whole MCP request body is limited to 1 MiB, `message` to 64 KiB, each input-response `text` to 16 KiB (both measured as UTF-8 bytes, not characters), and one `agent_update` to 64 responses. Optional output schemas are limited to 64 KiB, 32 levels, and 2,048 nodes, and external `$ref` values are rejected. Oversized bodies receive a JSON-RPC `413`; oversized fields fail input validation before any work starts.
205
+ Requests are bounded: the whole MCP request body is limited to 1 MiB, `message` to 64 KiB, each input-response `text` to 16 KiB (both measured as UTF-8 bytes, not characters), and one `agent_update` to 64 responses. Oversized bodies receive a JSON-RPC `413`; oversized fields fail input validation before any work starts.
206
206
 
207
207
  ### Durability guarantees
208
208
 
@@ -187,7 +187,7 @@ export default slackChannel({
187
187
 
188
188
  The model-visible `<slack_message>` includes `sender_id`, `bot_user_id` when available, and the `is_mentioned` value from `ctx.isBotMentioned()`. Its `<content>` keeps `<@USER_ID>` intact while converting other mrkdwn to Markdown; routing is unchanged.
189
189
 
190
- When a Slack message shares another Slack message, eve extracts the forwarded message body from Slack's message-unfurl attachment and includes it in `<content>`. The original top-level comment, when present, remains alongside the forwarded content.
190
+ When a Slack message includes a link preview, eve includes its attachment text in `<content>` alongside the sender's message, including when the link has words around it. Shared Slack messages work the same way: eve extracts the forwarded message body from Slack's message-unfurl attachment and keeps any top-level comment.
191
191
 
192
192
  #### Restrict who can invoke the agent
193
193
 
@@ -407,6 +407,7 @@ import { connectSlackCredentials } from "@vercel/connect/eve";
407
407
 
408
408
  const { botToken } = connectSlackCredentials("slack/my-agent");
409
409
  const response = await callSlackApi({
410
+ api: { apiBaseUrl: process.env.SLACK_API_BASE_URL },
410
411
  botToken,
411
412
  context: { teamId: "T0123456789" },
412
413
  operation: "reactions.get",
@@ -418,8 +419,34 @@ if (!response.ok) throw new Error(String(response.error));
418
419
  `callSlackApi` resolves function-form tokens (secret managers, Connect
419
420
  rotation) with the supplied `context` at call time and form-encodes the body — the only safe default,
420
421
  since Slack's JSON support is partial (`conversations.replies` rejects
421
- JSON). `resolveSlackBotToken` materializes a `SlackBotToken` to a string
422
- when you need the bearer token itself.
422
+ JSON). It takes the same
423
+ [`api`](#point-the-channel-at-a-different-slack-api-host) the channel takes, checked and
424
+ confined the same way, so a call made without a channel carries the same guarantees. An
425
+ `apiBaseUrl` of `undefined` keeps Slack's own host.
426
+
427
+ `resolveSlackBotToken` materializes a `SlackBotToken` to a string when you need the
428
+ bearer token itself.
429
+
430
+ ### Point the channel at a different Slack API host
431
+
432
+ ```ts
433
+ slackChannel({
434
+ api: {
435
+ apiBaseUrl: "https://slack-simulator.example/api/slack",
436
+ fetch: (input, init) => {
437
+ const headers = new Headers(init?.headers);
438
+ headers.set("x-vercel-protection-bypass", process.env.SLACK_SIMULATOR_BYPASS_SECRET ?? "");
439
+ return fetch(input, { ...init, headers });
440
+ },
441
+ fileBaseUrl: "https://slack-simulator.example/files",
442
+ },
443
+ credentials: { botToken: process.env.SLACK_BOT_TOKEN },
444
+ });
445
+ ```
446
+
447
+ The bases say where a call may go. `apiBaseUrl` is the base Slack Web API method names resolve against, and defaults to `https://slack.com/api/`. `fileBaseUrl` adds a base for attachment downloads and falls back to `apiBaseUrl`: a download URL under it is fetched with the bot token, in addition to `files.slack.com` and Enterprise Grid file URLs. Every other URL passes through to the model provider unchanged. Both bases must be absolute `http:` or `https:` URLs carrying no query string or fragment; `slackChannel()` throws on one that is not, naming the option. A missing trailing slash is added, so `https://sim.example/api` sends `chat.postMessage` to `https://sim.example/api/chat.postMessage`.
448
+
449
+ `api.fetch` says how the traffic travels. It replaces the global `fetch` for calls to the configured bases — use it to attach the per-call header a host behind an authenticating proxy requires, as the example does for a simulator behind Vercel Deployment Protection. eve confines it to those bases' origins, so that header reaches the simulator alone: `files.slack.com`, and any other host Slack names in a response or an inbound payload, keep the global `fetch`. A wrapper therefore attaches its credential unconditionally. With no base configured every call already goes to Slack's own hosts, and `api.fetch` carries all of them, which is what observes or stubs the traffic in a test.
423
450
 
424
451
  ### Delivery
425
452
 
@@ -521,6 +548,8 @@ Inbound files behind authenticated Slack URLs are staged with `fetchFile`. See [
521
548
 
522
549
  Private file downloads resolve credentials from the session's app installation workspace and require the Slack bot token's `files:read` scope. Add the scope and reinstall the Slack app before sending attachments.
523
550
 
551
+ Downloads cover Slack's own file hosts plus URLs under a configured [`api.fileBaseUrl`](#point-the-channel-at-a-different-slack-api-host), and travel on `api.fetch` when one is configured.
552
+
524
553
  Staged files live in the session sandbox under `/workspace/attachments`. Session history keeps a reference to that path, not a second copy of the Slack file. If the backend can no longer reattach the original sandbox, eve cannot restore the attachment bytes from history; later turns receive a missing-file result. Store files outside the sandbox when the agent must retain them independently of sandbox availability.
525
554
 
526
555
  ## What to read next
@@ -41,8 +41,8 @@ curl -X POST http://127.0.0.1:2000/eve/v1/session
41
41
 
42
42
  eve starts the durable workflow, establishes its inbox, and waits for the first message before
43
43
  running session-scoped initialization or emitting `session.started`. The first message sent to the returned
44
- `sessionId` remains `turn_0`. Message-free creation supports conversation mode only and does not
45
- accept turn-scoped `clientContext`, `outputSchema`, callbacks, or activity observers.
44
+ `sessionId` remains `turn_0`. Message-free creation does not accept turn-scoped `clientContext`,
45
+ `outputSchema`, callbacks, or activity observers.
46
46
 
47
47
  To create the session and start its first turn in one request, include the message:
48
48
 
@@ -86,8 +86,8 @@ The stream is newline-delimited JSON (NDJSON), one event per line:
86
86
  | `message.appended` | An assistant text delta. |
87
87
  | `message.completed` | A finalized assistant text block. |
88
88
  | `result.completed` | The finalized structured result for a turn that requested an output schema; carries `result`. |
89
- | `compaction.requested` | Context-window compaction began; carries `modelId`, `sessionId`, `turnId`, `usageInputTokens`. |
90
- | `compaction.completed` | A compaction checkpoint was written to durable history. |
89
+ | `compaction.requested` | Context-window compaction began; carries `modelId`, `sessionId`, `turnId`, `stepIndex`, and `usageInputTokens`. |
90
+ | `compaction.completed` | A compaction checkpoint was written to durable history; carries the same model, session, turn, and step identity. |
91
91
  | `authorization.required` | A connection needs OAuth; carries `name`, `description`, and an `authorization` challenge. |
92
92
  | `authorization.completed` | A connection's authorization resolved; carries `outcome`. |
93
93
  | `step.completed` | A model step finished; carries `finishReason` and usage. |
@@ -128,8 +128,7 @@ A provider response ending with `content-filter` fails with `MODEL_CALL_FAILED`,
128
128
  `details.finishReason: "content-filter"`. Details also include the Gateway
129
129
  `generationId` when available. eve does not retry the filtered response or emit
130
130
  `message.completed` for its partial text; deltas already streamed remain visible.
131
- Conversation sessions wait for another user message, while task-mode runs return
132
- a failed result.
131
+ The session then waits for another user message.
133
132
 
134
133
  ## The event envelope
135
134
 
@@ -58,6 +58,28 @@ must also set `instanceKey` to a stable, non-secret account or tenant identifier
58
58
  See [Dynamic capabilities](/docs/guides/dynamic-capabilities#dynamic-connections)
59
59
  for event scope, naming, conflicts, and durable recovery behavior.
60
60
 
61
+ Tools from a `turn.started` connection can require approval, including an
62
+ `approval.response` policy. When an approval resumes between turns, eve rebuilds
63
+ the connection callbacks before checking the response policy, even in a fresh
64
+ process. This restoration uses the pending request's turn coordinates and the
65
+ current authenticated session context; it does not emit another public
66
+ `turn.started` event. The response policy still receives the authenticated
67
+ responder separately. When one delivery answers requests from different turns,
68
+ eve restores each candidate's originating connection scope before its policy
69
+ check, then prepares the complete batch selected for tool replay. Keep connection
70
+ resolvers idempotent because restoration can run them again.
71
+
72
+ Restoration uses current resolver results, not a historical connection snapshot.
73
+ If the tool is absent from the persisted tool metadata, or its required response
74
+ policy is unavailable, eve refuses the response and leaves the request pending.
75
+ eve does not reconstruct missing tool metadata from earlier turns. Before replay, eve checks that the
76
+ approved tool is still available and that its connection identity has not
77
+ changed since the call requested approval. A missing or changed connection
78
+ fails the replay rather than sending the call to a replacement destination.
79
+ Request a new tool call and approval after correcting the connection. Identity
80
+ includes the endpoint and `instanceKey`; use a distinct `instanceKey` for each
81
+ account or tenant even when they share an endpoint.
82
+
61
83
  ## Static-token auth
62
84
 
63
85
  `getToken` returns a `TokenResult` (`{ token, expiresAt? }`), and eve sends it as `Authorization: Bearer <token>` on every request. Because it runs on each connection attempt, you can mint a fresh token from wherever you keep secrets, including an env var, a secrets manager, an internal vault, or your own OAuth exchange:
@@ -47,7 +47,7 @@ curl https://your_agent.example.com/eve/v1/health
47
47
  Then connect the development terminal user interface (TUI) to the deployment and send a real message:
48
48
 
49
49
  ```bash
50
- eve dev https://your_agent.example.com
50
+ eve remote connect --url https://your_agent.example.com
51
51
  ```
52
52
 
53
53
  Set `VERCEL_AUTOMATION_BYPASS_SECRET` locally first if a Vercel deployment uses Deployment Protection.
@@ -116,7 +116,7 @@ curl https://your_agent.example.com/eve/v1/health
116
116
  Then connect the development TUI and complete a real turn:
117
117
 
118
118
  ```bash
119
- eve dev https://your_agent.example.com
119
+ eve remote connect --url https://your_agent.example.com
120
120
  ```
121
121
 
122
122
  ## Continue configuring production
@@ -143,14 +143,14 @@ For a single unnamed agent, check the health route and connect the development T
143
143
 
144
144
  ```bash
145
145
  curl https://your_agent.vercel.app/eve/v1/health
146
- eve dev https://your_agent.vercel.app
146
+ eve remote connect --url https://your_agent.vercel.app
147
147
  ```
148
148
 
149
149
  For a workspace agent, include its public `/eve/<name>` mount. For example:
150
150
 
151
151
  ```bash
152
152
  curl https://your_agent.vercel.app/eve/support/v1/health
153
- eve dev https://your_agent.vercel.app/eve/support
153
+ eve remote connect --url https://your_agent.vercel.app/eve/support
154
154
  ```
155
155
 
156
156
  Set `VERCEL_AUTOMATION_BYPASS_SECRET` locally before connecting if the deployment uses Deployment Protection.
@@ -31,7 +31,7 @@ The transcript remains in your terminal scrollback after you exit. Run `/help` i
31
31
  | `/help` | List available commands. |
32
32
  | `/exit` | Quit the UI. |
33
33
 
34
- `/login`, `/model`, `/add`, `/deploy`, `/info`, and `/traces` are available when `eve dev` runs locally. They are unavailable when the UI connects to a server with `--url`.
34
+ `/login`, `/model`, `/add`, `/deploy`, `/info`, and `/traces` are available when `eve dev` runs locally. They are unavailable when the UI connects through `eve remote connect`.
35
35
 
36
36
  ## Set up a new agent
37
37
 
@@ -86,7 +86,7 @@ Pass an item address to install it directly:
86
86
  /add @acme/analytics
87
87
  ```
88
88
 
89
- Required authorization or deployment setup still runs for the selected item. Press `Esc` to cancel setup; files already installed remain in the project.
89
+ Required authorization or deployment setup still runs for the selected item. Press `Esc` to cancel setup; files already installed remain in the project. If dependency installation fails, retry the `eve add` command in a terminal for details; raw installer output is not captured in the TUI.
90
90
 
91
91
  ## Work with the agent
92
92
 
@@ -131,19 +131,19 @@ Use `--host` and `--port` to bind the local server, or `--no-ui` to run without
131
131
  Pass a URL to use the terminal UI with an existing eve server instead of starting one locally:
132
132
 
133
133
  ```bash
134
- eve dev https://your-app.vercel.app
134
+ eve remote connect --url https://your-app.vercel.app
135
135
  ```
136
136
 
137
- The URL form is shorthand for `--url`. To send credentials or custom request headers, use a URL with HTTP Basic credentials or repeat `-H, --header`:
137
+ Use `eve remote connect` for an existing agent. To send credentials or custom request headers, use a URL with HTTP Basic credentials or repeat `-H, --header`:
138
138
 
139
139
  ```bash
140
- eve dev https://user:pass@your-app.example.com
141
- eve dev https://your-app.example.com -H 'Authorization: Bearer your_token_here'
140
+ eve remote connect --url https://user:pass@your-app.example.com
141
+ eve remote connect --url https://your-app.example.com -H 'Authorization: Bearer your_token_here'
142
142
  ```
143
143
 
144
144
  Remote Vercel sessions reuse an existing authorized CLI session. They do not open an account login flow or modify the local project's Vercel link or `.env.local`.
145
145
 
146
- When Deployment Protection blocks startup, eve verifies the target project and asks before adding a Trusted Sources rule for development access to that deployment's environment. After approval, eve applies the rule and checks access again before returning to chat. Cancelling preserves your draft; restart `eve dev <url>` to try again. If you cannot change the project's policy, provide `VERCEL_AUTOMATION_BYPASS_SECRET` or ask a project administrator to configure access in Deployment Protection settings.
146
+ When Deployment Protection blocks startup, eve verifies the target project and asks before adding a Trusted Sources rule for development access to that deployment's environment. After approval, eve applies the rule and checks access again before returning to chat. Cancelling preserves your draft; restart `eve remote connect --url <url>` to try again. If you cannot change the project's policy, provide `VERCEL_AUTOMATION_BYPASS_SECRET` or ask a project administrator to configure access in Deployment Protection settings.
147
147
 
148
148
  ## What to read next
149
149
 
@@ -126,8 +126,8 @@ export default defineDynamic({
126
126
  });
127
127
  ```
128
128
 
129
- The returned remote definition can change its URL, path, headers, auth,
130
- principal forwarding, and output schema. Function-valued URLs resolve when the
129
+ The returned remote definition can change its URL, path, headers, auth, and
130
+ principal forwarding. Function-valued URLs resolve when the
131
131
  dynamic event runs. Auth and headers remain lazy and resolve before each
132
132
  outbound request without entering durable workflow state.
133
133
 
@@ -229,8 +229,10 @@ const pendingRequests = agent.data.messages
229
229
  return request ? [request] : [];
230
230
  });
231
231
 
232
+ const inputDisabled = ["submitted", "streaming", "resuming"].includes(agent.status);
233
+
232
234
  return pendingRequests.map((request) => (
233
- <fieldset key={request.requestId}>
235
+ <fieldset disabled={inputDisabled} key={request.requestId}>
234
236
  <legend>
235
237
  {request.kind === "tool-approval"
236
238
  ? "Approval required"
@@ -252,7 +254,7 @@ return pendingRequests.map((request) => (
252
254
  ));
253
255
  ```
254
256
 
255
- For a question with `allowFreeform`, render a text input and send `{ requestId, text }`. The default reducer marks each matching part as responded immediately. Approved tools update again when eve streams their result.
257
+ For a question with `allowFreeform`, render a text input and send `{ requestId, text }`. The default reducer keeps each request pending until the server confirms its resolution through `input.resolved` or `approval.settled`. Disable input controls while the response is being processed; a refused approval attempt leaves the request answerable. Approved tools update again when eve streams their result.
256
258
 
257
259
  ## Authorization prompts
258
260
 
@@ -348,7 +350,7 @@ const agent = useEveAgent({ reducer: toolCounter });
348
350
  // agent.data is ToolLog
349
351
  ```
350
352
 
351
- `reduce(data, event)` receives both authoritative eve stream events and client projection events (`client.message.submitted`, `client.message.failed`, `client.input.responded`). `client.input.responded` updates the submitting UI immediately; the durable `input.resolved` event later confirms the server-accepted outcome and lets replayed history rebuild the same HITL state. Return `data` unchanged for events your reducer does not handle.
353
+ `reduce(data, event)` receives both authoritative eve stream events and client projection events (`client.message.submitted`, `client.message.failed`, `client.input.responded`). `client.input.responded` notifies custom reducers that an answer was submitted, not that it was accepted. The default reducer waits for server settlement; the durable `input.resolved` event records the server-accepted outcome and lets replayed history rebuild the same HITL state. Return `data` unchanged for events your reducer does not handle.
352
354
 
353
355
  ## Resumable sessions
354
356
 
@@ -181,14 +181,16 @@ Hooks always run after the event is durably recorded, so if a hook throws, the s
181
181
 
182
182
  ## What happens when a hook throws
183
183
 
184
- A thrown handler during a model turn propagates through turn execution and surfaces as `turn.failed`. In a conversation session, this includes handlers for `turn.started` and the first `step.started` of a model call: the failed turn ends with `session.waiting`, and the next message can start another turn. Task-mode boundary failures remain terminal. If a hook subscribed to a failure-cascade event also throws, it escalates to `session.failed`. For belt-and-suspenders semantics inside a hook, wrap the body in `try`/`catch`. eve treats a thrown hook as a real failure.
184
+ A thrown handler during a model turn propagates through turn execution and surfaces as `turn.failed`. This includes handlers for `turn.started` and the first `step.started` of a model call: the failed turn ends with `session.waiting`, and the next message can start another turn. If a hook subscribed to a failure-cascade event also throws, it escalates to `session.failed`. For belt-and-suspenders semantics inside a hook, wrap the body in `try`/`catch`. eve treats a thrown hook as a real failure.
185
185
 
186
- For `subagent.called` and `subagent.completed`, a thrown handler fails the notification step and follows the workflow runtime's step retry policy. A retry can publish the event again before rerunning its hooks. Parent execution waits for the notification step to finish or exhaust its retries.
186
+ For `subagent.called`, `subagent.completed`, and events proxied from a child, a thrown handler fails the publishing step and follows the workflow runtime's step retry policy. A retry can publish the event again before rerunning its hooks. Parent execution waits for the publishing step to finish or exhaust its retries. Exhausting retries fails the session.
187
187
 
188
188
  ## Subagent isolation
189
189
 
190
190
  Subagents may carry their own `agent/hooks/` directory. Subagent hooks fire only inside the subagent scope. Parent-agent hooks do not fire for subagent turns, and subagent hooks see only the subagent's own context.
191
191
 
192
+ Interactive events such as `input.requested` and `authorization.required` are also published on the parent stream. Parent hooks observe these events after the parent channel handler and stream write, with the parent's session, agent, and channel context. The event retains the child's turn coordinates, so `event.data.turnId` can differ from `ctx.session.turn.id`. The accompanying parent `turn.completed` and `session.waiting` events also invoke parent hooks; they do not resolve pending input requests.
193
+
192
194
  ## Hook vs tool vs provider
193
195
 
194
196
  | Need | Use |
@@ -19,13 +19,6 @@ Agent Runs usage is billed at
19
19
  [Always-on Tracing rates](https://vercel.com/docs/tracing/always-on-tracing#usage-and-pricing)
20
20
  during beta. All plans include 30-day Agent Runs retention during beta.
21
21
 
22
- ## Configure Agent Runs
23
-
24
- Preview and production deployments export to Vercel Agent Runs by default.
25
- Omitting `agent/instrumentation/agent-runs.ts` preserves that default. Export
26
- `agentRuns(...)` from that file to reconfigure it, or export
27
- `disableInstrumentation()` to disable it.
28
-
29
22
  ## Enable tracing on Vercel
30
23
 
31
24
  When `eve deploy` creates a new Vercel project, it configures 100% trace
@@ -47,6 +40,13 @@ Tracing starts as soon as you save the rule. You can also manage sampling
47
40
  rules with [`vercel traces config`](https://vercel.com/docs/cli/traces#manage-trace-sampling-rules).
48
41
  The CLI accepts rates from 1 to 100%; add a 0% rule from the dashboard.
49
42
 
43
+ ## Configure Agent Runs
44
+
45
+ Preview and production deployments export to Vercel Agent Runs by default.
46
+ Omit `agent/instrumentation/agent-runs.ts` to keep that default. To change it,
47
+ default-export `agentRuns(...)` from that file, or default-export
48
+ `disableInstrumentation()` to turn off Agent Runs export.
49
+
50
50
  ## Filter Agent Runs exports
51
51
 
52
52
  `agentRuns()` accepts one `exportPolicy` object or an array applied in order.
@@ -51,6 +51,11 @@ export default defineInstrumentation({
51
51
  `ctx.state` is JSON storage scoped to this file and operation. It survives
52
52
  durable suspension and is released after the terminal event.
53
53
 
54
+ Use `setup` for asynchronous initialization. In `eve dev` and built servers,
55
+ eve awaits every provider's setup before loading the server entry. A setup
56
+ failure stops startup. Modules imported by an instrumentation file load before
57
+ setup, so keep dependencies that need initialization out of those imports.
58
+
54
59
  ## Control inputs and outputs
55
60
 
56
61
  Each lifecycle file created with `defineInstrumentation(...)` has an
@@ -78,8 +83,8 @@ export default defineInstrumentation({
78
83
  });
79
84
  ```
80
85
 
81
- The function receives `agentName`, `channel`, `audience`, `mode`,
82
- `environment`, and `principalType`. `audience` is `"public"`, `"private"`, or
86
+ The function receives `agentName`, `channel`, `audience`, `environment`, and
87
+ `principalType`. `audience` is `"public"`, `"private"`, or
83
88
  `"unknown"`; `environment` is `"development"`, `"preview"`, or
84
89
  `"production"`.
85
90
 
@@ -146,9 +151,21 @@ Prefer `recordInputs: false` or `recordOutputs: false` when the destination does
146
151
 
147
152
  ## Lifecycle events
148
153
 
149
- Instrumentation can handle session, channel delivery, turn, model attempt,
150
- model call, action, input request, and tool call events. Start and terminal
151
- events share an `idempotencyKey`, which can serve as a destination row ID.
154
+ `defineInstrumentation({ events })` supports the following event names. A
155
+ start and its terminal event share an `idempotencyKey`; use it as a stable
156
+ operation key when upserting records across replays.
157
+
158
+ | Lifecycle | Events | Meaning |
159
+ | ---------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
160
+ | Session | `session.started`, `session.waiting`, `session.completed`, `session.failed` | Track a session from creation through suspension or termination. `session.waiting` is resumable; `session.completed` and `session.failed` are terminal. |
161
+ | Turn | `turn.started`, `turn.completed`, `turn.cancelled`, `turn.failed` | Track one turn. Cancellation is not a failure and commonly leaves the session waiting for another turn. |
162
+ | Channel delivery | `channel.delivery.started`, `channel.delivery.completed`, `channel.delivery.cancelled`, `channel.delivery.failed` | Track an inbound channel delivery while eve processes its turn. These events are emitted when the channel provides delivery metadata. |
163
+ | Step attempt | `step.attempt.started`, `step.attempt.completed`, `step.attempt.failed`, `step.attempt.metadata` | Track each model-step attempt; retries have separate attempts. `step.attempt.metadata` is emitted after a step only when the AI SDK supplies provider metadata. |
164
+ | Model call | `model.call.started`, `model.call.completed`, `model.call.failed` | Track an individual call to the model provider. Completion includes usage and finish reason; content fields follow the trace policy. |
165
+ | Action | `action.started`, `action.completed`, `action.failed` | Track eve's durable dispatch of a tool, skill load, local subagent, or remote agent. A failed event's `outcome` distinguishes failure, rejection, cancellation, and abandonment. |
166
+ | Tool call | `tool.call.started`, `tool.call.completed`, `tool.call.failed` | Track the AI SDK's in-process tool execution boundary, including its input and result when allowed by the trace policy. |
167
+ | User input | `input.requested`, `input.resolved` | Track a question, tool approval, or session-limit request and its resolution. The resolution includes an outcome such as `answered`, `approved`, `denied`, or `cancelled`. |
168
+ | Memory operation | `memory.operation.started`, `memory.operation.completed`, `memory.operation.failed` | Track a memory-store search or write. Events include the operation name, phase, and memory slot; completion may include a record count and records. |
152
169
 
153
170
  An ordinary tool emits both `action.*` and `tool.call.*` events. Use `action.*` for eve's durable dispatch lifecycle, including tools, skills, subagents, and remote agents. Use `tool.call.*` only when you need the AI SDK's in-process tool execution boundary.
154
171
 
@@ -38,6 +38,36 @@ does not affect lifecycle instrumentation created with `defineInstrumentation()`
38
38
  See [Audience](../channels/overview#audience) for how channels classify the
39
39
  conversation passed to this policy.
40
40
 
41
+ ## Instrument Node.js dependencies
42
+
43
+ Pass OpenTelemetry instrumentation instances to `otel({ instrumentations })`.
44
+ For example, install the PostgreSQL instrumentation alongside `pg`:
45
+
46
+ ```bash
47
+ pnpm add pg @opentelemetry/instrumentation-pg
48
+ ```
49
+
50
+ ```ts title="agent/instrumentation/otel.ts"
51
+ import { PgInstrumentation } from "@opentelemetry/instrumentation-pg";
52
+ import { otel } from "eve/instrumentation/otel";
53
+
54
+ export default otel({
55
+ instrumentations: [new PgInstrumentation()],
56
+ });
57
+ ```
58
+
59
+ Keep the instrumented package external so Node.js module hooks can intercept
60
+ it. Add `pg` to your agent's [build configuration](/docs/agent-config#other-defineagent-fields):
61
+
62
+ ```ts title="agent/agent.ts"
63
+ import { defineAgent } from "eve";
64
+
65
+ export default defineAgent({
66
+ model: "openai/gpt-5.4-mini",
67
+ build: { externalDependencies: ["pg"] },
68
+ });
69
+ ```
70
+
41
71
  ## Add an OpenTelemetry destination
42
72
 
43
73
  Use this section when sending traces to a third-party destination. Install
@@ -28,7 +28,6 @@ export default defineRemoteAgent({
28
28
  | `forwardPrincipal` | `boolean` | No | `false` | Forward the dispatching turn's session principal to the remote deployment (see [Forwarding the caller identity](#forwarding-the-caller-identity)). |
29
29
  | `headers` | `HeadersValue` | No | none | Static or lazily resolved request headers. |
30
30
  | `path` | `string` | No | `/eve/v1/session` | Route appended to `url` for the create-session request. |
31
- | `outputSchema` | `StandardSchema \| JSON Schema` | No | none | Structured return type for the first turn of each fresh remote session. A continuation may provide its own per-call schema. |
32
31
  | `tool` | `boolean` | No | `true` | Expose the remote agent as a tool to the parent model. Set `false` to allow only `ctx.agent()` calls from authored workflow tools. |
33
32
 
34
33
  ## Dynamic remote agents
@@ -81,9 +80,9 @@ The function may be async and must return a non-empty string. `auth` and `header
81
80
 
82
81
  ## Calling a remote agent
83
82
 
84
- By default, a remote agent is another subagent tool to the model. The model calls it the same way it calls a local subagent, with a `message` and an optional `outputSchema`. Set `tool: false` when an authored workflow tool should be the only model-facing routing surface; the workflow can still call the remote agent by its path-derived name through `ctx.agent()`. The message must carry the full task, including any context the remote agent needs, because it never receives the parent's conversation history.
83
+ By default, a remote agent is another subagent tool to the model. The model calls it the same way it calls a local subagent, with a `message` and an optional `agentId`. Set `tool: false` when an authored workflow tool should be the only model-facing routing surface; the workflow can still call the remote agent by its path-derived name through `ctx.agent()`. The message must carry the full task, including any context the remote agent needs, because it never receives the parent's conversation history.
85
84
 
86
- To require structured output, set an `outputSchema` on the agent definition for fresh delegations or on an individual call for that turn. The structured value arrives in the task's completion notification, and the remote child remains available for follow-up messages. See [Subagents](../subagents) for continuation behavior.
85
+ To require structured output, call the remote agent from an authored workflow tool with `ctx.agent(name, { message, outputSchema })`. The schema applies to that turn, the structured value is the call's result, and the remote child remains available for follow-up messages. See [Subagents](../subagents) for continuation behavior.
87
86
 
88
87
  ## Outbound auth
89
88
 
@@ -200,7 +199,7 @@ You can also steer a running remote background child by calling its subagent too
200
199
 
201
200
  When the parent session ends, eve sends an authenticated `POST /eve/v1/session/:childSessionId/reset` for each remote child. Reset retires the parked remote session and recursively cleans up its descendants. The request uses freshly resolved `headers` and `auth`; failures are logged so an unreachable remote cannot block parent finalization.
202
201
 
203
- A failed _start_ rejects admission before a task receipt is returned. After a remote starts, a terminal failure callback fails the task and notifies the parent with the remote's error (or `REMOTE_AGENT_FAILED` when none is supplied). Terminal callback delivery runs as a durable step on the underlying workflow engine (see [Execution model & durability](../concepts/execution-model-and-durability)). A failed callback POST is rethrown rather than marking the task complete, so the engine retries it.
202
+ A failed _start_ rejects admission before a task receipt is returned. After a remote starts, a terminal failure callback fails the task and notifies the parent with the remote's error. Terminal callback delivery runs as a durable step on the underlying workflow engine (see [Execution model & durability](../concepts/execution-model-and-durability)). A failed callback POST is rethrown rather than marking the task complete, so the engine retries it.
204
203
 
205
204
  ## What to read next
206
205
 
@@ -3,7 +3,7 @@ title: "Self-Modification"
3
3
  description: "Ask your agent to update its own instructions, tools, skills, and other authored files during local development."
4
4
  ---
5
5
 
6
- When `eve dev` starts a local server, it mounts the bundled self-modification extension by default. Ask your agent to change its instructions, tools, skills, or other files under `agent/`; eve delegates the source work to the `self-modification__agent` subagent. Connecting to an existing server with `eve dev <url>` does not add the bundled extension to that server.
6
+ When `eve dev` starts a local server, it mounts the bundled self-modification extension by default. Ask your agent to change its instructions, tools, skills, or other files under `agent/`; eve delegates the source work to the `self-modification__agent` subagent. Connecting to an existing server with `eve remote connect --url <url>` does not add the bundled extension to that server.
7
7
 
8
8
  The bundled extension is for local development and is not included in production builds.
9
9
 
@@ -95,7 +95,7 @@ Every handler receives a `MemoryOperationContext`:
95
95
  | `memory.scope.value` | The resolved scope string or tuple |
96
96
  | `memory.slot` | The path-derived slot name |
97
97
  | `messages` | Projected conversation history for this phase |
98
- | `operationId` | Stable per session, sequence, phase, and slot. Use it as an idempotency key. |
98
+ | `operationId` | Stable per session, turn, step, phase, and slot. Use it as an idempotency key. |
99
99
  | `abortSignal` | Cancellation for the operation |
100
100
  | `session` | Session ID, authentication, and other `SessionContext` fields |
101
101