Status: accepted, 2026-09-16
Context#
Eve exposes ten named SSE frames. They predate AG-UI and are consumed by the web panel and buffered mobile response path. Similar event names do not make the wire compatible.
This decision compares Eve to AG-UI release/2026-09-14, commit
8143a12313e857b1fbc882e4568df3f0d852fa9f, observed on 2026-09-16. The
canonical TypeScript event source hashes to
667c9577913e6c51737fef6463f088e6e39f4d7f6d1046727f7f76ec90a9e362; the types
and interrupt sources hash to
454d1638a94cf35d17b2322f29b7211641dd0df38f986069858956a27da159ef and
f7413abc6cb66497c5a153db2a59dff870e6ec3d5b0e817461d1f9b0acaa8887.
The executable inventory is
apps/oshun/bff/src/assistant/turn-event-protocol.ts. It found four public
frames omitted from the route's prior comment: turn.memory, turn.ui,
turn.inspection, and turn.client_tool_input. turn.inspection is emitted
indirectly through the reply-inspection publisher, which a literal-only route
scan misses.
Decision#
Keep eve.turn-events.v1 bespoke. Do not rename its events and do not claim
AG-UI conformance. No compatibility adapter ships in this task.
All nine requested vocabulary dimensions are assessed. Seven are partial, cancellation is local-only, snapshots are absent, and none is exact. A truthful adapter has at least nine substantive obligations: stable run/message identity, ordered text lifecycle without terminal supersession, privacy-safe tool lifecycle, shared state and JSON Patch, interrupt-boundary snapshots, new-run resume semantics, explicit cancellation behavior, one terminal error, and validation against an independent implementation.
The largest semantic conflict is not spelling. Eve may stream text and later
replace it in turn.complete after safety or grounding checks. Its client-tool
bridge also holds the same HTTP run open, whereas AG-UI finishes an interrupted
run after state/message snapshots and resumes with a new run. Translating either
shape by changing event names would manufacture guarantees the wire does not
have.
Consequences#
- Existing clients and public frame names do not change.
- The route sink accepts only the ten inventoried names, and a source census fails when production emits an unreviewed frame.
- AG-UI remains an optional interoperability target, not an adopted protocol.
- Reconsider an adapter after Tasks 8.5 and 8.9 settle stop/resume and streaming/buffered parity, and Task 16.6 can run it against an independent AG-UI implementation.
- The inventory measures compatibility work; it does not prove AG-UI conformance, client interoperability, or that an adapter is worthwhile.