Compatibility¶
| NexusLabs.Eve | Reference eve | Stream protocol | Status |
|---|---|---|---|
| Unreleased | 0.50.0 | 25 | Development compatibility target |
| 0.1.0-alpha.9 | 0.45.0 | 23 | Current prerelease |
| 0.1.0-alpha.8 | 0.44.4 | 23 | Previous compatibility target |
| 0.1.0-alpha.7 | 0.44.0 | 23 | Previous compatibility target |
| 0.1.0-alpha.6 | 0.35.0 | 22 | Previous compatibility target |
| 0.1.0-alpha.5 | 0.34.0 | 21 | Previous compatibility target |
| 0.1.0-alpha.4 | 0.32.0 | 21 | Earlier compatibility target |
| 0.1.0-alpha.4+ | 0.31.0 | 21 | Minimum supported release |
| 0.1.0-alpha.3 | 0.29.4 | 20 | Final release for eve 0.29.x-0.30.x |
| 0.1.0-alpha.3 | 0.27.6 | 19 | Tolerated by that release, not gated by CI |
Minimum supported eve release¶
This package requires eve 0.31.0 or newer and cannot talk to an earlier server.
EveProtocol.MinimumEveVersion declares the line in code.
eve 0.31.0 moved session control operations from fixed continuation-token body routes to
identifier-addressed routes:
| Operation | eve 0.30.x and earlier | eve 0.31.0 and newer |
|---|---|---|
| clear | POST /eve/v1/session/clear |
POST /eve/v1/session/{sessionId}/clear |
| compact | POST /eve/v1/session/compact |
POST /eve/v1/session/{sessionId}/compact |
| reset | POST /eve/v1/session/reset |
POST /eve/v1/session/{sessionId}/reset |
The identifier-addressed routes return HTTP 404 on an older server, and continuation tokens are
no longer accepted or returned anywhere in the client protocol. There is no negotiation or
fallback: a protocol cutover has no half-migrated state. Pin 0.1.0-alpha.3 to target an eve
0.29.x or 0.30.x agent.
Session creation, follow-up turns, streaming, and cancellation route identically on both sides
of the boundary, so only the three control operations moved. The turn body still differs: an
eve 0.30.x or earlier server requires continuationToken to continue a session, and an eve
0.31.x server rejects that field. A mismatched pair therefore completes the first turn and
fails the second. See Migration for the observed behavior in both directions
and the required order of operations.
ClearAsync and CompactAsync require eve 0.30.0 or newer even in 0.1.0-alpha.3; those
two routes did not exist in eve 0.29.x.
eve remains preview software. Package upgrades should therefore validate both:
- The public HTTP route and body contracts.
- The durable message-stream protocol version and event shapes.
The repository contains a pinned eve 0.50.0 fixture with a deterministic
model. CI builds the real server and verifies health, info, text turns,
attachment staging, streaming, bounded catch-up reads, cooperative cancellation,
approval-gated human input, callback-backed connection authorization, session context
clear, and session reset through the C# client, including the HTTP 409 refusal returned
when a retired session identifier is reused.
Event parsing stays tolerant of older stream protocols: durable event
identifiers and input-request discriminators are both projected as absent
rather than causing a failure. That tolerance is covered by contract tests, not
by the pinned fixture, and it does not extend the supported server range, which
the identifier-addressed control routes fix at eve 0.31.0 and newer.
Preliminary tool output¶
Stream protocol 21 adds action.partial, emitted for each non-terminal snapshot
yielded by an async-generator tool. EveStreamEventKind.ActionPartial recognizes it, and
the terminal action.result continues to carry the value exposed to the model. Treat
partial snapshots as provisional display state and never as a final tool result.
Run trace context¶
Stream protocol 22 adds an optional trace object to session.started and
turn.started, carrying the W3C traceId, spanId, and traceFlags for correlating a
run with an external observability backend. It added no event type and removed none.
The field is available through EveStreamEvent.Data rather than projected, so an
unrecognized future field on the same object stays readable. An agent older than eve
0.35.0 omits it entirely.
Eve 0.37.1 and 0.38.x¶
The framework-neutral session routes used by this package, agent-info schema version 2,
and message-stream protocol version 22 remain unchanged through eve 0.38.3.
eve 0.37.1 changed active response lifetime and added metadata to existing
subagent and authorization events. Active SendAsync and RespondAsync responses now
reconnect until a turn boundary or caller cancellation, while raw event data preserves
the child-stream path plus optional background-task receipt and authorization attempt ID.
eve 0.38.0 added response-scoped exact-turn cancellation to the TypeScript client.
EveMessageResponse.CancelAsync provides the same coordination over the existing guarded
cancel route. eve 0.38.1 through 0.38.3 add no further framework-neutral client
requirement.
Resolved human input¶
Stream protocol 23, introduced by eve 0.39.1, adds input.resolved after the
server accepts a pending human-input batch and before the resumed step.started.
EveStreamEventKind.InputResolved recognizes the event, and
EveTurnOutcome.InputResolutions projects every request kind, terminal outcome,
optional accepted response, and original turnId, stepIndex, and sequence.
The known outcomes are Answered, Approved, Denied, Ignored, and Invalid.
Future values remain available through RawOutcome, while the complete resolution
object remains available through Raw. A resolution without a response is authoritative
and is not dropped.
Open stream read-idle recovery¶
Eve 0.44.1 includes the framework-neutral stream reliability change merged in
vercel/eve#2379. Every open stream read has a
fixed 15-second idle deadline; a socket that remains connected without producing bytes
is closed and reopened from the absolute cursor after every fully consumed event.
This behavior changes no route, payload, event shape, stream protocol version, or agent-info schema.
Callback-backed connection authorization¶
eve 0.41.0 can emit an interim session.waiting after
authorization.required while a framework-owned callback is pending. Active
SendAsync and RespondAsync responses remain attached across that parking boundary,
correlate pending authorizations by data.name, and settle at the next session boundary
after matching authorization.completed events clear every pending name.
An authorization.required event without webhookUrl remains non-blocking, so the next
session.waiting settles normally. The stream protocol remains 23, the agent-info
schema remains version 2, and the core session routes are unchanged. See
Streaming for consumption guidance.
Exact channel input responses¶
Eve 0.42.0 rejects channel input-response objects containing fields outside the exact
text, choice, confirmation, or tool-approval response contract. The sealed
EveInputResponse model and whitelist request writer already emit only the permitted
keys, so this upstream tightening requires no .NET request-shape change.
Eve 0.43.0 through 0.44.4¶
The core session routes, stream event vocabulary, message-stream protocol 23, and
agent-info schema version 2 remain unchanged through eve 0.44.4. Eve 0.44.1
contains the open-read recovery described above. Eve 0.44.4 fixes replay-to-live
continuation in the excluded JavaScript store; the .NET session cursor and stream
follower already expose the underlying bounded replay and active-follow behavior.
Eve 0.45.0 and agent-info schema v3¶
Eve 0.45.0 raises agent inspection to schema version 3. GetInfoAsync accepts the
canonical v3 source graph while retaining schema versions 1 and 2, and continues to
expose every field through EveAgentInfo.Raw.
Version 3 is validated as a distinct contract rather than accepted by version number
alone. The client rejects relabeled v2 documents, missing canonical collections,
duplicate public identities, normalized channel-route collisions, incorrect subagent or
remote-agent totals, module sources without bindings, and bindings whose owner or logical
path disagrees with their source.
The pinned Eve 0.50.0 fixture exercises this schema through the real compatibility
probe.
Eve 0.45.1 and agent-info schema v4¶
Eve 0.45.1 raises agent inspection again to schema version 4.
GetInfoAsync accepts and strictly validates the required memory-provider inspection
surface while retaining schema versions 1 through 3.
Version 4 requires a memories collection with unique slots, canonical source
provenance, and scope or session visibility. It also adds memory counts to local
subagent summaries, optional dependency and parameter maps to programmatic source
backings, and a required direct or derived form on source descriptors. The published
schema rejects the pre-release memory tools field. Every valid field remains available
through EveAgentInfo.Raw.
The pinned Eve 0.50.0 fixture exercises schema v4 through the real compatibility probe.
Eve 0.48.0 may include workflow-tool-call kernel effects for durable workflow tools;
these effects remain available through EveAgentInfo.Raw.
Strict health response validation¶
Eve 0.45.0 strictly validates successful GET /eve/v1/health responses. The exact
shape is ok: true, status: "ready", and a nonempty string workflowId; unknown
properties are rejected. A whitespace-only workflow identifier remains nonempty and is
therefore valid.
GetHealthAsync reports successful-response validation failures through
EveHealthResponseException. Its bounded Issues collection exposes at most five
path-qualified diagnostics without requiring callers to parse an exception message.
Invalid JSON preserves the parser failure as the inner exception and reports no
structured issues. Non-success HTTP responses continue to use EveClientException.
The pinned Eve 0.50.0 fixture exercises this strict health response through the real
compatibility probe.
Streamed tool inputs¶
Stream protocol 24, published by Eve 0.46.1, adds durable
action.input.appended events while a model streams one tool call's input.
EveStreamEventKind.ActionInputAppended recognizes each event while
EveStreamEvent.Data retains the text delta, zero-based UTF-16 code-unit offset,
tool-call identifier, tool name, and turn, step, and sequence coordinates.
The events remain in wire order through EveTurnOutcome.Events and do not end a
response. When assistant text precedes a tool call, message.completed may therefore
appear before one or more input deltas. Reconstruct cumulative input only from contiguous
offsets. The TypeScript UI reducer's replacement, gap, and cleanup policy is not ported.
Upstream eve lets generic per-request headers replace authentication. NexusLabs.Eve requires an explicit client allowlist and dedicated per-call override for protected headers so existing generic header bags cannot silently replace credentials.
Unknown event types remain available through EveStreamEvent.Type and Data
instead of causing deserialization failure.
Delta-only stream events and version-aware decoding¶
Stream protocol 25, introduced by Eve 0.50.0, persists text stream events
(message.appended, reasoning.appended, action.input.appended) as deltas only.
Every stream response must declare its version via the required x-eve-stream-version
response header (versions 21 through 25 are supported).
The .NET client validates each response version on initial connections and reconnects.
For legacy stream events (v21–v24), cumulative properties (messageSoFar,
reasoningSoFar, inputTextOffset) are validated against stream position and normalized out
of the event data so callers receive a consistent delta-only shape across server versions.
Version 25 events containing legacy cumulative fields, missing deltas, invalid legacy snapshots,
or unsupported/missing stream version headers raise EveProtocolException.
Stream event identity¶
Stream protocol version 20 stamps every persisted event with a stable
evt_-prefixed identifier. EveStreamEvent.Metadata.Id projects it when
present and reports null for events persisted under earlier protocol
versions, which cannot be deduplicated. The compatibility probe asserts that
the pinned server stamps a well-formed identifier on every event of a turn and
never repeats one.
Upstream parity radar¶
The repo-local eve-client-upstream-radar Copilot skill under
.github/skills/ compares the declared eve release baseline with current
vercel/eve main. It filters to framework-neutral client and protocol changes,
checks committed origin/main source for an existing equivalent, and can file
deduplicated, agent-ready issues for confirmed gaps.
The skill resolves this repository from its own location, while generated inventories and reports live under the current user's local application-data folder. Machine-specific checkout paths and Narnia cadence configuration are deliberately not committed.
Bounded catch-up reads (EveStreamOptions.Follow = false) depend on the
includeTailIndex=1 stream query parameter and the x-eve-stream-tail-index
response header. The pinned server reports the header, so the compatibility
probe verifies a real bounded read: the first request asks for the tail,
reconnects never re-request it, and the read stops exactly at the durable bound
while advancing the stored cursor. A server that omits the header, or reports a
malformed or out-of-range value, fails with EveProtocolException instead of
silently degrading to a live follow. eve 0.27.6 accepted the query parameter
without reporting the header, so bounded reads against that release fail.
Input request kinds¶
eve stamps each human-input request with a framework-owned kind of question,
tool-approval, or session-limit. EveInputRequest.Kind projects it and
EveInputRequest.RawKind preserves the wire value, so an unmodelled future kind
stays inspectable instead of being misclassified from its option shape.
The compatibility probe drives a real approval-gated tool against the pinned
fixture, asserts the request arrives as tool-approval, answers it, and
verifies the turn resumes. A server that predates the discriminator reports
EveInputRequestKind.Unknown with a null raw value.