eve 0.25.3 → 0.26.1

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 (221) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/src/chunks/{use-eve-agent-Cy73lgA6.js → use-eve-agent-BkztZA0v.js} +76 -55
  3. package/dist/src/chunks/{use-eve-agent-CQIeqmKc.js → use-eve-agent-CruinZmd.js} +76 -55
  4. package/dist/src/cli/banner.d.ts +5 -0
  5. package/dist/src/cli/banner.js +1 -1
  6. package/dist/src/cli/commands/logs-events.d.ts +36 -0
  7. package/dist/src/cli/commands/logs-events.js +2 -0
  8. package/dist/src/cli/commands/logs.d.ts +64 -0
  9. package/dist/src/cli/commands/logs.js +4 -0
  10. package/dist/src/cli/dev/diagnostic-dump.d.ts +60 -0
  11. package/dist/src/cli/dev/diagnostic-dump.js +1 -0
  12. package/dist/src/cli/dev/diagnostic-sink.d.ts +37 -0
  13. package/dist/src/cli/dev/diagnostic-sink.js +1 -0
  14. package/dist/src/cli/dev/diagnostics.d.ts +42 -0
  15. package/dist/src/cli/dev/diagnostics.js +1 -0
  16. package/dist/src/cli/dev/tui/blocks.d.ts +60 -8
  17. package/dist/src/cli/dev/tui/blocks.js +8 -8
  18. package/dist/src/cli/dev/tui/command-typeahead.js +1 -1
  19. package/dist/src/cli/dev/tui/diagnostic-presentation.d.ts +16 -0
  20. package/dist/src/cli/dev/tui/diagnostic-presentation.js +3 -0
  21. package/dist/src/cli/dev/tui/errors.d.ts +21 -16
  22. package/dist/src/cli/dev/tui/errors.js +1 -1
  23. package/dist/src/cli/dev/tui/file-content-cache.d.ts +35 -0
  24. package/dist/src/cli/dev/tui/file-content-cache.js +3 -0
  25. package/dist/src/cli/dev/tui/line-diff.d.ts +24 -0
  26. package/dist/src/cli/dev/tui/line-diff.js +1 -0
  27. package/dist/src/cli/dev/tui/line-editor.js +1 -1
  28. package/dist/src/cli/dev/tui/markdown.d.ts +2 -1
  29. package/dist/src/cli/dev/tui/markdown.js +7 -3
  30. package/dist/src/cli/dev/tui/model-editor.d.ts +103 -0
  31. package/dist/src/cli/dev/tui/model-editor.js +1 -0
  32. package/dist/src/cli/dev/tui/prompt-command-handler.d.ts +1 -1
  33. package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
  34. package/dist/src/cli/dev/tui/prompt-placeholder.d.ts +12 -0
  35. package/dist/src/cli/dev/tui/prompt-placeholder.js +1 -0
  36. package/dist/src/cli/dev/tui/question-panel.d.ts +24 -0
  37. package/dist/src/cli/dev/tui/question-panel.js +1 -0
  38. package/dist/src/cli/dev/tui/rail.d.ts +15 -0
  39. package/dist/src/cli/dev/tui/rail.js +1 -0
  40. package/dist/src/cli/dev/tui/remote-auth-command.js +1 -1
  41. package/dist/src/cli/dev/tui/runner.d.ts +27 -65
  42. package/dist/src/cli/dev/tui/runner.js +1 -1
  43. package/dist/src/cli/dev/tui/setup-commands.d.ts +1 -1
  44. package/dist/src/cli/dev/tui/setup-commands.js +2 -2
  45. package/dist/src/cli/dev/tui/setup-flow.d.ts +3 -0
  46. package/dist/src/cli/dev/tui/setup-issues.js +1 -1
  47. package/dist/src/cli/dev/tui/setup-panel.d.ts +33 -0
  48. package/dist/src/cli/dev/tui/setup-panel.js +4 -4
  49. package/dist/src/cli/dev/tui/status-line.d.ts +8 -6
  50. package/dist/src/cli/dev/tui/status-line.js +1 -1
  51. package/dist/src/cli/dev/tui/stream-format.d.ts +16 -3
  52. package/dist/src/cli/dev/tui/stream-format.js +1 -1
  53. package/dist/src/cli/dev/tui/subagent-pump.d.ts +127 -0
  54. package/dist/src/cli/dev/tui/subagent-pump.js +1 -0
  55. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +37 -1
  56. package/dist/src/cli/dev/tui/terminal-renderer.js +12 -10
  57. package/dist/src/cli/dev/tui/test/fake-setup-flow-renderer.js +1 -1
  58. package/dist/src/cli/dev/tui/test/mock-terminal.d.ts +7 -0
  59. package/dist/src/cli/dev/tui/test/mock-terminal.js +1 -1
  60. package/dist/src/cli/dev/tui/theme.d.ts +30 -2
  61. package/dist/src/cli/dev/tui/theme.js +1 -1
  62. package/dist/src/cli/dev/tui/todo-panel.d.ts +44 -0
  63. package/dist/src/cli/dev/tui/todo-panel.js +1 -0
  64. package/dist/src/cli/dev/tui/tool-block-groups.d.ts +40 -0
  65. package/dist/src/cli/dev/tui/tool-block-groups.js +1 -0
  66. package/dist/src/cli/dev/tui/tool-format.js +1 -1
  67. package/dist/src/cli/dev/tui/tool-presentation.d.ts +67 -0
  68. package/dist/src/cli/dev/tui/tool-presentation.js +1 -0
  69. package/dist/src/cli/dev/tui/tool-rows.d.ts +15 -0
  70. package/dist/src/cli/dev/tui/tool-rows.js +2 -0
  71. package/dist/src/cli/dev/tui/tui.js +1 -1
  72. package/dist/src/cli/dev/tui/turn-clock.d.ts +36 -0
  73. package/dist/src/cli/dev/tui/turn-clock.js +1 -0
  74. package/dist/src/cli/dev/tui/types.d.ts +2 -2
  75. package/dist/src/cli/dev/ui-options.js +1 -1
  76. package/dist/src/cli/run.js +2 -2
  77. package/dist/src/cli/ui/live-row.js +1 -1
  78. package/dist/src/client/agent-info-schema.d.ts +9 -0
  79. package/dist/src/client/agent-info-schema.js +1 -1
  80. package/dist/src/client/client.js +1 -1
  81. package/dist/src/client/eve-agent-store.d.ts +1 -2
  82. package/dist/src/client/eve-agent-store.js +1 -1
  83. package/dist/src/client/index.js +1 -1
  84. package/dist/src/client/open-stream.d.ts +14 -10
  85. package/dist/src/client/open-stream.js +1 -1
  86. package/dist/src/client/session-utils.d.ts +2 -1
  87. package/dist/src/client/session-utils.js +1 -1
  88. package/dist/src/client/session.d.ts +3 -5
  89. package/dist/src/client/session.js +1 -1
  90. package/dist/src/client/types.d.ts +0 -6
  91. package/dist/src/compiled/.vendor-stamp.json +2 -1
  92. package/dist/src/compiled/marked/LICENSE.md +44 -0
  93. package/dist/src/compiled/marked/index.d.ts +24 -0
  94. package/dist/src/compiled/marked/index.js +59 -0
  95. package/dist/src/compiler/extension-compatibility.d.ts +2 -2
  96. package/dist/src/compiler/extension-compatibility.js +1 -1
  97. package/dist/src/context/build-dynamic-tools.js +1 -1
  98. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  99. package/dist/src/evals/session.js +1 -1
  100. package/dist/src/execution/node-step.js +1 -1
  101. package/dist/src/execution/sandbox/bindings/docker-cli.d.ts +4 -0
  102. package/dist/src/execution/sandbox/bindings/docker-cli.js +1 -1
  103. package/dist/src/execution/sandbox/bindings/microsandbox-create.js +1 -1
  104. package/dist/src/execution/terminal-session-failure-step.js +1 -1
  105. package/dist/src/harness/emission.js +1 -1
  106. package/dist/src/harness/model-call-error.d.ts +11 -30
  107. package/dist/src/harness/model-call-error.js +1 -1
  108. package/dist/src/harness/semantic-errors/index.d.ts +9 -0
  109. package/dist/src/harness/semantic-errors/index.js +1 -0
  110. package/dist/src/harness/semantic-errors/rule.d.ts +76 -0
  111. package/dist/src/harness/semantic-errors/rule.js +1 -0
  112. package/dist/src/harness/semantic-errors/rules/gateway.d.ts +11 -0
  113. package/dist/src/harness/semantic-errors/rules/gateway.js +1 -0
  114. package/dist/src/harness/semantic-errors/rules/model-provider.d.ts +11 -0
  115. package/dist/src/harness/semantic-errors/rules/model-provider.js +1 -0
  116. package/dist/src/harness/semantic-errors/rules/sandbox.d.ts +16 -0
  117. package/dist/src/harness/semantic-errors/rules/sandbox.js +1 -0
  118. package/dist/src/harness/semantic-errors/rules/system.d.ts +2 -0
  119. package/dist/src/harness/semantic-errors/rules/system.js +1 -0
  120. package/dist/src/harness/semantic-errors/rules/workflow.d.ts +9 -0
  121. package/dist/src/harness/semantic-errors/rules/workflow.js +1 -0
  122. package/dist/src/harness/semantic-errors/signals.d.ts +28 -0
  123. package/dist/src/harness/semantic-errors/signals.js +1 -0
  124. package/dist/src/harness/tool-loop.js +2 -2
  125. package/dist/src/harness/workflow-sandbox.d.ts +6 -0
  126. package/dist/src/harness/workflow-sandbox.js +2 -2
  127. package/dist/src/internal/application/output-publication-lock.js +1 -1
  128. package/dist/src/internal/application/package.js +1 -1
  129. package/dist/src/internal/logging.d.ts +33 -1
  130. package/dist/src/internal/logging.js +1 -1
  131. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response-from-manifest.js +1 -1
  132. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.d.ts +3 -1
  133. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
  134. package/dist/src/internal/nitro/routes/info.js +1 -1
  135. package/dist/src/internal/resolve-model-endpoint-status.d.ts +46 -3
  136. package/dist/src/internal/resolve-model-endpoint-status.js +1 -1
  137. package/dist/src/internal/workflow/development-world-client.js +1 -1
  138. package/dist/src/internal/workflow/development-world-server.js +1 -1
  139. package/dist/src/packages/eve-catalog/src/index.js +1 -1
  140. package/dist/src/public/models/openai/chatgpt/model.js +3 -1
  141. package/dist/src/react/use-eve-agent.d.ts +0 -1
  142. package/dist/src/react/use-eve-agent.js +1 -1
  143. package/dist/src/setup/boxes/add-channels.js +1 -1
  144. package/dist/src/setup/boxes/deploy-project.js +1 -1
  145. package/dist/src/setup/boxes/model-capabilities.d.ts +24 -0
  146. package/dist/src/setup/boxes/model-capabilities.js +1 -0
  147. package/dist/src/setup/boxes/resolve-provisioning.js +1 -1
  148. package/dist/src/setup/boxes/select-model.d.ts +30 -8
  149. package/dist/src/setup/boxes/select-model.js +1 -1
  150. package/dist/src/setup/cli/option-row.js +1 -1
  151. package/dist/src/setup/cli/prompt-ui.d.ts +2 -0
  152. package/dist/src/setup/cli/prompt-ui.js +2 -2
  153. package/dist/src/setup/cli/rail-log.d.ts +4 -6
  154. package/dist/src/setup/cli/rail-log.js +3 -2
  155. package/dist/src/setup/connection-connector.js +2 -2
  156. package/dist/src/setup/flows/link.d.ts +13 -3
  157. package/dist/src/setup/flows/link.js +1 -1
  158. package/dist/src/setup/flows/login.js +1 -1
  159. package/dist/src/setup/flows/model-source-change.d.ts +38 -0
  160. package/dist/src/setup/flows/model-source-change.js +1 -0
  161. package/dist/src/setup/flows/model.d.ts +69 -65
  162. package/dist/src/setup/flows/model.js +1 -1
  163. package/dist/src/setup/flows/provider.d.ts +22 -0
  164. package/dist/src/setup/flows/provider.js +3 -3
  165. package/dist/src/setup/prompter.d.ts +2 -0
  166. package/dist/src/setup/scaffold/create/project.js +1 -1
  167. package/dist/src/setup/slack-connect-lifecycle.js +1 -1
  168. package/dist/src/setup/slackbot.js +1 -1
  169. package/dist/src/setup/vercel-project.d.ts +6 -0
  170. package/dist/src/setup/vercel-project.js +0 -0
  171. package/dist/src/shared/dynamic-tool-definition.d.ts +1 -8
  172. package/dist/src/shared/errors.d.ts +5 -0
  173. package/dist/src/shared/errors.js +1 -1
  174. package/dist/src/shared/gateway-service-tier.d.ts +19 -0
  175. package/dist/src/shared/gateway-service-tier.js +1 -0
  176. package/dist/src/shared/model-summary.d.ts +12 -0
  177. package/dist/src/shared/model-summary.js +1 -0
  178. package/dist/src/shared/workflow-sandbox.d.ts +2 -0
  179. package/dist/src/shared/workflow-sandbox.js +1 -1
  180. package/dist/src/source-change/agent-config-ast.d.ts +54 -0
  181. package/dist/src/source-change/agent-config-ast.js +2 -0
  182. package/dist/src/source-change/agent-config-string-path.d.ts +18 -0
  183. package/dist/src/source-change/agent-config-string-path.js +2 -0
  184. package/dist/src/source-change/apply-agent-model-settings.d.ts +26 -0
  185. package/dist/src/source-change/apply-agent-model-settings.js +1 -0
  186. package/dist/src/source-change/apply-model-name.js +1 -2
  187. package/dist/src/source-change/static-source-change.d.ts +14 -0
  188. package/dist/src/source-change/static-source-change.js +1 -1
  189. package/dist/src/svelte/index.js +1 -1
  190. package/dist/src/svelte/use-eve-agent.d.ts +0 -6
  191. package/dist/src/svelte/use-eve-agent.js +1 -1
  192. package/dist/src/vue/index.js +1 -1
  193. package/dist/src/vue/use-eve-agent.d.ts +0 -2
  194. package/dist/src/vue/use-eve-agent.js +1 -1
  195. package/docs/concepts/execution-model-and-durability.md +1 -1
  196. package/docs/concepts/sessions-runs-and-streaming.md +1 -1
  197. package/docs/getting-started.mdx +1 -1
  198. package/docs/guides/auth-and-route-protection.md +1 -1
  199. package/docs/guides/client/overview.mdx +1 -1
  200. package/docs/guides/client/streaming.mdx +1 -10
  201. package/docs/guides/deployment/meta.json +4 -0
  202. package/docs/guides/deployment/overview.md +61 -0
  203. package/docs/guides/deployment/self-hosting.md +88 -0
  204. package/docs/guides/deployment/vercel.mdx +90 -0
  205. package/docs/guides/dev-tui.md +8 -4
  206. package/docs/guides/dynamic-capabilities.md +2 -0
  207. package/docs/guides/frontend/nextjs.mdx +1 -1
  208. package/docs/guides/frontend/nuxt.mdx +1 -1
  209. package/docs/guides/frontend/overview.mdx +2 -5
  210. package/docs/guides/frontend/sveltekit.mdx +1 -1
  211. package/docs/guides/frontend/use-eve-agent-svelte.mdx +1 -4
  212. package/docs/guides/frontend/use-eve-agent-vue.mdx +1 -4
  213. package/docs/guides/instrumentation.md +1 -1
  214. package/docs/reference/cli.md +24 -2
  215. package/docs/tutorial/ship-it.mdx +1 -1
  216. package/package.json +2 -1
  217. package/docs/guides/deployment.md +0 -210
  218. /package/dist/src/cli/{dev/tui → ui}/live-region.d.ts +0 -0
  219. /package/dist/src/cli/{dev/tui → ui}/live-region.js +0 -0
  220. /package/dist/src/cli/{dev/tui → ui}/terminal-text.d.ts +0 -0
  221. /package/dist/src/cli/{dev/tui → ui}/terminal-text.js +0 -0
@@ -96,4 +96,4 @@ For a public demo, use `none()` (also from `eve/channels/auth`) to skip authenti
96
96
 
97
97
  - [`useEveAgent` (Vue)](./use-eve-agent-vue): the composable API
98
98
  - [Auth & route protection](../auth-and-route-protection)
99
- - [Deployment](../deployment)
99
+ - [Deployment](../deployment/overview)
@@ -193,10 +193,7 @@ const agent = useEveAgent({
193
193
  });
194
194
  ```
195
195
 
196
- Two more options tune turn behavior:
197
-
198
- - `optimistic` (default `true`): projects submitted user messages into `data` before eve confirms them with a `message.received` event. These are reducer-facing projection events only. `events` stays the authoritative eve stream.
199
- - `maxReconnectAttempts` (default `3`): stream reconnection budget per turn.
196
+ The `optimistic` option (default `true`) projects submitted user messages into `data` before eve confirms them with a `message.received` event. These are reducer-facing projection events only. `events` stays the authoritative eve stream.
200
197
 
201
198
  ## Custom reducer
202
199
 
@@ -256,7 +253,7 @@ const agent = useEveAgent({
256
253
 
257
254
  Store the full `session` object (`sessionId`, `continuationToken`, `streamIndex`), not a single field. The session cursor lets eve continue the durable conversation; the event log lets your UI render historical messages without replaying the whole stream. A database-backed chat app should usually persist stream events as they arrive with `onEvent` and then save a final snapshot in `onFinish`.
258
255
 
259
- For multiple chat threads, keep one saved event log and session cursor per thread. `agent`, `host`, `reducer`, `session`, `initialEvents`, `initialSession`, `auth`, `headers`, `maxReconnectAttempts`, and `optimistic` are read when the hook creates its store, so remount the chat component when switching threads, for example with `key={chat.id}`.
256
+ For multiple chat threads, keep one saved event log and session cursor per thread. `agent`, `host`, `reducer`, `session`, `initialEvents`, `initialSession`, `auth`, `headers`, and `optimistic` are read when the hook creates its store, so remount the chat component when switching threads, for example with `key={chat.id}`.
260
257
 
261
258
  If the user can refresh or navigate immediately after pressing send, create your app-level chat row and store the pending user message before calling `send()`. After the request starts, persist the session state as soon as it contains a `sessionId`, then reconnect an interrupted in-flight turn with `session.stream({ startIndex: savedEvents.length })` from the lower-level client.
262
259
 
@@ -108,4 +108,4 @@ For a public demo, use `none()` (also from `eve/channels/auth`) to skip authenti
108
108
 
109
109
  - [`useEveAgent` (Svelte)](./use-eve-agent-svelte): the binding API
110
110
  - [Auth & route protection](../auth-and-route-protection)
111
- - [Deployment](../deployment)
111
+ - [Deployment](../deployment/overview)
@@ -167,10 +167,7 @@ const agent = useEveAgent({
167
167
  });
168
168
  ```
169
169
 
170
- Two more options tune turn behavior:
171
-
172
- - `optimistic` (default `true`): projects submitted user messages into `data` before eve confirms them with a `message.received` event. These are reducer-facing projection events only; `events` stays the authoritative eve stream.
173
- - `maxReconnectAttempts` (default `3`): stream reconnection budget per turn.
170
+ The `optimistic` option (default `true`) projects submitted user messages into `data` before eve confirms them with a `message.received` event. These are reducer-facing projection events only; `events` stays the authoritative eve stream.
174
171
 
175
172
  ## Custom reducer
176
173
 
@@ -180,10 +180,7 @@ const agent = useEveAgent({
180
180
  });
181
181
  ```
182
182
 
183
- Two more options tune turn behavior:
184
-
185
- - `optimistic` (default `true`): projects submitted user messages into `data` before eve confirms them with a `message.received` event. These are reducer-facing projection events only; `events` stays the authoritative eve stream.
186
- - `maxReconnectAttempts` (default `3`): stream reconnection budget per turn.
183
+ The `optimistic` option (default `true`) projects submitted user messages into `data` before eve confirms them with a `message.received` event. These are reducer-facing projection events only; `events` stays the authoritative eve stream.
187
184
 
188
185
  ## Custom reducer
189
186
 
@@ -138,7 +138,7 @@ Per-turn usage tags are written on each step of a turn, accumulating cumulative
138
138
 
139
139
  Tag writes are best-effort: a failure is logged once per process and then swallowed, so a broken tag emit never breaks the agent.
140
140
 
141
- These tags power the **Agent Runs** tab in the Vercel dashboard. When you deploy on Vercel, the platform auto-detects `eve` as the framework and surfaces an Agent Runs view under your project's **Observability** tab, where you can browse sessions and drill into each conversation's trace, with no `instrumentation.ts` required. The tab is currently gated per team. See [Deployment](./deployment#view-runs-in-the-dashboard) for enablement. Agent Runs is separate from the OpenTelemetry export above. Use OTel when you want spans in Braintrust, Datadog, or another third-party backend.
141
+ These tags power the **Agent Runs** tab in the Vercel dashboard. When you deploy on Vercel, the platform auto-detects `eve` as the framework and surfaces an Agent Runs view under your project's **Observability** tab, where you can browse sessions and drill into each conversation's trace, with no `instrumentation.ts` required. The tab is currently gated per team. See [Deploy to Vercel](./deployment/vercel#inspect-agent-runs) for enablement. Agent Runs is separate from the OpenTelemetry export above. Use OTel when you want spans in Braintrust, Datadog, or another third-party backend.
142
142
 
143
143
  Note: By default, telemetry records full message history and model outputs You may need to disclose these data flows in your privacy materials if utilized.
144
144
 
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  title: "CLI"
3
- description: "Reference for every eve CLI command: init, info, build, start, dev, link, deploy, eval, channels, and extension."
3
+ description: "Reference for every eve CLI command: init, info, build, start, dev, logs, link, deploy, eval, channels, and extension."
4
4
  ---
5
5
 
6
6
  The `eve` binary (`bin: eve`) runs from your app root, and every command first loads `.env`/`.env.local` from that root. Running `eve` with no command runs `eve dev`.
@@ -15,6 +15,8 @@ The `eve` binary (`bin: eve`) runs from your app root, and every command first l
15
15
  | `eve start` | Serve the built `.output/` app; prints the listening URL |
16
16
  | `eve dev` | Start the local dev server and open the terminal UI |
17
17
  | `eve dev <url>` | Connect the UI to an existing server URL (e.g. a remote deployment) instead of booting a local server |
18
+ | `eve logs [logid]` | Print an `eve dev` diagnostic log (the most recent when `logid` is omitted) |
19
+ | `eve logs ls` | List `eve dev` diagnostic logs, most recent first |
18
20
  | `eve link` | Link the directory to a Vercel project and pull AI Gateway credentials |
19
21
  | `eve deploy` | Deploy the agent to Vercel production (links first if needed) |
20
22
  | `eve eval` | Run evals against the local app or a remote target |
@@ -173,6 +175,26 @@ Local dev records the last ready URL per resolved app root in `.eve/dev-server-s
173
175
 
174
176
  Local dev keeps immutable runtime source snapshots under `.eve/dev-runtime/snapshots/` so in-flight turns hold a consistent code revision while new turns pick up rebuilds. The terminal REPL keeps its logical session across successful rebuilds, so the next turn continues the conversation on the latest generation; use `/new` to start a fresh session. After a generation is superseded, `eve dev` retains it for at least 30 minutes and also retains the five most recently superseded generations, regardless of the configured Workflow World. The active generation is never pruned. Old runtime snapshots and local sandbox templates are pruned in the background. For manual cleanup, stop `eve dev` before deleting `.eve/dev-runtime/snapshots/` or `.eve/sandbox-cache/local/templates/`. A turn that remains unfinished beyond the automatic retention window can no longer resume after its generation is pruned.
175
177
 
178
+ ## `eve logs`
179
+
180
+ ```bash
181
+ eve logs # print the most recent diagnostic log
182
+ eve logs ls # list logs, most recent first
183
+ eve logs <logid> # print a specific log
184
+ eve logs --dump # prepend the log's environment dump
185
+ eve logs --events # interleave session events from the local workflow store
186
+ ```
187
+
188
+ Each interactive `eve dev` process writes a private diagnostic log under `.eve/logs/` capturing stderr, stdout (including sandbox and rebuild lines), tool failures, workflow errors, and eve framework log records — regardless of what the transcript shows. The file is JSON Lines — every line is one JSON record with `at` and `source` fields. `eve logs` reads those files back.
189
+
190
+ A log id is the file name without `.log` (for example `dev-2026-07-15T12-00-00.000Z-123`). `eve logs <logid>` also accepts the file name, the `.eve/logs/...` path printed in the dev transcript, or any unambiguous prefix of the id with or without the `dev-` lead — so `eve logs 2026-07-15` works when a single log matches. An ambiguous prefix fails and lists the candidates.
191
+
192
+ `eve logs` prints nothing but records — no path banner on either stream — so `eve logs 2>&1 | jq -c .` always parses. Discover ids and file paths with `eve logs ls`; `eve logs ls --json` emits a machine-readable array with `id`, `path`, `startedAt`, and `sizeBytes`.
193
+
194
+ `eve logs --events` resolves session events (`session.started`, `turn.failed`, message deltas, …) from the local workflow store (`.eve/.workflow-data`) at query time and interleaves them into the output by timestamp as `source: "event"` records — the log file itself never stores them, so nothing is duplicated at capture time. Selection is by the log's time window (its start through the next log's start), so events from concurrently running `eve dev` processes may appear.
195
+
196
+ Each log has a same-named `.dump` sibling holding environment diagnostics and session stats as one JSON document. `eve logs --dump` (with or without a log id) prepends that document to the JSONL log body; the combined output is a valid JSON value stream (`eve logs --dump | jq -c .`), one self-contained report to attach to an issue. When a log has no dump, the flag is silently a no-op.
197
+
176
198
  ## `eve link`
177
199
 
178
200
  ```bash
@@ -251,4 +273,4 @@ Related: [Project layout](./project-layout) · [instrumentation.ts](../guides/in
251
273
 
252
274
  - [Project layout](./project-layout): what `eve info` discovers
253
275
  - [instrumentation.ts](../guides/instrumentation): tracing and the error catalog
254
- - [Deployment](../guides/deployment): `eve build` and `eve start` in production
276
+ - [Deployment](../guides/deployment/overview): `eve build` and `eve start` in production
@@ -153,4 +153,4 @@ Across the nine steps you built and shipped one agent, and along the way you use
153
153
  - [Dynamic capabilities](../guides/dynamic-capabilities) for schema-derived dynamic tools, a read-only analyst subagent, and model-authored report workflows on this same example.
154
154
  - [Auth and route protection](../guides/auth-and-route-protection) for production auth patterns.
155
155
 
156
- Learn more: [Frontend](../guides/frontend/overview) · [Auth and route protection](../guides/auth-and-route-protection) · [Deployment](../guides/deployment)
156
+ Learn more: [Frontend](../guides/frontend/overview) · [Auth and route protection](../guides/auth-and-route-protection) · [Deployment](../guides/deployment/overview)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eve",
3
- "version": "0.25.3",
3
+ "version": "0.26.1",
4
4
  "private": false,
5
5
  "description": "Filesystem-first framework for durable backend AI agents that run anywhere.",
6
6
  "keywords": [
@@ -323,6 +323,7 @@
323
323
  "jose": "6.2.3",
324
324
  "jsonc-parser": "3.3.1",
325
325
  "just-bash": "3.0.1",
326
+ "marked": "17.0.6",
326
327
  "microsandbox": "0.5.5",
327
328
  "next": "16.3.0-preview.6",
328
329
  "picocolors": "1.1.1",
@@ -1,210 +0,0 @@
1
- ---
2
- title: "Deployment"
3
- description: "A production checklist for shipping an eve agent on Vercel or your own host, covering build output, env and secrets, sandbox backend, auth, deploy, and verify."
4
- ---
5
-
6
- eve runs the same way locally, on Vercel, and on a long-running Node host, so taking an agent from `eve dev` to production is mostly mechanical. Work through this checklist in order.
7
-
8
- ## 1. Build
9
-
10
- `eve build` compiles the agent and writes the host output:
11
-
12
- ```bash
13
- eve build
14
- ```
15
-
16
- When `VERCEL` is set (every hosted Vercel build sets it), `eve build` writes the [Vercel Build Output](https://vercel.com/docs/build-output-api) bundle under `.vercel/output`. A plain local `eve build` skips that bundle. Either way you get eve's compiled framework artifacts under `.eve/`, including the discovery manifest, compiled manifest, diagnostics, and module map. Open those to see which authored surface a deployment will load. For the artifact guide and what to do when `eve build` fails, see [Observability](./instrumentation).
17
-
18
- ### How portability works
19
-
20
- Nitro is the HTTP host layer. It gives eve a build artifact that can serve the health, session, stream, channel, callback, and schedule routes outside the dev server. Workflow execution and sandbox execution are separate runtime adapters; they are not hidden Vercel dependencies inside Nitro.
21
-
22
- On Vercel, eve emits Vercel Build Output, the Workflow SDK runs on Vercel Workflow, and `defaultBackend()` selects Vercel Sandbox. Outside Vercel, `eve start` serves the standard Nitro Node output, the Workflow SDK uses its local world by default, and `defaultBackend()` selects a local sandbox backend in availability order. That local workflow world persists run state on disk and has no direct coupling to Vercel; Vercel-only behavior such as latest-deployment routing and dashboard run attributes is additive.
23
-
24
- Advanced self-hosted deployments can select a different installed Workflow world package in the root `agent.ts`:
25
-
26
- ```ts title="agent/agent.ts"
27
- import { defineAgent } from "eve";
28
-
29
- export default defineAgent({
30
- model: "anthropic/claude-opus-4.8",
31
- experimental: {
32
- workflow: {
33
- world: "@acme/eve-workflow-world",
34
- },
35
- },
36
- });
37
- ```
38
-
39
- The world package should read credentials and host-specific options from runtime environment variables. It should export a default factory or `createWorld()` function. See [Workflow Worlds](https://workflow-sdk.dev/worlds) for the underlying SDK abstraction.
40
-
41
- ## 2. Environment variables and secrets
42
-
43
- Set these in your deployment environment or secret manager, never in source or compiled artifacts:
44
-
45
- - **A model credential.** The lowest-setup Vercel option is the Vercel AI Gateway. Link a Vercel project, and gateway model ids like `anthropic/claude-opus-4.8` authenticate through Vercel OIDC, with no provider keys to manage. Outside Vercel, either set `AI_GATEWAY_API_KEY` for gateway-routed models or configure a direct provider model with an [AI SDK provider package](https://ai-sdk.dev/docs/foundations/providers-and-models) and set that provider's key, for example `OPENAI_API_KEY` or `ANTHROPIC_API_KEY`.
46
- - **Route-auth secrets**, for example `ROUTE_AUTH_BASIC_PASSWORD` and any JWT/OIDC signing keys referenced by your channel's `auth` (see [Auth and route protection](./auth-and-route-protection)).
47
-
48
- Route-auth secrets are never serialized into the compiled discovery or module-map artifacts. The runtime re-materializes them from the authored channel definition instead. If your deployment sits behind Vercel preview protection and you want to drive it with `eve dev`, set `VERCEL_AUTOMATION_BYPASS_SECRET` locally before launching.
49
-
50
- ## 3. Model routing
51
-
52
- The shape of `model` in `agent/agent.ts` decides whether eve calls the Vercel AI Gateway or a provider endpoint directly.
53
-
54
- A string model id is gateway-routed:
55
-
56
- ```ts title="agent/agent.ts"
57
- import { defineAgent } from "eve";
58
-
59
- export default defineAgent({
60
- model: "anthropic/claude-opus-4.8",
61
- });
62
- ```
63
-
64
- That works on Vercel with project OIDC or anywhere else with `AI_GATEWAY_API_KEY`. Passing a provider key through `modelOptions.providerOptions.gateway.byok` also still sends the request through the Gateway; it only changes which upstream key the Gateway uses.
65
-
66
- To avoid the Gateway entirely, install the [AI SDK package](https://ai-sdk.dev/docs/foundations/providers-and-models) for the provider you want to call, pass that provider's model object, and set that provider's normal environment variable:
67
-
68
- ```bash
69
- npm install @ai-sdk/anthropic
70
- ```
71
-
72
- ```ts title="agent/agent.ts"
73
- import { anthropic } from "@ai-sdk/anthropic";
74
- import { defineAgent } from "eve";
75
-
76
- export default defineAgent({
77
- model: anthropic("claude-opus-4-8"),
78
- });
79
- ```
80
-
81
- With that shape, the model call goes directly to Anthropic and the runtime reads `ANTHROPIC_API_KEY`. Direct Anthropic model ids use hyphens (`claude-opus-4-8`), unlike the dotted Gateway id (`anthropic/claude-opus-4.8`). The same pattern works for OpenAI after installing `@ai-sdk/openai`, using `openai("...")`, and setting `OPENAI_API_KEY`. This is the usual choice when self-deploying without any Vercel-managed services.
82
-
83
- ## 4. Sandbox backend
84
-
85
- On Vercel, the [sandbox](../sandbox) runs on hosted [Vercel Sandbox](https://vercel.com/docs/sandbox) infrastructure. Attach the backend on the sandbox definition:
86
-
87
- ```ts title="agent/sandbox/sandbox.ts"
88
- import { defineSandbox } from "eve/sandbox";
89
- import { vercel } from "eve/sandbox/vercel";
90
-
91
- export default defineSandbox({
92
- backend: vercel(),
93
- });
94
- ```
95
-
96
- Leave `backend` off and eve falls back to `defaultBackend()`, which picks the Vercel backend on hosted builds and the local backend everywhere else. One definition, both environments.
97
-
98
- For a self-deployed process, leave `defaultBackend()` in place or choose an explicit non-Vercel backend such as Docker or microsandbox. If those do not match your infrastructure, write a custom `SandboxBackend` adapter that creates sessions in your own container, VM, or isolation service. Do not pin `vercel()` unless that process should create hosted Vercel sandboxes.
99
-
100
- ## 5. Build-time sandbox prewarm
101
-
102
- During Vercel-targeted builds, eve prewarms reusable Vercel sandbox templates so the first session doesn't pay the cold-start cost. This includes hosted builds and local `vercel build` runs:
103
-
104
- - Prewarm runs for hosted Vercel builds and linked local `vercel build` runs.
105
- - A sandbox with no `bootstrap()` and no workspace seed files gets skipped.
106
- - Seed-only templates are keyed by skills and workspace file contents, so unchanged seeds reuse a template across deploys.
107
- - Templates with a `bootstrap()` are keyed by the optional resolved `revalidationKey()` plus the authored sandbox source and seed contents, so matching inputs reuse a template across deploys.
108
- - Each template shows up in the build log as either `reused cached` or `built`.
109
- - Prewarming only covers template construction. `onSession()` still runs at runtime, once per session.
110
- - **If build-time prewarm fails, the build fails.**
111
-
112
- Local builds must be linked to a Vercel project with credentials that can provision Vercel Sandbox templates. If authentication or template provisioning fails, eve fails the build rather than emitting output that would fail after deployment.
113
-
114
- ## 6. Auth
115
-
116
- Swap any scaffolded `placeholderAuth()` for your real policy before the first production browser request hits the app. Both the framework default and the placeholder reject production browser traffic, so an unconfigured app fails closed rather than serving open routes. The production policy can be a shipped helper (`httpBasic()`, `jwtHmac()`, `jwtEcdsa()`, `oidc()`, `vercelOidc()`) or a custom `AuthFn` that validates your own sessions, API keys, or identity provider. See [Auth and route protection](./auth-and-route-protection) for the ordered auth walk and the fail-closed guarantee.
117
-
118
- If you self-deploy outside Vercel, do not rely on `vercelOidc()` as the only production authenticator. Use your own route policy, such as Basic auth, JWT/OIDC verification for your identity provider, or a custom verifier.
119
-
120
- ## 7. Deploy on Vercel
121
-
122
- Deploy with the [Vercel CLI](https://vercel.com/docs/cli) or by pushing to a Git-connected project:
123
-
124
- ```bash
125
- vercel deploy
126
- ```
127
-
128
- The deployed app serves the same stable health, session, and stream routes you've been hitting locally.
129
-
130
- ## 8. Deploy without Vercel
131
-
132
- eve can also run as a normal Node service behind your own process manager, container platform, or reverse proxy:
133
-
134
- ```bash
135
- eve build
136
- PORT=3000 eve start --host 0.0.0.0
137
- ```
138
-
139
- Eve writes the standard Nitro output under `.output/` instead of Vercel Build Output. `eve start` serves that built app and respects `PORT`, or the `--port` flag. Put TLS, routing, autoscaling, and log collection around that process the same way you would for any other Node HTTP service.
140
-
141
- Self-deployed agents should make the Vercel-specific choices explicit:
142
-
143
- - Let the Workflow SDK use its default local world, which stores workflow state under `.eve/.workflow-data`; configure your host so that directory is on persistent storage, or select another world with `experimental.workflow.world` in the root `agent.ts`. When you select a custom world, install a world package built against the same `@workflow/*` line as your eve release (currently the `5.0.0-beta` line). The npm `latest` tag may lag, so pin the version explicitly, for example `pnpm add @workflow/world-postgres@5.0.0-beta.x`. The Workflow SDK rejects worlds with an incompatible runtime protocol during initialization.
144
- - If you put a reverse proxy or ingress in front of eve, forward **both** `/eve/` and `/.well-known/workflow/`. The workflow world delivers run callbacks to `/.well-known/workflow/v1/flow`; a proxy restricted to `/eve/` lets sessions start but silently stalls runs forever, because the callbacks never reach eve.
145
- - Install the AI SDK package for your provider, then use a direct provider model object and `OPENAI_API_KEY` / `ANTHROPIC_API_KEY` when you want no Gateway dependency.
146
- - Use `AI_GATEWAY_API_KEY` if you still want Gateway routing from a non-Vercel host.
147
- - Replace `vercelOidc()` with auth that your host can verify.
148
- - Use `defaultBackend()`, a pinned non-Vercel sandbox backend such as Docker or microsandbox, or your own `SandboxBackend` adapter.
149
- - If the agent defines schedules, the default `eve build && eve start` path starts Nitro's schedule runner, and Vercel wires schedules to Vercel Cron automatically. If you adapt the output to a custom HTTP-only host or preset, make sure it also runs Nitro scheduled tasks, or trigger the same work from your own scheduler.
150
- - Treat Vercel Cron, Vercel Sandbox prewarm, Vercel Deployment Protection bypass, and the Agent Runs dashboard as Vercel-only conveniences.
151
-
152
- The HTTP contract is unchanged: health, session creation, streaming, channels, tools, and subagents use the same routes under `/eve/`, and the workflow dispatch route lives under `/.well-known/workflow/`. A reverse proxy must preserve both prefixes. Any client that can reach and authenticate to those routes can talk to the agent.
153
-
154
- ## 9. Verify the deployment
155
-
156
- Smoke-test the live routes. Health first:
157
-
158
- ```bash
159
- curl https://<your-app>/eve/v1/health
160
- ```
161
-
162
- Then a real turn:
163
-
164
- ```bash
165
- curl -X POST https://<your-app>/eve/v1/session \
166
- -H 'content-type: application/json' \
167
- -d '{"message":"Hello from production"}'
168
- ```
169
-
170
- The POST returns a JSON body whose `sessionId` identifies the new session. Attach to that session's stream with it:
171
-
172
- ```bash
173
- curl https://<your-app>/eve/v1/session/<sessionId>/stream
174
- ```
175
-
176
- Or drive the deployment interactively with the dev TUI, which is handy for preview and production smoke tests:
177
-
178
- ```bash
179
- eve dev https://<your-app>
180
- ```
181
-
182
- (Set `VERCEL_AUTOMATION_BYPASS_SECRET` locally first if the deployment uses preview protection.)
183
-
184
- ## View runs in the dashboard
185
-
186
- Once the agent is deployed, the platform auto-detects `eve` as the framework and surfaces an **Agent Runs** tab under your project's **Observability** view in the Vercel dashboard. From there you can browse sessions and drill into each conversation's trace.
187
-
188
- > The Agent Runs tab is currently gated. Your Vercel team needs the feature enabled before it appears. If you don't see it, reach out to your Vercel contact to get your team enabled.
189
-
190
- Agent Runs is separate from the OpenTelemetry exporters configured in [Observability](./instrumentation). Those still work and are the recommended path if you want spans in Braintrust, Datadog, or another third-party backend.
191
-
192
- ## How eve sits behind a host framework
193
-
194
- You can deploy an eve app on its own, or mount it inside a host web framework that owns the rest of the site (marketing pages, a dashboard, other API routes). The host keeps its own routing and serves eve's routes through the framework integration. Either way, the agent surface and HTTP contract are identical. For mounting eve in Next.js (`withEve`) and the other supported frameworks, see [Frontend](./frontend/nextjs).
195
-
196
- ## Checklist
197
-
198
- - [ ] `eve build` succeeds, and writes `.vercel/output` when `VERCEL` is set.
199
- - [ ] Provider keys and route-auth secrets are set in the deployment environment.
200
- - [ ] The sandbox backend matches the environment (`vercel()` or `defaultBackend()`).
201
- - [ ] On Vercel, build-time prewarm reused or built templates without failing.
202
- - [ ] `placeholderAuth()` is replaced with your real policy.
203
- - [ ] `vercel deploy` succeeds, or your self-hosted process starts with `eve start`.
204
- - [ ] The health, session, and stream routes respond on the deployment URL.
205
-
206
- ## What to read next
207
-
208
- - [Auth and route protection](./auth-and-route-protection): secure the routes you deployed
209
- - [Observability](./instrumentation): tracing, run tags, and common failures
210
- - [Sandbox](../sandbox): backends, lifecycle, and credential brokering
File without changes
File without changes
File without changes
File without changes