eve 0.30.2 → 0.30.4
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 +20 -0
- package/README.md +2 -2
- package/dist/src/cli/dev/tui/terminal-renderer.js +1 -1
- package/dist/src/compiler/manifest.d.ts +3 -1
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/normalize-manifest.js +2 -2
- package/dist/src/compiler/normalize-subagent.js +1 -1
- package/dist/src/discover/discover-agent.d.ts +24 -1
- package/dist/src/discover/discover-agent.js +1 -1
- package/dist/src/discover/discover-subagent.js +1 -1
- package/dist/src/discover/filesystem.d.ts +1 -1
- package/dist/src/discover/filesystem.js +1 -1
- package/dist/src/execution/sandbox/bindings/just-bash-runtime.d.ts +2 -0
- package/dist/src/execution/sandbox/bindings/just-bash-runtime.js +1 -1
- package/dist/src/execution/sandbox/bindings/just-bash.js +1 -1
- package/dist/src/execution/sandbox/glob-tool.js +2 -2
- package/dist/src/execution/sandbox/grep-tool.js +1 -1
- package/dist/src/execution/sandbox/ripgrep-probe.d.ts +1 -1
- package/dist/src/execution/sandbox/ripgrep-probe.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/authored-module-loader.js +1 -1
- package/dist/src/internal/authored-module-map-loader.js +1 -1
- package/dist/src/internal/nitro/dev-runtime-source-snapshot-copy.js +1 -1
- package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
- package/dist/src/internal/nitro/host/dev-host-fingerprint.js +1 -1
- package/dist/src/internal/nitro/host/dev-workspace-extensions.js +1 -1
- package/dist/src/packages/eve-catalog/src/index.js +1 -1
- package/dist/src/public/definitions/agent.d.ts +10 -7
- package/dist/src/public/definitions/agent.js +1 -1
- package/dist/src/public/sandbox/just-bash-sandbox.d.ts +21 -0
- package/dist/src/public/sandbox/just-bash.d.ts +1 -1
- package/dist/src/runtime/resolve-dynamic-subagent.js +1 -1
- package/dist/src/setup/integrations/linear/connect.d.ts +42 -0
- package/dist/src/setup/integrations/linear/connect.js +1 -0
- package/dist/src/setup/integrations/linear/setup.d.ts +19 -0
- package/dist/src/setup/integrations/linear/setup.js +7 -0
- package/dist/src/setup/integrations/registry.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/docs/README.md +5 -5
- package/docs/channels/linear.mdx +6 -11
- package/docs/channels/overview.mdx +6 -4
- package/docs/connections/overview.mdx +1 -1
- package/docs/extensions.md +2 -2
- package/docs/guides/hooks.md +1 -1
- package/docs/guides/instrumentation.md +2 -2
- package/docs/guides/state.md +1 -1
- package/docs/patterns/multi-tenant-memory.md +1 -1
- package/docs/reference/meta.json +1 -1
- package/docs/subagents.mdx +29 -0
- package/docs/tools/human-in-the-loop.md +1 -1
- package/package.json +1 -1
package/docs/channels/linear.mdx
CHANGED
|
@@ -6,24 +6,19 @@ type: integration
|
|
|
6
6
|
|
|
7
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`. Credentials can run through [Vercel Connect](../guides/auth-and-route-protection), which manages the Linear app, its access token, and inbound webhook verification, so there's no API key or webhook secret for you to hold. See [Channels](./overview) for the contract this builds on.
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Guided Connect setup
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Run the registry setup from the agent directory:
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
|
|
15
|
-
vercel connect create linear --triggers
|
|
16
|
-
vercel connect detach <uid> --yes
|
|
17
|
-
vercel connect attach <uid> --triggers --trigger-path /eve/v1/linear --yes
|
|
14
|
+
eve add channel/linear-agent
|
|
18
15
|
```
|
|
19
16
|
|
|
20
|
-
The
|
|
17
|
+
The flow checks that the Vercel CLI is authenticated, creates or links a Vercel project when needed, provisions an app-scoped Linear Connect client, and replaces its default trigger with `/eve/v1/linear`. It then installs `@vercel/connect` and writes `agent/channels/linear.ts` with the connector UID.
|
|
21
18
|
|
|
22
|
-
|
|
19
|
+
Vercel Connect creates the Linear app with the `app:assignable` and `app:mentionable` scopes required for Agent Sessions, receives and verifies `AgentSessionEvent` webhooks, and forwards them to the deployed agent. After deploying, open the Linear app in the Connect dashboard and install it in the workspace where you want to delegate work. Then delegate an issue or mention the agent in a Linear Agent Session.
|
|
23
20
|
|
|
24
|
-
|
|
25
|
-
npm install @vercel/connect
|
|
26
|
-
```
|
|
21
|
+
The generated channel uses Connect-managed credentials:
|
|
27
22
|
|
|
28
23
|
```ts title="agent/channels/linear.ts"
|
|
29
24
|
import { connectLinearCredentials } from "@vercel/connect/eve";
|
|
@@ -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
|
-
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
|
|
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 and choose the Channels filter.
|
|
13
13
|
|
|
14
14
|
After a channel normalizes input, eve runs the same agent runtime regardless of where the message came from. Tools and instructions do not need channel-specific logic.
|
|
15
15
|
|
|
@@ -49,15 +49,17 @@ eve does **not** use the Chat SDK's runtime. The `Chat`, `Adapter`, and `Thread`
|
|
|
49
49
|
| You want… | Use |
|
|
50
50
|
| ------------------------------------------- | ---------------------------------------------------------- |
|
|
51
51
|
| A web app / browser chat UI | eve channel + [`useEveAgent`](../guides/frontend/overview) |
|
|
52
|
-
| Local tooling, SDK clients, `curl` | eve channel (default)
|
|
52
|
+
| Local tooling, SDK clients, `curl` | [eve HTTP channel](./eve) (default) |
|
|
53
53
|
| Slack mentions, DMs, buttons | [Slack](./slack) |
|
|
54
|
+
| iMessage | [Photon](./photon) |
|
|
54
55
|
| Discord slash commands, components | [Discord](./discord) |
|
|
55
56
|
| Microsoft Teams messages + Adaptive Cards | [Teams](./teams) |
|
|
56
57
|
| Telegram bot messages | [Telegram](./telegram) |
|
|
57
58
|
| SMS or speech-transcribed phone calls | [Twilio](./twilio) |
|
|
58
59
|
| GitHub @mentions, PR review with checkout | [GitHub](./github) |
|
|
59
60
|
| Linear issue delegation and Agent Sessions | [Linear](./linear) |
|
|
60
|
-
|
|
|
61
|
+
| Another Chat SDK-supported service | [Chat SDK adapters](./chat-sdk) |
|
|
62
|
+
| Anything else (internal webhook, WebSocket) | [Custom channel](./custom) (`defineChannel`, above) |
|
|
61
63
|
|
|
62
64
|
## Disclaimer
|
|
63
65
|
|
|
@@ -70,4 +72,4 @@ Where an eve agent communicates with people, you may be required to disclose tha
|
|
|
70
72
|
- [Slack](./slack): the most common platform channel, end to end
|
|
71
73
|
- [Custom channels](./custom): build a channel for any surface with `defineChannel`
|
|
72
74
|
- [Frontend](../guides/frontend/overview): browser chat on the eve channel with `useEveAgent`
|
|
73
|
-
- [Integrations](/integrations
|
|
75
|
+
- [Integrations](/integrations): browse every built-in channel in one gallery using the Channels filter
|
|
@@ -274,6 +274,6 @@ A tool can require both sign-in (`auth`) and a human approval. The model's appro
|
|
|
274
274
|
|
|
275
275
|
- [MCP connections](/docs/connections/mcp): connect to remote MCP servers.
|
|
276
276
|
- [OpenAPI connections](/docs/connections/openapi): generate tools from OpenAPI operations.
|
|
277
|
-
- [Integrations](/integrations
|
|
277
|
+
- [Integrations](/integrations): browse every connection eve ships using the Connections filter.
|
|
278
278
|
- [Tools](/docs/tools): authored tools live alongside connection-provided tools; the same approval helpers apply.
|
|
279
279
|
- [Security model](/docs/concepts/security-model): how connection credentials stay out of the model's reach.
|
package/docs/extensions.md
CHANGED
|
@@ -298,7 +298,7 @@ The `crm__` prefix is reserved for this directory mount. A consumer cannot overr
|
|
|
298
298
|
|
|
299
299
|
### Use an extension tool result in a hook
|
|
300
300
|
|
|
301
|
-
To retain an extension tool's result type in a consumer hook, import its definition from `./tools` and pass it to [`toolResultFrom`](/guides/hooks#narrowing-tool-results):
|
|
301
|
+
To retain an extension tool's result type in a consumer hook, import its definition from `./tools` and pass it to [`toolResultFrom`](/docs/guides/hooks#narrowing-tool-results):
|
|
302
302
|
|
|
303
303
|
```ts title="agent/hooks/narrow-crm.ts"
|
|
304
304
|
import { defineHook } from "eve/hooks";
|
|
@@ -323,7 +323,7 @@ At build time, eve checks the extension's generated capability metadata. If the
|
|
|
323
323
|
|
|
324
324
|
## What to read next
|
|
325
325
|
|
|
326
|
-
- [
|
|
326
|
+
- [Integrations](/integrations): browse ready-to-install extensions using the Extensions filter
|
|
327
327
|
- [Tools](/docs/tools): static tools, approval, and tool output
|
|
328
328
|
- [Dynamic capabilities](/docs/guides/dynamic-capabilities): dynamic tools, skills, and instructions
|
|
329
329
|
- [Instructions](/docs/instructions): static and TypeScript instructions
|
package/docs/guides/hooks.md
CHANGED
|
@@ -3,7 +3,7 @@ title: "Hooks"
|
|
|
3
3
|
description: "Subscribe to runtime stream events from agent/hooks/."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
Hooks are eve's authored extension points for the runtime event stream. A hook subscribes to stream events and runs side effects after each event is durably recorded, such as audit logging, metrics and alerting, or persisting every session and message to your own database for analytics. Reach for one to observe what the agent does without writing a tool, a context provider (a value made available across a step), or a channel adapter handler (a handler defined on a channel's adapter; see [Channels](../channels)).
|
|
6
|
+
Hooks are eve's authored extension points for the runtime event stream. A hook subscribes to stream events and runs side effects after each event is durably recorded, such as audit logging, metrics and alerting, or persisting every session and message to your own database for analytics. Reach for one to observe what the agent does without writing a tool, a context provider (a value made available across a step), or a channel adapter handler (a handler defined on a channel's adapter; see [Channels](../channels/overview)).
|
|
7
7
|
|
|
8
8
|
## Define a hook
|
|
9
9
|
|
|
@@ -85,7 +85,7 @@ Export the result of `defineInstrumentation` as the default export.
|
|
|
85
85
|
|
|
86
86
|
Use the `setup` callback to register your OTel provider (for example `registerOTel` from `@vercel/otel`). The framework invokes it at server startup with the resolved agent name. `context.agentName` is resolved at compile time from your project (the package's `name`, falling back to the app directory name), so you never hard-code a service name.
|
|
87
87
|
|
|
88
|
-
Any OTel-compatible backend works (Braintrust, Raindrop, Arize, Honeycomb, Datadog, Jaeger). Install the exporter package you need and configure it in the callback.
|
|
88
|
+
Any OTel-compatible backend works (Braintrust, PostHog, Raindrop, Arize, Honeycomb, Datadog, Jaeger). Install the exporter package you need and configure it in the callback. The [PostHog AI Observability integration](/integrations/posthog-instrumentation) provides a ready-to-install exporter and optional user identification.
|
|
89
89
|
|
|
90
90
|
Three more fields control what the AI SDK records inside those spans (see the AI SDK's [telemetry reference](https://ai-sdk.dev/docs/ai-sdk-core/telemetry)):
|
|
91
91
|
|
|
@@ -190,7 +190,7 @@ Per-turn usage tags are written on each step of a turn, accumulating cumulative
|
|
|
190
190
|
|
|
191
191
|
Tag writes are best-effort: a failure is logged once per process and then swallowed, so a broken tag emit never breaks the agent.
|
|
192
192
|
|
|
193
|
-
These tags power the **Agent Runs** tab in the Vercel dashboard. When you deploy on Vercel, the platform auto-detects `eve` as the framework and surfaces an Agent Runs view under your project's **Observability** tab, where you can browse sessions and drill into each conversation's trace, with no `instrumentation.ts` required. The tab is currently gated per team. See [Deploy to Vercel](./deployment/vercel#inspect-agent-runs) for enablement. Agent Runs is separate from the OpenTelemetry export above. Use OTel when you want spans in Braintrust, Datadog, or another third-party backend.
|
|
193
|
+
These tags power the **Agent Runs** tab in the Vercel dashboard. When you deploy on Vercel, the platform auto-detects `eve` as the framework and surfaces an Agent Runs view under your project's **Observability** tab, where you can browse sessions and drill into each conversation's trace, with no `instrumentation.ts` required. The tab is currently gated per team. See [Deploy to Vercel](./deployment/vercel#inspect-agent-runs) for enablement. Agent Runs is separate from the OpenTelemetry export above. Use OTel when you want spans in Braintrust, PostHog, Datadog, or another third-party backend.
|
|
194
194
|
|
|
195
195
|
Note: By default, telemetry records full message history and model outputs You may need to disclose these data flows in your privacy materials if utilized.
|
|
196
196
|
|
package/docs/guides/state.md
CHANGED
|
@@ -69,7 +69,7 @@ Every [subagent](../subagents) starts with its own fresh state, whether it's a b
|
|
|
69
69
|
|
|
70
70
|
## State vs. connection-side storage
|
|
71
71
|
|
|
72
|
-
`defineState` holds conversation-scoped working memory that lives and dies with the session, including counters, the current plan, and what the user has told you this conversation. It is the agent's short-term memory, persisted durably for the life of the session. Anything that has to outlive the session, be shared across sessions or users, or be queried independently of a turn belongs in an external store. Start with a packaged
|
|
72
|
+
`defineState` holds conversation-scoped working memory that lives and dies with the session, including counters, the current plan, and what the user has told you this conversation. It is the agent's short-term memory, persisted durably for the life of the session. Anything that has to outlive the session, be shared across sessions or users, or be queried independently of a turn belongs in an external store. Start with a packaged memory provider from the [integration gallery](/integrations) using the Memory filter, a general [connection](../connections), or your own database.
|
|
73
73
|
|
|
74
74
|
## What to read next
|
|
75
75
|
|
|
@@ -3,7 +3,7 @@ title: "Multi-tenant memory"
|
|
|
3
3
|
description: "Compose dynamic instructions, authenticated session context, and ordinary tools into tenant-scoped long-term memory."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
You can add long-term memory
|
|
6
|
+
You can add long-term memory from the [integration gallery](/integrations) using the Memory filter, or build tenant-aware memory from your own application store by composing three existing eve primitives:
|
|
7
7
|
|
|
8
8
|
1. route auth puts the tenant and user on `ctx.session.auth`;
|
|
9
9
|
2. dynamic instructions load that caller's memories before each turn;
|
package/docs/reference/meta.json
CHANGED
package/docs/subagents.mdx
CHANGED
|
@@ -74,6 +74,25 @@ supported for subagents. A nil result (`null` or `undefined`) removes the
|
|
|
74
74
|
subagent's description and tool definition from the model-visible surface.
|
|
75
75
|
The subagent's filesystem manifest is always compiled; a non-nil result injects
|
|
76
76
|
the returned agent configuration when the child runs.
|
|
77
|
+
|
|
78
|
+
Packaging controls must be available before the resolver runs. Put them on
|
|
79
|
+
`defineDynamic`, rather than the `defineAgent` returned by an event handler:
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
export default defineDynamic({
|
|
83
|
+
build: { externalDependencies: ["native-package"] },
|
|
84
|
+
events: {
|
|
85
|
+
"session.started": () =>
|
|
86
|
+
defineAgent({
|
|
87
|
+
description: "Use a native package when handling delegated work.",
|
|
88
|
+
model: "anthropic/claude-opus-4.8",
|
|
89
|
+
}),
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The compiler applies `build.externalDependencies` while bundling every authored
|
|
95
|
+
module in that dynamic subagent.
|
|
77
96
|
See [Dynamic capabilities](./guides/dynamic-capabilities#dynamic-subagents) for
|
|
78
97
|
scope precedence, failure behavior, and the dispatch-time guard.
|
|
79
98
|
|
|
@@ -84,11 +103,20 @@ agent/subagents/researcher/
|
|
|
84
103
|
├── agent.ts # required
|
|
85
104
|
├── instructions.md # or instructions.ts, optional
|
|
86
105
|
├── tools/ # optional, its own tools
|
|
106
|
+
├── extensions/ # optional, mounted only into this subagent
|
|
87
107
|
├── skills/ # optional, its own skills
|
|
88
108
|
├── sandbox/ # optional, its own sandbox + workspace seed
|
|
89
109
|
└── subagents/ # optional, nested subagents
|
|
90
110
|
```
|
|
91
111
|
|
|
112
|
+
Extensions mounted under `subagents/<id>/extensions/` contribute only to that subagent. They use the same file and directory mount forms, namespacing, configuration, and overrides as root-agent extensions:
|
|
113
|
+
|
|
114
|
+
```ts title="agent/subagents/researcher/extensions/search.ts"
|
|
115
|
+
export { default } from "@acme/research-search";
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
The root agent does not receive the extension's tools, skills, instructions, connections, or hooks.
|
|
119
|
+
|
|
92
120
|
`schedules/` is not supported inside a declared subagent. Schedules are root-only.
|
|
93
121
|
|
|
94
122
|
## The isolation boundary
|
|
@@ -103,6 +131,7 @@ A declared subagent inherits nothing from the root's authored slots. Discovery t
|
|
|
103
131
|
| Skills | Inherited | Own `skills/` |
|
|
104
132
|
| Sandbox | Shared with parent | Own `sandbox/`, else framework default |
|
|
105
133
|
| Hooks | Inherited | Own `hooks/` |
|
|
134
|
+
| Extensions | Inherited contributions | Own `extensions/` |
|
|
106
135
|
| State | Fresh | Fresh |
|
|
107
136
|
| Channels | Root-only | Root-only |
|
|
108
137
|
| Schedules | Root-only | Root-only |
|
|
@@ -115,7 +115,7 @@ See [Sessions, runs & streaming](/docs/concepts/sessions-runs-and-streaming) for
|
|
|
115
115
|
|
|
116
116
|
## Answering from a client or channel
|
|
117
117
|
|
|
118
|
-
Channels turn requests into native UI: the Slack adapter renders approvals as buttons and questions as select menus, and writes the user's choice back as the answer. You get this for free on every [channel](/docs/channels).
|
|
118
|
+
Channels turn requests into native UI: the Slack adapter renders approvals as buttons and questions as select menus, and writes the user's choice back as the answer. You get this for free on every [channel](/docs/channels/overview).
|
|
119
119
|
|
|
120
120
|
From your own frontend, read the pending request off the latest message and answer through the same session — see [Building a frontend](/docs/guides/frontend/overview#human-in-the-loop-prompts) for the client-side reducer and `inputResponses` shape.
|
|
121
121
|
|