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.
- package/CHANGELOG.md +26 -0
- package/dist/src/channel/send.d.ts +3 -1
- package/dist/src/channel/send.js +1 -1
- package/dist/src/channel/types.d.ts +6 -0
- package/dist/src/chunks/{use-eve-agent-_dbX0ASK.js → use-eve-agent-8X2UMr8q.js} +26 -2
- package/dist/src/chunks/{use-eve-agent-BjAM8_a3.js → use-eve-agent-9ZNiSFMb.js} +26 -2
- package/dist/src/cli/banner.d.ts +2 -4
- package/dist/src/cli/banner.js +1 -1
- package/dist/src/cli/commands/agent-prompt/build-and-verify.md +7 -4
- package/dist/src/cli/dev/tui/agent-header.js +1 -1
- package/dist/src/cli/dev/tui/blocks.d.ts +1 -1
- package/dist/src/cli/dev/tui/blocks.js +1 -1
- package/dist/src/cli/dev/tui/prompt-command-handler.d.ts +5 -1
- package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
- package/dist/src/cli/dev/tui/prompt-commands.d.ts +7 -7
- package/dist/src/cli/dev/tui/prompt-commands.js +2 -2
- package/dist/src/cli/dev/tui/remote-auth-command.d.ts +11 -0
- package/dist/src/cli/dev/tui/remote-auth-command.js +3 -0
- package/dist/src/cli/dev/tui/remote-auth-result.d.ts +5 -0
- package/dist/src/cli/dev/tui/remote-auth-result.js +2 -1
- package/dist/src/cli/dev/tui/remote-auth.d.ts +30 -0
- package/dist/src/cli/dev/tui/remote-auth.js +1 -0
- package/dist/src/cli/dev/tui/remote-connection-probe.d.ts +3 -1
- package/dist/src/cli/dev/tui/remote-connection-probe.js +1 -1
- package/dist/src/cli/dev/tui/remote-connection-types.d.ts +2 -1
- package/dist/src/cli/dev/tui/remote-connection.js +1 -1
- package/dist/src/cli/dev/tui/runner.d.ts +18 -1
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/setup-commands.d.ts +4 -4
- package/dist/src/cli/dev/tui/setup-commands.js +2 -2
- package/dist/src/cli/dev/tui/setup-issues.d.ts +1 -1
- package/dist/src/cli/dev/tui/setup-issues.js +1 -1
- package/dist/src/cli/dev/tui/status-line.d.ts +6 -14
- package/dist/src/cli/dev/tui/status-line.js +1 -1
- package/dist/src/cli/dev/tui/terminal-renderer.d.ts +8 -1
- package/dist/src/cli/dev/tui/terminal-renderer.js +9 -9
- package/dist/src/cli/dev/tui/test/index.d.ts +1 -0
- package/dist/src/cli/dev/tui/test/index.js +1 -1
- package/dist/src/cli/dev/tui/tui.d.ts +1 -1
- package/dist/src/cli/dev/tui/tui.js +1 -1
- package/dist/src/cli/dev/tui/vercel-trusted-sources.js +1 -1
- package/dist/src/cli/run.js +1 -1
- package/dist/src/client/agent-info-error.d.ts +17 -0
- package/dist/src/client/agent-info-error.js +1 -0
- package/dist/src/client/client.d.ts +4 -0
- package/dist/src/client/client.js +1 -1
- package/dist/src/client/index.d.ts +1 -0
- package/dist/src/client/index.js +1 -1
- package/dist/src/client/ndjson.js +3 -3
- package/dist/src/context/build-dynamic-tools.js +1 -1
- package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
- package/dist/src/context/keys.d.ts +2 -0
- package/dist/src/context/keys.js +1 -1
- package/dist/src/evals/cli/eval-client.js +1 -1
- package/dist/src/execution/delegated-parent-notification.js +1 -1
- package/dist/src/execution/durable-session-store.js +1 -1
- package/dist/src/execution/eve-workflow-attributes.d.ts +8 -0
- package/dist/src/execution/eve-workflow-attributes.js +1 -1
- package/dist/src/execution/ndjson-stream.d.ts +19 -0
- package/dist/src/execution/ndjson-stream.js +3 -0
- package/dist/src/execution/runtime-context.js +1 -1
- package/dist/src/execution/subagent-adapter.js +1 -1
- package/dist/src/execution/turn-workflow.js +1 -1
- package/dist/src/execution/workflow-entry.js +1 -1
- package/dist/src/execution/workflow-runtime.d.ts +1 -1
- package/dist/src/execution/workflow-runtime.js +1 -3
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-definition/connection.js +1 -1
- package/dist/src/internal/nitro/host/configure-nitro-routes.js +1 -1
- package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
- package/dist/src/internal/workflow/configure-world.js +1 -1
- package/dist/src/internal/workflow/queue-namespace.d.ts +0 -1
- package/dist/src/internal/workflow/queue-namespace.js +1 -1
- package/dist/src/internal/workflow/runtime.d.ts +4 -0
- package/dist/src/internal/workflow/runtime.js +1 -0
- package/dist/src/internal/workflow-bundle/builder-support.js +6 -6
- package/dist/src/internal/workflow-bundle/builder.js +2 -2
- package/dist/src/internal/workflow-bundle/vercel-workflow-output.js +1 -1
- package/dist/src/public/channels/github/dispatch.d.ts +22 -1
- package/dist/src/public/channels/github/dispatch.js +1 -1
- package/dist/src/public/channels/github/githubChannel.d.ts +21 -3
- package/dist/src/public/channels/github/githubChannel.js +1 -1
- package/dist/src/public/channels/github/inbound.d.ts +46 -1
- package/dist/src/public/channels/github/inbound.js +2 -2
- package/dist/src/public/channels/github/index.d.ts +1 -1
- package/dist/src/public/channels/github/state.d.ts +3 -1
- package/dist/src/public/channels/github/state.js +1 -1
- package/dist/src/public/channels/slack/interactions.js +1 -1
- package/dist/src/public/channels/slack/slackChannel.js +1 -1
- package/dist/src/runtime/connections/callback-route.js +1 -1
- package/dist/src/runtime/connections/principal.js +1 -1
- package/dist/src/runtime/session-callback-route.js +1 -1
- package/dist/src/services/dev-client/request-headers.d.ts +2 -0
- package/dist/src/services/dev-client/request-headers.js +1 -1
- package/dist/src/services/dev-client/vercel-auth-error.d.ts +12 -14
- package/dist/src/services/dev-client/vercel-auth-error.js +9 -2
- package/dist/src/setup/flows/install-vercel-cli.d.ts +1 -1
- package/dist/src/setup/flows/login.d.ts +3 -1
- package/dist/src/setup/flows/login.js +1 -1
- package/dist/src/setup/primitives/run-vercel.d.ts +8 -0
- package/dist/src/setup/primitives/run-vercel.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +6 -2
- package/dist/src/setup/scaffold/create/web-template.d.ts +1 -1
- package/dist/src/setup/scaffold/create/web-template.js +0 -17
- package/dist/src/setup/vercel-deployment.d.ts +12 -5
- package/dist/src/setup/vercel-deployment.js +1 -1
- package/dist/src/setup/vercel-project-api.d.ts +13 -2
- package/dist/src/setup/vercel-project-api.js +1 -1
- package/dist/src/setup/vercel-project.d.ts +5 -1
- package/dist/src/setup/vercel-project.js +0 -0
- package/dist/src/setup/verified-remote-client.js +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/README.md +2 -2
- package/docs/channels/github.mdx +13 -1
- package/docs/channels/linear.mdx +1 -1
- package/docs/channels/slack.mdx +1 -1
- package/docs/connections/mcp.mdx +61 -0
- package/docs/connections/meta.json +4 -0
- package/docs/connections/openapi.mdx +68 -0
- package/docs/{connections.mdx → connections/overview.mdx} +28 -63
- package/docs/getting-started.mdx +0 -6
- package/docs/guides/dev-tui.md +22 -12
- package/docs/introduction.mdx +2 -8
- package/docs/reference/typescript-api.md +20 -19
- package/docs/tutorial/connect-a-warehouse.mdx +3 -3
- package/docs/tutorial/ship-it.mdx +1 -1
- 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
|
-
|
|
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
|
-
|
|
15
|
-
import { defineMcpClientConnection } from "eve/connections";
|
|
15
|
+
Read [MCP connections](/docs/connections/mcp) for `defineMcpClientConnection`, transport requirements, and MCP tool filters.
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
-
|
|
21
|
+
Read [OpenAPI connections](/docs/connections/openapi) for `defineOpenAPIConnection`, `baseUrl`, and operation filters.
|
|
27
22
|
|
|
28
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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](
|
|
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
|
-
|
|
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](
|
|
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](
|
|
241
|
-
- [
|
|
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.
|
package/docs/getting-started.mdx
CHANGED
|
@@ -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
|
package/docs/guides/dev-tui.md
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
36
|
-
|
|
|
37
|
-
| `/model`
|
|
38
|
-
| `/channels`
|
|
39
|
-
| `/deploy`
|
|
40
|
-
| `/
|
|
41
|
-
| `/
|
|
42
|
-
| `/
|
|
43
|
-
| `/
|
|
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`;
|
|
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
|
|
package/docs/introduction.mdx
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
34
|
-
|
|
|
35
|
-
| `defineAgent`
|
|
36
|
-
| `defineTool`
|
|
37
|
-
| `defineDynamic`
|
|
38
|
-
| `defineMcpClientConnection
|
|
39
|
-
| `
|
|
40
|
-
| `
|
|
41
|
-
| `
|
|
42
|
-
| `
|
|
43
|
-
| `
|
|
44
|
-
| `
|
|
45
|
-
| `
|
|
46
|
-
| `
|
|
47
|
-
| `
|
|
48
|
-
| `
|
|
49
|
-
| `
|
|
50
|
-
| `
|
|
51
|
-
| `
|
|
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 [
|
|
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 [
|
|
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: [
|
|
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
|
-
- [
|
|
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.
|