Schemas
The JSON Schema of every message of the protocol, where they are served and how an SDK keeps its copy up to date.
Every message of nestor.satellite/1 has a JSON Schema (draft 2020-12). The core generates them
from its message classes, and each one is served where its $id points:
https://nestorhome.dev/schemas/satellite/1/<message>.json
The site is built with the schemas of the server release it pins, so the version in the address is the one the schemas declare.
Messages
Pairing, over HTTP:
| Schema | Body of |
|---|---|
pairing.request |
POST /satellites/pairings |
pairing.ticket |
its 201 answer |
pairing.enrollment |
POST /satellites/pairings/{pairing_id}/enrollment |
pairing.state |
GET /satellites/pairings/{pairing_id} and the enrollment’s answer |
pairing.error |
any refusal |
manifest |
the device’s manifest, in a request and in hello |
On the data channel nestor:
| Schema | Sent by | Means |
|---|---|---|
hello |
device | its manifest, first thing on the channel |
welcome |
core | the room and the capabilities allowed |
intent.expression |
core | show an emotion |
intent.behavior |
core | an attitude: listening, thinking, speaking… |
intent.beat |
core | a word is played: a light accent of speech |
intent.identify |
core | make yourself noticed |
ack |
device | an intent was received |
observation.speech.activity |
device | someone starts or stops speaking |
observation.person.detected |
device | a person is seen |
Keeping a copy in an SDK
An SDK keeps the schemas in its repository and tests every message it sends against them. To refresh the copy, write the schemas of a server release into the SDK’s folder:
uvx --from nestor-home==<version> nestor satellites schemas --out schemas/
<version> is the server release the SDK targets (0.0.2 or later). Then adapt the code until its tests pass. The Python SDK keeps
them in src/nestor_satellite/schemas/, the TypeScript and Rust SDKs in schemas/.