eve 0.13.5 → 0.13.7

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 (131) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/dist/src/channel/send.d.ts +3 -1
  3. package/dist/src/channel/send.js +1 -1
  4. package/dist/src/channel/types.d.ts +6 -0
  5. package/dist/src/chunks/{use-eve-agent-_dbX0ASK.js → use-eve-agent-8X2UMr8q.js} +26 -2
  6. package/dist/src/chunks/{use-eve-agent-BjAM8_a3.js → use-eve-agent-9ZNiSFMb.js} +26 -2
  7. package/dist/src/cli/banner.d.ts +2 -4
  8. package/dist/src/cli/banner.js +1 -1
  9. package/dist/src/cli/commands/agent-prompt/build-and-verify.md +7 -4
  10. package/dist/src/cli/dev/tui/agent-header.js +1 -1
  11. package/dist/src/cli/dev/tui/blocks.d.ts +1 -1
  12. package/dist/src/cli/dev/tui/blocks.js +1 -1
  13. package/dist/src/cli/dev/tui/prompt-command-handler.d.ts +5 -1
  14. package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
  15. package/dist/src/cli/dev/tui/prompt-commands.d.ts +7 -7
  16. package/dist/src/cli/dev/tui/prompt-commands.js +2 -2
  17. package/dist/src/cli/dev/tui/remote-auth-command.d.ts +11 -0
  18. package/dist/src/cli/dev/tui/remote-auth-command.js +3 -0
  19. package/dist/src/cli/dev/tui/remote-auth-result.d.ts +5 -0
  20. package/dist/src/cli/dev/tui/remote-auth-result.js +2 -1
  21. package/dist/src/cli/dev/tui/remote-auth.d.ts +30 -0
  22. package/dist/src/cli/dev/tui/remote-auth.js +1 -0
  23. package/dist/src/cli/dev/tui/remote-connection-probe.d.ts +3 -1
  24. package/dist/src/cli/dev/tui/remote-connection-probe.js +1 -1
  25. package/dist/src/cli/dev/tui/remote-connection-types.d.ts +2 -1
  26. package/dist/src/cli/dev/tui/remote-connection.js +1 -1
  27. package/dist/src/cli/dev/tui/runner.d.ts +18 -1
  28. package/dist/src/cli/dev/tui/runner.js +1 -1
  29. package/dist/src/cli/dev/tui/setup-commands.d.ts +4 -4
  30. package/dist/src/cli/dev/tui/setup-commands.js +2 -2
  31. package/dist/src/cli/dev/tui/setup-issues.d.ts +1 -1
  32. package/dist/src/cli/dev/tui/setup-issues.js +1 -1
  33. package/dist/src/cli/dev/tui/status-line.d.ts +6 -14
  34. package/dist/src/cli/dev/tui/status-line.js +1 -1
  35. package/dist/src/cli/dev/tui/terminal-renderer.d.ts +8 -1
  36. package/dist/src/cli/dev/tui/terminal-renderer.js +9 -9
  37. package/dist/src/cli/dev/tui/test/index.d.ts +1 -0
  38. package/dist/src/cli/dev/tui/test/index.js +1 -1
  39. package/dist/src/cli/dev/tui/tui.d.ts +1 -1
  40. package/dist/src/cli/dev/tui/tui.js +1 -1
  41. package/dist/src/cli/dev/tui/vercel-trusted-sources.js +1 -1
  42. package/dist/src/cli/run.js +1 -1
  43. package/dist/src/client/agent-info-error.d.ts +17 -0
  44. package/dist/src/client/agent-info-error.js +1 -0
  45. package/dist/src/client/client.d.ts +4 -0
  46. package/dist/src/client/client.js +1 -1
  47. package/dist/src/client/index.d.ts +1 -0
  48. package/dist/src/client/index.js +1 -1
  49. package/dist/src/client/ndjson.js +3 -3
  50. package/dist/src/context/build-dynamic-tools.js +1 -1
  51. package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
  52. package/dist/src/context/keys.d.ts +2 -0
  53. package/dist/src/context/keys.js +1 -1
  54. package/dist/src/evals/cli/eval-client.js +1 -1
  55. package/dist/src/execution/delegated-parent-notification.js +1 -1
  56. package/dist/src/execution/durable-session-store.js +1 -1
  57. package/dist/src/execution/eve-workflow-attributes.d.ts +8 -0
  58. package/dist/src/execution/eve-workflow-attributes.js +1 -1
  59. package/dist/src/execution/ndjson-stream.d.ts +19 -0
  60. package/dist/src/execution/ndjson-stream.js +3 -0
  61. package/dist/src/execution/runtime-context.js +1 -1
  62. package/dist/src/execution/subagent-adapter.js +1 -1
  63. package/dist/src/execution/turn-workflow.js +1 -1
  64. package/dist/src/execution/workflow-entry.js +1 -1
  65. package/dist/src/execution/workflow-runtime.d.ts +1 -1
  66. package/dist/src/execution/workflow-runtime.js +1 -3
  67. package/dist/src/execution/workflow-steps.js +1 -1
  68. package/dist/src/internal/application/package.js +1 -1
  69. package/dist/src/internal/authored-definition/connection.js +1 -1
  70. package/dist/src/internal/nitro/host/configure-nitro-routes.js +1 -1
  71. package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
  72. package/dist/src/internal/workflow/configure-world.js +1 -1
  73. package/dist/src/internal/workflow/queue-namespace.d.ts +0 -1
  74. package/dist/src/internal/workflow/queue-namespace.js +1 -1
  75. package/dist/src/internal/workflow/runtime.d.ts +4 -0
  76. package/dist/src/internal/workflow/runtime.js +1 -0
  77. package/dist/src/internal/workflow-bundle/builder-support.js +6 -6
  78. package/dist/src/internal/workflow-bundle/builder.js +2 -2
  79. package/dist/src/internal/workflow-bundle/vercel-workflow-output.js +1 -1
  80. package/dist/src/public/channels/github/dispatch.d.ts +22 -1
  81. package/dist/src/public/channels/github/dispatch.js +1 -1
  82. package/dist/src/public/channels/github/githubChannel.d.ts +21 -3
  83. package/dist/src/public/channels/github/githubChannel.js +1 -1
  84. package/dist/src/public/channels/github/inbound.d.ts +46 -1
  85. package/dist/src/public/channels/github/inbound.js +2 -2
  86. package/dist/src/public/channels/github/index.d.ts +1 -1
  87. package/dist/src/public/channels/github/state.d.ts +3 -1
  88. package/dist/src/public/channels/github/state.js +1 -1
  89. package/dist/src/public/channels/slack/interactions.js +1 -1
  90. package/dist/src/public/channels/slack/slackChannel.js +1 -1
  91. package/dist/src/runtime/connections/callback-route.js +1 -1
  92. package/dist/src/runtime/connections/principal.js +1 -1
  93. package/dist/src/runtime/session-callback-route.js +1 -1
  94. package/dist/src/services/dev-client/request-headers.d.ts +2 -0
  95. package/dist/src/services/dev-client/request-headers.js +1 -1
  96. package/dist/src/services/dev-client/vercel-auth-error.d.ts +12 -14
  97. package/dist/src/services/dev-client/vercel-auth-error.js +9 -2
  98. package/dist/src/setup/flows/install-vercel-cli.d.ts +1 -1
  99. package/dist/src/setup/flows/login.d.ts +3 -1
  100. package/dist/src/setup/flows/login.js +1 -1
  101. package/dist/src/setup/primitives/run-vercel.d.ts +8 -0
  102. package/dist/src/setup/primitives/run-vercel.js +1 -1
  103. package/dist/src/setup/scaffold/create/project.js +6 -2
  104. package/dist/src/setup/scaffold/create/web-template.d.ts +1 -1
  105. package/dist/src/setup/scaffold/create/web-template.js +0 -17
  106. package/dist/src/setup/vercel-deployment.d.ts +12 -5
  107. package/dist/src/setup/vercel-deployment.js +1 -1
  108. package/dist/src/setup/vercel-project-api.d.ts +13 -2
  109. package/dist/src/setup/vercel-project-api.js +1 -1
  110. package/dist/src/setup/vercel-project.d.ts +5 -1
  111. package/dist/src/setup/vercel-project.js +0 -0
  112. package/dist/src/setup/verified-remote-client.js +1 -1
  113. package/dist/src/svelte/index.js +1 -1
  114. package/dist/src/svelte/use-eve-agent.js +1 -1
  115. package/dist/src/vue/index.js +1 -1
  116. package/dist/src/vue/use-eve-agent.js +1 -1
  117. package/docs/README.md +2 -2
  118. package/docs/channels/github.mdx +13 -1
  119. package/docs/channels/linear.mdx +1 -1
  120. package/docs/channels/slack.mdx +1 -1
  121. package/docs/connections/mcp.mdx +61 -0
  122. package/docs/connections/meta.json +4 -0
  123. package/docs/connections/openapi.mdx +68 -0
  124. package/docs/{connections.mdx → connections/overview.mdx} +28 -63
  125. package/docs/getting-started.mdx +0 -6
  126. package/docs/guides/dev-tui.md +22 -12
  127. package/docs/introduction.mdx +2 -8
  128. package/docs/reference/typescript-api.md +20 -19
  129. package/docs/tutorial/connect-a-warehouse.mdx +3 -3
  130. package/docs/tutorial/ship-it.mdx +1 -1
  131. package/package.json +1 -1
@@ -0,0 +1,68 @@
1
+ ---
2
+ title: "OpenAPI Connections"
3
+ description: "Turn an OpenAPI 3.x document into eve connection tools, one tool per operation."
4
+ ---
5
+
6
+ OpenAPI connections turn any OpenAPI 3.x document into connection tools, one per operation. Use OpenAPI when a service already publishes an HTTP API contract and you want eve to derive the model-facing tools from that contract.
7
+
8
+ ## Define an OpenAPI connection
9
+
10
+ `defineOpenAPIConnection` takes an HTTPS URL that eve fetches at runtime, or an inline parsed object:
11
+
12
+ ```ts title="agent/connections/petstore.ts"
13
+ import { defineOpenAPIConnection } from "eve/connections";
14
+
15
+ export default defineOpenAPIConnection({
16
+ spec: "https://petstore3.swagger.io/api/v3/openapi.json",
17
+ description: "Pet store inventory and orders.",
18
+ auth: { getToken: async () => ({ token: process.env.PETSTORE_TOKEN! }) },
19
+ });
20
+ ```
21
+
22
+ Each operation becomes `<connection>__<operationId>` (e.g. `petstore__getInventory`). When an operation has no `operationId`, eve derives a deterministic `<method>_<sanitized-path>` name instead.
23
+
24
+ The file path provides the connection name. `agent/connections/petstore.ts` registers as `petstore`, so operation tools are qualified under `petstore__`.
25
+
26
+ ## OpenAPI fields
27
+
28
+ OpenAPI connections use the shared connection fields from [Connections](/docs/connections), plus two OpenAPI-specific fields:
29
+
30
+ | Field | Purpose |
31
+ | ------------ | ------------------------------------------------------------------------------------------------------------- |
32
+ | `baseUrl` | Base URL operation paths resolve against. Optional; defaults to the document's first usable `servers` entry. |
33
+ | `operations` | Filter keyed on `operationId` (`allow` or `block`). Mirrors `tools` on MCP connections, but names operations. |
34
+
35
+ Use `baseUrl` when the spec's `servers` list is absent, points at the wrong environment, or needs to be pinned for this agent.
36
+
37
+ ## Operation filters
38
+
39
+ To narrow which generated tools the model sees, set exactly one of `operations.allow` or `operations.block`:
40
+
41
+ ```ts title="agent/connections/petstore.ts"
42
+ import { defineOpenAPIConnection } from "eve/connections";
43
+
44
+ export default defineOpenAPIConnection({
45
+ spec: "https://petstore3.swagger.io/api/v3/openapi.json",
46
+ description: "Pet store inventory and orders.",
47
+ auth: { getToken: async () => ({ token: process.env.PETSTORE_TOKEN! }) },
48
+ operations: { allow: ["getInventory", "placeOrder"] },
49
+ });
50
+ ```
51
+
52
+ Filters match `operationId`. If an operation does not declare one, use the deterministic name eve derives from the method and path.
53
+
54
+ ## Auth, headers, and approval
55
+
56
+ OpenAPI connections support the shared connection options:
57
+
58
+ - `auth` for static tokens, Vercel Connect, or self-hosted interactive OAuth.
59
+ - `headers` for API-key schemes or extra server configuration.
60
+ - `approval` for human-in-the-loop gates before generated operation tools run.
61
+
62
+ See [Connections](/docs/connections) for the shared auth, headers, and approval shapes.
63
+
64
+ ## What to read next
65
+
66
+ - [MCP connections](./mcp): connect to remote MCP servers.
67
+ - [Auth & route protection](../guides/auth-and-route-protection): the full interactive-OAuth flow with Vercel Connect.
68
+ - [Security model](../concepts/security-model): how connection credentials stay out of the model's reach.
@@ -1,6 +1,7 @@
1
1
  ---
2
2
  title: "Connections"
3
3
  description: "Expose external MCP and OpenAPI servers to the model, with connection tokens the model never sees."
4
+ url: /connections
4
5
  ---
5
6
 
6
7
  A connection wires an agent into an external server you don't author, either an MCP server (Linear, GitHub, a warehouse) or any HTTP API with an OpenAPI document. eve handles the parts you'd otherwise hand-roll, discovering the remote tools, surfacing them to the model, and brokering auth.
@@ -9,23 +10,17 @@ Connections live under `agent/connections/`. The runtime name comes from the fil
9
10
 
10
11
  ## MCP connections
11
12
 
12
- `defineMcpClientConnection` points at an MCP server. Supply a `url` and a `description`:
13
+ Use an MCP connection when the external service already exposes an MCP server. The server publishes its tools and schemas, and eve makes the matched tools callable by the model.
13
14
 
14
- ```ts title="agent/connections/linear.ts"
15
- import { defineMcpClientConnection } from "eve/connections";
15
+ Read [MCP connections](/docs/connections/mcp) for `defineMcpClientConnection`, transport requirements, and MCP tool filters.
16
16
 
17
- export default defineMcpClientConnection({
18
- url: "https://mcp.linear.app/sse",
19
- description: "Linear workspace: issues, projects, cycles, and comments.",
20
- auth: {
21
- getToken: async () => ({ token: process.env.LINEAR_API_TOKEN! }),
22
- },
23
- });
24
- ```
17
+ ## OpenAPI connections
18
+
19
+ Use an OpenAPI connection when the service exposes an OpenAPI 3.x document. eve turns operations in the document into connection tools, one per operation.
25
20
 
26
- The `url` must speak Streamable HTTP or SSE. Write the `description` for the model, not for yourself. It shows up in `connection_search`, and the model uses it to decide which connection to query.
21
+ Read [OpenAPI connections](/docs/connections/openapi) for `defineOpenAPIConnection`, `baseUrl`, and operation filters.
27
22
 
28
- ### Static-token auth
23
+ ## Static-token auth
29
24
 
30
25
  `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. If the token has a known TTL, set `expiresAt` (milliseconds since epoch) and eve refreshes ahead of time rather than waiting for a `401`.
31
26
 
@@ -33,24 +28,28 @@ When `getToken` is the only auth, `principalType` defaults to `"app"`: one share
33
28
 
34
29
  eve resolves and caches connection tokens per step; they never land in conversation history or reach the model.
35
30
 
36
- ### No auth
31
+ ## No auth
37
32
 
38
33
  Drop `auth` entirely for servers that need no token, such as a localhost server during development or a public one:
39
34
 
40
- ```ts
35
+ ```ts title="agent/connections/local.ts"
36
+ import { defineMcpClientConnection } from "eve/connections";
37
+
41
38
  export default defineMcpClientConnection({
42
39
  url: "http://localhost:3001/mcp",
43
40
  description: "Local dev server.",
44
41
  });
45
42
  ```
46
43
 
47
- We recommend using no-auth connections only for services that are intentionally public, local-only, or otherwise protected outside eve. Do not use no-auth connections for sensitive third-party services.
44
+ Use no-auth connections only for services that are intentionally public, local-only, or otherwise protected outside eve. Do not use no-auth connections for sensitive third-party services.
48
45
 
49
- ### Headers
46
+ ## Headers
50
47
 
51
- Use `headers` when the server wants a non-Bearer scheme (an API-key header) or extra configuration. Headers stack on top of `auth`:
48
+ Use `headers` when the server wants a non-Bearer scheme (an API-key header) or extra configuration. Headers stack on top of `auth` and work for both MCP and OpenAPI connections:
49
+
50
+ ```ts title="agent/connections/example.ts"
51
+ import { defineMcpClientConnection } from "eve/connections";
52
52
 
53
- ```ts
54
53
  export default defineMcpClientConnection({
55
54
  url: "https://example.com/mcp",
56
55
  description: "Example service.",
@@ -58,24 +57,12 @@ export default defineMcpClientConnection({
58
57
  });
59
58
  ```
60
59
 
61
- ### Tool filters
62
-
63
- To narrow which remote tools the model sees, set exactly one of `tools.allow` or `tools.block`. Filtered-out tools do not appear in `connection_search`:
64
-
65
- ```ts
66
- export default defineMcpClientConnection({
67
- url: "https://mcp.linear.app/sse",
68
- description: "Linear: read-only.",
69
- auth: { getToken: async () => ({ token: process.env.LINEAR_API_TOKEN! }) },
70
- tools: { allow: ["search_issues", "get_issue"] },
71
- });
72
- ```
73
-
74
- ### Per-connection approval
60
+ ## Per-connection approval
75
61
 
76
62
  To put every tool a connection serves behind a human, use the helpers from `eve/tools/approval`:
77
63
 
78
- ```ts
64
+ ```ts title="agent/connections/linear.ts"
65
+ import { defineMcpClientConnection } from "eve/connections";
79
66
  import { once } from "eve/tools/approval";
80
67
 
81
68
  export default defineMcpClientConnection({
@@ -86,32 +73,9 @@ export default defineMcpClientConnection({
86
73
  });
87
74
  ```
88
75
 
89
- `never()` lets every call through, `once()` asks for approval the first time in a session, and `always()` asks every time. The pause and resume is the same human-in-the-loop flow covered in [Tools](./tools).
90
-
91
- For connection tools that can create, modify, delete, transmit, purchase, message, or access sensitive data, use approval, tool allow-lists, or other safeguards appropriate to the action.
92
-
93
- ## OpenAPI connections
94
-
95
- `defineOpenAPIConnection` turns any OpenAPI 3.x document into connection tools, one per operation. Pass an HTTPS URL eve fetches at runtime, or an inline parsed object:
96
-
97
- ```ts title="agent/connections/petstore.ts"
98
- import { defineOpenAPIConnection } from "eve/connections";
99
-
100
- export default defineOpenAPIConnection({
101
- spec: "https://petstore3.swagger.io/api/v3/openapi.json",
102
- description: "Pet store inventory and orders.",
103
- auth: { getToken: async () => ({ token: process.env.PETSTORE_TOKEN! }) },
104
- });
105
- ```
106
-
107
- Each operation becomes `<connection>__<operationId>` (e.g. `petstore__getInventory`). When an operation has no `operationId`, eve derives a deterministic `<method>_<sanitized-path>` name instead.
108
-
109
- `auth`, `headers`, and `approval` work exactly as they do for MCP. There are two fields specific to OpenAPI:
76
+ `never()` lets every call through, `once()` asks for approval the first time in a session, and `always()` asks every time. The pause and resume is the same human-in-the-loop flow covered in [Tools](/docs/tools).
110
77
 
111
- | Field | Purpose |
112
- | ------------ | ----------------------------------------------------------------------------------------------------------------------- |
113
- | `baseUrl` | Base URL operation paths resolve against. Optional; defaults to the document's first usable `servers` entry. |
114
- | `operations` | Filter keyed on `operationId` (`allow` or `block`). Mirrors `tools` on MCP connections, but names operations not tools. |
78
+ For connection tools that can create, modify, delete, transmit, purchase, message, or access sensitive data, use approval, allow-lists, or other safeguards appropriate to the action.
115
79
 
116
80
  ## Interactive OAuth via Vercel Connect
117
81
 
@@ -128,7 +92,7 @@ export default defineMcpClientConnection({
128
92
  });
129
93
  ```
130
94
 
131
- `"linear/myagent"` is the UID you chose when registering the Connect client. Connect-managed OAuth is user-scoped by default, so the runtime resolves the per-user token before each tool call. The full setup (Connect client provisioning, project linking, the runtime consent flow) lives in [Auth & route protection](./guides/auth-and-route-protection).
95
+ `"linear/myagent"` is the UID you chose when registering the Connect client. Connect-managed OAuth is user-scoped by default, so the runtime resolves the per-user token before each tool call. The full setup (Connect client provisioning, project linking, the runtime consent flow) lives in [Auth & route protection](/docs/guides/auth-and-route-protection).
132
96
 
133
97
  ## Self-hosted interactive OAuth
134
98
 
@@ -236,7 +200,8 @@ A tool can require both sign-in (`auth`) and a human approval. The model's appro
236
200
 
237
201
  ## What to read next
238
202
 
203
+ - [MCP connections](/docs/connections/mcp): connect to remote MCP servers.
204
+ - [OpenAPI connections](/docs/connections/openapi): generate tools from OpenAPI operations.
239
205
  - [Integrations](/integrations): browse every channel and connection eve ships, in one gallery.
240
- - [Tools](./tools): authored tools live alongside connection-provided tools; the same approval helpers apply.
241
- - [Auth & route protection](./guides/auth-and-route-protection): the full interactive-OAuth flow with Vercel Connect.
242
- - [Security model](./concepts/security-model): how connection credentials stay out of the model's reach.
206
+ - [Tools](/docs/tools): authored tools live alongside connection-provided tools; the same approval helpers apply.
207
+ - [Security model](/docs/concepts/security-model): how connection credentials stay out of the model's reach.
@@ -5,12 +5,6 @@ description: "Install eve, scaffold your first agent, give it a tool, and run it
5
5
 
6
6
  eve is a filesystem-first framework for durable agents. You write capabilities under `agent/`, and eve runs the model loop, persists every session, and serves the agent over HTTP and platform channels. You'll scaffold an app, add a tool, run it locally, then create, stream, and continue a session over HTTP.
7
7
 
8
- <Callout>
9
- eve is currently in beta and subject to the [Vercel beta
10
- terms](https://vercel.com/docs/release-phases/public-beta-agreement); the framework, APIs,
11
- documentation, and behavior may change before general availability.
12
- </Callout>
13
-
14
8
  ## Prerequisites
15
9
 
16
10
  - Node 24 or newer
@@ -24,23 +24,25 @@ 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 team (`▲ my-agent (acme)`), 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.
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. 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. 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
 
31
31
  ## Slash commands
32
32
 
33
- Each command echoes as an invocation line, asks through a bordered panel that takes the input area's place (one question at a time, separate from the chat transcript), and finishes with a one-line `⎿` result. Loading states stay on the ephemeral status line instead of piling into the transcript; model and channel setup use the same green square pulse as the build phase. Setup menus render the selected option with a filled arrow and an inverse label padded by one space on each side. Text prompts use a blinking block cursor over the character at the caret. The selected label is blue normally and yellow for warning rows.
33
+ Each command echoes as an invocation line, asks through a bordered panel that takes the input area's place (one question at a time, separate from the chat transcript), and finishes with a one-line `⎿` result. Loading states stay on the ephemeral status line instead of piling into the transcript; model, channel, and the Vercel CLI commands (`/vc:install`, `/vc:login`) use the same green square pulse as the build phase, while `/deploy` keeps a spinner. Setup menus render the selected option with a filled arrow and an inverse label padded by one space on each side. Text prompts use a blinking block cursor over the character at the caret. The selected label is blue normally and yellow for warning rows.
34
34
 
35
- | Command | Does |
36
- | ----------- | --------------------------------------------------------------------------------------------------------------------------------- |
37
- | `/model` | Opens a configure menu that loops until Done (or Esc). See [Configure the model and provider](#configure-the-model-and-provider). |
38
- | `/channels` | Shows the agent's channel list and adds the one you pick. See [Add a channel](#add-a-channel). |
39
- | `/deploy` | Ships the agent to Vercel production, linking the directory first when it is unlinked. |
40
- | `/loglevel` | Switches which logs the transcript shows. See [Control what logs show](#control-what-logs-show). |
41
- | `/new` | Starts a fresh session. |
42
- | `/exit` | Quits the TUI. |
43
- | `/help` | Lists every command. |
35
+ | Command | Does |
36
+ | ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
37
+ | `/model` | Opens a configure menu that loops until Done (or Esc). See [Configure the model and provider](#configure-the-model-and-provider). |
38
+ | `/channels` | Shows the agent's channel list and adds the one you pick. See [Add a channel](#add-a-channel). |
39
+ | `/deploy` | Ships the agent to Vercel production, linking the directory first when it is unlinked. |
40
+ | `/vc:install` | Installs the Vercel CLI. Available locally and on a remote session. |
41
+ | `/vc:login` | Logs in to Vercel locally. On a remote session, resolves the deployment's project, refreshes its OIDC token, and confirms any required Trusted Sources rule. |
42
+ | `/loglevel` | Switches which logs the transcript shows. See [Control what logs show](#control-what-logs-show). |
43
+ | `/new` | Starts a fresh session. |
44
+ | `/exit` | Quits the TUI. |
45
+ | `/help` | Lists the commands available for the current local or remote session. |
44
46
 
45
47
  `/model`, `/channels`, and `/deploy` manage the project and are available only when `eve dev` runs the server locally, not when connected to a remote server with `--url`.
46
48
 
@@ -119,7 +121,15 @@ Pass a URL and the TUI talks to a running deployment instead of starting a local
119
121
  eve dev https://<your-app>
120
122
  ```
121
123
 
122
- The bare URL is shorthand for `--url`; `--host`, `--port`, and `--no-ui` cannot be combined with a remote target. Eve gets the expected Vercel owner and project from `VERCEL_ORG_ID` and `VERCEL_PROJECT_ID` when both are set, or from the current directory's Vercel link otherwise. It verifies the exact deployment origin before attaching a freshly resolved project-scoped OIDC token or `VERCEL_AUTOMATION_BYPASS_SECRET`. Unverified URLs remain anonymous, and credential-bearing requests do not follow redirects. See [Deployment](./deployment) for the smoke-test flow.
124
+ The bare URL is shorthand for `--url`; it cannot be combined with `--host`, `--port`, or `--no-ui`.
125
+
126
+ At startup the TUI asks Vercel to resolve the remote origin under the active scope. A resolved response is the authority for a project-scoped OIDC token—refreshing an expired development token when refresh credentials exist—or an automation-bypass secret. An unresolved host is probed anonymously. The TUI then requests `/eve/v1/info`, with a ten-second timeout. A successful response marks the remote ready. An eve OIDC challenge, Vercel Deployment Protection challenge, or `TRUSTED_SOURCES_ENVIRONMENT_MISMATCH` opens `/vc:login` automatically; ordinary network failures and server errors remain remote-availability errors and do not start an authentication flow. Esc or Ctrl-C cancels the authentication flow.
127
+
128
+ In a remote session, `/vc:login` first resolves the deployment's Vercel project from its URL. If the active Vercel scope cannot resolve it, the flow asks for another team and reruns the lookup in that team's scope. If the CLI is logged out, the same panel runs the browser login first. The flow asks before adding any required Trusted Sources rule and requests a project-scoped token through `@vercel/oidc`. It does not relink the directory or modify `.env.local`. Finally, it retries `/eve/v1/info` to prove the credential works. A failure reports any login or Trusted Sources update that completed before it stopped.
129
+
130
+ 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).
131
+
132
+ `VERCEL_AUTOMATION_BYPASS_SECRET` remains available for a Protection Bypass for Automation token. See [Deployment](./deployment) for the smoke-test flow.
123
133
 
124
134
  ## What to read next
125
135
 
@@ -7,12 +7,6 @@ eve is a framework for building durable agents as ordinary files in a TypeScript
7
7
 
8
8
  Instead of one large configuration object, each part of your agent gets a clear home. Instructions go in one file, tools in one folder, channels in another. eve discovers that structure and turns it into an agent that runs locally, serves HTTP, connects to other platforms, and keeps working across many turns.
9
9
 
10
- <Callout>
11
- eve is currently in beta and subject to the [Vercel beta
12
- terms](https://vercel.com/docs/release-phases/public-beta-agreement); the framework, APIs,
13
- documentation, and behavior may change before general availability.
14
- </Callout>
15
-
16
10
  ## An eve project at a glance
17
11
 
18
12
  A small eve app looks like this:
@@ -90,7 +84,7 @@ As the agent grows, each concern still has a predictable home:
90
84
 
91
85
  | Path | Add it when you need... |
92
86
  | ------------------------------- | ------------------------------------------------ |
93
- | [`connections/`](./connections) | Tools from external MCP servers |
87
+ | [`connections/`](./connections) | Tools from external MCP or OpenAPI services |
94
88
  | [`hooks/`](./guides/hooks) | Code that reacts to lifecycle and stream events |
95
89
  | [`sandbox/`](./sandbox) | A controlled workspace for files and commands |
96
90
  | [`subagents/`](./subagents) | Specialist agents the root agent can delegate to |
@@ -105,5 +99,5 @@ The result stays readable before it runs. The directory tells you what the agent
105
99
  - [Tools](./tools): the typed actions your agent calls
106
100
  - [Instructions](./instructions): the always-on system prompt that shapes behavior
107
101
  - [Channels](./channels/overview): reach the agent from Slack, Discord, or a web UI
108
- - [Connections](./connections): pull in tools from external MCP servers
102
+ - [Connections](./connections): pull in tools from external services
109
103
  - [Project layout](./reference/project-layout): every authored slot under `agent/`
@@ -30,25 +30,26 @@ export default defineTool({
30
30
 
31
31
  ## The define\* helpers
32
32
 
33
- | Helper | Import from | Authored at | Guide |
34
- | ------------------------------------------------------ | --------------------------------------------- | ------------------------------------ | ------------------------------------------------------ |
35
- | `defineAgent` | `eve` | `agent/agent.ts` | [agent.ts](../agent-config) |
36
- | `defineTool` | `eve/tools` | `agent/tools/<name>.ts` | [Tools](../tools) |
37
- | `defineDynamic` | `eve/tools`, `eve/skills`, `eve/instructions` | `agent/{tools,skills,instructions}/` | [Dynamic capabilities](../guides/dynamic-capabilities) |
38
- | `defineMcpClientConnection`, `defineOpenAPIConnection` | `eve/connections` | `agent/connections/<name>.ts` | [Connections](../connections) |
39
- | `defineChannel` | `eve/channels` | `agent/channels/<name>.ts` | [Custom channels](../channels/custom) |
40
- | `eveChannel`, `slackChannel`, and the other platforms | `eve/channels/<platform>` | `agent/channels/<platform>.ts` | [Channels](../channels/overview) |
41
- | `defineSkill` | `eve/skills` | `agent/skills/<name>.ts` | [Skills](../skills) |
42
- | `defineInstructions` | `eve/instructions` | `agent/instructions.ts` | [Instructions](../instructions) |
43
- | `defineHook` | `eve/hooks` | `agent/hooks/<slug>.ts` | [Hooks](../guides/hooks) |
44
- | `defineSchedule` | `eve/schedules` | `agent/schedules/<name>.ts` | [Schedules](../schedules) |
45
- | `defineState` | `eve/context` | tools, hooks, lifecycle | [Session context](../guides/session-context) |
46
- | `defineSandbox` | `eve/sandbox` | `agent/sandbox.ts` | [Sandbox](../sandbox) |
47
- | `defineInstrumentation` | `eve/instrumentation` | `agent/instrumentation.ts` | [instrumentation.ts](../guides/instrumentation) |
48
- | `defineRemoteAgent` | `eve` | `agent/subagents/<id>/agent.ts` | [Remote agents](../guides/remote-agents) |
49
- | `defineEval` | `eve/evals` | `evals/*.eval.ts` | [Evals](../evals/overview) |
50
- | `defineEvalConfig` | `eve/evals` | `evals/evals.config.ts` | [Evals](../evals/overview) |
51
- | `useEveAgent` | `eve/react`, `eve/vue`, `eve/svelte` | frontend | [Frontend](../guides/frontend/overview) |
33
+ | Helper | Import from | Authored at | Guide |
34
+ | ----------------------------------------------------- | --------------------------------------------- | ------------------------------------ | ------------------------------------------------------ |
35
+ | `defineAgent` | `eve` | `agent/agent.ts` | [agent.ts](../agent-config) |
36
+ | `defineTool` | `eve/tools` | `agent/tools/<name>.ts` | [Tools](../tools) |
37
+ | `defineDynamic` | `eve/tools`, `eve/skills`, `eve/instructions` | `agent/{tools,skills,instructions}/` | [Dynamic capabilities](../guides/dynamic-capabilities) |
38
+ | `defineMcpClientConnection` | `eve/connections` | `agent/connections/<name>.ts` | [MCP connections](../connections/mcp) |
39
+ | `defineOpenAPIConnection` | `eve/connections` | `agent/connections/<name>.ts` | [OpenAPI connections](../connections/openapi) |
40
+ | `defineChannel` | `eve/channels` | `agent/channels/<name>.ts` | [Custom channels](../channels/custom) |
41
+ | `eveChannel`, `slackChannel`, and the other platforms | `eve/channels/<platform>` | `agent/channels/<platform>.ts` | [Channels](../channels/overview) |
42
+ | `defineSkill` | `eve/skills` | `agent/skills/<name>.ts` | [Skills](../skills) |
43
+ | `defineInstructions` | `eve/instructions` | `agent/instructions.ts` | [Instructions](../instructions) |
44
+ | `defineHook` | `eve/hooks` | `agent/hooks/<slug>.ts` | [Hooks](../guides/hooks) |
45
+ | `defineSchedule` | `eve/schedules` | `agent/schedules/<name>.ts` | [Schedules](../schedules) |
46
+ | `defineState` | `eve/context` | tools, hooks, lifecycle | [Session context](../guides/session-context) |
47
+ | `defineSandbox` | `eve/sandbox` | `agent/sandbox.ts` | [Sandbox](../sandbox) |
48
+ | `defineInstrumentation` | `eve/instrumentation` | `agent/instrumentation.ts` | [instrumentation.ts](../guides/instrumentation) |
49
+ | `defineRemoteAgent` | `eve` | `agent/subagents/<id>/agent.ts` | [Remote agents](../guides/remote-agents) |
50
+ | `defineEval` | `eve/evals` | `evals/*.eval.ts` | [Evals](../evals/overview) |
51
+ | `defineEvalConfig` | `eve/evals` | `evals/evals.config.ts` | [Evals](../evals/overview) |
52
+ | `useEveAgent` | `eve/react`, `eve/vue`, `eve/svelte` | frontend | [Frontend](../guides/frontend/overview) |
52
53
 
53
54
  A few non-`define*` helpers round out the set: `disableTool` and `ExperimentalWorkflow` from `eve/tools` (see [Default harness](../concepts/default-harness)), the route verbs `GET`/`POST`/`PUT`/`PATCH`/`DELETE`/`WS` from `eve/channels`, the approval predicates `always`/`once`/`never` from `eve/tools/approval`, and the channel auth helpers `localDev`/`vercelOidc`/`placeholderAuth` from `eve/channels/auth`. To wrap a built-in tool, import its default value from `eve/tools/defaults` (`bash`, `readFile`, `writeFile`, `glob`, `grep`, `webFetch`, `webSearch`, `todo`, `loadSkill`). `AgentWorkflowDefinition` and `AgentWorkflowWorldDefinition` are exported from `eve` for the `defineAgent({ experimental: { workflow } })` config shape.
54
55
 
@@ -33,7 +33,7 @@ Once Connect is enabled on your account, wire it up:
33
33
  3. Link the client to your project.
34
34
  4. Run `vercel link` and `vercel env pull` so `VERCEL_OIDC_TOKEN` is available locally.
35
35
 
36
- For the full reference, see [Connections](../connections).
36
+ For the full reference, see [MCP connections](../connections/mcp).
37
37
 
38
38
  ## What the user sees
39
39
 
@@ -49,8 +49,8 @@ The first time, the model picks a warehouse tool but there's no token yet, so th
49
49
 
50
50
  Right before each request to the MCP server, eve resolves the bearer and sends it as `Authorization: Bearer <token>`. The model only ever sees tool names, descriptions, and results. The credential stays out of its reach.
51
51
 
52
- If you want more control, gate the connection behind approval (`approval: once()`) or narrow which tools the model sees (`tools.allow`). See [Connections](../connections).
52
+ If you want more control, gate the connection behind approval (`approval: once()`) or narrow which tools the model sees (`tools.allow`). See [MCP connections](../connections/mcp).
53
53
 
54
54
  → Next: [Run analysis](./run-analysis)
55
55
 
56
- Learn more: [Connections](../connections) · [Auth and route protection](../guides/auth-and-route-protection)
56
+ Learn more: [MCP connections](../connections/mcp) · [Auth and route protection](../guides/auth-and-route-protection)
@@ -148,7 +148,7 @@ Across the nine steps you built and shipped one agent, and along the way you use
148
148
 
149
149
  ## Next steps
150
150
 
151
- - [Connections](../connections) for tool allowlists and per-connection approval.
151
+ - [MCP connections](../connections/mcp) for tool allowlists and per-connection approval.
152
152
  - [Sandbox](../sandbox) for backends, lifecycle, and network policy.
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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eve",
3
- "version": "0.13.5",
3
+ "version": "0.13.7",
4
4
  "private": false,
5
5
  "description": "Filesystem-first framework for durable backend AI agents that run anywhere.",
6
6
  "keywords": [