eve 0.25.3 → 0.26.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 (178) hide show
  1. package/CHANGELOG.md +23 -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/commands/logs-events.d.ts +36 -0
  5. package/dist/src/cli/commands/logs-events.js +2 -0
  6. package/dist/src/cli/commands/logs.d.ts +64 -0
  7. package/dist/src/cli/commands/logs.js +4 -0
  8. package/dist/src/cli/dev/diagnostic-dump.d.ts +60 -0
  9. package/dist/src/cli/dev/diagnostic-dump.js +1 -0
  10. package/dist/src/cli/dev/diagnostic-sink.d.ts +37 -0
  11. package/dist/src/cli/dev/diagnostic-sink.js +1 -0
  12. package/dist/src/cli/dev/diagnostics.d.ts +42 -0
  13. package/dist/src/cli/dev/diagnostics.js +1 -0
  14. package/dist/src/cli/dev/tui/blocks.d.ts +4 -0
  15. package/dist/src/cli/dev/tui/blocks.js +7 -7
  16. package/dist/src/cli/dev/tui/command-typeahead.js +1 -1
  17. package/dist/src/cli/dev/tui/diagnostic-presentation.d.ts +14 -0
  18. package/dist/src/cli/dev/tui/diagnostic-presentation.js +2 -0
  19. package/dist/src/cli/dev/tui/errors.d.ts +21 -16
  20. package/dist/src/cli/dev/tui/errors.js +1 -1
  21. package/dist/src/cli/dev/tui/line-editor.js +1 -1
  22. package/dist/src/cli/dev/tui/markdown.js +1 -1
  23. package/dist/src/cli/dev/tui/model-editor.d.ts +103 -0
  24. package/dist/src/cli/dev/tui/model-editor.js +1 -0
  25. package/dist/src/cli/dev/tui/prompt-command-handler.d.ts +1 -1
  26. package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
  27. package/dist/src/cli/dev/tui/remote-auth-command.js +1 -1
  28. package/dist/src/cli/dev/tui/runner.d.ts +5 -0
  29. package/dist/src/cli/dev/tui/runner.js +1 -1
  30. package/dist/src/cli/dev/tui/setup-commands.d.ts +1 -1
  31. package/dist/src/cli/dev/tui/setup-commands.js +2 -2
  32. package/dist/src/cli/dev/tui/setup-flow.d.ts +3 -0
  33. package/dist/src/cli/dev/tui/setup-panel.d.ts +33 -0
  34. package/dist/src/cli/dev/tui/setup-panel.js +4 -4
  35. package/dist/src/cli/dev/tui/status-line.d.ts +8 -6
  36. package/dist/src/cli/dev/tui/status-line.js +1 -1
  37. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +3 -0
  38. package/dist/src/cli/dev/tui/terminal-renderer.js +11 -10
  39. package/dist/src/cli/dev/tui/test/fake-setup-flow-renderer.js +1 -1
  40. package/dist/src/cli/dev/tui/theme.d.ts +14 -0
  41. package/dist/src/cli/dev/tui/theme.js +1 -1
  42. package/dist/src/cli/dev/tui/tool-format.js +1 -1
  43. package/dist/src/cli/dev/tui/tui.js +1 -1
  44. package/dist/src/cli/run.js +2 -2
  45. package/dist/src/cli/ui/live-row.js +1 -1
  46. package/dist/src/client/agent-info-schema.d.ts +9 -0
  47. package/dist/src/client/agent-info-schema.js +1 -1
  48. package/dist/src/client/client.js +1 -1
  49. package/dist/src/client/eve-agent-store.d.ts +1 -2
  50. package/dist/src/client/eve-agent-store.js +1 -1
  51. package/dist/src/client/open-stream.d.ts +14 -10
  52. package/dist/src/client/open-stream.js +1 -1
  53. package/dist/src/client/session-utils.d.ts +2 -1
  54. package/dist/src/client/session-utils.js +1 -1
  55. package/dist/src/client/session.d.ts +3 -5
  56. package/dist/src/client/session.js +1 -1
  57. package/dist/src/client/types.d.ts +0 -6
  58. package/dist/src/compiler/extension-compatibility.d.ts +2 -2
  59. package/dist/src/compiler/extension-compatibility.js +1 -1
  60. package/dist/src/context/build-dynamic-tools.js +1 -1
  61. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  62. package/dist/src/execution/node-step.js +1 -1
  63. package/dist/src/execution/sandbox/bindings/docker-cli.d.ts +4 -0
  64. package/dist/src/execution/sandbox/bindings/docker-cli.js +1 -1
  65. package/dist/src/execution/sandbox/bindings/microsandbox-create.js +1 -1
  66. package/dist/src/execution/terminal-session-failure-step.js +1 -1
  67. package/dist/src/harness/emission.js +1 -1
  68. package/dist/src/harness/model-call-error.d.ts +11 -30
  69. package/dist/src/harness/model-call-error.js +1 -1
  70. package/dist/src/harness/semantic-errors/index.d.ts +9 -0
  71. package/dist/src/harness/semantic-errors/index.js +1 -0
  72. package/dist/src/harness/semantic-errors/rule.d.ts +76 -0
  73. package/dist/src/harness/semantic-errors/rule.js +1 -0
  74. package/dist/src/harness/semantic-errors/rules/gateway.d.ts +11 -0
  75. package/dist/src/harness/semantic-errors/rules/gateway.js +1 -0
  76. package/dist/src/harness/semantic-errors/rules/model-provider.d.ts +11 -0
  77. package/dist/src/harness/semantic-errors/rules/model-provider.js +1 -0
  78. package/dist/src/harness/semantic-errors/rules/sandbox.d.ts +16 -0
  79. package/dist/src/harness/semantic-errors/rules/sandbox.js +1 -0
  80. package/dist/src/harness/semantic-errors/rules/system.d.ts +2 -0
  81. package/dist/src/harness/semantic-errors/rules/system.js +1 -0
  82. package/dist/src/harness/semantic-errors/rules/workflow.d.ts +9 -0
  83. package/dist/src/harness/semantic-errors/rules/workflow.js +1 -0
  84. package/dist/src/harness/semantic-errors/signals.d.ts +28 -0
  85. package/dist/src/harness/semantic-errors/signals.js +1 -0
  86. package/dist/src/harness/tool-loop.js +2 -2
  87. package/dist/src/harness/workflow-sandbox.d.ts +6 -0
  88. package/dist/src/harness/workflow-sandbox.js +2 -2
  89. package/dist/src/internal/application/output-publication-lock.js +1 -1
  90. package/dist/src/internal/application/package.js +1 -1
  91. package/dist/src/internal/logging.d.ts +33 -1
  92. package/dist/src/internal/logging.js +1 -1
  93. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response-from-manifest.js +1 -1
  94. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.d.ts +3 -1
  95. package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
  96. package/dist/src/internal/workflow/development-world-client.js +1 -1
  97. package/dist/src/internal/workflow/development-world-server.js +1 -1
  98. package/dist/src/packages/eve-catalog/src/index.js +1 -1
  99. package/dist/src/public/models/openai/chatgpt/model.js +3 -1
  100. package/dist/src/react/use-eve-agent.d.ts +0 -1
  101. package/dist/src/react/use-eve-agent.js +1 -1
  102. package/dist/src/setup/boxes/add-channels.js +1 -1
  103. package/dist/src/setup/boxes/deploy-project.js +1 -1
  104. package/dist/src/setup/boxes/model-capabilities.d.ts +24 -0
  105. package/dist/src/setup/boxes/model-capabilities.js +1 -0
  106. package/dist/src/setup/boxes/resolve-provisioning.js +1 -1
  107. package/dist/src/setup/boxes/select-model.d.ts +30 -8
  108. package/dist/src/setup/boxes/select-model.js +1 -1
  109. package/dist/src/setup/cli/option-row.js +1 -1
  110. package/dist/src/setup/cli/prompt-ui.d.ts +2 -0
  111. package/dist/src/setup/cli/prompt-ui.js +2 -2
  112. package/dist/src/setup/cli/rail-log.d.ts +4 -6
  113. package/dist/src/setup/cli/rail-log.js +3 -2
  114. package/dist/src/setup/connection-connector.js +2 -2
  115. package/dist/src/setup/flows/login.js +1 -1
  116. package/dist/src/setup/flows/model-source-change.d.ts +38 -0
  117. package/dist/src/setup/flows/model-source-change.js +1 -0
  118. package/dist/src/setup/flows/model.d.ts +65 -62
  119. package/dist/src/setup/flows/model.js +1 -1
  120. package/dist/src/setup/flows/provider.d.ts +20 -0
  121. package/dist/src/setup/flows/provider.js +3 -3
  122. package/dist/src/setup/prompter.d.ts +2 -0
  123. package/dist/src/setup/scaffold/create/project.js +1 -1
  124. package/dist/src/setup/slack-connect-lifecycle.js +1 -1
  125. package/dist/src/setup/slackbot.js +1 -1
  126. package/dist/src/setup/vercel-project.d.ts +6 -0
  127. package/dist/src/setup/vercel-project.js +0 -0
  128. package/dist/src/shared/dynamic-tool-definition.d.ts +1 -8
  129. package/dist/src/shared/errors.d.ts +5 -0
  130. package/dist/src/shared/errors.js +1 -1
  131. package/dist/src/shared/gateway-service-tier.d.ts +19 -0
  132. package/dist/src/shared/gateway-service-tier.js +1 -0
  133. package/dist/src/shared/model-summary.d.ts +12 -0
  134. package/dist/src/shared/model-summary.js +1 -0
  135. package/dist/src/shared/workflow-sandbox.d.ts +2 -0
  136. package/dist/src/shared/workflow-sandbox.js +1 -1
  137. package/dist/src/source-change/agent-config-ast.d.ts +54 -0
  138. package/dist/src/source-change/agent-config-ast.js +2 -0
  139. package/dist/src/source-change/agent-config-string-path.d.ts +18 -0
  140. package/dist/src/source-change/agent-config-string-path.js +2 -0
  141. package/dist/src/source-change/apply-agent-model-settings.d.ts +26 -0
  142. package/dist/src/source-change/apply-agent-model-settings.js +1 -0
  143. package/dist/src/source-change/apply-model-name.js +1 -2
  144. package/dist/src/source-change/static-source-change.d.ts +14 -0
  145. package/dist/src/source-change/static-source-change.js +1 -1
  146. package/dist/src/svelte/index.js +1 -1
  147. package/dist/src/svelte/use-eve-agent.d.ts +0 -6
  148. package/dist/src/svelte/use-eve-agent.js +1 -1
  149. package/dist/src/vue/index.js +1 -1
  150. package/dist/src/vue/use-eve-agent.d.ts +0 -2
  151. package/dist/src/vue/use-eve-agent.js +1 -1
  152. package/docs/concepts/execution-model-and-durability.md +1 -1
  153. package/docs/concepts/sessions-runs-and-streaming.md +1 -1
  154. package/docs/getting-started.mdx +1 -1
  155. package/docs/guides/auth-and-route-protection.md +1 -1
  156. package/docs/guides/client/overview.mdx +1 -1
  157. package/docs/guides/client/streaming.mdx +1 -10
  158. package/docs/guides/deployment/meta.json +4 -0
  159. package/docs/guides/deployment/overview.md +61 -0
  160. package/docs/guides/deployment/self-hosting.md +88 -0
  161. package/docs/guides/deployment/vercel.mdx +90 -0
  162. package/docs/guides/dev-tui.md +8 -4
  163. package/docs/guides/dynamic-capabilities.md +2 -0
  164. package/docs/guides/frontend/nextjs.mdx +1 -1
  165. package/docs/guides/frontend/nuxt.mdx +1 -1
  166. package/docs/guides/frontend/overview.mdx +2 -5
  167. package/docs/guides/frontend/sveltekit.mdx +1 -1
  168. package/docs/guides/frontend/use-eve-agent-svelte.mdx +1 -4
  169. package/docs/guides/frontend/use-eve-agent-vue.mdx +1 -4
  170. package/docs/guides/instrumentation.md +1 -1
  171. package/docs/reference/cli.md +24 -2
  172. package/docs/tutorial/ship-it.mdx +1 -1
  173. package/package.json +1 -1
  174. package/docs/guides/deployment.md +0 -210
  175. /package/dist/src/cli/{dev/tui → ui}/live-region.d.ts +0 -0
  176. /package/dist/src/cli/{dev/tui → ui}/live-region.js +0 -0
  177. /package/dist/src/cli/{dev/tui → ui}/terminal-text.d.ts +0 -0
  178. /package/dist/src/cli/{dev/tui → ui}/terminal-text.js +0 -0
@@ -9,7 +9,7 @@ For browser chat UIs, start with [`useEveAgent`](../frontend/overview). For wire
9
9
 
10
10
  ## Create a client
11
11
 
12
- A `Client` binds one host, auth policy, header policy, and stream reconnection budget:
12
+ A `Client` binds one host, auth policy, and header policy:
13
13
 
14
14
  ```ts
15
15
  import { Client } from "eve/client";
@@ -103,16 +103,7 @@ If you support refresh while an authorization prompt is pending, keep the sessio
103
103
 
104
104
  ## Reconnection
105
105
 
106
- The client reconnects after transient stream disconnects. It resumes from the number of events already consumed in the current session:
107
-
108
- ```ts
109
- const client = new Client({
110
- host: "https://agent.example.com",
111
- maxReconnectAttempts: 5,
112
- });
113
- ```
114
-
115
- `maxReconnectAttempts` is per turn. The default is `3`.
106
+ HTTP connections can end before a run does. The client reconnects from the number of events already consumed, so long turns continue without replaying events. It stops at a turn boundary, when aborted, or when the stream can no longer make progress.
116
107
 
117
108
  ## Open a stream manually
118
109
 
@@ -0,0 +1,4 @@
1
+ {
2
+ "title": "Deployment",
3
+ "pages": ["overview", "vercel", "self-hosting"]
4
+ }
@@ -0,0 +1,61 @@
1
+ ---
2
+ title: "Overview"
3
+ description: "Choose a deployment strategy and prepare an eve agent for production."
4
+ ---
5
+
6
+ Deploy eve to Vercel or run it as a Node service on your own infrastructure. Your deployment strategy determines the build output, workflow storage, sandbox backend, and routing. The agent’s filesystem-based configuration remains portable across these strategies.
7
+
8
+ ## Choose a deployment strategy
9
+
10
+ Choose where the eve runtime will run:
11
+
12
+ | Strategy | Build output | Workflows | Sandbox | Choose it when |
13
+ | ------------------------------ | ---------------------- | ------------------------------ | ------------------------------- | ----------------------------------------------------- |
14
+ | [Vercel](./vercel) | `.vercel/output` | Vercel Workflow | Vercel Sandbox | You want Vercel to operate the runtime services |
15
+ | [Self-hosting](./self-hosting) | `.output/` Node server | Local or custom Workflow world | Docker, microsandbox, or custom | You operate your own Node or container infrastructure |
16
+
17
+ eve is frontend agnostic and can be deployed within Next.js, Nuxt, or SvelteKit applications. See [Frontend integrations](../frontend/overview) for more details.
18
+
19
+ ## Prepare for production
20
+
21
+ Every production deployment must satisfy the same runtime requirements:
22
+
23
+ 1. Run `eve build` to compile the agent and create host output.
24
+ 2. Provide a model credential and any secrets required by tools, connections, and route authentication.
25
+ 3. Replace `placeholderAuth()` with a production route policy before accepting browser traffic.
26
+ 4. Select workflow and sandbox implementations that match the host.
27
+ 5. Verify the health route and complete a real agent turn.
28
+
29
+ `eve build` always writes compiler artifacts under `.eve/`. A Vercel build also writes `.vercel/output`. A build for another host writes the standard Nitro server under `.output/`.
30
+
31
+ ## Configure credentials
32
+
33
+ Keep credentials in your deployment environment or secret manager. Don’t include them in source or compiled artifacts.
34
+
35
+ Your model configuration determines the required credential. A string model ID uses the [Vercel AI Gateway](https://vercel.com/docs/ai-gateway) and requires Vercel project OpenID Connect (OIDC) or `AI_GATEWAY_API_KEY`. A provider-authored model uses that provider’s package and API key. See [Agent configuration](../../agent-config#set-the-model) for both forms.
36
+
37
+ Configure production route authentication separately from model access. The default policy rejects browser traffic in production. See [Auth and route protection](../auth-and-route-protection) for the available policies and secret requirements.
38
+
39
+ ## Verify the deployment
40
+
41
+ Check the public health route first:
42
+
43
+ ```bash
44
+ curl https://your_agent.example.com/eve/v1/health
45
+ ```
46
+
47
+ Then connect the development terminal user interface (TUI) to the deployment and send a real message:
48
+
49
+ ```bash
50
+ eve dev https://your_agent.example.com
51
+ ```
52
+
53
+ Set `VERCEL_AUTOMATION_BYPASS_SECRET` locally first if a Vercel deployment uses Deployment Protection.
54
+
55
+ ## Continue with a platform guide
56
+
57
+ Follow the guide for your deployment platform or application topology:
58
+
59
+ - [Deploy to Vercel](./vercel): use Vercel Build Output, Workflow, Sandbox, Cron, and observability
60
+ - [Self-host eve](./self-hosting): run the Nitro Node server with infrastructure you manage
61
+ - [Frontend integrations](../frontend/overview): mount eve alongside Next.js, Nuxt, or SvelteKit
@@ -0,0 +1,88 @@
1
+ ---
2
+ title: "Self-host eve"
3
+ description: "Run an eve agent as a Node service with your own workflow storage, sandbox backend, and routing."
4
+ ---
5
+
6
+ Self-host eve when you operate a Node service, container platform, or reverse proxy. You run eve’s Nitro server and choose the infrastructure that stores workflows and executes sandbox sessions.
7
+
8
+ ## Build and start the Node service
9
+
10
+ Build the agent, then start the generated server:
11
+
12
+ ```bash
13
+ eve build
14
+ PORT=3000 eve start --host 0.0.0.0
15
+ ```
16
+
17
+ The build writes the Nitro server under `.output/`. `eve start` serves that output and accepts either `PORT` or the `--port` flag.
18
+
19
+ Run this process under the same process manager or container platform you use for other Node web services. Configure Transport Layer Security (TLS), scaling, restarts, and log collection in that platform.
20
+
21
+ ## Configure model access and route auth
22
+
23
+ Set `AI_GATEWAY_API_KEY` to use a string model ID through the Vercel AI Gateway from a non-Vercel host. To call a provider directly, install its [AI SDK provider package](https://ai-sdk.dev/docs/foundations/providers-and-models). Then pass its model object in `agent.ts` and set its API key. See [Agent configuration](../../agent-config#set-the-model) for examples.
24
+
25
+ Don’t rely on `vercelOidc()` as the only production authenticator outside Vercel. Configure Basic auth, JSON Web Token (JWT) verification, generic OpenID Connect (OIDC), or a custom verifier that your host can validate. See [Auth and route protection](../auth-and-route-protection).
26
+
27
+ ## Persist workflow state
28
+
29
+ The default local Workflow world stores run state under `.eve/.workflow-data`. Mount that directory on persistent storage so runs survive process and container replacement.
30
+
31
+ You can instead select an installed Workflow world package in the root `agent.ts`:
32
+
33
+ ```typescript
34
+ import { defineAgent } from "eve";
35
+
36
+ export default defineAgent({
37
+ experimental: {
38
+ workflow: {
39
+ world: "@acme/eve-workflow-world",
40
+ },
41
+ },
42
+ });
43
+ ```
44
+
45
+ The package must export a default factory or `createWorld()` function. Read credentials and host options from runtime environment variables. Install a world built against the same `@workflow/*` line as your eve release. The current line is `5.0.0-beta`, and the runtime rejects incompatible protocol versions.
46
+
47
+ See [Workflow Worlds](https://workflow-sdk.dev/worlds) for the underlying Workflow software development kit (SDK) abstraction.
48
+
49
+ ## Select a sandbox backend
50
+
51
+ `defaultBackend()` selects a local sandbox backend in availability order. You can instead select Docker, microsandbox, or a custom `SandboxBackend` adapter for your container, virtual machine, or isolation service.
52
+
53
+ Don’t select `vercel()` unless the self-hosted process should create hosted Vercel sandboxes. See [Sandbox](../../sandbox) for backend configuration and selection order.
54
+
55
+ ## Configure proxy routes
56
+
57
+ Forward both runtime route prefixes through your reverse proxy or ingress:
58
+
59
+ - `/eve/` serves health, sessions, streams, channels, tools, and subagents
60
+ - `/.well-known/workflow/` receives workflow callbacks
61
+
62
+ A proxy restricted to `/eve/` lets a session start, but the run stalls when its callback can’t reach eve. Preserve both prefixes without rewriting their paths.
63
+
64
+ ## Run schedules
65
+
66
+ The standard `eve build && eve start` path starts Nitro’s schedule runner. If you adapt the output to a custom HTTP-only host or preset, run Nitro scheduled tasks or invoke the same work from your scheduler.
67
+
68
+ ## Verify the service
69
+
70
+ Check the health route after your proxy and authentication configuration are active:
71
+
72
+ ```bash
73
+ curl https://your_agent.example.com/eve/v1/health
74
+ ```
75
+
76
+ Then connect the development TUI and complete a real turn:
77
+
78
+ ```bash
79
+ eve dev https://your_agent.example.com
80
+ ```
81
+
82
+ ## Continue configuring production
83
+
84
+ Use these guides to secure and observe the deployed agent:
85
+
86
+ - [Auth and route protection](../auth-and-route-protection): configure the host’s route policy
87
+ - [Observability](../instrumentation): export traces and diagnose runtime failures
88
+ - [Sandbox](../../sandbox): select and secure a sandbox backend
@@ -0,0 +1,90 @@
1
+ ---
2
+ title: "Deploy to Vercel"
3
+ description: "Deploy an eve agent with Vercel Workflow, Sandbox, Cron, and project credentials."
4
+ ---
5
+
6
+ Deploy eve to Vercel when you want the framework’s managed build and runtime integrations. Vercel runs the web service, workflows, sandboxes, schedules, and deployment observability.
7
+
8
+ ## Prepare the Vercel project
9
+
10
+ Link the agent directory to a Vercel project:
11
+
12
+ ```bash
13
+ eve link
14
+ ```
15
+
16
+ The command links an existing project or creates one, then pulls its environment variables. In continuous integration (CI) environments, use the non-interactive Vercel command instead:
17
+
18
+ ```bash
19
+ vercel link --project your_project_name --yes --non-interactive
20
+ ```
21
+
22
+ ## Configure credentials and auth
23
+
24
+ A string model ID routes requests through the [Vercel AI Gateway](https://vercel.com/docs/ai-gateway). The deployment authenticates through project OpenID Connect (OIDC), so you don’t need a provider API key for that path.
25
+
26
+ Add credentials for direct model providers, tools, and connections to the Vercel project environment. Add any signing keys or passwords required by your [route authentication policy](../auth-and-route-protection). Replace `placeholderAuth()` before a browser sends a production request.
27
+
28
+ ## Select the sandbox backend
29
+
30
+ Leave the sandbox `backend` unset to use `defaultBackend()`. On Vercel, it selects Vercel Sandbox. You can also select the backend explicitly:
31
+
32
+ ```typescript
33
+ import { defineSandbox } from "eve/sandbox";
34
+ import { vercel } from "eve/sandbox/vercel";
35
+
36
+ export default defineSandbox({
37
+ backend: vercel(),
38
+ });
39
+ ```
40
+
41
+ See [Sandbox](../../sandbox) for resource limits, network policy, and lifecycle hooks.
42
+
43
+ <Callout type="info" title="Sandbox prewarming">
44
+ During a Vercel build, eve automatically creates or reuses a sandbox template when your sandbox
45
+ has `bootstrap()` or seed files. The build needs permission to create Vercel Sandbox templates,
46
+ and a prewarm failure stops the deployment. See the [sandbox lifecycle](../../sandbox#lifecycle)
47
+ for template and session setup.
48
+ </Callout>
49
+
50
+ ## Deploy the agent
51
+
52
+ Deploy the linked project to production:
53
+
54
+ ```bash
55
+ eve deploy
56
+ ```
57
+
58
+ `eve deploy` installs dependencies, runs `vercel deploy --prod`, and pulls the project environment after deployment. You can also push to a Git-connected Vercel project. Hosted Vercel builds set `VERCEL`, so `eve build` writes the deployment bundle under `.vercel/output`.
59
+
60
+ Vercel uses the generated output to configure these services:
61
+
62
+ - **Web runtime**: serves health, session, stream, channel, callback, and schedule routes
63
+ - **Vercel Workflow**: persists and resumes durable runs
64
+ - **Vercel Cron**: invokes authored schedules
65
+ - **Vercel Sandbox**: runs sandbox sessions selected by `defaultBackend()`
66
+
67
+ ## Verify the deployment
68
+
69
+ Check the health route and connect the development TUI:
70
+
71
+ ```bash
72
+ curl https://your_agent.vercel.app/eve/v1/health
73
+ eve dev https://your_agent.vercel.app
74
+ ```
75
+
76
+ Set `VERCEL_AUTOMATION_BYPASS_SECRET` locally before connecting if the deployment uses Deployment Protection.
77
+
78
+ ## Inspect agent runs
79
+
80
+ Vercel detects eve and can add an **Agent Runs** tab under the project’s **Observability** view. Use it to browse sessions and inspect each conversation trace.
81
+
82
+ The Agent Runs tab requires enablement for your Vercel team. Contact your Vercel representative if the tab doesn’t appear. For third-party tracing backends, configure [OpenTelemetry instrumentation](../instrumentation).
83
+
84
+ ## Continue configuring production
85
+
86
+ Use these guides to secure and observe the deployed agent:
87
+
88
+ - [Auth and route protection](../auth-and-route-protection): configure who can call the deployed agent
89
+ - [Observability](../instrumentation): export traces and diagnose runtime failures
90
+ - [Sandbox](../../sandbox): configure resources, isolation, and network access
@@ -24,7 +24,7 @@ The conversation streams straight into your terminal's normal scrollback, so you
24
24
 
25
25
  Each turn renders without boxes. A colored gutter glyph marks who is speaking, tool calls collapse to a one-line summary (`✓ get_weather city="SF" → 73°F`), and a subagent's work is indented beneath its `◆` header. When input is ready, the prompt stays bare until you type. A green circle-dot pulses while the agent is waiting to answer and disappears when reasoning or answer content begins.
26
26
 
27
- A persistent line beneath the prompt or status shows the model, the session's token flow (`↑ 394.4K 4.3K`), the linked Vercel project, and a yellow `/deploy pending` marker once a channel added this session still needs `/deploy`. The Vercel segment stays hidden until the directory is linked. Local sessions lead with a gray `:port` badge. Remote sessions lead with a padded `↗ project (environment)` badge, or the host when Vercel cannot resolve the deployment. The badge is gray while checking or unavailable, yellow while authentication is required or failed, and blue when connected. Other status segments use `·` separators. Remote status lines omit AI Gateway endpoint state.
27
+ A persistent line beneath the prompt or status shows the model — with its authored reasoning level and a `↯` marker when the Gateway priority tier is on (`xai/grok-4.5@xhigh ↯`) the linked Vercel project, and a yellow `/deploy pending` marker once a channel added this session still needs `/deploy`. The Vercel segment stays hidden until the directory is linked. Local sessions lead with a gray `:port` badge. Remote sessions lead with a padded `↗ project (environment)` badge, or the host when Vercel cannot resolve the deployment. The badge is gray while checking or unavailable, yellow while authentication is required or failed, and blue when connected. Status segments separate with plain whitespace. Remote status lines omit AI Gateway endpoint state.
28
28
 
29
29
  Errors render compactly with docs links highlighted. A code bug escaping your agent's own code shows its stack trace dim beneath the error headline. Dev-server rebuilds condense into one status row that updates in place (`tui/setup-panel.ts changed · rebuilding…`, then `· rebuilt`); only the latest rebuild shows, and paths shrink to their last two components.
30
30
 
@@ -49,9 +49,9 @@ Each command echoes as an invocation line, asks through a bordered panel that ta
49
49
 
50
50
  ### Configure the model and provider
51
51
 
52
- Bare `/model` opens the configure menu. When no provider is configured, it opens the provider picker directly and Esc returns to the configure menu. "Change model" runs the same searchable model picker setup uses (the Vercel AI Gateway catalog, pre-selected on the model the runtime is serving). A model change is written into your agent's authored source, and the command reports success only after eve confirms the new id. A completed model or provider change closes the menu and returns its result to the transcript; Done or Esc closes it without a change. `/model <provider/model-id>` applies one directly, skipping the menu.
52
+ Bare `/model` opens the configure menu; its Change model row summarizes the draft (`xai/grok-4.5@high ↯`). When no provider is configured, it opens the provider picker directly and Esc returns to the configure menu. "Change model" opens a value menu — **Model**, **Reasoning effort** (a `●─◉─○` track beside the drafted level), **Service tier** (`fast ↯` or `normal`), and **Done**. Reasoning and tier adjust in place: `←`/`→` (Tab acts as `→`) move the highlighted row's value as a ring — past the top wraps to the bottom and vice versa — sliding the reasoning track over the model's supported effort levels or flipping the tier. An unset reasoning draft shows an empty track; the first `→` enters the ring at the lowest level, `←` at the highest. Picking a model snaps a drafted level the new model cannot serve to its closest supported one, clearing it when the model has no adjustable reasoning. Enter on the Model row opens the searchable Vercel AI Gateway catalog as `▏`-railed model ids, pre-selected on the model the runtime is serving; Esc backs out without changing it. A model with no adjustable reasoning says so on a disabled row, and a model the catalog prices no priority tier for shows no tier row at all. The menu's Done hands the draft to the configure menu, whose own Done commits everything through one atomic edit of your agent's authored source, reporting success only after eve confirms the new id. A completed model or provider change closes the menu and returns its result to the transcript; Done without changes or Esc closes it without one, and Esc notes any discarded draft. `/model <provider/model-id>` applies one directly, skipping the menu.
53
53
 
54
- The provider row opens one menu: AI Gateway via a project, AI Gateway via `AI_GATEWAY_API_KEY`, or **Other providers**. The key option becomes a masked input when highlighted. Enter validates it without replacing the menu. A rejected key shows a red `⨯ Invalid key` beside the masked value; retrying or editing clears that result. With a non-empty key, the first Esc or Ctrl-C clears the input and the second cancels the menu. An accepted key is saved to `.env.local`. The project option asks for a Vercel team, opens that team's recent projects, and lets you search all projects for older matches. Vercel links the selected project, eve verifies its project ID, then pulls its environment into `.env.local`. The **Other providers** option shows direct-provider wiring instructions and leaves the existing setup untouched. The dev server reloads env files and refreshes the status bar automatically, with no restart needed.
54
+ The provider row opens one menu: AI Gateway via a project, AI Gateway via `AI_GATEWAY_API_KEY`, or **Other providers**. The currently-active provider renders checked with its status beneath it ("Linked to **my-project** in team **my-team**", or "`AI_GATEWAY_API_KEY` set in `.env.local`"), and the cursor opens on it with a `↵ change` badge. The key option becomes a masked input on an `⎿` rail when highlighted, with a `↵ validate` badge after it. Enter validates it without replacing the menu a `▪ validating` badge while it checks, a red `⨯ API key is not valid` badge on rejection; retrying or editing clears that result. With a non-empty key, the first Esc or Ctrl-C clears the input and the second dismisses the menu. An accepted key is saved to `.env.local` and reported as one `AI_GATEWAY_API_KEY set.` line. The project option asks for a Vercel team, opens that team's recent projects with the project named after your agent suggested first (searching the team for it when it is not among the recents), and lets you search all projects for older matches. Vercel links the selected project, eve verifies its project ID, then pulls its environment into `.env.local`. The **Other providers** option shows direct-provider wiring instructions and leaves the existing setup untouched. The dev server reloads env files and refreshes the status bar automatically, with no restart needed.
55
55
 
56
56
  The provider row demands attention (a bold yellow "Configure model access" with a yellow "Not configured" hint that dims when unselected and uses the terminal foreground when selected) until a link or gateway credential is detected, then names the connection afterward (for example "AI Gateway (Linked to my-project in my-team)"). Setup menus mark the cursor row with a padded, filled-arrow inverse label that inherits the row's accent: blue normally and yellow for warning rows. In stacked menus, the selected row's description appears directly beneath that option. The completed command's outcome stays in the transcript after the panel closes. When a turn fails because AI Gateway authentication is missing or stale, the error points you at `/model` directly.
57
57
 
@@ -100,6 +100,10 @@ By default, `eve dev` shows `stderr` and keeps stdout and sandbox lines buffered
100
100
  - `--logs <all|stderr|sandbox|none>` sets the starting mode at launch (default `stderr`).
101
101
  - `Ctrl+L` at the idle prompt cycles `none → all → stderr → sandbox → none`.
102
102
 
103
+ Every captured line, tool failure, workflow error, and eve framework log record also lands in a private per-process diagnostic log under `.eve/logs/`, regardless of the display mode. The file is JSON Lines: each line is one JSON record with `at` and `source` fields (framework log records add `level`, `namespace`, `message`, and `fields`), so it parses with any JSONL tool — `jq -c 'select(.source=="tool")'` — even when a payload spans many stack-trace lines. Long stderr output collapses in the transcript to a one-line summary pointing at the file (the raw text stays available in the `all` mode). Read the logs with `eve logs` — see the [CLI reference](../reference/cli#eve-logs).
104
+
105
+ Each log has a same-named `.dump` sibling — one JSON document with environment diagnostics (eve, Node.js, and Vercel CLI versions, the Vercel CLI path, and the size of the local session store) plus running session stats: prompts, token usage, tool calls by name, and subagent dispatches. `eve logs --dump` prints the dump and the log together as one parseable report to attach when filing an issue.
106
+
103
107
  ## Display flags
104
108
 
105
109
  Density flags control how much of each section renders. They accept `full`, `collapsed`, `auto-collapsed`, or `hidden`.
@@ -146,7 +150,7 @@ In a remote session, `/vc:login` first resolves the deployment's Vercel project
146
150
 
147
151
  The project-scoped token represents the resolved project's Development environment. Vercel already allows a project's Development environment to call its own Preview deployments by default. For a Production or custom-environment target, `/vc:login` shows the exact Development-to-target rule before changing that project's Trusted Sources. Eve preserves existing entries. When it creates an explicit rule, it also carries Vercel's default self-access rows forward because saved rules replace those defaults. See Vercel's [Trusted Sources guide](https://vercel.com/docs/deployment-protection/methods-to-bypass-deployment-protection/trusted-sources), [error reference](https://vercel.com/docs/errors/trusted_sources_environment_mismatch), and [OIDC token anatomy](https://vercel.com/docs/oidc/reference#oidc-token-anatomy).
148
152
 
149
- `VERCEL_AUTOMATION_BYPASS_SECRET` remains available for a Protection Bypass for Automation token. See [Deployment](./deployment) for the smoke-test flow.
153
+ `VERCEL_AUTOMATION_BYPASS_SECRET` remains available for a Protection Bypass for Automation token. See [Deploy to Vercel](./deployment/vercel#verify-the-deployment) for the smoke-test flow.
150
154
 
151
155
  ## What to read next
152
156
 
@@ -25,6 +25,8 @@ their `defineDynamic` export is a build error.
25
25
 
26
26
  Pass `defineDynamic` an `events` object whose handlers return either a single `defineTool(...)`, a `Record<string, defineTool(...)>`, or `null` for no tools. Wrap every entry in `defineTool()`. The wrapper stamps them so their `execute` functions survive workflow step boundaries.
27
27
 
28
+ Dynamic tool executors receive the same `ToolContext` as static authored tools, including inline provider auth through `ctx.getToken(provider)` and `ctx.requireAuth(provider)`.
29
+
28
30
  The example below builds one tool per warehouse table. A map return names each tool by its bare key, so the model sees `orders`, `users`, and so on.
29
31
 
30
32
  ```ts title="agent/tools/query.ts"
@@ -124,4 +124,4 @@ For a public demo, use `none()` (also from `eve/channels/auth`) to skip authenti
124
124
 
125
125
  - [Frontend overview](./overview): the `useEveAgent` API
126
126
  - [Auth & route protection](../auth-and-route-protection)
127
- - [Deployment](../deployment)
127
+ - [Deployment](../deployment/overview)
@@ -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.0",
4
4
  "private": false,
5
5
  "description": "Filesystem-first framework for durable backend AI agents that run anywhere.",
6
6
  "keywords": [