eve 0.23.0 → 0.24.1
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 +22 -0
- package/dist/src/channel/types.d.ts +1 -1
- package/dist/src/cli/run.d.ts +2 -2
- package/dist/src/cli/run.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +11 -11
- package/dist/src/compiled/@ai-sdk/anthropic/index.d.ts +1 -1
- package/dist/src/compiled/@ai-sdk/anthropic/index.js +2 -2
- package/dist/src/compiled/@ai-sdk/google/index.d.ts +7 -0
- package/dist/src/compiled/@ai-sdk/google/index.js +6 -6
- package/dist/src/compiled/@ai-sdk/mcp/index.d.ts +42 -1
- package/dist/src/compiled/@ai-sdk/mcp/index.js +1 -1
- package/dist/src/compiled/@ai-sdk/openai/index.d.ts +34 -6
- package/dist/src/compiled/@ai-sdk/openai/index.js +2 -2
- package/dist/src/compiled/@ai-sdk/otel/index.js +1 -1
- package/dist/src/compiled/@ai-sdk/provider/index.d.ts +245 -3
- package/dist/src/compiled/@ai-sdk/provider-utils/index.d.ts +273 -15
- package/dist/src/compiled/@workflow/core/index.js +1 -1
- package/dist/src/compiled/@workflow/core/runtime/start.d.ts +12 -0
- package/dist/src/compiled/@workflow/core/runtime.js +1 -1
- package/dist/src/compiled/@workflow/core/version.d.ts +1 -1
- package/dist/src/compiled/@workflow/core/workflow.js +1 -1
- package/dist/src/compiled/@workflow/world/analytics.d.ts +56 -21
- package/dist/src/compiled/@workflow/world/index.d.ts +1 -1
- package/dist/src/compiled/@workflow/world/interfaces.d.ts +46 -0
- package/dist/src/compiled/@workflow/world/queue.d.ts +12 -0
- package/dist/src/compiled/@workflow/world-local/index.js +3 -3
- package/dist/src/compiled/@workflow/world-vercel/index.js +16 -16
- package/dist/src/compiled/_chunks/workflow/attribute-changes-MGTOG_uX.js +20 -0
- package/dist/src/compiled/_chunks/workflow/{dist-CQenixFf.js → dist-Blxnyb7-.js} +2 -2
- package/dist/src/compiled/_chunks/workflow/dist-zLevmMyU.js +77 -0
- package/dist/src/compiled/_chunks/workflow/{resume-hook-BH01MfRF.js → resume-hook-DHP5ql3-.js} +1 -1
- package/dist/src/compiled/_chunks/workflow/run-D8hv1ptT.js +1 -0
- package/dist/src/compiled/_chunks/workflow/{sleep-BkAHCD_s.js → sleep-uA9pS-PT.js} +1 -1
- package/dist/src/compiler/artifacts.d.ts +7 -6
- package/dist/src/compiler/artifacts.js +1 -1
- package/dist/src/compiler/compile-agent.d.ts +15 -2
- package/dist/src/compiler/compile-agent.js +3 -3
- package/dist/src/compiler/manifest.d.ts +12 -6
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/normalize-agent-config.js +1 -1
- package/dist/src/compiler/normalize-extension.js +1 -1
- package/dist/src/compiler/normalize-manifest.js +2 -2
- package/dist/src/compiler/normalize-tool.d.ts +2 -1
- package/dist/src/compiler/normalize-tool.js +1 -1
- package/dist/src/context/build-base-tool-context.d.ts +5 -1
- package/dist/src/context/build-base-tool-context.js +1 -1
- package/dist/src/context/build-dynamic-tools.js +1 -1
- package/dist/src/context/dynamic-tool-lifecycle.js +1 -1
- package/dist/src/execution/create-session-step.js +1 -1
- package/dist/src/execution/node-step.d.ts +2 -3
- package/dist/src/execution/node-step.js +1 -1
- package/dist/src/execution/run-session-limits.d.ts +0 -9
- package/dist/src/execution/run-session-limits.js +1 -1
- package/dist/src/execution/sandbox/prewarm.d.ts +1 -0
- package/dist/src/execution/sandbox/prewarm.js +1 -1
- package/dist/src/execution/subagent-tool.js +1 -1
- package/dist/src/execution/tool-auth.js +1 -1
- package/dist/src/harness/instrumentation-runtime-context.d.ts +1 -1
- package/dist/src/harness/tool-loop.js +3 -1
- package/dist/src/harness/types.d.ts +5 -7
- package/dist/src/harness/workflow-subagent-limit.d.ts +2 -2
- package/dist/src/internal/application/build-workspace.d.ts +36 -0
- package/dist/src/internal/application/build-workspace.js +1 -0
- package/dist/src/internal/application/compiled-artifacts.d.ts +12 -1
- package/dist/src/internal/application/compiled-artifacts.js +5 -4
- package/dist/src/internal/application/output-publication-artifacts.d.ts +7 -0
- package/dist/src/internal/application/output-publication-artifacts.js +1 -0
- package/dist/src/internal/application/output-publication-journal.d.ts +30 -0
- package/dist/src/internal/application/output-publication-journal.js +1 -0
- package/dist/src/internal/application/output-publication-lock.d.ts +10 -0
- package/dist/src/internal/application/output-publication-lock.js +1 -0
- package/dist/src/internal/application/output-publication.d.ts +33 -0
- package/dist/src/internal/application/output-publication.js +1 -0
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/application/production-compiler-artifacts.d.ts +4 -0
- package/dist/src/internal/application/production-compiler-artifacts.js +1 -0
- package/dist/src/internal/application/tsconfig-dependencies.js +1 -1
- package/dist/src/internal/authored-definition/core.js +1 -1
- package/dist/src/internal/authored-definition/schema-backed.d.ts +3 -2
- package/dist/src/internal/authored-definition/schema-backed.js +1 -1
- package/dist/src/internal/authored-directive-prologue.d.ts +4 -0
- package/dist/src/internal/authored-directive-prologue.js +1 -0
- package/dist/src/internal/authored-module-loader.d.ts +15 -5
- package/dist/src/internal/authored-module-loader.js +4 -2
- package/dist/src/internal/authored-module-map-loader.js +1 -1
- package/dist/src/internal/authored-module.d.ts +4 -0
- package/dist/src/internal/authored-module.js +1 -1
- package/dist/src/internal/authored-package-boundary.d.ts +25 -0
- package/dist/src/internal/authored-package-boundary.js +1 -0
- package/dist/src/internal/authored-package-tsconfig-paths.js +1 -1
- package/dist/src/internal/bundler/nitro-node-file-trace.d.ts +10 -0
- package/dist/src/internal/bundler/nitro-node-file-trace.js +1 -0
- package/dist/src/internal/materialize-authored-external-dependencies.d.ts +10 -0
- package/dist/src/internal/materialize-authored-external-dependencies.js +2 -0
- package/dist/src/internal/materialized-authored-modules.d.ts +15 -0
- package/dist/src/internal/materialized-authored-modules.js +1 -0
- package/dist/src/internal/nitro/dev-runtime-artifacts.d.ts +1 -9
- package/dist/src/internal/nitro/dev-runtime-artifacts.js +1 -1
- package/dist/src/internal/nitro/development-generation.d.ts +12 -0
- package/dist/src/internal/nitro/development-generation.js +1 -0
- package/dist/src/internal/nitro/host/artifacts-config.d.ts +9 -11
- package/dist/src/internal/nitro/host/artifacts-config.js +1 -1
- package/dist/src/internal/nitro/host/build-application.d.ts +2 -1
- package/dist/src/internal/nitro/host/build-application.js +1 -1
- package/dist/src/internal/nitro/host/build-vercel-agent-summary.d.ts +1 -7
- package/dist/src/internal/nitro/host/build-vercel-agent-summary.js +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 +9 -5
- package/dist/src/internal/nitro/host/configure-nitro-routes.js +3 -3
- package/dist/src/internal/nitro/host/create-application-nitro.d.ts +18 -10
- package/dist/src/internal/nitro/host/create-application-nitro.js +1 -1
- package/dist/src/internal/nitro/host/dev-authored-source-watcher.js +1 -1
- package/dist/src/internal/nitro/host/dispatch-schedule-in-dev.d.ts +6 -1
- package/dist/src/internal/nitro/host/dispatch-schedule-in-dev.js +1 -1
- package/dist/src/internal/nitro/host/prepare-application-host.d.ts +13 -5
- package/dist/src/internal/nitro/host/prepare-application-host.js +1 -1
- package/dist/src/internal/nitro/host/schedule-task-routes.d.ts +3 -3
- package/dist/src/internal/nitro/host/start-development-server.js +2 -2
- package/dist/src/internal/nitro/host/types.d.ts +4 -0
- package/dist/src/internal/nitro/host/vercel-build-prewarm.d.ts +2 -9
- package/dist/src/internal/nitro/host/vercel-build-prewarm.js +1 -1
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response-from-manifest.js +1 -1
- package/dist/src/internal/nitro/routes/agent-info/build-agent-info-response.js +1 -1
- package/dist/src/internal/nitro/routes/agent-info/load-agent-info-data.d.ts +3 -6
- package/dist/src/internal/nitro/routes/agent-info/load-agent-info-data.js +1 -1
- package/dist/src/internal/nitro/routes/channel-dispatch.js +1 -1
- package/dist/src/internal/nitro/routes/dev-schedule-dispatch.d.ts +2 -3
- package/dist/src/internal/nitro/routes/dev-schedule-dispatch.js +1 -1
- package/dist/src/internal/nitro/routes/info.d.ts +1 -6
- package/dist/src/internal/nitro/routes/info.js +1 -1
- package/dist/src/internal/nitro/routes/runtime-artifacts.d.ts +9 -5
- package/dist/src/internal/nitro/routes/runtime-artifacts.js +1 -1
- package/dist/src/internal/workflow-bundle/build-queue.d.ts +1 -0
- package/dist/src/internal/workflow-bundle/build-queue.js +1 -0
- package/dist/src/internal/workflow-bundle/builder-support.d.ts +0 -1
- package/dist/src/internal/workflow-bundle/builder-support.js +2 -2
- package/dist/src/internal/workflow-bundle/builder.js +2 -2
- package/dist/src/internal/workflow-bundle/nitro-step-entry.d.ts +1 -0
- package/dist/src/internal/workflow-bundle/nitro-step-entry.js +2 -2
- package/dist/src/public/channels/teams/api.d.ts +8 -0
- package/dist/src/public/channels/teams/api.js +2 -2
- package/dist/src/public/channels/teams/defaults.d.ts +2 -2
- package/dist/src/public/channels/teams/defaults.js +1 -1
- package/dist/src/public/channels/teams/hitl.d.ts +4 -0
- package/dist/src/public/channels/teams/hitl.js +1 -1
- package/dist/src/public/channels/teams/index.d.ts +1 -1
- package/dist/src/public/channels/teams/teamsChannel.d.ts +6 -0
- package/dist/src/public/channels/teams/teamsChannel.js +1 -1
- package/dist/src/public/definitions/tool.d.ts +40 -24
- package/dist/src/public/definitions/tool.js +1 -1
- package/dist/src/public/instrumentation/index.d.ts +3 -3
- package/dist/src/public/tools/index.d.ts +1 -1
- package/dist/src/public/tools/index.js +1 -1
- package/dist/src/runtime/resolve-agent.js +1 -1
- package/dist/src/runtime/types.d.ts +6 -6
- package/dist/src/setup/scaffold/create/add-to-project.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +2 -2
- package/dist/src/setup/scaffold/update/channels.js +1 -1
- package/dist/src/shared/agent-definition.d.ts +0 -16
- package/dist/src/shared/atomic-write-file.d.ts +11 -0
- package/dist/src/shared/atomic-write-file.js +1 -0
- package/dist/src/shared/dynamic-tool-definition.d.ts +2 -0
- package/dist/src/shared/guards.d.ts +7 -0
- package/dist/src/shared/guards.js +1 -1
- package/dist/src/shared/path-exists.d.ts +9 -0
- package/dist/src/shared/path-exists.js +1 -0
- package/docs/agent-config.md +8 -8
- package/docs/channels/teams.mdx +5 -1
- package/docs/concepts/default-harness.md +5 -3
- package/docs/guides/deployment.md +3 -3
- package/docs/guides/dynamic-workflows.md +9 -10
- package/docs/reference/cli.md +4 -2
- package/docs/reference/typescript-api.md +27 -27
- package/docs/subagents.mdx +1 -1
- package/docs/tools/overview.mdx +1 -0
- package/package.json +14 -14
- package/dist/src/compiled/_chunks/workflow/attribute-changes-Dmf_myUv.js +0 -20
- package/dist/src/compiled/_chunks/workflow/dist-D7CzPkf8.js +0 -77
- package/dist/src/compiled/_chunks/workflow/run-CL3mguvM.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{rename,rm,writeFile}from"node:fs/promises";const REPLACE_RETRY_DELAYS_MS=[10,20,40,80,160,320,640];async function atomicWriteFile(e,r){let i=`${e}.tmp-${process.pid}-${Date.now().toString(36)}`;await writeFile(i,r);try{await renameReplacingBusyTarget(i,e)}catch(e){throw await rm(i,{force:!0}).catch(()=>void 0),e}}async function renameReplacingBusyTarget(t,n){for(let i of REPLACE_RETRY_DELAYS_MS)try{await rename(t,n);return}catch(e){if(!isBusyTargetError(e))throw e;await new Promise(e=>setTimeout(e,i))}await rename(t,n)}function isBusyTargetError(e){return e instanceof Error&&`code`in e&&(e.code===`EPERM`||e.code===`EACCES`)}export{atomicWriteFile};
|
|
@@ -7,6 +7,8 @@ import type { HandleMessageStreamEvent } from "#protocol/message.js";
|
|
|
7
7
|
type ToolContext = SessionContext & {
|
|
8
8
|
/** Aborts when the active turn is cancelled. */
|
|
9
9
|
readonly abortSignal: AbortSignal;
|
|
10
|
+
/** Final runtime name of the current tool. */
|
|
11
|
+
readonly toolName: string;
|
|
10
12
|
};
|
|
11
13
|
/**
|
|
12
14
|
* Stream event types allowed for dynamic tool resolvers. Dispatch
|
|
@@ -35,6 +35,13 @@ export declare function isNonEmptyString(value: unknown): value is string;
|
|
|
35
35
|
* that accidentally return a Promise instead of a plain record.
|
|
36
36
|
*/
|
|
37
37
|
export declare function isThenable(value: unknown): value is PromiseLike<unknown>;
|
|
38
|
+
/**
|
|
39
|
+
* Returns `true` when `error` is an `Error` carrying the given Node.js
|
|
40
|
+
* `errno` code (`"ENOENT"`, `"EEXIST"`, ...). Filesystem control flow
|
|
41
|
+
* routinely branches on these codes; this guard keeps the
|
|
42
|
+
* `"code" in error` duck-typing in one place.
|
|
43
|
+
*/
|
|
44
|
+
export declare function isErrnoCode(error: unknown, code: string): boolean;
|
|
38
45
|
/**
|
|
39
46
|
* Returns `true` when `value` is a plain object record — `{}`,
|
|
40
47
|
* `Object.create(null)`, or an object whose prototype is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function isObject(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function isNonEmptyString(e){return typeof e==`string`&&e.length>0}function isThenable(e){return isObject(e)&&typeof e.then==`function`}function isPlainRecord(e){if(!isObject(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}export{isNonEmptyString,isObject,isPlainRecord,isThenable};
|
|
1
|
+
function isObject(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function isNonEmptyString(e){return typeof e==`string`&&e.length>0}function isThenable(e){return isObject(e)&&typeof e.then==`function`}function isErrnoCode(e,t){return e instanceof Error&&`code`in e&&e.code===t}function isPlainRecord(e){if(!isObject(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}export{isErrnoCode,isNonEmptyString,isObject,isPlainRecord,isThenable};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns `true` when `path` exists, `false` when it does not, and
|
|
3
|
+
* rethrows every other filesystem error (`EACCES`, `EIO`, ...).
|
|
4
|
+
*
|
|
5
|
+
* Distinct from `#setup/path-exists.js`, which swallows all errors:
|
|
6
|
+
* callers here make crash-recovery decisions, so a permission failure
|
|
7
|
+
* must surface rather than masquerade as "does not exist".
|
|
8
|
+
*/
|
|
9
|
+
export declare function pathExists(path: string): Promise<boolean>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{stat}from"node:fs/promises";import{isErrnoCode}from"#shared/guards.js";async function pathExists(t){try{return await stat(t),!0}catch(e){if(isErrnoCode(e,`ENOENT`))return!1;throw e}}export{pathExists};
|
package/docs/agent-config.md
CHANGED
|
@@ -203,14 +203,14 @@ installed package must stay external in hosted output, list it in
|
|
|
203
203
|
|
|
204
204
|
`defineAgent` takes a few more fields, all optional. For the exported types, see the [TypeScript API](./reference/typescript-api).
|
|
205
205
|
|
|
206
|
-
| Field | Type | Default | Description
|
|
207
|
-
| -------------- | --------------------------------------- | ---------------- |
|
|
208
|
-
| `reasoning` | `AgentReasoningDefinition` | provider default | Provider-agnostic reasoning effort forwarded to the agent's turn model calls.
|
|
209
|
-
| `modelOptions` | `AgentModelOptionsDefinition` | none | Provider option overrides forwarded to the model call.
|
|
210
|
-
| `limits` | `AgentLimitsDefinition` | field-specific | Framework-owned runtime limits. `maxInputTokensPerSession` defaults to `40_000_000` for root sessions, and delegated subagent sessions inherit the parent's remaining quota; `maxOutputTokensPerSession` is unset unless configured; `false` uncaps a session token limit.
|
|
211
|
-
| `experimental` | `{ workflow?: { world?: string } }` | unset | Opt-in settings that can change or disappear in any release. Treat them as unstable. `workflow.world` selects the Workflow world package backing session state, queues, hooks, and streams on the root agent.
|
|
212
|
-
| `outputSchema` | Standard Schema or a JSON Schema object | none | Structured return type for task-mode runs (a subagent, schedule, or remote job). Interactive conversation turns ignore it unless the client supplies a per-message schema.
|
|
213
|
-
| `build` | `{ externalDependencies?: string[] }` | none | Hosted-build packaging controls. `externalDependencies` keeps listed packages external while eve compiles authored modules such as tools and channels, and traces those packages into the hosted output.
|
|
206
|
+
| Field | Type | Default | Description |
|
|
207
|
+
| -------------- | --------------------------------------- | ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
208
|
+
| `reasoning` | `AgentReasoningDefinition` | provider default | Provider-agnostic reasoning effort forwarded to the agent's turn model calls. |
|
|
209
|
+
| `modelOptions` | `AgentModelOptionsDefinition` | none | Provider option overrides forwarded to the model call. |
|
|
210
|
+
| `limits` | `AgentLimitsDefinition` | field-specific | Framework-owned runtime limits. `maxInputTokensPerSession` defaults to `40_000_000` for root sessions, and delegated subagent sessions inherit the parent's remaining quota; `maxOutputTokensPerSession` is unset unless configured; `false` uncaps a session token limit. |
|
|
211
|
+
| `experimental` | `{ workflow?: { world?: string } }` | unset | Opt-in settings that can change or disappear in any release. Treat them as unstable. `workflow.world` selects the Workflow world package backing session state, queues, hooks, and streams on the root agent. |
|
|
212
|
+
| `outputSchema` | Standard Schema or a JSON Schema object | none | Structured return type for task-mode runs (a subagent, schedule, or remote job). Interactive conversation turns ignore it unless the client supplies a per-message schema. |
|
|
213
|
+
| `build` | `{ externalDependencies?: string[] }` | none | Hosted-build packaging controls. `externalDependencies` keeps listed packages external while eve compiles authored modules such as tools and channels, and traces those packages into the hosted output. |
|
|
214
214
|
|
|
215
215
|
`externalDependencies` is a packaging control only. It keeps selected packages as runtime dependencies in the hosted output; it does not authorize, configure, or review any third-party service those packages may call.
|
|
216
216
|
|
package/docs/channels/teams.mdx
CHANGED
|
@@ -45,7 +45,11 @@ 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`.
|
|
48
|
+
A human-in-the-loop (HITL) `input.requested` event renders as an Adaptive Card. Approval cards show the tool input in the card and fallback text. Buttons and options map to `Action.Submit`, selects to `Input.ChoiceSet`, and freeform to `Input.Text`. Teams may return a submission as a message or invoke; eve handles both before the normal message mention gate and resumes the thread recorded in the card.
|
|
49
|
+
|
|
50
|
+
By default, submissions use the Teams identity of the user who clicked the card. If you customize `onMessage` for an allowlist, configure the same policy in `onInputResponse`; eve otherwise rejects HITL submissions rather than bypassing the message gate.
|
|
51
|
+
|
|
52
|
+
For invokes that aren't HITL, handle them in `onInvoke(ctx, activity)`.
|
|
49
53
|
|
|
50
54
|
### Proactive sessions
|
|
51
55
|
|
|
@@ -91,13 +91,15 @@ Three moves shape the harness. The right one depends on whether the model should
|
|
|
91
91
|
|
|
92
92
|
## The opt-in `Workflow` tool
|
|
93
93
|
|
|
94
|
-
An experimental `Workflow` tool ships but stays off by default. To turn it on,
|
|
94
|
+
An experimental `Workflow` tool ships but stays off by default. To turn it on, export its definition from `agent/tools/workflow.ts`:
|
|
95
95
|
|
|
96
96
|
```ts
|
|
97
|
-
|
|
97
|
+
import { experimental_workflow } from "eve/tools";
|
|
98
|
+
|
|
99
|
+
export default experimental_workflow({ maxSubagents: 100 });
|
|
98
100
|
```
|
|
99
101
|
|
|
100
|
-
With it on, the model can orchestrate the agent's own subagents from model-authored JavaScript, all as one durable step. The tool is root-only — delegated subagent sessions never see it — and one program may dispatch at most `
|
|
102
|
+
With it on, the model can orchestrate the agent's own subagents from model-authored JavaScript, all as one durable step. The tool is root-only — delegated subagent sessions never see it — and one program may dispatch at most the configured `maxSubagents` calls (default 100). See [Dynamic workflows](../guides/dynamic-workflows).
|
|
101
103
|
|
|
102
104
|
## What to read next
|
|
103
105
|
|
|
@@ -99,9 +99,9 @@ For a self-deployed process, leave `defaultBackend()` in place or choose an expl
|
|
|
99
99
|
|
|
100
100
|
## 5. Build-time sandbox prewarm
|
|
101
101
|
|
|
102
|
-
During
|
|
102
|
+
During Vercel-targeted builds, eve prewarms reusable Vercel sandbox templates so the first session doesn't pay the cold-start cost. This includes hosted builds and local `vercel build` runs:
|
|
103
103
|
|
|
104
|
-
- Prewarm runs
|
|
104
|
+
- Prewarm runs for hosted Vercel builds and linked local `vercel build` runs.
|
|
105
105
|
- A sandbox with no `bootstrap()` and no workspace seed files gets skipped.
|
|
106
106
|
- Seed-only templates are keyed by skills and workspace file contents, so unchanged seeds reuse a template across deploys.
|
|
107
107
|
- Templates with a `bootstrap()` are keyed by the optional resolved `revalidationKey()` plus the authored sandbox source and seed contents, so matching inputs reuse a template across deploys.
|
|
@@ -109,7 +109,7 @@ During hosted builds, eve prewarms reusable Vercel sandbox templates so the firs
|
|
|
109
109
|
- Prewarming only covers template construction. `onSession()` still runs at runtime, once per session.
|
|
110
110
|
- **If build-time prewarm fails, the build fails.**
|
|
111
111
|
|
|
112
|
-
|
|
112
|
+
Local builds must be linked to a Vercel project with credentials that can provision Vercel Sandbox templates. If authentication or template provisioning fails, eve fails the build rather than emitting output that would fail after deployment.
|
|
113
113
|
|
|
114
114
|
## 6. Auth
|
|
115
115
|
|
|
@@ -9,10 +9,12 @@ A single turn can already call several subagents, and parallel tool calls dispat
|
|
|
9
9
|
|
|
10
10
|
## Enable the Workflow tool
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
Export the experimental Workflow definition from `agent/tools/workflow.ts`. The helper name carries the "experimental" warning, but the tool the model actually sees is named `Workflow`.
|
|
13
13
|
|
|
14
14
|
```ts title="agent/tools/workflow.ts"
|
|
15
|
-
|
|
15
|
+
import { experimental_workflow } from "eve/tools";
|
|
16
|
+
|
|
17
|
+
export default experimental_workflow();
|
|
16
18
|
```
|
|
17
19
|
|
|
18
20
|
Without that file, the `Workflow` tool stays off. It earns its keep only when the agent has subagents (or the built-in `agent`) worth coordinating:
|
|
@@ -55,15 +57,12 @@ A workflow reaches only this agent's own agents: the built-in `agent` (a copy of
|
|
|
55
57
|
|
|
56
58
|
Workflow orchestration is capped in two independent ways.
|
|
57
59
|
|
|
58
|
-
**Per-program call budget.** One Workflow program may dispatch at most `
|
|
60
|
+
**Per-program call budget.** One Workflow program may dispatch at most `maxSubagents` subagent calls in total, counted across the whole program — sequential and parallel calls alike. Configure it on `experimental_workflow`; the default is 100. Calls beyond the budget do not start a child session; they resolve inside the program with a `WORKFLOW_SUBAGENT_LIMIT_REACHED` error result, and the budget is stated in the tool's description so the model sizes its fan-out to fit.
|
|
59
61
|
|
|
60
|
-
```ts title="agent/
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
maxSubagents: 4,
|
|
65
|
-
},
|
|
66
|
-
});
|
|
62
|
+
```ts title="agent/tools/workflow.ts"
|
|
63
|
+
import { experimental_workflow } from "eve/tools";
|
|
64
|
+
|
|
65
|
+
export default experimental_workflow({ maxSubagents: 4 });
|
|
67
66
|
```
|
|
68
67
|
|
|
69
68
|
**Root-only orchestration.** Only the root session receives `Workflow`. Children started by a workflow receive neither `Workflow` nor the built-in `agent`, so Workflow programs cannot recurse. A declared child can still call subagents defined in its own directory (see [Subagents](../subagents)).
|
package/docs/reference/cli.md
CHANGED
|
@@ -93,9 +93,11 @@ Run this first when something behaves unexpectedly. It confirms a file was disco
|
|
|
93
93
|
eve build
|
|
94
94
|
```
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
Compiles and bundles in an invocation-owned directory under `.eve/builds/`, then publishes the completed host output and prints its path. Scratch workspaces are removed after success or failure.
|
|
97
97
|
|
|
98
|
-
|
|
98
|
+
Production builds do not write through the stable compiler, host, Nitro, or Workflow files owned by `eve dev`, so builds can run while a local dev server is active. A failed build leaves the last successful `.output/` and agent summary untouched. Concurrent completed builds serialize only the final publication window.
|
|
99
|
+
|
|
100
|
+
Useful stable artifacts written by inspection and development flows under `.eve/` include:
|
|
99
101
|
|
|
100
102
|
| Artifact | Description |
|
|
101
103
|
| ---------------------------------------------- | ---------------------------------------------------- |
|
|
@@ -52,7 +52,7 @@ export default defineTool({
|
|
|
52
52
|
| `mockModel` | `eve/evals` | Deterministic fixture agent models | [Evals](../evals/overview) |
|
|
53
53
|
| `useEveAgent` | `eve/react`, `eve/vue`, `eve/svelte` | frontend | [Frontend](../guides/frontend/overview) |
|
|
54
54
|
|
|
55
|
-
A few non-`define*` helpers round out the set: `disableTool` and `
|
|
55
|
+
A few non-`define*` helpers round out the set: `disableTool` and `experimental_workflow` from `eve/tools` (see [Default harness](../concepts/default-harness)), the route verbs `GET`/`POST`/`PUT`/`PATCH`/`DELETE`/`WS` from `eve/channels`, the approval policies `always`/`once`/`never` from `eve/tools/approval`, and the channel auth helpers `localDev`/`vercelOidc`/`placeholderAuth` from `eve/channels/auth`. To wrap a built-in tool, import its default value from `eve/tools/defaults` (`bash`, `readFile`, `writeFile`, `glob`, `grep`, `webFetch`, `webSearch`, `todo`, `loadSkill`). `AgentReasoningDefinition` is exported from `eve` for the top-level `defineAgent({ reasoning })` setting. `AgentLimitsDefinition` is exported for `defineAgent({ limits })`. `AgentWorkflowDefinition` and `AgentWorkflowWorldDefinition` are exported from `eve` for the `defineAgent({ experimental: { workflow } })` config shape. `ExperimentalWorkflowToolInput` is exported from `eve/tools` for the `experimental_workflow(...)` config shape.
|
|
56
56
|
|
|
57
57
|
## Runtime context (`ctx`)
|
|
58
58
|
|
|
@@ -68,32 +68,32 @@ A few non-`define*` helpers round out the set: `disableTool` and `ExperimentalWo
|
|
|
68
68
|
|
|
69
69
|
## Imports at a glance
|
|
70
70
|
|
|
71
|
-
| Import | Holds
|
|
72
|
-
| ----------------------------------------------------------- |
|
|
73
|
-
| `eve` | `defineAgent`, `defineRemoteAgent`, agent config types
|
|
74
|
-
| `eve/tools` | `defineTool`, `defineDynamic`, `disableTool`, `
|
|
75
|
-
| `eve/tools/defaults` | the built-in tools as plain values
|
|
76
|
-
| `eve/tools/approval` | `always`, `once`, `never`
|
|
77
|
-
| `eve/connections` | `defineMcpClientConnection`, `defineOpenAPIConnection`
|
|
78
|
-
| `eve/channels` | `defineChannel`, route verbs
|
|
79
|
-
| `eve/channels/eve` | `eveChannel`
|
|
80
|
-
| `eve/channels/auth` | `localDev`, `vercelOidc`, `placeholderAuth`
|
|
81
|
-
| `eve/channels/{slack,discord,teams,telegram,twilio,github}` | platform channel factories
|
|
82
|
-
| `eve/hooks` | `defineHook`
|
|
83
|
-
| `eve/schedules` | `defineSchedule`
|
|
84
|
-
| `eve/skills` | `defineSkill`, `defineDynamic`
|
|
85
|
-
| `eve/instructions` | `defineInstructions`, `defineDynamic`
|
|
86
|
-
| `eve/context` | `defineState`, session and state types
|
|
87
|
-
| `eve/sandbox` | `defineSandbox`, backends
|
|
88
|
-
| `eve/instrumentation` | `defineInstrumentation`, `isChannel`
|
|
89
|
-
| `eve/models/openai` | `experimental_chatgpt`
|
|
90
|
-
| `eve/evals` | `defineEval`, `defineEvalConfig`, `mockModel`, eval types
|
|
91
|
-
| `eve/evals/expect` | `includes`, `equals`, `matches`, `similarity`
|
|
92
|
-
| `eve/evals/reporters` | `Braintrust`, `JUnit`, `EvalReporter`
|
|
93
|
-
| `eve/evals/loaders` | `loadJson`, `loadYaml`
|
|
94
|
-
| `eve/react`, `eve/vue`, `eve/svelte` | `useEveAgent`
|
|
95
|
-
| `eve/next`, `eve/nuxt`, `eve/sveltekit` | framework bundler plugins
|
|
96
|
-
| [`eve/client`](../guides/client/overview) | `Client`, `ClientSession`
|
|
71
|
+
| Import | Holds |
|
|
72
|
+
| ----------------------------------------------------------- | --------------------------------------------------------------------- |
|
|
73
|
+
| `eve` | `defineAgent`, `defineRemoteAgent`, agent config types |
|
|
74
|
+
| `eve/tools` | `defineTool`, `defineDynamic`, `disableTool`, `experimental_workflow` |
|
|
75
|
+
| `eve/tools/defaults` | the built-in tools as plain values |
|
|
76
|
+
| `eve/tools/approval` | `always`, `once`, `never` |
|
|
77
|
+
| `eve/connections` | `defineMcpClientConnection`, `defineOpenAPIConnection` |
|
|
78
|
+
| `eve/channels` | `defineChannel`, route verbs |
|
|
79
|
+
| `eve/channels/eve` | `eveChannel` |
|
|
80
|
+
| `eve/channels/auth` | `localDev`, `vercelOidc`, `placeholderAuth` |
|
|
81
|
+
| `eve/channels/{slack,discord,teams,telegram,twilio,github}` | platform channel factories |
|
|
82
|
+
| `eve/hooks` | `defineHook` |
|
|
83
|
+
| `eve/schedules` | `defineSchedule` |
|
|
84
|
+
| `eve/skills` | `defineSkill`, `defineDynamic` |
|
|
85
|
+
| `eve/instructions` | `defineInstructions`, `defineDynamic` |
|
|
86
|
+
| `eve/context` | `defineState`, session and state types |
|
|
87
|
+
| `eve/sandbox` | `defineSandbox`, backends |
|
|
88
|
+
| `eve/instrumentation` | `defineInstrumentation`, `isChannel` |
|
|
89
|
+
| `eve/models/openai` | `experimental_chatgpt` |
|
|
90
|
+
| `eve/evals` | `defineEval`, `defineEvalConfig`, `mockModel`, eval types |
|
|
91
|
+
| `eve/evals/expect` | `includes`, `equals`, `matches`, `similarity` |
|
|
92
|
+
| `eve/evals/reporters` | `Braintrust`, `JUnit`, `EvalReporter` |
|
|
93
|
+
| `eve/evals/loaders` | `loadJson`, `loadYaml` |
|
|
94
|
+
| `eve/react`, `eve/vue`, `eve/svelte` | `useEveAgent` |
|
|
95
|
+
| `eve/next`, `eve/nuxt`, `eve/sveltekit` | framework bundler plugins |
|
|
96
|
+
| [`eve/client`](../guides/client/overview) | `Client`, `ClientSession` |
|
|
97
97
|
|
|
98
98
|
Exported types ship from the same entrypoint as the helper they describe (for example `ToolDefinition` and `ToolContext` from `eve/tools`). For the exhaustive list, read `packages/eve/src/public/index.ts`.
|
|
99
99
|
|
package/docs/subagents.mdx
CHANGED
|
@@ -81,7 +81,7 @@ eve lowers every subagent visible to the current agent (the root built-in copy,
|
|
|
81
81
|
|
|
82
82
|
Declared subagents can call nested subagents defined under their own directories. eve does not apply a separate depth limit; nesting ends where the authored directory tree ends. The built-in `agent` follows the stricter root-only rule above, so `limits.maxSubagentDepth` no longer exists.
|
|
83
83
|
|
|
84
|
-
`Workflow` is also root-only. Child sessions can still call their own declared or remote subagents, but they receive neither `Workflow` nor the built-in `agent`. `
|
|
84
|
+
`Workflow` is also root-only. Child sessions can still call their own declared or remote subagents, but they receive neither `Workflow` nor the built-in `agent`. The Workflow tool's `maxSubagents` option caps the number of calls made by one program (default 100); see [Dynamic workflows](./guides/dynamic-workflows).
|
|
85
85
|
|
|
86
86
|
A declared subagent's tool name is the bare path-derived name, with no prefix. `agent/subagents/researcher/` registers as the tool `researcher`. Unlike connection tools (`<connection>__<tool>`), it carries no namespace, so the model, approvals, logs, and evals all reference it by that name. Its input schema is:
|
|
87
87
|
|
package/docs/tools/overview.mdx
CHANGED
|
@@ -38,6 +38,7 @@ When a tool returns structured data, add an optional `outputSchema`. With Zod or
|
|
|
38
38
|
|
|
39
39
|
- `ctx.session`: session metadata, turn, auth, parent lineage.
|
|
40
40
|
- `ctx.callId`: the id of the current tool call, carried by the call's [stream events](/docs/concepts/sessions-runs-and-streaming) and approval context.
|
|
41
|
+
- `ctx.toolName`: the final runtime name the model called, including any namespace qualification.
|
|
41
42
|
- `ctx.abortSignal`: aborts when the active turn is cancelled. Pass it to cancellation-aware work; sandbox sessions from `ctx.getSandbox()` are already bound to it.
|
|
42
43
|
- `ctx.getSandbox()`: the live [sandbox](/docs/sandbox) handle.
|
|
43
44
|
- `ctx.getSkill(id)`: read a packaged [skill](/docs/skills)'s metadata and files.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eve",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.24.1",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Filesystem-first framework for durable backend AI agents that run anywhere.",
|
|
6
6
|
"keywords": [
|
|
@@ -282,13 +282,13 @@
|
|
|
282
282
|
"nitro": "3.0.260610-beta"
|
|
283
283
|
},
|
|
284
284
|
"devDependencies": {
|
|
285
|
-
"@ai-sdk/anthropic": "^4.0.
|
|
286
|
-
"@ai-sdk/google": "^4.0.
|
|
287
|
-
"@ai-sdk/mcp": "^2.0.
|
|
288
|
-
"@ai-sdk/openai": "^4.0.
|
|
289
|
-
"@ai-sdk/otel": "^1.0.
|
|
290
|
-
"@ai-sdk/provider": "^4.0.
|
|
291
|
-
"@ai-sdk/provider-utils": "^5.0.
|
|
285
|
+
"@ai-sdk/anthropic": "^4.0.14",
|
|
286
|
+
"@ai-sdk/google": "^4.0.14",
|
|
287
|
+
"@ai-sdk/mcp": "^2.0.12",
|
|
288
|
+
"@ai-sdk/openai": "^4.0.13",
|
|
289
|
+
"@ai-sdk/otel": "^1.0.26",
|
|
290
|
+
"@ai-sdk/provider": "^4.0.3",
|
|
291
|
+
"@ai-sdk/provider-utils": "^5.0.9",
|
|
292
292
|
"@chat-adapter/slack": "4.31.0",
|
|
293
293
|
"@chat-adapter/state-memory": "4.31.0",
|
|
294
294
|
"@chat-adapter/twilio": "4.31.0",
|
|
@@ -303,14 +303,14 @@
|
|
|
303
303
|
"@vercel/oidc": "3.5.0",
|
|
304
304
|
"@vercel/sandbox": "2.3.0",
|
|
305
305
|
"@vercel/sdk": "1.28.1",
|
|
306
|
-
"@workflow/core": "5.0.0-beta.
|
|
306
|
+
"@workflow/core": "5.0.0-beta.34",
|
|
307
307
|
"@workflow/errors": "5.0.0-beta.10",
|
|
308
308
|
"@workflow/serde": "5.0.0-beta.2",
|
|
309
309
|
"@workflow/utils": "5.0.0-beta.6",
|
|
310
|
-
"@workflow/world": "5.0.0-beta.
|
|
311
|
-
"@workflow/world-local": "5.0.0-beta.
|
|
312
|
-
"@workflow/world-vercel": "5.0.0-beta.
|
|
313
|
-
"ai": "^7.0.
|
|
310
|
+
"@workflow/world": "5.0.0-beta.20",
|
|
311
|
+
"@workflow/world-local": "5.0.0-beta.28",
|
|
312
|
+
"@workflow/world-vercel": "5.0.0-beta.30",
|
|
313
|
+
"ai": "^7.0.26",
|
|
314
314
|
"autoevals": "0.0.132",
|
|
315
315
|
"chat": "4.31.0",
|
|
316
316
|
"chokidar": "5.0.0",
|
|
@@ -339,7 +339,7 @@
|
|
|
339
339
|
},
|
|
340
340
|
"peerDependencies": {
|
|
341
341
|
"@opentelemetry/api": "^1.0.0",
|
|
342
|
-
"ai": "^7.0.
|
|
342
|
+
"ai": "^7.0.26",
|
|
343
343
|
"braintrust": "^3.0.0",
|
|
344
344
|
"just-bash": "^3.0.0",
|
|
345
345
|
"microsandbox": "^0.5.0"
|