@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/adapters/openclaw/index.ts"],"sourcesContent":["/**\n * OpenClaw 协议适配器\n *\n * 功能:\n * 1. 管理 WebSocket 连接生命周期\n * 2. 处理 OpenClaw 协议的握手和认证\n * 3. 将 OpenClaw 事件转换为 ChatEngine 统一的消息格式\n * 4. 提供与 AGUIAdapter 相似的接口,便于 ChatEngine 统一调度\n */\nimport EventEmitter from '../../utils/eventEmitter';\nimport { LoggerManager } from '../../utils/logger';\nimport { WebSocketClient, type WebSocketClientConfig, WebSocketConnectionState } from '../../server/websocket-client';\nimport type { AIMessageContent, ChatRequestParams, SSEChunkData } from '../../type';\nimport { OpenClawEventMapper, type EventMapResult } from './event-mapper';\nimport { OpenClawRPCHandler, RPCError } from './rpc-handler';\nimport type {\n OpenClawConfig,\n OpenClawFrame,\n OpenClawEventFrame,\n OpenClawResponseFrame,\n ConnectParams,\n ConnectChallengePayload,\n} from './types';\nimport { mergeOpenClawConfig, DEFAULT_OPENCLAW_CONFIG } from './types/config';\nimport { OpenClawEventType, OpenClawConnectionState } from './types/events';\nimport {\n generateUUID,\n parseFrame,\n getPlatform,\n getUserAgent,\n getLocale,\n formatWebSocketUrl,\n} from './utils';\n\nimport {\n convertOpenClawHistory,\n convertOpenClawHistoryResponse,\n type OpenClawHistoryMessage,\n type OpenClawHistoryResponse,\n type ConvertHistoryOptions,\n} from './history-converter';\n\n// 重新导出类型\nexport * from './types';\nexport { OpenClawEventMapper, type EventMapResult } from './event-mapper';\nexport { OpenClawRPCHandler, RPCError } from './rpc-handler';\nexport {\n convertOpenClawHistory,\n convertOpenClawHistoryResponse,\n type OpenClawHistoryMessage,\n type OpenClawHistoryResponse,\n type ConvertHistoryOptions,\n} from './history-converter';\n\n/**\n * OpenClaw 适配器回调接口\n */\nexport interface OpenClawAdapterCallbacks {\n /** 连接成功 */\n onConnected?: () => void;\n /** 连接断开 */\n onDisconnected?: (reason?: string) => void;\n /** 消息开始 */\n onStart?: () => void;\n /** 消息完成 */\n onComplete?: (isAborted: boolean, params?: ChatRequestParams) => void;\n /** 错误发生 */\n onError?: (error: Error) => void;\n /** 消息内容更新 */\n onMessage?: (content: AIMessageContent | AIMessageContent[]) => void;\n /**\n * 历史消息加载完成\n *\n * OpenClaw Gateway 在 connect 响应中可能附带历史消息(messages 字段),\n * 当检测到历史消息时,适配器会自动将其转换为 ChatEngine 格式并触发此回调。\n * 上层可以通过 chatEngine.setMessages(messages, 'replace') 回填到对话界面。\n */\n onHistoryLoaded?: (messages: import('../../type').ChatMessagesData[]) => void;\n}\n\n/**\n * OpenClaw 适配器配置\n */\nexport interface OpenClawAdapterConfig extends OpenClawConfig {\n /** WebSocket 端点 */\n endpoint: string;\n /** 请求超时(毫秒) */\n timeout?: number;\n /** 最大重试次数 */\n maxRetries?: number;\n /** 重试间隔(毫秒) */\n retryInterval?: number;\n}\n\n/**\n * OpenClaw 协议适配器\n */\nexport class OpenClawAdapter extends EventEmitter {\n private wsClient: WebSocketClient | null = null;\n\n private rpcHandler: OpenClawRPCHandler;\n\n private eventMapper: OpenClawEventMapper;\n\n private config: Required<OpenClawConfig>;\n\n private adapterConfig: OpenClawAdapterConfig;\n\n private connectionState = OpenClawConnectionState.DISCONNECTED;\n\n private instanceId: string;\n\n private logger = LoggerManager.getLogger();\n\n private callbacks: OpenClawAdapterCallbacks = {};\n\n private isStreaming = false;\n\n private currentRequestParams: ChatRequestParams | null = null;\n\n constructor(config: OpenClawAdapterConfig) {\n super();\n this.adapterConfig = config;\n this.config = mergeOpenClawConfig(config);\n this.instanceId = generateUUID();\n this.rpcHandler = new OpenClawRPCHandler({ timeout: config.timeout });\n this.eventMapper = new OpenClawEventMapper();\n }\n\n /**\n * 设置回调\n */\n setCallbacks(callbacks: OpenClawAdapterCallbacks): void {\n this.callbacks = callbacks;\n }\n\n /**\n * 连接到 OpenClaw Gateway\n * 等待 WebSocket 连接建立并完成认证握手后才返回\n */\n async connect(): Promise<void> {\n if (this.connectionState === OpenClawConnectionState.AUTHENTICATED) {\n return;\n }\n\n this.connectionState = OpenClawConnectionState.CONNECTING;\n\n const url = formatWebSocketUrl(this.adapterConfig.endpoint);\n this.wsClient = new WebSocketClient(url);\n\n // 设置 RPC 发送函数\n this.rpcHandler.setSendFunction((frame) => {\n this.wsClient?.send(frame);\n });\n\n // 绑定事件处理\n this.setupEventHandlers();\n\n // 连接 WebSocket\n const wsConfig: WebSocketClientConfig = {\n timeout: this.adapterConfig.timeout,\n maxRetries: this.adapterConfig.maxRetries,\n retryInterval: this.adapterConfig.retryInterval,\n heartbeatInterval: this.config.heartbeatInterval,\n };\n\n await this.wsClient.connect(wsConfig);\n\n // 等待认证完成(connect.challenge 握手)\n await this.waitForAuthentication();\n }\n\n /**\n * 等待认证完成\n * WebSocket 连接建立后,服务器会发送 connect.challenge 事件,\n * 适配器会自动回复 connect 请求完成握手。\n * 此方法等待整个握手流程完成后再返回。\n */\n private waitForAuthentication(): Promise<void> {\n // 如果已经认证,直接返回\n if (this.connectionState === OpenClawConnectionState.AUTHENTICATED) {\n return Promise.resolve();\n }\n\n const timeout = this.adapterConfig.timeout || 30000;\n\n return new Promise<void>((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n this.off('connected', onConnected);\n this.off('error', onError);\n };\n\n const onConnected = () => {\n cleanup();\n resolve();\n };\n\n const onError = (error: Error) => {\n cleanup();\n reject(error);\n };\n\n this.once('connected', onConnected);\n this.once('error', onError);\n\n // 超时处理\n timer = setTimeout(() => {\n cleanup();\n reject(new Error(`OpenClaw authentication timeout after ${timeout}ms`));\n }, timeout);\n });\n }\n\n /**\n * 发送聊天消息\n */\n async sendMessage(params: ChatRequestParams, requestParams?: Record<string, unknown>): Promise<void> {\n if (this.connectionState !== OpenClawConnectionState.AUTHENTICATED) {\n throw new Error('Not authenticated. Please connect first.');\n }\n\n this.currentRequestParams = params;\n this.isStreaming = true;\n this.eventMapper.reset();\n\n // 合并用户自定义参数\n const chatParams = {\n message: params.prompt || '',\n idempotencyKey: generateUUID(),\n ...requestParams,\n };\n\n try {\n this.callbacks.onStart?.();\n await this.rpcHandler.chatSend(chatParams);\n // 响应会通过事件流返回,这里只是发送请求\n } catch (error) {\n this.isStreaming = false;\n this.callbacks.onError?.(error as Error);\n throw error;\n }\n }\n\n /**\n * 处理 SSE 数据块(兼容 ChatEngine 接口)\n */\n handleEvent(chunk: SSEChunkData): AIMessageContent | AIMessageContent[] | null {\n // 将 SSE 格式转换为 OpenClaw 帧格式\n const frame = parseFrame(chunk.data);\n if (!frame || frame.type !== 'event') {\n return null;\n }\n\n const result = this.eventMapper.mapEvent(frame as OpenClawEventFrame);\n\n if (result.isFinal) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(false, this.currentRequestParams || undefined);\n }\n\n if (result.hasError && result.errorMessage) {\n this.callbacks.onError?.(new Error(result.errorMessage));\n }\n\n return result.content;\n }\n\n /**\n * 调用 Action(供 Toolcall/Activity 组件的 respond/action 使用)\n *\n * 通过 OpenClaw 的 node.invoke RPC 方法上行,利用 WebSocket 双向通道\n * 将用户在交互式组件中的操作(respond/confirm/update 等)发送回 Agent 端。\n *\n * @param params.nodeId - toolCallId 或 activityType,标识目标节点\n * @param params.action - 操作类型,如 \"respond\" | \"update\" | \"confirm\"\n * @param params.payload - 用户操作数据\n * @returns Agent 端返回的响应数据\n *\n * @example\n * ```tsx\n * // 在 ToolCallRenderer 的 onRespond 中使用\n * <ToolCallRenderer\n * toolCall={toolCall}\n * onRespond={async (tc, response) => {\n * await openclawAdapter.invokeAction({\n * nodeId: tc.toolCallId,\n * action: 'respond',\n * payload: response,\n * });\n * }}\n * />\n * ```\n */\n async invokeAction(params: {\n nodeId: string;\n action: string;\n payload: unknown;\n }): Promise<unknown> {\n if (this.connectionState !== OpenClawConnectionState.AUTHENTICATED) {\n throw new Error('Not authenticated. Please connect first.');\n }\n\n return this.rpcHandler.nodeInvoke({\n ...params,\n runId: this.eventMapper.getCurrentRunId() || undefined,\n });\n }\n\n /**\n * 获取会话历史消息\n *\n * 通过 OpenClaw 的 sessions.history RPC 方法获取指定会话的历史消息,\n * 并自动转换为 ChatEngine 的 ChatMessagesData 格式。\n *\n * @param sessionKey - 会话标识\n * @param options - 转换选项\n * @returns ChatEngine 格式的消息数组,可直接传给 chatEngine.setMessages() 或 useChat 的 defaultMessages\n *\n * @example\n * ```tsx\n * const messages = await adapter.fetchHistory('agent:main:main');\n * chatEngine.setMessages(messages, 'replace');\n * ```\n */\n async fetchHistory(\n sessionKey: string,\n options?: ConvertHistoryOptions,\n ): Promise<import('../../type').ChatMessagesData[]> {\n if (this.connectionState !== OpenClawConnectionState.AUTHENTICATED) {\n throw new Error('Not authenticated. Please connect first.');\n }\n\n const response = await this.rpcHandler.sessionsHistory({ sessionKey }) as OpenClawHistoryResponse;\n return convertOpenClawHistoryResponse(response, options);\n }\n\n /**\n * 断开连接\n */\n async disconnect(): Promise<void> {\n this.connectionState = OpenClawConnectionState.CLOSING;\n this.rpcHandler.cancelAll('Disconnecting');\n\n if (this.wsClient) {\n await this.wsClient.close();\n this.wsClient = null;\n }\n\n this.connectionState = OpenClawConnectionState.DISCONNECTED;\n this.callbacks.onDisconnected?.();\n }\n\n /**\n * 中止当前流式传输\n */\n abort(): void {\n if (this.isStreaming) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(true, this.currentRequestParams || undefined);\n }\n }\n\n /**\n * 获取连接状态\n */\n getConnectionState(): OpenClawConnectionState {\n return this.connectionState;\n }\n\n /**\n * 检查是否已认证\n */\n isAuthenticated(): boolean {\n return this.connectionState === OpenClawConnectionState.AUTHENTICATED;\n }\n\n /**\n * 重置适配器状态\n */\n reset(): void {\n this.eventMapper.reset();\n this.rpcHandler.reset();\n this.isStreaming = false;\n this.currentRequestParams = null;\n }\n\n /**\n * 销毁适配器\n */\n async destroy(): Promise<void> {\n await this.disconnect();\n this.rpcHandler.destroy();\n this.removeAllListeners();\n }\n\n /**\n * 设置 WebSocket 事件处理器\n */\n private setupEventHandlers(): void {\n if (!this.wsClient) return;\n\n this.wsClient.on('message', (event: { event: string; data: unknown }) => {\n this.handleWebSocketMessage(event.data);\n });\n\n this.wsClient.on('error', (error: Error) => {\n this.logger.error('OpenClaw WebSocket error:', error);\n this.callbacks.onError?.(error);\n });\n\n this.wsClient.on('complete', (isAborted: boolean) => {\n if (this.isStreaming) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(isAborted, this.currentRequestParams || undefined);\n }\n this.callbacks.onDisconnected?.(isAborted ? 'Aborted' : 'Connection closed');\n });\n\n this.wsClient.on('stateChange', (event: { from: WebSocketConnectionState; to: WebSocketConnectionState }) => {\n this.logger.debug(`WebSocket state: ${event.from} -> ${event.to}`);\n if (event.to === WebSocketConnectionState.CONNECTED) {\n this.connectionState = OpenClawConnectionState.HANDSHAKING;\n }\n });\n }\n\n /**\n * 处理 WebSocket 消息\n */\n private handleWebSocketMessage(data: unknown): void {\n const frame = parseFrame(data as string | object);\n if (!frame) {\n this.logger.warn('Failed to parse OpenClaw frame:', data);\n return;\n }\n\n // 处理响应帧\n if (frame.type === 'res') {\n this.rpcHandler.handleResponse(frame as OpenClawResponseFrame);\n return;\n }\n\n // 处理事件帧\n if (frame.type === 'event') {\n this.handleEventFrame(frame as OpenClawEventFrame);\n }\n }\n\n /**\n * 处理事件帧\n */\n private handleEventFrame(frame: OpenClawEventFrame): void {\n const { event, payload } = frame;\n\n // 处理连接挑战事件\n if (event === OpenClawEventType.CONNECT_CHALLENGE) {\n this.handleConnectChallenge(payload as ConnectChallengePayload);\n return;\n }\n\n // 流式消息事件\n if (this.isStreaming) {\n const result = this.eventMapper.mapEvent(frame);\n\n if (result.content) {\n this.callbacks.onMessage?.(result.content);\n this.emit('message', result.content);\n }\n\n if (result.isFinal) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(false, this.currentRequestParams || undefined);\n }\n\n if (result.hasError && result.errorMessage) {\n this.callbacks.onError?.(new Error(result.errorMessage));\n }\n }\n }\n\n /**\n * 处理连接挑战(握手)\n *\n * 认证成功后,如果 connect 响应中包含 messages 字段(历史消息),\n * 会自动转换为 ChatEngine 格式并触发 onHistoryLoaded 回调。\n */\n private async handleConnectChallenge(payload: ConnectChallengePayload): Promise<void> {\n this.logger.debug('Received connect.challenge, sending connect request');\n\n const connectParams: ConnectParams = {\n minProtocol: this.config.protocolVersion.min,\n maxProtocol: this.config.protocolVersion.max,\n client: {\n id: this.config.client.id,\n version: this.config.client.version,\n platform: getPlatform(),\n mode: this.config.client.mode,\n instanceId: this.instanceId,\n },\n role: 'operator',\n scopes: ['operator.admin'],\n caps: [],\n userAgent: getUserAgent(),\n locale: getLocale(),\n };\n\n try {\n const response = await this.rpcHandler.connect(connectParams);\n this.connectionState = OpenClawConnectionState.AUTHENTICATED;\n this.logger.info('OpenClaw authenticated successfully:', response);\n this.callbacks.onConnected?.();\n this.emit('connected', response);\n\n // 检查 connect 响应中是否包含历史消息\n // OpenClaw Gateway 会在 connect 响应的 payload 中附带 messages 数组,\n // 用于页面刷新后自动回填历史对话记录(无需额外 RPC 请求)\n const connectPayload = response as Record<string, unknown>;\n if (Array.isArray(connectPayload?.messages) && connectPayload.messages.length > 0) {\n this.logger.info(`OpenClaw connect response contains ${connectPayload.messages.length} history messages, converting...`);\n try {\n const historyResponse = {\n sessionKey: (connectPayload.sessionKey as string) || '',\n sessionId: (connectPayload.sessionId as string) || '',\n messages: connectPayload.messages as OpenClawHistoryMessage[],\n };\n const convertedMessages = convertOpenClawHistory(historyResponse.messages);\n this.logger.info(`Converted ${convertedMessages.length} history messages`);\n this.callbacks.onHistoryLoaded?.(convertedMessages);\n this.emit('historyLoaded', convertedMessages);\n } catch (historyError) {\n this.logger.warn('Failed to convert history messages from connect response:', historyError);\n // 历史消息转换失败不影响正常连接\n }\n }\n } catch (error) {\n this.connectionState = OpenClawConnectionState.ERROR;\n this.logger.error('OpenClaw authentication failed:', error);\n this.callbacks.onError?.(error as Error);\n this.emit('error', error);\n }\n }\n}\n"],"names":["OpenClawAdapter","config","_this","_classCallCheck","_callSuper","_defineProperty","OpenClawConnectionState","DISCONNECTED","LoggerManager","getLogger","adapterConfig","mergeOpenClawConfig","instanceId","generateUUID","rpcHandler","OpenClawRPCHandler","timeout","eventMapper","OpenClawEventMapper","_inherits","_EventEmitter","_createClass","key","value","setCallbacks","callbacks","_connect","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_this2","url","wsConfig","wrap","_context","prev","next","connectionState","AUTHENTICATED","abrupt","CONNECTING","formatWebSocketUrl","endpoint","wsClient","WebSocketClient","setSendFunction","frame","_this2$wsClient","send","setupEventHandlers","maxRetries","retryInterval","heartbeatInterval","connect","waitForAuthentication","stop","apply","arguments","_this3","Promise","resolve","reject","timer","cleanup","clearTimeout","off","onConnected","onError","error","once","setTimeout","Error","concat","_sendMessage","_callee2","params","requestParams","chatParams","_this$callbacks$onSta","_this$callbacks","_this$callbacks$onErr","_this$callbacks2","_t","_context2","currentRequestParams","isStreaming","reset","_objectSpread","message","prompt","idempotencyKey","onStart","call","chatSend","sendMessage","_x","_x2","handleEvent","chunk","parseFrame","data","type","result","mapEvent","isFinal","_this$callbacks$onCom","_this$callbacks3","onComplete","hasError","errorMessage","_this$callbacks$onErr2","_this$callbacks4","content","_invokeAction","_callee3","_context3","nodeInvoke","runId","getCurrentRunId","invokeAction","_callee4","sessionKey","options","response","_context4","sessionsHistory","convertOpenClawHistoryResponse","fetchHistory","_x4","_x5","_fetchHistory","_disconnect","_callee5","_this$callbacks$onDis","_this$callbacks5","_context5","CLOSING","cancelAll","close","onDisconnected","disconnect","abort","_this$callbacks$onCom2","_this$callbacks6","getConnectionState","isAuthenticated","_destroy","_callee6","_context6","destroy","removeAllListeners","_this4","on","event","handleWebSocketMessage","_this4$callbacks$onEr","_this4$callbacks","logger","isAborted","_this4$callbacks$onDi","_this4$callbacks3","_this4$callbacks$onCo","_this4$callbacks2","debug","from","to","WebSocketConnectionState","CONNECTED","HANDSHAKING","warn","handleResponse","handleEventFrame","payload","OpenClawEventType","CONNECT_CHALLENGE","handleConnectChallenge","_this$callbacks$onMes","_this$callbacks7","onMessage","emit","_this$callbacks$onCom3","_this$callbacks8","_this$callbacks$onErr3","_this$callbacks9","_handleConnectChallenge","_callee7","connectParams","_this$callbacks$onCon","_this$callbacks0","connectPayload","_this$callbacks$onHis","_this$callbacks1","historyResponse","convertedMessages","_this$callbacks$onErr4","_this$callbacks10","_t2","_context7","minProtocol","protocolVersion","min","maxProtocol","max","client","id","version","platform","getPlatform","mode","role","scopes","caps","userAgent","getUserAgent","locale","getLocale","sent","info","Array","isArray","messages","length","sessionId","convertOpenClawHistory","onHistoryLoaded","historyError","ERROR","EventEmitter"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/index.ts"],"sourcesContent":["/**\n * OpenClaw 协议适配器\n *\n * 功能:\n * 1. 管理 WebSocket 连接生命周期\n * 2. 处理 OpenClaw 协议的握手和认证\n * 3. 将 OpenClaw 事件转换为 ChatEngine 统一的消息格式\n * 4. 提供与 AGUIAdapter 相似的接口,便于 ChatEngine 统一调度\n */\nimport EventEmitter from '../../utils/eventEmitter';\nimport { LoggerManager } from '../../utils/logger';\nimport { WebSocketClient, type WebSocketClientConfig, WebSocketConnectionState } from '../../server/websocket-client';\nimport type { AIMessageContent, ChatRequestParams, SSEChunkData } from '../../type';\nimport { OpenClawEventMapper, type EventMapResult } from './event-mapper';\nimport { OpenClawRPCHandler, RPCError } from './rpc-handler';\nimport type {\n OpenClawConfig,\n OpenClawFrame,\n OpenClawEventFrame,\n OpenClawResponseFrame,\n ConnectParams,\n ConnectChallengePayload,\n} from './types';\nimport { mergeOpenClawConfig, DEFAULT_OPENCLAW_CONFIG } from './types/config';\nimport { OpenClawEventType, OpenClawConnectionState } from './types/events';\nimport {\n generateUUID,\n parseFrame,\n getPlatform,\n getUserAgent,\n getLocale,\n formatWebSocketUrl,\n} from './utils';\n\nimport {\n convertOpenClawHistory,\n convertOpenClawHistoryResponse,\n type OpenClawHistoryMessage,\n type OpenClawHistoryResponse,\n type ConvertHistoryOptions,\n} from './history-converter';\nimport { DeviceKeyManager } from './device-key-manager';\n\n// 重新导出类型\nexport * from './types';\nexport { OpenClawEventMapper, type EventMapResult } from './event-mapper';\nexport { OpenClawRPCHandler, RPCError } from './rpc-handler';\nexport { DeviceKeyManager, type DeviceKeyPair, type DeviceIdentity } from './device-key-manager';\nexport {\n convertOpenClawHistory,\n convertOpenClawHistoryResponse,\n type OpenClawHistoryMessage,\n type OpenClawHistoryResponse,\n type ConvertHistoryOptions,\n} from './history-converter';\n\n/**\n * OpenClaw 适配器回调接口\n */\nexport interface OpenClawAdapterCallbacks {\n /** 连接成功 */\n onConnected?: () => void;\n /** 连接断开 */\n onDisconnected?: (reason?: string) => void;\n /** 消息开始 */\n onStart?: () => void;\n /** 消息完成 */\n onComplete?: (isAborted: boolean, params?: ChatRequestParams) => void;\n /** 错误发生 */\n onError?: (error: Error) => void;\n /** 消息内容更新 */\n onMessage?: (content: AIMessageContent | AIMessageContent[]) => void;\n /**\n * 历史消息加载完成\n *\n * OpenClaw Gateway 在 connect 响应中可能附带历史消息(messages 字段),\n * 当检测到历史消息时,适配器会自动将其转换为 ChatEngine 格式并触发此回调。\n * 上层可以通过 chatEngine.setMessages(messages, 'replace') 回填到对话界面。\n */\n onHistoryLoaded?: (messages: import('../../type').ChatMessagesData[]) => void;\n}\n\n/**\n * OpenClaw 适配器配置\n */\nexport interface OpenClawAdapterConfig extends OpenClawConfig {\n /** WebSocket 端点 */\n endpoint: string;\n /** 请求超时(毫秒) */\n timeout?: number;\n /** 最大重试次数 */\n maxRetries?: number;\n /** 重试间隔(毫秒) */\n retryInterval?: number;\n}\n\n/**\n * OpenClaw 协议适配器\n */\nexport class OpenClawAdapter extends EventEmitter {\n private wsClient: WebSocketClient | null = null;\n\n private rpcHandler: OpenClawRPCHandler;\n\n private eventMapper: OpenClawEventMapper;\n\n private config: Required<OpenClawConfig>;\n\n private adapterConfig: OpenClawAdapterConfig;\n\n private connectionState = OpenClawConnectionState.DISCONNECTED;\n\n private instanceId: string;\n\n private logger = LoggerManager.getLogger();\n\n private callbacks: OpenClawAdapterCallbacks = {};\n\n private isStreaming = false;\n\n private currentRequestParams: ChatRequestParams | null = null;\n\n private deviceKeyManager: DeviceKeyManager | null = null;\n\n /** 动态传入的认证信息,用于 connect 握手(一次性使用) */\n private pendingAuth: Record<string, unknown> | null = null;\n\n constructor(config: OpenClawAdapterConfig) {\n super();\n this.adapterConfig = config;\n this.config = mergeOpenClawConfig(config);\n this.instanceId = generateUUID();\n this.rpcHandler = new OpenClawRPCHandler({ timeout: config.timeout });\n this.eventMapper = new OpenClawEventMapper();\n\n // 启用设备认证时,初始化密钥管理器\n if (this.config.deviceAuth) {\n this.deviceKeyManager = new DeviceKeyManager(this.config.client.id);\n }\n }\n\n /**\n * 设置回调\n */\n setCallbacks(callbacks: OpenClawAdapterCallbacks): void {\n this.callbacks = callbacks;\n }\n\n /**\n * 设置连接认证信息(在 connect 之前调用)\n *\n * 传入的 auth 会在下一次 connect 握手时使用(一次性),\n * 用于从 onRequest 动态获取 token 等认证信息。\n */\n setConnectAuth(auth: Record<string, unknown>): void {\n this.pendingAuth = auth;\n }\n\n /**\n * 连接到 OpenClaw Gateway\n * 等待 WebSocket 连接建立并完成认证握手后才返回\n */\n async connect(): Promise<void> {\n if (this.connectionState === OpenClawConnectionState.AUTHENTICATED) {\n return;\n }\n\n this.connectionState = OpenClawConnectionState.CONNECTING;\n\n const url = formatWebSocketUrl(this.adapterConfig.endpoint);\n this.wsClient = new WebSocketClient(url);\n\n // 设置 RPC 发送函数\n this.rpcHandler.setSendFunction((frame) => {\n this.wsClient?.send(frame);\n });\n\n // 绑定事件处理\n this.setupEventHandlers();\n\n // 连接 WebSocket\n const wsConfig: WebSocketClientConfig = {\n timeout: this.adapterConfig.timeout,\n maxRetries: this.adapterConfig.maxRetries,\n retryInterval: this.adapterConfig.retryInterval,\n heartbeatInterval: this.config.heartbeatInterval,\n };\n\n await this.wsClient.connect(wsConfig);\n\n // 等待认证完成(connect.challenge 握手)\n await this.waitForAuthentication();\n }\n\n /**\n * 等待认证完成\n * WebSocket 连接建立后,服务器会发送 connect.challenge 事件,\n * 适配器会自动回复 connect 请求完成握手。\n * 此方法等待整个握手流程完成后再返回。\n */\n private waitForAuthentication(): Promise<void> {\n // 如果已经认证,直接返回\n if (this.connectionState === OpenClawConnectionState.AUTHENTICATED) {\n return Promise.resolve();\n }\n\n const timeout = this.adapterConfig.timeout || 30000;\n\n return new Promise<void>((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n this.off('connected', onConnected);\n this.off('error', onError);\n };\n\n const onConnected = () => {\n cleanup();\n resolve();\n };\n\n const onError = (error: Error) => {\n cleanup();\n reject(error);\n };\n\n this.once('connected', onConnected);\n this.once('error', onError);\n\n // 超时处理\n timer = setTimeout(() => {\n cleanup();\n reject(new Error(`OpenClaw authentication timeout after ${timeout}ms`));\n }, timeout);\n });\n }\n\n /**\n * 发送聊天消息\n */\n async sendMessage(params: ChatRequestParams, requestParams?: Record<string, unknown>): Promise<void> {\n if (this.connectionState !== OpenClawConnectionState.AUTHENTICATED) {\n throw new Error('Not authenticated. Please connect first.');\n }\n\n this.currentRequestParams = params;\n this.isStreaming = true;\n this.eventMapper.reset();\n\n // 合并用户自定义参数(剔除 auth,auth 仅用于 connect 握手)\n const { auth: _auth, ...sendParams } = requestParams || {};\n const chatParams = {\n message: params.prompt || '',\n idempotencyKey: generateUUID(),\n ...sendParams,\n };\n\n try {\n this.callbacks.onStart?.();\n await this.rpcHandler.chatSend(chatParams);\n // 响应会通过事件流返回,这里只是发送请求\n } catch (error) {\n this.isStreaming = false;\n this.callbacks.onError?.(error as Error);\n throw error;\n }\n }\n\n /**\n * 处理 SSE 数据块(兼容 ChatEngine 接口)\n */\n handleEvent(chunk: SSEChunkData): AIMessageContent | AIMessageContent[] | null {\n // 将 SSE 格式转换为 OpenClaw 帧格式\n const frame = parseFrame(chunk.data);\n if (!frame || frame.type !== 'event') {\n return null;\n }\n\n const result = this.eventMapper.mapEvent(frame as OpenClawEventFrame);\n\n if (result.isFinal) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(false, this.currentRequestParams || undefined);\n }\n\n if (result.hasError && result.errorMessage) {\n this.callbacks.onError?.(new Error(result.errorMessage));\n }\n\n return result.content;\n }\n\n /**\n * 调用 Action(供 Toolcall/Activity 组件的 respond/action 使用)\n *\n * 通过 OpenClaw 的 node.invoke RPC 方法上行,利用 WebSocket 双向通道\n * 将用户在交互式组件中的操作(respond/confirm/update 等)发送回 Agent 端。\n *\n * @param params.nodeId - toolCallId 或 activityType,标识目标节点\n * @param params.action - 操作类型,如 \"respond\" | \"update\" | \"confirm\"\n * @param params.payload - 用户操作数据\n * @returns Agent 端返回的响应数据\n *\n * @example\n * ```tsx\n * // 在 ToolCallRenderer 的 onRespond 中使用\n * <ToolCallRenderer\n * toolCall={toolCall}\n * onRespond={async (tc, response) => {\n * await openclawAdapter.invokeAction({\n * nodeId: tc.toolCallId,\n * action: 'respond',\n * payload: response,\n * });\n * }}\n * />\n * ```\n */\n async invokeAction(params: {\n nodeId: string;\n action: string;\n payload: unknown;\n }): Promise<unknown> {\n if (this.connectionState !== OpenClawConnectionState.AUTHENTICATED) {\n throw new Error('Not authenticated. Please connect first.');\n }\n\n return this.rpcHandler.nodeInvoke({\n ...params,\n runId: this.eventMapper.getCurrentRunId() || undefined,\n });\n }\n\n /**\n * 获取会话历史消息\n *\n * 通过 OpenClaw 的 sessions.history RPC 方法获取指定会话的历史消息,\n * 并自动转换为 ChatEngine 的 ChatMessagesData 格式。\n *\n * @param sessionKey - 会话标识\n * @param options - 转换选项\n * @returns ChatEngine 格式的消息数组,可直接传给 chatEngine.setMessages() 或 useChat 的 defaultMessages\n *\n * @example\n * ```tsx\n * const messages = await adapter.fetchHistory('agent:main:main');\n * chatEngine.setMessages(messages, 'replace');\n * ```\n */\n async fetchHistory(\n sessionKey: string,\n options?: ConvertHistoryOptions,\n ): Promise<import('../../type').ChatMessagesData[]> {\n if (this.connectionState !== OpenClawConnectionState.AUTHENTICATED) {\n throw new Error('Not authenticated. Please connect first.');\n }\n\n const response = await this.rpcHandler.sessionsHistory({ sessionKey }) as OpenClawHistoryResponse;\n return convertOpenClawHistoryResponse(response, options);\n }\n\n /**\n * 断开连接\n */\n async disconnect(): Promise<void> {\n this.connectionState = OpenClawConnectionState.CLOSING;\n this.rpcHandler.cancelAll('Disconnecting');\n\n if (this.wsClient) {\n await this.wsClient.close();\n this.wsClient = null;\n }\n\n this.connectionState = OpenClawConnectionState.DISCONNECTED;\n this.callbacks.onDisconnected?.();\n }\n\n /**\n * 中止当前流式传输\n */\n abort(): void {\n if (this.isStreaming) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(true, this.currentRequestParams || undefined);\n }\n }\n\n /**\n * 获取连接状态\n */\n getConnectionState(): OpenClawConnectionState {\n return this.connectionState;\n }\n\n /**\n * 检查是否已认证\n */\n isAuthenticated(): boolean {\n return this.connectionState === OpenClawConnectionState.AUTHENTICATED;\n }\n\n /**\n * 重置适配器状态\n */\n reset(): void {\n this.eventMapper.reset();\n this.rpcHandler.reset();\n this.isStreaming = false;\n this.currentRequestParams = null;\n }\n\n /**\n * 销毁适配器\n */\n async destroy(): Promise<void> {\n await this.disconnect();\n this.rpcHandler.destroy();\n this.removeAllListeners();\n }\n\n /**\n * 设置 WebSocket 事件处理器\n */\n private setupEventHandlers(): void {\n if (!this.wsClient) return;\n\n this.wsClient.on('message', (event: { event: string; data: unknown }) => {\n this.handleWebSocketMessage(event.data);\n });\n\n this.wsClient.on('error', (error: Error) => {\n this.logger.error('[OpenClaw] WebSocket error:', error?.message || error);\n this.callbacks.onError?.(error);\n });\n\n this.wsClient.on('complete', (isAborted: boolean) => {\n console.warn(`[OpenClaw] WebSocket complete event! isAborted=${isAborted}, isStreaming=${this.isStreaming}`);\n if (this.isStreaming) {\n console.warn('[OpenClaw] ⚠️ WebSocket closed while still streaming! This caused onComplete to fire prematurely.');\n this.isStreaming = false;\n this.callbacks.onComplete?.(isAborted, this.currentRequestParams || undefined);\n }\n this.callbacks.onDisconnected?.(isAborted ? 'Aborted' : 'Connection closed');\n });\n\n this.wsClient.on('stateChange', (event: { from: WebSocketConnectionState; to: WebSocketConnectionState }) => {\n this.logger.debug(`WebSocket state: ${event.from} -> ${event.to}`);\n if (event.to === WebSocketConnectionState.CONNECTED) {\n this.connectionState = OpenClawConnectionState.HANDSHAKING;\n }\n });\n }\n\n /**\n * 处理 WebSocket 消息\n */\n private handleWebSocketMessage(data: unknown): void {\n // DEBUG: 打印所有原始 WebSocket 消息(排查真实 OpenClaw 返回格式)\n const rawStr = typeof data === 'string' ? data : JSON.stringify(data);\n console.log(`[OpenClaw RAW] ${rawStr.slice(0, 800)}`);\n\n const frame = parseFrame(data as string | object);\n if (!frame) {\n console.warn('[OpenClaw] Failed to parse frame, raw data:', rawStr.slice(0, 500));\n return;\n }\n\n console.log(`[OpenClaw Frame] type=\"${frame.type}\", event=${(frame as any).event}, isStreaming=${this.isStreaming}`);\n\n // 处理响应帧\n if (frame.type === 'res') {\n this.rpcHandler.handleResponse(frame as OpenClawResponseFrame);\n return;\n }\n\n // 处理事件帧\n if (frame.type === 'event') {\n this.handleEventFrame(frame as OpenClawEventFrame);\n }\n }\n\n /**\n * 处理事件帧\n */\n private handleEventFrame(frame: OpenClawEventFrame): void {\n const { event, payload } = frame;\n\n // 处理连接挑战事件\n if (event === OpenClawEventType.CONNECT_CHALLENGE) {\n this.handleConnectChallenge(payload as ConnectChallengePayload);\n return;\n }\n\n // 忽略心跳、健康检查等非业务事件\n if (event === OpenClawEventType.HEALTH || event === OpenClawEventType.HEARTBEAT || event === 'tick' as any) {\n console.log(`[OpenClaw] Skipping non-business event: \"${event}\"`);\n return;\n }\n\n // DEBUG: 打印所有业务事件,帮助排查真实 OpenClaw 的返回格式\n console.log(`[OpenClaw Event] event=\"${event}\", isStreaming=${this.isStreaming}, payload=`, JSON.stringify(payload).slice(0, 500));\n\n // 流式消息事件\n if (this.isStreaming) {\n const result = this.eventMapper.mapEvent(frame);\n\n console.log(`[OpenClaw mapResult] content=${result.content ? JSON.stringify(result.content).slice(0, 200) : 'null'}, isFinal=${result.isFinal}, hasError=${result.hasError}`);\n\n if (result.content) {\n this.callbacks.onMessage?.(result.content);\n this.emit('message', result.content);\n }\n\n if (result.isFinal) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(false, this.currentRequestParams || undefined);\n }\n\n if (result.hasError && result.errorMessage) {\n this.callbacks.onError?.(new Error(result.errorMessage));\n }\n } else {\n // 非流式状态下收到了业务事件,打印警告帮助排查\n console.warn(`[OpenClaw] Received event \"${event}\" but isStreaming=false, event may be lost. Payload:`, JSON.stringify(payload).slice(0, 300));\n }\n }\n\n /**\n * 处理连接挑战(握手)\n *\n * 认证成功后,如果 connect 响应中包含 messages 字段(历史消息),\n * 会自动转换为 ChatEngine 格式并触发 onHistoryLoaded 回调。\n */\n private async handleConnectChallenge(payload: ConnectChallengePayload): Promise<void> {\n this.logger.debug('Received connect.challenge, sending connect request');\n\n const connectParams: ConnectParams = {\n minProtocol: this.config.protocolVersion.min,\n maxProtocol: this.config.protocolVersion.max,\n client: {\n id: this.config.client.id,\n version: this.config.client.version,\n platform: getPlatform(),\n mode: this.config.client.mode,\n instanceId: this.instanceId,\n },\n role: 'operator',\n scopes: ['operator.admin'],\n caps: [],\n userAgent: getUserAgent(),\n locale: getLocale(),\n };\n\n // 认证信息:优先使用动态传入的 auth,其次使用配置中的 auth\n const auth = this.pendingAuth || (Object.keys(this.config.auth).length > 0 ? this.config.auth : undefined);\n if (auth) {\n connectParams.auth = auth;\n }\n this.pendingAuth = null;\n\n // 设备认证:使用 nonce 签名生成 device 字段\n if (this.deviceKeyManager && payload.nonce) {\n try {\n await this.deviceKeyManager.initialize();\n const deviceIdentity = await this.deviceKeyManager.signChallenge(payload.nonce);\n connectParams.device = deviceIdentity;\n this.logger.debug(`Device auth: signed nonce, deviceId=${deviceIdentity.id}`);\n } catch (deviceError) {\n this.logger.warn('Device auth: failed to sign challenge, connecting without device identity:', deviceError);\n }\n }\n\n try {\n const response = await this.rpcHandler.connect(connectParams);\n this.connectionState = OpenClawConnectionState.AUTHENTICATED;\n this.logger.info('OpenClaw authenticated successfully:', response);\n this.callbacks.onConnected?.();\n this.emit('connected', response);\n\n // 检查 connect 响应中是否包含历史消息\n // OpenClaw Gateway 会在 connect 响应的 payload 中附带 messages 数组,\n // 用于页面刷新后自动回填历史对话记录(无需额外 RPC 请求)\n const connectPayload = response as Record<string, unknown>;\n if (Array.isArray(connectPayload?.messages) && connectPayload.messages.length > 0) {\n this.logger.info(`OpenClaw connect response contains ${connectPayload.messages.length} history messages, converting...`);\n try {\n const historyResponse = {\n sessionKey: (connectPayload.sessionKey as string) || '',\n sessionId: (connectPayload.sessionId as string) || '',\n messages: connectPayload.messages as OpenClawHistoryMessage[],\n };\n const convertedMessages = convertOpenClawHistory(historyResponse.messages);\n this.logger.info(`Converted ${convertedMessages.length} history messages`);\n this.callbacks.onHistoryLoaded?.(convertedMessages);\n this.emit('historyLoaded', convertedMessages);\n } catch (historyError) {\n this.logger.warn('Failed to convert history messages from connect response:', historyError);\n // 历史消息转换失败不影响正常连接\n }\n }\n } catch (error) {\n this.connectionState = OpenClawConnectionState.ERROR;\n this.logger.error('OpenClaw authentication failed:', error);\n this.callbacks.onError?.(error as Error);\n this.emit('error', error);\n }\n }\n}\n"],"names":["OpenClawAdapter","config","_this","_classCallCheck","_callSuper","_defineProperty","OpenClawConnectionState","DISCONNECTED","LoggerManager","getLogger","adapterConfig","mergeOpenClawConfig","instanceId","generateUUID","rpcHandler","OpenClawRPCHandler","timeout","eventMapper","OpenClawEventMapper","deviceAuth","deviceKeyManager","DeviceKeyManager","client","id","_inherits","_EventEmitter","_createClass","key","value","setCallbacks","callbacks","setConnectAuth","auth","pendingAuth","_connect","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_this2","url","wsConfig","wrap","_context","prev","next","connectionState","AUTHENTICATED","abrupt","CONNECTING","formatWebSocketUrl","endpoint","wsClient","WebSocketClient","setSendFunction","frame","_this2$wsClient","send","setupEventHandlers","maxRetries","retryInterval","heartbeatInterval","connect","waitForAuthentication","stop","apply","arguments","_this3","Promise","resolve","reject","timer","cleanup","clearTimeout","off","onConnected","onError","error","once","setTimeout","Error","concat","_sendMessage","_callee2","params","requestParams","_ref","_auth","sendParams","chatParams","_this$callbacks$onSta","_this$callbacks","_this$callbacks$onErr","_this$callbacks2","_t","_context2","currentRequestParams","isStreaming","reset","_objectWithoutProperties","_excluded","_objectSpread","message","prompt","idempotencyKey","onStart","call","chatSend","sendMessage","_x","_x2","handleEvent","chunk","parseFrame","data","type","result","mapEvent","isFinal","_this$callbacks$onCom","_this$callbacks3","onComplete","hasError","errorMessage","_this$callbacks$onErr2","_this$callbacks4","content","_invokeAction","_callee3","_context3","nodeInvoke","runId","getCurrentRunId","invokeAction","_callee4","sessionKey","options","response","_context4","sessionsHistory","convertOpenClawHistoryResponse","fetchHistory","_x4","_x5","_fetchHistory","_disconnect","_callee5","_this$callbacks$onDis","_this$callbacks5","_context5","CLOSING","cancelAll","close","onDisconnected","disconnect","abort","_this$callbacks$onCom2","_this$callbacks6","getConnectionState","isAuthenticated","_destroy","_callee6","_context6","destroy","removeAllListeners","_this4","on","event","handleWebSocketMessage","_this4$callbacks$onEr","_this4$callbacks","logger","isAborted","_this4$callbacks$onDi","_this4$callbacks3","console","warn","_this4$callbacks$onCo","_this4$callbacks2","debug","from","to","WebSocketConnectionState","CONNECTED","HANDSHAKING","rawStr","JSON","stringify","log","slice","handleResponse","handleEventFrame","payload","OpenClawEventType","CONNECT_CHALLENGE","handleConnectChallenge","HEALTH","HEARTBEAT","_this$callbacks$onMes","_this$callbacks7","onMessage","emit","_this$callbacks$onCom3","_this$callbacks8","_this$callbacks$onErr3","_this$callbacks9","_handleConnectChallenge","_callee7","connectParams","deviceIdentity","_this$callbacks$onCon","_this$callbacks0","connectPayload","_this$callbacks$onHis","_this$callbacks1","historyResponse","convertedMessages","_this$callbacks$onErr4","_this$callbacks10","_t2","_t3","_context7","minProtocol","protocolVersion","min","maxProtocol","max","version","platform","getPlatform","mode","role","scopes","caps","userAgent","getUserAgent","locale","getLocale","Object","keys","length","nonce","initialize","signChallenge","device","sent","info","Array","isArray","messages","sessionId","convertOpenClawHistory","onHistoryLoaded","historyError","ERROR","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
  */
@@ -48,6 +48,27 @@ export interface OpenClawConfig {
48
48
  * 一般不需要修改,除非服务端有特殊要求
49
49
  */
50
50
  protocolVersion?: OpenClawProtocolVersion;
51
+ /**
52
+ * 设备认证配置
53
+ * - true: 启用设备认证,使用 Ed25519 密钥对签名 nonce
54
+ * - false: 禁用设备认证(默认)
55
+ */
56
+ deviceAuth?: boolean;
57
+ /**
58
+ * 连接认证信息
59
+ * 在 connect 握手时传入 Gateway,通常包含 token 等
60
+ *
61
+ * @example
62
+ * ```ts
63
+ * openclaw: {
64
+ * auth: { token: 'your-token-here' }
65
+ * }
66
+ * ```
67
+ */
68
+ auth?: {
69
+ token?: string;
70
+ [key: string]: unknown;
71
+ };
51
72
  }
52
73
  /**
53
74
  * OpenClaw 配置默认值
@@ -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
  */
@@ -18,14 +18,18 @@ var DEFAULT_OPENCLAW_CONFIG = {
18
18
  protocolVersion: {
19
19
  min: 3,
20
20
  max: 3
21
- }
21
+ },
22
+ deviceAuth: false,
23
+ auth: {}
22
24
  };
23
25
  function mergeOpenClawConfig(config) {
24
- var _config$heartbeatInte;
26
+ var _config$heartbeatInte, _config$deviceAuth, _config$auth;
25
27
  return {
26
28
  heartbeatInterval: (_config$heartbeatInte = config === null || config === void 0 ? void 0 : config.heartbeatInterval) !== null && _config$heartbeatInte !== void 0 ? _config$heartbeatInte : DEFAULT_OPENCLAW_CONFIG.heartbeatInterval,
27
29
  client: _objectSpread(_objectSpread({}, DEFAULT_OPENCLAW_CONFIG.client), config === null || config === void 0 ? void 0 : config.client),
28
- protocolVersion: _objectSpread(_objectSpread({}, DEFAULT_OPENCLAW_CONFIG.protocolVersion), config === null || config === void 0 ? void 0 : config.protocolVersion)
30
+ protocolVersion: _objectSpread(_objectSpread({}, DEFAULT_OPENCLAW_CONFIG.protocolVersion), config === null || config === void 0 ? void 0 : config.protocolVersion),
31
+ deviceAuth: (_config$deviceAuth = config === null || config === void 0 ? void 0 : config.deviceAuth) !== null && _config$deviceAuth !== void 0 ? _config$deviceAuth : DEFAULT_OPENCLAW_CONFIG.deviceAuth,
32
+ auth: (_config$auth = config === null || config === void 0 ? void 0 : config.auth) !== null && _config$auth !== void 0 ? _config$auth : DEFAULT_OPENCLAW_CONFIG.auth
29
33
  };
30
34
  }
31
35
 
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/types/config.ts"],"sourcesContent":["/**\n * OpenClaw 配置类型定义(精简版)\n *\n * 设计原则:\n * - 只保留协议层必需的配置\n * - 业务参数(sessionKey、token、message 等)通过 onRequest 回调传入\n * - 通用网络配置(endpoint、maxRetries、timeout 等)复用外层 ChatNetworkConfig\n */\n\n/**\n * OpenClaw 客户端标识配置\n * 用于 connect 握手时的客户端识别\n */\nexport interface OpenClawClientConfig {\n /** 客户端 ID,默认 'webchat' */\n id?: string;\n /** 客户端版本,默认 '1.0.0' */\n version?: string;\n /** 客户端模式,默认 'webchat' */\n mode?: string;\n}\n\n/**\n * OpenClaw 协议版本配置\n */\nexport interface OpenClawProtocolVersion {\n /** 最小支持的协议版本,默认 3 */\n min?: number;\n /** 最大支持的协议版本,默认 3 */\n max?: number;\n}\n\n/**\n * OpenClaw 专属配置\n * 只包含协议层必需的字段,业务参数通过 onRequest 传入\n */\nexport interface OpenClawConfig {\n /**\n * 心跳间隔(毫秒)\n * - 默认 30000 (30秒)\n * - 设置为 0 表示禁用心跳\n */\n heartbeatInterval?: number;\n\n /**\n * 客户端标识配置\n * 用于 connect 握手时的客户端识别\n */\n client?: OpenClawClientConfig;\n\n /**\n * 协议版本范围\n * 一般不需要修改,除非服务端有特殊要求\n */\n protocolVersion?: OpenClawProtocolVersion;\n}\n\n/**\n * OpenClaw 配置默认值\n */\nexport const DEFAULT_OPENCLAW_CONFIG: Required<OpenClawConfig> = {\n heartbeatInterval: 30000,\n client: {\n id: 'webchat',\n version: '1.0.0',\n mode: 'webchat',\n },\n protocolVersion: {\n min: 3,\n max: 3,\n },\n};\n\n/**\n * 合并 OpenClaw 配置与默认值\n */\nexport function mergeOpenClawConfig(config?: OpenClawConfig): Required<OpenClawConfig> {\n return {\n heartbeatInterval: config?.heartbeatInterval ?? DEFAULT_OPENCLAW_CONFIG.heartbeatInterval,\n client: {\n ...DEFAULT_OPENCLAW_CONFIG.client,\n ...config?.client,\n },\n protocolVersion: {\n ...DEFAULT_OPENCLAW_CONFIG.protocolVersion,\n ...config?.protocolVersion,\n },\n };\n}\n"],"names":["DEFAULT_OPENCLAW_CONFIG","heartbeatInterval","client","id","version","mode","protocolVersion","min","max","mergeOpenClawConfig","config","_config$heartbeatInte","_objectSpread"],"mappings":";;;;;;;;;;AA4DO,IAAMA,uBAAoD,GAAA;AAC/DC,EAAAA,iBAAmB,EAAA,GAAA;AACnBC,EAAAA,MAAQ,EAAA;AACNC,IAAAA,EAAI,EAAA,SAAA;AACJC,IAAAA,OAAS,EAAA,OAAA;AACTC,IAAAA,IAAM,EAAA,SAAA;GACR;AACAC,EAAAA,eAAiB,EAAA;AACfC,IAAAA,GAAK,EAAA,CAAA;AACLC,IAAAA,GAAK,EAAA,CAAA;AACP,GAAA;AACF,EAAA;AAKO,SAASC,oBAAoBC,MAAmD,EAAA;AAAA,EAAA,IAAAC,qBAAA,CAAA;EAC9E,OAAA;AACLV,IAAAA,iBAAA,GAAAU,qBAAA,GAAmBD,MAAQ,KAAA,IAAA,IAARA,MAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAQ,CAAAT,iBAAA,cAAAU,qBAAA,KAAA,KAAA,CAAA,GAAAA,qBAAA,GAAqBX,uBAAwB,CAAAC,iBAAA;AACxEC,IAAAA,MAAQ,EAAAU,aAAA,CAAAA,aAAA,CAAA,EAAA,EACHZ,uBAAwB,CAAAE,MAAA,CACxBQ,EAAAA,MAAQ,aAARA,MAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,MAAQ,CAAAR,MAAA,CACb;AACAI,IAAAA,eAAiB,EAAAM,aAAA,CAAAA,aAAA,KACZZ,uBAAwB,CAAAM,eAAA,CAAA,EACxBI,MAAQ,KAARA,IAAAA,IAAAA,MAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAQ,CAAAJ,eAAA,CAAA;GAEf,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"config.js","sources":["../../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/types/config.ts"],"sourcesContent":["/**\n * OpenClaw 配置类型定义(精简版)\n *\n * 设计原则:\n * - 只保留协议层必需的配置\n * - 业务参数(sessionKey、token、message 等)通过 onRequest 回调传入\n * - 通用网络配置(endpoint、maxRetries、timeout 等)复用外层 ChatNetworkConfig\n */\n\n/**\n * OpenClaw 客户端标识配置\n * 用于 connect 握手时的客户端识别\n */\nexport interface OpenClawClientConfig {\n /** 客户端 ID,默认 'webchat' */\n id?: string;\n /** 客户端版本,默认 '1.0.0' */\n version?: string;\n /** 客户端模式,默认 'webchat' */\n mode?: string;\n}\n\n/**\n * OpenClaw 协议版本配置\n */\nexport interface OpenClawProtocolVersion {\n /** 最小支持的协议版本,默认 3 */\n min?: number;\n /** 最大支持的协议版本,默认 3 */\n max?: number;\n}\n\n/**\n * OpenClaw 专属配置\n * 只包含协议层必需的字段,业务参数通过 onRequest 传入\n */\nexport interface OpenClawConfig {\n /**\n * 心跳间隔(毫秒)\n * - 默认 30000 (30秒)\n * - 设置为 0 表示禁用心跳\n */\n heartbeatInterval?: number;\n\n /**\n * 客户端标识配置\n * 用于 connect 握手时的客户端识别\n */\n client?: OpenClawClientConfig;\n\n /**\n * 协议版本范围\n * 一般不需要修改,除非服务端有特殊要求\n */\n protocolVersion?: OpenClawProtocolVersion;\n\n /**\n * 设备认证配置\n * - true: 启用设备认证,使用 Ed25519 密钥对签名 nonce\n * - false: 禁用设备认证(默认)\n */\n deviceAuth?: boolean;\n\n /**\n * 连接认证信息\n * 在 connect 握手时传入 Gateway,通常包含 token 等\n *\n * @example\n * ```ts\n * openclaw: {\n * auth: { token: 'your-token-here' }\n * }\n * ```\n */\n auth?: {\n token?: string;\n [key: string]: unknown;\n };\n}\n\n/**\n * OpenClaw 配置默认值\n */\nexport const DEFAULT_OPENCLAW_CONFIG: Required<OpenClawConfig> = {\n heartbeatInterval: 30000,\n client: {\n id: 'webchat',\n version: '1.0.0',\n mode: 'webchat',\n },\n protocolVersion: {\n min: 3,\n max: 3,\n },\n deviceAuth: false,\n auth: {},\n};\n\n/**\n * 合并 OpenClaw 配置与默认值\n */\nexport function mergeOpenClawConfig(config?: OpenClawConfig): Required<OpenClawConfig> {\n return {\n heartbeatInterval: config?.heartbeatInterval ?? DEFAULT_OPENCLAW_CONFIG.heartbeatInterval,\n client: {\n ...DEFAULT_OPENCLAW_CONFIG.client,\n ...config?.client,\n },\n protocolVersion: {\n ...DEFAULT_OPENCLAW_CONFIG.protocolVersion,\n ...config?.protocolVersion,\n },\n deviceAuth: config?.deviceAuth ?? DEFAULT_OPENCLAW_CONFIG.deviceAuth,\n auth: config?.auth ?? DEFAULT_OPENCLAW_CONFIG.auth,\n };\n}\n"],"names":["DEFAULT_OPENCLAW_CONFIG","heartbeatInterval","client","id","version","mode","protocolVersion","min","max","deviceAuth","auth","mergeOpenClawConfig","config","_config$heartbeatInte","_config$deviceAuth","_config$auth","_objectSpread"],"mappings":";;;;;;;;;;AAmFO,IAAMA,uBAAoD,GAAA;AAC/DC,EAAAA,iBAAmB,EAAA,GAAA;AACnBC,EAAAA,MAAQ,EAAA;AACNC,IAAAA,EAAI,EAAA,SAAA;AACJC,IAAAA,OAAS,EAAA,OAAA;AACTC,IAAAA,IAAM,EAAA,SAAA;GACR;AACAC,EAAAA,eAAiB,EAAA;AACfC,IAAAA,GAAK,EAAA,CAAA;AACLC,IAAAA,GAAK,EAAA,CAAA;GACP;AACAC,EAAAA,UAAY,EAAA,KAAA;AACZC,EAAAA,MAAM,EAAC;AACT,EAAA;AAKO,SAASC,oBAAoBC,MAAmD,EAAA;AAAA,EAAA,IAAAC,qBAAA,EAAAC,kBAAA,EAAAC,YAAA,CAAA;EAC9E,OAAA;AACLd,IAAAA,iBAAA,GAAAY,qBAAA,GAAmBD,MAAQ,KAAA,IAAA,IAARA,MAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAQ,CAAAX,iBAAA,cAAAY,qBAAA,KAAA,KAAA,CAAA,GAAAA,qBAAA,GAAqBb,uBAAwB,CAAAC,iBAAA;AACxEC,IAAAA,MAAQ,EAAAc,aAAA,CAAAA,aAAA,CAAA,EAAA,EACHhB,uBAAwB,CAAAE,MAAA,CACxBU,EAAAA,MAAQ,aAARA,MAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,MAAQ,CAAAV,MAAA,CACb;AACAI,IAAAA,eAAiB,EAAAU,aAAA,CAAAA,aAAA,CAAA,EAAA,EACZhB,uBAAwB,CAAAM,eAAA,CACxBM,EAAAA,MAAQ,aAARA,MAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,MAAQ,CAAAN,eAAA,CACb;AACAG,IAAAA,UAAA,GAAAK,kBAAA,GAAYF,MAAQ,KAAA,IAAA,IAARA,MAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAQ,CAAAH,UAAA,cAAAK,kBAAA,KAAA,KAAA,CAAA,GAAAA,kBAAA,GAAcd,uBAAwB,CAAAS,UAAA;AAC1DC,IAAAA,IAAA,GAAAK,YAAA,GAAMH,MAAQ,KAAA,IAAA,IAARA,MAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAQ,CAAAF,IAAA,cAAAK,YAAA,KAAA,KAAA,CAAA,GAAAA,YAAA,GAAQf,uBAAwB,CAAAU,IAAAA;GAChD,CAAA;AACF;;;;"}
@@ -58,7 +58,9 @@ export declare enum AgentStreamType {
58
58
  /** 系统流 */
59
59
  SYSTEM = "system",
60
60
  /** Activity 组件流 */
61
- ACTIVITY = "activity"
61
+ ACTIVITY = "activity",
62
+ /** 生命周期流(agent 启动/停止等,不包含文本内容) */
63
+ LIFECYCLE = "lifecycle"
62
64
  }
63
65
  /**
64
66
  * Agent 数据类型
@@ -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
  */
@@ -33,6 +33,7 @@ var AgentStreamType = /* @__PURE__ */function (AgentStreamType2) {
33
33
  AgentStreamType2["TOOL"] = "tool";
34
34
  AgentStreamType2["SYSTEM"] = "system";
35
35
  AgentStreamType2["ACTIVITY"] = "activity";
36
+ AgentStreamType2["LIFECYCLE"] = "lifecycle";
36
37
  return AgentStreamType2;
37
38
  }(AgentStreamType || {});
38
39
  var AgentDataType = /* @__PURE__ */function (AgentDataType2) {
@@ -1 +1 @@
1
- {"version":3,"file":"events.js","sources":["../../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/types/events.ts"],"sourcesContent":["/**\n * OpenClaw 事件类型定义\n */\n\n/**\n * OpenClaw 核心事件类型\n */\nexport enum OpenClawEventType {\n // ============= 连接相关 =============\n /** 连接挑战(握手第一步) */\n CONNECT_CHALLENGE = 'connect.challenge',\n /** 连接成功 */\n CONNECT_SUCCESS = 'connect.success',\n /** 连接断开 */\n CONNECT_DISCONNECT = 'connect.disconnect',\n\n // ============= 聊天相关 =============\n /** 聊天消息 */\n CHAT = 'chat',\n /** 聊天状态更新 */\n CHAT_STATUS = 'chat.status',\n\n // ============= Agent 相关 =============\n /** Agent 事件(通用) */\n AGENT = 'agent',\n /** Agent 开始 */\n AGENT_START = 'agent.start',\n /** Agent 完成 */\n AGENT_COMPLETE = 'agent.complete',\n /** Agent 错误 */\n AGENT_ERROR = 'agent.error',\n\n // ============= 存在状态 =============\n /** 在线状态 */\n PRESENCE = 'presence',\n\n // ============= 健康检查 =============\n /** 健康检查 */\n HEALTH = 'health',\n /** 心跳 */\n HEARTBEAT = 'heartbeat',\n\n // ============= Canvas/A2UI =============\n /** Canvas 更新 */\n CANVAS = 'canvas',\n /** A2UI 活动 */\n A2UI_ACTIVITY = 'a2ui.activity',\n}\n\n/**\n * Chat 事件状态\n */\nexport enum ChatEventState {\n /** 增量更新(流式传输中) */\n DELTA = 'delta',\n /** 最终完成 */\n FINAL = 'final',\n /** 错误 */\n ERROR = 'error',\n /** 中止 */\n ABORTED = 'aborted',\n}\n\n/**\n * Agent 流类型\n */\nexport enum AgentStreamType {\n /** 助手流 */\n ASSISTANT = 'assistant',\n /** 工具流 */\n TOOL = 'tool',\n /** 系统流 */\n SYSTEM = 'system',\n /** Activity 组件流 */\n ACTIVITY = 'activity',\n}\n\n/**\n * Agent 数据类型\n */\nexport enum AgentDataType {\n /** 文本快照 */\n TEXT_SNAPSHOT = 'text_snapshot',\n /** 文本增量 */\n TEXT_DELTA = 'text_delta',\n /** 工具调用 */\n TOOL_CALL = 'tool_call',\n /** 工具结果 */\n TOOL_RESULT = 'tool_result',\n /** 完成 */\n DONE = 'done',\n /** 错误 */\n ERROR = 'error',\n}\n\n/**\n * OpenClaw RPC 方法名\n */\nexport enum OpenClawMethod {\n /** 连接认证 */\n CONNECT = 'connect',\n /** 发送聊天消息 */\n CHAT_SEND = 'chat.send',\n /** 会话补丁更新 */\n SESSIONS_PATCH = 'sessions.patch',\n /** 会话列表 */\n SESSIONS_LIST = 'sessions.list',\n /** 会话历史消息 */\n SESSIONS_HISTORY = 'sessions.history',\n /** 心跳 */\n HEARTBEAT = 'heartbeat',\n /** 节点列表 */\n NODE_LIST = 'node.list',\n /** 节点描述 */\n NODE_DESCRIBE = 'node.describe',\n /** 节点调用 */\n NODE_INVOKE = 'node.invoke',\n}\n\n/**\n * 连接状态\n */\nexport enum OpenClawConnectionState {\n /** 已断开 */\n DISCONNECTED = 'disconnected',\n /** 连接中 */\n CONNECTING = 'connecting',\n /** 已连接(握手中) */\n HANDSHAKING = 'handshaking',\n /** 已认证(可用) */\n AUTHENTICATED = 'authenticated',\n /** 重连中 */\n RECONNECTING = 'reconnecting',\n /** 关闭中 */\n CLOSING = 'closing',\n /** 已关闭 */\n CLOSED = 'closed',\n /** 错误 */\n ERROR = 'error',\n}\n"],"names":["OpenClawEventType","ChatEventState","AgentStreamType","AgentDataType","OpenClawMethod","OpenClawConnectionState"],"mappings":"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"}
1
+ {"version":3,"file":"events.js","sources":["../../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/types/events.ts"],"sourcesContent":["/**\n * OpenClaw 事件类型定义\n */\n\n/**\n * OpenClaw 核心事件类型\n */\nexport enum OpenClawEventType {\n // ============= 连接相关 =============\n /** 连接挑战(握手第一步) */\n CONNECT_CHALLENGE = 'connect.challenge',\n /** 连接成功 */\n CONNECT_SUCCESS = 'connect.success',\n /** 连接断开 */\n CONNECT_DISCONNECT = 'connect.disconnect',\n\n // ============= 聊天相关 =============\n /** 聊天消息 */\n CHAT = 'chat',\n /** 聊天状态更新 */\n CHAT_STATUS = 'chat.status',\n\n // ============= Agent 相关 =============\n /** Agent 事件(通用) */\n AGENT = 'agent',\n /** Agent 开始 */\n AGENT_START = 'agent.start',\n /** Agent 完成 */\n AGENT_COMPLETE = 'agent.complete',\n /** Agent 错误 */\n AGENT_ERROR = 'agent.error',\n\n // ============= 存在状态 =============\n /** 在线状态 */\n PRESENCE = 'presence',\n\n // ============= 健康检查 =============\n /** 健康检查 */\n HEALTH = 'health',\n /** 心跳 */\n HEARTBEAT = 'heartbeat',\n\n // ============= Canvas/A2UI =============\n /** Canvas 更新 */\n CANVAS = 'canvas',\n /** A2UI 活动 */\n A2UI_ACTIVITY = 'a2ui.activity',\n}\n\n/**\n * Chat 事件状态\n */\nexport enum ChatEventState {\n /** 增量更新(流式传输中) */\n DELTA = 'delta',\n /** 最终完成 */\n FINAL = 'final',\n /** 错误 */\n ERROR = 'error',\n /** 中止 */\n ABORTED = 'aborted',\n}\n\n/**\n * Agent 流类型\n */\nexport enum AgentStreamType {\n /** 助手流 */\n ASSISTANT = 'assistant',\n /** 工具流 */\n TOOL = 'tool',\n /** 系统流 */\n SYSTEM = 'system',\n /** Activity 组件流 */\n ACTIVITY = 'activity',\n /** 生命周期流(agent 启动/停止等,不包含文本内容) */\n LIFECYCLE = 'lifecycle',\n}\n\n/**\n * Agent 数据类型\n */\nexport enum AgentDataType {\n /** 文本快照 */\n TEXT_SNAPSHOT = 'text_snapshot',\n /** 文本增量 */\n TEXT_DELTA = 'text_delta',\n /** 工具调用 */\n TOOL_CALL = 'tool_call',\n /** 工具结果 */\n TOOL_RESULT = 'tool_result',\n /** 完成 */\n DONE = 'done',\n /** 错误 */\n ERROR = 'error',\n}\n\n/**\n * OpenClaw RPC 方法名\n */\nexport enum OpenClawMethod {\n /** 连接认证 */\n CONNECT = 'connect',\n /** 发送聊天消息 */\n CHAT_SEND = 'chat.send',\n /** 会话补丁更新 */\n SESSIONS_PATCH = 'sessions.patch',\n /** 会话列表 */\n SESSIONS_LIST = 'sessions.list',\n /** 会话历史消息 */\n SESSIONS_HISTORY = 'sessions.history',\n /** 心跳 */\n HEARTBEAT = 'heartbeat',\n /** 节点列表 */\n NODE_LIST = 'node.list',\n /** 节点描述 */\n NODE_DESCRIBE = 'node.describe',\n /** 节点调用 */\n NODE_INVOKE = 'node.invoke',\n}\n\n/**\n * 连接状态\n */\nexport enum OpenClawConnectionState {\n /** 已断开 */\n DISCONNECTED = 'disconnected',\n /** 连接中 */\n CONNECTING = 'connecting',\n /** 已连接(握手中) */\n HANDSHAKING = 'handshaking',\n /** 已认证(可用) */\n AUTHENTICATED = 'authenticated',\n /** 重连中 */\n RECONNECTING = 'reconnecting',\n /** 关闭中 */\n CLOSING = 'closing',\n /** 已关闭 */\n CLOSED = 'closed',\n /** 错误 */\n ERROR = 'error',\n}\n"],"names":["OpenClawEventType","ChatEventState","AgentStreamType","AgentDataType","OpenClawMethod","OpenClawConnectionState"],"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
  */
@@ -90,6 +90,19 @@ export interface ConnectParams {
90
90
  token?: string;
91
91
  [key: string]: unknown;
92
92
  };
93
+ /** 设备身份信息(由 DeviceKeyManager 自动生成) */
94
+ device?: {
95
+ /** 设备 ID */
96
+ id: string;
97
+ /** 公钥(hex 编码) */
98
+ publicKey: string;
99
+ /** nonce 签名(hex 编码) */
100
+ signature: string;
101
+ /** 签名时间戳(Unix 秒级时间戳) */
102
+ signedAt: number;
103
+ /** 回传的 challenge nonce */
104
+ nonce: string;
105
+ };
93
106
  /** User Agent */
94
107
  userAgent?: string;
95
108
  /** 语言环境 */
@@ -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 +1 @@
1
- {"version":3,"file":"messages.js","sources":["../../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/types/messages.ts"],"sourcesContent":["/**\n * OpenClaw 消息格式类型定义\n *\n * OpenClaw 采用 RPC 风格的消息通信,有三种消息类型:\n * - req: 客户端向 Gateway 发起的请求\n * - res: Gateway 返回的响应\n * - event: 服务端主动推送的事件\n */\n\n/**\n * OpenClaw 消息类型\n */\nexport type OpenClawMessageType = 'req' | 'res' | 'event';\n\n/**\n * OpenClaw 请求帧\n */\nexport interface OpenClawRequestFrame<TParams = Record<string, unknown>> {\n type: 'req';\n /** 请求唯一标识,用于匹配响应 */\n id: string;\n /** RPC 方法名 */\n method: string;\n /** 请求参数 */\n params: TParams;\n}\n\n/**\n * OpenClaw 响应帧\n */\nexport interface OpenClawResponseFrame<TPayload = unknown> {\n type: 'res';\n /** 请求唯一标识,与请求帧的 id 对应 */\n id: string;\n /** 是否成功 */\n ok: boolean;\n /** 成功时的响应数据 */\n payload?: TPayload;\n /** 失败时的错误信息 */\n error?: OpenClawError;\n}\n\n/**\n * OpenClaw 事件帧\n */\nexport interface OpenClawEventFrame<TPayload = unknown> {\n type: 'event';\n /** 事件名称 */\n event: string;\n /** 事件序号 */\n seq?: number;\n /** 事件数据 */\n payload?: TPayload;\n}\n\n/**\n * OpenClaw 错误信息\n */\nexport interface OpenClawError {\n /** 错误码 */\n code: string;\n /** 错误消息 */\n message: string;\n /** 详细信息 */\n details?: unknown;\n}\n\n/**\n * OpenClaw 消息帧(联合类型)\n */\nexport type OpenClawFrame<T = unknown> =\n | OpenClawRequestFrame<T extends Record<string, unknown> ? T : Record<string, unknown>>\n | OpenClawResponseFrame<T>\n | OpenClawEventFrame<T>;\n\n// ============= RPC 方法参数类型 =============\n\n/**\n * connect 方法参数\n */\nexport interface ConnectParams {\n /** 最小协议版本 */\n minProtocol: number;\n /** 最大协议版本 */\n maxProtocol: number;\n /** 客户端信息 */\n client: {\n id: string;\n version: string;\n platform: string;\n mode: string;\n instanceId: string;\n };\n /** 角色 */\n role?: string;\n /** 权限范围 */\n scopes?: string[];\n /** 能力列表 */\n caps?: string[];\n /** 认证信息(可选,由 onRequest 传入) */\n auth?: {\n token?: string;\n [key: string]: unknown;\n };\n /** User Agent */\n userAgent?: string;\n /** 语言环境 */\n locale?: string;\n}\n\n/**\n * connect 方法响应\n *\n * OpenClaw Gateway 在 connect 响应中可能附带历史消息(messages 字段),\n * 用于页面刷新后自动回填历史对话记录。\n */\nexport interface ConnectResponse {\n /** 协商后的协议版本 */\n protocol: number;\n /** 会话 ID */\n sessionId: string;\n /** 服务端版本 */\n serverVersion?: string;\n /** 支持的能力列表 */\n capabilities?: string[];\n /** 会话标识(Gateway 推送历史消息时附带) */\n sessionKey?: string;\n /** 历史消息(Gateway 在 connect 响应中主动推送,用于页面刷新后回填) */\n messages?: Array<Record<string, unknown>>;\n /** 思考级别(Gateway 附带) */\n thinkingLevel?: string;\n}\n\n/**\n * chat.send 方法参数(基础结构,具体字段由 onRequest 传入)\n */\nexport interface ChatSendParams {\n /** 消息内容 */\n message: string;\n /** 会话标识 */\n sessionKey?: string;\n /** 幂等键 */\n idempotencyKey?: string;\n /** 其他自定义参数 */\n [key: string]: unknown;\n}\n\n/**\n * chat.send 方法响应\n */\nexport interface ChatSendResponse {\n /** 运行 ID */\n runId: string;\n /** 状态 */\n status: string;\n}\n\n// ============= 事件类型 =============\n\n/**\n * connect.challenge 事件数据\n */\nexport interface ConnectChallengePayload {\n /** 随机数 */\n nonce: string;\n /** 协议版本 */\n protocolVersion?: number;\n}\n\n/**\n * chat 事件数据\n */\nexport interface ChatEventPayload {\n /** 运行 ID */\n runId?: string;\n /** 会话标识 */\n sessionKey?: string;\n /** 消息状态: delta(增量) | final(完成) | error(错误) | aborted(中止) */\n state: 'delta' | 'final' | 'error' | 'aborted';\n /** 消息内容 */\n message?: {\n role: 'assistant' | 'user' | 'system';\n content: Array<{\n type: string;\n text?: string;\n [key: string]: unknown;\n }>;\n };\n /** 错误消息 */\n errorMessage?: string;\n}\n\n/**\n * agent 事件数据\n *\n * 实际 OpenClaw agent 事件示例:\n * {\n * \"type\": \"event\",\n * \"event\": \"agent\",\n * \"payload\": {\n * \"runId\": \"b7dfa37d-...\",\n * \"stream\": \"assistant\",\n * \"data\": { \"text\": \"全量快照文本\", \"delta\": \"本次增量\" },\n * \"sessionKey\": \"agent:main:main\",\n * \"seq\": 12,\n * \"ts\": 1772612049089\n * },\n * \"seq\": 16278\n * }\n */\nexport interface AgentEventPayload {\n /** 运行 ID */\n runId?: string;\n /** 流类型: assistant | tool | system */\n stream?: string;\n /** 事件子类型(可选,实际 agent 流式事件中通常不存在) */\n type?: string;\n /** 数据内容 */\n data?: {\n /** 全量文本快照(包含到当前为止的所有文本) */\n text?: string;\n /** 本次增量文本 */\n delta?: string;\n [key: string]: unknown;\n };\n /** payload 内序号(agent 事件流内的顺序) */\n seq?: number;\n /** 时间戳 */\n ts?: number;\n /** 会话标识 */\n sessionKey?: string;\n}\n\n/**\n * 类型守卫:判断是否为请求帧\n */\nexport function isRequestFrame(frame: OpenClawFrame): frame is OpenClawRequestFrame {\n return frame.type === 'req';\n}\n\n/**\n * 类型守卫:判断是否为响应帧\n */\nexport function isResponseFrame(frame: OpenClawFrame): frame is OpenClawResponseFrame {\n return frame.type === 'res';\n}\n\n/**\n * 类型守卫:判断是否为事件帧\n */\nexport function isEventFrame(frame: OpenClawFrame): frame is OpenClawEventFrame {\n return frame.type === 'event';\n}\n"],"names":["isRequestFrame","frame","type","isResponseFrame","isEventFrame"],"mappings":";;;;;;AA4OO,SAASA,eAAeC,KAAqD,EAAA;AAClF,EAAA,OAAOA,MAAMC,IAAS,KAAA,KAAA,CAAA;AACxB,CAAA;AAKO,SAASC,gBAAgBF,KAAsD,EAAA;AACpF,EAAA,OAAOA,MAAMC,IAAS,KAAA,KAAA,CAAA;AACxB,CAAA;AAKO,SAASE,aAAaH,KAAmD,EAAA;AAC9E,EAAA,OAAOA,MAAMC,IAAS,KAAA,OAAA,CAAA;AACxB;;;;"}
1
+ {"version":3,"file":"messages.js","sources":["../../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/types/messages.ts"],"sourcesContent":["/**\n * OpenClaw 消息格式类型定义\n *\n * OpenClaw 采用 RPC 风格的消息通信,有三种消息类型:\n * - req: 客户端向 Gateway 发起的请求\n * - res: Gateway 返回的响应\n * - event: 服务端主动推送的事件\n */\n\n/**\n * OpenClaw 消息类型\n */\nexport type OpenClawMessageType = 'req' | 'res' | 'event';\n\n/**\n * OpenClaw 请求帧\n */\nexport interface OpenClawRequestFrame<TParams = Record<string, unknown>> {\n type: 'req';\n /** 请求唯一标识,用于匹配响应 */\n id: string;\n /** RPC 方法名 */\n method: string;\n /** 请求参数 */\n params: TParams;\n}\n\n/**\n * OpenClaw 响应帧\n */\nexport interface OpenClawResponseFrame<TPayload = unknown> {\n type: 'res';\n /** 请求唯一标识,与请求帧的 id 对应 */\n id: string;\n /** 是否成功 */\n ok: boolean;\n /** 成功时的响应数据 */\n payload?: TPayload;\n /** 失败时的错误信息 */\n error?: OpenClawError;\n}\n\n/**\n * OpenClaw 事件帧\n */\nexport interface OpenClawEventFrame<TPayload = unknown> {\n type: 'event';\n /** 事件名称 */\n event: string;\n /** 事件序号 */\n seq?: number;\n /** 事件数据 */\n payload?: TPayload;\n}\n\n/**\n * OpenClaw 错误信息\n */\nexport interface OpenClawError {\n /** 错误码 */\n code: string;\n /** 错误消息 */\n message: string;\n /** 详细信息 */\n details?: unknown;\n}\n\n/**\n * OpenClaw 消息帧(联合类型)\n */\nexport type OpenClawFrame<T = unknown> =\n | OpenClawRequestFrame<T extends Record<string, unknown> ? T : Record<string, unknown>>\n | OpenClawResponseFrame<T>\n | OpenClawEventFrame<T>;\n\n// ============= RPC 方法参数类型 =============\n\n/**\n * connect 方法参数\n */\nexport interface ConnectParams {\n /** 最小协议版本 */\n minProtocol: number;\n /** 最大协议版本 */\n maxProtocol: number;\n /** 客户端信息 */\n client: {\n id: string;\n version: string;\n platform: string;\n mode: string;\n instanceId: string;\n };\n /** 角色 */\n role?: string;\n /** 权限范围 */\n scopes?: string[];\n /** 能力列表 */\n caps?: string[];\n /** 认证信息(可选,由 onRequest 传入) */\n auth?: {\n token?: string;\n [key: string]: unknown;\n };\n /** 设备身份信息(由 DeviceKeyManager 自动生成) */\n device?: {\n /** 设备 ID */\n id: string;\n /** 公钥(hex 编码) */\n publicKey: string;\n /** nonce 签名(hex 编码) */\n signature: string;\n /** 签名时间戳(Unix 秒级时间戳) */\n signedAt: number;\n /** 回传的 challenge nonce */\n nonce: string;\n };\n /** User Agent */\n userAgent?: string;\n /** 语言环境 */\n locale?: string;\n}\n\n/**\n * connect 方法响应\n *\n * OpenClaw Gateway 在 connect 响应中可能附带历史消息(messages 字段),\n * 用于页面刷新后自动回填历史对话记录。\n */\nexport interface ConnectResponse {\n /** 协商后的协议版本 */\n protocol: number;\n /** 会话 ID */\n sessionId: string;\n /** 服务端版本 */\n serverVersion?: string;\n /** 支持的能力列表 */\n capabilities?: string[];\n /** 会话标识(Gateway 推送历史消息时附带) */\n sessionKey?: string;\n /** 历史消息(Gateway 在 connect 响应中主动推送,用于页面刷新后回填) */\n messages?: Array<Record<string, unknown>>;\n /** 思考级别(Gateway 附带) */\n thinkingLevel?: string;\n}\n\n/**\n * chat.send 方法参数(基础结构,具体字段由 onRequest 传入)\n */\nexport interface ChatSendParams {\n /** 消息内容 */\n message: string;\n /** 会话标识 */\n sessionKey?: string;\n /** 幂等键 */\n idempotencyKey?: string;\n /** 其他自定义参数 */\n [key: string]: unknown;\n}\n\n/**\n * chat.send 方法响应\n */\nexport interface ChatSendResponse {\n /** 运行 ID */\n runId: string;\n /** 状态 */\n status: string;\n}\n\n// ============= 事件类型 =============\n\n/**\n * connect.challenge 事件数据\n */\nexport interface ConnectChallengePayload {\n /** 随机数 */\n nonce: string;\n /** 协议版本 */\n protocolVersion?: number;\n}\n\n/**\n * chat 事件数据\n */\nexport interface ChatEventPayload {\n /** 运行 ID */\n runId?: string;\n /** 会话标识 */\n sessionKey?: string;\n /** 消息状态: delta(增量) | final(完成) | error(错误) | aborted(中止) */\n state: 'delta' | 'final' | 'error' | 'aborted';\n /** 消息内容 */\n message?: {\n role: 'assistant' | 'user' | 'system';\n content: Array<{\n type: string;\n text?: string;\n [key: string]: unknown;\n }>;\n };\n /** 错误消息 */\n errorMessage?: string;\n}\n\n/**\n * agent 事件数据\n *\n * 实际 OpenClaw agent 事件示例:\n * {\n * \"type\": \"event\",\n * \"event\": \"agent\",\n * \"payload\": {\n * \"runId\": \"b7dfa37d-...\",\n * \"stream\": \"assistant\",\n * \"data\": { \"text\": \"全量快照文本\", \"delta\": \"本次增量\" },\n * \"sessionKey\": \"agent:main:main\",\n * \"seq\": 12,\n * \"ts\": 1772612049089\n * },\n * \"seq\": 16278\n * }\n */\nexport interface AgentEventPayload {\n /** 运行 ID */\n runId?: string;\n /** 流类型: assistant | tool | system */\n stream?: string;\n /** 事件子类型(可选,实际 agent 流式事件中通常不存在) */\n type?: string;\n /** 数据内容 */\n data?: {\n /** 全量文本快照(包含到当前为止的所有文本) */\n text?: string;\n /** 本次增量文本 */\n delta?: string;\n [key: string]: unknown;\n };\n /** payload 内序号(agent 事件流内的顺序) */\n seq?: number;\n /** 时间戳 */\n ts?: number;\n /** 会话标识 */\n sessionKey?: string;\n}\n\n/**\n * 类型守卫:判断是否为请求帧\n */\nexport function isRequestFrame(frame: OpenClawFrame): frame is OpenClawRequestFrame {\n return frame.type === 'req';\n}\n\n/**\n * 类型守卫:判断是否为响应帧\n */\nexport function isResponseFrame(frame: OpenClawFrame): frame is OpenClawResponseFrame {\n return frame.type === 'res';\n}\n\n/**\n * 类型守卫:判断是否为事件帧\n */\nexport function isEventFrame(frame: OpenClawFrame): frame is OpenClawEventFrame {\n return frame.type === 'event';\n}\n"],"names":["isRequestFrame","frame","type","isResponseFrame","isEventFrame"],"mappings":";;;;;;AAyPO,SAASA,eAAeC,KAAqD,EAAA;AAClF,EAAA,OAAOA,MAAMC,IAAS,KAAA,KAAA,CAAA;AACxB,CAAA;AAKO,SAASC,gBAAgBF,KAAsD,EAAA;AACpF,EAAA,OAAOA,MAAMC,IAAS,KAAA,KAAA,CAAA;AACxB,CAAA;AAKO,SAASE,aAAaH,KAAmD,EAAA;AAC9E,EAAA,OAAOA,MAAMC,IAAS,KAAA,OAAA,CAAA;AACxB;;;;"}
@@ -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
  */
@@ -16,6 +16,8 @@ export default class ChatEngine implements IChatEngine {
16
16
  private aguiAdapter;
17
17
  /** 流式处理策略(由协议类型决定) */
18
18
  private streamHandler;
19
+ /** 是否已完成初始化(防止 React StrictMode 等场景下重复调用 init) */
20
+ private initialized;
19
21
  constructor(eventBusOptions?: ChatEventBusOptions);
20
22
  /**
21
23
  * 获取当前所有消息
@@ -40,7 +42,7 @@ export default class ChatEngine implements IChatEngine {
40
42
  * @param initialMessages 初始消息列表,用于恢复历史对话
41
43
  * @description 设置初始消息、配置服务参数,并根据协议类型初始化适配器和 StreamHandler
42
44
  */
43
- init(configSetter: ChatServiceConfigSetter, initialMessages?: ChatMessagesData[]): void;
45
+ init(configSetter: ChatServiceConfigSetter, initialMessages?: ChatMessagesData[]): Promise<void>;
44
46
  /**
45
47
  * 发送用户消息并获取AI回复
46
48
  * @param requestParams 请求参数,包含用户输入的文本和附件