eve 0.7.0 → 0.7.2
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 +15 -0
- package/dist/docs/public/README.md +16 -11
- package/dist/docs/public/agent-config.md +9 -9
- package/dist/docs/public/channels/custom.mdx +4 -4
- package/dist/docs/public/channels/discord.mdx +1 -1
- package/dist/docs/public/channels/eve.mdx +9 -9
- package/dist/docs/public/channels/github.mdx +1 -1
- package/dist/docs/public/channels/overview.mdx +21 -15
- package/dist/docs/public/channels/slack.mdx +2 -2
- package/dist/docs/public/channels/teams.mdx +1 -1
- package/dist/docs/public/channels/telegram.mdx +1 -1
- package/dist/docs/public/channels/twilio.mdx +1 -1
- package/dist/docs/public/{advanced → concepts}/context-control.md +3 -3
- package/dist/docs/public/{advanced → concepts}/default-harness.md +3 -3
- package/dist/docs/public/{advanced → concepts}/execution-model-and-durability.md +3 -1
- package/dist/docs/public/concepts/meta.json +10 -0
- package/dist/docs/public/{advanced → concepts}/security-model.md +2 -2
- package/dist/docs/public/{advanced → concepts}/sessions-runs-and-streaming.md +7 -7
- package/dist/docs/public/connections.mdx +3 -3
- package/dist/docs/public/evals/cases.mdx +1 -1
- package/dist/docs/public/evals/overview.mdx +2 -2
- package/dist/docs/public/evals/running.mdx +1 -1
- package/dist/docs/public/evals/targets.mdx +1 -1
- package/dist/docs/public/getting-started.mdx +28 -35
- package/dist/docs/public/{advanced → guides}/auth-and-route-protection.md +2 -2
- package/dist/docs/public/{client → guides/client}/continuations.mdx +2 -2
- package/dist/docs/public/{client → guides/client}/messages.mdx +1 -1
- package/dist/docs/public/{client → guides/client}/meta.json +1 -1
- package/dist/docs/public/{client → guides/client}/output-schema.mdx +2 -2
- package/dist/docs/public/{client → guides/client}/overview.mdx +5 -5
- package/dist/docs/public/{client → guides/client}/streaming.mdx +1 -1
- package/dist/docs/public/{advanced → guides}/deployment.md +9 -1
- package/dist/docs/public/{advanced → guides}/dynamic-capabilities.md +1 -1
- package/dist/docs/public/{advanced → guides}/dynamic-workflows.md +1 -1
- package/dist/docs/public/{frontend → guides/frontend}/nextjs.mdx +3 -3
- package/dist/docs/public/{frontend → guides/frontend}/nuxt.mdx +3 -3
- package/dist/docs/public/{frontend → guides/frontend}/overview.mdx +6 -6
- package/dist/docs/public/{frontend → guides/frontend}/sveltekit.mdx +3 -3
- package/dist/docs/public/{frontend → guides/frontend}/use-eve-agent-svelte.mdx +2 -2
- package/dist/docs/public/{frontend → guides/frontend}/use-eve-agent-vue.mdx +2 -2
- package/dist/docs/public/{advanced → guides}/hooks.md +2 -2
- package/dist/docs/public/{advanced → guides}/instrumentation.md +2 -0
- package/dist/docs/public/{advanced → guides}/meta.json +8 -11
- package/dist/docs/public/{advanced → guides}/session-context.md +2 -2
- package/dist/docs/public/{advanced → guides}/state.md +1 -1
- package/dist/docs/public/instructions.mdx +2 -2
- package/dist/docs/public/introduction.md +5 -2
- package/dist/docs/public/meta.json +3 -3
- package/dist/docs/public/reference/cli.md +3 -3
- package/dist/docs/public/reference/meta.json +1 -1
- package/dist/docs/public/reference/project-layout.md +5 -1
- package/dist/docs/public/reference/typescript-api.md +23 -23
- package/dist/docs/public/sandbox.mdx +1 -1
- package/dist/docs/public/schedules.mdx +2 -2
- package/dist/docs/public/skills.mdx +3 -3
- package/dist/docs/public/subagents.mdx +3 -3
- package/dist/docs/public/tools.mdx +4 -4
- package/dist/docs/public/tutorial/connect-a-warehouse.mdx +2 -2
- package/dist/docs/public/tutorial/first-agent.mdx +1 -1
- package/dist/docs/public/tutorial/guard-the-spend.mdx +1 -1
- package/dist/docs/public/tutorial/how-it-runs.mdx +2 -2
- package/dist/docs/public/tutorial/meta.json +1 -1
- package/dist/docs/public/tutorial/query-sample-data.mdx +1 -1
- package/dist/docs/public/tutorial/remember-definitions.mdx +3 -3
- package/dist/docs/public/tutorial/run-analysis.mdx +1 -1
- package/dist/docs/public/tutorial/ship-it.mdx +4 -4
- package/dist/docs/public/tutorial/team-playbooks.mdx +3 -3
- package/dist/src/cli/dev/tui/prompt-command-handler.js +1 -1
- package/dist/src/cli/dev/tui/runner.d.ts +2 -2
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/tui.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +2 -2
- package/dist/src/compiled/@workflow/core/capabilities.d.ts +19 -1
- package/dist/src/compiled/@workflow/core/class-serialization.d.ts +32 -0
- package/dist/src/compiled/@workflow/core/create-hook.d.ts +37 -0
- package/dist/src/compiled/@workflow/core/global.d.ts +11 -1
- package/dist/src/compiled/@workflow/core/index.js +2 -2
- package/dist/src/compiled/@workflow/core/runtime/start.d.ts +6 -0
- package/dist/src/compiled/@workflow/core/runtime/suspension-handler.d.ts +15 -2
- package/dist/src/compiled/@workflow/core/runtime/wait-continuation.d.ts +84 -0
- package/dist/src/compiled/@workflow/core/runtime.js +27 -27
- package/dist/src/compiled/@workflow/core/serialization/types.d.ts +21 -0
- package/dist/src/compiled/@workflow/core/serialization.d.ts +72 -6
- package/dist/src/compiled/@workflow/core/symbols.d.ts +2 -0
- package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
- package/dist/src/compiled/@workflow/core/workflow/attribute-dispatcher.d.ts +6 -0
- package/dist/src/compiled/@workflow/core/workflow/set-attributes.d.ts +3 -4
- package/dist/src/compiled/@workflow/core/workflow.js +1 -1
- package/dist/src/compiled/@workflow/world/events.d.ts +48 -0
- package/dist/src/compiled/@workflow/world/index.d.ts +1 -1
- package/dist/src/compiled/@workflow/world/queue.d.ts +3 -0
- package/dist/src/compiled/@workflow/world/runs.d.ts +2 -0
- package/dist/src/compiled/@workflow/world/spec-version.d.ts +2 -1
- package/dist/src/compiled/_chunks/workflow/attribute-changes-DGVGRGfw.js +59 -0
- package/dist/src/compiled/_chunks/workflow/resume-hook-DMSadN9o.js +1 -0
- package/dist/src/compiled/_chunks/workflow/run-BRdn7zy_.js +1 -0
- package/dist/src/compiled/_chunks/workflow/sleep-CpXfoXLF.js +1 -0
- package/dist/src/execution/sandbox/bindings/vercel.d.ts +2 -6
- package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/runtime/sandbox/keys.js +1 -1
- package/dist/src/setup/primitives/pm/pnpm.js +1 -1
- package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +2 -2
- package/dist/src/setup/scaffold/update/channels.js +1 -1
- package/package.json +6 -6
- package/dist/docs/public/reference/faqs.md +0 -48
- package/dist/src/compiled/_chunks/workflow/resume-hook-CEAS3opc.js +0 -12
- package/dist/src/compiled/_chunks/workflow/sleep-Cup6vPoA.js +0 -1
- package/dist/src/compiled/_chunks/workflow/symbols-BUTtwS7j.js +0 -48
- /package/dist/docs/public/{advanced → guides}/dev-tui.md +0 -0
- /package/dist/docs/public/{frontend → guides/frontend}/meta.json +0 -0
- /package/dist/docs/public/{advanced → guides}/remote-agents.md +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# eve
|
|
2
2
|
|
|
3
|
+
## 0.7.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 7504d7f: Sandbox template keys now derive their Eve version segment from the compile metadata bundled with the app instead of resolving the installed package version at runtime. Deployed runtimes previously could resolve a different version string than the build-time prewarm (when the bundled fallback version was unstamped), compute a different template key, and fail every sandbox turn with "Sandbox template … is not provisioned"; build and runtime now always agree on the key.
|
|
8
|
+
- 7504d7f: Vercel stable sandbox template scopes no longer depend on `VERCEL_TEAM_ID`. Vercel exposes `VERCEL_PROJECT_ID` at both build and runtime but has no team system variable at runtime, so a build that set `VERCEL_TEAM_ID` would prewarm a template the deployed function could never resolve — surfacing as `Sandbox template … is not provisioned`. Stable templates are now keyed on the project id alone, so build-time prewarm and the deployed runtime always agree.
|
|
9
|
+
|
|
10
|
+
## 0.7.1
|
|
11
|
+
|
|
12
|
+
### Patch Changes
|
|
13
|
+
|
|
14
|
+
- a4d23ba: Bump the Workflow packages to the latest betas (`@workflow/core@5.0.0-beta.15`, `@workflow/world@5.0.0-beta.9`, `@workflow/world-local@5.0.0-beta.16`).
|
|
15
|
+
- 1728183: Declare `oxc-parser` as a runtime dependency, pinned to an exact version. Installed releases crashed `eve dev` with a silent non-zero exit when `/model` ran, because the model flow's source editor imports `oxc-parser` but releases since 0.6.x only declared it as a devDependency. The exact pin means every `eve` release ships the native parser version it was tested against, instead of floating to the newest patch at install time.
|
|
16
|
+
- 3168daa: `pnpm create eve` is back: the create-eve package returns as a launcher whose only job is to run the bundled eve's `init`, forwarding every argument. The scaffolded project belongs to the package manager that invoked the create command — `npm create eve` produces an npm project, `pnpm create eve` a pnpm one, `yarn create eve` a yarn one.
|
|
17
|
+
|
|
3
18
|
## 0.7.0
|
|
4
19
|
|
|
5
20
|
### Minor Changes
|
|
@@ -10,7 +10,12 @@ Important naming note:
|
|
|
10
10
|
- The current published package name is `eve`.
|
|
11
11
|
- The CLI binary is `eve`.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
Casing convention:
|
|
14
|
+
|
|
15
|
+
- Use Title Case for page `title` frontmatter and `meta.json` section titles (Fumadocs renders the page `title` as both the sidebar entry and the `<h1>`, so one casing covers both) — e.g. `Execution Model & Durability`, `Dynamic Capabilities`, `Build an Agent`.
|
|
16
|
+
- Use sentence case for in-page headings (`##` and below). Capitalize only the first word plus proper nouns/acronyms — e.g. `Next.js`, `SvelteKit`, `Slack`, `GitHub`, `CLI`, `TypeScript API`, `agent.ts`.
|
|
17
|
+
|
|
18
|
+
## Read this first
|
|
14
19
|
|
|
15
20
|
Read in this order:
|
|
16
21
|
|
|
@@ -19,23 +24,23 @@ Read in this order:
|
|
|
19
24
|
3. [Project Layout](./reference/project-layout.md)
|
|
20
25
|
4. [`agent.ts`](./agent-config.md)
|
|
21
26
|
5. [TypeScript API](./reference/typescript-api.md)
|
|
22
|
-
6. [Context Control](./
|
|
27
|
+
6. [Context Control](./concepts/context-control.md)
|
|
23
28
|
7. [Skills](./skills.mdx)
|
|
24
29
|
8. [Tools](./tools.mdx)
|
|
25
30
|
9. [Connections](./connections.mdx)
|
|
26
31
|
10. [Sandboxes](./sandbox.mdx)
|
|
27
32
|
11. [Channels](./channels/overview.mdx)
|
|
28
|
-
12. [Session Context](./
|
|
29
|
-
13. [Sessions And Streaming](./
|
|
30
|
-
14. [TypeScript
|
|
33
|
+
12. [Session Context](./guides/session-context.md)
|
|
34
|
+
13. [Sessions And Streaming](./concepts/sessions-runs-and-streaming.md)
|
|
35
|
+
14. [TypeScript SDK](./guides/client/overview.mdx)
|
|
31
36
|
15. [Subagents](./subagents.mdx)
|
|
32
37
|
16. [Schedules](./schedules.mdx)
|
|
33
38
|
17. [Evals](./evals/overview.mdx)
|
|
34
|
-
18. [Auth And Route Protection](./
|
|
35
|
-
19. [Vercel Deployment](./
|
|
39
|
+
18. [Auth And Route Protection](./guides/auth-and-route-protection.md)
|
|
40
|
+
19. [Vercel Deployment](./guides/deployment.md)
|
|
36
41
|
20. [CLI, Build, And Debugging](./reference/cli.md)
|
|
37
42
|
|
|
38
|
-
## The
|
|
43
|
+
## The public mental model
|
|
39
44
|
|
|
40
45
|
Eve is a filesystem-first framework for durable backend agents.
|
|
41
46
|
|
|
@@ -61,7 +66,7 @@ Eve then gives you:
|
|
|
61
66
|
- a per-agent sandbox with a shared runtime workspace
|
|
62
67
|
- typed runtime helpers accessed through `ctx` (`ctx.session`, `ctx.getSandbox()`, `ctx.getSkill()`)
|
|
63
68
|
|
|
64
|
-
## The
|
|
69
|
+
## The runtime shape
|
|
65
70
|
|
|
66
71
|
The public surface stays filesystem-first, but the implementation model underneath is still useful to
|
|
67
72
|
know:
|
|
@@ -75,7 +80,7 @@ That is why Eve exposes two identifiers:
|
|
|
75
80
|
- `continuationToken` for the next user message
|
|
76
81
|
- `sessionId` for streaming and inspection
|
|
77
82
|
|
|
78
|
-
## How
|
|
83
|
+
## How to use these docs
|
|
79
84
|
|
|
80
85
|
- Start with the authored filesystem shape and `agent.ts`.
|
|
81
86
|
- Then add runtime surfaces in this order: skills, tools, workspace, sandbox, channels.
|
|
@@ -83,7 +88,7 @@ That is why Eve exposes two identifiers:
|
|
|
83
88
|
continuation-token follow-ups.
|
|
84
89
|
- Then add advanced features: subagents, schedules, route protection, deployment.
|
|
85
90
|
|
|
86
|
-
## Good
|
|
91
|
+
## Good companions in this repo
|
|
87
92
|
|
|
88
93
|
- Weather-focused smoke/dev fixture: [`../../apps/fixtures/weather-fixture`](../../apps/fixtures/weather-fixture)
|
|
89
94
|
- Public API source of truth: [`../../packages/eve/src/public/index.ts`](../../packages/eve/src/public/index.ts)
|
|
@@ -44,7 +44,7 @@ export default defineAgent({
|
|
|
44
44
|
});
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
See [Default harness](./
|
|
47
|
+
See [Default harness](./concepts/default-harness#compaction) for how the loop applies it.
|
|
48
48
|
|
|
49
49
|
## Other fields
|
|
50
50
|
|
|
@@ -68,16 +68,16 @@ Build packaging controls. `externalDependencies` keeps listed packages external
|
|
|
68
68
|
|
|
69
69
|
## Where adjacent settings live
|
|
70
70
|
|
|
71
|
-
| Concern | Lives in
|
|
72
|
-
| ----------------------------- |
|
|
73
|
-
| Instructions prompt | `agent/instructions.md`, [Instructions](./instructions)
|
|
74
|
-
| Per-tool approval (HITL) | `agent/tools/*.ts`, [Tools](./tools)
|
|
75
|
-
| Inbound auth & network policy | the channel layer, [Auth & route protection](./
|
|
76
|
-
| Sandbox / workspace | `agent/sandbox/`, [Sandbox](./sandbox)
|
|
77
|
-
| Telemetry & debugging | `agent/instrumentation.ts`, [Instrumentation](./
|
|
71
|
+
| Concern | Lives in |
|
|
72
|
+
| ----------------------------- | -------------------------------------------------------------------------------- |
|
|
73
|
+
| Instructions prompt | `agent/instructions.md`, [Instructions](./instructions) |
|
|
74
|
+
| Per-tool approval (HITL) | `agent/tools/*.ts`, [Tools](./tools) |
|
|
75
|
+
| Inbound auth & network policy | the channel layer, [Auth & route protection](./guides/auth-and-route-protection) |
|
|
76
|
+
| Sandbox / workspace | `agent/sandbox/`, [Sandbox](./sandbox) |
|
|
77
|
+
| Telemetry & debugging | `agent/instrumentation.ts`, [Instrumentation](./guides/instrumentation) |
|
|
78
78
|
|
|
79
79
|
## What to read next
|
|
80
80
|
|
|
81
|
-
- [Default harness](./
|
|
81
|
+
- [Default harness](./concepts/default-harness) for the loop and built-in tools this config drives
|
|
82
82
|
- [TypeScript API](./reference/typescript-api) for every `defineAgent` field and type
|
|
83
83
|
- [Subagents](./subagents) for the `description` requirement and child-agent config
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "Custom
|
|
2
|
+
title: "Custom Channels"
|
|
3
3
|
description: "Author custom HTTP and WebSocket channels with routes, events, metadata, continuation tokens, and file uploads."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -174,7 +174,7 @@ export default defineChannel({
|
|
|
174
174
|
});
|
|
175
175
|
```
|
|
176
176
|
|
|
177
|
-
The projection is re-evaluated whenever adapter state changes after channel event handlers run. Dynamic tool resolvers read it via `ctx.channel.metadata` and narrow it with `isChannel`. See [Dynamic capabilities](../
|
|
177
|
+
The projection is re-evaluated whenever adapter state changes after channel event handlers run. Dynamic tool resolvers read it via `ctx.channel.metadata` and narrow it with `isChannel`. See [Dynamic capabilities](../guides/dynamic-capabilities) for the full consumption pattern.
|
|
178
178
|
|
|
179
179
|
When a parent agent dispatches a subagent, the framework forwards the parent's channel metadata projection to the child. The same `metadata(state)` projector also serves instrumentation metadata resolvers.
|
|
180
180
|
|
|
@@ -271,5 +271,5 @@ The framework handles staging bytes to the sandbox, enforcing upload policy, hyd
|
|
|
271
271
|
## What to read next
|
|
272
272
|
|
|
273
273
|
- [Channels overview](./overview)
|
|
274
|
-
- [Dynamic capabilities](../
|
|
275
|
-
- [Auth & route protection](../
|
|
274
|
+
- [Dynamic capabilities](../guides/dynamic-capabilities)
|
|
275
|
+
- [Auth & route protection](../guides/auth-and-route-protection)
|
|
@@ -71,4 +71,4 @@ export default discordChannel({
|
|
|
71
71
|
## What to read next
|
|
72
72
|
|
|
73
73
|
- [Channels overview](./overview): the channel contract and every built-in channel
|
|
74
|
-
- [Auth & route protection](../
|
|
74
|
+
- [Auth & route protection](../guides/auth-and-route-protection): authenticating inbound traffic
|
|
@@ -3,7 +3,7 @@ title: "Eve"
|
|
|
3
3
|
description: "The default HTTP API for an agent: session routes, auth, and customization."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
The Eve channel is the framework's default HTTP API. It's what the terminal UI, [`useEveAgent`](../frontend/overview), `curl`, and any SDK client talk to when they start sessions, send messages, and stream events. `eveChannel()` mounts the canonical session routes under `/eve/v1/session*`, and they are enabled by default even when `agent/channels/eve.ts` does not exist.
|
|
6
|
+
The Eve channel is the framework's default HTTP API. It's what the terminal UI, [`useEveAgent`](../guides/frontend/overview), `curl`, and any SDK client talk to when they start sessions, send messages, and stream events. `eveChannel()` mounts the canonical session routes under `/eve/v1/session*`, and they are enabled by default even when `agent/channels/eve.ts` does not exist.
|
|
7
7
|
|
|
8
8
|
Reach for it when something needs HTTP access to your agent: local tooling, a browser frontend, the terminal UI, or another API client. Most apps never write this file. Add `agent/channels/eve.ts` only to override the defaults, usually the route auth policy:
|
|
9
9
|
|
|
@@ -25,7 +25,7 @@ The channel exposes the routes that create sessions, send follow-ups, and stream
|
|
|
25
25
|
- `POST /eve/v1/session/:sessionId` (send a follow-up)
|
|
26
26
|
- `GET /eve/v1/session/:sessionId/stream` (stream events, NDJSON)
|
|
27
27
|
|
|
28
|
-
See [Sessions, runs & streaming](../
|
|
28
|
+
See [Sessions, runs & streaming](../concepts/sessions-runs-and-streaming) for the request and stream flow.
|
|
29
29
|
|
|
30
30
|
## Authentication
|
|
31
31
|
|
|
@@ -38,7 +38,7 @@ Neither admits browser users or external clients in production. For a public app
|
|
|
38
38
|
|
|
39
39
|
`eve init` scaffolds an `agent/channels/eve.ts` with a production placeholder so you replace it before going live. The generated channel allows Vercel OIDC and localhost, and includes `placeholderAuth()`, which returns a setup-focused 401 in production until you swap it for real auth. Delete the file and Eve falls back to `[localDev(), vercelOidc()]`, which still does not admit browser users in production.
|
|
40
40
|
|
|
41
|
-
For the full auth model and helper list, see [Auth & route protection](../
|
|
41
|
+
For the full auth model and helper list, see [Auth & route protection](../guides/auth-and-route-protection).
|
|
42
42
|
|
|
43
43
|
## Customization
|
|
44
44
|
|
|
@@ -70,13 +70,13 @@ export default eveChannel({
|
|
|
70
70
|
|
|
71
71
|
## Clients
|
|
72
72
|
|
|
73
|
-
The browser side of this API lives in the [Frontend](../frontend/overview) docs, where `useEveAgent` drives the Eve channel from React UI.
|
|
73
|
+
The browser side of this API lives in the [Frontend](../guides/frontend/overview) docs, where `useEveAgent` drives the Eve channel from React UI.
|
|
74
74
|
|
|
75
|
-
For scripts, server-to-server calls, evals, tests, and custom clients, use the [TypeScript
|
|
75
|
+
For scripts, server-to-server calls, evals, tests, and custom clients, use the [TypeScript SDK](../guides/client/overview). It wraps the session routes, continuation token, stream cursor, and reconnect loop.
|
|
76
76
|
|
|
77
77
|
## What to read next
|
|
78
78
|
|
|
79
|
-
- [Frontend](../frontend/overview): drive the Eve channel from browser UI with `useEveAgent`
|
|
80
|
-
- [TypeScript
|
|
81
|
-
- [Auth & route protection](../
|
|
82
|
-
- [Sessions, runs & streaming](../
|
|
79
|
+
- [Frontend](../guides/frontend/overview): drive the Eve channel from browser UI with `useEveAgent`
|
|
80
|
+
- [TypeScript SDK](../guides/client/overview): call the Eve channel from TypeScript
|
|
81
|
+
- [Auth & route protection](../guides/auth-and-route-protection): the route auth policy
|
|
82
|
+
- [Sessions, runs & streaming](../concepts/sessions-runs-and-streaming): the routes this channel exposes
|
|
@@ -53,4 +53,4 @@ export default githubChannel({
|
|
|
53
53
|
## What to read next
|
|
54
54
|
|
|
55
55
|
- [Channels overview](./overview): the channel contract and every built-in channel
|
|
56
|
-
- [Auth & route protection](../
|
|
56
|
+
- [Auth & route protection](../guides/auth-and-route-protection): authenticating inbound traffic
|
|
@@ -5,7 +5,7 @@ description: "How users reach your agent: the channel contract, the base Eve HTT
|
|
|
5
5
|
|
|
6
6
|
A channel is the edge adapter between a platform and your agent, and its job is deliberately small. It does exactly three things: normalizes platform input into a user message, owns the `continuationToken` (the resume handle for a conversation on that surface), and decides delivery (how, where, and whether a response goes back).
|
|
7
7
|
|
|
8
|
-
Eve ships a base HTTP channel plus first-class platform channels
|
|
8
|
+
Eve ships a base HTTP channel plus first-class platform channels, and you can author your own. Browse the full set in the [Integrations](/integrations) gallery.
|
|
9
9
|
|
|
10
10
|
## Where channels live
|
|
11
11
|
|
|
@@ -24,30 +24,36 @@ Scaffold a channel file with `eve channels add` (interactive), or pass a kind: `
|
|
|
24
24
|
|
|
25
25
|
## The Eve HTTP channel (default)
|
|
26
26
|
|
|
27
|
-
Eve's canonical HTTP session API: the routes the terminal UI, [`useEveAgent`](../frontend/overview), and `curl` all talk to. It is enabled by default, even with no `agent/channels/eve.ts` file. Add that file only to override the defaults, most often the route auth policy. See [Eve channel](./eve) for the routes, auth, and customization.
|
|
27
|
+
Eve's canonical HTTP session API: the routes the terminal UI, [`useEveAgent`](../guides/frontend/overview), and `curl` all talk to. It is enabled by default, even with no `agent/channels/eve.ts` file. Add that file only to override the defaults, most often the route auth policy. See [Eve channel](./eve) for the routes, auth, and customization.
|
|
28
28
|
|
|
29
29
|
## Custom channels
|
|
30
30
|
|
|
31
31
|
When Eve doesn't ship a channel for your surface, build one with `defineChannel` from `eve/channels`: route handlers (`GET`, `POST`, `PUT`, `PATCH`, `DELETE`, `WS`), an `events` map, and a `send` call inside a handler to start or resume a session. See [Custom channels](./custom) for the full walkthrough, including WebSocket routes, cross-channel hand-off, channel metadata, continuation tokens, and file uploads.
|
|
32
32
|
|
|
33
|
+
## Relationship to the Chat SDK
|
|
34
|
+
|
|
35
|
+
Eve uses the Chat SDK's **card-builder components** (Cards, Buttons, Actions, etc.) for composing rich Slack messages. When you build a card with the [Slack channel](./slack), the underlying primitives come from the Chat SDK and get converted to Slack Block Kit at post time.
|
|
36
|
+
|
|
37
|
+
Eve does **not** use the Chat SDK's runtime. The `Chat`, `Adapter`, and `Thread` primitives are never imported or reachable through Eve's public API. Eve's channel layer (webhook handling, signature verification, event parsing, and thread management) is implemented inside Eve itself. In short: building Slack messages feels just like Chat SDK cards, but wiring a channel means authoring against Eve's `defineChannel(...)` API, not a Chat SDK adapter.
|
|
38
|
+
|
|
33
39
|
## Which channel?
|
|
34
40
|
|
|
35
|
-
| You want… | Use
|
|
36
|
-
| ------------------------------------------- |
|
|
37
|
-
| A web app / browser chat UI | Eve channel + [`useEveAgent`](../frontend/overview) |
|
|
38
|
-
| Local tooling, SDK clients, `curl` | Eve channel (default)
|
|
39
|
-
| Slack mentions, DMs, buttons | [Slack](./slack)
|
|
40
|
-
| Discord slash commands, components | [Discord](./discord)
|
|
41
|
-
| Microsoft Teams messages + Adaptive Cards | [Teams](./teams)
|
|
42
|
-
| Telegram bot messages | [Telegram](./telegram)
|
|
43
|
-
| SMS or speech-transcribed phone calls | [Twilio](./twilio)
|
|
44
|
-
| GitHub @mentions, PR review with checkout | [GitHub](./github)
|
|
45
|
-
| Linear issue delegation and Agent Sessions | [Linear](./linear)
|
|
46
|
-
| Anything else (internal webhook, WebSocket) | Custom channel (`defineChannel`, above)
|
|
41
|
+
| You want… | Use |
|
|
42
|
+
| ------------------------------------------- | ---------------------------------------------------------- |
|
|
43
|
+
| A web app / browser chat UI | Eve channel + [`useEveAgent`](../guides/frontend/overview) |
|
|
44
|
+
| Local tooling, SDK clients, `curl` | Eve channel (default) |
|
|
45
|
+
| Slack mentions, DMs, buttons | [Slack](./slack) |
|
|
46
|
+
| Discord slash commands, components | [Discord](./discord) |
|
|
47
|
+
| Microsoft Teams messages + Adaptive Cards | [Teams](./teams) |
|
|
48
|
+
| Telegram bot messages | [Telegram](./telegram) |
|
|
49
|
+
| SMS or speech-transcribed phone calls | [Twilio](./twilio) |
|
|
50
|
+
| GitHub @mentions, PR review with checkout | [GitHub](./github) |
|
|
51
|
+
| Linear issue delegation and Agent Sessions | [Linear](./linear) |
|
|
52
|
+
| Anything else (internal webhook, WebSocket) | Custom channel (`defineChannel`, above) |
|
|
47
53
|
|
|
48
54
|
## What to read next
|
|
49
55
|
|
|
50
56
|
- [Slack](./slack): the most common platform channel, end to end
|
|
51
57
|
- [Custom channels](./custom): build a channel for any surface with `defineChannel`
|
|
52
|
-
- [Frontend](../frontend/overview): browser chat on the Eve channel with `useEveAgent`
|
|
58
|
+
- [Frontend](../guides/frontend/overview): browser chat on the Eve channel with `useEveAgent`
|
|
53
59
|
- [Integrations](/integrations): browse every built-in channel and connection in one gallery
|
|
@@ -4,7 +4,7 @@ description: "Reach your agent from Slack app mentions and DMs, with thread anch
|
|
|
4
4
|
type: integration
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
The Slack channel puts your agent inside a workspace: it answers `@mentions` and DMs, replies in threads, shows typing indicators, and turns HITL prompts into buttons. Use it when the conversation should happen where your team already works. Credentials run through [Vercel Connect](../
|
|
7
|
+
The Slack channel puts your agent inside a workspace: it answers `@mentions` and DMs, replies in threads, shows typing indicators, and turns HITL prompts into buttons. Use it when the conversation should happen where your team already works. Credentials run through [Vercel Connect](../guides/auth-and-route-protection), which handles both the outbound bot token and inbound webhook verification, so there's no `SLACK_BOT_TOKEN` or `SLACK_SIGNING_SECRET` for you to manage. See [Channels](./overview) for the contract this builds on.
|
|
8
8
|
|
|
9
9
|
## Set up Connect
|
|
10
10
|
|
|
@@ -101,4 +101,4 @@ Event handlers receive `(eventData, ctx)` with platform handles on `ctx.thread`
|
|
|
101
101
|
## What to read next
|
|
102
102
|
|
|
103
103
|
- [Channels overview](./overview): the channel contract and every built-in channel
|
|
104
|
-
- [Auth & route protection](../
|
|
104
|
+
- [Auth & route protection](../guides/auth-and-route-protection): authenticating inbound traffic
|
|
@@ -52,4 +52,4 @@ export default teamsChannel({
|
|
|
52
52
|
## What to read next
|
|
53
53
|
|
|
54
54
|
- [Channels overview](./overview): the channel contract and every built-in channel
|
|
55
|
-
- [Auth & route protection](../
|
|
55
|
+
- [Auth & route protection](../guides/auth-and-route-protection): authenticating inbound traffic
|
|
@@ -53,4 +53,4 @@ export default telegramChannel({
|
|
|
53
53
|
## What to read next
|
|
54
54
|
|
|
55
55
|
- [Channels overview](./overview): the channel contract and every built-in channel
|
|
56
|
-
- [Auth & route protection](../
|
|
56
|
+
- [Auth & route protection](../guides/auth-and-route-protection): authenticating inbound traffic
|
|
@@ -59,4 +59,4 @@ export default twilioChannel({
|
|
|
59
59
|
## What to read next
|
|
60
60
|
|
|
61
61
|
- [Channels overview](./overview): the channel contract and every built-in channel
|
|
62
|
-
- [Auth & route protection](../
|
|
62
|
+
- [Auth & route protection](../guides/auth-and-route-protection): authenticating inbound traffic
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "Context
|
|
2
|
+
title: "Context Control"
|
|
3
3
|
description: "Control what the model sees and when: instructions, skills, the workspace, and subagents."
|
|
4
4
|
---
|
|
5
5
|
|
|
@@ -80,7 +80,7 @@ See [Subagents](../subagents).
|
|
|
80
80
|
|
|
81
81
|
## Dynamic context with `defineDynamic`
|
|
82
82
|
|
|
83
|
-
The levers above are static: authored once, the same on every session. When the right context depends on who is calling (their team, tenant, plan, or feature flags), resolve it at runtime instead. `defineDynamic` in `agent/instructions/` returns the per-session system prompt, and `defineDynamic` in `agent/skills/` returns the set of skills a caller can load. Both read `ctx.session.auth` or channel metadata, so a caller on the billing team gets the billing instructions and playbook while nobody else sees them. See [Dynamic capabilities](
|
|
83
|
+
The levers above are static: authored once, the same on every session. When the right context depends on who is calling (their team, tenant, plan, or feature flags), resolve it at runtime instead. `defineDynamic` in `agent/instructions/` returns the per-session system prompt, and `defineDynamic` in `agent/skills/` returns the set of skills a caller can load. Both read `ctx.session.auth` or channel metadata, so a caller on the billing team gets the billing instructions and playbook while nobody else sees them. See [Dynamic capabilities](../guides/dynamic-capabilities) for the resolver API and when each event fires.
|
|
84
84
|
|
|
85
85
|
## Choosing the right lever
|
|
86
86
|
|
|
@@ -106,4 +106,4 @@ For most agents:
|
|
|
106
106
|
- [Tools](../tools)
|
|
107
107
|
- [Skills](../skills)
|
|
108
108
|
- [Subagents](../subagents)
|
|
109
|
-
- [Hooks](
|
|
109
|
+
- [Hooks](../guides/hooks)
|
|
@@ -41,7 +41,7 @@ These ship with every agent, no imports. Discovery never runs them: the harness
|
|
|
41
41
|
|
|
42
42
|
Notes:
|
|
43
43
|
|
|
44
|
-
- **`agent`** runs a copy of the current agent on a focused task. It inherits the same tools, connections, and instructions, but starts with fresh conversation history and fresh [state](
|
|
44
|
+
- **`agent`** runs a copy of the current agent on a focused task. It inherits the same tools, connections, and instructions, but starts with fresh conversation history and fresh [state](../guides/state). The child shares the parent's sandbox filesystem, so anything it writes is visible to the parent. See [Subagents](../subagents).
|
|
45
45
|
- **`load_skill`** only pulls instructions into context. It adds no new execution surface, because behavior still comes from the tools the agent already has.
|
|
46
46
|
- **`connection_search`** is the model-facing `connection__search` tool. A search surfaces a connection's tools by their qualified name (e.g. `connection__linear__list_issues`), and the model can then call them directly. It's registered only when the agent has connections.
|
|
47
47
|
- **`web_search`** has no local executor; the provider runs it. To supply your own implementation, override it with `defineTool()`.
|
|
@@ -85,10 +85,10 @@ There's also an experimental `Workflow` tool, shipped but off by default. To tur
|
|
|
85
85
|
export { ExperimentalWorkflow as default } from "eve/tools";
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
With it on, the model can orchestrate the agent's own subagents from model-authored JavaScript, all as one durable step. See [Dynamic workflows](
|
|
88
|
+
With it on, the model can orchestrate the agent's own subagents from model-authored JavaScript, all as one durable step. See [Dynamic workflows](../guides/dynamic-workflows).
|
|
89
89
|
|
|
90
90
|
## What to read next
|
|
91
91
|
|
|
92
92
|
- [Tools](../tools): define your own tools, gate them on approval, and shape their output with `toModelOutput`
|
|
93
|
-
- [Dynamic capabilities](
|
|
93
|
+
- [Dynamic capabilities](../guides/dynamic-capabilities): generate the tool set per session with `defineDynamic`
|
|
94
94
|
- [Sandbox](../sandbox): the sandbox the shell and file tools run in
|
|
@@ -21,6 +21,8 @@ Crash the process, hit a timeout, or redeploy mid-turn, and the run picks up fro
|
|
|
21
21
|
|
|
22
22
|
There's nothing to configure here. Eve owns the workflow lifecycle, and sessions are durable by default.
|
|
23
23
|
|
|
24
|
+
You don't write workflow code directly. Workflow primitives (`start()`, `resumeHook()`, etc.) are an implementation detail of Eve's runtime layer; channels, tools, and hooks never touch them. When you do need session data from your own code, there are two supported surfaces: tools read the current session's metadata (id, turn, auth, parent lineage) via `ctx.session`, and [`defineState`](../guides/session-context) reads or writes session-scoped durable state. See [State](../guides/state) for the read/write model.
|
|
25
|
+
|
|
24
26
|
## Parked work
|
|
25
27
|
|
|
26
28
|
Some work has to wait: a human approving a [tool](../tools), an interactive OAuth sign-in for a [connection](../connections), or a long-running [subagent](../subagents). At those points the turn parks durably. The workflow suspends and holds no compute until the input it's waiting on shows up (a click, a callback, a child completing), even if that's much later. When it does, the conversation picks up exactly where it left off.
|
|
@@ -45,4 +47,4 @@ Conversation history within a session is append-only. Turns land in order, and t
|
|
|
45
47
|
|
|
46
48
|
- [Sessions, runs & streaming](./sessions-runs-and-streaming): the handles you hold and the event stream you watch.
|
|
47
49
|
- [Security model](./security-model): the trust boundaries the runtime enforces.
|
|
48
|
-
- [State](../
|
|
50
|
+
- [State](../guides/state): durable per-session memory that persists across step boundaries.
|
|
@@ -50,7 +50,7 @@ A custom channel that accepts dashboard-style webhooks should follow the same sh
|
|
|
50
50
|
|
|
51
51
|
## Auth fails closed
|
|
52
52
|
|
|
53
|
-
Routes reject unauthenticated traffic by default: if no `AuthFn` in the walk accepts the request, it gets a `401`, and admitting anonymous callers takes an explicit `none()`. The scaffold's `placeholderAuth()` keeps a half-configured app closed in production until you replace it. See [Auth & route protection](../
|
|
53
|
+
Routes reject unauthenticated traffic by default: if no `AuthFn` in the walk accepts the request, it gets a `401`, and admitting anonymous callers takes an explicit `none()`. The scaffold's `placeholderAuth()` keeps a half-configured app closed in production until you replace it. See [Auth & route protection](../guides/auth-and-route-protection) for the full walk and verifiers.
|
|
54
54
|
|
|
55
55
|
## Pre-production checklist
|
|
56
56
|
|
|
@@ -73,7 +73,7 @@ Before exposing an agent to real traffic:
|
|
|
73
73
|
|
|
74
74
|
## What to read next
|
|
75
75
|
|
|
76
|
-
- [Auth & route protection](
|
|
76
|
+
- [Auth & route protection](../guides/auth-and-route-protection): the full auth walk and verifier helpers
|
|
77
77
|
- [Sandbox](../sandbox): backends, network policy, and brokering config
|
|
78
78
|
- [Execution model & durability](./execution-model-and-durability): how durable sessions run
|
|
79
79
|
- [Connections](../connections): static-token and OAuth connections
|
|
@@ -14,7 +14,7 @@ Two handles do two jobs here, and mixing them up is the most common mistake. One
|
|
|
14
14
|
|
|
15
15
|
A session has one active continuation at a time: each follow-up uses the current `continuationToken`, and a stale one is rejected.
|
|
16
16
|
|
|
17
|
-
React, Vue, and Svelte apps reach for [`useEveAgent()`](../frontend/overview) instead of calling these routes by hand. Next.js and Nuxt apps can proxy them to the Eve runtime from the same origin.
|
|
17
|
+
React, Vue, and Svelte apps reach for [`useEveAgent()`](../guides/frontend/overview) instead of calling these routes by hand. Next.js and Nuxt apps can proxy them to the Eve runtime from the same origin.
|
|
18
18
|
|
|
19
19
|
## Start a session
|
|
20
20
|
|
|
@@ -96,7 +96,7 @@ curl "http://127.0.0.1:3000/eve/v1/session/<sessionId>/stream?startIndex=<count>
|
|
|
96
96
|
|
|
97
97
|
For scripts, server-to-server calls, tests, evals, and custom UIs, `eve/client` wraps these routes in a typed client so you don't hand-roll the POST and NDJSON stream loop.
|
|
98
98
|
|
|
99
|
-
Start with the [TypeScript
|
|
99
|
+
Start with the [TypeScript SDK](../guides/client/overview) guide. It covers basic usage, sending messages, continuations, streaming, and per-turn `outputSchema` results.
|
|
100
100
|
|
|
101
101
|
## Inspect the agent over HTTP
|
|
102
102
|
|
|
@@ -106,7 +106,7 @@ Start with the [TypeScript Client](../client/overview) guide. It covers basic us
|
|
|
106
106
|
curl http://127.0.0.1:3000/eve/v1/info
|
|
107
107
|
```
|
|
108
108
|
|
|
109
|
-
The route uses the same default auth chain as the eve channel (`[localDev(), vercelOidc()]`). Locally it answers anonymously; a deployed Vercel target requires a valid OIDC bearer, with a same-project bypass for in-deployment callers. See [auth & route protection](../
|
|
109
|
+
The route uses the same default auth chain as the eve channel (`[localDev(), vercelOidc()]`). Locally it answers anonymously; a deployed Vercel target requires a valid OIDC bearer, with a same-project bypass for in-deployment callers. See [auth & route protection](../guides/auth-and-route-protection).
|
|
110
110
|
|
|
111
111
|
## Dispatch order
|
|
112
112
|
|
|
@@ -114,8 +114,8 @@ Every stream event runs four steps, in this order:
|
|
|
114
114
|
|
|
115
115
|
1. **Channel handler**: the channel's event handler runs and can mutate adapter state.
|
|
116
116
|
2. **Metadata projection**: the framework re-evaluates the channel's `metadata(state)` and stores the result.
|
|
117
|
-
3. **Hooks**: authored [hooks](../
|
|
118
|
-
4. **Dynamic resolvers**: [dynamic](../
|
|
117
|
+
3. **Hooks**: authored [hooks](../guides/hooks) subscribed to the event fire.
|
|
118
|
+
4. **Dynamic resolvers**: [dynamic](../guides/dynamic-capabilities) tool, skill, and instruction resolvers fire, and `ctx.channel.metadata` already holds the freshly projected metadata from step 2.
|
|
119
119
|
|
|
120
120
|
The order isn't incidental, it's structural. By the time a resolver or hook reads channel metadata, the channel has already updated its state and the projection is current.
|
|
121
121
|
|
|
@@ -123,5 +123,5 @@ The order isn't incidental, it's structural. By the time a resolver or hook read
|
|
|
123
123
|
|
|
124
124
|
- [Execution model & durability](./execution-model-and-durability): what makes a session durable and how parked work resumes.
|
|
125
125
|
- [Channels](../channels/overview): what owns the continuation token and delivery.
|
|
126
|
-
- [TypeScript
|
|
127
|
-
- [Frontend](../frontend/overview): `useEveAgent` instead of raw routes.
|
|
126
|
+
- [TypeScript SDK](../guides/client/overview): call these routes from scripts and server-side code.
|
|
127
|
+
- [Frontend](../guides/frontend/overview): `useEveAgent` instead of raw routes.
|
|
@@ -124,7 +124,7 @@ export default defineMcpClientConnection({
|
|
|
124
124
|
});
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
-
`"linear"` 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](./
|
|
127
|
+
`"linear"` 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).
|
|
128
128
|
|
|
129
129
|
## Self-hosted interactive OAuth
|
|
130
130
|
|
|
@@ -215,5 +215,5 @@ A tool can require both sign-in (`auth`) and a human approval. Today the model's
|
|
|
215
215
|
|
|
216
216
|
- [Integrations](/integrations): browse every channel and connection Eve ships, in one gallery.
|
|
217
217
|
- [Tools](./tools): authored tools live alongside connection-provided tools; the same approval helpers apply.
|
|
218
|
-
- [Auth & route protection](./
|
|
219
|
-
- [Security model](./
|
|
218
|
+
- [Auth & route protection](./guides/auth-and-route-protection): the full interactive-OAuth flow with Vercel Connect.
|
|
219
|
+
- [Security model](./concepts/security-model): how connection credentials stay out of the model's reach.
|
|
@@ -140,4 +140,4 @@ The loaders are meant for fixtures, not runtime agent code.
|
|
|
140
140
|
|
|
141
141
|
- [Assertions](./assertions): assert on what the eval did
|
|
142
142
|
- [Judge](./judge): grade quality with an LLM judge
|
|
143
|
-
- [TypeScript client](../client/messages): the send/turn protocol eval sessions build on
|
|
143
|
+
- [TypeScript client](../guides/client/messages): the send/turn protocol eval sessions build on
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "
|
|
2
|
+
title: "Overview"
|
|
3
3
|
description: "Define repeatable scored checks for an Eve agent with defineEval and run them with eve eval."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
An eval is a scored check that runs your agent against real sessions and grades the result. Use it to catch regressions when you change a prompt or a tool: drive the agent through one or more turns, then assert on what it did — the run completed, the right tool ran, the reply contains the right text — and optionally ship the results to Braintrust.
|
|
7
7
|
|
|
8
|
-
Evals exercise the same HTTP surface your users hit. The runner boots (or targets) a real agent server, drives sessions through the [TypeScript client](../client/overview) protocol, and grades what comes back — so a passing eval means the agent actually booted, accepted a request, and produced the result you asserted.
|
|
8
|
+
Evals exercise the same HTTP surface your users hit. The runner boots (or targets) a real agent server, drives sessions through the [TypeScript client](../guides/client/overview) protocol, and grades what comes back — so a passing eval means the agent actually booted, accepted a request, and produced the result you asserted.
|
|
9
9
|
|
|
10
10
|
## `defineEval`
|
|
11
11
|
|