eve 0.11.1 → 0.11.3
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 +17 -2
- package/README.md +11 -11
- package/bin/eve.d.ts +1 -1
- package/bin/eve.js +6 -6
- package/dist/src/channel/routes.d.ts +4 -4
- package/dist/src/channel/types.d.ts +2 -2
- package/dist/src/channel/websocket-upgrade-server.d.ts +3 -3
- package/dist/src/chunks/{use-eve-agent-CdETo3qQ.js → use-eve-agent-D9ZhQhyV.js} +2 -2
- package/dist/src/chunks/{use-eve-agent-ClyM-_UT.js → use-eve-agent-DFI0POM9.js} +2 -2
- package/dist/src/cli/banner.d.ts +1 -1
- package/dist/src/cli/banner.js +1 -1
- package/dist/src/cli/commands/channel-add-conflicts.js +1 -1
- package/dist/src/cli/commands/channels.js +1 -1
- package/dist/src/cli/commands/deploy.js +1 -1
- package/dist/src/cli/commands/info.js +1 -1
- package/dist/src/cli/commands/init-agent-instructions.md +1 -1
- package/dist/src/cli/commands/init-git.js +1 -1
- package/dist/src/cli/commands/init.d.ts +1 -1
- package/dist/src/cli/commands/link.js +1 -1
- package/dist/src/cli/commands/preconditions.d.ts +2 -2
- package/dist/src/cli/commands/preconditions.js +1 -1
- package/dist/src/cli/dev/environment.d.ts +1 -1
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/setup-issues.d.ts +2 -0
- package/dist/src/cli/dev/tui/setup-issues.js +1 -1
- package/dist/src/cli/dev/tui/terminal-renderer.js +2 -2
- package/dist/src/cli/dev/tui/theme.d.ts +1 -1
- package/dist/src/cli/dev/tui/tui.d.ts +1 -1
- package/dist/src/cli/dev/url.d.ts +1 -1
- package/dist/src/cli/run.d.ts +1 -1
- package/dist/src/cli/run.js +2 -2
- package/dist/src/cli/ui/output.d.ts +1 -1
- package/dist/src/client/client-error.d.ts +1 -1
- package/dist/src/client/client.d.ts +3 -3
- package/dist/src/client/eve-agent-store.d.ts +1 -1
- package/dist/src/client/eve-agent-store.js +1 -1
- package/dist/src/client/message-reducer-types.d.ts +3 -3
- package/dist/src/client/message-reducer.d.ts +3 -3
- package/dist/src/client/output-schema.d.ts +1 -1
- package/dist/src/client/reducer.d.ts +5 -5
- package/dist/src/client/session.d.ts +1 -1
- package/dist/src/client/types.d.ts +1 -1
- package/dist/src/client/url.d.ts +2 -2
- package/dist/src/compiled/.vendor-stamp.json +1 -1
- package/dist/src/compiled/@vercel/detect-agent/index.d.ts +1 -1
- package/dist/src/compiler/channel-instrumentation-types.js +1 -1
- package/dist/src/compiler/model-catalog.d.ts +1 -1
- package/dist/src/compiler/module-map.js +1 -1
- package/dist/src/compiler/normalize-agent-config.js +1 -1
- package/dist/src/compiler/normalize-channel.js +1 -1
- package/dist/src/compiler/normalize-connection.js +1 -1
- package/dist/src/compiler/normalize-instructions.js +1 -1
- package/dist/src/compiler/normalize-sandbox.js +1 -1
- package/dist/src/compiler/normalize-schedule.js +1 -1
- package/dist/src/compiler/normalize-skill.js +1 -1
- package/dist/src/compiler/normalize-subagent.js +1 -1
- package/dist/src/compiler/normalize-tool.js +1 -1
- package/dist/src/compiler/workspace-resources.js +1 -1
- package/dist/src/context/build-callback-context.js +1 -1
- package/dist/src/context/container.d.ts +4 -4
- package/dist/src/context/container.js +1 -1
- package/dist/src/discover/diagnostics.d.ts +1 -1
- package/dist/src/discover/project.d.ts +2 -2
- package/dist/src/discover/project.js +1 -1
- package/dist/src/evals/cli/eval-client.d.ts +1 -1
- package/dist/src/evals/define-eval.d.ts +1 -1
- package/dist/src/evals/runner/execute-eval.d.ts +1 -1
- package/dist/src/evals/runner/execute-task.d.ts +1 -1
- package/dist/src/evals/types.d.ts +6 -6
- package/dist/src/execution/durable-session-migrations/chain.js +1 -1
- package/dist/src/execution/sandbox/bash-tool.js +1 -1
- package/dist/src/execution/sandbox/bindings/docker-options.d.ts +1 -1
- package/dist/src/execution/sandbox/bindings/just-bash-runtime.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-runtime.js +1 -1
- package/dist/src/execution/sandbox/bindings/vercel.js +1 -1
- package/dist/src/execution/sandbox/development-prewarm.js +1 -1
- package/dist/src/execution/sandbox/ensure.js +1 -1
- package/dist/src/execution/sandbox/prewarm.js +1 -1
- package/dist/src/execution/session-callback-step.d.ts +1 -1
- package/dist/src/harness/attachment-staging.js +1 -1
- package/dist/src/harness/code-mode-lifecycle.d.ts +1 -1
- package/dist/src/harness/code-mode.js +1 -1
- package/dist/src/harness/emission.d.ts +1 -1
- package/dist/src/harness/runtime-actions.d.ts +1 -1
- package/dist/src/harness/tool-loop.js +1 -1
- package/dist/src/harness/tools.d.ts +12 -0
- package/dist/src/harness/tools.js +1 -1
- package/dist/src/internal/application/cache-metadata.d.ts +2 -2
- package/dist/src/internal/application/compiled-artifacts.js +2 -2
- package/dist/src/internal/application/package.d.ts +7 -7
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-module-bundle.js +1 -1
- package/dist/src/internal/helpers/markdown.js +1 -1
- package/dist/src/internal/instrumentation.d.ts +1 -1
- package/dist/src/internal/nitro/host/build-application.d.ts +1 -1
- package/dist/src/internal/nitro/host/channel-routes.d.ts +3 -3
- package/dist/src/internal/nitro/host/configure-nitro-routes.d.ts +1 -1
- package/dist/src/internal/nitro/host/configure-nitro-routes.js +1 -1
- package/dist/src/internal/nitro/host/create-application-nitro.d.ts +1 -1
- package/dist/src/internal/nitro/host/cron-handler-route.d.ts +3 -3
- package/dist/src/internal/nitro/host/nitro-bundler-config.d.ts +1 -1
- package/dist/src/internal/nitro/host/optional-engine-dependency-plugin.d.ts +2 -2
- package/dist/src/internal/nitro/host/schedule-task-routes.d.ts +2 -2
- package/dist/src/internal/nitro/host/start-development-server.d.ts +1 -1
- package/dist/src/internal/nitro/host/start-development-server.js +1 -1
- package/dist/src/internal/nitro/host/start-production-server.d.ts +1 -1
- package/dist/src/internal/nitro/host/start-production-server.js +2 -2
- package/dist/src/internal/nitro/routes/agent-info/load-agent-info-data.js +1 -1
- package/dist/src/internal/nitro/routes/health.d.ts +1 -1
- package/dist/src/internal/nitro/routes/info.d.ts +1 -1
- package/dist/src/internal/nitro/routes/runtime-artifacts.js +1 -1
- package/dist/src/internal/nitro/routes/schedule-task.d.ts +1 -1
- package/dist/src/internal/package-name.d.ts +1 -1
- package/dist/src/internal/vercel-agent-summary.d.ts +6 -6
- package/dist/src/internal/workflow/builtins.d.ts +3 -3
- package/dist/src/internal/workflow-bundle/nitro-step-entry.js +1 -1
- package/dist/src/internal/workflow-bundle/vercel-workflow-output.d.ts +7 -7
- package/dist/src/internal/workflow-bundle/workflow-core-shim.d.ts +4 -4
- package/dist/src/internal/workflow-bundle/workflow-core-shim.js +1 -1
- package/dist/src/packages/eve-catalog/src/index.js +1 -1
- package/dist/src/protocol/message.d.ts +2 -2
- package/dist/src/protocol/routes.d.ts +3 -3
- package/dist/src/public/agents/auth.d.ts +1 -1
- package/dist/src/public/channels/auth.d.ts +1 -1
- package/dist/src/public/channels/discord/api.d.ts +2 -2
- package/dist/src/public/channels/discord/discordChannel.d.ts +2 -2
- package/dist/src/public/channels/discord/hitl.d.ts +4 -4
- package/dist/src/public/channels/discord/verify.d.ts +1 -1
- package/dist/src/public/channels/eve.d.ts +5 -5
- package/dist/src/public/channels/github/api.d.ts +1 -1
- package/dist/src/public/channels/github/defaults.d.ts +1 -1
- package/dist/src/public/channels/github/inbound.d.ts +1 -1
- package/dist/src/public/channels/index.d.ts +2 -2
- package/dist/src/public/channels/linear/auth.d.ts +1 -1
- package/dist/src/public/channels/linear/hitl.d.ts +4 -4
- package/dist/src/public/channels/linear/inbound.d.ts +1 -1
- package/dist/src/public/channels/linear/verify.d.ts +1 -1
- package/dist/src/public/channels/slack/constants.d.ts +1 -1
- package/dist/src/public/channels/teams/api.d.ts +4 -4
- package/dist/src/public/channels/teams/hitl.d.ts +4 -4
- package/dist/src/public/channels/teams/limits.d.ts +3 -3
- package/dist/src/public/channels/teams/verify.d.ts +2 -2
- package/dist/src/public/channels/telegram/api.d.ts +1 -1
- package/dist/src/public/channels/telegram/hitl.d.ts +3 -3
- package/dist/src/public/channels/telegram/verify.d.ts +1 -1
- package/dist/src/public/channels/twilio/api.d.ts +1 -1
- package/dist/src/public/context/index.d.ts +1 -1
- package/dist/src/public/definitions/defineChannel.d.ts +2 -2
- package/dist/src/public/definitions/hook.d.ts +1 -1
- package/dist/src/public/definitions/remote-agent.d.ts +5 -5
- package/dist/src/public/definitions/sandbox.d.ts +1 -1
- package/dist/src/public/definitions/source.d.ts +2 -2
- package/dist/src/public/definitions/state.d.ts +2 -2
- package/dist/src/public/definitions/state.js +1 -1
- package/dist/src/public/instrumentation/index.d.ts +3 -3
- package/dist/src/public/next/index.d.ts +12 -12
- package/dist/src/public/next/index.js +1 -1
- package/dist/src/public/next/server.js +1 -1
- package/dist/src/public/next/vercel-output-config.js +1 -1
- package/dist/src/public/nuxt/dev-server.d.ts +2 -2
- package/dist/src/public/nuxt/dev-server.js +1 -1
- package/dist/src/public/nuxt/module.d.ts +10 -10
- package/dist/src/public/nuxt/routing.d.ts +6 -6
- package/dist/src/public/nuxt/routing.js +1 -1
- package/dist/src/public/nuxt/vercel-json.d.ts +2 -2
- package/dist/src/public/sandbox/backends/just-bash.d.ts +1 -1
- package/dist/src/public/sandbox/backends/microsandbox.d.ts +1 -1
- package/dist/src/public/sandbox/backends/vercel.d.ts +1 -1
- package/dist/src/public/sandbox/docker-sandbox.d.ts +1 -1
- package/dist/src/public/sandbox/just-bash-sandbox.d.ts +1 -1
- package/dist/src/public/sandbox/microsandbox-sandbox.d.ts +3 -3
- package/dist/src/public/sandbox/vercel-sandbox.d.ts +2 -2
- package/dist/src/public/sveltekit/dev-server.d.ts +2 -2
- package/dist/src/public/sveltekit/dev-server.js +1 -1
- package/dist/src/public/sveltekit/index.d.ts +11 -11
- package/dist/src/public/sveltekit/routing.d.ts +5 -5
- package/dist/src/public/sveltekit/routing.js +1 -1
- package/dist/src/public/sveltekit/vercel-json.d.ts +2 -2
- package/dist/src/public/tool-result-narrowing.js +1 -1
- package/dist/src/public/types/json.d.ts +1 -1
- package/dist/src/react/use-eve-agent.d.ts +8 -8
- package/dist/src/runtime/agent/bootstrap-model.js +1 -1
- package/dist/src/runtime/agent/bootstrap.d.ts +1 -1
- package/dist/src/runtime/agent/bootstrap.js +1 -1
- package/dist/src/runtime/agent/mock-model-adapter.js +1 -1
- package/dist/src/runtime/agent/resolve-model.js +1 -1
- package/dist/src/runtime/attributes/emit.d.ts +2 -2
- package/dist/src/runtime/connections/callback-route.d.ts +1 -1
- package/dist/src/runtime/connections/principal.js +1 -1
- package/dist/src/runtime/connections/scoped-authorization.d.ts +1 -1
- package/dist/src/runtime/connections/types.d.ts +4 -4
- package/dist/src/runtime/framework-tools/final-output.d.ts +1 -1
- package/dist/src/runtime/governance/auth/http-basic.d.ts +1 -1
- package/dist/src/runtime/governance/auth/token-claims.d.ts +1 -1
- package/dist/src/runtime/governance/auth/types.d.ts +1 -1
- package/dist/src/runtime/loaders/artifact-paths.d.ts +1 -1
- package/dist/src/runtime/loaders/compile-metadata.js +1 -1
- package/dist/src/runtime/loaders/manifest.js +1 -1
- package/dist/src/runtime/loaders/module-map.js +1 -1
- package/dist/src/runtime/prompt/compose.js +1 -1
- package/dist/src/runtime/resolve-channel.js +1 -1
- package/dist/src/runtime/schedules/register.js +1 -1
- package/dist/src/runtime/sessions/auth.d.ts +1 -1
- package/dist/src/runtime/sessions/runtime-session.d.ts +1 -1
- package/dist/src/runtime/types.d.ts +1 -1
- package/dist/src/runtime/workspace/types.d.ts +1 -1
- package/dist/src/services/dev-client/request-headers.d.ts +2 -2
- package/dist/src/services/dev-client/vercel-auth-error.d.ts +1 -1
- package/dist/src/services/inspect-application.d.ts +1 -1
- package/dist/src/setup/boxes/add-channels.d.ts +1 -1
- package/dist/src/setup/boxes/add-channels.js +1 -1
- package/dist/src/setup/boxes/deploy-project.js +1 -1
- package/dist/src/setup/boxes/resolve-target.d.ts +2 -2
- package/dist/src/setup/boxes/scaffold.d.ts +4 -4
- package/dist/src/setup/boxes/scaffold.js +1 -1
- package/dist/src/setup/channel-add-conflicts.js +1 -1
- package/dist/src/setup/cli/rail-log.d.ts +1 -1
- package/dist/src/setup/flows/model.d.ts +3 -5
- package/dist/src/setup/flows/model.js +1 -1
- package/dist/src/setup/node-engine.d.ts +5 -5
- package/dist/src/setup/node-engine.js +1 -1
- package/dist/src/setup/onboarding.d.ts +2 -2
- package/dist/src/setup/primitives/open-url.d.ts +1 -1
- package/dist/src/setup/primitives/pm/pnpm.js +1 -1
- package/dist/src/setup/primitives/pm/run.d.ts +1 -1
- package/dist/src/setup/primitives/pm/types.d.ts +1 -1
- package/dist/src/setup/scaffold/connections/catalog.d.ts +1 -1
- package/dist/src/setup/scaffold/create/add-to-project.d.ts +2 -2
- package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
- package/dist/src/setup/scaffold/create/project.d.ts +5 -5
- package/dist/src/setup/scaffold/create/project.js +3 -3
- package/dist/src/setup/scaffold/create/web-template.d.ts +2 -2
- package/dist/src/setup/scaffold/create/web-template.js +2 -2
- package/dist/src/setup/scaffold/update/package-json.d.ts +1 -1
- package/dist/src/setup/slack-connect-lifecycle.d.ts +2 -2
- package/dist/src/setup/slack-connect-lifecycle.js +1 -1
- package/dist/src/setup/slackbot.d.ts +1 -1
- package/dist/src/setup/slackbot.js +1 -1
- package/dist/src/setup/validate-gateway-key.d.ts +1 -1
- package/dist/src/setup/vercel-project.js +1 -1
- package/dist/src/shared/agent-definition.d.ts +15 -15
- package/dist/src/shared/code-mode.d.ts +3 -3
- package/dist/src/shared/json-schema.d.ts +1 -1
- package/dist/src/shared/model-endpoint-status.d.ts +2 -2
- package/dist/src/shared/sandbox-backend.d.ts +4 -4
- package/dist/src/shared/sandbox-definition.d.ts +3 -3
- package/dist/src/shared/sandbox-network-policy.d.ts +1 -1
- package/dist/src/shared/sandbox-session.d.ts +2 -2
- package/dist/src/shared/skill-package.d.ts +1 -1
- package/dist/src/shared/skill-package.js +1 -1
- package/dist/src/shared/tool-definition.d.ts +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.d.ts +7 -7
- 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.d.ts +7 -7
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/README.md +11 -11
- package/docs/agent-config.md +2 -2
- package/docs/channels/custom.mdx +5 -5
- package/docs/channels/discord.mdx +3 -3
- package/docs/channels/eve.mdx +7 -7
- package/docs/channels/linear.mdx +6 -6
- package/docs/channels/overview.mdx +11 -11
- package/docs/channels/slack.mdx +4 -4
- package/docs/channels/teams.mdx +2 -2
- package/docs/channels/telegram.mdx +3 -3
- package/docs/channels/twilio.mdx +1 -1
- package/docs/concepts/context-control.md +5 -5
- package/docs/concepts/default-harness.md +16 -16
- package/docs/concepts/execution-model-and-durability.md +9 -9
- package/docs/concepts/security-model.md +9 -9
- package/docs/concepts/sessions-runs-and-streaming.md +30 -30
- package/docs/connections.mdx +11 -11
- package/docs/evals/judge.mdx +2 -2
- package/docs/evals/overview.mdx +2 -2
- package/docs/evals/reporters.mdx +2 -2
- package/docs/getting-started.mdx +12 -10
- package/docs/guides/auth-and-route-protection.md +6 -6
- package/docs/guides/client/continuations.mdx +3 -3
- package/docs/guides/client/output-schema.mdx +1 -1
- package/docs/guides/client/overview.mdx +5 -5
- package/docs/guides/client/streaming.mdx +1 -1
- package/docs/guides/deployment.md +7 -7
- package/docs/guides/dev-tui.md +2 -2
- package/docs/guides/frontend/nextjs.mdx +13 -13
- package/docs/guides/frontend/nuxt.mdx +7 -7
- package/docs/guides/frontend/overview.mdx +13 -13
- package/docs/guides/frontend/sveltekit.mdx +7 -7
- package/docs/guides/frontend/use-eve-agent-svelte.mdx +6 -6
- package/docs/guides/frontend/use-eve-agent-vue.mdx +6 -6
- package/docs/guides/hooks.md +2 -2
- package/docs/guides/instrumentation.md +12 -12
- package/docs/guides/remote-agents.md +4 -4
- package/docs/guides/session-context.md +4 -4
- package/docs/guides/state.md +1 -1
- package/docs/instructions.mdx +4 -4
- package/docs/introduction.mdx +14 -12
- package/docs/reference/cli.md +5 -5
- package/docs/reference/project-layout.md +4 -4
- package/docs/responsible-use.md +3 -3
- package/docs/sandbox.mdx +8 -8
- package/docs/schedules.mdx +1 -1
- package/docs/skills.mdx +4 -4
- package/docs/subagents.mdx +3 -3
- package/docs/tools/human-in-the-loop.md +83 -0
- package/docs/tools/meta.json +4 -0
- package/docs/{tools.mdx → tools/overview.mdx} +14 -37
- package/docs/tutorial/connect-a-warehouse.mdx +3 -3
- package/docs/tutorial/first-agent.mdx +2 -2
- package/docs/tutorial/how-it-runs.mdx +2 -2
- package/docs/tutorial/query-sample-data.mdx +1 -1
- package/docs/tutorial/ship-it.mdx +4 -4
- package/package.json +1 -1
package/docs/channels/eve.mdx
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: "
|
|
2
|
+
title: "eve"
|
|
3
3
|
description: "The default HTTP API for an agent, covering session routes, auth, and customization."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
The
|
|
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, including 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
|
|
|
@@ -54,7 +54,7 @@ The `auth` option decides who can call these routes. The built-in helpers cover
|
|
|
54
54
|
|
|
55
55
|
Neither admits browser users or external clients in production. For a public app, wire the channel to your own auth (Clerk, Auth.js, or your own OIDC/JWT verification).
|
|
56
56
|
|
|
57
|
-
`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
|
|
57
|
+
`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.
|
|
58
58
|
|
|
59
59
|
For the full auth model and helper list, see [Auth & route protection](../guides/auth-and-route-protection).
|
|
60
60
|
|
|
@@ -77,7 +77,7 @@ export default eveChannel({
|
|
|
77
77
|
},
|
|
78
78
|
events: {
|
|
79
79
|
"message.completed"(eventData, channel, ctx) {
|
|
80
|
-
console.log("
|
|
80
|
+
console.log("eve response completed", {
|
|
81
81
|
continuationToken: channel.continuationToken,
|
|
82
82
|
sessionId: ctx.session.id,
|
|
83
83
|
});
|
|
@@ -88,13 +88,13 @@ export default eveChannel({
|
|
|
88
88
|
|
|
89
89
|
## Clients
|
|
90
90
|
|
|
91
|
-
The browser side of this API lives in the [Frontend](../guides/frontend/overview) docs, where `useEveAgent` drives the
|
|
91
|
+
The browser side of this API lives in the [Frontend](../guides/frontend/overview) docs, where `useEveAgent` drives the eve channel from React UI.
|
|
92
92
|
|
|
93
93
|
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.
|
|
94
94
|
|
|
95
95
|
## What to read next
|
|
96
96
|
|
|
97
|
-
- [Frontend](../guides/frontend/overview): drive the
|
|
98
|
-
- [TypeScript SDK](../guides/client/overview): call the
|
|
97
|
+
- [Frontend](../guides/frontend/overview): drive the eve channel from browser UI with `useEveAgent`
|
|
98
|
+
- [TypeScript SDK](../guides/client/overview): call the eve channel from TypeScript
|
|
99
99
|
- [Auth & route protection](../guides/auth-and-route-protection): the route auth policy
|
|
100
100
|
- [Sessions, runs & streaming](../concepts/sessions-runs-and-streaming): the routes this channel exposes
|
package/docs/channels/linear.mdx
CHANGED
|
@@ -4,7 +4,7 @@ description: "Reach your agent through Linear Agent Sessions, with native Agent
|
|
|
4
4
|
type: integration
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
The Linear channel uses Linear's Agent Session surface rather than ordinary comments. Users delegate work to the agent from Linear,
|
|
7
|
+
The Linear channel uses Linear's Agent Session surface rather than ordinary comments. Users delegate work to the agent from Linear, eve receives `AgentSessionEvent` webhooks at `/eve/v1/linear`, and the channel replies with native Agent Activities, including `thought`, `action`, `elicitation`, `response`, and `error`. See [Channels](./overview) for the contract this builds on.
|
|
8
8
|
|
|
9
9
|
## Add the channel
|
|
10
10
|
|
|
@@ -36,21 +36,21 @@ https://<deployment>/eve/v1/linear
|
|
|
36
36
|
|
|
37
37
|
For Linear's agent surface, configure the OAuth authorize URL with `actor=app` and grant the app scopes that let it appear as an agent in Linear, including `app:assignable` and `app:mentionable`. Subscribe to the `AgentSessionEvent` webhook category so Linear sends `created` events when the agent is delegated or mentioned and `prompted` events when the user continues the session.
|
|
38
38
|
|
|
39
|
-
Linear sends webhook signatures in `Linear-Signature`;
|
|
39
|
+
Linear sends webhook signatures in `Linear-Signature`; eve verifies the HMAC over the raw body and rejects stale `webhookTimestamp` values. If a trusted gateway verifies Linear before the request reaches eve, pass `credentials.webhookVerifier` instead of a webhook secret.
|
|
40
40
|
|
|
41
41
|
## How the channel handles messages
|
|
42
42
|
|
|
43
43
|
### Dispatch
|
|
44
44
|
|
|
45
|
-
The default hook dispatches `created` and `prompted` Agent Session events.
|
|
45
|
+
The default hook dispatches `created` and `prompted` Agent Session events. eve adds a Linear context block with the agent session, issue, comment, and organization identifiers, then continues the same session with `agent-session:<id>`.
|
|
46
46
|
|
|
47
47
|
### Delivery
|
|
48
48
|
|
|
49
|
-
Turn start posts an ephemeral `thought`, tool calls post ephemeral `action` activities, final assistant text posts a durable `response`, and failures post `error` activities. When the model emits text before a tool call,
|
|
49
|
+
Turn start posts an ephemeral `thought`, tool calls post ephemeral `action` activities, final assistant text posts a durable `response`, and failures post `error` activities. When the model emits text before a tool call, eve buffers the first non-empty line and uses it as the next ephemeral Linear `thought`, mirroring Slack's typing-status behavior.
|
|
50
50
|
|
|
51
51
|
### Human-in-the-loop (HITL)
|
|
52
52
|
|
|
53
|
-
Human-in-the-loop (HITL) input requests render as Linear `elicitation` activities. When the user replies to the Agent Session, the channel resolves that prompt back to the pending
|
|
53
|
+
Human-in-the-loop (HITL) input requests render as Linear `elicitation` activities. When the user replies to the Agent Session, the channel resolves that prompt back to the pending eve input request and resumes with `inputResponses`.
|
|
54
54
|
|
|
55
55
|
### Proactive sessions
|
|
56
56
|
|
|
@@ -153,7 +153,7 @@ export default defineSchedule({
|
|
|
153
153
|
});
|
|
154
154
|
```
|
|
155
155
|
|
|
156
|
-
For issue or comment targets, the channel calls Linear's proactive Agent Session mutations before starting the
|
|
156
|
+
For issue or comment targets, the channel calls Linear's proactive Agent Session mutations before starting the eve turn. For an existing `agentSessionId`, it skips session creation and only seeds the continuation token.
|
|
157
157
|
|
|
158
158
|
## What to read next
|
|
159
159
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Overview"
|
|
3
|
-
description: "How users reach your agent: the channel contract, the base
|
|
3
|
+
description: "How users reach your agent: the channel contract, the base eve HTTP channel, and authoring custom channels."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
A channel is the edge adapter between a platform and your agent. It does three things:
|
|
@@ -9,7 +9,7 @@ A channel is the edge adapter between a platform and your agent. It does three t
|
|
|
9
9
|
- Owns the `continuationToken`, the resume handle for a conversation on that surface.
|
|
10
10
|
- Decides delivery, meaning how, where, and whether a response goes back.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
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.
|
|
13
13
|
|
|
14
14
|
Each channel has its own provider terms, data flow, auth model, and user-consent expectations. Before sending non-public, sensitive, regulated, or production data through a channel, confirm that the channel provider and your configured scopes, signature checks, route auth, and delivery behavior are appropriate for your use case.
|
|
15
15
|
|
|
@@ -28,26 +28,26 @@ agent/
|
|
|
28
28
|
|
|
29
29
|
Scaffold a channel file with `eve channels add` (interactive), or pass a kind: `eve channels add slack` or `eve channels add web`. You can also author the file by hand.
|
|
30
30
|
|
|
31
|
-
## The
|
|
31
|
+
## The eve HTTP channel (default)
|
|
32
32
|
|
|
33
|
-
The
|
|
33
|
+
The eve channel is the framework's default 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 [HTTP channel](./eve) for routes, auth, and customization.
|
|
34
34
|
|
|
35
35
|
## Custom channels
|
|
36
36
|
|
|
37
|
-
When
|
|
37
|
+
When eve doesn't ship a channel for your surface, build one with `defineChannel` from `eve/channels`. A custom channel declares 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.
|
|
38
38
|
|
|
39
39
|
## Relationship to the Chat SDK
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
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.
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
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 implements its own channel layer (webhook handling, signature verification, event parsing, and thread management). Building Slack messages works like Chat SDK cards, but wiring a channel means authoring against eve's `defineChannel(...)` API, not a Chat SDK adapter.
|
|
44
44
|
|
|
45
45
|
## Which channel?
|
|
46
46
|
|
|
47
47
|
| You want… | Use |
|
|
48
48
|
| ------------------------------------------- | ---------------------------------------------------------- |
|
|
49
|
-
| A web app / browser chat UI |
|
|
50
|
-
| Local tooling, SDK clients, `curl` |
|
|
49
|
+
| A web app / browser chat UI | eve channel + [`useEveAgent`](../guides/frontend/overview) |
|
|
50
|
+
| Local tooling, SDK clients, `curl` | eve channel (default) |
|
|
51
51
|
| Slack mentions, DMs, buttons | [Slack](./slack) |
|
|
52
52
|
| Discord slash commands, components | [Discord](./discord) |
|
|
53
53
|
| Microsoft Teams messages + Adaptive Cards | [Teams](./teams) |
|
|
@@ -61,11 +61,11 @@ Eve does **not** use the Chat SDK's runtime. The `Chat`, `Adapter`, and `Thread`
|
|
|
61
61
|
|
|
62
62
|
As the deployer, it is your responsibility to ensure your agent complies with applicable laws.
|
|
63
63
|
|
|
64
|
-
Where an
|
|
64
|
+
Where an eve agent communicates with people, you may be required to disclose that they are interacting with an automated AI system where law requires it. eve does not add this disclosure automatically; configure it in your instructions and/or channel responses.
|
|
65
65
|
|
|
66
66
|
## What to read next
|
|
67
67
|
|
|
68
68
|
- [Slack](./slack): the most common platform channel, end to end
|
|
69
69
|
- [Custom channels](./custom): build a channel for any surface with `defineChannel`
|
|
70
|
-
- [Frontend](../guides/frontend/overview): browser chat on the
|
|
70
|
+
- [Frontend](../guides/frontend/overview): browser chat on the eve channel with `useEveAgent`
|
|
71
71
|
- [Integrations](/integrations): browse every built-in channel and connection in one gallery
|
package/docs/channels/slack.mdx
CHANGED
|
@@ -8,7 +8,7 @@ The Slack channel puts your agent inside a workspace. It answers `@mentions` and
|
|
|
8
8
|
|
|
9
9
|
## Set up Connect
|
|
10
10
|
|
|
11
|
-
Create a Slack Connect client and copy its UID (e.g. `slack/my-agent`), then attach this project as the trigger destination at
|
|
11
|
+
Create a Slack Connect client and copy its UID (e.g. `slack/my-agent`), then attach this project as the trigger destination at eve's Slack route:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
14
|
npm install -g vercel@latest && export FF_CONNECT_ENABLED=1
|
|
@@ -17,7 +17,7 @@ vercel connect detach <uid> --yes
|
|
|
17
17
|
vercel connect attach <uid> --triggers --trigger-path /eve/v1/slack --yes
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
`FF_CONNECT_ENABLED=1` turns on the Connect commands, which are feature-flagged in the Vercel CLI today. The `create` step provisions a destination at the default Connect path. `detach` then `attach --trigger-path /eve/v1/slack` re-points the trigger at the
|
|
20
|
+
`FF_CONNECT_ENABLED=1` turns on the Connect commands, which are feature-flagged in the Vercel CLI today. The `create` step provisions a destination at the default Connect path. `detach` then `attach --trigger-path /eve/v1/slack` re-points the trigger at the eve Slack route, since eve does not serve the default Connect path. `--triggers` turns on Slack Event Subscriptions; without it, Slack never delivers `app_mention` or `message.im`. You can also create the client from the [Connect dashboard](https://vercel.com/d?to=/%5Bteam%5D/~/connect&title=Go+to+Connect).
|
|
21
21
|
|
|
22
22
|
## Add the channel
|
|
23
23
|
|
|
@@ -42,7 +42,7 @@ export default slackChannel({
|
|
|
42
42
|
VERCEL_USE_EXPERIMENTAL_FRAMEWORKS=1 vercel deploy --prod
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
-
`VERCEL_USE_EXPERIMENTAL_FRAMEWORKS=1` lets the Vercel CLI recognize
|
|
45
|
+
`VERCEL_USE_EXPERIMENTAL_FRAMEWORKS=1` lets the Vercel CLI recognize eve as a framework during the build. eve's own setup commands set the same flag.
|
|
46
46
|
|
|
47
47
|
## How the channel handles messages
|
|
48
48
|
|
|
@@ -54,7 +54,7 @@ Inbound hooks decide whether to dispatch a turn and with what `auth`. Return `{
|
|
|
54
54
|
- `onDirectMessage(ctx, message)` handles `message.im` events (needs `im:history` scope). Bot-authored messages and edits are filtered out first.
|
|
55
55
|
- `onInteraction(action, ctx)` handles `block_actions` callbacks not consumed by HITL.
|
|
56
56
|
|
|
57
|
-
You get the triggering mention by default, but not the earlier replies in the thread. Pull them in with `loadThreadContextMessages` and return them as `context`, which
|
|
57
|
+
You get the triggering mention by default, but not the earlier replies in the thread. Pull them in with `loadThreadContextMessages` and return them as `context`, which eve appends to history as user messages the model sees on every later turn. Use `since: "last-agent-reply"` so repeated mentions in one thread inject only what is new:
|
|
58
58
|
|
|
59
59
|
```ts
|
|
60
60
|
import { defaultSlackAuth, loadThreadContextMessages, slackChannel } from "eve/channels/slack";
|
package/docs/channels/teams.mdx
CHANGED
|
@@ -26,7 +26,7 @@ By default the channel mounts at `POST /eve/v1/teams`. Point your Azure Bot or T
|
|
|
26
26
|
|
|
27
27
|
### Dispatch
|
|
28
28
|
|
|
29
|
-
The default `onMessage` handles two cases: personal-chat messages, and channel or group-chat messages that mention the bot directly. Ambient resource-specific-consent messages are dropped unless you override it. Before dispatch,
|
|
29
|
+
The default `onMessage` handles two cases: personal-chat messages, and channel or group-chat messages that mention the bot directly. Ambient resource-specific-consent messages are dropped unless you override it. Before dispatch, eve strips the mention, adds a `<teams_context>` block, and scopes channel and group threads by root activity id (`replyToId ?? id`).
|
|
30
30
|
|
|
31
31
|
```ts
|
|
32
32
|
import { defaultTeamsAuth, teamsChannel } from "eve/channels/teams";
|
|
@@ -45,7 +45,7 @@ Replies post as Markdown (`textFormat: "markdown"`), with oversized text split a
|
|
|
45
45
|
|
|
46
46
|
### Human-in-the-loop (HITL)
|
|
47
47
|
|
|
48
|
-
A human-in-the-loop (HITL) `input.requested` event renders as an Adaptive Card. Buttons and options map to `Action.Submit`, selects to `Input.ChoiceSet`, and freeform to `Input.Text`. When the user submits, the activity converts to
|
|
48
|
+
A human-in-the-loop (HITL) `input.requested` event renders as an Adaptive Card. Buttons and options map to `Action.Submit`, selects to `Input.ChoiceSet`, and freeform to `Input.Text`. When the user submits, the activity converts to eve `inputResponses` for you. For invokes that aren't HITL, handle them in `onInvoke(ctx, activity)`.
|
|
49
49
|
|
|
50
50
|
### Proactive sessions
|
|
51
51
|
|
|
@@ -21,7 +21,7 @@ TELEGRAM_BOT_TOKEN=123456:... # replies, typing, callbacks, proactive sen
|
|
|
21
21
|
TELEGRAM_WEBHOOK_SECRET_TOKEN=... # must match the secret_token you register
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
You can pass the same values via `credentials: { botToken, webhookSecretToken }`. The channel mounts `POST /eve/v1/telegram`. Register the deployed URL yourself;
|
|
24
|
+
You can pass the same values via `credentials: { botToken, webhookSecretToken }`. The channel mounts `POST /eve/v1/telegram`. Register the deployed URL yourself; eve does not call `setWebhook`:
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
curl -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/setWebhook" \
|
|
@@ -47,7 +47,7 @@ The default `message.completed` handler sends plain text via `sendMessage`. It p
|
|
|
47
47
|
|
|
48
48
|
### Human-in-the-loop (HITL)
|
|
49
49
|
|
|
50
|
-
Human-in-the-loop (HITL) turns option requests into inline-keyboard buttons and freeform requests into `ForceReply`. Telegram caps `callback_data` at 64 bytes, so
|
|
50
|
+
Human-in-the-loop (HITL) turns option requests into inline-keyboard buttons and freeform requests into `ForceReply`. Telegram caps `callback_data` at 64 bytes, so eve keeps compact callback ids in channel state instead. It acknowledges its own callbacks with `answerCallbackQuery`; anything it doesn't recognize goes to `onCallbackQuery`.
|
|
51
51
|
|
|
52
52
|
### Proactive sessions
|
|
53
53
|
|
|
@@ -55,7 +55,7 @@ Start a session without an inbound message through `receive(telegram, { message,
|
|
|
55
55
|
|
|
56
56
|
### Attachments
|
|
57
57
|
|
|
58
|
-
Inbound photos and documents are supported.
|
|
58
|
+
Inbound photos and documents are supported. eve fetches them on demand via `getFile`, only when an upload policy allows the type:
|
|
59
59
|
|
|
60
60
|
```ts
|
|
61
61
|
export default telegramChannel({
|
package/docs/channels/twilio.mdx
CHANGED
|
@@ -4,7 +4,7 @@ description: "Reach your agent over SMS and speech-transcribed phone calls with
|
|
|
4
4
|
type: integration
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
The Twilio channel puts your agent on a phone number, so people can text it or call it. Inbound SMS arrives as a webhook. Inbound calls are answered with TwiML `<Gather input="speech">`, and the resulting transcript feeds the same
|
|
7
|
+
The Twilio channel puts your agent on a phone number, so people can text it or call it. Inbound SMS arrives as a webhook. Inbound calls are answered with TwiML `<Gather input="speech">`, and the resulting transcript feeds the same eve session that SMS uses, so a caller and a texter look identical downstream. Every request is checked against `X-Twilio-Signature` before anything else runs. The raw continuation token is `From:To`. See [Channels](./overview) for the contract this builds on.
|
|
8
8
|
|
|
9
9
|
## Add the channel
|
|
10
10
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Context Control"
|
|
3
|
-
description: "Control what an
|
|
3
|
+
description: "Control what an eve agent's model sees and when, across instructions, skills, the workspace, and subagents."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
eve gives you a few levers for controlling what the model sees and when. `instructions.md` (or `instructions.ts`) is always on, `skills/` are available but loaded on demand, and the workspace and sandbox are visible through tools rather than pasted into the prompt.
|
|
7
7
|
|
|
8
8
|
## Base identity with `instructions.md`
|
|
9
9
|
|
|
@@ -29,11 +29,11 @@ export default defineInstructions({
|
|
|
29
29
|
});
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
Module-backed instructions run once at build time.
|
|
32
|
+
Module-backed instructions run once at build time. eve captures the resulting markdown into the compiled manifest, so the runtime serves the same prompt every session without re-running the module.
|
|
33
33
|
|
|
34
34
|
## Load procedures on demand with `skills/`
|
|
35
35
|
|
|
36
|
-
Skills stay out of the always-on prompt by default, which keeps rich procedures available without bloating every turn.
|
|
36
|
+
Skills stay out of the always-on prompt by default, which keeps rich procedures available without bloating every turn. eve advertises the available skills and adds a framework-owned `load_skill` tool. When the request clearly matches a skill description, or the user names a skill explicitly, the model activates that skill, and eve appends the skill's markdown to the active instructions for later turn work.
|
|
37
37
|
|
|
38
38
|
### Flat skill
|
|
39
39
|
|
|
@@ -58,7 +58,7 @@ See [Skills](../skills) for the full authoring model and install notes.
|
|
|
58
58
|
|
|
59
59
|
## Put runtime files in the workspace, not the prompt
|
|
60
60
|
|
|
61
|
-
|
|
61
|
+
eve does not inline the entire authored surface into the prompt. Instead, it gives the model a shallow workspace hint and runtime tools to inspect deeper when needed. Skill files are available under the active workspace root, and the model inspects them with the shared `bash` tool, which keeps prompts smaller and makes file and command work explicit.
|
|
62
62
|
|
|
63
63
|
See [Sandbox](../sandbox) for the workspace and sandbox model.
|
|
64
64
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "The Harness"
|
|
3
|
-
description: "The out-of-the-box
|
|
3
|
+
description: "The out-of-the-box eve agent loop and the built-in tools every agent ships with, plus how to override or disable them."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
The default harness is what every
|
|
6
|
+
The default harness is what every eve agent ships with. It includes the framework-owned agent loop plus a set of built-in tools the model can call without you writing a line. You extend it with capabilities specific to your agent. The loop itself, how a turn runs and checkpoints and resumes, lives in [Execution model and durability](./execution-model-and-durability).
|
|
7
7
|
|
|
8
8
|
## Compaction
|
|
9
9
|
|
|
@@ -24,20 +24,20 @@ Compaction also preserves the framework's own tool state automatically. It reset
|
|
|
24
24
|
|
|
25
25
|
These ship with every agent, no imports. The harness shows the model the tool descriptors first, then executes only what the model actually calls; discovery never runs them. The shell and file tools (`bash`, `read_file`, `write_file`, `glob`, `grep`) live in the app runtime and proxy their work into the agent's single [sandbox](../sandbox); the rest run in the app runtime. The "Where it runs" column below names where each tool's effect lands.
|
|
26
26
|
|
|
27
|
-
| Tool | Does
|
|
28
|
-
| ------------------- |
|
|
29
|
-
| `bash` | Run a shell command.
|
|
30
|
-
| `read_file` | Read a text file with line-numbered output (enables read-before-write).
|
|
31
|
-
| `write_file` | Write a complete file; enforces read-before-write and stale-read detection.
|
|
32
|
-
| `glob` | Find files by glob pattern.
|
|
33
|
-
| `grep` | Search file contents by regex.
|
|
34
|
-
| `web_fetch` | Fetch a URL.
|
|
35
|
-
| `web_search` | Search the web (provider-managed; resolved from the model provider).
|
|
36
|
-
| `todo` | Maintain a durable per-session todo list.
|
|
37
|
-
| `ask_question` | Ask the user a clarifying question or a choice mid-turn and park until they answer. No `execute`; the model calls it with `{ prompt, options?, allowFreeform? }`. | App runtime |
|
|
38
|
-
| `agent` | Delegate a subtask to a copy of itself (shares the parent sandbox + tools, fresh history/state).
|
|
39
|
-
| `load_skill` | Pull an on-demand [skill](../skills)'s instructions into the current turn. Present only when the agent declares skills.
|
|
40
|
-
| `connection_search` | Discover tools across declared [connections](../connections); matched tools become directly callable. Present only when the agent declares connections.
|
|
27
|
+
| Tool | Does | Where it runs |
|
|
28
|
+
| ------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- |
|
|
29
|
+
| `bash` | Run a shell command. | Sandbox |
|
|
30
|
+
| `read_file` | Read a text file with line-numbered output (enables read-before-write). | Sandbox FS |
|
|
31
|
+
| `write_file` | Write a complete file; enforces read-before-write and stale-read detection. | Sandbox FS |
|
|
32
|
+
| `glob` | Find files by glob pattern. | Sandbox FS |
|
|
33
|
+
| `grep` | Search file contents by regex. | Sandbox FS |
|
|
34
|
+
| `web_fetch` | Fetch a URL. | App runtime |
|
|
35
|
+
| `web_search` | Search the web (provider-managed; resolved from the model provider). | Provider |
|
|
36
|
+
| `todo` | Maintain a durable per-session todo list. | App runtime |
|
|
37
|
+
| `ask_question` | Ask the user a clarifying question or a choice mid-turn and park until they answer. No `execute`; the model calls it with `{ prompt, options?, allowFreeform? }`. See [Human-in-the-loop](../tools/human-in-the-loop). | App runtime |
|
|
38
|
+
| `agent` | Delegate a subtask to a copy of itself (shares the parent sandbox + tools, fresh history/state). | App runtime |
|
|
39
|
+
| `load_skill` | Pull an on-demand [skill](../skills)'s instructions into the current turn. Present only when the agent declares skills. | App runtime |
|
|
40
|
+
| `connection_search` | Discover tools across declared [connections](../connections); matched tools become directly callable. Present only when the agent declares connections. | App runtime |
|
|
41
41
|
|
|
42
42
|
Notes:
|
|
43
43
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Execution Model and Durability"
|
|
3
|
-
description: "How an
|
|
3
|
+
description: "How an eve session runs. Durable conversations, turns that checkpoint at steps, and parked work that resumes later."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
An
|
|
6
|
+
An eve session is a durable conversation. It can run for days and survives process restarts and redeploys without any work on your part. You write the capabilities (tools, instructions, channels) and eve runs the loop.
|
|
7
7
|
|
|
8
8
|
## Sessions, turns, and steps
|
|
9
9
|
|
|
@@ -13,15 +13,15 @@ Work nests in three levels:
|
|
|
13
13
|
- **turn**: one user message and all the work it triggers (model calls, tool calls, reasoning) until the agent produces its response.
|
|
14
14
|
- **step**: a durable checkpoint inside a turn (one model call and the tool calls it makes).
|
|
15
15
|
|
|
16
|
-
Every turn runs as a durable workflow, built on the open-source [Workflow SDK](https://workflow-sdk.dev/) (Vercel Workflow when you deploy on Vercel).
|
|
16
|
+
Every turn runs as a durable workflow, built on the open-source [Workflow SDK](https://workflow-sdk.dev/) (Vercel Workflow when you deploy on Vercel). eve checkpoints progress and serializes durable state at each step boundary. Your code runs inside a managed step, so tools, the sandbox, and subagents feel synchronous even though the session underneath them is durable.
|
|
17
17
|
|
|
18
18
|
## Resuming after a crash
|
|
19
19
|
|
|
20
|
-
Crash the process, hit a timeout, or redeploy mid-turn, and the run picks up from the last completed step rather than replaying the whole turn. Completed steps never re-run;
|
|
20
|
+
Crash the process, hit a timeout, or redeploy mid-turn, and the run picks up from the last completed step rather than replaying the whole turn. Completed steps never re-run; eve replays the recorded result. A step interrupted mid-execution re-runs, so make non-idempotent side effects like charges or emails idempotent, or gate them with approval.
|
|
21
21
|
|
|
22
|
-
There's nothing to configure.
|
|
22
|
+
There's nothing to configure. 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
|
|
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. Two surfaces give your own code session data: tools read the current session's metadata (id, turn, auth, parent lineage) via `ctx.session`, and [`defineState`](../guides/state) reads or writes session-scoped durable state. See [State](../guides/state) for the read/write model.
|
|
25
25
|
|
|
26
26
|
## Parked work
|
|
27
27
|
|
|
@@ -29,9 +29,9 @@ Some work has to wait, including a human approving a [tool](../tools), an intera
|
|
|
29
29
|
|
|
30
30
|
## Message delivery and queueing
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
eve does not maintain a durable FIFO queue of user messages for a session. The `continuationToken` is a resume handle for the session's current workflow hook, not a general message-queue address.
|
|
33
33
|
|
|
34
|
-
When a session is waiting, a delivery to the current continuation token wakes the session and starts the next turn. When a turn is already active, the hook may accept additional deliveries, but the runtime only drains them at specific workflow boundaries. If more than one delivery is ready when the driver checks,
|
|
34
|
+
When a session is waiting, a delivery to the current continuation token wakes the session and starts the next turn. When a turn is already active, the hook may accept additional deliveries, but the runtime only drains them at specific workflow boundaries. If more than one delivery is ready when the driver checks, eve may fold them into the next turn; that drain is best-effort and depends on workflow and transport timing.
|
|
35
35
|
|
|
36
36
|
So don't rely on concurrent sends to the same session behaving like a typical ordered chat queue. For deterministic behavior, send one user turn at a time and wait for `session.waiting` before sending the next message to the same session. If your channel can receive bursts while the agent is working, keep your own per-session queue in the channel or app layer, then deliver the next message after the session parks again. Separate sessions still run independently.
|
|
37
37
|
|
|
@@ -39,7 +39,7 @@ So don't rely on concurrent sends to the same session behaving like a typical or
|
|
|
39
39
|
|
|
40
40
|
A turn can hand work off to a [subagent](../subagents). Each subagent gets its own context and its own durable session; a declared subagent also gets its own sandbox, skills, and state. Nothing crosses the boundary implicitly.
|
|
41
41
|
|
|
42
|
-
## How
|
|
42
|
+
## How eve orders session history
|
|
43
43
|
|
|
44
44
|
Conversation history within a session is append-only. Turns land in order, and the tool calls inside a turn (plus their results) keep their order too. Read a session back and you see events in the order they happened.
|
|
45
45
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
title: "Security Model"
|
|
3
|
-
description: "
|
|
3
|
+
description: "eve's trust boundaries, where secrets live, how credentials reach hosts, and what fails closed by default."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Your
|
|
6
|
+
Your eve agent runs across two contexts, with a trust boundary between them and every secret kept on the trusted side. Use this mental model when deciding what an agent (and the model driving it) is allowed to reach.
|
|
7
7
|
|
|
8
8
|
## Trust boundaries
|
|
9
9
|
|
|
@@ -25,7 +25,7 @@ A concrete trace makes the boundary clear. When the model calls a custom `charge
|
|
|
25
25
|
```mermaid
|
|
26
26
|
flowchart LR
|
|
27
27
|
User["User or channel provider"] --> Channel["Channel route and route auth"]
|
|
28
|
-
Channel --> Runtime["
|
|
28
|
+
Channel --> Runtime["eve app runtime and durable session"]
|
|
29
29
|
Runtime --> Model["Configured model provider or Vercel AI Gateway"]
|
|
30
30
|
Runtime --> Tools["Authored tools and connections"]
|
|
31
31
|
Tools --> Services["Customer-selected external services"]
|
|
@@ -34,23 +34,23 @@ flowchart LR
|
|
|
34
34
|
Runtime --> Telemetry["Configured telemetry or eval provider"]
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
eve sends data where your agent configuration and runtime choices send it:
|
|
38
38
|
|
|
39
|
-
- Inbound channel data flows through the channel provider you configure, then into the
|
|
39
|
+
- Inbound channel data flows through the channel provider you configure, then into the eve app runtime.
|
|
40
40
|
- Model inputs and outputs flow to the model or routing path selected in `agent.ts`, such as a Vercel AI Gateway model id or a provider-authored `LanguageModel`.
|
|
41
41
|
- Tool and connection calls flow to the external services, MCP servers, OpenAPI endpoints, and channels you configure.
|
|
42
42
|
- Sandbox commands can reach network destinations allowed by the sandbox network policy.
|
|
43
43
|
- Telemetry and eval data flows to the exporters and providers you configure in `instrumentation.ts` or eval settings.
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
eve stores durable session and workflow state needed to resume conversations, stream events, replay completed steps, and show run observability. You are responsible for deciding whether the selected channels, model providers, connected services, sandbox egress destinations, telemetry exporters, retention settings, and deletion controls are appropriate for your data and use case.
|
|
46
46
|
|
|
47
47
|
## Credential brokering
|
|
48
48
|
|
|
49
|
-
Credential brokering gives the model _authenticated_ network access from inside the sandbox, like a `git clone` of a private repo or an authenticated `curl`, when there's no [tool](../tools) or [connection](../connections) to route it through. On the Vercel Sandbox backend, auth headers get injected at the sandbox's network firewall for matching domains. The secret stays in the app runtime; the sandbox process only ever sees the response. See [Vercel Sandbox Credential Brokering](https://vercel.com/docs/sandbox/concepts/firewall#credentials-brokering) for the platform mechanism, and [Sandbox](../sandbox) for the
|
|
49
|
+
Credential brokering gives the model _authenticated_ network access from inside the sandbox, like a `git clone` of a private repo or an authenticated `curl`, when there's no [tool](../tools) or [connection](../connections) to route it through. On the Vercel Sandbox backend, auth headers get injected at the sandbox's network firewall for matching domains. The secret stays in the app runtime; the sandbox process only ever sees the response. See [Vercel Sandbox Credential Brokering](https://vercel.com/docs/sandbox/concepts/firewall#credentials-brokering) for the platform mechanism, and [Sandbox](../sandbox) for the eve policy API.
|
|
50
50
|
|
|
51
51
|
## Connection credentials
|
|
52
52
|
|
|
53
|
-
[Connection](../connections) tokens (MCP and OpenAPI) come from either `getToken()` or an interactive OAuth flow, and
|
|
53
|
+
[Connection](../connections) tokens (MCP and OpenAPI) come from either `getToken()` or an interactive OAuth flow, and eve injects the resolved token into every outbound request. The token is cached per step and never serialized to durable state.
|
|
54
54
|
|
|
55
55
|
## Channel verification
|
|
56
56
|
|
|
@@ -70,7 +70,7 @@ A custom channel that accepts dashboard-style webhooks should follow the same sh
|
|
|
70
70
|
|
|
71
71
|
## Authored markdown is data
|
|
72
72
|
|
|
73
|
-
[Skill](../skills) and [schedule](../schedules) files are markdown with YAML frontmatter, and
|
|
73
|
+
[Skill](../skills) and [schedule](../schedules) files are markdown with YAML frontmatter, and eve treats that frontmatter strictly as data. The code-capable engines (`---js` / `---javascript`, which would `eval()` the frontmatter body the moment the file is parsed) are disabled, so such a fence throws rather than running. Frontmatter has to parse to a plain YAML object.
|
|
74
74
|
|
|
75
75
|
## Auth fails closed
|
|
76
76
|
|
|
@@ -3,7 +3,7 @@ title: "Sessions, Runs & Streaming"
|
|
|
3
3
|
description: "The session and run contract you touch: continuation tokens, stream handles, the NDJSON event stream, and reconnecting."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Every
|
|
6
|
+
Every eve app speaks the same stable HTTP API to a [durable session](./execution-model-and-durability). This page is the contract you hold: the handles you get back, the events you stream, and how to reconnect.
|
|
7
7
|
|
|
8
8
|
## The two handles
|
|
9
9
|
|
|
@@ -14,7 +14,7 @@ Two handles do two jobs, and mixing them up is the most common mistake. One hand
|
|
|
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()`](../guides/frontend/overview) instead of calling these routes by hand. Next.js and Nuxt apps can proxy them to the
|
|
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
|
|
|
@@ -24,7 +24,7 @@ curl -X POST http://127.0.0.1:3000/eve/v1/session \
|
|
|
24
24
|
-d '{"message":"Summarize the latest forecast."}'
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
eve responds right away. The JSON body carries a `sessionId` and a `continuationToken`, and the `x-eve-session-id` header names the durable session to stream.
|
|
28
28
|
|
|
29
29
|
## Stream a session
|
|
30
30
|
|
|
@@ -34,33 +34,33 @@ curl http://127.0.0.1:3000/eve/v1/session/<sessionId>/stream
|
|
|
34
34
|
|
|
35
35
|
The stream is newline-delimited JSON (NDJSON), one event per line:
|
|
36
36
|
|
|
37
|
-
| Event | Meaning
|
|
38
|
-
| ------------------------- |
|
|
39
|
-
| `session.started` | A durable session was created.
|
|
40
|
-
| `turn.started` | A new turn began.
|
|
41
|
-
| `message.received` | An inbound user message was accepted.
|
|
42
|
-
| `step.started` | A model step began.
|
|
43
|
-
| `actions.requested` | The model requested tool calls.
|
|
44
|
-
| `action.result` | A tool call returned.
|
|
45
|
-
| `input.requested` | The run paused for human input (HITL approval or `ask_question`); carries `requests`.
|
|
46
|
-
| `subagent.called` | A subagent was delegated; carries `childSessionId` to attach to.
|
|
47
|
-
| `subagent.completed` | A delegated subagent finished.
|
|
48
|
-
| `reasoning.appended` | A reasoning delta (incremental, with cumulative text so far).
|
|
49
|
-
| `reasoning.completed` | The finalized reasoning block.
|
|
50
|
-
| `message.appended` | An assistant text delta (incremental, with cumulative text so far).
|
|
51
|
-
| `message.completed` | A finalized assistant text block.
|
|
52
|
-
| `result.completed` | The finalized structured result for a turn that requested an output schema; carries `result`.
|
|
53
|
-
| `compaction.requested` | Context-window compaction began; carries `modelId`, `sessionId`, `turnId`, `usageInputTokens`.
|
|
54
|
-
| `compaction.completed` | A compaction checkpoint was written to durable history.
|
|
55
|
-
| `authorization.required` | A connection needs OAuth; carries `name`, `description`, and an `authorization` challenge.
|
|
56
|
-
| `authorization.completed` | A connection's authorization resolved; carries `outcome`.
|
|
57
|
-
| `step.completed` | A model step finished; carries `finishReason` and usage.
|
|
58
|
-
| `step.failed` | A model step failed; carries `{ code, message, details? }`.
|
|
59
|
-
| `turn.completed` | The turn finished.
|
|
60
|
-
| `turn.failed` | The turn failed; carries `{ code, message, details? }`.
|
|
61
|
-
| `session.waiting` | The session parked, waiting for the next input (a message, an answer).
|
|
62
|
-
| `session.failed` | The session failed.
|
|
63
|
-
| `session.completed` | The session reached a terminal end.
|
|
37
|
+
| Event | Meaning |
|
|
38
|
+
| ------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
|
39
|
+
| `session.started` | A durable session was created. |
|
|
40
|
+
| `turn.started` | A new turn began. |
|
|
41
|
+
| `message.received` | An inbound user message was accepted. |
|
|
42
|
+
| `step.started` | A model step began. |
|
|
43
|
+
| `actions.requested` | The model requested tool calls. |
|
|
44
|
+
| `action.result` | A tool call returned. |
|
|
45
|
+
| `input.requested` | The run paused for human input ([HITL](../tools/human-in-the-loop) approval or `ask_question`); carries `requests`. |
|
|
46
|
+
| `subagent.called` | A subagent was delegated; carries `childSessionId` to attach to. |
|
|
47
|
+
| `subagent.completed` | A delegated subagent finished. |
|
|
48
|
+
| `reasoning.appended` | A reasoning delta (incremental, with cumulative text so far). |
|
|
49
|
+
| `reasoning.completed` | The finalized reasoning block. |
|
|
50
|
+
| `message.appended` | An assistant text delta (incremental, with cumulative text so far). |
|
|
51
|
+
| `message.completed` | A finalized assistant text block. |
|
|
52
|
+
| `result.completed` | The finalized structured result for a turn that requested an output schema; carries `result`. |
|
|
53
|
+
| `compaction.requested` | Context-window compaction began; carries `modelId`, `sessionId`, `turnId`, `usageInputTokens`. |
|
|
54
|
+
| `compaction.completed` | A compaction checkpoint was written to durable history. |
|
|
55
|
+
| `authorization.required` | A connection needs OAuth; carries `name`, `description`, and an `authorization` challenge. |
|
|
56
|
+
| `authorization.completed` | A connection's authorization resolved; carries `outcome`. |
|
|
57
|
+
| `step.completed` | A model step finished; carries `finishReason` and usage. |
|
|
58
|
+
| `step.failed` | A model step failed; carries `{ code, message, details? }`. |
|
|
59
|
+
| `turn.completed` | The turn finished. |
|
|
60
|
+
| `turn.failed` | The turn failed; carries `{ code, message, details? }`. |
|
|
61
|
+
| `session.waiting` | The session parked, waiting for the next input (a message, an answer). |
|
|
62
|
+
| `session.failed` | The session failed. |
|
|
63
|
+
| `session.completed` | The session reached a terminal end. |
|
|
64
64
|
|
|
65
65
|
`reasoning.appended` and `message.appended` stream deltas as they arrive, and each one carries both the new delta and the cumulative text for the current block. The finalized block shows up on `message.completed` and `reasoning.completed`, which is the compatibility path for clients that don't render incremental streaming.
|
|
66
66
|
|