Expand description
notifications.* method types — paginated history + ack +
push for incoming notifications.
The notification lifecycle (SPEC §2.12.8 emergency example):
- Operator publishes via backend HTTP API → backend writes to
NATS
NOTIFICATIONSJetStream. - Agent consumes the stream, fans out to connected clients via
notifications.newpush. - User clicks “確認” → client sends
notifications.ack→ agent writesnotifications_readKV (keyed by{pc_id}.{user_sid}.{notification_id}) AND publishesevents.notifications.acked.{pc_id}.{user_sid}.{notification_id}so the SPA can show per-user confirmation status. - Past notifications stay queryable via
notifications.list— that’s the recovery path when the agent missed a push during a network blip.
Structs§
- Notification
- Notification body — used both for
NotificationsListResultentries and theNotificationNewParamspush. - Notification
AckEntry - One recipient’s confirmation record for a notification.
- Notification
AckStatus - Response of
GET /api/notifications/{id}/ack_status— every(pc_id, user_sid, acked_at)tuple recorded for the notification, powering the SPA’s “who confirmed when” view. - Notification
Acked - Body of the
events.notifications.acked.{pc_id}.{user_sid}.{notif_id}event the agent publishes when a user acks a notification. The backend’s notification-acks projector reads these fields from the JSON body (not by parsing the subject) so an id / SID containing a.can’t desync the projected row from its subject tokens. - Notification
Detail - Response of
GET /api/notifications/{id}— one sent notification’s full content (so the SPA can show “what was sent”, including thebodythe history table truncates away) paired with its per-recipient confirmation list. Powers the deep-linkable/notifications/{id}detail page, which an operator opens in a new tab from the history list (Ctrl/⌘ click), mirroring the Activity → result-detail deep link. - Notification
NewParams - Push payload for
notifications.new. The full notification body inline — no second round-trip needed. - Notifications
AckParams notifications.ackparams — mark this notification read for the caller’s user (SID derived from the OS at connect time, NOT from the payload). SPEC §2.12.4 forbids ack-ing other users’ notifications even on a shared PC — the agent rejects withUnauthorizedif the notification’s audience doesn’t include the caller.- Notifications
AckResult notifications.ackresponse — confirms the agent persisted the ack and published theevents.notifications.acked.>event.- Notifications
List Params notifications.listparams — paginated history of notifications this user has received (per-user, scoped via OS SID).- Notifications
List Result notifications.listresponse.- Notifications
Subscribe Params - Notifications
Subscribe Result - Notifications
Unsubscribe Params - Publish
Notification Request - Operator-facing request body for
POST /api/notifications(and the equivalentnotifications/*.yamlmanifest, SPEC §2.4.1). The backend mints theNotification::id(whenidis omitted) andNotification::issued_at, resolvestargetinto thenotifications.{all|group.X|pc.Y}fan-out subjects, and publishes oneNotificationper resolved subject into theNOTIFICATIONSstream. - Publish
Notification Response - Response of
POST /api/notifications— the minted/echoed id plus the subjects the notification fanned out to, so the operator UI can confirm the resolved audience.
Enums§
- Notification
Priority - Severity ladder. Drives the SPA color, toast/dialog choice, and
whether the Client App grabs window focus on push arrival.
#[non_exhaustive]so a future SPEC can add severities (e.g.Criticalabove Emergency) without a wire bump. - Notifications
Filter - History-list filter selector.