@tdesign-react/chat 1.1.0-alpha.11 → 1.1.0-alpha.13

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 (183) hide show
  1. package/es/_chunks/dep-58d90dfe.js +438 -0
  2. package/es/_chunks/dep-58d90dfe.js.map +1 -0
  3. package/es/_chunks/dep-771678df.js +438 -0
  4. package/es/_chunks/dep-771678df.js.map +1 -0
  5. package/es/_chunks/dep-93283bbd.js +1247 -0
  6. package/es/_chunks/dep-93283bbd.js.map +1 -0
  7. package/es/_chunks/dep-dbdfe7d6.js +169 -0
  8. package/es/_chunks/dep-dbdfe7d6.js.map +1 -0
  9. package/es/_util/reactify.js +1 -1
  10. package/es/_util/useDynamicStyle.js +1 -1
  11. package/es/attachments/index.js +1 -1
  12. package/es/chat-actionbar/index.js +1 -1
  13. package/es/chat-engine/components/activity/index.js +2 -2
  14. package/es/chat-engine/components/activity/registry.js +1 -1
  15. package/es/chat-engine/components/activity/render.js +2 -2
  16. package/es/chat-engine/components/activity/types.js +1 -1
  17. package/es/chat-engine/components/index.js +17 -4
  18. package/es/chat-engine/components/index.js.map +1 -1
  19. package/es/chat-engine/components/json-render/catalog/atomic/button.js +1 -1
  20. package/es/chat-engine/components/json-render/catalog/atomic/card.js +1 -1
  21. package/es/chat-engine/components/json-render/catalog/atomic/input.js +17 -4
  22. package/es/chat-engine/components/json-render/catalog/atomic/input.js.map +1 -1
  23. package/es/chat-engine/components/json-render/catalog/atomic/layout.js +1 -1
  24. package/es/chat-engine/components/json-render/catalog/atomic/text.js +1 -1
  25. package/es/chat-engine/components/json-render/catalog/catalog-to-prompt.js +1 -1
  26. package/es/chat-engine/components/json-render/contexts/actions.js +2 -2
  27. package/es/chat-engine/components/json-render/contexts/data.js +2 -2
  28. package/es/chat-engine/components/json-render/contexts/index.js +2 -2
  29. package/es/chat-engine/components/json-render/contexts/store.js +1 -1
  30. package/es/chat-engine/components/json-render/contexts/tree.js +1 -1
  31. package/es/chat-engine/components/json-render/contexts/validation.js +2 -2
  32. package/es/chat-engine/components/json-render/contexts/visibility.js +2 -2
  33. package/es/chat-engine/components/json-render/index.js +17 -4
  34. package/es/chat-engine/components/json-render/index.js.map +1 -1
  35. package/es/chat-engine/components/json-render/registry/a2ui-binding.js +17 -4
  36. package/es/chat-engine/components/json-render/registry/a2ui-binding.js.map +1 -1
  37. package/es/chat-engine/components/json-render/registry/a2ui-registry.js +17 -4
  38. package/es/chat-engine/components/json-render/registry/a2ui-registry.js.map +1 -1
  39. package/es/chat-engine/components/json-render/registry/config.js +17 -4
  40. package/es/chat-engine/components/json-render/registry/config.js.map +1 -1
  41. package/es/chat-engine/components/json-render/registry/index.js +17 -4
  42. package/es/chat-engine/components/json-render/registry/index.js.map +1 -1
  43. package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js +16 -3
  44. package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js.map +1 -1
  45. package/es/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.js +3 -3
  46. package/es/chat-engine/components/json-render/renderer/JsonUIRenderer.js +2 -2
  47. package/es/chat-engine/components/json-render/renderer/_index.js +2 -2
  48. package/es/chat-engine/components/json-render/types.js +1 -1
  49. package/es/chat-engine/components/provider/agent-state.js +15 -2
  50. package/es/chat-engine/components/provider/agent-state.js.map +1 -1
  51. package/es/chat-engine/components/shared/ComponentErrorBoundary.js +1 -1
  52. package/es/chat-engine/components/shared/createRegistry.js +1 -1
  53. package/es/chat-engine/components/shared/index.js +1 -1
  54. package/es/chat-engine/components/shared/useRegistrationListener.js +1 -1
  55. package/es/chat-engine/components/toolcall/index.js +15 -2
  56. package/es/chat-engine/components/toolcall/index.js.map +1 -1
  57. package/es/chat-engine/components/toolcall/registry.js +1 -1
  58. package/es/chat-engine/components/toolcall/render.js +15 -2
  59. package/es/chat-engine/components/toolcall/render.js.map +1 -1
  60. package/es/chat-engine/components/toolcall/types.js +1 -1
  61. package/es/chat-engine/core/adapters/a2ui/index.js +2 -1
  62. package/es/chat-engine/core/adapters/a2ui/index.js.map +1 -1
  63. package/es/chat-engine/core/adapters/a2ui/processor/A2uiMessageProcessor.js +1 -1
  64. package/es/chat-engine/core/adapters/a2ui/processor/ComponentTree.js +1 -1
  65. package/es/chat-engine/core/adapters/a2ui/processor/DataStore.js +1 -1
  66. package/es/chat-engine/core/adapters/a2ui/processor/PathResolver.js +1 -1
  67. package/es/chat-engine/core/adapters/a2ui/types/index.js +1 -1
  68. package/es/chat-engine/core/adapters/a2ui/types/types.js +1 -1
  69. package/es/chat-engine/core/adapters/a2ui/utils/binding.js +2 -1631
  70. package/es/chat-engine/core/adapters/a2ui/utils/binding.js.map +1 -1
  71. package/es/chat-engine/core/adapters/a2ui/utils/index.js +2 -1
  72. package/es/chat-engine/core/adapters/a2ui/utils/index.js.map +1 -1
  73. package/es/chat-engine/core/adapters/a2ui/utils/validation.js +1 -1
  74. package/es/chat-engine/core/adapters/agui/ActivityManager.js +1 -1
  75. package/es/chat-engine/core/adapters/agui/StateManager.js +1 -1
  76. package/es/chat-engine/core/adapters/agui/event-mapper.js +1 -1
  77. package/es/chat-engine/core/adapters/agui/index.js +1 -1
  78. package/es/chat-engine/core/adapters/agui/types/events.js +1 -1
  79. package/es/chat-engine/core/adapters/agui/types/index.js +1 -1
  80. package/es/chat-engine/core/adapters/agui/utils.js +1 -1
  81. package/es/chat-engine/core/adapters/index.d.ts +2 -0
  82. package/es/chat-engine/core/adapters/index.js +27 -9
  83. package/es/chat-engine/core/adapters/index.js.map +1 -1
  84. package/es/chat-engine/core/adapters/json-render/SurfaceStateManager.js +1 -1
  85. package/es/chat-engine/core/adapters/json-render/a2ui-to-jsonrender.js +1 -1
  86. package/es/chat-engine/core/adapters/json-render/engine.js +1 -1
  87. package/es/chat-engine/core/adapters/json-render/index.js +1 -1
  88. package/es/chat-engine/core/adapters/json-render/types/a2ui.js +1 -1
  89. package/es/chat-engine/core/adapters/json-render/types/core.js +1 -1
  90. package/es/chat-engine/core/adapters/json-render/types/index.js +1 -1
  91. package/es/chat-engine/core/adapters/openclaw/event-mapper.d.ts +212 -0
  92. package/es/chat-engine/core/adapters/openclaw/event-mapper.js +606 -0
  93. package/es/chat-engine/core/adapters/openclaw/event-mapper.js.map +1 -0
  94. package/es/chat-engine/core/adapters/openclaw/index.d.ts +158 -0
  95. package/es/chat-engine/core/adapters/openclaw/index.js +460 -0
  96. package/es/chat-engine/core/adapters/openclaw/index.js.map +1 -0
  97. package/es/chat-engine/core/adapters/openclaw/rpc-handler.d.ts +114 -0
  98. package/es/chat-engine/core/adapters/openclaw/rpc-handler.js +263 -0
  99. package/es/chat-engine/core/adapters/openclaw/rpc-handler.js.map +1 -0
  100. package/es/chat-engine/core/adapters/openclaw/types/config.d.ts +67 -0
  101. package/es/chat-engine/core/adapters/openclaw/types/config.js +35 -0
  102. package/es/chat-engine/core/adapters/openclaw/types/config.js.map +1 -0
  103. package/es/chat-engine/core/adapters/openclaw/types/events.d.ts +121 -0
  104. package/es/chat-engine/core/adapters/openclaw/types/events.js +71 -0
  105. package/es/chat-engine/core/adapters/openclaw/types/events.js.map +1 -0
  106. package/es/chat-engine/core/adapters/openclaw/types/index.d.ts +6 -0
  107. package/es/chat-engine/core/adapters/openclaw/types/index.js +11 -0
  108. package/es/chat-engine/core/adapters/openclaw/types/index.js.map +1 -0
  109. package/es/chat-engine/core/adapters/openclaw/types/messages.d.ts +215 -0
  110. package/es/chat-engine/core/adapters/openclaw/types/messages.js +18 -0
  111. package/es/chat-engine/core/adapters/openclaw/types/messages.js.map +1 -0
  112. package/es/chat-engine/core/adapters/openclaw/utils.d.ts +49 -0
  113. package/es/chat-engine/core/adapters/openclaw/utils.js +109 -0
  114. package/es/chat-engine/core/adapters/openclaw/utils.js.map +1 -0
  115. package/es/chat-engine/core/adapters/shared/activity-manager.d.ts +11 -0
  116. package/es/chat-engine/core/adapters/shared/activity-manager.js +17 -0
  117. package/es/chat-engine/core/adapters/shared/activity-manager.js.map +1 -0
  118. package/es/chat-engine/core/adapters/shared/content-factory.d.ts +7 -0
  119. package/es/chat-engine/core/adapters/shared/content-factory.js +11 -0
  120. package/es/chat-engine/core/adapters/shared/content-factory.js.map +1 -0
  121. package/es/chat-engine/core/adapters/shared/index.d.ts +11 -0
  122. package/es/chat-engine/core/adapters/shared/index.js +21 -0
  123. package/es/chat-engine/core/adapters/shared/index.js.map +1 -0
  124. package/es/chat-engine/core/adapters/shared/merge-utils.d.ts +7 -0
  125. package/es/chat-engine/core/adapters/shared/merge-utils.js +11 -0
  126. package/es/chat-engine/core/adapters/shared/merge-utils.js.map +1 -0
  127. package/es/chat-engine/core/event-bus/ChatEventBus.js +1 -1
  128. package/es/chat-engine/core/event-bus/index.js +1 -1
  129. package/es/chat-engine/core/event-bus/types.js +1 -1
  130. package/es/chat-engine/core/index.d.ts +7 -0
  131. package/es/chat-engine/core/index.js +83 -8
  132. package/es/chat-engine/core/index.js.map +1 -1
  133. package/es/chat-engine/core/processor/index.js +1 -1
  134. package/es/chat-engine/core/server/batch-client.js +1 -1
  135. package/es/chat-engine/core/server/connection-manager.js +1 -1
  136. package/es/chat-engine/core/server/errors.js +1 -1
  137. package/es/chat-engine/core/server/index.d.ts +1 -0
  138. package/es/chat-engine/core/server/index.js +22 -1
  139. package/es/chat-engine/core/server/index.js.map +1 -1
  140. package/es/chat-engine/core/server/llm-service.d.ts +5 -0
  141. package/es/chat-engine/core/server/llm-service.js +140 -13
  142. package/es/chat-engine/core/server/llm-service.js.map +1 -1
  143. package/es/chat-engine/core/server/sse-client.js +1 -1
  144. package/es/chat-engine/core/server/sse-parser.js +1 -1
  145. package/es/chat-engine/core/server/types.js +1 -1
  146. package/es/chat-engine/core/server/websocket-client.d.ts +139 -0
  147. package/es/chat-engine/core/server/websocket-client.js +386 -0
  148. package/es/chat-engine/core/server/websocket-client.js.map +1 -0
  149. package/es/chat-engine/core/store/message.js +2 -2
  150. package/es/chat-engine/core/store/model.js +2 -2
  151. package/es/chat-engine/core/store/reactiveState.js +2 -2
  152. package/es/chat-engine/core/type.d.ts +7 -1
  153. package/es/chat-engine/core/type.js +1 -1
  154. package/es/chat-engine/core/utils/eventEmitter.d.ts +1 -0
  155. package/es/chat-engine/core/utils/eventEmitter.js +11 -1
  156. package/es/chat-engine/core/utils/eventEmitter.js.map +1 -1
  157. package/es/chat-engine/core/utils/immutable-patch.js +1 -1
  158. package/es/chat-engine/core/utils/index.js +1 -1
  159. package/es/chat-engine/core/utils/json-patch/helpers.js +1 -1
  160. package/es/chat-engine/core/utils/json-patch/index.js +1 -1
  161. package/es/chat-engine/core/utils/logger.js +1 -1
  162. package/es/chat-engine/core/utils/performance.js +1 -1
  163. package/es/chat-engine/hooks/index.js +15 -2
  164. package/es/chat-engine/hooks/index.js.map +1 -1
  165. package/es/chat-engine/hooks/useAgentActivity.js +1 -1
  166. package/es/chat-engine/hooks/useAgentState.js +15 -2
  167. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  168. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  169. package/es/chat-engine/hooks/useChat.js +15 -2
  170. package/es/chat-engine/hooks/useChat.js.map +1 -1
  171. package/es/chat-engine/index.js +19 -6
  172. package/es/chat-engine/index.js.map +1 -1
  173. package/es/chat-filecard/index.js +1 -1
  174. package/es/chat-loading/index.js +1 -1
  175. package/es/chat-markdown/index.js +1 -1
  176. package/es/chat-message/index.js +1 -1
  177. package/es/chat-sender/index.js +1 -1
  178. package/es/chat-thinking/index.js +1 -1
  179. package/es/chatbot/index.js +1 -1
  180. package/es/index.js +19 -6
  181. package/es/index.js.map +1 -1
  182. package/es/style/index.js +1 -1
  183. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-mapper.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/event-mapper.ts"],"sourcesContent":["/**\n * OpenClaw 事件映射器\n *\n * 将 OpenClaw 事件(chat、agent 等)转换为 ChatEngine 统一的 AIMessageContent 格式\n *\n * 支持的 stream 类型:\n * - assistant:文本流(标准文本对话)\n * - tool:工具调用流(start → args → result → end 四阶段)\n * - activity:Activity 组件流(snapshot / delta 增量合并)\n */\nimport type { AIMessageContent, TextContent, ToolCall } from '../../type';\nimport type { OpenClawEventFrame, ChatEventPayload, AgentEventPayload } from './types';\nimport { OpenClawEventType, ChatEventState, AgentStreamType, AgentDataType } from './types/events';\n\n// 从共享层引入通用工具函数\nimport {\n createToolCallContent,\n createActivityContent,\n mergeStringContent,\n updateToolCall,\n handleSuggestionToolCall,\n} from '../shared';\nimport { activityManager } from '../shared/activity-manager';\n\n/**\n * 事件映射结果\n */\nexport interface EventMapResult {\n /** 映射后的内容 */\n content: AIMessageContent | AIMessageContent[] | null;\n /** 是否是最终消息 */\n isFinal: boolean;\n /** 是否有错误 */\n hasError: boolean;\n /** 错误消息 */\n errorMessage?: string;\n /** 原始运行 ID */\n runId?: string;\n}\n\n/**\n * OpenClaw 事件映射器\n */\nexport class OpenClawEventMapper {\n /** 当前流式文本缓冲 */\n private textBuffer = '';\n\n /** 当前运行 ID */\n private currentRunId: string | null = null;\n\n /** 工具调用状态映射(toolCallId → ToolCall) */\n private toolCallMap: Record<string, ToolCall> = {};\n\n /** 已结束的工具调用 ID 集合 */\n private toolCallEnded: Set<string> = new Set();\n\n /**\n * 映射 OpenClaw 事件帧到 AIMessageContent\n */\n mapEvent(frame: OpenClawEventFrame): EventMapResult {\n const { event, payload } = frame;\n\n switch (event) {\n case OpenClawEventType.CHAT:\n return this.mapChatEvent(payload as ChatEventPayload);\n\n case OpenClawEventType.AGENT:\n return this.mapAgentEvent(payload as AgentEventPayload);\n\n case OpenClawEventType.CONNECT_CHALLENGE:\n // 握手事件,不产生消息内容\n return { content: null, isFinal: false, hasError: false };\n\n default:\n // 未知事件,尝试作为通用消息处理\n return this.mapGenericEvent(event, payload);\n }\n }\n\n // ==================== Chat 事件处理 ====================\n\n /**\n * 映射 chat 事件\n */\n private mapChatEvent(payload: ChatEventPayload): EventMapResult {\n const { state, message, runId, errorMessage } = payload;\n\n this.currentRunId = runId || this.currentRunId;\n\n switch (state) {\n case ChatEventState.DELTA:\n return this.handleChatDelta(message);\n\n case ChatEventState.FINAL:\n return this.handleChatFinal(message);\n\n case ChatEventState.ERROR:\n return {\n content: this.createErrorContent(errorMessage || 'Chat error'),\n isFinal: true,\n hasError: true,\n errorMessage,\n runId: this.currentRunId || undefined,\n };\n\n case ChatEventState.ABORTED:\n return {\n content: null,\n isFinal: true,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n\n default:\n return { content: null, isFinal: false, hasError: false };\n }\n }\n\n /**\n * 处理 chat delta(增量更新)\n *\n * chat 事件的 message.content 包含全量文本快照。\n * 需要计算与上次的增量,只返回新增部分,\n * 因为 ChatEngine 的 text handler 会拼接内容。\n */\n private handleChatDelta(message?: ChatEventPayload['message']): EventMapResult {\n if (!message?.content) {\n return { content: null, isFinal: false, hasError: false };\n }\n\n // 从 content 数组中提取文本(全量快照)\n const text = this.extractTextFromContent(message.content);\n if (text === null) {\n return { content: null, isFinal: false, hasError: false };\n }\n\n // 计算增量\n const prevBuffer = this.textBuffer;\n this.textBuffer = text;\n const delta = text.startsWith(prevBuffer) ? text.slice(prevBuffer.length) : text;\n\n if (!delta) {\n return { content: null, isFinal: false, hasError: false };\n }\n\n const textContent: TextContent = {\n type: 'text',\n data: delta,\n status: 'streaming',\n };\n\n return {\n content: textContent,\n isFinal: false,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n /**\n * 处理 chat final(最终消息)\n *\n * 在实际 OpenClaw 流程中,chat final 在 agent 流式结束后发送。\n * 此时所有文本已通过 agent 事件累积完毕,\n * 所以 final 只需标记完成状态,不应再输出全量内容。\n */\n private handleChatFinal(_message?: ChatEventPayload['message']): EventMapResult {\n // 重置缓冲区\n this.textBuffer = '';\n\n const textContent: TextContent = {\n type: 'text',\n data: '',\n status: 'complete',\n };\n\n return {\n content: textContent,\n isFinal: true,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n // ==================== Agent 事件处理(核心分发) ====================\n\n /**\n * 映射 agent 事件\n *\n * 根据 stream 字段分发到不同的处理器:\n * - assistant / 缺省:文本流\n * - tool:工具调用流\n * - activity:Activity 组件流\n */\n private mapAgentEvent(payload: AgentEventPayload): EventMapResult {\n const { stream, data, runId } = payload;\n\n this.currentRunId = runId || this.currentRunId;\n\n // 根据 stream 类型分发\n switch (stream) {\n case AgentStreamType.TOOL:\n return this.handleToolStream(data);\n\n case AgentStreamType.ACTIVITY:\n return this.handleActivityStream(data);\n\n case AgentStreamType.ASSISTANT:\n case undefined:\n default:\n // assistant 或未指定 stream 类型,走文本流处理\n return this.handleAssistantStream(payload);\n }\n }\n\n // ==================== Assistant Stream(文本流) ====================\n\n /**\n * 处理 assistant stream(文本流)\n *\n * 实际 OpenClaw agent 事件格式:\n * {\n * \"type\": \"event\",\n * \"event\": \"agent\",\n * \"payload\": {\n * \"runId\": \"xxx\",\n * \"stream\": \"assistant\",\n * \"data\": { \"text\": \"全量快照\", \"delta\": \"增量\" },\n * \"sessionKey\": \"agent:main:main\",\n * \"seq\": 12,\n * \"ts\": 1772612049089\n * }\n * }\n */\n private handleAssistantStream(payload: AgentEventPayload): EventMapResult {\n const { type, data } = payload;\n\n // 优先判断:如果 data 同时包含 text 和 delta,这是实际 OpenClaw 的标准 agent 流式格式\n if (data && typeof data.text === 'string' && typeof data.delta === 'string') {\n return this.handleAgentTextSnapshot(data);\n }\n\n // 根据显式的 type 字段处理(兼容可能的扩展格式)\n const eventType = type || data?.type;\n\n switch (eventType) {\n case AgentDataType.TEXT_SNAPSHOT:\n case 'snapshot':\n return this.handleAgentTextSnapshot(data);\n\n case AgentDataType.TEXT_DELTA:\n case 'delta':\n return this.handleAgentTextDelta(data);\n\n case AgentDataType.DONE:\n case 'done':\n case 'complete':\n case 'final':\n return this.handleAgentComplete();\n\n case AgentDataType.ERROR:\n case 'error':\n return {\n content: this.createErrorContent(data?.text || 'Agent error'),\n isFinal: true,\n hasError: true,\n errorMessage: data?.text,\n runId: this.currentRunId || undefined,\n };\n\n case AgentDataType.TOOL_CALL:\n return this.handleToolCall(data);\n\n case AgentDataType.TOOL_RESULT:\n return this.handleToolResult(data);\n\n default:\n // 尝试从 data 中提取文本(兜底处理)\n return this.handleAgentGenericData(data);\n }\n }\n\n /**\n * 处理 agent 文本快照\n *\n * 实际 OpenClaw agent 事件中,data.text 是全量快照,data.delta 是本次增量。\n * ChatEngine 的 text 合并策略是 existing + incoming(拼接),\n * 所以这里必须返回 delta(增量)而非全量快照,否则会导致内容重复。\n * textBuffer 保存全量快照,用于 final 阶段和状态恢复。\n */\n private handleAgentTextSnapshot(data?: AgentEventPayload['data']): EventMapResult {\n const text = data?.text || '';\n const delta = data?.delta;\n\n if (!text && !delta) {\n return { content: null, isFinal: false, hasError: false };\n }\n\n // 保存全量快照到 buffer\n this.textBuffer = text;\n\n // 优先使用 delta(增量),因为 ChatEngine 的 text handler 会拼接内容\n // 如果没有 delta(首条消息),则使用全量 text\n const contentData = (typeof delta === 'string') ? delta : text;\n\n if (!contentData) {\n return { content: null, isFinal: false, hasError: false };\n }\n\n const textContent: TextContent = {\n type: 'text',\n data: contentData,\n status: 'streaming',\n };\n\n return {\n content: textContent,\n isFinal: false,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n /**\n * 处理 agent 文本增量\n */\n private handleAgentTextDelta(data?: AgentEventPayload['data']): EventMapResult {\n const delta = data?.delta || data?.text || '';\n if (!delta) {\n return { content: null, isFinal: false, hasError: false };\n }\n\n this.textBuffer += delta;\n\n const textContent: TextContent = {\n type: 'text',\n data: delta,\n status: 'streaming',\n };\n\n return {\n content: textContent,\n isFinal: false,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n /**\n * 处理 agent 完成\n *\n * 完成时不再输出内容(之前的 delta 已经都输出了),\n * 只返回一个空 data + complete 状态来标记结束。\n */\n private handleAgentComplete(): EventMapResult {\n const textContent: TextContent = {\n type: 'text',\n data: '',\n status: 'complete',\n };\n\n this.textBuffer = '';\n\n return {\n content: textContent,\n isFinal: true,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n /**\n * 处理通用 agent 数据\n *\n * 兜底处理逻辑:优先使用 delta 增量,避免全量快照被 ChatEngine 拼接导致重复\n */\n private handleAgentGenericData(data?: AgentEventPayload['data']): EventMapResult {\n const text = data?.text;\n const delta = data?.delta;\n\n // 优先使用 delta 增量\n if (typeof delta === 'string' && delta) {\n this.textBuffer += delta;\n return {\n content: {\n type: 'text',\n data: delta,\n status: 'streaming',\n } as TextContent,\n isFinal: false,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n // 如果只有 text(全量快照),计算增量后返回\n if (typeof text === 'string' && text) {\n const prevBuffer = this.textBuffer;\n this.textBuffer = text;\n // 如果 text 以之前的 buffer 开头,只返回新增部分\n const contentData = text.startsWith(prevBuffer) ? text.slice(prevBuffer.length) : text;\n if (!contentData) {\n return { content: null, isFinal: false, hasError: false };\n }\n return {\n content: {\n type: 'text',\n data: contentData,\n status: 'streaming',\n } as TextContent,\n isFinal: false,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n return { content: null, isFinal: false, hasError: false };\n }\n\n // ==================== Tool Stream(工具调用流) ====================\n\n /**\n * 处理 tool stream\n *\n * OpenClaw tool stream data 约定:\n * {\n * toolCallId: string, // 工具调用 ID\n * toolCallName: string, // 工具名称\n * state: 'start' | 'args' | 'result' | 'end',\n * delta?: string, // args 增量\n * content?: string, // result 内容\n * args?: string, // 全量 args(snapshot 模式)\n * result?: string, // 全量 result(snapshot 模式)\n * parentMessageId?: string, // 父消息 ID\n * }\n */\n private handleToolStream(data: AgentEventPayload['data']): EventMapResult {\n if (!data?.toolCallId) {\n return { content: null, isFinal: false, hasError: false };\n }\n\n const { toolCallId, toolCallName, state } = data;\n\n switch (state) {\n case 'start':\n return this.handleToolCallStart(toolCallId as string, toolCallName as string, data);\n case 'args':\n return this.handleToolCallArgs(toolCallId as string, data);\n case 'result':\n return this.handleToolCallResult(toolCallId as string, data);\n case 'end':\n return this.handleToolCallEnd(toolCallId as string);\n default:\n // 兜底:如果没有 state,尝试从 data 推断\n return this.handleToolCallGeneric(data);\n }\n }\n\n /**\n * 处理工具调用开始\n */\n private handleToolCallStart(toolCallId: string, toolCallName: string, data: AgentEventPayload['data']): EventMapResult {\n this.toolCallMap[toolCallId] = {\n eventType: 'TOOL_CALL_START',\n toolCallId,\n toolCallName: toolCallName || 'unknown',\n parentMessageId: (data?.parentMessageId as string) || '',\n args: (data?.args as string) || (data?.delta as string) || '',\n };\n\n return {\n content: createToolCallContent(this.toolCallMap[toolCallId], 'pending', 'append'),\n isFinal: false,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n /**\n * 处理工具调用参数增量\n */\n private handleToolCallArgs(toolCallId: string, data: AgentEventPayload['data']): EventMapResult {\n if (!this.toolCallMap[toolCallId]) {\n return { content: null, isFinal: false, hasError: false };\n }\n\n const currentArgs = this.toolCallMap[toolCallId].args || '';\n const newArgs = mergeStringContent(currentArgs, (data?.delta as string) || '');\n\n this.toolCallMap[toolCallId] = updateToolCall(this.toolCallMap[toolCallId], {\n eventType: 'TOOL_CALL_ARGS',\n args: newArgs,\n });\n\n return {\n content: createToolCallContent(this.toolCallMap[toolCallId], 'streaming', 'merge'),\n isFinal: false,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n /**\n * 处理工具调用结果\n */\n private handleToolCallResult(toolCallId: string, data: AgentEventPayload['data']): EventMapResult {\n if (!this.toolCallMap[toolCallId]) {\n return { content: null, isFinal: false, hasError: false };\n }\n\n const currentResult = this.toolCallMap[toolCallId].result || '';\n const newResult = mergeStringContent(\n currentResult,\n (data?.content as string) || (data?.result as string) || '',\n );\n\n this.toolCallMap[toolCallId] = updateToolCall(this.toolCallMap[toolCallId], {\n eventType: 'TOOL_CALL_RESULT',\n result: newResult,\n });\n\n // 复用 suggestion 特殊处理\n const suggestionContent = handleSuggestionToolCall(this.toolCallMap[toolCallId]);\n if (suggestionContent) {\n return {\n content: suggestionContent,\n isFinal: false,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n return {\n content: createToolCallContent(this.toolCallMap[toolCallId], 'complete', 'merge'),\n isFinal: false,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n /**\n * 处理工具调用结束\n */\n private handleToolCallEnd(toolCallId: string): EventMapResult {\n this.toolCallEnded.add(toolCallId);\n\n if (this.toolCallMap[toolCallId]) {\n this.toolCallMap[toolCallId] = {\n ...this.toolCallMap[toolCallId],\n eventType: 'TOOL_CALL_END',\n };\n }\n\n return {\n content: this.toolCallMap[toolCallId]\n ? createToolCallContent(this.toolCallMap[toolCallId], 'complete', 'merge')\n : null,\n isFinal: false,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n /**\n * 兜底处理工具调用数据(无 state 字段时)\n */\n private handleToolCallGeneric(data: AgentEventPayload['data']): EventMapResult {\n if (!data?.toolCallId) {\n return { content: null, isFinal: false, hasError: false };\n }\n\n const toolCallId = data.toolCallId as string;\n const toolCallName = data.toolCallName as string;\n\n // 如果还没有这个 toolCall 的记录,当作 start 处理\n if (!this.toolCallMap[toolCallId]) {\n return this.handleToolCallStart(toolCallId, toolCallName, data);\n }\n\n // 如果有 delta/args,当作 args 更新\n if (data.delta || data.args) {\n return this.handleToolCallArgs(toolCallId, data);\n }\n\n // 如果有 content/result,当作 result 更新\n if (data.content || data.result) {\n return this.handleToolCallResult(toolCallId, data);\n }\n\n return { content: null, isFinal: false, hasError: false };\n }\n\n // ==================== 旧版 Tool 处理(兼容 assistant stream 中的 type 字段) ====================\n\n /**\n * 处理旧版工具调用(通过 type 字段而非 stream=tool)\n */\n private handleToolCall(data?: AgentEventPayload['data']): EventMapResult {\n if (!data?.toolCallId) {\n return { content: null, isFinal: false, hasError: false };\n }\n return this.handleToolCallStart(\n data.toolCallId as string,\n (data.toolCallName as string) || 'unknown',\n data,\n );\n }\n\n /**\n * 处理旧版工具结果(通过 type 字段而非 stream=tool)\n */\n private handleToolResult(data?: AgentEventPayload['data']): EventMapResult {\n if (!data?.toolCallId) {\n return { content: null, isFinal: false, hasError: false };\n }\n return this.handleToolCallResult(data.toolCallId as string, data);\n }\n\n // ==================== Activity Stream ====================\n\n /**\n * 处理 activity stream\n *\n * 直接复用 activityManager 的 snapshot/delta 处理逻辑。\n *\n * OpenClaw activity stream data 约定:\n * {\n * activityType: string, // Activity 组件类型\n * state: 'snapshot' | 'delta', // 全量 or 增量\n * content?: Record<string, any>, // snapshot 全量数据\n * patch?: any[], // delta JSON Patch 数组\n * messageId?: string, // 关联消息 ID\n * }\n */\n private handleActivityStream(data: AgentEventPayload['data']): EventMapResult {\n if (!data?.activityType) {\n return { content: null, isFinal: false, hasError: false };\n }\n\n const activityType = data.activityType as string;\n const state = data.state as string;\n\n // 将 OpenClaw 的 state 映射为 AG-UI 兼容的事件 type\n const eventType = state === 'snapshot' ? 'ACTIVITY_SNAPSHOT' : 'ACTIVITY_DELTA';\n\n // 委托给 activityManager 处理(复用 AG-UI 的 snapshot/delta 合并逻辑)\n const activityData = activityManager.handleActivityEvent({\n type: eventType,\n activityType,\n content: data.content as Record<string, any>,\n patch: data.patch as any[],\n messageId: data.messageId as string,\n });\n\n if (!activityData) {\n return { content: null, isFinal: false, hasError: false };\n }\n\n // 判断是否需要 append(新建内容块)\n const isSnapshot = state === 'snapshot';\n // 首次 delta 时 activityManager 内部已经处理了初始化\n const existingActivity = activityManager.getActivity(activityType);\n const isFirstEvent = isSnapshot || (!existingActivity && state === 'delta');\n\n return {\n content: createActivityContent(\n activityType,\n activityData.content,\n 'streaming',\n isFirstEvent ? 'append' : 'merge',\n activityData.deltaInfo,\n ),\n isFinal: false,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n // ==================== 通用事件处理 ====================\n\n /**\n * 映射通用事件\n */\n private mapGenericEvent(_event: string, payload: unknown): EventMapResult {\n // 尝试从 payload 中提取有用信息\n if (typeof payload === 'object' && payload !== null) {\n const p = payload as Record<string, unknown>;\n const text = p.text || p.content || p.message;\n if (typeof text === 'string') {\n return {\n content: {\n type: 'text',\n data: text,\n status: 'streaming',\n } as TextContent,\n isFinal: false,\n hasError: false,\n };\n }\n }\n\n return { content: null, isFinal: false, hasError: false };\n }\n\n // ==================== 工具方法 ====================\n\n /**\n * 从 content 数组中提取文本\n */\n private extractTextFromContent(content: Array<{ type: string; text?: string }>): string | null {\n if (!Array.isArray(content)) {\n return null;\n }\n\n return content\n .filter((c) => c?.type === 'text' && c?.text)\n .map((c) => c.text!)\n .join('');\n }\n\n /**\n * 创建错误内容\n */\n private createErrorContent(message: string): TextContent {\n return {\n type: 'text',\n data: `Error: ${message}`,\n status: 'error',\n };\n }\n\n /**\n * 获取当前文本缓冲\n */\n getTextBuffer(): string {\n return this.textBuffer;\n }\n\n /**\n * 获取当前运行 ID\n */\n getCurrentRunId(): string | null {\n return this.currentRunId;\n }\n\n /**\n * 获取指定工具调用\n */\n getToolCall(toolCallId: string): ToolCall | undefined {\n return this.toolCallMap[toolCallId];\n }\n\n /**\n * 获取所有工具调用\n */\n getToolCalls(): ToolCall[] {\n return Object.values(this.toolCallMap);\n }\n\n /**\n * 检查工具调用是否已结束\n */\n isToolCallEnded(toolCallId: string): boolean {\n return this.toolCallEnded.has(toolCallId);\n }\n\n /**\n * 重置映射器状态\n */\n reset(): void {\n this.textBuffer = '';\n this.currentRunId = null;\n this.toolCallMap = {};\n this.toolCallEnded.clear();\n activityManager.clear();\n }\n}\n"],"names":["OpenClawEventMapper","_classCallCheck","_defineProperty","Set","_createClass","key","value","mapEvent","frame","event","payload","OpenClawEventType","CHAT","mapChatEvent","AGENT","mapAgentEvent","CONNECT_CHALLENGE","content","isFinal","hasError","mapGenericEvent","state","message","runId","errorMessage","currentRunId","ChatEventState","DELTA","handleChatDelta","FINAL","handleChatFinal","ERROR","createErrorContent","ABORTED","text","extractTextFromContent","prevBuffer","textBuffer","delta","startsWith","slice","length","textContent","type","data","status","_message","stream","AgentStreamType","TOOL","handleToolStream","ACTIVITY","handleActivityStream","ASSISTANT","handleAssistantStream","handleAgentTextSnapshot","eventType","AgentDataType","TEXT_SNAPSHOT","TEXT_DELTA","handleAgentTextDelta","DONE","handleAgentComplete","TOOL_CALL","handleToolCall","TOOL_RESULT","handleToolResult","handleAgentGenericData","contentData","toolCallId","toolCallName","handleToolCallStart","handleToolCallArgs","handleToolCallResult","handleToolCallEnd","handleToolCallGeneric","toolCallMap","parentMessageId","args","createToolCallContent","currentArgs","newArgs","mergeStringContent","updateToolCall","currentResult","result","newResult","suggestionContent","handleSuggestionToolCall","toolCallEnded","add","_objectSpread","activityType","activityData","activityManager","handleActivityEvent","patch","messageId","isSnapshot","existingActivity","getActivity","isFirstEvent","createActivityContent","deltaInfo","_event","_typeof","p","Array","isArray","filter","c","map","join","getTextBuffer","getCurrentRunId","getToolCall","getToolCalls","Object","values","isToolCallEnded","has","reset","clear"],"mappings":"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"}
@@ -0,0 +1,158 @@
1
+ /**
2
+ * OpenClaw 协议适配器
3
+ *
4
+ * 功能:
5
+ * 1. 管理 WebSocket 连接生命周期
6
+ * 2. 处理 OpenClaw 协议的握手和认证
7
+ * 3. 将 OpenClaw 事件转换为 ChatEngine 统一的消息格式
8
+ * 4. 提供与 AGUIAdapter 相似的接口,便于 ChatEngine 统一调度
9
+ */
10
+ import EventEmitter from '../../utils/eventEmitter';
11
+ import type { AIMessageContent, ChatRequestParams, SSEChunkData } from '../../type';
12
+ import type { OpenClawConfig } from './types';
13
+ import { OpenClawConnectionState } from './types/events';
14
+ export * from './types';
15
+ export { OpenClawEventMapper, type EventMapResult } from './event-mapper';
16
+ export { OpenClawRPCHandler, RPCError } from './rpc-handler';
17
+ /**
18
+ * OpenClaw 适配器回调接口
19
+ */
20
+ export interface OpenClawAdapterCallbacks {
21
+ /** 连接成功 */
22
+ onConnected?: () => void;
23
+ /** 连接断开 */
24
+ onDisconnected?: (reason?: string) => void;
25
+ /** 消息开始 */
26
+ onStart?: () => void;
27
+ /** 消息完成 */
28
+ onComplete?: (isAborted: boolean, params?: ChatRequestParams) => void;
29
+ /** 错误发生 */
30
+ onError?: (error: Error) => void;
31
+ /** 消息内容更新 */
32
+ onMessage?: (content: AIMessageContent | AIMessageContent[]) => void;
33
+ }
34
+ /**
35
+ * OpenClaw 适配器配置
36
+ */
37
+ export interface OpenClawAdapterConfig extends OpenClawConfig {
38
+ /** WebSocket 端点 */
39
+ endpoint: string;
40
+ /** 请求超时(毫秒) */
41
+ timeout?: number;
42
+ /** 最大重试次数 */
43
+ maxRetries?: number;
44
+ /** 重试间隔(毫秒) */
45
+ retryInterval?: number;
46
+ }
47
+ /**
48
+ * OpenClaw 协议适配器
49
+ */
50
+ export declare class OpenClawAdapter extends EventEmitter {
51
+ private wsClient;
52
+ private rpcHandler;
53
+ private eventMapper;
54
+ private config;
55
+ private adapterConfig;
56
+ private connectionState;
57
+ private instanceId;
58
+ private logger;
59
+ private callbacks;
60
+ private isStreaming;
61
+ private currentRequestParams;
62
+ constructor(config: OpenClawAdapterConfig);
63
+ /**
64
+ * 设置回调
65
+ */
66
+ setCallbacks(callbacks: OpenClawAdapterCallbacks): void;
67
+ /**
68
+ * 连接到 OpenClaw Gateway
69
+ * 等待 WebSocket 连接建立并完成认证握手后才返回
70
+ */
71
+ connect(): Promise<void>;
72
+ /**
73
+ * 等待认证完成
74
+ * WebSocket 连接建立后,服务器会发送 connect.challenge 事件,
75
+ * 适配器会自动回复 connect 请求完成握手。
76
+ * 此方法等待整个握手流程完成后再返回。
77
+ */
78
+ private waitForAuthentication;
79
+ /**
80
+ * 发送聊天消息
81
+ */
82
+ sendMessage(params: ChatRequestParams, requestParams?: Record<string, unknown>): Promise<void>;
83
+ /**
84
+ * 处理 SSE 数据块(兼容 ChatEngine 接口)
85
+ */
86
+ handleEvent(chunk: SSEChunkData): AIMessageContent | AIMessageContent[] | null;
87
+ /**
88
+ * 调用 Action(供 Toolcall/Activity 组件的 respond/action 使用)
89
+ *
90
+ * 通过 OpenClaw 的 node.invoke RPC 方法上行,利用 WebSocket 双向通道
91
+ * 将用户在交互式组件中的操作(respond/confirm/update 等)发送回 Agent 端。
92
+ *
93
+ * @param params.nodeId - toolCallId 或 activityType,标识目标节点
94
+ * @param params.action - 操作类型,如 "respond" | "update" | "confirm"
95
+ * @param params.payload - 用户操作数据
96
+ * @returns Agent 端返回的响应数据
97
+ *
98
+ * @example
99
+ * ```tsx
100
+ * // 在 ToolCallRenderer 的 onRespond 中使用
101
+ * <ToolCallRenderer
102
+ * toolCall={toolCall}
103
+ * onRespond={async (tc, response) => {
104
+ * await openclawAdapter.invokeAction({
105
+ * nodeId: tc.toolCallId,
106
+ * action: 'respond',
107
+ * payload: response,
108
+ * });
109
+ * }}
110
+ * />
111
+ * ```
112
+ */
113
+ invokeAction(params: {
114
+ nodeId: string;
115
+ action: string;
116
+ payload: unknown;
117
+ }): Promise<unknown>;
118
+ /**
119
+ * 断开连接
120
+ */
121
+ disconnect(): Promise<void>;
122
+ /**
123
+ * 中止当前流式传输
124
+ */
125
+ abort(): void;
126
+ /**
127
+ * 获取连接状态
128
+ */
129
+ getConnectionState(): OpenClawConnectionState;
130
+ /**
131
+ * 检查是否已认证
132
+ */
133
+ isAuthenticated(): boolean;
134
+ /**
135
+ * 重置适配器状态
136
+ */
137
+ reset(): void;
138
+ /**
139
+ * 销毁适配器
140
+ */
141
+ destroy(): Promise<void>;
142
+ /**
143
+ * 设置 WebSocket 事件处理器
144
+ */
145
+ private setupEventHandlers;
146
+ /**
147
+ * 处理 WebSocket 消息
148
+ */
149
+ private handleWebSocketMessage;
150
+ /**
151
+ * 处理事件帧
152
+ */
153
+ private handleEventFrame;
154
+ /**
155
+ * 处理连接挑战(握手)
156
+ */
157
+ private handleConnectChallenge;
158
+ }