/**
 * Public types for the Chat tool — single source of truth.
 *
 * Shapes here are the contract between transport adapters, the reducer,
 * the hooks layer and the components. Keep serializable (no Date, no Map).
 *
 * Organized by domain:
 *   persona     — identity (role, ChatPersona, user/assistant contexts)
 *   tool-call   — ChatToolCall
 *   attachment  — ChatAttachment, ChatSource
 *   message     — ChatMessage (composes the above)
 *   labels      — UI strings + DEFAULT_LABELS
 *   config      — ChatConfig + ChatPrefs + display mode
 *   events      — ChatStreamEvent SSE union
 *   session     — Session/history/stream/send option shapes
 *   transport   — ChatTransport interface
 */

export type { ChatRole, ChatPersona, ChatUserContext, ChatAssistantContext } from './persona';
export type { ChatToolCall } from './tool-call';
export type { ChatAttachment, ChatSource } from './attachment';
export type {
  MessageBlock,
  MessageBlockKind,
  BlockAppearance,
  TextBlock,
  MarkdownBlock,
  AudioBlock,
  VideoBlock,
  ImageBlock,
  GalleryBlock,
  MapBlock,
  JsonBlock,
  MermaidBlock,
  CodeBlock,
  LottieBlock,
  CustomBlock,
} from './block';
export type { ChatMessage } from './message';
export { DEFAULT_LABELS } from './labels';
export type { ChatLabels } from './labels';
export type { ChatConfig, ChatPrefs, ChatDisplayMode } from './config';
export type { ChatStreamEvent, ChatMessageMetrics } from './events';
export type {
  CreateSessionOptions,
  SessionInfo,
  HistoryPage,
  StreamOptions,
  SendOptions,
} from './session';
export type { ChatTransport } from './transport';
