The contracts below are stable for documented required fields during the v0.2 line. Nebula may add optional fields, event types, or workflow metadata without a breaking-version bump. Treat unknown fields and unknown event types as forward-compatible extensions.
Live memory events
Nebula exposes live memory events over:ws:// or wss://; a plain HTTP GET will not stream events.
Mint a ticket with:
Client frames
Subscribe after the socket opens:
Ack processed events:
Server frames
Successful subscribe:action: "error" or action: "subscribe_error" with a reason string. Heartbeats receive:
Event types
Current published event types:
A machine-readable schema is available at
/enterprise/memory-events.schema.json in the docs bundle.
Delivery semantics
The Postgres backend appends events topublic.memory_events, emits LISTEN/NOTIFY, and replays missed events from the durable event log using last_ack_seq. Delivery is at least once within the retention window. Clients should ack after processing and deduplicate by seq on the WebSocket stream.
If event signing is configured, event frames include a signature object. Ed25519 detached signatures are the preferred stream-authenticity format; AWS KMS signing is available when private key material should remain outside the API process. AWS KMS signatures use P-256 ECDSA and encode the raw fixed-width r || s signature bytes as base64url.
Verification is offline and in-process. Fetch the public keyset from GET /v1/memory-events/signing-keys, pin the expected key material and kid, then verify each detached signature against the canonical JSON bytes of the same frame with signature removed, serialized with sorted keys and compact separators. The signed bytes include seq and ts, so consumers can detect tampering with ordering fields. To reject replay or reorder of otherwise valid old events, consumers should maintain a monotonic high-water seq per stream and reject events at or below the last processed sequence; timestamp policy can be applied after signature verification. Control frames are not signed.
Memory events are no longer published through the legacy SQS/API Gateway WebSocket path. Postgres is the single event backend for enterprise deployments.
Event injection
There is no public endpoint for posting arbitrary memory events into Nebula. Smoke tests should use synthetic JSONL fixtures or trigger normal memory ingestion and subscribe toingestion_progress.
Nebula has an environment-gated test-seed router for internal connector E2E tests. It is not a production ingestion or replay API.