eve 0.54.0 → 0.54.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 +26 -0
- package/dist/src/chunks/{use-eve-agent-BR8EpIOX.js → use-eve-agent-CxPlg0KL.js} +0 -1
- package/dist/src/chunks/{use-eve-agent-XnfjQt1Z.js → use-eve-agent-D-KQzzyW.js} +0 -1
- package/dist/src/cli/dev/tui/setup-commands.js +1 -1
- package/dist/src/cli/dev/tui/tool-presentation.js +1 -1
- package/dist/src/cli/dev/tui/traces/trace-content.d.ts +1 -3
- package/dist/src/cli/dev/tui/traces/trace-content.js +2 -2
- package/dist/src/cli/dev/tui/traces/trace-conversation.js +1 -1
- package/dist/src/cli/dev/tui/traces/trace-view.js +1 -1
- package/dist/src/client/agent-info-schema.d.ts +0 -1
- package/dist/src/client/agent-info-schema.js +1 -1
- package/dist/src/compiled/.vendor-stamp.json +3 -1
- package/dist/src/compiled/just-secrets/LICENSE +21 -0
- package/dist/src/compiled/just-secrets/index.d.ts +20 -0
- package/dist/src/compiled/just-secrets/index.js +2 -0
- package/dist/src/compiled/just-secrets/windows.ps1 +138 -0
- package/dist/src/compiler/default-tool-policy.js +1 -1
- package/dist/src/compiler/extension-compatibility.d.ts +6 -6
- package/dist/src/compiler/extension-compatibility.js +1 -1
- package/dist/src/compiler/manifest.js +1 -1
- package/dist/src/compiler/normalize-manifest-helpers.d.ts +2 -1
- package/dist/src/compiler/normalize-manifest-helpers.js +1 -1
- package/dist/src/compiler/normalize-manifest.js +1 -1
- package/dist/src/compiler/resolve-workspace-subagent.d.ts +13 -0
- package/dist/src/compiler/resolve-workspace-subagent.js +1 -0
- package/dist/src/context/memory-event-lifecycle.d.ts +2 -0
- package/dist/src/context/memory-event-lifecycle.js +1 -1
- package/dist/src/context/memory-lifecycle.d.ts +5 -0
- package/dist/src/context/memory-lifecycle.js +1 -1
- package/dist/src/execution/coordination-dispatch-step.js +1 -1
- package/dist/src/execution/create-session-step.js +1 -1
- package/dist/src/execution/durable-session-migrations/snapshot.d.ts +0 -16
- package/dist/src/execution/durable-session-migrations/snapshot.js +1 -1
- package/dist/src/execution/parked-delivery-wait.js +1 -1
- package/dist/src/execution/session.d.ts +0 -2
- package/dist/src/execution/session.js +1 -1
- package/dist/src/execution/tasks/parent/dispatch.d.ts +1 -12
- package/dist/src/execution/tasks/parent/dispatch.js +1 -1
- package/dist/src/execution/tools/sleep-workflow.js +1 -1
- package/dist/src/execution/tools/subagent/invoke-agent.d.ts +1 -2
- package/dist/src/execution/tools/subagent/invoke-agent.js +1 -1
- package/dist/src/execution/tools/tasks.d.ts +1 -8
- package/dist/src/execution/tools/tasks.js +1 -1
- package/dist/src/execution/workflow-steps.js +1 -1
- package/dist/src/framework/sources/registry.js +1 -1
- package/dist/src/harness/compaction.js +1 -1
- package/dist/src/harness/coordination.js +1 -1
- package/dist/src/harness/emission.js +1 -1
- package/dist/src/harness/execute-tool.d.ts +2 -4
- package/dist/src/harness/messages.d.ts +1 -1
- package/dist/src/harness/messages.js +1 -1
- package/dist/src/harness/model-call-error.d.ts +5 -0
- package/dist/src/harness/model-call-error.js +1 -1
- package/dist/src/harness/semantic-errors/rules/model-provider.js +1 -1
- package/dist/src/harness/step-hooks.d.ts +17 -10
- package/dist/src/harness/step-hooks.js +1 -1
- package/dist/src/harness/tool-loop.js +2 -2
- package/dist/src/instrumentation/content.js +1 -1
- package/dist/src/instrumentation/dispatch.js +1 -1
- package/dist/src/instrumentation/lifecycle.d.ts +7 -3
- package/dist/src/instrumentation/memory.d.ts +72 -0
- package/dist/src/instrumentation/memory.js +1 -0
- package/dist/src/instrumentation/native-events.js +1 -1
- package/dist/src/instrumentation/provider.d.ts +1 -0
- package/dist/src/instrumentation/runtime.d.ts +3 -0
- package/dist/src/instrumentation/runtime.js +1 -1
- package/dist/src/internal/application/package.js +1 -1
- package/dist/src/internal/nitro/routes/index.d.ts +6 -0
- package/dist/src/internal/nitro/routes/index.js +7 -7
- package/dist/src/internal/vercel/assemble-eve-services.js +1 -1
- package/dist/src/internal/vercel/build-agent-workspace.js +1 -1
- package/dist/src/internal/vercel/build-multi-agent-landing-page.d.ts +3 -0
- package/dist/src/internal/vercel/build-multi-agent-landing-page.js +1 -0
- package/dist/src/internal/vercel/eve-service-contribution.d.ts +4 -0
- package/dist/src/internal/vercel/eve-service-contribution.js +1 -1
- package/dist/src/public/definitions/workspace-agent.d.ts +25 -0
- package/dist/src/public/definitions/workspace-agent.js +1 -0
- package/dist/src/public/index.d.ts +1 -0
- package/dist/src/public/index.js +1 -1
- package/dist/src/public/models/openai/chatgpt/credential-store.d.ts +22 -4
- package/dist/src/public/models/openai/chatgpt/credential-store.js +1 -1
- package/dist/src/public/models/openai/chatgpt/oauth.d.ts +6 -4
- package/dist/src/public/models/openai/chatgpt/token-broker.js +1 -1
- package/dist/src/setup/flows/chatgpt-auth.js +1 -1
- package/dist/src/setup/flows/model.d.ts +0 -2
- package/dist/src/setup/flows/model.js +1 -1
- package/dist/src/setup/scaffold/create/project.js +1 -1
- package/dist/src/shared/action-types.d.ts +4 -0
- package/dist/src/shared/action-types.js +1 -1
- package/dist/src/shared/dispatch-action.d.ts +1 -1
- package/dist/src/subagents/callback-route.js +1 -1
- package/dist/src/subagents/callback-step.d.ts +0 -8
- package/dist/src/subagents/callback-step.js +1 -1
- package/dist/src/svelte/index.js +1 -1
- package/dist/src/svelte/use-eve-agent.js +1 -1
- package/dist/src/tasks/delivery-context.d.ts +2 -2
- package/dist/src/tasks/delivery-context.js +2 -2
- package/dist/src/tasks/session-index.d.ts +6 -3
- package/dist/src/tasks/session-index.js +1 -1
- package/dist/src/tasks/session-task-cohorts.d.ts +10 -2
- package/dist/src/tasks/session-task-cohorts.js +1 -1
- package/dist/src/tools/behavior.d.ts +1 -3
- package/dist/src/tools/framework/task-contract.d.ts +0 -4
- package/dist/src/tools/framework/task-contract.js +1 -1
- package/dist/src/tracing/agent-action-instrumentation.js +1 -1
- package/dist/src/tracing/agent-approval-instrumentation.js +1 -1
- package/dist/src/tracing/agent-channel-delivery-instrumentation.js +1 -1
- package/dist/src/tracing/agent-memory-instrumentation.d.ts +13 -0
- package/dist/src/tracing/agent-memory-instrumentation.js +1 -0
- package/dist/src/tracing/agent-otel-content.d.ts +4 -12
- package/dist/src/tracing/agent-otel-content.js +3 -3
- package/dist/src/tracing/agent-otel-provider.js +2 -2
- package/dist/src/tracing/agent-span-contract.d.ts +1 -0
- package/dist/src/tracing/agent-span-contract.js +1 -1
- package/dist/src/tracing/agent-tool-instrumentation.js +1 -1
- package/dist/src/tracing/agent-trace-context-codec.js +1 -1
- package/dist/src/tracing/agent-trace-context-store.js +1 -1
- package/dist/src/tracing/agent-trace-state.d.ts +3 -1
- package/dist/src/tracing/content-attributes.js +1 -1
- package/dist/src/tracing/install-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/concepts/built-in-tools.md +0 -20
- package/docs/concepts/sessions-runs-and-streaming.md +9 -1
- package/docs/guides/frontend/overview.mdx +1 -1
- package/docs/guides/instrumentation.md +65 -30
- package/docs/reference/cli.md +9 -9
- package/docs/reference/typescript-api.md +7 -3
- package/docs/subagents/index.mdx +46 -10
- package/package.json +2 -6
- package/dist/src/execution/tasks/child/update-step.d.ts +0 -6
- package/dist/src/execution/tasks/child/update-step.js +0 -1
- package/dist/src/execution/tasks/child/update.d.ts +0 -8
- package/dist/src/execution/tasks/child/update.js +0 -1
- package/dist/src/public/tools/task-update.d.ts +0 -1
- package/dist/src/public/tools/task-update.js +0 -1
- package/dist/src/tools/framework/task-update.d.ts +0 -5
- package/dist/src/tools/framework/task-update.js +0 -1
|
@@ -48,13 +48,13 @@ Use the `setup` callback to register your OTel provider (for example `registerOT
|
|
|
48
48
|
|
|
49
49
|
Any OTel-compatible backend works (Braintrust, PostHog, Sentry, 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. The [Sentry integration](/integrations/sentry-instrumentation) provides a ready-to-install OTLP exporter that sends traces to Sentry without a Sentry SDK.
|
|
50
50
|
|
|
51
|
-
Three more fields control what the AI SDK
|
|
51
|
+
Three more fields control what eve and the AI SDK record inside those spans (see the AI SDK's [telemetry reference](https://ai-sdk.dev/docs/ai-sdk-core/telemetry)):
|
|
52
52
|
|
|
53
|
-
- `recordInputs` records full message history on each step span. It defaults to `false`; set it to `true` to include input content.
|
|
54
|
-
- `recordOutputs` records model outputs
|
|
53
|
+
- `recordInputs` records full message history on each step span and recalled records on memory spans. It defaults to `false`; set it to `true` to include input content.
|
|
54
|
+
- `recordOutputs` records model outputs. It defaults to `false`; set it to `true` to include output content.
|
|
55
55
|
- `functionId` overrides the function name on spans (defaults to the agent name).
|
|
56
56
|
|
|
57
|
-
eve records metadata without model
|
|
57
|
+
eve records metadata without model, tool, or memory-record content by default. Enable either content category only after reviewing the exporter and its data-retention path.
|
|
58
58
|
|
|
59
59
|
In the provider layout, eve stamps each span with `gen_ai.conversation.id`, which stays fixed across local and remote activations, including independent remote root workflows. Query this attribute to find the conversation's exported, retained traces; it does not grant access or control trace parenting. On Vercel, `vercel.session_id` additionally identifies the current Workflow run. See [Query exported traces](#query-exported-traces) for the cross-backend workflow.
|
|
60
60
|
|
|
@@ -103,19 +103,28 @@ not mark the active span as failed.
|
|
|
103
103
|
The built-in OpenTelemetry provider preserves each span's OTel name and adds
|
|
104
104
|
`operation.name` and `resource.name` for Datadog's operation/resource mapping:
|
|
105
105
|
|
|
106
|
-
| OTel span name | `operation.name` | `resource.name`
|
|
107
|
-
| ----------------------------------------------------------------------- | ----------------- |
|
|
108
|
-
| `invoke_agent weather` | `invoke_agent` | `invoke_agent weather`
|
|
109
|
-
| `
|
|
110
|
-
| `
|
|
111
|
-
| `
|
|
106
|
+
| OTel span name | `operation.name` | `resource.name` |
|
|
107
|
+
| ----------------------------------------------------------------------- | ----------------- | ------------------------ |
|
|
108
|
+
| `invoke_agent weather` | `invoke_agent` | `invoke_agent weather` |
|
|
109
|
+
| `invoke_workflow deploy` | `invoke_workflow` | `invoke_workflow deploy` |
|
|
110
|
+
| `execute_tool search` | `execute_tool` | `execute_tool search` |
|
|
111
|
+
| `chat <model>` | `chat` | `chat <model>` |
|
|
112
|
+
| `search_memory`, `upsert_memory` | Same as span name | Same as span name |
|
|
113
|
+
| `agent.step`, `agent.action`, `agent.approval`, `agent.channel.request` | Same as span name | Same as span name |
|
|
112
114
|
|
|
113
|
-
These
|
|
115
|
+
These rows apply to eve-owned spans in local tracing and the
|
|
114
116
|
[instrumentation provider layout](./instrumentation-providers). They do not
|
|
115
117
|
rename Workflow, AI SDK, or other third-party spans, or change trace IDs,
|
|
116
|
-
parenting,
|
|
117
|
-
|
|
118
|
-
|
|
118
|
+
parenting, or session grouping. Legacy `instrumentation.ts` setup still owns
|
|
119
|
+
its exporter configuration and [authored trace hierarchy](#authored-trace-hierarchy).
|
|
120
|
+
|
|
121
|
+
Workflow action spans enter the sampler as `agent.action`, with
|
|
122
|
+
`gen_ai.operation.name` and `gen_ai.workflow.name` already present. After
|
|
123
|
+
sampling, eve changes the exported span name to `invoke_workflow <tool>`.
|
|
124
|
+
Existing name-based samplers therefore keep their `agent.action` behavior;
|
|
125
|
+
attribute-based samplers can select GenAI workflow operations explicitly.
|
|
126
|
+
Review custom attribute rules when upgrading because the new workflow
|
|
127
|
+
attributes may change their decisions.
|
|
119
128
|
|
|
120
129
|
In Datadog APM, `operation_name:invoke_agent resource_name:"invoke_agent weather"`
|
|
121
130
|
selects named agent invocations. Operation-based dashboards and monitors may
|
|
@@ -137,25 +146,47 @@ that discard span events, including Sentry's [direct OTLP
|
|
|
137
146
|
intake](https://docs.sentry.io/concepts/otlp/direct/traces/). These attributes
|
|
138
147
|
remain available when model and tool content is redacted.
|
|
139
148
|
|
|
149
|
+
## Memory spans
|
|
150
|
+
|
|
151
|
+
eve records [OpenTelemetry GenAI memory spans](https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-spans/#memory) for provider calls. Recalls at `turn.started` and `compaction.completed` use `search_memory`; capture handlers use `upsert_memory`. They are client spans, following the GenAI memory convention for a call to a memory system.
|
|
152
|
+
|
|
153
|
+
Every memory span includes `gen_ai.operation.name` and `gen_ai.memory.store.id`. The store ID is eve's opaque `memory.scope.key`, which identifies the resolved scope without exposing the namespace or scope values. Recall spans set `gen_ai.memory.record.count` to their result count.
|
|
154
|
+
|
|
155
|
+
`gen_ai.memory.records` contains recalled record content only when `recordInputs` is enabled. eve classifies recalled records as input content because they become part of the model context. eve does not set `gen_ai.memory.query.text` because a memory provider receives structured conversation messages, not a standalone search-query string. The `agent.memory.slot` and `agent.memory.phase` attributes identify the eve slot and lifecycle boundary without adding either to the span name.
|
|
156
|
+
|
|
157
|
+
Messages in `gen_ai.input.messages` include a `kind` for user-role entries.
|
|
158
|
+
New human input uses `user`; framework-authored input uses namespaced kinds
|
|
159
|
+
such as `context.instruction` and `execution.background_task`. When resuming
|
|
160
|
+
history saved before eve 0.54, entries without a kind use `legacy.unknown`:
|
|
161
|
+
the old format did not reliably distinguish human input from framework input.
|
|
162
|
+
Their content and metadata remain unchanged, and already classified entries
|
|
163
|
+
retain their kind. Unknown legacy entries are not replayed as the latest human
|
|
164
|
+
request after compaction.
|
|
165
|
+
|
|
140
166
|
## Agent trace contract
|
|
141
167
|
|
|
142
168
|
The provider layout and zero-config local tracing emit the following spans.
|
|
143
169
|
The legacy `instrumentation.ts` layout still uses its authored OTel setup.
|
|
144
170
|
|
|
145
|
-
| Span
|
|
146
|
-
|
|
|
147
|
-
| `invoke_agent <agent>`
|
|
148
|
-
| `agent.step`
|
|
149
|
-
| `chat <model>`
|
|
150
|
-
| `
|
|
151
|
-
| `
|
|
152
|
-
| `
|
|
153
|
-
| `agent.
|
|
171
|
+
| Span | Meaning |
|
|
172
|
+
| ------------------------ | -------------------------------------------------------- |
|
|
173
|
+
| `invoke_agent <agent>` | One agent activation in its own trace |
|
|
174
|
+
| `agent.step` | One model attempt |
|
|
175
|
+
| `chat <model>` | One model call beneath its step |
|
|
176
|
+
| `invoke_workflow <tool>` | One workflow tool run that coordinated a nested agent |
|
|
177
|
+
| `agent.action` | Durable action lifecycle, including dispatch and waiting |
|
|
178
|
+
| `execute_tool <tool>` | In-process tool execution beneath its action |
|
|
179
|
+
| `agent.approval` | Approval waiting beneath its action |
|
|
180
|
+
| `search_memory` | Recall memory records before a turn or after compaction |
|
|
181
|
+
| `upsert_memory` | Automatic memory capture |
|
|
182
|
+
| `agent.channel.request` | Optional HTTP request span in the provider layout |
|
|
154
183
|
|
|
155
184
|
For background tools and subagents, the AI SDK's `execute_tool` span ends when
|
|
156
185
|
the model receives the task receipt. The enclosing `agent.action` span remains
|
|
157
|
-
open until the background task completes, fails, or is cancelled.
|
|
158
|
-
|
|
186
|
+
open until the background task completes, fails, or is cancelled. When a
|
|
187
|
+
workflow tool coordinates a nested `ctx.agent()` call, eve exports that span as
|
|
188
|
+
`invoke_workflow` instead. Its duration, outcome, and usage describe the
|
|
189
|
+
background task rather than the receipt.
|
|
159
190
|
Background tool results follow the output-content policy. Recorded task failure
|
|
160
191
|
details become bounded exception and status messages; redacted spans retain only
|
|
161
192
|
the failure outcome, error status, and error type. The initiating turn can
|
|
@@ -163,10 +194,14 @@ finish or be cancelled while the action remains open. Ending the session closes
|
|
|
163
194
|
an action whose task never reported a terminal result.
|
|
164
195
|
|
|
165
196
|
Schema v4 removes the session-long `agent.session` root and duplicate agent session and lineage attributes. Every eve span carries `agent.trace.schema.version=4` and `gen_ai.conversation.id`; Vercel deployments additionally carry `vercel.session_id`.
|
|
166
|
-
Only activations use the `invoke_agent` operation.
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
197
|
+
Only activations use the `invoke_agent` operation. A workflow tool invocation
|
|
198
|
+
that coordinates at least one nested agent uses `invoke_workflow`, with its
|
|
199
|
+
path-derived tool name in `gen_ai.workflow.name`. Durable workflow tools without
|
|
200
|
+
agent operations, including `sleep`, remain `agent.action` spans. Dispatch
|
|
201
|
+
lifecycle spans use `agent.action` with
|
|
202
|
+
`agent.invocation.role=caller`; the built-in `agent` tool executes under
|
|
203
|
+
`execute_tool agent`. Turn IDs such as `turn_0` are local to a session, so
|
|
204
|
+
correlate turns by session ID and turn ID together.
|
|
170
205
|
|
|
171
206
|
A conversation remains durable state; `gen_ai.conversation.id` joins the activations that operate on it.
|
|
172
207
|
|
|
@@ -373,7 +408,7 @@ Without an `instrumentation.ts`, `eve dev` records spans to disk with one bounde
|
|
|
373
408
|
- [`/traces`](dev-tui#logs-and-traces) in the dev TUI: a live trace viewer that replays captured content as a conversation.
|
|
374
409
|
- [`eve traces`](../reference/cli#eve-traces): a span tree in the terminal, `eve traces ls` to list. Works after `eve dev` exits.
|
|
375
410
|
|
|
376
|
-
Local traces omit model
|
|
411
|
+
Local traces omit model, tool, and memory-record content by default. Set `EVE_TRACES_CONTENT=on` in `.env.local` to capture that content.
|
|
377
412
|
|
|
378
413
|
Writing `instrumentation.ts` replaces this: your `setup` takes over and nothing is recorded locally. For span attributes, retention, and the `EVE_TRACES*` variables, see [`eve traces`](../reference/cli#eve-traces).
|
|
379
414
|
|
package/docs/reference/cli.md
CHANGED
|
@@ -310,13 +310,13 @@ Span rows carry inline metrics when the span recorded them — `↑input`/`↓ou
|
|
|
310
310
|
|
|
311
311
|
Every subagent activation starts its own trace. The first child's `invoke_agent` root links to the dispatching caller with `eve.link.type=agent.dispatch`; remote agents carry that caller context over `traceparent`. Later turns also start fresh traces without repeating the initial caller link. All related sessions retain the same `gen_ai.conversation.id`, and `agent.subagent.name` labels the child invocation.
|
|
312
312
|
|
|
313
|
-
Each `agent()` call inside an authored workflow has its own `agent.action` caller span, including sequential, parallel, and background calls.
|
|
313
|
+
Each `agent()` call inside an authored workflow has its own `agent.action` caller span, including sequential, parallel, and background calls. A workflow tool that coordinates one of those calls has an enclosing `invoke_workflow <tool>` span; a workflow tool without agent calls remains `agent.action`. The tool also keeps its `execute_tool <tool>` span. Only agent execution uses `invoke_agent`.
|
|
314
314
|
|
|
315
315
|
A durable conversation produces one bounded trace per turn. Worker replacements reuse the prepared context for the same turn, while a later turn or an independently replayed attempt starts a fresh trace. Passing the conversation ID shows every trace it produced, oldest first.
|
|
316
316
|
|
|
317
317
|
Every span carries a real duration. A turn's root `invoke_agent` span is written when the turn settles, so a running turn shows only its steps.
|
|
318
318
|
|
|
319
|
-
Model
|
|
319
|
+
Model, `execute_tool`, and memory spans omit their content by default. Set `EVE_TRACES_CONTENT=on` to capture system prompts, prompt messages, and response text for models; call arguments and results for tools; and recalled memory records. Each captured value is capped at 32 KB.
|
|
320
320
|
|
|
321
321
|
Step spans carry token counts under `agent.usage.*`, and cost when Vercel AI Gateway served the call. Model spans also expose `gen_ai.usage.*` token counters. The CLI sums step-level counters only, so model and delegated-call totals are not counted twice.
|
|
322
322
|
|
|
@@ -324,13 +324,13 @@ Step spans carry token counts under `agent.usage.*`, and cost when Vercel AI Gat
|
|
|
324
324
|
|
|
325
325
|
eve sweeps the store when an activation's writes finish, when a session finishes, and when the dev server starts. An open conversation does not pin every completed turn's trace. Sweeps evict oldest-first past the bounds below, except that active traces, the newest traces, and anything written in the last five minutes are kept. A sweep can therefore exceed the size budget. Set the bounds in `.env.local`, which `eve dev` loads automatically; each accepts `off` to disable it individually.
|
|
326
326
|
|
|
327
|
-
| Variable | Default | Effect
|
|
328
|
-
| ---------------------------- | -------------------- |
|
|
329
|
-
| `EVE_TRACES` | on | `off` stops writing traces and stops sweeping
|
|
330
|
-
| `EVE_TRACES_CONTENT` | off | `on` captures model prompt/response
|
|
331
|
-
| `EVE_TRACES_MAX_AGE_MS` | `604800000` (7d) | Age after which a trace may be evicted
|
|
332
|
-
| `EVE_TRACES_MAX_TOTAL_BYTES` | `536870912` (512 MB) | Size budget for the whole store
|
|
333
|
-
| `EVE_TRACES_RETAIN_COUNT` | `20` | Newest traces kept regardless of age or size
|
|
327
|
+
| Variable | Default | Effect |
|
|
328
|
+
| ---------------------------- | -------------------- | --------------------------------------------------------------------------------------------------- |
|
|
329
|
+
| `EVE_TRACES` | on | `off` stops writing traces and stops sweeping |
|
|
330
|
+
| `EVE_TRACES_CONTENT` | off | `on` captures model prompt/response, tool input/output, and memory-record attributes on local spans |
|
|
331
|
+
| `EVE_TRACES_MAX_AGE_MS` | `604800000` (7d) | Age after which a trace may be evicted |
|
|
332
|
+
| `EVE_TRACES_MAX_TOTAL_BYTES` | `536870912` (512 MB) | Size budget for the whole store |
|
|
333
|
+
| `EVE_TRACES_RETAIN_COUNT` | `20` | Newest traces kept regardless of age or size |
|
|
334
334
|
|
|
335
335
|
## `eve link`
|
|
336
336
|
|
|
@@ -192,16 +192,20 @@ Sign in directly from eve; the Codex CLI is not required:
|
|
|
192
192
|
2. Complete sign-in in the browser. If the browser does not open, use the URL printed in the terminal.
|
|
193
193
|
3. Return to eve after the terminal confirms that your subscription is connected. Normal token expiry is refreshed automatically.
|
|
194
194
|
|
|
195
|
-
eve stores
|
|
195
|
+
eve stores your refresh token and account details in your operating system's credential store through [just-secrets](https://github.com/vercel-labs/just-secrets): the login Keychain on macOS, Credential Manager on Windows, or Secret Service on Linux. Access tokens stay in process memory; a new eve process refreshes the saved session when it first needs a token. The login is separate from Codex and is never written to your project.
|
|
196
196
|
|
|
197
|
-
|
|
197
|
+
If you previously signed in through Codex or used eve's `~/.eve/auth/chatgpt.json` file, sign in once through eve after upgrading. eve removes the old plaintext file after successfully saving the new session. It does not fall back to file storage if the OS credential store is unavailable.
|
|
198
|
+
|
|
199
|
+
Linux, including WSL, requires `/usr/bin/secret-tool` (commonly provided by `libsecret-tools`), a session D-Bus, and an unlocked Secret Service keyring. On macOS, unlock your login keychain and allow credential access if prompted. On Windows, PowerShell and Credential Manager must be available in your user session. OS credential storage protects secrets at rest; it does not guarantee isolation from malicious processes running as your OS user.
|
|
200
|
+
|
|
201
|
+
Over SSH, or if localhost port 1455 is occupied, eve shows a device code instead. Open the displayed link in a browser and enter the code. Device sign-in requires enabling device code authorization in **ChatGPT Settings → Security**, or having a workspace admin enable it in workspace permissions. Sign-in times out after five minutes; press **Ctrl+C** to cancel sooner. Device sign-in still requires an available OS credential store; use an API-key model in headless environments without one.
|
|
198
202
|
|
|
199
203
|
ChatGPT subscription credentials are local user credentials. `eve deploy` blocks agents whose active model is `chatgpt()` because those credentials are not uploaded to a deployment. Use an environment branch with a deployable model, or switch to an AI Gateway model before deploying.
|
|
200
204
|
|
|
201
205
|
Troubleshooting:
|
|
202
206
|
|
|
203
207
|
- **`chatgpt-sub login`**: open `/model` and select **Provider** → **ChatGPT subscription** to sign in again. The running dev session picks up the new login.
|
|
204
|
-
- **`chatgpt-sub unavailable`**: check your network connection
|
|
208
|
+
- **`chatgpt-sub unavailable`**: follow the reported OS credential-store recovery steps, or check your network connection if token refresh failed. Retry from `/model`. If eve reports an invalid stored session, sign in again to replace it.
|
|
205
209
|
- **Model rejected by the backend**: model availability depends on the signed-in ChatGPT account. Pick another supported OpenAI model.
|
|
206
210
|
- **Device sign-in unavailable**: enable device code authorization in ChatGPT security settings, or sign in from a local terminal with port 1455 available.
|
|
207
211
|
|
package/docs/subagents/index.mdx
CHANGED
|
@@ -7,13 +7,18 @@ eve supports two ways to delegate work: the root-only built-in `agent` tool, whi
|
|
|
7
7
|
|
|
8
8
|
## Completion batching
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
Overlapping background work owned by a session forms a cohort. Tasks launched in
|
|
11
|
+
later user turns join the open cohort while earlier work is still pending or its
|
|
12
|
+
successful results await delivery. eve holds successful completion notifications
|
|
13
|
+
until every task in that cohort has completed, failed, or been cancelled, then
|
|
14
|
+
delivers the successful results together in one parent turn. Partial completions
|
|
15
|
+
do not invoke the parent model. Work started after the cohort settles forms a new
|
|
16
|
+
cohort. No configuration or debounce timer is required.
|
|
17
|
+
|
|
18
|
+
User messages, input requests, authorization events, failures, and cancellation
|
|
19
|
+
are handled without waiting for the cohort. Child lifecycle events are processed
|
|
20
|
+
before completion delivery so usage accounting and handle cleanup stay ordered.
|
|
21
|
+
To follow work in progress, subscribe to the child session streams.
|
|
17
22
|
|
|
18
23
|
## The built-in `agent` tool
|
|
19
24
|
|
|
@@ -27,7 +32,7 @@ The root session receives `agent` by default. The model calls it to delegate a t
|
|
|
27
32
|
}
|
|
28
33
|
```
|
|
29
34
|
|
|
30
|
-
The copy uses the root's instructions, connections, auth, and sandbox. It receives the same tools except for the root-only `agent` and `Workflow`, and starts with fresh conversation history and fresh state. Its file writes are immediately visible to the root. The built-in `agent` always runs in the background and needs no configuration: each call returns `{ status: "working", taskId, agentId }`, then task notifications wake the parent with
|
|
35
|
+
The copy uses the root's instructions, connections, auth, and sandbox. It receives the same tools except for the root-only `agent` and `Workflow`, and starts with fresh conversation history and fresh state. Its file writes are immediately visible to the root. The built-in `agent` always runs in the background and needs no configuration: each call returns `{ status: "working", taskId, agentId }`, then task notifications wake the parent with completion, failure, or cancellation. Give parallel children non-overlapping write scopes.
|
|
31
36
|
|
|
32
37
|
`agent` is intentionally root-only. Copies created by it cannot call `agent`, and declared subagents never receive the built-in tool. If a stale or forced recursive call reaches execution, eve rejects it instead of starting another child session.
|
|
33
38
|
|
|
@@ -56,12 +61,43 @@ export default defineAgent({
|
|
|
56
61
|
});
|
|
57
62
|
```
|
|
58
63
|
|
|
59
|
-
`description` is required. The parent reads it to decide whether to delegate, so the compiler rejects any subagent whose `agent.ts` leaves it out. Every declared local or remote subagent runs as a durable background task: the call returns `{ status: "working", taskId, agentId }` immediately, then task notifications wake the parent with
|
|
64
|
+
`description` is required. The parent reads it to decide whether to delegate, so the compiler rejects any subagent whose `agent.ts` leaves it out. Every declared local or remote subagent runs as a durable background task: the call returns `{ status: "working", taskId, agentId }` immediately, then task notifications wake the parent with completion, failure, or cancellation. Human input requests surface separately on the parent session.
|
|
60
65
|
|
|
61
|
-
|
|
66
|
+
`task_cancel` is available to sessions that own background tasks, including a child that starts nested background work.
|
|
62
67
|
|
|
63
68
|
A mounted extension can also contribute declared subagents from `extension/subagents/`. The mount namespace prefixes the subagent visible to the consuming agent node: mounting an extension as `crm` exposes its `reviewer` subagent as `crm__reviewer`. The contributed subagent keeps its own isolated tools, connections, skills, hooks, instructions, sandbox, and nested subagents, and its modules can read configuration from the extension handle. See [Extensions](./extensions#add-a-subagent) for the authoring and override behavior.
|
|
64
69
|
|
|
70
|
+
### Vercel workspace peers
|
|
71
|
+
|
|
72
|
+
In a Vercel agent workspace, expose one other workspace member as a remote subagent with `defineWorkspaceAgent`. Create an ordinary file under the caller's `agent/subagents/` directory. Its filename gives the model-visible tool name; `name` identifies the peer under `agents/`.
|
|
73
|
+
|
|
74
|
+
```ts title="agents/foreman/agent/subagents/research.ts"
|
|
75
|
+
import { defineWorkspaceAgent } from "eve";
|
|
76
|
+
|
|
77
|
+
export default defineWorkspaceAgent({
|
|
78
|
+
name: "research",
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
The helper uses the peer's root `defineAgent({ description })` value as the model-visible tool description. Pass `description` to override it for this caller. When `transport` is omitted, eve selects the built-in transport for the runtime environment. Vercel deployments route through the current deployment and authenticate with the caller's Vercel OIDC token. Outside Vercel, provide an explicit transport with `url` and optional `auth` or `headers`:
|
|
83
|
+
|
|
84
|
+
```ts title="agents/foreman/agent/subagents/research.ts"
|
|
85
|
+
import { defineWorkspaceAgent } from "eve";
|
|
86
|
+
import { bearer } from "eve/agents/auth";
|
|
87
|
+
|
|
88
|
+
export default defineWorkspaceAgent({
|
|
89
|
+
name: "research",
|
|
90
|
+
transport: {
|
|
91
|
+
url: () => process.env.RESEARCH_AGENT_URL!,
|
|
92
|
+
auth: bearer(() => process.env.RESEARCH_AGENT_TOKEN!),
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
An explicit transport replaces the environment default completely. The receiving peer must still accept the transport's credentials through its channel authentication policy. Set `forwardPrincipal: true` only when the peer trusts the caller to forward user identity, as described in [Remote agents](./guides/remote-agents#forward-the-callers-identity).
|
|
98
|
+
|
|
99
|
+
Use the peer's directory name under `agents/`. eve requires an exact workspace-member match, so add another declared subagent file for each additional peer. `eve dev` does not provide local workspace routing; configure an explicit transport to target a separately running peer.
|
|
100
|
+
|
|
65
101
|
### Conditional availability
|
|
66
102
|
|
|
67
103
|
To expose a declared subagent only for certain sessions or turns, export
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eve",
|
|
3
|
-
"version": "0.54.
|
|
3
|
+
"version": "0.54.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Filesystem-first framework for durable backend AI agents that run anywhere.",
|
|
6
6
|
"keywords": [
|
|
@@ -186,11 +186,6 @@
|
|
|
186
186
|
"import": "./dist/src/public/tools/task-cancel.js",
|
|
187
187
|
"default": "./dist/src/public/tools/task-cancel.js"
|
|
188
188
|
},
|
|
189
|
-
"./tools/task_update": {
|
|
190
|
-
"types": "./dist/src/public/tools/task-update.d.ts",
|
|
191
|
-
"import": "./dist/src/public/tools/task-update.js",
|
|
192
|
-
"default": "./dist/src/public/tools/task-update.js"
|
|
193
|
-
},
|
|
194
189
|
"./tools/glob": {
|
|
195
190
|
"types": "./dist/src/public/tools/glob.d.ts",
|
|
196
191
|
"import": "./dist/src/public/tools/glob.js",
|
|
@@ -498,6 +493,7 @@
|
|
|
498
493
|
"jose": "6.2.3",
|
|
499
494
|
"jsonc-parser": "3.3.1",
|
|
500
495
|
"just-bash": "3.1.0",
|
|
496
|
+
"just-secrets": "0.0.2",
|
|
501
497
|
"marked": "17.0.6",
|
|
502
498
|
"microsandbox": "0.5.5",
|
|
503
499
|
"next": "16.3.4",
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { TaskInboundUpdate } from "#tasks/types.js";
|
|
2
|
-
/** Forwards a local task-owned child's progress update to its active parent hook. */
|
|
3
|
-
export declare function forwardLocalTaskUpdateStep(input: {
|
|
4
|
-
readonly parentContinuationToken: string;
|
|
5
|
-
readonly update: TaskInboundUpdate;
|
|
6
|
-
}): Promise<void>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{resumeHook}from"#internal/workflow/runtime.js";async function forwardLocalTaskUpdateStep(e){"use step";await resumeHook(e.parentContinuationToken,e.update)}export{forwardLocalTaskUpdateStep};
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { ChannelAdapter } from "#channel/adapter.js";
|
|
2
|
-
import type { TaskInboundUpdate } from "#tasks/types.js";
|
|
3
|
-
/** Delivers a task update through the local child adapter or remote callback. */
|
|
4
|
-
export declare function deliverTaskUpdate(input: {
|
|
5
|
-
readonly adapter?: ChannelAdapter;
|
|
6
|
-
readonly callback: unknown;
|
|
7
|
-
readonly update: TaskInboundUpdate;
|
|
8
|
-
}): Promise<string | undefined>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{fireTaskUpdateCallbackStep}from"#subagents/callback-step.js";import{forwardLocalTaskUpdateStep}from"#execution/tasks/child/update-step.js";import{SUBAGENT_ADAPTER_KIND,isSubagentAdapterState}from"#subagents/adapter-state.js";async function deliverTaskUpdate(e){let t=e.adapter?.state;return e.adapter?.kind===SUBAGENT_ADAPTER_KIND&&isSubagentAdapterState(t)&&t.taskId!==void 0?(await forwardLocalTaskUpdateStep({parentContinuationToken:t.parentContinuationToken,update:e.update}),t.taskId):await fireTaskUpdateCallbackStep({callback:e.callback,callId:e.update.callId,message:e.update.message,updateEpoch:e.update.updateEpoch,updateIndex:e.update.updateIndex})}export{deliverTaskUpdate};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { taskUpdate, taskUpdate as default } from "#tools/framework/task-update.js";
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{taskUpdate,taskUpdate as task_update_default}from"#tools/framework/task-update.js";export{task_update_default as default,taskUpdate};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export declare const TASK_UPDATE_SESSION_INSTRUCTION = "Background task updates\nYou are running as a background task. For multi-step work, use `task_update` at meaningful milestones to briefly state what you are currently doing. Keep updates terse and activity-focused; do not include preliminary findings or results. Do not wait for a response, and return your final result normally.";
|
|
2
|
-
export declare const taskUpdate: import("#tools/native-definition.js").NativeToolDefinition<{
|
|
3
|
-
message: string;
|
|
4
|
-
}, unknown>;
|
|
5
|
-
export default taskUpdate;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{TASK_UPDATE_INPUT_SCHEMA}from"#tools/framework/task-contract.js";import{defineNativeTool}from"#tools/native-definition.js";const TASK_UPDATE_SESSION_INSTRUCTION="Background task updates\nYou are running as a background task. For multi-step work, use `task_update` at meaningful milestones to briefly state what you are currently doing. Keep updates terse and activity-focused; do not include preliminary findings or results. Do not wait for a response, and return your final result normally.",taskUpdate=defineNativeTool({description:`Briefly tell the parent agent what this background task is currently doing. Report activity, not preliminary findings or results.`,inputSchema:TASK_UPDATE_INPUT_SCHEMA},{availability:[`delegated-task-child`],handling:{action:`task-update`,kind:`dispatch`}});export{TASK_UPDATE_SESSION_INSTRUCTION,taskUpdate as default,taskUpdate};
|