Light-weight (callback_id, payload) pair used as the image-tap
action on RichImage and ImageComponent. Distinct from
RichAction because image taps never need a label or visual style
— they just dispatch through the same host-supplied OnCustomCallback
channel that buttons use.
Single canonical mapping from the server/preview config shape
(RemoteConfig) to the runtime BotConfiguration. Used by BOTH the
real /api/project/config/ fetch (ChatRepository) AND the dashboard
live-preview (web_embed parses the postMessage payload via
RemoteConfig.fromJson then calls this). Keeping it in one place
means a new server config field only has to be added to RemoteConfig
Signature for the host-provided image uploader. Called by
ChatViewModel.sendMessage when the user attaches a photo and the
host has wired ChatViewModel.imageUploader (or
ChatWidget.imageUploader which forwards to it).
Builder the host registers to render a host_slot component with its own
native widget. The SDK calls it with the slot's slotId and payload
(carried in the message JSON); return the widget to inline in the bubble.