/** * Chat 状态机:事件联合 * * 事件名与原 Dart ChatEvent 对齐。 * * 历史:原本有 `ChatAuthStatusChanged`(chat 机器刷新 isGuest)—— 已删。 * 鉴权状态变化(loginStatus)由 通过 `useAuthState()` 订阅, * chat 机器不感知鉴权。 * * 鉴权生命周期事件(本轮新增): * - `ChatGuestLogin`:游客进入 /chat —— 拉本地消息 + 初始化配额(不连 WS) * - `ChatNonGuestLogin`:非游客进入 /chat —— 拉服务器端首屏 + 连 WS(token 在 payload) * - `ChatLogout`:登出 / 切换用户 —— 断 WS + 清消息 * * 设计:所有WS / 历史 / 配额相关副作用全部通过派发事件给 chat 机器处理, * chat-screen 不直接创建 ChatWebSocket / 不读 AuthStorage(除 token 取值)。 */ export type ChatEvent = // 鉴权生命周期(登录态变化后由 ChatAuthSync 派) | { type: "ChatGuestLogin" } | { type: "ChatNonGuestLogin"; token: string; isVip: boolean } | { type: "ChatLogout" } // 业务事件 | { type: "ChatSendMessage"; content: string } | { type: "ChatSendImage"; imageBase64: string } | { type: "ChatLoadMoreHistory" } // WebSocket / AI 推句(由 chat 机器内部 actor 派回 —— "机器自驱动") | { type: "ChatAISentenceReceived"; index: number; text: string; total: number; done: boolean; } | { type: "ChatWebSocketError"; errorMessage: string } | { type: "ChatWebSocketConnected"; userId: string } | { type: "ChatQuotaExceeded" };