Messages and output
Reference for normalized inbound events, attachments, channel locations, rich output, and delivery status.
Every event includes a unique ID, channel location, provider timestamp, and event-specific fields.
Inbound kinds
message: actor text, attachments, and optional reply targetapproval: approval ID and approve/deny decisionreaction: message target, reaction, and removal stateedit: edited message text and attachmentsfile: one file event and optional associated messagecard: action ID, value, and message targettyping: actor and active stateread-receipt: message ID and read timedelivery: message ID, accepted/sent/delivered/read/failed status, and error
Adapters may emit only the event kinds supported by the provider.
Attachments
An inbound attachment is metadata and an opaque provider reference. resolveAttachment returns bounded bytes only after the channel verifies the reference belongs to the current event. Do not treat url as permission to fetch an arbitrary host.
Outbound kinds
message, status, edit, reaction, file, card, media-group, typing, and read-receipt share channel location, event ID, text, and optional metadata. Approval output adds an ApprovalPrompt with labels and expiration.
Files carry UTF-8 or base64 data. Cards contain a title, body, fields, and actions. Media groups contain opaque media references and fallback text. The adapter maps these into the richest safe provider representation.
Delivery
send returns accepted or sent plus an optional external message ID. Later provider receipts can update delivered, read, or failed state through inbound delivery events. The outbox records completion independently from the model turn.
Channel capabilities are authoritative. A runtime or capability should not emit reactions, edits, cards, typing, or read receipts when the selected adapter declares them unsupported.