// Centralizes the type-only import of the shared `/chat` Socket.IO contract from
// the public `@mosaicstack/types` package. `import type` is erased at compile
// time, so this introduces no runtime dependency — it only reuses the exact
// payload shapes instead of redeclaring them.
import type { Socket } from 'socket.io-client';
import type {
  AbortPayload,
  AgentEndPayload,
  AgentStartPayload,
  AgentTextPayload,
  AgentThinkingPayload,
  ChatMessagePayload,
  ChatSendCapabilityPayload,
  ChatSendProtocol,
  ClientToServerEvents,
  CommandDef,
  CommandManifest,
  CommandManifestPayload,
  ErrorPayload,
  HarnessSelection,
  HarnessTurnAckPayload,
  HarnessTurnSendPayload,
  MessageAckPayload,
  RoutingDecisionInfo,
  ServerToClientEvents,
  SessionInfoPayload,
  SessionUsagePayload,
  SetThinkingPayload,
  SkillCommandDef,
  SlashCommandApprovalResultPayload,
  SlashCommandPayload,
  SlashCommandResultPayload,
  SystemReloadPayload,
  ToolEndPayload,
  ToolStartPayload,
} from '@mosaicstack/types';

export type {
  AbortPayload,
  AgentEndPayload,
  AgentStartPayload,
  AgentTextPayload,
  AgentThinkingPayload,
  ChatMessagePayload,
  ChatSendCapabilityPayload,
  ChatSendProtocol,
  ClientToServerEvents,
  CommandDef,
  CommandManifest,
  CommandManifestPayload,
  ErrorPayload,
  HarnessSelection,
  HarnessTurnAckPayload,
  HarnessTurnSendPayload,
  MessageAckPayload,
  RoutingDecisionInfo,
  ServerToClientEvents,
  SessionInfoPayload,
  SessionUsagePayload,
  SetThinkingPayload,
  SkillCommandDef,
  SlashCommandApprovalResultPayload,
  SlashCommandPayload,
  SlashCommandResultPayload,
  SystemReloadPayload,
  ToolEndPayload,
  ToolStartPayload,
};

/** The `/chat` namespace socket, narrowed to the exact typed event contract. */
export type ChatSocket = Socket<ServerToClientEvents, ClientToServerEvents>;
