The Oda client drives a running DataMind Oda through its Remote layer: unary calls, long-lived streams and forwarded events travel between the interface you see and the runtime behind it. This page documents the message shapes and rules, so you can read a trace, debug a connection or build a client of your own.
For the different surface that lets a program of your own drive Oda from outside the app, start at the Oda SDK overview.
403, and one it cannot authenticate gets 401.On a stream, each side sends a small set of frames:
| From | Frame | What it does |
|---|---|---|
| Client | open | Opens a logical stream, naming the method it calls and its arguments. |
| Client | item | Sends one uplink item; its value may be omitted. |
| Client | end | Half-closes the uplink: no further items follow. |
| Client | cancel | The consumer has left; the stream is torn down. |
| Runtime | item | Delivers one downlink value. |
| Runtime | error | Ends the stream with a failure: a code, a message and details. |
| Runtime | end | Ends the stream normally. |
end fails that stream with a protocol failure; the connection stays open for its other streams.open for a stream id that is already open.NaN, infinities, negative zero, cycles, class instances, functions, accessor or hidden fields, or symbol keys.gateway/ uplink-overflow, and later items are dropped; uplink items are never replayed.A connection ends with a close code and, usually, a reason:
| Code | Reason | What it means |
|---|---|---|
1000 | disposed | The client was disposed; the connection is closed for good. |
1001 | peer left | The peer's session ended, and its streams close with it. |
1003 | text messages required | A binary message arrived; the connection carries text only. |
1008 | invalid Remote stream request | A malformed message, an unknown message type, or a duplicate open. |
1011 | Remote stream failure could not be delivered | A stream failed and its failure could not be written, so the connection closed. |
4000 | reconnect requested | The client is making a fresh connection attempt. |
4002 | an invalid frame | A frame did not parse; every active stream fails and the connection closes. |
gateway/ cancelled when the caller aborted, with the message Remote invocation "<endpoint>" was aborted; gateway/ uplink-overflow when an uplink overran its bound; gateway/ protocol for an uplink item after the stream had ended; and gateway/ internal for a failure the layer could not classify, with empty details.Nothing is replayed. When the client reconnects, each stream reopens on the new connection and re-reads the state it needs; uplink items and notifications from the old connection are never sent again.
1008?The reason invalid Remote stream request covers a malformed message, an unknown message type, or a second open for a stream id that is already open. Check the frames against the shapes on this page; a duplicate open is the one violation that closes the whole connection.
The value used something the JSON subset does not admit, such as an undefined field, a big integer, NaN, an infinity, negative zero, a cycle, a class instance, or an accessor, hidden or symbol field. Send plain objects, dense arrays and ordinary JSON values instead.
No. A logical stream serves exactly one consumer, and opening a second one fails. When several parts of the interface need the same data, the client shares one stream between them instead of opening another.
It is pinged every two seconds by default, and that interval is also the deadline for the answer. A peer that misses two intervals in a row loses the connection; the interval is a deployment setting, so it can be raised where the default is too quick for the machines involved.
262,144 bytes of frames by default. Over that, the stream fails with gateway/ and later items are dropped. Uplink items are never replayed, so anything that did not get through is lost.
One-way events are not: a notification missed while disconnected is gone. A request that is still waiting for an answer is different; it is sent again to the replacement connection so it can still be answered.
A fixed list, twenty-five entries in the current set: session changes (added, removed, status, activity, branches and errors), preset selection, goal activation changes, model adapter updates, permission catalogue changes, scheduled-task changes, settings updates, and the client's own components (commands, credentials and plugins). An approval request and a user question are on the list as requests. A name outside the list is never forwarded.
A cancelled failure, not a failure from the method: the message reads Remote invocation "<endpoint>" was aborted, and nothing further is kept for the answer.
They are different surfaces. The Remote layer connects the Oda client's own interface to the runtime it drives, as this page describes. The SDK is for a program of your own: a client process talks to a runtime over standard input and output, with the messages in the SDK wire protocol. Start from the Oda SDK overview, or read Automation clients for the serving profiles.