@tdesign-react/chat 1.1.0-alpha.17 → 1.1.0-alpha.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/es/_chunks/dep-5d7a98b7.js +169 -0
  2. package/es/_chunks/dep-5d7a98b7.js.map +1 -0
  3. package/es/_chunks/dep-907337f3.js +1247 -0
  4. package/es/_chunks/dep-907337f3.js.map +1 -0
  5. package/es/_chunks/dep-ee7a509c.js +438 -0
  6. package/es/_chunks/dep-ee7a509c.js.map +1 -0
  7. package/es/_util/reactify.js +1 -1
  8. package/es/_util/useDynamicStyle.js +1 -1
  9. package/es/attachments/index.js +1 -1
  10. package/es/chat-actionbar/index.js +1 -1
  11. package/es/chat-engine/components/activity/index.js +2 -2
  12. package/es/chat-engine/components/activity/registry.js +1 -1
  13. package/es/chat-engine/components/activity/render.js +2 -2
  14. package/es/chat-engine/components/activity/types.js +1 -1
  15. package/es/chat-engine/components/index.js +5 -4
  16. package/es/chat-engine/components/index.js.map +1 -1
  17. package/es/chat-engine/components/json-render/catalog/atomic/button.js +1 -1
  18. package/es/chat-engine/components/json-render/catalog/atomic/card.js +1 -1
  19. package/es/chat-engine/components/json-render/catalog/atomic/input.js +5 -4
  20. package/es/chat-engine/components/json-render/catalog/atomic/input.js.map +1 -1
  21. package/es/chat-engine/components/json-render/catalog/atomic/layout.js +1 -1
  22. package/es/chat-engine/components/json-render/catalog/atomic/text.js +1 -1
  23. package/es/chat-engine/components/json-render/catalog/catalog-to-prompt.js +1 -1
  24. package/es/chat-engine/components/json-render/contexts/actions.js +2 -2
  25. package/es/chat-engine/components/json-render/contexts/data.js +2 -2
  26. package/es/chat-engine/components/json-render/contexts/index.js +2 -2
  27. package/es/chat-engine/components/json-render/contexts/store.js +1 -1
  28. package/es/chat-engine/components/json-render/contexts/tree.js +1 -1
  29. package/es/chat-engine/components/json-render/contexts/validation.js +2 -2
  30. package/es/chat-engine/components/json-render/contexts/visibility.js +2 -2
  31. package/es/chat-engine/components/json-render/index.js +5 -4
  32. package/es/chat-engine/components/json-render/index.js.map +1 -1
  33. package/es/chat-engine/components/json-render/registry/a2ui-binding.js +5 -4
  34. package/es/chat-engine/components/json-render/registry/a2ui-binding.js.map +1 -1
  35. package/es/chat-engine/components/json-render/registry/a2ui-registry.js +5 -4
  36. package/es/chat-engine/components/json-render/registry/a2ui-registry.js.map +1 -1
  37. package/es/chat-engine/components/json-render/registry/config.js +5 -4
  38. package/es/chat-engine/components/json-render/registry/config.js.map +1 -1
  39. package/es/chat-engine/components/json-render/registry/index.js +5 -4
  40. package/es/chat-engine/components/json-render/registry/index.js.map +1 -1
  41. package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js +4 -3
  42. package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js.map +1 -1
  43. package/es/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.js +3 -3
  44. package/es/chat-engine/components/json-render/renderer/JsonUIRenderer.js +2 -2
  45. package/es/chat-engine/components/json-render/renderer/_index.js +2 -2
  46. package/es/chat-engine/components/json-render/types.js +1 -1
  47. package/es/chat-engine/components/provider/agent-state.js +3 -2
  48. package/es/chat-engine/components/provider/agent-state.js.map +1 -1
  49. package/es/chat-engine/components/shared/ComponentErrorBoundary.js +1 -1
  50. package/es/chat-engine/components/shared/createRegistry.js +1 -1
  51. package/es/chat-engine/components/shared/index.js +1 -1
  52. package/es/chat-engine/components/shared/useRegistrationListener.js +1 -1
  53. package/es/chat-engine/components/toolcall/index.js +3 -2
  54. package/es/chat-engine/components/toolcall/index.js.map +1 -1
  55. package/es/chat-engine/components/toolcall/registry.js +1 -1
  56. package/es/chat-engine/components/toolcall/render.js +3 -2
  57. package/es/chat-engine/components/toolcall/render.js.map +1 -1
  58. package/es/chat-engine/components/toolcall/types.js +1 -1
  59. package/es/chat-engine/core/adapters/a2ui/index.js +1 -1
  60. package/es/chat-engine/core/adapters/a2ui/processor/A2uiMessageProcessor.js +1 -1
  61. package/es/chat-engine/core/adapters/a2ui/processor/ComponentTree.js +1 -1
  62. package/es/chat-engine/core/adapters/a2ui/processor/DataStore.js +1 -1
  63. package/es/chat-engine/core/adapters/a2ui/processor/PathResolver.js +1 -1
  64. package/es/chat-engine/core/adapters/a2ui/types/index.js +1 -1
  65. package/es/chat-engine/core/adapters/a2ui/types/types.js +1 -1
  66. package/es/chat-engine/core/adapters/a2ui/utils/binding.js +1 -1
  67. package/es/chat-engine/core/adapters/a2ui/utils/index.js +1 -1
  68. package/es/chat-engine/core/adapters/a2ui/utils/validation.js +1 -1
  69. package/es/chat-engine/core/adapters/agui/ActivityManager.js +1 -1
  70. package/es/chat-engine/core/adapters/agui/StateManager.js +1 -1
  71. package/es/chat-engine/core/adapters/agui/event-mapper.js +1 -1
  72. package/es/chat-engine/core/adapters/agui/index.js +16 -2
  73. package/es/chat-engine/core/adapters/agui/index.js.map +1 -1
  74. package/es/chat-engine/core/adapters/agui/types/events.js +1 -1
  75. package/es/chat-engine/core/adapters/agui/types/index.js +1 -1
  76. package/es/chat-engine/core/adapters/agui/utils.js +1 -1
  77. package/es/chat-engine/core/adapters/index.js +2 -1
  78. package/es/chat-engine/core/adapters/index.js.map +1 -1
  79. package/es/chat-engine/core/adapters/json-render/SurfaceStateManager.js +1 -1
  80. package/es/chat-engine/core/adapters/json-render/a2ui-to-jsonrender.js +1 -1
  81. package/es/chat-engine/core/adapters/json-render/engine.js +1 -1
  82. package/es/chat-engine/core/adapters/json-render/index.js +1 -1
  83. package/es/chat-engine/core/adapters/json-render/types/a2ui.js +1 -1
  84. package/es/chat-engine/core/adapters/json-render/types/core.js +1 -1
  85. package/es/chat-engine/core/adapters/json-render/types/index.js +1 -1
  86. package/es/chat-engine/core/adapters/openclaw/device-key-manager.d.ts +65 -0
  87. package/es/chat-engine/core/adapters/openclaw/device-key-manager.js +375 -0
  88. package/es/chat-engine/core/adapters/openclaw/device-key-manager.js.map +1 -0
  89. package/es/chat-engine/core/adapters/openclaw/event-mapper.js +2 -1
  90. package/es/chat-engine/core/adapters/openclaw/event-mapper.js.map +1 -1
  91. package/es/chat-engine/core/adapters/openclaw/history-converter.js +1 -1
  92. package/es/chat-engine/core/adapters/openclaw/index.d.ts +11 -0
  93. package/es/chat-engine/core/adapters/openclaw/index.js +70 -17
  94. package/es/chat-engine/core/adapters/openclaw/index.js.map +1 -1
  95. package/es/chat-engine/core/adapters/openclaw/rpc-handler.js +1 -1
  96. package/es/chat-engine/core/adapters/openclaw/types/config.d.ts +21 -0
  97. package/es/chat-engine/core/adapters/openclaw/types/config.js +8 -4
  98. package/es/chat-engine/core/adapters/openclaw/types/config.js.map +1 -1
  99. package/es/chat-engine/core/adapters/openclaw/types/events.d.ts +3 -1
  100. package/es/chat-engine/core/adapters/openclaw/types/events.js +2 -1
  101. package/es/chat-engine/core/adapters/openclaw/types/events.js.map +1 -1
  102. package/es/chat-engine/core/adapters/openclaw/types/index.js +1 -1
  103. package/es/chat-engine/core/adapters/openclaw/types/messages.d.ts +13 -0
  104. package/es/chat-engine/core/adapters/openclaw/types/messages.js +1 -1
  105. package/es/chat-engine/core/adapters/openclaw/types/messages.js.map +1 -1
  106. package/es/chat-engine/core/adapters/openclaw/utils.js +1 -1
  107. package/es/chat-engine/core/adapters/shared/activity-manager.js +1 -1
  108. package/es/chat-engine/core/adapters/shared/content-factory.js +1 -1
  109. package/es/chat-engine/core/adapters/shared/index.js +1 -1
  110. package/es/chat-engine/core/adapters/shared/merge-utils.js +1 -1
  111. package/es/chat-engine/core/event-bus/ChatEventBus.js +1 -1
  112. package/es/chat-engine/core/event-bus/index.js +1 -1
  113. package/es/chat-engine/core/event-bus/types.js +1 -1
  114. package/es/chat-engine/core/index.d.ts +3 -1
  115. package/es/chat-engine/core/index.js +150 -111
  116. package/es/chat-engine/core/index.js.map +1 -1
  117. package/es/chat-engine/core/processor/index.js +1 -1
  118. package/es/chat-engine/core/server/batch-client.js +1 -1
  119. package/es/chat-engine/core/server/connection-manager.js +1 -1
  120. package/es/chat-engine/core/server/errors.js +1 -1
  121. package/es/chat-engine/core/server/index.js +1 -1
  122. package/es/chat-engine/core/server/llm-service.js +1 -1
  123. package/es/chat-engine/core/server/sse-client.js +1 -1
  124. package/es/chat-engine/core/server/sse-parser.js +1 -1
  125. package/es/chat-engine/core/server/types.js +1 -1
  126. package/es/chat-engine/core/server/websocket-client.d.ts +2 -0
  127. package/es/chat-engine/core/server/websocket-client.js +19 -3
  128. package/es/chat-engine/core/server/websocket-client.js.map +1 -1
  129. package/es/chat-engine/core/store/message.js +2 -2
  130. package/es/chat-engine/core/store/model.js +2 -2
  131. package/es/chat-engine/core/store/reactiveState.js +2 -2
  132. package/es/chat-engine/core/stream-handlers/agui-stream-handler.js +1 -1
  133. package/es/chat-engine/core/stream-handlers/default-stream-handler.js +1 -1
  134. package/es/chat-engine/core/stream-handlers/index.js +4 -3
  135. package/es/chat-engine/core/stream-handlers/index.js.map +1 -1
  136. package/es/chat-engine/core/stream-handlers/openclaw-stream-handler.d.ts +8 -0
  137. package/es/chat-engine/core/stream-handlers/openclaw-stream-handler.js +73 -22
  138. package/es/chat-engine/core/stream-handlers/openclaw-stream-handler.js.map +1 -1
  139. package/es/chat-engine/core/stream-handlers/types.d.ts +1 -1
  140. package/es/chat-engine/core/stream-handlers/types.js +1 -1
  141. package/es/chat-engine/core/type.js +1 -1
  142. package/es/chat-engine/core/utils/eventEmitter.js +1 -1
  143. package/es/chat-engine/core/utils/immutable-patch.js +1 -1
  144. package/es/chat-engine/core/utils/index.js +1 -1
  145. package/es/chat-engine/core/utils/json-patch/helpers.js +1 -1
  146. package/es/chat-engine/core/utils/json-patch/index.js +1 -1
  147. package/es/chat-engine/core/utils/logger.js +1 -1
  148. package/es/chat-engine/core/utils/performance.js +1 -1
  149. package/es/chat-engine/hooks/index.js +3 -2
  150. package/es/chat-engine/hooks/index.js.map +1 -1
  151. package/es/chat-engine/hooks/useAgentActivity.js +1 -1
  152. package/es/chat-engine/hooks/useAgentState.js +3 -2
  153. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  154. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  155. package/es/chat-engine/hooks/useChat.js +34 -10
  156. package/es/chat-engine/hooks/useChat.js.map +1 -1
  157. package/es/chat-engine/index.js +7 -6
  158. package/es/chat-engine/index.js.map +1 -1
  159. package/es/chat-filecard/index.js +1 -1
  160. package/es/chat-loading/index.js +1 -1
  161. package/es/chat-markdown/index.js +1 -1
  162. package/es/chat-message/index.js +1 -1
  163. package/es/chat-sender/index.js +1 -1
  164. package/es/chat-thinking/index.js +1 -1
  165. package/es/chatbot/index.js +1 -1
  166. package/es/index.js +5 -4
  167. package/es/index.js.map +1 -1
  168. package/es/style/index.js +1 -1
  169. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../pro-components/chat/chat-engine/core/index.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\n/* eslint-disable class-methods-use-this */\nimport { AGUIAdapter } from './adapters/agui';\nimport { MessageStore } from './store/message';\nimport type { ChatEventBusOptions, IChatEventBus } from './event-bus';\nimport { ChatEngineEventType, ChatEventBus } from './event-bus';\nimport MessageProcessor from './processor';\nimport { LLMService } from './server';\nimport {\n createStreamHandler,\n type IStreamHandler,\n type StreamContext,\n AGUIStreamHandler,\n OpenClawStreamHandler,\n} from './stream-handlers';\nimport type {\n AIMessageContent,\n ChatMessagesData,\n ChatMessageSetterMode,\n ChatRequestParams,\n ChatServiceConfig,\n ChatServiceConfigSetter,\n ChatStatus,\n IChatEngine,\n SystemMessage,\n ToolCall,\n} from './type';\n\nexport default class ChatEngine implements IChatEngine {\n public messageStore: MessageStore;\n\n /**\n * 事件总线实例\n * @description 用于发布/订阅引擎事件,支持无 UI 场景下的事件分发\n */\n public readonly eventBus: IChatEventBus;\n\n private messageProcessor: MessageProcessor;\n\n private llmService!: LLMService;\n\n private config!: ChatServiceConfig;\n\n private lastRequestParams: ChatRequestParams | undefined;\n\n private stopReceive = false;\n\n private aguiAdapter: AGUIAdapter | null = null;\n\n /** 流式处理策略(由协议类型决定) */\n private streamHandler!: IStreamHandler;\n\n constructor(eventBusOptions?: ChatEventBusOptions) {\n this.messageProcessor = new MessageProcessor();\n this.messageStore = new MessageStore();\n this.eventBus = new ChatEventBus(eventBusOptions);\n }\n\n /**\n * 获取当前所有消息\n * @returns 消息数组\n * @description 返回消息存储中的所有消息\n */\n get messages(): ChatMessagesData[] {\n return this.messageStore.messages;\n }\n\n /**\n * 获取当前聊天状态\n * @returns 聊天状态:'idle'、'pending'、'streaming'、'complete'、'stop'或'error'\n * @description 返回最后一条消息的状态,如果没有消息则返回'idle'\n */\n get status(): ChatStatus {\n return this.messages.at(-1)?.status || 'idle';\n }\n\n /**\n * 销毁聊天引擎实例\n * @description 中止请求,清理消息存储和适配器,释放资源\n */\n destroy(): void {\n // 发布销毁事件\n this.eventBus.emit(ChatEngineEventType.ENGINE_DESTROY, {\n timestamp: Date.now(),\n });\n\n // 中止当前请求\n this.abortChat();\n\n // 清理消息存储\n this.messageStore.clearHistory();\n this.messageStore.destroy();\n\n // 清理适配器和 StreamHandler\n this.aguiAdapter = null;\n this.streamHandler?.destroy?.();\n\n // 销毁事件总线\n this.eventBus.destroy();\n }\n\n /**\n * 初始化聊天引擎\n * @param configSetter 聊天服务配置或配置生成函数\n * @param initialMessages 初始消息列表,用于恢复历史对话\n * @description 设置初始消息、配置服务参数,并根据协议类型初始化适配器和 StreamHandler\n */\n public init(configSetter: ChatServiceConfigSetter, initialMessages?: ChatMessagesData[]) {\n this.messageStore.initialize(this.convertMessages(initialMessages));\n this.config = typeof configSetter === 'function' ? configSetter() : configSetter || {};\n this.llmService = new LLMService();\n\n // 初始化 AGUI 适配器\n if (this.config.protocol === 'agui') {\n this.aguiAdapter = new AGUIAdapter();\n }\n\n // 创建协议对应的 StreamHandler(Strategy 模式)\n this.streamHandler = createStreamHandler({\n protocol: this.config.protocol,\n llmService: this.llmService,\n aguiAdapter: this.aguiAdapter,\n });\n\n // OpenClaw 协议:立即建立 WebSocket 连接并完成握手\n // Gateway 会在 connect 响应中推送历史消息,通过 onHistoryLoaded 自动回填\n if (this.config.protocol === 'openclaw' && this.config.endpoint && this.streamHandler instanceof OpenClawStreamHandler) {\n (this.streamHandler as OpenClawStreamHandler).initConnection(this.config, (historyMessages) => {\n if (historyMessages && historyMessages.length > 0) {\n this.messageStore.setMessages(historyMessages, 'replace');\n this.config.onHistoryLoaded?.(historyMessages);\n }\n });\n }\n\n // 发布初始化事件\n this.eventBus.emit(ChatEngineEventType.ENGINE_INIT, {\n timestamp: Date.now(),\n });\n }\n\n /**\n * 发送用户消息并获取AI回复\n * @param requestParams 请求参数,包含用户输入的文本和附件\n * @param sendRequest 是否立即发送\n * @description 创建用户消息和AI消息,并发送请求获取AI回复\n */\n public async sendUserMessage(requestParams: ChatRequestParams, sendRequest = true) {\n const { prompt, attachments, ...customParams } = requestParams;\n\n // 检查条件:prompt和attachments至少传入一个,且如果设置了就不能为空\n const hasValidPrompt = prompt && prompt.trim() !== '';\n const hasValidAttachments = Array.isArray(attachments) && attachments.length > 0;\n\n // 如果两者都没有有效值,则直接返回\n if (!hasValidPrompt && !hasValidAttachments) {\n console.warn('[ChatEngine] sendUserMessage: 必须提供有效的prompt或attachments');\n return;\n }\n\n const userMessage = this.messageProcessor.createUserMessage(prompt, attachments);\n const aiMessage = this.messageProcessor.createAssistantMessage();\n this.messageStore.createMultiMessages([userMessage, aiMessage]);\n\n // 发布消息创建事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {\n message: userMessage,\n messages: this.messages,\n });\n\n if (sendRequest) {\n const params = {\n ...requestParams,\n messageID: aiMessage.id,\n ...customParams, // 透传用户自定义参数\n };\n this.sendRequest(params);\n }\n }\n\n /**\n * 发送系统消息\n * @param msg 系统消息文本内容\n * @description 创建并存储一条系统消息,通常用于设置上下文或控制对话流程\n */\n public async sendSystemMessage(msg: string) {\n const systemMessage = {\n role: 'system',\n content: [\n {\n type: 'text',\n data: msg,\n },\n ],\n } as SystemMessage;\n this.messageStore.createMessage(systemMessage);\n\n // 发布消息创建事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {\n message: systemMessage,\n messages: this.messages,\n });\n }\n\n /**\n * 手动发送AI消息\n * @param options 包含请求参数params、发送消息内容content和是否发送请求的标志sendRequest\n * @description 创建并存储一条AI消息,可选择是否同时发送请求\n */\n public async sendAIMessage(\n options: { params?: ChatRequestParams; content?: AIMessageContent[]; sendRequest?: boolean } = {},\n ) {\n const { params = {}, content, sendRequest = true } = options;\n const newAIMessage = this.messageProcessor.createAssistantMessage({\n content,\n status: sendRequest ? 'pending' : 'complete',\n });\n this.messageStore.createMessage(newAIMessage);\n\n // 发布消息创建事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {\n message: newAIMessage,\n messages: this.messages,\n });\n\n if (sendRequest) {\n params.messageID = newAIMessage.id;\n await this.sendRequest(params);\n }\n }\n\n /**\n * 恢复未完成的 Agent 运行(断点续传)\n *\n * 适用场景:用户离开页面后重新进入,后端 Agent 仍在运行。\n *\n * 流程:\n * 1. 创建一条空的 AI 消息(用于承载后续推送的内容)\n * 2. 调用 sendRequest 发起 SSE 连接\n * 3. 后端推 MESSAGES_SNAPSHOT 恢复已产生的中间内容(replaceContent)\n * 4. 后端继续推增量事件(TEXT_MESSAGE_CONTENT 等),Processor 正常 append\n * 5. 后端推 RUN_FINISHED 结束\n *\n * @param params 请求参数,应包含 threadId / runId 等后端识别续传所需的信息\n * @returns 新创建的 AI 消息 ID\n */\n public async resumeRun(params: ChatRequestParams = {}): Promise<string> {\n // 创建空的 AI 消息,状态为 pending(等待后端推送内容)\n const newAIMessage = this.messageProcessor.createAssistantMessage({\n content: [],\n status: 'pending',\n });\n this.messageStore.createMessage(newAIMessage);\n\n // 发布消息创建事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {\n message: newAIMessage,\n messages: this.messages,\n });\n\n // 发起请求,后端会通过 MESSAGES_SNAPSHOT 恢复已有内容,然后继续推增量\n params.messageID = newAIMessage.id;\n await this.sendRequest(params);\n\n return newAIMessage.id;\n }\n\n /**\n * 中止当前进行中的聊天请求\n * @description 停止接收流式响应,关闭连接,并调用配置的onAbort回调\n */\n public async abortChat() {\n this.stopReceive = true;\n\n if (this.config?.onAbort) {\n await this.config.onAbort();\n }\n\n try {\n this.llmService.closeConnect();\n // OpenClaw 的 abort 由 StreamHandler 管理\n if (this.streamHandler instanceof OpenClawStreamHandler) {\n (this.streamHandler as OpenClawStreamHandler).abort();\n }\n if (!this.config.stream) {\n // 只有在批量模式下才删除最后一条AI消息\n if (this.messageStore.lastAIMessage?.id) {\n const messageId = this.messageStore.lastAIMessage.id;\n this.messageStore.removeMessage(messageId);\n\n // 发布消息删除事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_DELETE, {\n messageId,\n messages: this.messages,\n });\n }\n }\n } catch (error) {\n console.warn('Error during service cleanup:', error);\n }\n }\n\n /**\n * 注册内容块合并策略\n * @param type 内容类型,如'text'、'markdown'等\n * @param handler 合并处理函数,接收新块和现有块,返回合并后的内容块\n * @description 用于自定义不同类型内容的增量更新逻辑\n */\n public registerMergeStrategy<T extends AIMessageContent>(\n type: T['type'], // 使用类型中定义的type字段作为参数类型\n handler: (chunk: T, existing?: T) => T,\n ) {\n this.messageProcessor.registerHandler(type, handler);\n }\n\n /**\n * 设置消息列表\n * @param messages 要设置的消息数组\n * @param mode 设置模式:'replace'(替换)、'prepend'(前置)、'append'(追加),默认为'replace'\n * @description 用于批量更新消息,如加载历史消息或重置对话\n */\n public setMessages(messages: ChatMessagesData[], mode: ChatMessageSetterMode = 'replace') {\n this.messageStore.setMessages(messages, mode);\n }\n\n /**\n * 清空所有消息\n * @description 清除消息存储中的所有历史记录\n */\n public clearMessages(): void {\n this.messageStore.clearHistory();\n\n // 发布消息清空事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CLEAR, {\n timestamp: Date.now(),\n });\n }\n\n /**\n * 重新生成AI回复\n * @param keepVersion 是否保留历史版本,默认为false\n * @description\n * - 当keepVersion=false时:删除最后一条AI消息,创建新消息并重新请求\n * - 当keepVersion=true时:保留旧消息,创建分支消息并重新请求\n */\n public async regenerateAIMessage(keepVersion = false) {\n const { lastAIMessage } = this.messageStore;\n if (!lastAIMessage) return;\n\n if (!keepVersion) {\n // 删除最后一条AI消息\n this.messageStore.removeMessage(lastAIMessage.id);\n } else {\n // todo: 保留历史版本,创建新分支\n this.messageStore.createMessageBranch(lastAIMessage.id);\n }\n\n // 创建新的AI消息\n const newAIMessage = this.messageProcessor.createAssistantMessage();\n this.messageStore.createMessage(newAIMessage);\n\n // 重新发起请求\n const params = {\n ...(this.lastRequestParams || {}),\n messageID: newAIMessage.id,\n prompt: this.lastRequestParams?.prompt ?? '',\n };\n\n await this.sendRequest(params);\n }\n\n /**\n * 发送请求获取AI回复\n * @param params 请求参数\n * @description 根据配置选择流式或批量请求模式,处理响应并更新消息状态\n */\n public async sendRequest(params: ChatRequestParams) {\n const { messageID: id } = params;\n\n // 发布请求开始事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_START, {\n params,\n messageId: id,\n });\n\n try {\n if (this.config.stream) {\n // 处理sse流式响应模式\n this.stopReceive = false;\n await this.handleStreamRequest(params);\n } else {\n // 处理批量响应模式\n await this.handleBatchRequest(params);\n }\n this.lastRequestParams = params;\n } catch (error) {\n this.setMessageStatus(id!, 'error');\n\n // 发布请求错误事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {\n messageId: id!,\n error,\n params,\n });\n\n throw error;\n }\n }\n\n /**\n * 根据名称获取工具调用\n * @param name 工具调用名称\n * @returns 匹配的工具调用对象,如果未找到则返回undefined\n * @description 用于获取特定名称的工具调用信息,仅在AGUI协议下可用\n */\n public getToolcallByName(name: string): ToolCall | undefined {\n return this.aguiAdapter?.getToolcallByName(name);\n }\n\n private async handleBatchRequest(params: ChatRequestParams) {\n const id = params.messageID;\n if (!id) return;\n this.setMessageStatus(id, 'pending');\n const result = await this.llmService.handleBatchRequest(params, this.config);\n if (result) {\n this.processMessageResult(id, result);\n this.setMessageStatus(id, 'complete');\n\n // 发布请求完成事件\n const message = this.messageStore.getMessageByID(id);\n if (message) {\n this.eventBus.emit(ChatEngineEventType.REQUEST_COMPLETE, {\n messageId: id,\n params,\n message,\n });\n }\n } else {\n this.setMessageStatus(id, 'error');\n\n // 发布请求错误事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {\n messageId: id,\n error: new Error('Batch request returned empty result'),\n params,\n });\n }\n }\n\n private handleError(id: string, error: unknown) {\n this.setMessageStatus(id, 'error');\n this.config.onError?.(error as Error);\n\n // 发布请求错误事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {\n messageId: id,\n error,\n });\n }\n\n private handleComplete(id: string, isAborted: boolean, params: ChatRequestParams, chunk?: unknown) {\n // 先调用用户自定义的 onComplete 回调,让业务层决定如何处理\n const customResult = this.config.onComplete?.(isAborted, params, chunk);\n // 如果用户返回了自定义内容,处理这些内容\n if (Array.isArray(customResult) || (customResult && 'status' in customResult)) {\n this.processMessageResult(id, customResult);\n } else {\n // 所有消息内容块检查,只要有一个失败,消息的status就是失败\n const allContentFailed = this.messageStore.messages.find((content) => content.status === 'error');\n // eslint-disable-next-line no-nested-ternary\n this.setMessageStatus(id, isAborted ? 'stop' : allContentFailed ? 'error' : 'complete');\n }\n\n // 发布请求完成/中止事件\n const message = this.messageStore.getMessageByID(id);\n if (message) {\n if (isAborted) {\n this.eventBus.emit(ChatEngineEventType.REQUEST_ABORT, {\n messageId: id,\n params,\n });\n } else {\n this.eventBus.emit(ChatEngineEventType.REQUEST_COMPLETE, {\n messageId: id,\n params,\n message,\n });\n }\n }\n }\n\n /**\n * 处理流式请求\n * 委托给 StreamHandler 策略处理(Default/AGUI/OpenClaw)\n */\n private async handleStreamRequest(params: ChatRequestParams) {\n const id = params.messageID;\n\n if (id) {\n this.setMessageStatus(id, 'streaming');\n }\n\n const context = this.buildStreamContext(id);\n await this.streamHandler.handleStream(params, context);\n }\n\n /**\n * 构建 StreamHandler 所需的上下文\n */\n private buildStreamContext(messageId?: string): StreamContext {\n return {\n messageId,\n config: this.config,\n getStopReceive: () => this.stopReceive,\n processMessageResult: (id, result) => this.processMessageResult(id, result),\n handleError: (id, error) => this.handleError(id, error),\n handleComplete: (id, isAborted, params, chunk?) => this.handleComplete(id, isAborted, params, chunk),\n messageStore: this.messageStore,\n eventBus: this.eventBus,\n };\n }\n\n /**\n * 统一处理消息结果\n * 支持单个内容块、多个内容块和增量更新\n * 支持 MESSAGES_SNAPSHOT 的 replaceContent 语义(_isSnapshot 标记)\n */\n private processMessageResult(messageId: string, result: AIMessageContent | AIMessageContent[] | null) {\n if (!result) return;\n\n // MESSAGES_SNAPSHOT 场景:使用 replaceContent 一次性替换消息内容\n // 而非逐个 append,避免与已有内容产生拼接冲突\n if (Array.isArray(result) && (result as any)._isSnapshot) {\n this.messageStore.replaceContent(messageId, result);\n } else {\n // 委托 MessageProcessor 处理内容更新\n this.messageProcessor.applyContentUpdate(this.messageStore, messageId, result);\n }\n\n // 发布消息更新事件\n const message = this.messageStore.getMessageByID(messageId);\n if (message) {\n this.eventBus.emit(ChatEngineEventType.MESSAGE_UPDATE, {\n messageId,\n content: result,\n message,\n });\n\n // AG-UI 协议:发布细粒度事件(委托给 AGUIStreamHandler)\n if (this.streamHandler instanceof AGUIStreamHandler) {\n (this.streamHandler as AGUIStreamHandler).emitDetailEvents(messageId, result, this.eventBus);\n }\n }\n }\n\n private convertMessages(messages?: ChatMessagesData[]) {\n if (!messages) return { messageIds: [], messages: [] };\n\n return {\n messageIds: messages.map((msg) => msg.id),\n messages,\n };\n }\n\n private setMessageStatus(messageId: string, status: ChatMessagesData['status']) {\n const previousStatus = this.messageStore.getMessageByID(messageId)?.status;\n this.messageStore.setMessageStatus(messageId, status);\n\n // 发布消息状态变化事件\n if (status) {\n this.eventBus.emit(ChatEngineEventType.MESSAGE_STATUS_CHANGE, {\n messageId,\n status,\n previousStatus,\n });\n }\n }\n\n}\n\nexport * from './utils';\nexport * from './adapters';\nexport * from './event-bus';\nexport * from './stream-handlers';\nexport type * from './type';\n"],"names":["ChatEngine","eventBusOptions","_classCallCheck","_defineProperty","messageProcessor","MessageProcessor","messageStore","MessageStore","eventBus","ChatEventBus","_createClass","key","get","messages","_this$messages$at","at","status","value","destroy","_this$streamHandler","_this$streamHandler$d","emit","ChatEngineEventType","ENGINE_DESTROY","timestamp","Date","now","abortChat","clearHistory","aguiAdapter","streamHandler","call","init","configSetter","initialMessages","_this","initialize","convertMessages","config","llmService","LLMService","protocol","AGUIAdapter","createStreamHandler","endpoint","OpenClawStreamHandler","initConnection","historyMessages","length","_this$config$onHistor","_this$config","setMessages","onHistoryLoaded","ENGINE_INIT","_sendUserMessage","_asyncToGenerator","_regeneratorRuntime","mark","_callee","requestParams","sendRequest","prompt","attachments","customParams","hasValidPrompt","hasValidAttachments","userMessage","aiMessage","params","_args","arguments","wrap","_context","prev","next","undefined","_objectWithoutProperties","_excluded","trim","Array","isArray","console","warn","abrupt","createUserMessage","createAssistantMessage","createMultiMessages","MESSAGE_CREATE","message","_objectSpread","messageID","id","stop","sendUserMessage","_x","apply","_sendSystemMessage","_callee2","msg","systemMessage","_context2","role","content","type","data","createMessage","sendSystemMessage","_callee3","options","_options$params","_options$sendRequest","newAIMessage","_args3","_context3","sendAIMessage","_sendAIMessage","_resumeRun","_callee4","_args4","_context4","resumeRun","_abortChat","_callee5","_this$config2","_this$messageStore$la","messageId","_context5","stopReceive","onAbort","closeConnect","abort","stream","lastAIMessage","removeMessage","MESSAGE_DELETE","error","registerMergeStrategy","handler","registerHandler","mode","clearMessages","MESSAGE_CLEAR","_regenerateAIMessage","_callee6","_this$lastRequestPara","_this$lastRequestPara2","keepVersion","_args6","_context6","createMessageBranch","lastRequestParams","regenerateAIMessage","_sendRequest","_callee7","_t","_context7","REQUEST_START","handleStreamRequest","handleBatchRequest","setMessageStatus","REQUEST_ERROR","getToolcallByName","name","_this$aguiAdapter","_handleBatchRequest","_callee8","result","_context8","processMessageResult","getMessageByID","REQUEST_COMPLETE","Error","handleError","_this$config$onError","_this$config3","onError","handleComplete","isAborted","chunk","_this$config$onComple","_this$config4","customResult","onComplete","allContentFailed","find","REQUEST_ABORT","_handleStreamRequest","_callee9","context","_context9","buildStreamContext","handleStream","_this2","getStopReceive","_isSnapshot","replaceContent","applyContentUpdate","MESSAGE_UPDATE","AGUIStreamHandler","emitDetailEvents","messageIds","map","_this$messageStore$ge","previousStatus","MESSAGE_STATUS_CHANGE"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../pro-components/chat/chat-engine/core/index.ts"],"sourcesContent":["/* eslint-disable no-param-reassign */\n/* eslint-disable class-methods-use-this */\nimport { AGUIAdapter } from './adapters/agui';\nimport { MessageStore } from './store/message';\nimport type { ChatEventBusOptions, IChatEventBus } from './event-bus';\nimport { ChatEngineEventType, ChatEventBus } from './event-bus';\nimport MessageProcessor from './processor';\nimport { LLMService } from './server';\nimport {\n createStreamHandler,\n type IStreamHandler,\n type StreamContext,\n AGUIStreamHandler,\n OpenClawStreamHandler,\n} from './stream-handlers';\nimport type {\n AIMessageContent,\n ChatMessagesData,\n ChatMessageSetterMode,\n ChatRequestParams,\n ChatServiceConfig,\n ChatServiceConfigSetter,\n ChatStatus,\n IChatEngine,\n SystemMessage,\n ToolCall,\n} from './type';\n\nexport default class ChatEngine implements IChatEngine {\n public messageStore: MessageStore;\n\n /**\n * 事件总线实例\n * @description 用于发布/订阅引擎事件,支持无 UI 场景下的事件分发\n */\n public readonly eventBus: IChatEventBus;\n\n private messageProcessor: MessageProcessor;\n\n private llmService!: LLMService;\n\n private config!: ChatServiceConfig;\n\n private lastRequestParams: ChatRequestParams | undefined;\n\n private stopReceive = false;\n\n private aguiAdapter: AGUIAdapter | null = null;\n\n /** 流式处理策略(由协议类型决定) */\n private streamHandler!: IStreamHandler;\n\n /** 是否已完成初始化(防止 React StrictMode 等场景下重复调用 init) */\n private initialized = false;\n\n constructor(eventBusOptions?: ChatEventBusOptions) {\n this.messageProcessor = new MessageProcessor();\n this.messageStore = new MessageStore();\n this.eventBus = new ChatEventBus(eventBusOptions);\n }\n\n /**\n * 获取当前所有消息\n * @returns 消息数组\n * @description 返回消息存储中的所有消息\n */\n get messages(): ChatMessagesData[] {\n return this.messageStore.messages;\n }\n\n /**\n * 获取当前聊天状态\n * @returns 聊天状态:'idle'、'pending'、'streaming'、'complete'、'stop'或'error'\n * @description 返回最后一条消息的状态,如果没有消息则返回'idle'\n */\n get status(): ChatStatus {\n return this.messages.at(-1)?.status || 'idle';\n }\n\n /**\n * 销毁聊天引擎实例\n * @description 中止请求,清理消息存储和适配器,释放资源\n */\n destroy(): void {\n // 发布销毁事件\n this.eventBus.emit(ChatEngineEventType.ENGINE_DESTROY, {\n timestamp: Date.now(),\n });\n\n // 中止当前请求\n this.abortChat();\n\n // 清理消息存储\n this.messageStore.clearHistory();\n this.messageStore.destroy();\n\n // 清理适配器和 StreamHandler\n this.aguiAdapter = null;\n this.streamHandler?.destroy?.();\n\n // 销毁事件总线\n this.eventBus.destroy();\n }\n\n /**\n * 初始化聊天引擎\n * @param configSetter 聊天服务配置或配置生成函数\n * @param initialMessages 初始消息列表,用于恢复历史对话\n * @description 设置初始消息、配置服务参数,并根据协议类型初始化适配器和 StreamHandler\n */\n public async init(configSetter: ChatServiceConfigSetter, initialMessages?: ChatMessagesData[]) {\n // 防止重复初始化(React StrictMode 等场景下 init 可能被调用多次)\n if (this.initialized) return;\n this.initialized = true;\n\n // 清理上一次 init 遗留的资源(防止 React StrictMode 重复调用导致孤儿连接)\n if (this.streamHandler) {\n try {\n await this.streamHandler.destroy();\n } catch {\n // 旧连接可能尚在 CONNECTING 阶段,忽略关闭时的异常\n }\n }\n this.aguiAdapter = null;\n\n this.messageStore.initialize(this.convertMessages(initialMessages));\n this.config = typeof configSetter === 'function' ? configSetter() : configSetter || {};\n this.llmService = new LLMService();\n\n // 初始化 AGUI 适配器\n if (this.config.protocol === 'agui') {\n this.aguiAdapter = new AGUIAdapter();\n }\n\n // 创建协议对应的 StreamHandler(Strategy 模式)\n this.streamHandler = createStreamHandler({\n protocol: this.config.protocol,\n llmService: this.llmService,\n aguiAdapter: this.aguiAdapter,\n });\n\n // OpenClaw 协议:立即建立 WebSocket 连接并完成握手\n // Gateway 会在 connect 响应中推送历史消息,通过 onHistoryLoaded 自动回填\n if (this.config.protocol === 'openclaw' && this.config.endpoint && this.streamHandler instanceof OpenClawStreamHandler) {\n (this.streamHandler as OpenClawStreamHandler).initConnection(this.config, (historyMessages) => {\n if (historyMessages && historyMessages.length > 0) {\n this.messageStore.setMessages(historyMessages, 'replace');\n this.config.onHistoryLoaded?.(historyMessages);\n }\n });\n }\n\n // 发布初始化事件\n this.eventBus.emit(ChatEngineEventType.ENGINE_INIT, {\n timestamp: Date.now(),\n });\n }\n\n /**\n * 发送用户消息并获取AI回复\n * @param requestParams 请求参数,包含用户输入的文本和附件\n * @param sendRequest 是否立即发送\n * @description 创建用户消息和AI消息,并发送请求获取AI回复\n */\n public async sendUserMessage(requestParams: ChatRequestParams, sendRequest = true) {\n const { prompt, attachments, ...customParams } = requestParams;\n\n // 检查条件:prompt和attachments至少传入一个,且如果设置了就不能为空\n const hasValidPrompt = prompt && prompt.trim() !== '';\n const hasValidAttachments = Array.isArray(attachments) && attachments.length > 0;\n\n // 如果两者都没有有效值,则直接返回\n if (!hasValidPrompt && !hasValidAttachments) {\n console.warn('[ChatEngine] sendUserMessage: 必须提供有效的prompt或attachments');\n return;\n }\n\n const userMessage = this.messageProcessor.createUserMessage(prompt, attachments);\n const aiMessage = this.messageProcessor.createAssistantMessage();\n this.messageStore.createMultiMessages([userMessage, aiMessage]);\n\n // 发布消息创建事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {\n message: userMessage,\n messages: this.messages,\n });\n\n if (sendRequest) {\n const params = {\n ...requestParams,\n messageID: aiMessage.id,\n ...customParams, // 透传用户自定义参数\n };\n this.sendRequest(params);\n }\n }\n\n /**\n * 发送系统消息\n * @param msg 系统消息文本内容\n * @description 创建并存储一条系统消息,通常用于设置上下文或控制对话流程\n */\n public async sendSystemMessage(msg: string) {\n const systemMessage = {\n role: 'system',\n content: [\n {\n type: 'text',\n data: msg,\n },\n ],\n } as SystemMessage;\n this.messageStore.createMessage(systemMessage);\n\n // 发布消息创建事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {\n message: systemMessage,\n messages: this.messages,\n });\n }\n\n /**\n * 手动发送AI消息\n * @param options 包含请求参数params、发送消息内容content和是否发送请求的标志sendRequest\n * @description 创建并存储一条AI消息,可选择是否同时发送请求\n */\n public async sendAIMessage(\n options: { params?: ChatRequestParams; content?: AIMessageContent[]; sendRequest?: boolean } = {},\n ) {\n const { params = {}, content, sendRequest = true } = options;\n const newAIMessage = this.messageProcessor.createAssistantMessage({\n content,\n status: sendRequest ? 'pending' : 'complete',\n });\n this.messageStore.createMessage(newAIMessage);\n\n // 发布消息创建事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {\n message: newAIMessage,\n messages: this.messages,\n });\n\n if (sendRequest) {\n params.messageID = newAIMessage.id;\n await this.sendRequest(params);\n }\n }\n\n /**\n * 恢复未完成的 Agent 运行(断点续传)\n *\n * 适用场景:用户离开页面后重新进入,后端 Agent 仍在运行。\n *\n * 流程:\n * 1. 创建一条空的 AI 消息(用于承载后续推送的内容)\n * 2. 调用 sendRequest 发起 SSE 连接\n * 3. 后端推 MESSAGES_SNAPSHOT 恢复已产生的中间内容(replaceContent)\n * 4. 后端继续推增量事件(TEXT_MESSAGE_CONTENT 等),Processor 正常 append\n * 5. 后端推 RUN_FINISHED 结束\n *\n * @param params 请求参数,应包含 threadId / runId 等后端识别续传所需的信息\n * @returns 新创建的 AI 消息 ID\n */\n public async resumeRun(params: ChatRequestParams = {}): Promise<string> {\n // 创建空的 AI 消息,状态为 pending(等待后端推送内容)\n const newAIMessage = this.messageProcessor.createAssistantMessage({\n content: [],\n status: 'pending',\n });\n this.messageStore.createMessage(newAIMessage);\n\n // 发布消息创建事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CREATE, {\n message: newAIMessage,\n messages: this.messages,\n });\n\n // 发起请求,后端会通过 MESSAGES_SNAPSHOT 恢复已有内容,然后继续推增量\n params.messageID = newAIMessage.id;\n await this.sendRequest(params);\n\n return newAIMessage.id;\n }\n\n /**\n * 中止当前进行中的聊天请求\n * @description 停止接收流式响应,关闭连接,并调用配置的onAbort回调\n */\n public async abortChat() {\n this.stopReceive = true;\n\n if (this.config?.onAbort) {\n await this.config.onAbort();\n }\n\n try {\n this.llmService.closeConnect();\n // OpenClaw 的 abort 由 StreamHandler 管理\n if (this.streamHandler instanceof OpenClawStreamHandler) {\n (this.streamHandler as OpenClawStreamHandler).abort();\n }\n if (!this.config.stream) {\n // 只有在批量模式下才删除最后一条AI消息\n if (this.messageStore.lastAIMessage?.id) {\n const messageId = this.messageStore.lastAIMessage.id;\n this.messageStore.removeMessage(messageId);\n\n // 发布消息删除事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_DELETE, {\n messageId,\n messages: this.messages,\n });\n }\n }\n } catch (error) {\n console.warn('Error during service cleanup:', error);\n }\n }\n\n /**\n * 注册内容块合并策略\n * @param type 内容类型,如'text'、'markdown'等\n * @param handler 合并处理函数,接收新块和现有块,返回合并后的内容块\n * @description 用于自定义不同类型内容的增量更新逻辑\n */\n public registerMergeStrategy<T extends AIMessageContent>(\n type: T['type'], // 使用类型中定义的type字段作为参数类型\n handler: (chunk: T, existing?: T) => T,\n ) {\n this.messageProcessor.registerHandler(type, handler);\n }\n\n /**\n * 设置消息列表\n * @param messages 要设置的消息数组\n * @param mode 设置模式:'replace'(替换)、'prepend'(前置)、'append'(追加),默认为'replace'\n * @description 用于批量更新消息,如加载历史消息或重置对话\n */\n public setMessages(messages: ChatMessagesData[], mode: ChatMessageSetterMode = 'replace') {\n this.messageStore.setMessages(messages, mode);\n }\n\n /**\n * 清空所有消息\n * @description 清除消息存储中的所有历史记录\n */\n public clearMessages(): void {\n this.messageStore.clearHistory();\n\n // 发布消息清空事件\n this.eventBus.emit(ChatEngineEventType.MESSAGE_CLEAR, {\n timestamp: Date.now(),\n });\n }\n\n /**\n * 重新生成AI回复\n * @param keepVersion 是否保留历史版本,默认为false\n * @description\n * - 当keepVersion=false时:删除最后一条AI消息,创建新消息并重新请求\n * - 当keepVersion=true时:保留旧消息,创建分支消息并重新请求\n */\n public async regenerateAIMessage(keepVersion = false) {\n const { lastAIMessage } = this.messageStore;\n if (!lastAIMessage) return;\n\n if (!keepVersion) {\n // 删除最后一条AI消息\n this.messageStore.removeMessage(lastAIMessage.id);\n } else {\n // todo: 保留历史版本,创建新分支\n this.messageStore.createMessageBranch(lastAIMessage.id);\n }\n\n // 创建新的AI消息\n const newAIMessage = this.messageProcessor.createAssistantMessage();\n this.messageStore.createMessage(newAIMessage);\n\n // 重新发起请求\n const params = {\n ...(this.lastRequestParams || {}),\n messageID: newAIMessage.id,\n prompt: this.lastRequestParams?.prompt ?? '',\n };\n\n await this.sendRequest(params);\n }\n\n /**\n * 发送请求获取AI回复\n * @param params 请求参数\n * @description 根据配置选择流式或批量请求模式,处理响应并更新消息状态\n */\n public async sendRequest(params: ChatRequestParams) {\n const { messageID: id } = params;\n\n // 发布请求开始事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_START, {\n params,\n messageId: id,\n });\n\n try {\n if (this.config.stream) {\n // 处理sse流式响应模式\n this.stopReceive = false;\n await this.handleStreamRequest(params);\n } else {\n // 处理批量响应模式\n await this.handleBatchRequest(params);\n }\n this.lastRequestParams = params;\n } catch (error) {\n this.setMessageStatus(id!, 'error');\n\n // 发布请求错误事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {\n messageId: id!,\n error,\n params,\n });\n\n throw error;\n }\n }\n\n /**\n * 根据名称获取工具调用\n * @param name 工具调用名称\n * @returns 匹配的工具调用对象,如果未找到则返回undefined\n * @description 用于获取特定名称的工具调用信息,仅在AGUI协议下可用\n */\n public getToolcallByName(name: string): ToolCall | undefined {\n return this.aguiAdapter?.getToolcallByName(name);\n }\n\n private async handleBatchRequest(params: ChatRequestParams) {\n const id = params.messageID;\n if (!id) return;\n this.setMessageStatus(id, 'pending');\n const result = await this.llmService.handleBatchRequest(params, this.config);\n if (result) {\n this.processMessageResult(id, result);\n this.setMessageStatus(id, 'complete');\n\n // 发布请求完成事件\n const message = this.messageStore.getMessageByID(id);\n if (message) {\n this.eventBus.emit(ChatEngineEventType.REQUEST_COMPLETE, {\n messageId: id,\n params,\n message,\n });\n }\n } else {\n this.setMessageStatus(id, 'error');\n\n // 发布请求错误事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {\n messageId: id,\n error: new Error('Batch request returned empty result'),\n params,\n });\n }\n }\n\n private handleError(id: string, error: unknown) {\n this.setMessageStatus(id, 'error');\n this.config.onError?.(error as Error);\n\n // 发布请求错误事件\n this.eventBus.emit(ChatEngineEventType.REQUEST_ERROR, {\n messageId: id,\n error,\n });\n }\n\n private handleComplete(id: string, isAborted: boolean, params: ChatRequestParams, chunk?: unknown) {\n // 先调用用户自定义的 onComplete 回调,让业务层决定如何处理\n const customResult = this.config.onComplete?.(isAborted, params, chunk);\n // 如果用户返回了自定义内容,处理这些内容\n if (Array.isArray(customResult) || (customResult && 'status' in customResult)) {\n this.processMessageResult(id, customResult);\n } else {\n // 所有消息内容块检查,只要有一个失败,消息的status就是失败\n const allContentFailed = this.messageStore.messages.find((content) => content.status === 'error');\n // eslint-disable-next-line no-nested-ternary\n this.setMessageStatus(id, isAborted ? 'stop' : allContentFailed ? 'error' : 'complete');\n }\n\n // 发布请求完成/中止事件\n const message = this.messageStore.getMessageByID(id);\n if (message) {\n if (isAborted) {\n this.eventBus.emit(ChatEngineEventType.REQUEST_ABORT, {\n messageId: id,\n params,\n });\n } else {\n this.eventBus.emit(ChatEngineEventType.REQUEST_COMPLETE, {\n messageId: id,\n params,\n message,\n });\n }\n }\n }\n\n /**\n * 处理流式请求\n * 委托给 StreamHandler 策略处理(Default/AGUI/OpenClaw)\n */\n private async handleStreamRequest(params: ChatRequestParams) {\n const id = params.messageID;\n\n if (id) {\n this.setMessageStatus(id, 'streaming');\n }\n\n const context = this.buildStreamContext(id);\n await this.streamHandler.handleStream(params, context);\n }\n\n /**\n * 构建 StreamHandler 所需的上下文\n */\n private buildStreamContext(messageId?: string): StreamContext {\n return {\n messageId,\n config: this.config,\n getStopReceive: () => this.stopReceive,\n processMessageResult: (id, result) => this.processMessageResult(id, result),\n handleError: (id, error) => this.handleError(id, error),\n handleComplete: (id, isAborted, params, chunk?) => this.handleComplete(id, isAborted, params, chunk),\n messageStore: this.messageStore,\n eventBus: this.eventBus,\n };\n }\n\n /**\n * 统一处理消息结果\n * 支持单个内容块、多个内容块和增量更新\n * 支持 MESSAGES_SNAPSHOT 的 replaceContent 语义(_isSnapshot 标记)\n */\n private processMessageResult(messageId: string, result: AIMessageContent | AIMessageContent[] | null) {\n if (!result) return;\n\n // MESSAGES_SNAPSHOT 场景:使用 replaceContent 一次性替换消息内容\n // 而非逐个 append,避免与已有内容产生拼接冲突\n if (Array.isArray(result) && (result as any)._isSnapshot) {\n this.messageStore.replaceContent(messageId, result);\n } else {\n // 委托 MessageProcessor 处理内容更新\n this.messageProcessor.applyContentUpdate(this.messageStore, messageId, result);\n }\n\n // 发布消息更新事件\n const message = this.messageStore.getMessageByID(messageId);\n if (message) {\n this.eventBus.emit(ChatEngineEventType.MESSAGE_UPDATE, {\n messageId,\n content: result,\n message,\n });\n\n // AG-UI 协议:发布细粒度事件(委托给 AGUIStreamHandler)\n if (this.streamHandler instanceof AGUIStreamHandler) {\n (this.streamHandler as AGUIStreamHandler).emitDetailEvents(messageId, result, this.eventBus);\n }\n }\n }\n\n private convertMessages(messages?: ChatMessagesData[]) {\n if (!messages) return { messageIds: [], messages: [] };\n\n return {\n messageIds: messages.map((msg) => msg.id),\n messages,\n };\n }\n\n private setMessageStatus(messageId: string, status: ChatMessagesData['status']) {\n const previousStatus = this.messageStore.getMessageByID(messageId)?.status;\n this.messageStore.setMessageStatus(messageId, status);\n\n // 发布消息状态变化事件\n if (status) {\n this.eventBus.emit(ChatEngineEventType.MESSAGE_STATUS_CHANGE, {\n messageId,\n status,\n previousStatus,\n });\n }\n }\n\n}\n\nexport * from './utils';\nexport * from './adapters';\nexport * from './event-bus';\nexport * from './stream-handlers';\nexport type * from './type';\n"],"names":["ChatEngine","eventBusOptions","_classCallCheck","_defineProperty","messageProcessor","MessageProcessor","messageStore","MessageStore","eventBus","ChatEventBus","_createClass","key","get","messages","_this$messages$at","at","status","value","destroy","_this$streamHandler","_this$streamHandler$d","emit","ChatEngineEventType","ENGINE_DESTROY","timestamp","Date","now","abortChat","clearHistory","aguiAdapter","streamHandler","call","_init","_asyncToGenerator","_regeneratorRuntime","mark","_callee","configSetter","initialMessages","_this","_t","wrap","_context","prev","next","initialized","abrupt","initialize","convertMessages","config","llmService","LLMService","protocol","AGUIAdapter","createStreamHandler","endpoint","OpenClawStreamHandler","initConnection","historyMessages","length","_this$config$onHistor","_this$config","setMessages","onHistoryLoaded","ENGINE_INIT","stop","init","_x","_x2","apply","arguments","_sendUserMessage","_callee2","requestParams","sendRequest","prompt","attachments","customParams","hasValidPrompt","hasValidAttachments","userMessage","aiMessage","params","_args2","_context2","undefined","_objectWithoutProperties","_excluded","trim","Array","isArray","console","warn","createUserMessage","createAssistantMessage","createMultiMessages","MESSAGE_CREATE","message","_objectSpread","messageID","id","sendUserMessage","_x3","_sendSystemMessage","_callee3","msg","systemMessage","_context3","role","content","type","data","createMessage","sendSystemMessage","_callee4","options","_options$params","_options$sendRequest","newAIMessage","_args4","_context4","sendAIMessage","_sendAIMessage","_resumeRun","_callee5","_args5","_context5","resumeRun","_abortChat","_callee6","_this$config2","_this$messageStore$la","messageId","_context6","stopReceive","onAbort","closeConnect","abort","stream","lastAIMessage","removeMessage","MESSAGE_DELETE","error","registerMergeStrategy","handler","registerHandler","mode","clearMessages","MESSAGE_CLEAR","_regenerateAIMessage","_callee7","_this$lastRequestPara","_this$lastRequestPara2","keepVersion","_args7","_context7","createMessageBranch","lastRequestParams","regenerateAIMessage","_sendRequest","_callee8","_t2","_context8","REQUEST_START","handleStreamRequest","handleBatchRequest","setMessageStatus","REQUEST_ERROR","getToolcallByName","name","_this$aguiAdapter","_handleBatchRequest","_callee9","result","_context9","processMessageResult","getMessageByID","REQUEST_COMPLETE","Error","handleError","_this$config$onError","_this$config3","onError","handleComplete","isAborted","chunk","_this$config$onComple","_this$config4","customResult","onComplete","allContentFailed","find","REQUEST_ABORT","_handleStreamRequest","_callee0","context","_context0","buildStreamContext","handleStream","_this2","getStopReceive","_isSnapshot","replaceContent","applyContentUpdate","MESSAGE_UPDATE","AGUIStreamHandler","emitDetailEvents","messageIds","map","_this$messageStore$ge","previousStatus","MESSAGE_STATUS_CHANGE"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -59,6 +59,8 @@ export declare class WebSocketClient extends EventEmitter {
59
59
  private timeoutTimer?;
60
60
  private manualClose;
61
61
  private firstMessageReceived;
62
+ /** 用于在 close 时 reject 正在等待的 connect promise */
63
+ private connectReject;
62
64
  constructor(url: string);
63
65
  /**
64
66
  * 连接 WebSocket 服务
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -14,7 +14,7 @@ import _defineProperty from '@babel/runtime/helpers/defineProperty';
14
14
  import _regeneratorRuntime from '@babel/runtime/regenerator';
15
15
  import SimpleEventEmitter from '../utils/eventEmitter.js';
16
16
  import { LoggerManager } from '../utils/logger.js';
17
- import { TimeoutError, ConnectionError } from './errors.js';
17
+ import { ConnectionError, TimeoutError } from './errors.js';
18
18
  import '@babel/runtime/helpers/wrapNativeSuper';
19
19
 
20
20
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -47,6 +47,7 @@ var WebSocketClient = /*#__PURE__*/function (_EventEmitter) {
47
47
  _defineProperty(_this, "retryCount", 0);
48
48
  _defineProperty(_this, "manualClose", false);
49
49
  _defineProperty(_this, "firstMessageReceived", false);
50
+ _defineProperty(_this, "connectReject", null);
50
51
  _this.url = url;
51
52
  _this.connectionId = _this.generateConnectionId();
52
53
  _this.config = _objectSpread({}, DEFAULT_WS_CONFIG);
@@ -116,10 +117,11 @@ var WebSocketClient = /*#__PURE__*/function (_EventEmitter) {
116
117
  key: "close",
117
118
  value: function () {
118
119
  var _close = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
120
+ var rejectFn;
119
121
  return _regeneratorRuntime.wrap(function (_context2) {
120
122
  while (1) switch (_context2.prev = _context2.next) {
121
123
  case 0:
122
- if (!(this.state === "disconnected" /* DISCONNECTED */ || this.state === "closing" /* CLOSING */)) {
124
+ if (!(this.state === "disconnected" /* DISCONNECTED */ || this.state === "closing" /* CLOSING */ || this.state === "closed" /* CLOSED */)) {
123
125
  _context2.next = 1;
124
126
  break;
125
127
  }
@@ -129,7 +131,18 @@ var WebSocketClient = /*#__PURE__*/function (_EventEmitter) {
129
131
  this.setState("closing" /* CLOSING */);
130
132
  try {
131
133
  this.clearTimers();
134
+ if (this.connectReject) {
135
+ rejectFn = this.connectReject;
136
+ this.connectReject = null;
137
+ rejectFn(new ConnectionError("Connection closed before established"));
138
+ }
132
139
  if (this.ws) {
140
+ if (this.ws.readyState === WebSocket.CONNECTING) {
141
+ this.ws.onopen = null;
142
+ this.ws.onmessage = null;
143
+ this.ws.onerror = null;
144
+ this.ws.onclose = null;
145
+ }
133
146
  this.ws.close(1e3, "Client initiated close");
134
147
  this.ws = null;
135
148
  }
@@ -194,6 +207,7 @@ var WebSocketClient = /*#__PURE__*/function (_EventEmitter) {
194
207
  value: function establishConnection() {
195
208
  var _this2 = this;
196
209
  return new Promise(function (resolve, reject) {
210
+ _this2.connectReject = reject;
197
211
  try {
198
212
  _this2.ws = new WebSocket(_this2.url);
199
213
  if (_this2.config.timeout > 0) {
@@ -207,6 +221,7 @@ var WebSocketClient = /*#__PURE__*/function (_EventEmitter) {
207
221
  }
208
222
  _this2.ws.onopen = function () {
209
223
  _this2.clearTimeout();
224
+ _this2.connectReject = null;
210
225
  _this2.setState("connected" /* CONNECTED */);
211
226
  _this2.retryCount = 0;
212
227
  _this2.connectionInfo.lastActivity = Date.now();
@@ -256,6 +271,7 @@ var WebSocketClient = /*#__PURE__*/function (_EventEmitter) {
256
271
  value: function handleClose(code, reason) {
257
272
  this.clearTimers();
258
273
  this.ws = null;
274
+ this.logger.warn("[WS handleClose] code=".concat(code, ", reason=\"").concat(reason, "\", manualClose=").concat(this.manualClose));
259
275
  if (this.manualClose || code === 1e3) {
260
276
  this.setState("closed" /* CLOSED */);
261
277
  this.emit("complete", this.manualClose);
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-client.js","sources":["../../../../../pro-components/chat/chat-engine/core/server/websocket-client.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nimport EventEmitter from '../utils/eventEmitter';\nimport { LoggerManager } from '../utils/logger';\nimport { ConnectionError, TimeoutError } from './errors';\nimport type { ConnectionInfo } from './types';\n\n/**\n * WebSocket 连接状态\n */\nexport enum WebSocketConnectionState {\n DISCONNECTED = 'disconnected',\n CONNECTING = 'connecting',\n CONNECTED = 'connected',\n CLOSING = 'closing',\n CLOSED = 'closed',\n ERROR = 'error',\n}\n\n/**\n * WebSocket 客户端配置\n */\nexport interface WebSocketClientConfig {\n /** 请求超时时间(毫秒) */\n timeout?: number;\n /** 重连间隔(毫秒) */\n retryInterval?: number;\n /** 最大重连次数 */\n maxRetries?: number;\n /** 心跳间隔(毫秒),0 表示禁用 */\n heartbeatInterval?: number;\n}\n\n/**\n * 默认 WebSocket 配置\n */\nexport const DEFAULT_WS_CONFIG: Required<WebSocketClientConfig> = {\n timeout: 30000,\n retryInterval: 1000,\n maxRetries: 5,\n heartbeatInterval: 30000,\n};\n\n/**\n * WebSocket 状态变更事件\n */\nexport interface WSStateChangeEvent {\n connectionId: string;\n from: WebSocketConnectionState;\n to: WebSocketConnectionState;\n timestamp: number;\n}\n\n/**\n * WebSocket 客户端\n *\n * 设计原则:\n * - 与 SSEClient 保持相同的事件接口(message、error、complete、start、stateChange)\n * - 支持心跳保活、自动重连\n * - 支持消息发送和接收\n */\nexport class WebSocketClient extends EventEmitter {\n public readonly connectionId: string;\n\n private state = WebSocketConnectionState.DISCONNECTED;\n\n private ws: WebSocket | null = null;\n\n private config: Required<WebSocketClientConfig>;\n\n private logger = LoggerManager.getLogger();\n\n private url: string;\n\n private connectionInfo: ConnectionInfo;\n\n private retryCount = 0;\n\n private reconnectTimer?: ReturnType<typeof setTimeout>;\n\n private heartbeatTimer?: ReturnType<typeof setInterval>;\n\n private timeoutTimer?: ReturnType<typeof setTimeout>;\n\n private manualClose = false;\n\n private firstMessageReceived = false;\n\n constructor(url: string) {\n super();\n this.url = url;\n this.connectionId = this.generateConnectionId();\n this.config = { ...DEFAULT_WS_CONFIG };\n\n this.connectionInfo = {\n id: this.connectionId,\n url,\n state: this.state,\n createdAt: Date.now(),\n retryCount: 0,\n lastActivity: Date.now(),\n stats: {},\n };\n\n this.setupInternalEventHandlers();\n }\n\n /**\n * 连接 WebSocket 服务\n */\n async connect(config?: WebSocketClientConfig): Promise<void> {\n if (this.state === WebSocketConnectionState.CONNECTED || this.state === WebSocketConnectionState.CONNECTING) {\n return;\n }\n\n this.config = {\n ...DEFAULT_WS_CONFIG,\n ...config,\n };\n\n this.manualClose = false;\n this.setState(WebSocketConnectionState.CONNECTING);\n\n try {\n await this.establishConnection();\n } catch (error) {\n this.handleConnectionError(error as Error);\n }\n }\n\n /**\n * 发送消息\n */\n send(data: string | object): void {\n if (this.state !== WebSocketConnectionState.CONNECTED || !this.ws) {\n this.logger.warn(`Cannot send message: WebSocket not connected (state: ${this.state})`);\n return;\n }\n\n const message = typeof data === 'string' ? data : JSON.stringify(data);\n this.ws.send(message);\n this.connectionInfo.lastActivity = Date.now();\n }\n\n /**\n * 关闭连接\n */\n async close(): Promise<void> {\n if (this.state === WebSocketConnectionState.DISCONNECTED || this.state === WebSocketConnectionState.CLOSING) {\n return;\n }\n\n this.manualClose = true;\n this.setState(WebSocketConnectionState.CLOSING);\n\n try {\n this.clearTimers();\n\n if (this.ws) {\n this.ws.close(1000, 'Client initiated close');\n this.ws = null;\n }\n\n this.emit('complete', true);\n } catch (error) {\n this.logger.error('WebSocket close failed:', error);\n this.emit('error', error);\n } finally {\n this.setState(WebSocketConnectionState.CLOSED);\n }\n }\n\n /**\n * 中止连接(与 SSEClient 接口保持一致)\n */\n async abort(): Promise<void> {\n return this.close();\n }\n\n /**\n * 获取连接状态\n */\n getStatus(): WebSocketConnectionState {\n return this.state;\n }\n\n /**\n * 获取连接信息\n */\n getInfo(): ConnectionInfo {\n return {\n ...this.connectionInfo,\n state: this.state,\n retryCount: this.retryCount,\n };\n }\n\n /**\n * 检查是否已连接\n */\n isConnected(): boolean {\n return this.state === WebSocketConnectionState.CONNECTED && this.ws?.readyState === WebSocket.OPEN;\n }\n\n /**\n * 建立 WebSocket 连接\n */\n private establishConnection(): Promise<void> {\n return new Promise((resolve, reject) => {\n try {\n this.ws = new WebSocket(this.url);\n\n // 连接超时处理\n if (this.config.timeout > 0) {\n this.timeoutTimer = setTimeout(() => {\n if (this.state === WebSocketConnectionState.CONNECTING) {\n const error = new TimeoutError(`WebSocket connection timeout after ${this.config.timeout}ms`);\n this.handleConnectionError(error);\n reject(error);\n }\n }, this.config.timeout);\n }\n\n this.ws.onopen = () => {\n this.clearTimeout();\n this.setState(WebSocketConnectionState.CONNECTED);\n this.retryCount = 0;\n this.connectionInfo.lastActivity = Date.now();\n\n // 启动心跳\n this.startHeartbeat();\n\n this.logger.info(`WebSocket ${this.connectionId} connected to ${this.url}`);\n resolve();\n };\n\n this.ws.onmessage = (event) => {\n this.handleMessage(event.data);\n };\n\n this.ws.onerror = (event) => {\n this.logger.error(`WebSocket ${this.connectionId} error:`, event);\n const error = new ConnectionError('WebSocket connection error');\n this.emit('error', error);\n };\n\n this.ws.onclose = (event) => {\n this.handleClose(event.code, event.reason);\n };\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * 处理接收到的消息\n */\n private handleMessage(data: string): void {\n this.connectionInfo.lastActivity = Date.now();\n\n // 首次消息,发出 start 事件\n if (!this.firstMessageReceived) {\n this.firstMessageReceived = true;\n this.emit('start', data);\n }\n\n // 尝试解析 JSON\n try {\n const parsed = JSON.parse(data);\n this.emit('message', {\n event: parsed.event || parsed.type || 'message',\n data: parsed,\n });\n } catch {\n // 非 JSON 消息,原样发送\n this.emit('message', {\n event: 'message',\n data,\n });\n }\n }\n\n /**\n * 处理连接关闭\n */\n private handleClose(code: number, reason: string): void {\n this.clearTimers();\n this.ws = null;\n\n if (this.manualClose || code === 1000) {\n // 正常关闭\n this.setState(WebSocketConnectionState.CLOSED);\n this.emit('complete', this.manualClose);\n this.logger.info(`WebSocket ${this.connectionId} closed normally`);\n } else {\n // 异常关闭,尝试重连\n this.setState(WebSocketConnectionState.DISCONNECTED);\n this.logger.warn(`WebSocket ${this.connectionId} closed unexpectedly: ${code} - ${reason}`);\n\n if (this.shouldReconnect()) {\n this.scheduleReconnect();\n } else {\n this.emit('complete', false);\n this.emit('error', new ConnectionError(`WebSocket closed: ${code} - ${reason}`));\n }\n }\n }\n\n /**\n * 处理连接错误\n */\n private handleConnectionError(error: Error): void {\n this.connectionInfo.error = error;\n this.setState(WebSocketConnectionState.ERROR);\n this.emit('error', error);\n\n if (this.shouldReconnect()) {\n this.scheduleReconnect();\n }\n }\n\n /**\n * 判断是否应该重连\n */\n private shouldReconnect(): boolean {\n return !this.manualClose && this.retryCount < this.config.maxRetries;\n }\n\n /**\n * 调度重连\n */\n private scheduleReconnect(): void {\n this.retryCount++;\n const delay = this.config.retryInterval * Math.pow(1.5, this.retryCount - 1);\n\n this.logger.info(`WebSocket ${this.connectionId} reconnecting in ${delay}ms (attempt ${this.retryCount}/${this.config.maxRetries})`);\n\n this.reconnectTimer = setTimeout(() => {\n if (!this.manualClose && this.state !== WebSocketConnectionState.CONNECTED) {\n this.firstMessageReceived = false;\n this.connect(this.config);\n }\n }, delay);\n }\n\n /**\n * 启动心跳\n *\n * 注意:OpenClaw Gateway 不支持 RPC 方式的 heartbeat 方法,\n * 这里仅通过检测连接活跃度来判断是否需要重连,\n * 不再主动发送 heartbeat 请求帧。\n */\n private startHeartbeat(): void {\n if (this.config.heartbeatInterval <= 0) return;\n\n this.heartbeatTimer = setInterval(() => {\n if (!this.isConnected()) {\n return;\n }\n\n // 检测连接是否长时间无活动(2倍心跳间隔),如果是则主动关闭触发重连\n const idleTime = Date.now() - this.connectionInfo.lastActivity;\n if (idleTime > this.config.heartbeatInterval * 2) {\n this.logger.warn(`WebSocket ${this.connectionId} idle for ${idleTime}ms, reconnecting...`);\n this.ws?.close(4000, 'Heartbeat timeout');\n }\n }, this.config.heartbeatInterval);\n }\n\n /**\n * 清理超时定时器\n */\n private clearTimeout(): void {\n if (this.timeoutTimer) {\n clearTimeout(this.timeoutTimer);\n this.timeoutTimer = undefined;\n }\n }\n\n /**\n * 清理所有定时器\n */\n private clearTimers(): void {\n this.clearTimeout();\n\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = undefined;\n }\n\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = undefined;\n }\n }\n\n /**\n * 设置连接状态\n */\n private setState(newState: WebSocketConnectionState): void {\n const oldState = this.state;\n this.state = newState;\n this.connectionInfo.state = newState;\n\n const stateChangeEvent: WSStateChangeEvent = {\n connectionId: this.connectionId,\n from: oldState,\n to: newState,\n timestamp: Date.now(),\n };\n\n this.emit('stateChange', stateChangeEvent);\n this.logger.debug(`WebSocket ${this.connectionId} state: ${oldState} -> ${newState}`);\n }\n\n /**\n * 设置内部事件处理器\n */\n private setupInternalEventHandlers(): void {\n this.on('error', (error) => {\n this.logger.error(`WebSocket Client ${this.connectionId} error:`, error);\n });\n\n this.on('complete', (isAborted) => {\n this.logger.info(`WebSocket Client ${this.connectionId} completed, aborted: ${isAborted}`);\n });\n }\n\n /**\n * 生成连接 ID\n */\n private generateConnectionId(): string {\n const timestamp = Date.now();\n return `ws_${timestamp}_${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n"],"names":["WebSocketConnectionState","DEFAULT_WS_CONFIG","timeout","retryInterval","maxRetries","heartbeatInterval","WebSocketClient","url","_this","_classCallCheck","_callSuper","_defineProperty","LoggerManager","getLogger","connectionId","generateConnectionId","config","_objectSpread","connectionInfo","id","state","createdAt","Date","now","retryCount","lastActivity","stats","setupInternalEventHandlers","_inherits","_EventEmitter","_createClass","key","value","_connect","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_t","wrap","_context","prev","next","abrupt","manualClose","setState","establishConnection","handleConnectionError","stop","connect","send","data","ws","logger","warn","concat","message","JSON","stringify","_close","_callee2","_context2","clearTimers","close","emit","error","apply","arguments","_abort","_callee3","_context3","abort","getStatus","getInfo","isConnected","_this$ws","readyState","WebSocket","OPEN","_this2","Promise","resolve","reject","timeoutTimer","setTimeout","TimeoutError","onopen","clearTimeout","startHeartbeat","info","onmessage","event","handleMessage","onerror","ConnectionError","onclose","handleClose","code","reason","firstMessageReceived","parsed","parse","type","_unused","shouldReconnect","scheduleReconnect","_this3","delay","Math","pow","reconnectTimer","_this4","heartbeatTimer","setInterval","idleTime","_this4$ws","_clearTimeout","toString","clearInterval","newState","oldState","stateChangeEvent","from","to","timestamp","debug","_this5","on","isAborted","random","substr","EventEmitter"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;IASYA,wBAAA,4BAAAA,yBAAL,EAAA;AACLA,EAAAA,0BAAA,cAAe,CAAA,GAAA,cAAA,CAAA;AACfA,EAAAA,0BAAA,YAAa,CAAA,GAAA,YAAA,CAAA;AACbA,EAAAA,0BAAA,WAAY,CAAA,GAAA,WAAA,CAAA;AACZA,EAAAA,0BAAA,SAAU,CAAA,GAAA,SAAA,CAAA;AACVA,EAAAA,0BAAA,QAAS,CAAA,GAAA,QAAA,CAAA;AACTA,EAAAA,0BAAA,OAAQ,CAAA,GAAA,OAAA,CAAA;AANEA,EAAAA,OAAAA,yBAAAA,CAAAA;AAAA,CAAA,CAAAA,wBAAA,IAAA,EAAA,EAAA;AA0BL,IAAMC,iBAAqD,GAAA;AAChEC,EAAAA,OAAS,EAAA,GAAA;AACTC,EAAAA,aAAe,EAAA,GAAA;AACfC,EAAAA,UAAY,EAAA,CAAA;AACZC,EAAAA,iBAAmB,EAAA,GAAA;AACrB,EAAA;AAoBaC,IAAAA;EA2BX,SAAAA,eAAAA,CAAYC,GAAa,EAAA;AAAA,IAAA,IAAAC,KAAA,CAAA;AAAAC,IAAAA,eAAA,OAAAH,eAAA,CAAA,CAAA;IACjBE,KAAA,GAAAE,UAAA,CAAA,IAAA,EAAAJ,eAAA,CAAA,CAAA;AAAAK,IAAAA,eAAA,CAAAH,KAAA,EAzBQ,OAAA,EAAA,cAAA,oBAAA,CAAA;IAAAG,eAAA,CAAAH,KAAA,EAAA,IAAA,EAEe,IAAA,CAAA,CAAA;AAAAG,IAAAA,eAAA,CAAAH,KAAA,EAAA,QAAA,EAIdI,cAAcC,SAAU,EAAA,CAAA,CAAA;IAAAF,eAAA,CAAAH,KAAA,EAAA,YAAA,EAMpB,CAAA,CAAA,CAAA;IAAAG,eAAA,CAAAH,KAAA,EAAA,aAAA,EAQC,KAAA,CAAA,CAAA;IAAAG,eAAA,CAAAH,KAAA,EAAA,sBAAA,EAES,KAAA,CAAA,CAAA;IAI7BA,KAAA,CAAKD,GAAM,GAAAA,GAAA,CAAA;AACNC,IAAAA,KAAA,CAAAM,YAAA,GAAeN,KAAA,CAAKO,oBAAqB,EAAA,CAAA;AACzCP,IAAAA,KAAA,CAAAQ,MAAA,GAAAC,aAAA,CAAA,EAAA,EAAchB,iBAAkB,CAAA,CAAA;IAErCO,KAAA,CAAKU,cAAiB,GAAA;MACpBC,IAAIX,KAAA,CAAKM,YAAA;AACTP,MAAAA,GAAA,EAAAA,GAAA;MACAa,OAAOZ,KAAA,CAAKY,KAAA;AACZC,MAAAA,SAAA,EAAWC,KAAKC,GAAI,EAAA;AACpBC,MAAAA,UAAY,EAAA,CAAA;AACZC,MAAAA,YAAA,EAAcH,KAAKC,GAAI,EAAA;AACvBG,MAAAA,OAAO,EAAC;KACV,CAAA;IAEAlB,KAAA,CAAKmB,0BAA2B,EAAA,CAAA;AAAA,IAAA,OAAAnB,KAAA,CAAA;AAClC,GAAA;EAAAoB,SAAA,CAAAtB,eAAA,EAAAuB,aAAA,CAAA,CAAA;EAAA,OAAAC,YAAA,CAAAxB,eAAA,EAAA,CAAA;IAAAyB,GAAA,EAAA,SAAA;IAAAC,KAAA,EAAA,YAAA;MAAA,IAAAC,QAAA,GAAAC,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAKA,SAAAC,OAAAA,CAAcrB,MAA+C,EAAA;AAAA,QAAA,IAAAsB,EAAA,CAAA;AAAA,QAAA,OAAAH,mBAAA,CAAAI,IAAA,CAAA,UAAAC,QAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,IAAA,EACvD,IAAK,CAAAtB,KAAA,KAAU,WAAsC,oBAAA,IAAA,CAAKA,UAAU,YAAqC,kBAAA,EAAA;AAAAoB,gBAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;cAAA,OAAAF,QAAA,CAAAG,MAAA,CAAA,QAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;cAI7G,IAAA,CAAK3B,MAAS,GAAAC,aAAA,CAAAA,aAAA,CACThB,EAAAA,EAAAA,iBAAA,CACAe,EAAAA,MAAA,CACL,CAAA;cAEA,IAAA,CAAK4B,WAAc,GAAA,KAAA,CAAA;AACnB,cAAA,IAAA,CAAKC,SAAS,YAAmC,kBAAA,CAAA;AAAAL,cAAAA,QAAA,CAAAC,IAAA,GAAA,CAAA,CAAA;AAAAD,cAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAGzC,KAAKI,mBAAoB,EAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAAAN,cAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,MAAA;AAAA,YAAA,KAAA,CAAA;AAAAF,cAAAA,QAAA,CAAAC,IAAA,GAAA,CAAA,CAAA;AAAAH,cAAAA,EAAA,GAAAE,QAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAE/B,cAAA,IAAA,CAAKO,wBAAoC,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAP,QAAA,CAAAQ,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAAX,OAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;OAE7C,CAAA,CAAA,CAAA;MAAA,SAlBMY;;;aAAAA;;;;WAuBN,SAAAC,KAAKC,IAA6B,EAAA;MAChC,IAAI,IAAK,CAAA/B,KAAA,KAAU,WAAsC,oBAAA,CAAC,KAAKgC,EAAI,EAAA;QACjE,IAAA,CAAKC,MAAO,CAAAC,IAAA,CAAA,uDAAA,CAAAC,MAAA,CAA6D,IAAA,CAAKnC,KAAQ,EAAA,GAAA,CAAA,CAAA,CAAA;AACtF,QAAA,OAAA;AACF,OAAA;AAEA,MAAA,IAAMoC,UAAU,OAAOL,IAAA,KAAS,WAAWA,IAAO,GAAAM,IAAA,CAAKC,UAAUP,IAAI,CAAA,CAAA;AAChE,MAAA,IAAA,CAAAC,EAAA,CAAGF,KAAKM,OAAO,CAAA,CAAA;MACf,IAAA,CAAAtC,cAAA,CAAeO,YAAe,GAAAH,IAAA,CAAKC,GAAI,EAAA,CAAA;AAC9C,KAAA;AAAA,GAAA,EAAA;IAAAQ,GAAA,EAAA,OAAA;IAAAC,KAAA,EAAA,YAAA;MAAA,IAAA2B,MAAA,GAAAzB,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAKA,SAAAwB,QAAA,GAAA;AAAA,QAAA,OAAAzB,mBAAA,CAAAI,IAAA,CAAA,UAAAsB,SAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAApB,IAAA,GAAAoB,SAAA,CAAAnB,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,IAAA,EACM,IAAK,CAAAtB,KAAA,KAAU,cAAyC,uBAAA,IAAA,CAAKA,UAAU,SAAkC,eAAA,EAAA;AAAAyC,gBAAAA,SAAA,CAAAnB,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;cAAA,OAAAmB,SAAA,CAAAlB,MAAA,CAAA,QAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;cAI7G,IAAA,CAAKC,WAAc,GAAA,IAAA,CAAA;AACnB,cAAA,IAAA,CAAKC,SAAS,SAAgC,eAAA,CAAA;cAE1C,IAAA;gBACF,IAAA,CAAKiB,WAAY,EAAA,CAAA;gBAEjB,IAAI,KAAKV,EAAI,EAAA;kBACN,IAAA,CAAAA,EAAA,CAAGW,KAAM,CAAA,GAAA,EAAM,wBAAwB,CAAA,CAAA;kBAC5C,IAAA,CAAKX,EAAK,GAAA,IAAA,CAAA;AACZ,iBAAA;AAEK,gBAAA,IAAA,CAAAY,IAAA,CAAK,YAAY,IAAI,CAAA,CAAA;uBACnBC,KAAP,EAAA;gBACK,IAAA,CAAAZ,MAAA,CAAOY,KAAM,CAAA,yBAAA,EAA2BA,KAAK,CAAA,CAAA;AAC7C,gBAAA,IAAA,CAAAD,IAAA,CAAK,SAASC,KAAK,CAAA,CAAA;AAC1B,eAAE,SAAA;AACA,gBAAA,IAAA,CAAKpB,SAAS,QAA+B,cAAA,CAAA;AAC/C,eAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAgB,SAAA,CAAAb,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAAY,QAAA,EAAA,IAAA,CAAA,CAAA;OACF,CAAA,CAAA,CAAA;AAAA,MAAA,SAvBMG,KAAuBA,GAAA;AAAA,QAAA,OAAAJ,MAAA,CAAAO,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAAA,OAAvBJ,KAAuB,CAAA;AAAA,KAAA,EAAA;AAAA,GAAA,EAAA;IAAAhC,GAAA,EAAA,OAAA;IAAAC,KAAA,EAAA,YAAA;MAAA,IAAAoC,MAAA,GAAAlC,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CA4B7B,SAAAiC,QAAA,GAAA;AAAA,QAAA,OAAAlC,mBAAA,CAAAI,IAAA,CAAA,UAAA+B,SAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAA7B,IAAA,GAAA6B,SAAA,CAAA5B,IAAA;AAAA,YAAA,KAAA,CAAA;cAAA,OAAA4B,SAAA,CAAA3B,MAAA,CAAA,QAAA,EACS,KAAKoB,KAAM,EAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAO,SAAA,CAAAtB,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAAqB,QAAA,EAAA,IAAA,CAAA,CAAA;OACpB,CAAA,CAAA,CAAA;AAAA,MAAA,SAFME,KAAuBA,GAAA;AAAA,QAAA,OAAAH,MAAA,CAAAF,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAAA,OAAvBI,KAAuB,CAAA;AAAA,KAAA,EAAA;AAAA,GAAA,EAAA;IAAAxC,GAAA,EAAA,WAAA;AAAAC,IAAAA,KAAA,EAO7B,SAAAwC,SAAsCA,GAAA;MACpC,OAAO,IAAK,CAAApD,KAAA,CAAA;AACd,KAAA;AAAA,GAAA,EAAA;IAAAW,GAAA,EAAA,SAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAyC,OAA0BA,GAAA;AACjB,MAAA,OAAAxD,aAAA,CAAAA,aAAA,CACF,EAAA,EAAA,IAAK,CAAAC,cAAA,CAAA,EAAA,EAAA,EAAA;QACRE,OAAO,IAAK,CAAAA,KAAA;QACZI,YAAY,IAAK,CAAAA,UAAAA;AAAA,OAAA,CAAA,CAAA;AAErB,KAAA;AAAA,GAAA,EAAA;IAAAO,GAAA,EAAA,aAAA;AAAAC,IAAAA,KAAA,EAKA,SAAA0C,WAAuBA,GAAA;AAAA,MAAA,IAAAC,QAAA,CAAA;MACrB,OAAO,KAAKvD,KAAU,KAAA,WAAA,oBAAsC,EAAAuD,QAAA,GAAA,IAAK,CAAAvB,EAAA,MAAA,IAAA,IAAAuB,QAAA,KAALA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,QAAA,CAASC,gBAAeC,SAAU,CAAAC,IAAA,CAAA;AAChG,KAAA;AAAA,GAAA,EAAA;IAAA/C,GAAA,EAAA,qBAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAc,mBAAqCA,GAAA;AAAA,MAAA,IAAAiC,MAAA,GAAA,IAAA,CAAA;AAC3C,MAAA,OAAO,IAAIC,OAAA,CAAQ,UAACC,OAAA,EAASC,MAAW,EAAA;QAClC,IAAA;UACFH,MAAA,CAAK3B,EAAK,GAAA,IAAIyB,SAAU,CAAAE,MAAA,CAAKxE,GAAG,CAAA,CAAA;AAG5B,UAAA,IAAAwE,MAAA,CAAK/D,MAAO,CAAAd,OAAA,GAAU,CAAG,EAAA;AACtB6E,YAAAA,MAAA,CAAAI,YAAA,GAAeC,WAAW,YAAM;AAC/B,cAAA,IAAAL,MAAA,CAAK3D,UAAU,YAAqC,mBAAA;AACtD,gBAAA,IAAM6C,QAAQ,IAAIoB,YAAA,CAAA9B,qCAAAA,CAAAA,MAAA,CAAmDwB,MAAA,CAAK/D,OAAOd,OAAW,OAAA,CAAA,CAAA;AAC5F6E,gBAAAA,MAAA,CAAKhC,sBAAsBkB,KAAK,CAAA,CAAA;gBAChCiB,MAAA,CAAOjB,KAAK,CAAA,CAAA;AACd,eAAA;AACF,aAAA,EAAGc,MAAK,CAAA/D,MAAA,CAAOd,OAAO,CAAA,CAAA;AACxB,WAAA;AAEK6E,UAAAA,MAAA,CAAA3B,EAAA,CAAGkC,SAAS,YAAM;YACrBP,MAAA,CAAKQ,YAAa,EAAA,CAAA;AAClBR,YAAAA,MAAA,CAAKlC,SAAS,WAAkC,iBAAA,CAAA;YAChDkC,MAAA,CAAKvD,UAAa,GAAA,CAAA,CAAA;YACbuD,MAAA,CAAA7D,cAAA,CAAeO,YAAe,GAAAH,IAAA,CAAKC,GAAI,EAAA,CAAA;YAG5CwD,MAAA,CAAKS,cAAe,EAAA,CAAA;AAEpBT,YAAAA,MAAA,CAAK1B,OAAOoC,IAAK,CAAA,YAAA,CAAAlC,MAAA,CAAawB,MAAK,CAAAjE,YAAA,oBAAAyC,MAAA,CAA6BwB,OAAKxE,GAAK,CAAA,CAAA,CAAA;AAClE0E,YAAAA,OAAA,EAAA,CAAA;WACV,CAAA;AAEKF,UAAAA,MAAA,CAAA3B,EAAA,CAAGsC,SAAY,GAAA,UAACC,KAAU,EAAA;AACxBZ,YAAAA,MAAA,CAAAa,aAAA,CAAcD,MAAMxC,IAAI,CAAA,CAAA;WAC/B,CAAA;AAEK4B,UAAAA,MAAA,CAAA3B,EAAA,CAAGyC,OAAU,GAAA,UAACF,KAAU,EAAA;AAC3BZ,YAAAA,MAAA,CAAK1B,MAAO,CAAAY,KAAA,CAAAV,YAAAA,CAAAA,MAAA,CAAmBwB,MAAA,CAAKjE,cAAuB6E,SAAAA,CAAAA,EAAAA,KAAK,CAAA,CAAA;AAC1D,YAAA,IAAA1B,KAAA,GAAQ,IAAI6B,eAAA,CAAgB,4BAA4B,CAAA,CAAA;AACzDf,YAAAA,MAAA,CAAAf,IAAA,CAAK,SAASC,KAAK,CAAA,CAAA;WAC1B,CAAA;AAEKc,UAAAA,MAAA,CAAA3B,EAAA,CAAG2C,OAAU,GAAA,UAACJ,KAAU,EAAA;YAC3BZ,MAAA,CAAKiB,WAAY,CAAAL,KAAA,CAAMM,IAAM,EAAAN,KAAA,CAAMO,MAAM,CAAA,CAAA;WAC3C,CAAA;iBACOjC,KAAP,EAAA;UACAiB,MAAA,CAAOjB,KAAK,CAAA,CAAA;AACd,SAAA;AACF,OAAC,CAAA,CAAA;AACH,KAAA;AAAA,GAAA,EAAA;IAAAlC,GAAA,EAAA,eAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAA4D,cAAczC,IAAoB,EAAA;MACnC,IAAA,CAAAjC,cAAA,CAAeO,YAAe,GAAAH,IAAA,CAAKC,GAAI,EAAA,CAAA;AAGxC,MAAA,IAAA,CAAC,KAAK4E,oBAAsB,EAAA;QAC9B,IAAA,CAAKA,oBAAuB,GAAA,IAAA,CAAA;AACvB,QAAA,IAAA,CAAAnC,IAAA,CAAK,SAASb,IAAI,CAAA,CAAA;AACzB,OAAA;MAGI,IAAA;AACI,QAAA,IAAAiD,MAAA,GAAS3C,IAAK,CAAA4C,KAAA,CAAMlD,IAAI,CAAA,CAAA;AAC9B,QAAA,IAAA,CAAKa,KAAK,SAAW,EAAA;UACnB2B,KAAO,EAAAS,MAAA,CAAOT,KAAS,IAAAS,MAAA,CAAOE,IAAQ,IAAA,SAAA;AACtCnD,UAAAA,IAAM,EAAAiD,MAAAA;AACR,SAAC,CAAA,CAAA;OACD,CAAA,OAAAG,OAAA,EAAA;AAEA,QAAA,IAAA,CAAKvC,KAAK,SAAW,EAAA;AACnB2B,UAAAA,KAAO,EAAA,SAAA;AACPxC,UAAAA,IAAA,EAAAA,IAAAA;AACF,SAAC,CAAA,CAAA;AACH,OAAA;AACF,KAAA;AAAA,GAAA,EAAA;IAAApB,GAAA,EAAA,aAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAgE,WAAAA,CAAYC,MAAcC,MAAsB,EAAA;MACtD,IAAA,CAAKpC,WAAY,EAAA,CAAA;MACjB,IAAA,CAAKV,EAAK,GAAA,IAAA,CAAA;AAEN,MAAA,IAAA,IAAA,CAAKR,WAAe,IAAAqD,IAAA,KAAS,GAAM,EAAA;AAErC,QAAA,IAAA,CAAKpD,SAAS,QAA+B,cAAA,CAAA;QACxC,IAAA,CAAAmB,IAAA,CAAK,UAAY,EAAA,IAAA,CAAKpB,WAAW,CAAA,CAAA;QACtC,IAAA,CAAKS,MAAO,CAAAoC,IAAA,CAAA,YAAA,CAAAlC,MAAA,CAAkB,IAAA,CAAKzC,YAA8B,EAAA,kBAAA,CAAA,CAAA,CAAA;AACnE,OAAO,MAAA;AAEL,QAAA,IAAA,CAAK+B,SAAS,cAAqC,oBAAA,CAAA;AACnD,QAAA,IAAA,CAAKQ,OAAOC,IAAK,CAAAC,YAAAA,CAAAA,MAAA,CAAa,IAAK,CAAAzC,YAAA,EAAAyC,wBAAAA,CAAAA,CAAAA,MAAA,CAAqC0C,oBAAUC,MAAQ,CAAA,CAAA,CAAA;AAEtF,QAAA,IAAA,IAAA,CAAKM,iBAAmB,EAAA;UAC1B,IAAA,CAAKC,iBAAkB,EAAA,CAAA;AACzB,SAAO,MAAA;AACA,UAAA,IAAA,CAAAzC,IAAA,CAAK,YAAY,KAAK,CAAA,CAAA;AAC3B,UAAA,IAAA,CAAKA,KAAK,OAAS,EAAA,IAAI8B,4CAAqCG,IAAA,EAAA1C,KAAAA,CAAAA,CAAAA,MAAA,CAAU2C,OAAQ,CAAC,CAAA,CAAA;AACjF,SAAA;AACF,OAAA;AACF,KAAA;AAAA,GAAA,EAAA;IAAAnE,GAAA,EAAA,uBAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAe,sBAAsBkB,KAAoB,EAAA;AAChD,MAAA,IAAA,CAAK/C,eAAe+C,KAAQ,GAAAA,KAAA,CAAA;AAC5B,MAAA,IAAA,CAAKpB,SAAS,OAA8B,aAAA,CAAA;AACvC,MAAA,IAAA,CAAAmB,IAAA,CAAK,SAASC,KAAK,CAAA,CAAA;AAEpB,MAAA,IAAA,IAAA,CAAKuC,iBAAmB,EAAA;QAC1B,IAAA,CAAKC,iBAAkB,EAAA,CAAA;AACzB,OAAA;AACF,KAAA;AAAA,GAAA,EAAA;IAAA1E,GAAA,EAAA,iBAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAwE,eAA2BA,GAAA;AACjC,MAAA,OAAO,CAAC,IAAK,CAAA5D,WAAA,IAAe,IAAK,CAAApB,UAAA,GAAa,KAAKR,MAAO,CAAAZ,UAAA,CAAA;AAC5D,KAAA;AAAA,GAAA,EAAA;IAAA2B,GAAA,EAAA,mBAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAyE,iBAA0BA,GAAA;AAAA,MAAA,IAAAC,MAAA,GAAA,IAAA,CAAA;MAC3B,IAAA,CAAAlF,UAAA,EAAA,CAAA;AACC,MAAA,IAAAmF,KAAA,GAAQ,KAAK3F,MAAO,CAAAb,aAAA,GAAgByG,KAAKC,GAAI,CAAA,GAAA,EAAK,IAAK,CAAArF,UAAA,GAAa,CAAC,CAAA,CAAA;AAEtE,MAAA,IAAA,CAAA6B,MAAA,CAAOoC,IAAK,CAAAlC,YAAAA,CAAAA,MAAA,CAAa,IAAK,CAAAzC,YAAA,EAAAyC,mBAAAA,CAAAA,CAAAA,MAAA,CAAgCoD,8BAAoB,IAAK,CAAAnF,UAAA,EAAA+B,GAAAA,CAAAA,CAAAA,MAAA,CAAc,IAAK,CAAAvC,MAAA,CAAOZ,UAAa,MAAA,CAAA,CAAA;AAE9H,MAAA,IAAA,CAAA0G,cAAA,GAAiB1B,WAAW,YAAM;QACrC,IAAI,CAACsB,MAAA,CAAK9D,WAAe,IAAA8D,MAAA,CAAKtF,UAAU,WAAoC,kBAAA;UAC1EsF,MAAA,CAAKP,oBAAuB,GAAA,KAAA,CAAA;AACvBO,UAAAA,MAAA,CAAAzD,OAAA,CAAQyD,OAAK1F,MAAM,CAAA,CAAA;AAC1B,SAAA;SACC2F,KAAK,CAAA,CAAA;AACV,KAAA;AAAA,GAAA,EAAA;IAAA5E,GAAA,EAAA,gBAAA;AAAAC,IAAAA,KAAA,EASQ,SAAAwD,cAAuBA,GAAA;AAAA,MAAA,IAAAuB,MAAA,GAAA,IAAA,CAAA;AACzB,MAAA,IAAA,IAAA,CAAK/F,OAAOX,iBAAqB,IAAA,CAAA,EAAG,OAAA;AAEnC,MAAA,IAAA,CAAA2G,cAAA,GAAiBC,YAAY,YAAM;AAClC,QAAA,IAAA,CAACF,MAAK,CAAArC,WAAA,EAAe,EAAA;AACvB,UAAA,OAAA;AACF,SAAA;AAGA,QAAA,IAAMwC,QAAW,GAAA5F,IAAA,CAAKC,GAAI,EAAA,GAAIwF,OAAK7F,cAAe,CAAAO,YAAA,CAAA;QAClD,IAAIyF,QAAW,GAAAH,MAAA,CAAK/F,MAAO,CAAAX,iBAAA,GAAoB,CAAG,EAAA;AAAA,UAAA,IAAA8G,SAAA,CAAA;AAChDJ,UAAAA,MAAA,CAAK1D,MAAO,CAAAC,IAAA,cAAAC,MAAA,CAAkBwD,MAAA,CAAKjG,mCAAyBoG,QAA6B,wBAAA,CAAA,CAAA;AACpF,UAAA,CAAAC,SAAA,GAAAJ,MAAA,CAAA3D,EAAA,MAAA+D,IAAAA,IAAAA,SAAA,KAAAA,KAAAA,CAAAA,IAAAA,SAAA,CAAIpD,KAAM,CAAA,GAAA,EAAM,mBAAmB,CAAA,CAAA;AAC1C,SAAA;AACF,OAAA,EAAG,IAAK,CAAA/C,MAAA,CAAOX,iBAAiB,CAAA,CAAA;AAClC,KAAA;AAAA,GAAA,EAAA;IAAA0B,GAAA,EAAA,cAAA;AAAAC,IAAAA,KAAA,YAAAoF,aAAA,EAAA;AAAA,MAAA,SAKQ7B,YAAqBA,GAAA;AAAA,QAAA,OAAA6B,aAAA,CAAAlD,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,OAAA;AAArBoB,MAAAA,YAAqB,CAAA8B,QAAA,GAAA,YAAA;QAAA,OAAAD,aAAA,CAAAC,QAAA,EAAA,CAAA;AAAA,OAAA,CAAA;AAAA,MAAA,OAArB9B,YAAqB,CAAA;AAAA,KAAA,CAArB,YAAqB;MAC3B,IAAI,KAAKJ,YAAc,EAAA;AACrBI,QAAAA,YAAA,CAAa,KAAKJ,YAAY,CAAA,CAAA;AAC9B,QAAA,IAAA,CAAKA,YAAe,GAAA,KAAA,CAAA,CAAA;AACtB,OAAA;KACF,CAAA;AAAA,GAAA,EAAA;IAAApD,GAAA,EAAA,aAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAA8B,WAAoBA,GAAA;MAC1B,IAAA,CAAKyB,YAAa,EAAA,CAAA;MAElB,IAAI,KAAKuB,cAAgB,EAAA;AACvBvB,QAAAA,YAAA,CAAa,KAAKuB,cAAc,CAAA,CAAA;AAChC,QAAA,IAAA,CAAKA,cAAiB,GAAA,KAAA,CAAA,CAAA;AACxB,OAAA;MAEA,IAAI,KAAKE,cAAgB,EAAA;AACvBM,QAAAA,aAAA,CAAc,KAAKN,cAAc,CAAA,CAAA;AACjC,QAAA,IAAA,CAAKA,cAAiB,GAAA,KAAA,CAAA,CAAA;AACxB,OAAA;AACF,KAAA;AAAA,GAAA,EAAA;IAAAjF,GAAA,EAAA,UAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAa,SAAS0E,QAA0C,EAAA;AACzD,MAAA,IAAMC,WAAW,IAAK,CAAApG,KAAA,CAAA;MACtB,IAAA,CAAKA,KAAQ,GAAAmG,QAAA,CAAA;AACb,MAAA,IAAA,CAAKrG,eAAeE,KAAQ,GAAAmG,QAAA,CAAA;AAE5B,MAAA,IAAME,gBAAuC,GAAA;QAC3C3G,cAAc,IAAK,CAAAA,YAAA;AACnB4G,QAAAA,IAAM,EAAAF,QAAA;AACNG,QAAAA,EAAI,EAAAJ,QAAA;AACJK,QAAAA,SAAA,EAAWtG,KAAKC,GAAI,EAAA;OACtB,CAAA;AAEK,MAAA,IAAA,CAAAyC,IAAA,CAAK,eAAeyD,gBAAgB,CAAA,CAAA;AACzC,MAAA,IAAA,CAAKpE,OAAOwE,KAAM,CAAAtE,YAAAA,CAAAA,MAAA,CAAa,IAAK,CAAAzC,YAAA,EAAAyC,UAAAA,CAAAA,CAAAA,MAAA,CAAuBiE,yBAAeD,QAAU,CAAA,CAAA,CAAA;AACtF,KAAA;AAAA,GAAA,EAAA;IAAAxF,GAAA,EAAA,4BAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAL,0BAAmCA,GAAA;AAAA,MAAA,IAAAmG,MAAA,GAAA,IAAA,CAAA;AACpC,MAAA,IAAA,CAAAC,EAAA,CAAG,OAAS,EAAA,UAAC9D,KAAU,EAAA;AAC1B6D,QAAAA,MAAA,CAAKzE,MAAO,CAAAY,KAAA,CAAAV,mBAAAA,CAAAA,MAAA,CAA0BuE,MAAA,CAAKhH,cAAuBmD,SAAAA,CAAAA,EAAAA,KAAK,CAAA,CAAA;AACzE,OAAC,CAAA,CAAA;AAEI,MAAA,IAAA,CAAA8D,EAAA,CAAG,UAAY,EAAA,UAACC,SAAc,EAAA;AACjCF,QAAAA,MAAA,CAAKzE,MAAO,CAAAoC,IAAA,qBAAAlC,MAAA,CAAyBuE,MAAA,CAAKhH,8CAAoCkH,SAAW,CAAA,CAAA,CAAA;AAC3F,OAAC,CAAA,CAAA;AACH,KAAA;AAAA,GAAA,EAAA;IAAAjG,GAAA,EAAA,sBAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAjB,oBAA+BA,GAAA;AAC/B,MAAA,IAAA6G,SAAA,GAAYtG,KAAKC,GAAI,EAAA,CAAA;MACpB,OAAAgC,KAAAA,CAAAA,MAAA,CAAMqE,SAAa,EAAA,GAAA,CAAA,CAAArE,MAAA,CAAAqD,IAAA,CAAKqB,MAAO,EAAA,CAAEZ,SAAS,EAAE,CAAA,CAAEa,MAAO,CAAA,CAAA,EAAG,CAAC,CAAA,CAAA,CAAA;AAClE,KAAA;AAAA,GAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAtXmCC,kBAAa;;;;"}
1
+ {"version":3,"file":"websocket-client.js","sources":["../../../../../pro-components/chat/chat-engine/core/server/websocket-client.ts"],"sourcesContent":["/* eslint-disable max-classes-per-file */\nimport EventEmitter from '../utils/eventEmitter';\nimport { LoggerManager } from '../utils/logger';\nimport { ConnectionError, TimeoutError } from './errors';\nimport type { ConnectionInfo } from './types';\n\n/**\n * WebSocket 连接状态\n */\nexport enum WebSocketConnectionState {\n DISCONNECTED = 'disconnected',\n CONNECTING = 'connecting',\n CONNECTED = 'connected',\n CLOSING = 'closing',\n CLOSED = 'closed',\n ERROR = 'error',\n}\n\n/**\n * WebSocket 客户端配置\n */\nexport interface WebSocketClientConfig {\n /** 请求超时时间(毫秒) */\n timeout?: number;\n /** 重连间隔(毫秒) */\n retryInterval?: number;\n /** 最大重连次数 */\n maxRetries?: number;\n /** 心跳间隔(毫秒),0 表示禁用 */\n heartbeatInterval?: number;\n}\n\n/**\n * 默认 WebSocket 配置\n */\nexport const DEFAULT_WS_CONFIG: Required<WebSocketClientConfig> = {\n timeout: 30000,\n retryInterval: 1000,\n maxRetries: 5,\n heartbeatInterval: 30000,\n};\n\n/**\n * WebSocket 状态变更事件\n */\nexport interface WSStateChangeEvent {\n connectionId: string;\n from: WebSocketConnectionState;\n to: WebSocketConnectionState;\n timestamp: number;\n}\n\n/**\n * WebSocket 客户端\n *\n * 设计原则:\n * - 与 SSEClient 保持相同的事件接口(message、error、complete、start、stateChange)\n * - 支持心跳保活、自动重连\n * - 支持消息发送和接收\n */\nexport class WebSocketClient extends EventEmitter {\n public readonly connectionId: string;\n\n private state = WebSocketConnectionState.DISCONNECTED;\n\n private ws: WebSocket | null = null;\n\n private config: Required<WebSocketClientConfig>;\n\n private logger = LoggerManager.getLogger();\n\n private url: string;\n\n private connectionInfo: ConnectionInfo;\n\n private retryCount = 0;\n\n private reconnectTimer?: ReturnType<typeof setTimeout>;\n\n private heartbeatTimer?: ReturnType<typeof setInterval>;\n\n private timeoutTimer?: ReturnType<typeof setTimeout>;\n\n private manualClose = false;\n\n private firstMessageReceived = false;\n\n /** 用于在 close 时 reject 正在等待的 connect promise */\n private connectReject: ((reason: Error) => void) | null = null;\n\n constructor(url: string) {\n super();\n this.url = url;\n this.connectionId = this.generateConnectionId();\n this.config = { ...DEFAULT_WS_CONFIG };\n\n this.connectionInfo = {\n id: this.connectionId,\n url,\n state: this.state,\n createdAt: Date.now(),\n retryCount: 0,\n lastActivity: Date.now(),\n stats: {},\n };\n\n this.setupInternalEventHandlers();\n }\n\n /**\n * 连接 WebSocket 服务\n */\n async connect(config?: WebSocketClientConfig): Promise<void> {\n if (this.state === WebSocketConnectionState.CONNECTED || this.state === WebSocketConnectionState.CONNECTING) {\n return;\n }\n\n this.config = {\n ...DEFAULT_WS_CONFIG,\n ...config,\n };\n\n this.manualClose = false;\n this.setState(WebSocketConnectionState.CONNECTING);\n\n try {\n await this.establishConnection();\n } catch (error) {\n this.handleConnectionError(error as Error);\n }\n }\n\n /**\n * 发送消息\n */\n send(data: string | object): void {\n if (this.state !== WebSocketConnectionState.CONNECTED || !this.ws) {\n this.logger.warn(`Cannot send message: WebSocket not connected (state: ${this.state})`);\n return;\n }\n\n const message = typeof data === 'string' ? data : JSON.stringify(data);\n this.ws.send(message);\n this.connectionInfo.lastActivity = Date.now();\n }\n\n /**\n * 关闭连接\n */\n async close(): Promise<void> {\n if (this.state === WebSocketConnectionState.DISCONNECTED || this.state === WebSocketConnectionState.CLOSING || this.state === WebSocketConnectionState.CLOSED) {\n return;\n }\n\n this.manualClose = true;\n this.setState(WebSocketConnectionState.CLOSING);\n\n try {\n this.clearTimers();\n\n // 如果 connect 还在 pending(CONNECTING 阶段被 close),reject 它\n if (this.connectReject) {\n const rejectFn = this.connectReject;\n this.connectReject = null;\n rejectFn(new ConnectionError('Connection closed before established'));\n }\n\n if (this.ws) {\n // 如果 WebSocket 还在 CONNECTING 阶段,先移除事件处理器以避免触发错误回调\n if (this.ws.readyState === WebSocket.CONNECTING) {\n this.ws.onopen = null;\n this.ws.onmessage = null;\n this.ws.onerror = null;\n this.ws.onclose = null;\n }\n this.ws.close(1000, 'Client initiated close');\n this.ws = null;\n }\n\n this.emit('complete', true);\n } catch (error) {\n this.logger.error('WebSocket close failed:', error);\n this.emit('error', error);\n } finally {\n this.setState(WebSocketConnectionState.CLOSED);\n }\n }\n\n /**\n * 中止连接(与 SSEClient 接口保持一致)\n */\n async abort(): Promise<void> {\n return this.close();\n }\n\n /**\n * 获取连接状态\n */\n getStatus(): WebSocketConnectionState {\n return this.state;\n }\n\n /**\n * 获取连接信息\n */\n getInfo(): ConnectionInfo {\n return {\n ...this.connectionInfo,\n state: this.state,\n retryCount: this.retryCount,\n };\n }\n\n /**\n * 检查是否已连接\n */\n isConnected(): boolean {\n return this.state === WebSocketConnectionState.CONNECTED && this.ws?.readyState === WebSocket.OPEN;\n }\n\n /**\n * 建立 WebSocket 连接\n */\n private establishConnection(): Promise<void> {\n return new Promise((resolve, reject) => {\n // 保存 reject,以便 close() 时可以 reject 这个 pending promise\n this.connectReject = reject;\n\n try {\n this.ws = new WebSocket(this.url);\n\n // 连接超时处理\n if (this.config.timeout > 0) {\n this.timeoutTimer = setTimeout(() => {\n if (this.state === WebSocketConnectionState.CONNECTING) {\n const error = new TimeoutError(`WebSocket connection timeout after ${this.config.timeout}ms`);\n this.handleConnectionError(error);\n reject(error);\n }\n }, this.config.timeout);\n }\n\n this.ws.onopen = () => {\n this.clearTimeout();\n this.connectReject = null;\n this.setState(WebSocketConnectionState.CONNECTED);\n this.retryCount = 0;\n this.connectionInfo.lastActivity = Date.now();\n\n // 启动心跳\n this.startHeartbeat();\n\n this.logger.info(`WebSocket ${this.connectionId} connected to ${this.url}`);\n resolve();\n };\n\n this.ws.onmessage = (event) => {\n this.handleMessage(event.data);\n };\n\n this.ws.onerror = (event) => {\n this.logger.error(`WebSocket ${this.connectionId} error:`, event);\n const error = new ConnectionError('WebSocket connection error');\n this.emit('error', error);\n };\n\n this.ws.onclose = (event) => {\n this.handleClose(event.code, event.reason);\n };\n } catch (error) {\n reject(error);\n }\n });\n }\n\n /**\n * 处理接收到的消息\n */\n private handleMessage(data: string): void {\n this.connectionInfo.lastActivity = Date.now();\n\n // 首次消息,发出 start 事件\n if (!this.firstMessageReceived) {\n this.firstMessageReceived = true;\n this.emit('start', data);\n }\n\n // 尝试解析 JSON\n try {\n const parsed = JSON.parse(data);\n this.emit('message', {\n event: parsed.event || parsed.type || 'message',\n data: parsed,\n });\n } catch {\n // 非 JSON 消息,原样发送\n this.emit('message', {\n event: 'message',\n data,\n });\n }\n }\n\n /**\n * 处理连接关闭\n */\n private handleClose(code: number, reason: string): void {\n this.clearTimers();\n this.ws = null;\n\n this.logger.warn(`[WS handleClose] code=${code}, reason=\"${reason}\", manualClose=${this.manualClose}`);\n\n if (this.manualClose || code === 1000) {\n // 正常关闭\n this.setState(WebSocketConnectionState.CLOSED);\n this.emit('complete', this.manualClose);\n this.logger.info(`WebSocket ${this.connectionId} closed normally`);\n } else {\n // 异常关闭,尝试重连\n this.setState(WebSocketConnectionState.DISCONNECTED);\n this.logger.warn(`WebSocket ${this.connectionId} closed unexpectedly: ${code} - ${reason}`);\n\n if (this.shouldReconnect()) {\n this.scheduleReconnect();\n } else {\n this.emit('complete', false);\n this.emit('error', new ConnectionError(`WebSocket closed: ${code} - ${reason}`));\n }\n }\n }\n\n /**\n * 处理连接错误\n */\n private handleConnectionError(error: Error): void {\n this.connectionInfo.error = error;\n this.setState(WebSocketConnectionState.ERROR);\n this.emit('error', error);\n\n if (this.shouldReconnect()) {\n this.scheduleReconnect();\n }\n }\n\n /**\n * 判断是否应该重连\n */\n private shouldReconnect(): boolean {\n return !this.manualClose && this.retryCount < this.config.maxRetries;\n }\n\n /**\n * 调度重连\n */\n private scheduleReconnect(): void {\n this.retryCount++;\n const delay = this.config.retryInterval * Math.pow(1.5, this.retryCount - 1);\n\n this.logger.info(`WebSocket ${this.connectionId} reconnecting in ${delay}ms (attempt ${this.retryCount}/${this.config.maxRetries})`);\n\n this.reconnectTimer = setTimeout(() => {\n if (!this.manualClose && this.state !== WebSocketConnectionState.CONNECTED) {\n this.firstMessageReceived = false;\n this.connect(this.config);\n }\n }, delay);\n }\n\n /**\n * 启动心跳\n *\n * 注意:OpenClaw Gateway 不支持 RPC 方式的 heartbeat 方法,\n * 这里仅通过检测连接活跃度来判断是否需要重连,\n * 不再主动发送 heartbeat 请求帧。\n */\n private startHeartbeat(): void {\n if (this.config.heartbeatInterval <= 0) return;\n\n this.heartbeatTimer = setInterval(() => {\n if (!this.isConnected()) {\n return;\n }\n\n // 检测连接是否长时间无活动(2倍心跳间隔),如果是则主动关闭触发重连\n const idleTime = Date.now() - this.connectionInfo.lastActivity;\n if (idleTime > this.config.heartbeatInterval * 2) {\n this.logger.warn(`WebSocket ${this.connectionId} idle for ${idleTime}ms, reconnecting...`);\n this.ws?.close(4000, 'Heartbeat timeout');\n }\n }, this.config.heartbeatInterval);\n }\n\n /**\n * 清理超时定时器\n */\n private clearTimeout(): void {\n if (this.timeoutTimer) {\n clearTimeout(this.timeoutTimer);\n this.timeoutTimer = undefined;\n }\n }\n\n /**\n * 清理所有定时器\n */\n private clearTimers(): void {\n this.clearTimeout();\n\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = undefined;\n }\n\n if (this.heartbeatTimer) {\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = undefined;\n }\n }\n\n /**\n * 设置连接状态\n */\n private setState(newState: WebSocketConnectionState): void {\n const oldState = this.state;\n this.state = newState;\n this.connectionInfo.state = newState;\n\n const stateChangeEvent: WSStateChangeEvent = {\n connectionId: this.connectionId,\n from: oldState,\n to: newState,\n timestamp: Date.now(),\n };\n\n this.emit('stateChange', stateChangeEvent);\n this.logger.debug(`WebSocket ${this.connectionId} state: ${oldState} -> ${newState}`);\n }\n\n /**\n * 设置内部事件处理器\n */\n private setupInternalEventHandlers(): void {\n this.on('error', (error) => {\n this.logger.error(`WebSocket Client ${this.connectionId} error:`, error);\n });\n\n this.on('complete', (isAborted) => {\n this.logger.info(`WebSocket Client ${this.connectionId} completed, aborted: ${isAborted}`);\n });\n }\n\n /**\n * 生成连接 ID\n */\n private generateConnectionId(): string {\n const timestamp = Date.now();\n return `ws_${timestamp}_${Math.random().toString(36).substr(2, 9)}`;\n }\n}\n"],"names":["WebSocketConnectionState","DEFAULT_WS_CONFIG","timeout","retryInterval","maxRetries","heartbeatInterval","WebSocketClient","url","_this","_classCallCheck","_callSuper","_defineProperty","LoggerManager","getLogger","connectionId","generateConnectionId","config","_objectSpread","connectionInfo","id","state","createdAt","Date","now","retryCount","lastActivity","stats","setupInternalEventHandlers","_inherits","_EventEmitter","_createClass","key","value","_connect","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_t","wrap","_context","prev","next","abrupt","manualClose","setState","establishConnection","handleConnectionError","stop","connect","send","data","ws","logger","warn","concat","message","JSON","stringify","_close","_callee2","rejectFn","_context2","clearTimers","connectReject","ConnectionError","readyState","WebSocket","CONNECTING","onopen","onmessage","onerror","onclose","close","emit","error","apply","arguments","_abort","_callee3","_context3","abort","getStatus","getInfo","isConnected","_this$ws","OPEN","_this2","Promise","resolve","reject","timeoutTimer","setTimeout","TimeoutError","clearTimeout","startHeartbeat","info","event","handleMessage","handleClose","code","reason","firstMessageReceived","parsed","parse","type","_unused","shouldReconnect","scheduleReconnect","_this3","delay","Math","pow","reconnectTimer","_this4","heartbeatTimer","setInterval","idleTime","_this4$ws","_clearTimeout","toString","clearInterval","newState","oldState","stateChangeEvent","from","to","timestamp","debug","_this5","on","isAborted","random","substr","EventEmitter"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -19,7 +19,7 @@ import '@babel/runtime/helpers/typeof';
19
19
  import '@babel/runtime/helpers/objectWithoutProperties';
20
20
  import '@babel/runtime/helpers/toArray';
21
21
  import '@babel/runtime/helpers/slicedToArray';
22
- import '../../../_chunks/dep-13265eca.js';
22
+ import '../../../_chunks/dep-907337f3.js';
23
23
  import '@babel/runtime/helpers/wrapNativeSuper';
24
24
 
25
25
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -14,7 +14,7 @@ import _inherits from '@babel/runtime/helpers/inherits';
14
14
  import ReactiveState from './reactiveState.js';
15
15
  import '@babel/runtime/helpers/toConsumableArray';
16
16
  import '@babel/runtime/helpers/slicedToArray';
17
- import '../../../_chunks/dep-13265eca.js';
17
+ import '../../../_chunks/dep-907337f3.js';
18
18
  import '@babel/runtime/helpers/wrapNativeSuper';
19
19
  import '@babel/runtime/helpers/typeof';
20
20
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -9,7 +9,7 @@ import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
9
9
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
10
10
  import _createClass from '@babel/runtime/helpers/createClass';
11
11
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
12
- import { e as enablePatches, a as produceWithPatches } from '../../../_chunks/dep-13265eca.js';
12
+ import { e as enablePatches, a as produceWithPatches } from '../../../_chunks/dep-907337f3.js';
13
13
  import '@babel/runtime/helpers/possibleConstructorReturn';
14
14
  import '@babel/runtime/helpers/getPrototypeOf';
15
15
  import '@babel/runtime/helpers/inherits';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */