eve 0.31.3 → 0.32.0
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 +23 -0
- package/dist/src/chunks/{use-eve-agent-CF5D6jSV.js → use-eve-agent-CX87G1vU.js} +30 -5
- package/dist/src/chunks/{use-eve-agent-DbYZLG0h.js → use-eve-agent-DwyRde1N.js} +30 -5
- package/dist/src/cli/commands/integration-connect.d.ts +1 -0
- package/dist/src/cli/commands/integration-connect.js +1 -1
- package/dist/src/cli/commands/integration-setup.d.ts +4 -0
- package/dist/src/cli/commands/integration-setup.js +1 -1
- package/dist/src/cli/commands/register-integration-commands.js +1 -1
- package/dist/src/cli/commands/register-registry-commands.js +1 -1
- package/dist/src/cli/commands/registry-declared-setups.d.ts +23 -0
- package/dist/src/cli/commands/registry-declared-setups.js +1 -0
- package/dist/src/cli/commands/registry-metadata.d.ts +69 -0
- package/dist/src/cli/commands/registry-metadata.js +1 -1
- package/dist/src/cli/commands/registry-package.d.ts +3 -3
- package/dist/src/cli/commands/registry-package.js +1 -1
- package/dist/src/cli/commands/registry-presentation.d.ts +20 -0
- package/dist/src/cli/commands/registry-presentation.js +7 -0
- package/dist/src/cli/commands/registry-search-presentation.d.ts +16 -0
- package/dist/src/cli/commands/registry-search-presentation.js +6 -0
- package/dist/src/cli/commands/registry-setup-command.d.ts +5 -2
- package/dist/src/cli/commands/registry-setup-command.js +1 -2
- package/dist/src/cli/commands/registry.d.ts +16 -7
- package/dist/src/cli/commands/registry.js +1 -6
- package/dist/src/cli/commands/setup-answers.d.ts +2 -0
- package/dist/src/cli/commands/setup-answers.js +1 -0
- package/dist/src/cli/commands/setup-headless.d.ts +79 -0
- package/dist/src/cli/commands/setup-headless.js +1 -0
- package/dist/src/cli/dev/tui/runner.js +1 -1
- package/dist/src/cli/dev/tui/setup-commands.js +3 -3
- package/dist/src/cli/dev/tui/setup-flow.d.ts +8 -1
- package/dist/src/cli/dev/tui/terminal-renderer.js +12 -12
- package/dist/src/cli/dev/tui/traces/trace-conversation.d.ts +1 -1
- package/dist/src/cli/dev/tui/tui-prompter.js +1 -1
- package/dist/src/client/url.d.ts +5 -0
- package/dist/src/client/url.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +8 -8
- package/dist/src/compiled/@ai-sdk/anthropic/index.d.ts +33 -13
- package/dist/src/compiled/@ai-sdk/anthropic/index.js +4 -2
- package/dist/src/compiled/@ai-sdk/google/index.d.ts +50 -3
- package/dist/src/compiled/@ai-sdk/google/index.js +7 -7
- package/dist/src/compiled/@ai-sdk/mcp/index.d.ts +33 -3
- package/dist/src/compiled/@ai-sdk/mcp/index.js +1 -1
- package/dist/src/compiled/@ai-sdk/openai/index.d.ts +140 -9
- package/dist/src/compiled/@ai-sdk/openai/index.js +9 -6
- package/dist/src/compiled/@ai-sdk/otel/index.js +1 -1
- package/dist/src/compiled/@ai-sdk/provider/index.d.ts +300 -6
- package/dist/src/compiled/@ai-sdk/provider-utils/index.d.ts +70 -20
- package/dist/src/compiled/@opentelemetry/api/index.d.ts +2 -1
- package/dist/src/compiled/@photon-ai/chat-adapter-imessage/index.js +1 -1
- package/dist/src/compiled/@vercel/otel/index.d.ts +6 -0
- package/dist/src/compiled/@vercel/sandbox/index.js +1 -1
- package/dist/src/compiled/_chunks/node/undici-CUIybhQ2.js +95 -0
- package/dist/src/compiled/_chunks/workflow/dist-eUxFublw.js +77 -0
- package/dist/src/compiled/shadcn-registry/index.js +309 -215
- package/dist/src/compiler/extension-compatibility.d.ts +10 -10
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/context/build-callback-context.js +1 -1
- package/dist/src/execution/authorization-callback-match.d.ts +14 -0
- package/dist/src/execution/authorization-callback-match.js +1 -0
- package/dist/src/execution/next-driver-action.d.ts +1 -0
- package/dist/src/execution/parked-delivery-wait.d.ts +16 -1
- package/dist/src/execution/parked-delivery-wait.js +1 -1
- package/dist/src/execution/sandbox/abort-bound-session.d.ts +1 -1
- package/dist/src/execution/sandbox/bindings/docker.js +1 -1
- package/dist/src/execution/sandbox/bindings/just-bash-runtime.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-lifecycle.js +1 -1
- package/dist/src/execution/sandbox/bindings/microsandbox-runtime.d.ts +1 -0
- 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/ensure.js +1 -1
- package/dist/src/execution/session-command-inbox.d.ts +26 -1
- package/dist/src/execution/session-command-inbox.js +1 -1
- package/dist/src/execution/turn-execution-cursor.d.ts +1 -0
- package/dist/src/execution/turn-workflow.js +1 -1
- package/dist/src/execution/workflow-entry.js +1 -1
- package/dist/src/execution/workflow-steps.d.ts +3 -4
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/harness/authorization.d.ts +24 -11
- package/dist/src/harness/authorization.js +1 -1
- package/dist/src/harness/input-extraction.js +1 -1
- package/dist/src/harness/input-requests.js +1 -1
- package/dist/src/harness/provider-tools.d.ts +1 -1
- package/dist/src/harness/provider-tools.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/packages/eve-catalog/src/index.js +1 -1
- package/dist/src/protocol/routes.d.ts +8 -6
- package/dist/src/protocol/routes.js +1 -1
- package/dist/src/public/channels/slack/attachments.js +1 -1
- package/dist/src/public/channels/slack/defaults.js +1 -1
- package/dist/src/public/channels/slack/hitl.d.ts +14 -1
- package/dist/src/public/channels/slack/hitl.js +2 -2
- package/dist/src/public/definitions/callback-context.d.ts +2 -2
- package/dist/src/public/definitions/sandbox.d.ts +1 -1
- package/dist/src/public/definitions/tool.d.ts +9 -9
- package/dist/src/public/sandbox/index.d.ts +1 -1
- package/dist/src/public/tools/web-search.d.ts +2 -2
- package/dist/src/runtime/connections/callback-route.d.ts +4 -5
- package/dist/src/runtime/connections/callback-route.js +1 -1
- package/dist/src/runtime/connections/scoped-authorization.js +1 -1
- package/dist/src/runtime/framework-tools/connection-search-dynamic.js +2 -2
- package/dist/src/runtime/framework-tools/todo.js +1 -1
- package/dist/src/runtime/input/types.d.ts +1 -4
- package/dist/src/sandbox/state.d.ts +1 -0
- package/dist/src/setup/ask-editable.d.ts +22 -0
- package/dist/src/setup/ask-editable.js +1 -0
- package/dist/src/setup/ask-signals.d.ts +23 -0
- package/dist/src/setup/ask-signals.js +1 -0
- package/dist/src/setup/ask.d.ts +24 -25
- package/dist/src/setup/ask.js +1 -1
- package/dist/src/setup/boxes/deploy-project.js +1 -1
- package/dist/src/setup/boxes/resolve-provisioning.js +1 -1
- package/dist/src/setup/connection-connector.js +3 -2
- package/dist/src/setup/flows/registry-session.d.ts +33 -0
- package/dist/src/setup/flows/registry-session.js +1 -0
- package/dist/src/setup/flows/registry.d.ts +16 -0
- package/dist/src/setup/flows/registry.js +1 -1
- package/dist/src/setup/index.js +1 -1
- package/dist/src/setup/integrations/discord/setup.d.ts +19 -7
- package/dist/src/setup/integrations/discord/setup.js +4 -3
- package/dist/src/setup/integrations/github/setup.d.ts +36 -7
- package/dist/src/setup/integrations/github/setup.js +2 -2
- package/dist/src/setup/integrations/linear/setup.d.ts +21 -9
- package/dist/src/setup/integrations/linear/setup.js +2 -2
- package/dist/src/setup/integrations/photon/management.d.ts +8 -1
- package/dist/src/setup/integrations/photon/management.js +1 -1
- package/dist/src/setup/integrations/photon/setup-flow.d.ts +28 -24
- package/dist/src/setup/integrations/photon/setup-flow.js +3 -3
- package/dist/src/setup/integrations/photon/setup.d.ts +1 -3
- package/dist/src/setup/integrations/photon/setup.js +1 -1
- package/dist/src/setup/integrations/registry.d.ts +1 -1
- package/dist/src/setup/integrations/registry.js +1 -1
- package/dist/src/setup/integrations/runner.d.ts +14 -11
- package/dist/src/setup/integrations/runner.js +1 -1
- package/dist/src/setup/integrations/shared/prerequisite.d.ts +17 -0
- package/dist/src/setup/integrations/shared/prerequisite.js +1 -0
- package/dist/src/setup/integrations/shared/ui.d.ts +22 -15
- package/dist/src/setup/integrations/shared/ui.js +2 -2
- package/dist/src/setup/integrations/shared/vercel-project.d.ts +11 -0
- package/dist/src/setup/integrations/shared/vercel-project.js +1 -0
- package/dist/src/setup/integrations/slack/setup.d.ts +25 -10
- package/dist/src/setup/integrations/slack/setup.js +1 -1
- package/dist/src/setup/integrations/types.d.ts +43 -13
- package/dist/src/setup/integrations/types.js +1 -1
- package/dist/src/setup/integrations/web/setup.d.ts +22 -3
- package/dist/src/setup/integrations/web/setup.js +1 -1
- package/dist/src/setup/prompter.d.ts +8 -0
- package/dist/src/setup/question-options.d.ts +15 -0
- package/dist/src/setup/question-options.js +1 -0
- package/dist/src/setup/registry-setup-client.d.ts +3 -4
- package/dist/src/setup/registry-setup-client.js +2 -2
- package/dist/src/setup/registry-setup-completion.d.ts +3 -0
- package/dist/src/setup/registry-setup-completion.js +1 -0
- package/dist/src/setup/registry-setup-protocol.d.ts +22 -3
- package/dist/src/setup/registry-setup-protocol.js +1 -1
- package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +55 -3
- package/dist/src/setup/scaffold/update/channels.js +1 -1
- package/dist/src/setup/setup-question-wire.d.ts +48 -0
- package/dist/src/setup/setup-question-wire.js +1 -0
- package/dist/src/setup/slackbot.d.ts +5 -1
- package/dist/src/setup/slackbot.js +1 -1
- package/dist/src/setup/state.d.ts +2 -2
- package/dist/src/shared/sandbox-backend.d.ts +6 -0
- package/dist/src/shared/sandbox-session.d.ts +15 -0
- package/dist/src/shared/tool-definition.d.ts +2 -2
- package/dist/src/shared/tool-schema.d.ts +5 -4
- package/dist/src/shared/tool-schema.js +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tracing/agent-otel-provider.d.ts +5 -38
- package/dist/src/tracing/agent-otel-provider.js +2 -2
- package/dist/src/tracing/agent-span-id-generator.d.ts +15 -0
- package/dist/src/tracing/agent-span-id-generator.js +1 -0
- package/dist/src/tracing/agent-trace-context-store.d.ts +1 -1
- package/dist/src/tracing/agent-trace-context-store.js +1 -1
- package/dist/src/tracing/agent-trace-state.d.ts +41 -0
- package/dist/src/tracing/agent-trace-state.js +1 -0
- package/dist/src/tracing/local-instrumentation-runtime.js +1 -1
- package/dist/src/vue/index.js +1 -1
- package/dist/src/vue/use-eve-agent.js +1 -1
- package/docs/channels/chat-sdk.mdx +1 -1
- package/docs/channels/github.mdx +1 -1
- package/docs/channels/linear.mdx +1 -1
- package/docs/channels/overview.mdx +2 -2
- package/docs/channels/slack.mdx +154 -40
- package/docs/concepts/default-harness.md +3 -3
- package/docs/concepts/sessions-runs-and-streaming.md +1 -1
- package/docs/connections/mcp.mdx +6 -0
- package/docs/guides/dev-tui.md +58 -142
- package/docs/guides/dynamic-workflows.md +2 -0
- package/docs/guides/frontend/overview.mdx +4 -2
- package/docs/guides/hooks.md +25 -3
- package/docs/guides/session-context.md +18 -0
- package/docs/install-integrations.mdx +2 -0
- package/docs/reference/cli.md +5 -3
- package/docs/reference/typescript-api.md +1 -1
- package/docs/sandbox.mdx +25 -5
- package/docs/skills.mdx +12 -1
- package/docs/subagents.mdx +1 -1
- package/docs/tools/human-in-the-loop.md +1 -1
- package/docs/tutorial/ship-it.mdx +1 -1
- package/package.json +10 -10
- package/dist/src/compiled/_chunks/node/undici-DWL_MYmT.js +0 -95
- package/dist/src/compiled/_chunks/workflow/dist-CZxNEvEs.js +0 -79
|
@@ -75,7 +75,9 @@ export function Chat() {
|
|
|
75
75
|
|
|
76
76
|
Most chat UIs only need `data.messages` and `status`. Drop down to `events` when you need the authoritative wire events directly, for example to persist an audit log or build a custom projection.
|
|
77
77
|
|
|
78
|
-
`data.messages` are `EveMessage[]
|
|
78
|
+
`data.messages` are eve-owned `EveMessage[]`. Common text, reasoning, file, and dynamic-tool parts follow the [AI SDK `UIMessage`](https://ai-sdk.dev/docs/reference/ai-sdk-core/ui-message) rendering convention, but the types are not interchangeable. eve also exposes authorization and HITL metadata, and a file part's URL can be absent. Adapt those parts before passing messages to an API typed as `UIMessage[]`.
|
|
79
|
+
|
|
80
|
+
When the root agent delegates, its stream emits `subagent.called` with the child's `childSessionId`, then `subagent.completed` when the child returns. Detailed child progress lives on the child session's stream instead of being flattened into the root `data.messages`. Use the lower-level [TypeScript client](../client/overview#sessions) to attach to that ID when your UI needs live subagent activity. See [What the parent sees](../../subagents#what-the-parent-sees) for the complete contract.
|
|
79
81
|
|
|
80
82
|
## Sending and streaming
|
|
81
83
|
|
|
@@ -124,7 +126,7 @@ if (request) {
|
|
|
124
126
|
}
|
|
125
127
|
```
|
|
126
128
|
|
|
127
|
-
`request.prompt` and `request.options` give you what you need to render the approve and
|
|
129
|
+
`request.prompt` and `request.options` give you what you need to render the approve and cancel UI. The default reducer marks the part as responded immediately, then updates it again once eve streams the resumed result.
|
|
128
130
|
|
|
129
131
|
## Authorization prompts
|
|
130
132
|
|
package/docs/guides/hooks.md
CHANGED
|
@@ -30,16 +30,38 @@ A hook file declares stream-event subscribers under the `events` map, keyed by e
|
|
|
30
30
|
|
|
31
31
|
## Hook structure and context
|
|
32
32
|
|
|
33
|
-
Every handler receives the same `HookContext
|
|
33
|
+
Every handler receives the same `HookContext`, including the shared session
|
|
34
|
+
helpers documented in [Session context](./session-context):
|
|
34
35
|
|
|
35
36
|
```ts
|
|
36
|
-
interface HookContext {
|
|
37
|
+
interface HookContext extends SessionContext {
|
|
37
38
|
readonly agent: { readonly name: string; readonly nodeId?: string };
|
|
38
39
|
readonly channel: { readonly kind?: string; readonly continuationToken?: string };
|
|
39
|
-
readonly session: { readonly id: string };
|
|
40
40
|
}
|
|
41
41
|
```
|
|
42
42
|
|
|
43
|
+
That means a hook can access the current sandbox and release its backing
|
|
44
|
+
compute at an application-defined boundary:
|
|
45
|
+
|
|
46
|
+
```ts title="agent/hooks/stop-after-turn.ts"
|
|
47
|
+
import { defineHook } from "eve/hooks";
|
|
48
|
+
|
|
49
|
+
export default defineHook({
|
|
50
|
+
events: {
|
|
51
|
+
async "turn.completed"(_event, ctx) {
|
|
52
|
+
const sandbox = await ctx.getSandbox();
|
|
53
|
+
await sandbox.stop();
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Every built-in backend stops its underlying compute while preserving the
|
|
60
|
+
durable session and filesystem for the next callback. On Vercel, the current
|
|
61
|
+
handle can also automatically resume on later I/O. A hook failure, including a
|
|
62
|
+
failed stop, follows the normal
|
|
63
|
+
[hook failure behavior](#what-happens-when-a-hook-throws).
|
|
64
|
+
|
|
43
65
|
### Narrowing tool results
|
|
44
66
|
|
|
45
67
|
`toolResultFrom` narrows an `action.result` event to a specific authored tool or MCP connection and returns typed output. Import it from `eve/tools`:
|
|
@@ -69,6 +69,24 @@ Behavior:
|
|
|
69
69
|
- It is async because eve binds or restores sandbox state lazily.
|
|
70
70
|
- It only works when sandbox access is attached to the active runtime path.
|
|
71
71
|
- Visibility is node-local. A subagent sees its own sandbox, not the parent's.
|
|
72
|
+
- The returned `RuntimeSandboxSession` extends the ordinary sandbox I/O surface
|
|
73
|
+
with `stop()`. It is exported from `eve/sandbox`.
|
|
74
|
+
|
|
75
|
+
Call `stop()` to release sandbox compute while preserving the durable session
|
|
76
|
+
and its filesystem:
|
|
77
|
+
|
|
78
|
+
```ts
|
|
79
|
+
const sandbox = await ctx.getSandbox();
|
|
80
|
+
await sandbox.stop();
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Each backend implements this with its native lifecycle operation. Treat the
|
|
84
|
+
stop as the end of sandbox work in the current callback; a later callback calls
|
|
85
|
+
`ctx.getSandbox()` normally and eve reopens the same durable session. Vercel
|
|
86
|
+
also supports using the same handle again: its next command or file operation
|
|
87
|
+
automatically resumes the sandbox, just as it would after an inactivity
|
|
88
|
+
timeout. No separate eve reconnect state is created, and provider failures
|
|
89
|
+
reject the returned promise.
|
|
72
90
|
|
|
73
91
|
`SandboxSession` also exposes `resolvePath(path)`, which returns the live backend-native path for a logical `/workspace/...` location. Use it when authored code needs that path before passing it to shell code or a child process.
|
|
74
92
|
|
|
@@ -22,6 +22,8 @@ Some integrations package several independently installable components. For exam
|
|
|
22
22
|
|
|
23
23
|
When an official item declares an interactive setup flow or flows, eve asks whether to run them after installation and runs multiple flows in declaration order. Run the printed `eve add <item> --skip-install` command to resume a skipped or cancelled setup later; it reruns the selected components' declared flows from the beginning.
|
|
24
24
|
|
|
25
|
+
For non-interactive automation, run `eve add <item> --non-interactive`. Add `--yes` to accept recommended setup values and reduce setup round trips; explicit `--answer` values take precedence. Eve returns structured component, setup-input, or prerequisite instructions instead of prompting. Use the continuation command in the response and add the requested answer; it adds `--skip-install` once registry installation has completed; resupply any prior answers from the calling agent's state. Pass non-secret answers with repeatable `--answer 'key=<JSON value>'` options. Supply secrets through the integration's documented environment variable or secret store rather than command-line arguments.
|
|
26
|
+
|
|
25
27
|
## Find an integration
|
|
26
28
|
|
|
27
29
|
Browse the [Integrations directory](/integrations) to see the official integrations available from the eve registry.
|
package/docs/reference/cli.md
CHANGED
|
@@ -98,9 +98,11 @@ eve registry view @acme/my-extension
|
|
|
98
98
|
eve add @acme/my-extension
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
`eve add` asks before running setup declared by an official item and runs multiple declared flows in declaration order. Product-level packages can offer independently installable components: `eve add linear` lets you select the Linear Channel, Linear MCP, or both, with both selected by default. `--yes` installs a package's default components.
|
|
101
|
+
`eve add` asks before running setup declared by an official item and runs multiple declared flows in declaration order. Product-level packages can offer independently installable components: `eve add linear` lets you select the Linear Channel, Linear MCP, or both, with both selected by default. `--yes` installs a package's default components and accepts detected or recommended setup answers.
|
|
102
102
|
|
|
103
|
-
|
|
103
|
+
Coding agents should use `eve add <item> --non-interactive`, adding `--yes` to accept recommended setup values and reduce setup round trips. Explicit `--answer` values take precedence. This mode never opens an eve prompt. When a component or setup decision is missing, the NDJSON terminal event includes a stable question key and a safe continuation command; add the requested answer to that command. Supply answers with repeatable `--answer 'key=<JSON value>'` options. Follow a reported `eve link` prerequisite before retrying Vercel Connect setup. Do not put secrets in command-line answers; use the integration's documented environment variable or secret store.
|
|
104
|
+
|
|
105
|
+
When setup is skipped, cancelled, or needs more input after installation, eve prints or returns the matching `eve add <item> --skip-install` continuation. It reruns the selected components' declared flows without reinstalling registry files.
|
|
104
106
|
|
|
105
107
|
`eve registry add` records configured sources in `package.json#registries`. `eve registry list` aggregates the official catalog and all configured sources by default. `eve registry search` also includes [skills.sh](https://skills.sh), available without configuration at `@skills`, and groups results by source with each source's available result count. Search returns up to 10 matches per source by default; pass `--limit <count>` to request between 1 and 100. Either command can browse one supplied URL or namespace. Official and other universal items with explicit file targets do not require shadcn project configuration.
|
|
106
108
|
|
|
@@ -271,7 +273,7 @@ A session long enough to outgrow one trace — far longer than anything you will
|
|
|
271
273
|
|
|
272
274
|
One parent turn can dispatch several subagents into the same window, so a child's turn spans name the dispatch: `agent.parent.session.id`, `agent.parent.turn.id`, and `agent.parent.call_id` identify the tool call that created the child, and `agent.subagent.name` the subagent it invoked. Top-level sessions carry none of these.
|
|
273
275
|
|
|
274
|
-
|
|
276
|
+
Every span carries a real duration except `agent.session`: an idle session never closes, so it is recorded as a zero-duration marker and the span tree shows its descendant extent instead. A turn's span is written when the turn settles, so a running turn shows only its steps.
|
|
275
277
|
|
|
276
278
|
Model and tool-call spans carry their inputs and outputs — system prompt, prompt messages, and response text for models; call arguments and results for tools — each capped at 32 KB. Set `EVE_TRACES_CONTENT=off` to keep payloads out of the spool.
|
|
277
279
|
|
|
@@ -61,7 +61,7 @@ A few non-`define*` helpers round out the set: `disableTool`, `experimental_work
|
|
|
61
61
|
| Member | Use |
|
|
62
62
|
| --------------------------- | ---------------------------------------------------------------------------- |
|
|
63
63
|
| `ctx.session` | Current session, turn, auth, and optional parent lineage (read-only) |
|
|
64
|
-
| `ctx.getSandbox()` | Live sandbox handle
|
|
64
|
+
| `ctx.getSandbox()` | Live sandbox handle; `stop()` releases compute but preserves durable state |
|
|
65
65
|
| `ctx.getSkill(identifier)` | Handle for a named skill visible to the current agent |
|
|
66
66
|
| `ctx.getToken(provider)` | Resolve a bearer token for an inline auth provider such as `connect("...")` |
|
|
67
67
|
| `ctx.requireAuth(provider)` | Evict and re-authorize an inline provider, commonly after a downstream `401` |
|
package/docs/sandbox.mdx
CHANGED
|
@@ -100,7 +100,7 @@ export default defineSandbox({
|
|
|
100
100
|
revalidationKey: () => "repo-bootstrap-v1",
|
|
101
101
|
async bootstrap({ use }) {
|
|
102
102
|
const sandbox = await use();
|
|
103
|
-
await sandbox.run({ command: "apt-get install -y jq" });
|
|
103
|
+
await sandbox.run({ command: "sudo apt-get install -y jq" });
|
|
104
104
|
},
|
|
105
105
|
async onSession({ use }) {
|
|
106
106
|
await use({ networkPolicy: "deny-all" });
|
|
@@ -183,11 +183,31 @@ export default defineSandbox({
|
|
|
183
183
|
});
|
|
184
184
|
```
|
|
185
185
|
|
|
186
|
-
Sessions are persistent, and how the underlying runtime idles out depends on the backend. On the Vercel backend, the VM times out after a period of inactivity (default 30 minutes); eve preserves the filesystem and resumes the sandbox on the next message
|
|
186
|
+
Sessions are persistent, and how the underlying runtime idles out depends on the backend. On the Vercel backend, the VM times out after a period of inactivity (default 30 minutes); eve preserves the filesystem and resumes the sandbox on the next message while the persisted sandbox remains available. The Docker backend keeps a long-lived container per durable session and persists `/workspace` across turns without that timeout, and the just-bash backend stores its virtual filesystem under `.eve/sandbox-cache/`.
|
|
187
187
|
|
|
188
|
-
|
|
188
|
+
Authored runtime callbacks can stop compute sooner through the handle returned
|
|
189
|
+
by `ctx.getSandbox()`:
|
|
189
190
|
|
|
190
|
-
|
|
191
|
+
```ts
|
|
192
|
+
const sandbox = await ctx.getSandbox();
|
|
193
|
+
await sandbox.stop();
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Every built-in backend uses its native lifecycle operation without deleting the
|
|
197
|
+
durable session. Treat the stop as the end of sandbox work in the current
|
|
198
|
+
callback. On the next callback, `ctx.getSandbox()` reopens the same Docker
|
|
199
|
+
container, microsandbox VM or snapshot, or just-bash filesystem and environment.
|
|
200
|
+
Vercel can also automatically resume the same handle on its next I/O operation,
|
|
201
|
+
just as it would after an inactivity timeout. No separate reconnect step or
|
|
202
|
+
stop-specific state is needed. Lifecycle `use()` calls return the I/O-only
|
|
203
|
+
`SandboxSession` because bootstrap and session initialization do not own runtime
|
|
204
|
+
teardown.
|
|
205
|
+
|
|
206
|
+
Session sandboxes are keyed per durable session, not per deployment, so redeploying your app does not by itself discard them. A definition change to the authored sandbox source, workspace seed content, or `revalidationKey` replaces the sandbox on the next turn and runs `onSession` again.
|
|
207
|
+
|
|
208
|
+
Reattachment still depends on the backend retaining its physical sandbox state. If a persisted Vercel sandbox is no longer available, eve creates a replacement, using the current template when one is configured. Files and other changes made after the original sandbox was created are not restored automatically. Because the durable session still has the same sandbox key, `onSession` does not run again for this replacement. Persist important artifacts outside the sandbox, and do not rely on `onSession` as the only place that applies security-critical configuration.
|
|
209
|
+
|
|
210
|
+
When the eve server stops, no sandbox compute outlives it. `eve dev` stops the sandboxes it started when the dev server closes, and a self-hosted production server stops every open sandbox on shutdown (`SIGTERM`/`SIGINT`). Session state persists across the stop — the next server start reattaches each durable session from its stopped container, VM, or snapshot. Custom `SandboxBackend` adapters implement `stop()` for authored runtime calls and `shutdown()` for server teardown. Both stop the underlying compute while keeping the session reattachable from persisted state where the backend supports it; authored `stop()` failures reject, while process-wide shutdown collects and logs failures without blocking teardown.
|
|
191
211
|
|
|
192
212
|
## Network policy
|
|
193
213
|
|
|
@@ -205,7 +225,7 @@ networkPolicy: {
|
|
|
205
225
|
|
|
206
226
|
Default egress is `allow-all`. For non-public, sensitive, regulated, or production workloads, configure `deny-all` or an explicit allow-list before running untrusted tools or handling sensitive data.
|
|
207
227
|
|
|
208
|
-
Set it on the factory (`vercel({ networkPolicy: "deny-all" })`) and it applies before authored `bootstrap` code runs; framework-owned base setup may briefly keep egress open to install required packages. Set it in `onSession`'s `use()` to override per-session.
|
|
228
|
+
Set it on the factory (`vercel({ networkPolicy: "deny-all" })`) and it applies before authored `bootstrap` code runs; framework-owned base setup may briefly keep egress open to install required packages. Set it in `onSession`'s `use()` to override per-session. A provider-loss replacement with the same sandbox key does not rerun `onSession`, so enforce the security-critical baseline on the factory. If `bootstrap` needs network access, give the factory only the destinations it needs, then narrow the policy further in `onSession`. To change the policy mid-turn, call `sandbox.setNetworkPolicy(...)` on the live handle.
|
|
209
229
|
|
|
210
230
|
Domain-level allow-lists and credential brokering are supported by `vercel()` and `microsandbox()`. The Docker backend honors only `"allow-all"` and `"deny-all"` (at creation and via `setNetworkPolicy`); the just-bash backend rejects `setNetworkPolicy` entirely.
|
|
211
231
|
|
package/docs/skills.mdx
CHANGED
|
@@ -59,9 +59,20 @@ export default defineSkill({
|
|
|
59
59
|
|
|
60
60
|
eve generates `SKILL.md` from `markdown`, and each `files` entry becomes a package-relative sibling. Start with plain markdown and move to `defineSkill` only when you hit its limits.
|
|
61
61
|
|
|
62
|
+
## Find and install community skills
|
|
63
|
+
|
|
64
|
+
`eve registry search` includes [skills.sh](https://skills.sh) as the built-in `@skills` source. Search by task, review the source, then install the returned skill into your project:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
eve registry search react --registry @skills
|
|
68
|
+
eve add @skills/vercel-labs/agent-skills/vercel-react-best-practices
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
skills.sh skills are community-authored project files. Review their source and the resulting diff before running the agent. See [Install integrations](./install-integrations#add-a-skill) for registry configuration and install behavior.
|
|
72
|
+
|
|
62
73
|
## Skills are scoped per agent
|
|
63
74
|
|
|
64
|
-
Skills are scoped to the agent that declares them. A [subagent](./subagents)'s `skills/` are invisible to the root agent, and the reverse holds too.
|
|
75
|
+
Skills are scoped to the agent that declares them. A [subagent](./subagents)'s `skills/` are invisible to the root agent, and the reverse holds too. To share one skill definition across agents, package it in a [workspace extension](./extensions#use-an-extension-in-a-workspace) and mount that extension in each agent. Put shared executable helpers in `lib/`.
|
|
65
76
|
|
|
66
77
|
## Read skill files at runtime
|
|
67
78
|
|
package/docs/subagents.mdx
CHANGED
|
@@ -139,7 +139,7 @@ A declared subagent inherits nothing from the root's authored slots. Discovery t
|
|
|
139
139
|
| Channels | Root-only | Root-only |
|
|
140
140
|
| Schedules | Root-only | Root-only |
|
|
141
141
|
|
|
142
|
-
For a declared subagent this means
|
|
142
|
+
For a declared subagent this means authoring or mounting anything the child needs. When two subagents need the same procedure, package the skill in a [workspace extension](./extensions#use-an-extension-in-a-workspace) and mount that extension in each subagent. Share typed helpers through `lib/`. The sandbox does not inherit from the parent; it falls back to the framework default unless the subagent authors `subagents/<id>/sandbox.ts` or seeds files via `subagents/<id>/sandbox/workspace/`.
|
|
143
143
|
|
|
144
144
|
The root built-in `agent` tool is the exception. Its children share the root's sandbox and tools because they are copies of the same agent working on the same files.
|
|
145
145
|
|
|
@@ -100,7 +100,7 @@ Approvals and questions share one protocol:
|
|
|
100
100
|
1. The model requests input (an approval, or an `ask_question`).
|
|
101
101
|
2. eve emits an `input.requested` stream event carrying the pending requests.
|
|
102
102
|
3. The turn parks at `session.waiting`, durably, for as long as it takes.
|
|
103
|
-
4. The client answers with `inputResponses` (structured, keyed by `requestId`) or a normal follow-up `message`. A follow-up whose text matches an option ID, option label, or numeric option index resolves automatically, including approval options such as `approve` and `
|
|
103
|
+
4. The client answers with `inputResponses` (structured, keyed by `requestId`) or a normal follow-up `message`. A follow-up whose text matches an option ID, option label, or numeric option index resolves automatically, including approval options such as `approve` and `cancel`.
|
|
104
104
|
|
|
105
105
|
Each request includes a `kind` discriminator: `tool-approval`, `question`, or
|
|
106
106
|
`session-limit`. Clients should use `kind` to choose behavior and presentation;
|
|
@@ -73,7 +73,7 @@ export default function Page() {
|
|
|
73
73
|
}
|
|
74
74
|
```
|
|
75
75
|
|
|
76
|
-
`agent.data.messages` and `agent.status` cover most chat UIs. The hook also surfaces HITL prompts (the spend approval from [Step 8](./guard-the-spend)), so the dashboard can render approve/
|
|
76
|
+
`agent.data.messages` and `agent.status` cover most chat UIs. The hook also surfaces HITL prompts (the spend approval from [Step 8](./guard-the-spend)), so the dashboard can render approve/cancel controls. For the full API, see [Frontend](../guides/frontend/overview).
|
|
77
77
|
|
|
78
78
|
## Replace `placeholderAuth`
|
|
79
79
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eve",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Filesystem-first framework for durable backend AI agents that run anywhere.",
|
|
6
6
|
"keywords": [
|
|
@@ -294,13 +294,13 @@
|
|
|
294
294
|
},
|
|
295
295
|
"devDependencies": {
|
|
296
296
|
"@agentclientprotocol/sdk": "1.3.0",
|
|
297
|
-
"@ai-sdk/anthropic": "^4.0.
|
|
298
|
-
"@ai-sdk/google": "^4.0.
|
|
299
|
-
"@ai-sdk/mcp": "^2.0.
|
|
300
|
-
"@ai-sdk/openai": "^4.0.
|
|
301
|
-
"@ai-sdk/otel": "^1.0.
|
|
302
|
-
"@ai-sdk/provider": "^4.0.
|
|
303
|
-
"@ai-sdk/provider-utils": "^5.0.
|
|
297
|
+
"@ai-sdk/anthropic": "^4.0.36",
|
|
298
|
+
"@ai-sdk/google": "^4.0.39",
|
|
299
|
+
"@ai-sdk/mcp": "^2.0.29",
|
|
300
|
+
"@ai-sdk/openai": "^4.0.36",
|
|
301
|
+
"@ai-sdk/otel": "^1.0.58",
|
|
302
|
+
"@ai-sdk/provider": "^4.0.7",
|
|
303
|
+
"@ai-sdk/provider-utils": "^5.0.25",
|
|
304
304
|
"@chat-adapter/slack": "4.34.0",
|
|
305
305
|
"@chat-adapter/state-memory": "4.34.0",
|
|
306
306
|
"@chat-adapter/twilio": "4.34.0",
|
|
@@ -327,7 +327,7 @@
|
|
|
327
327
|
"@workflow/world": "5.0.0-beta.25",
|
|
328
328
|
"@workflow/world-local": "5.0.0-beta.34",
|
|
329
329
|
"@workflow/world-vercel": "5.0.0-beta.36",
|
|
330
|
-
"ai": "^7.0.
|
|
330
|
+
"ai": "^7.0.58",
|
|
331
331
|
"autoevals": "0.0.132",
|
|
332
332
|
"chat": "4.34.0",
|
|
333
333
|
"chokidar": "5.0.0",
|
|
@@ -359,7 +359,7 @@
|
|
|
359
359
|
},
|
|
360
360
|
"peerDependencies": {
|
|
361
361
|
"@opentelemetry/api": "^1.0.0",
|
|
362
|
-
"ai": "^7.0.
|
|
362
|
+
"ai": "^7.0.58",
|
|
363
363
|
"braintrust": "^3.0.0",
|
|
364
364
|
"just-bash": "^3.0.0",
|
|
365
365
|
"microsandbox": "^0.5.0"
|