@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.
- package/es/_chunks/dep-5d7a98b7.js +169 -0
- package/es/_chunks/dep-5d7a98b7.js.map +1 -0
- package/es/_chunks/dep-907337f3.js +1247 -0
- package/es/_chunks/dep-907337f3.js.map +1 -0
- package/es/_chunks/dep-ee7a509c.js +438 -0
- package/es/_chunks/dep-ee7a509c.js.map +1 -0
- package/es/_util/reactify.js +1 -1
- package/es/_util/useDynamicStyle.js +1 -1
- package/es/attachments/index.js +1 -1
- package/es/chat-actionbar/index.js +1 -1
- package/es/chat-engine/components/activity/index.js +2 -2
- package/es/chat-engine/components/activity/registry.js +1 -1
- package/es/chat-engine/components/activity/render.js +2 -2
- package/es/chat-engine/components/activity/types.js +1 -1
- package/es/chat-engine/components/index.js +5 -4
- package/es/chat-engine/components/index.js.map +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/button.js +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/card.js +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/input.js +5 -4
- package/es/chat-engine/components/json-render/catalog/atomic/input.js.map +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/layout.js +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/text.js +1 -1
- package/es/chat-engine/components/json-render/catalog/catalog-to-prompt.js +1 -1
- package/es/chat-engine/components/json-render/contexts/actions.js +2 -2
- package/es/chat-engine/components/json-render/contexts/data.js +2 -2
- package/es/chat-engine/components/json-render/contexts/index.js +2 -2
- package/es/chat-engine/components/json-render/contexts/store.js +1 -1
- package/es/chat-engine/components/json-render/contexts/tree.js +1 -1
- package/es/chat-engine/components/json-render/contexts/validation.js +2 -2
- package/es/chat-engine/components/json-render/contexts/visibility.js +2 -2
- package/es/chat-engine/components/json-render/index.js +5 -4
- package/es/chat-engine/components/json-render/index.js.map +1 -1
- package/es/chat-engine/components/json-render/registry/a2ui-binding.js +5 -4
- package/es/chat-engine/components/json-render/registry/a2ui-binding.js.map +1 -1
- package/es/chat-engine/components/json-render/registry/a2ui-registry.js +5 -4
- package/es/chat-engine/components/json-render/registry/a2ui-registry.js.map +1 -1
- package/es/chat-engine/components/json-render/registry/config.js +5 -4
- package/es/chat-engine/components/json-render/registry/config.js.map +1 -1
- package/es/chat-engine/components/json-render/registry/index.js +5 -4
- package/es/chat-engine/components/json-render/registry/index.js.map +1 -1
- package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js +4 -3
- package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js.map +1 -1
- package/es/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.js +3 -3
- package/es/chat-engine/components/json-render/renderer/JsonUIRenderer.js +2 -2
- package/es/chat-engine/components/json-render/renderer/_index.js +2 -2
- package/es/chat-engine/components/json-render/types.js +1 -1
- package/es/chat-engine/components/provider/agent-state.js +3 -2
- package/es/chat-engine/components/provider/agent-state.js.map +1 -1
- package/es/chat-engine/components/shared/ComponentErrorBoundary.js +1 -1
- package/es/chat-engine/components/shared/createRegistry.js +1 -1
- package/es/chat-engine/components/shared/index.js +1 -1
- package/es/chat-engine/components/shared/useRegistrationListener.js +1 -1
- package/es/chat-engine/components/toolcall/index.js +3 -2
- package/es/chat-engine/components/toolcall/index.js.map +1 -1
- package/es/chat-engine/components/toolcall/registry.js +1 -1
- package/es/chat-engine/components/toolcall/render.js +3 -2
- package/es/chat-engine/components/toolcall/render.js.map +1 -1
- package/es/chat-engine/components/toolcall/types.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/index.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/processor/A2uiMessageProcessor.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/processor/ComponentTree.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/processor/DataStore.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/processor/PathResolver.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/types/index.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/types/types.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/utils/binding.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/utils/index.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/utils/validation.js +1 -1
- package/es/chat-engine/core/adapters/agui/ActivityManager.js +1 -1
- package/es/chat-engine/core/adapters/agui/StateManager.js +1 -1
- package/es/chat-engine/core/adapters/agui/event-mapper.js +1 -1
- package/es/chat-engine/core/adapters/agui/index.js +16 -2
- package/es/chat-engine/core/adapters/agui/index.js.map +1 -1
- package/es/chat-engine/core/adapters/agui/types/events.js +1 -1
- package/es/chat-engine/core/adapters/agui/types/index.js +1 -1
- package/es/chat-engine/core/adapters/agui/utils.js +1 -1
- package/es/chat-engine/core/adapters/index.js +2 -1
- package/es/chat-engine/core/adapters/index.js.map +1 -1
- package/es/chat-engine/core/adapters/json-render/SurfaceStateManager.js +1 -1
- package/es/chat-engine/core/adapters/json-render/a2ui-to-jsonrender.js +1 -1
- package/es/chat-engine/core/adapters/json-render/engine.js +1 -1
- package/es/chat-engine/core/adapters/json-render/index.js +1 -1
- package/es/chat-engine/core/adapters/json-render/types/a2ui.js +1 -1
- package/es/chat-engine/core/adapters/json-render/types/core.js +1 -1
- package/es/chat-engine/core/adapters/json-render/types/index.js +1 -1
- package/es/chat-engine/core/adapters/openclaw/device-key-manager.d.ts +65 -0
- package/es/chat-engine/core/adapters/openclaw/device-key-manager.js +375 -0
- package/es/chat-engine/core/adapters/openclaw/device-key-manager.js.map +1 -0
- package/es/chat-engine/core/adapters/openclaw/event-mapper.js +2 -1
- package/es/chat-engine/core/adapters/openclaw/event-mapper.js.map +1 -1
- package/es/chat-engine/core/adapters/openclaw/history-converter.js +1 -1
- package/es/chat-engine/core/adapters/openclaw/index.d.ts +11 -0
- package/es/chat-engine/core/adapters/openclaw/index.js +70 -17
- package/es/chat-engine/core/adapters/openclaw/index.js.map +1 -1
- package/es/chat-engine/core/adapters/openclaw/rpc-handler.js +1 -1
- package/es/chat-engine/core/adapters/openclaw/types/config.d.ts +21 -0
- package/es/chat-engine/core/adapters/openclaw/types/config.js +8 -4
- package/es/chat-engine/core/adapters/openclaw/types/config.js.map +1 -1
- package/es/chat-engine/core/adapters/openclaw/types/events.d.ts +3 -1
- package/es/chat-engine/core/adapters/openclaw/types/events.js +2 -1
- package/es/chat-engine/core/adapters/openclaw/types/events.js.map +1 -1
- package/es/chat-engine/core/adapters/openclaw/types/index.js +1 -1
- package/es/chat-engine/core/adapters/openclaw/types/messages.d.ts +13 -0
- package/es/chat-engine/core/adapters/openclaw/types/messages.js +1 -1
- package/es/chat-engine/core/adapters/openclaw/types/messages.js.map +1 -1
- package/es/chat-engine/core/adapters/openclaw/utils.js +1 -1
- package/es/chat-engine/core/adapters/shared/activity-manager.js +1 -1
- package/es/chat-engine/core/adapters/shared/content-factory.js +1 -1
- package/es/chat-engine/core/adapters/shared/index.js +1 -1
- package/es/chat-engine/core/adapters/shared/merge-utils.js +1 -1
- package/es/chat-engine/core/event-bus/ChatEventBus.js +1 -1
- package/es/chat-engine/core/event-bus/index.js +1 -1
- package/es/chat-engine/core/event-bus/types.js +1 -1
- package/es/chat-engine/core/index.d.ts +3 -1
- package/es/chat-engine/core/index.js +150 -111
- package/es/chat-engine/core/index.js.map +1 -1
- package/es/chat-engine/core/processor/index.js +1 -1
- package/es/chat-engine/core/server/batch-client.js +1 -1
- package/es/chat-engine/core/server/connection-manager.js +1 -1
- package/es/chat-engine/core/server/errors.js +1 -1
- package/es/chat-engine/core/server/index.js +1 -1
- package/es/chat-engine/core/server/llm-service.js +1 -1
- package/es/chat-engine/core/server/sse-client.js +1 -1
- package/es/chat-engine/core/server/sse-parser.js +1 -1
- package/es/chat-engine/core/server/types.js +1 -1
- package/es/chat-engine/core/server/websocket-client.d.ts +2 -0
- package/es/chat-engine/core/server/websocket-client.js +19 -3
- package/es/chat-engine/core/server/websocket-client.js.map +1 -1
- package/es/chat-engine/core/store/message.js +2 -2
- package/es/chat-engine/core/store/model.js +2 -2
- package/es/chat-engine/core/store/reactiveState.js +2 -2
- package/es/chat-engine/core/stream-handlers/agui-stream-handler.js +1 -1
- package/es/chat-engine/core/stream-handlers/default-stream-handler.js +1 -1
- package/es/chat-engine/core/stream-handlers/index.js +4 -3
- package/es/chat-engine/core/stream-handlers/index.js.map +1 -1
- package/es/chat-engine/core/stream-handlers/openclaw-stream-handler.d.ts +8 -0
- package/es/chat-engine/core/stream-handlers/openclaw-stream-handler.js +73 -22
- package/es/chat-engine/core/stream-handlers/openclaw-stream-handler.js.map +1 -1
- package/es/chat-engine/core/stream-handlers/types.d.ts +1 -1
- package/es/chat-engine/core/stream-handlers/types.js +1 -1
- package/es/chat-engine/core/type.js +1 -1
- package/es/chat-engine/core/utils/eventEmitter.js +1 -1
- package/es/chat-engine/core/utils/immutable-patch.js +1 -1
- package/es/chat-engine/core/utils/index.js +1 -1
- package/es/chat-engine/core/utils/json-patch/helpers.js +1 -1
- package/es/chat-engine/core/utils/json-patch/index.js +1 -1
- package/es/chat-engine/core/utils/logger.js +1 -1
- package/es/chat-engine/core/utils/performance.js +1 -1
- package/es/chat-engine/hooks/index.js +3 -2
- package/es/chat-engine/hooks/index.js.map +1 -1
- package/es/chat-engine/hooks/useAgentActivity.js +1 -1
- package/es/chat-engine/hooks/useAgentState.js +3 -2
- package/es/chat-engine/hooks/useAgentState.js.map +1 -1
- package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
- package/es/chat-engine/hooks/useChat.js +34 -10
- package/es/chat-engine/hooks/useChat.js.map +1 -1
- package/es/chat-engine/index.js +7 -6
- package/es/chat-engine/index.js.map +1 -1
- package/es/chat-filecard/index.js +1 -1
- package/es/chat-loading/index.js +1 -1
- package/es/chat-markdown/index.js +1 -1
- package/es/chat-message/index.js +1 -1
- package/es/chat-sender/index.js +1 -1
- package/es/chat-thinking/index.js +1 -1
- package/es/chatbot/index.js +1 -1
- package/es/index.js +5 -4
- package/es/index.js.map +1 -1
- package/es/style/index.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"device-key-manager.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/device-key-manager.ts"],"sourcesContent":["/**\n * OpenClaw 设备密钥管理器\n *\n * 负责生成/持久化 Ed25519 密钥对并签名 nonce,\n * 用于 OpenClaw Gateway 的设备身份认证(Device Pairing)。\n *\n * 认证流程:\n * 1. Gateway 发送 connect.challenge,包含 nonce\n * 2. 客户端用私钥签名 nonce\n * 3. 在 connect 请求的 params.device 中携带 { publicKey, signature, deviceId }\n * 4. Gateway 验签通过后完成认证(首次连接自动配对)\n *\n * 存储策略:\n * - 密钥对以 hex 格式持久化到 localStorage\n * - key: `openclaw_device_key_{clientId}`\n * - 密钥对在浏览器端生命周期内保持一致(设备标识不变)\n */\nimport { LoggerManager } from '../../utils/logger';\n\nconst logger = LoggerManager.getLogger();\n\n/** 设备密钥对(hex 编码) */\nexport interface DeviceKeyPair {\n publicKey: string;\n privateKey: string;\n deviceId: string;\n}\n\n/** connect 请求中的 device 字段 */\nexport interface DeviceIdentity {\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\n// ==================== 工具函数 ====================\n\n/** 字节数组转 hex 字符串 */\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\n/** hex 字符串转字节数组 */\nfunction hexToBytes(hex: string): Uint8Array {\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);\n }\n return bytes;\n}\n\n/** 从公钥派生设备 ID(取公钥前 16 字符作为设备 ID) */\nfunction deriveDeviceId(publicKeyHex: string): string {\n return `device_${publicKeyHex.substring(0, 16)}`;\n}\n\n/** 生成 localStorage key */\nfunction getStorageKey(clientId: string): string {\n return `openclaw_device_key_${clientId}`;\n}\n\n// ==================== Web Crypto API 实现 ====================\n\n/**\n * 检测浏览器是否支持 Ed25519\n *\n * Ed25519 在 Web Crypto API 中的支持情况:\n * - Chrome 113+ / Edge 113+\n * - Firefox(尚未支持)\n * - Safari 17+\n *\n * 对于不支持的浏览器,退回到 HMAC-SHA256 方案\n */\nasync function isEd25519Supported(): Promise<boolean> {\n try {\n const keyPair = await crypto.subtle.generateKey('Ed25519', true, ['sign', 'verify']);\n return !!keyPair;\n } catch {\n return false;\n }\n}\n\n/**\n * 使用 Web Crypto API 生成 Ed25519 密钥对\n */\nasync function generateEd25519KeyPair(): Promise<DeviceKeyPair> {\n const keyPair = await crypto.subtle.generateKey('Ed25519', true, ['sign', 'verify']);\n\n // 导出原始格式的公钥和私钥\n const publicKeyRaw = await crypto.subtle.exportKey('raw', keyPair.publicKey);\n const privateKeyPkcs8 = await crypto.subtle.exportKey('pkcs8', keyPair.privateKey);\n\n const publicKeyHex = bytesToHex(new Uint8Array(publicKeyRaw));\n const privateKeyHex = bytesToHex(new Uint8Array(privateKeyPkcs8));\n\n return {\n publicKey: publicKeyHex,\n privateKey: privateKeyHex,\n deviceId: deriveDeviceId(publicKeyHex),\n };\n}\n\n/**\n * 使用 Ed25519 私钥签名 nonce\n */\nasync function signWithEd25519(privateKeyHex: string, nonce: string): Promise<string> {\n const privateKeyBytes = hexToBytes(privateKeyHex);\n\n // 导入 PKCS8 格式的私钥\n const privateKey = await crypto.subtle.importKey(\n 'pkcs8',\n privateKeyBytes.buffer,\n 'Ed25519',\n false,\n ['sign'],\n );\n\n // 签名 nonce(UTF-8 编码)\n const encoder = new TextEncoder();\n const data = encoder.encode(nonce);\n const signature = await crypto.subtle.sign('Ed25519', privateKey, data);\n\n return bytesToHex(new Uint8Array(signature));\n}\n\n// ==================== HMAC-SHA256 降级方案 ====================\n\n/**\n * 使用 HMAC-SHA256 作为降级签名方案\n *\n * 当浏览器不支持 Ed25519 时,使用随机密钥 + HMAC-SHA256 代替。\n * 密钥不用于非对称验签,但保证设备标识的一致性和签名的不可伪造性。\n */\nasync function generateHmacKeyPair(): Promise<DeviceKeyPair> {\n // 生成 32 字节随机密钥作为 \"私钥\"\n const privateKeyBytes = crypto.getRandomValues(new Uint8Array(32));\n const privateKeyHex = bytesToHex(privateKeyBytes);\n\n // 用私钥的 SHA-256 哈希作为 \"公钥\"(设备标识)\n const encoder = new TextEncoder();\n const hashBuffer = await crypto.subtle.digest('SHA-256', encoder.encode(privateKeyHex));\n const publicKeyHex = bytesToHex(new Uint8Array(hashBuffer));\n\n return {\n publicKey: publicKeyHex,\n privateKey: privateKeyHex,\n deviceId: deriveDeviceId(publicKeyHex),\n };\n}\n\n/**\n * 使用 HMAC-SHA256 签名 nonce\n */\nasync function signWithHmac(privateKeyHex: string, nonce: string): Promise<string> {\n const encoder = new TextEncoder();\n const keyData = encoder.encode(privateKeyHex);\n\n const key = await crypto.subtle.importKey(\n 'raw',\n keyData,\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign'],\n );\n\n const signature = await crypto.subtle.sign('HMAC', key, encoder.encode(nonce));\n return bytesToHex(new Uint8Array(signature));\n}\n\n// ==================== DeviceKeyManager ====================\n\n/**\n * 设备密钥管理器\n *\n * 使用方式:\n * ```ts\n * const manager = new DeviceKeyManager('webchat');\n * await manager.initialize();\n *\n * // 收到 connect.challenge 时\n * const device = await manager.signChallenge(nonce);\n * // 将 device 放入 connect params\n * ```\n */\nexport class DeviceKeyManager {\n private keyPair: DeviceKeyPair | null = null;\n private clientId: string;\n private useEd25519 = false;\n private initialized = false;\n\n constructor(clientId: string = 'webchat') {\n this.clientId = clientId;\n }\n\n /**\n * 初始化密钥管理器\n *\n * - 尝试从 localStorage 恢复已有密钥对\n * - 如果没有,则生成新的密钥对并持久化\n * - 自动检测并选择 Ed25519 或 HMAC-SHA256\n */\n async initialize(): Promise<void> {\n if (this.initialized) return;\n\n // 检测 Ed25519 支持\n this.useEd25519 = await isEd25519Supported();\n logger.debug(`Device auth: Ed25519 ${this.useEd25519 ? 'supported' : 'not supported, using HMAC-SHA256 fallback'}`);\n\n // 尝试从 localStorage 恢复\n const stored = this.loadFromStorage();\n if (stored) {\n this.keyPair = stored;\n logger.debug(`Device auth: restored key pair for device ${stored.deviceId}`);\n } else {\n // 生成新密钥对\n this.keyPair = this.useEd25519\n ? await generateEd25519KeyPair()\n : await generateHmacKeyPair();\n\n this.saveToStorage(this.keyPair);\n logger.info(`Device auth: generated new key pair, deviceId=${this.keyPair.deviceId}`);\n }\n\n this.initialized = true;\n }\n\n /**\n * 签名 challenge nonce,返回 device 字段\n *\n * 在收到 connect.challenge 事件后调用,\n * 返回值直接放入 connect 请求的 params.device 中。\n */\n async signChallenge(nonce: string): Promise<DeviceIdentity> {\n if (!this.keyPair) {\n await this.initialize();\n }\n\n const signedAt = Math.floor(Date.now() / 1000);\n // 签名内容包含 nonce + signedAt,确保签名的时效性\n const signPayload = `${nonce}:${signedAt}`;\n\n const signature = this.useEd25519\n ? await signWithEd25519(this.keyPair!.privateKey, signPayload)\n : await signWithHmac(this.keyPair!.privateKey, signPayload);\n\n return {\n id: this.keyPair!.deviceId,\n publicKey: this.keyPair!.publicKey,\n signature,\n signedAt,\n nonce,\n };\n }\n\n /**\n * 获取设备 ID\n */\n getDeviceId(): string | null {\n return this.keyPair?.deviceId ?? null;\n }\n\n /**\n * 重置密钥(强制重新生成密钥对)\n */\n async reset(): Promise<void> {\n this.clearStorage();\n this.keyPair = null;\n this.initialized = false;\n await this.initialize();\n }\n\n // ==================== 存储相关 ====================\n\n private loadFromStorage(): DeviceKeyPair | null {\n if (typeof window === 'undefined' || !window.localStorage) return null;\n\n try {\n const stored = window.localStorage.getItem(getStorageKey(this.clientId));\n if (!stored) return null;\n\n const parsed = JSON.parse(stored) as DeviceKeyPair;\n if (parsed.publicKey && parsed.privateKey && parsed.deviceId) {\n return parsed;\n }\n } catch (e) {\n logger.warn('Failed to load device key from storage:', e);\n }\n return null;\n }\n\n private saveToStorage(keyPair: DeviceKeyPair): void {\n if (typeof window === 'undefined' || !window.localStorage) return;\n\n try {\n window.localStorage.setItem(getStorageKey(this.clientId), JSON.stringify(keyPair));\n } catch (e) {\n logger.warn('Failed to save device key to storage:', e);\n }\n }\n\n private clearStorage(): void {\n if (typeof window === 'undefined' || !window.localStorage) return;\n\n try {\n window.localStorage.removeItem(getStorageKey(this.clientId));\n } catch {\n // ignore\n }\n }\n}\n"],"names":["logger","LoggerManager","getLogger","bytesToHex","bytes","Array","from","map","b","toString","padStart","join","hexToBytes","hex","Uint8Array","length","i","parseInt","substring","deriveDeviceId","publicKeyHex","concat","getStorageKey","clientId","isEd25519Supported","_isEd25519Supported","apply","arguments","_asyncToGenerator","_regeneratorRuntime","mark","_callee4","keyPair","_t3","wrap","_context4","prev","next","crypto","subtle","generateKey","sent","abrupt","stop","generateEd25519KeyPair","_generateEd25519KeyPair","_callee5","publicKeyRaw","privateKeyPkcs8","privateKeyHex","_context5","exportKey","publicKey","privateKey","deviceId","signWithEd25519","_x","_x2","_signWithEd","_callee6","nonce","privateKeyBytes","encoder","data","signature","_context6","importKey","buffer","TextEncoder","encode","sign","generateHmacKeyPair","_generateHmacKeyPair","_callee7","hashBuffer","_context7","getRandomValues","digest","signWithHmac","_x3","_x4","_signWithHmac","_callee8","keyData","key","_context8","name","hash","DeviceKeyManager","_classCallCheck","_defineProperty","_createClass","value","_initialize","_callee","stored","_t","_context","initialized","useEd25519","debug","loadFromStorage","saveToStorage","info","initialize","_signChallenge","_callee2","signedAt","signPayload","_t2","_context2","Math","floor","Date","now","id","signChallenge","getDeviceId","_this$keyPair$deviceI","_this$keyPair","_reset","_callee3","_context3","clearStorage","reset","window","localStorage","getItem","parsed","JSON","parse","e","warn","setItem","stringify","removeItem","_unused"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
2
|
+
* tdesign v1.1.0-alpha.17
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
@@ -150,6 +150,7 @@ var OpenClawEventMapper = /*#__PURE__*/function () {
|
|
|
150
150
|
data = payload.data,
|
|
151
151
|
runId = payload.runId;
|
|
152
152
|
this.currentRunId = runId || this.currentRunId;
|
|
153
|
+
console.log("[OpenClaw EventMapper] agent stream=\"".concat(stream, "\", data="), JSON.stringify(data).slice(0, 300));
|
|
153
154
|
switch (stream) {
|
|
154
155
|
case AgentStreamType.TOOL:
|
|
155
156
|
return this.handleToolStream(data);
|
|
@@ -1 +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 结构(经过对真实 Gateway 数据抓取确认):\n *\n * phase: 'start' (开始,包含完整 args):\n * {\n * phase: 'start',\n * name: 'read', // 工具名称(字段名是 name,不是 toolCallName)\n * toolCallId: 'read:0', // 工具调用 ID\n * args: { file_path: '...' }, // 完整参数对象(非 JSON 字符串,start 阶段就包含全部 args)\n * }\n *\n * phase: 'result' (结果):\n * {\n * phase: 'result',\n * name: 'read',\n * toolCallId: 'read:0',\n * meta: 'from ~/.openclaw/workspace/memory/2026-03-11.md', // 结果元信息\n * isError: true, // 是否出错\n * }\n *\n * 注意:\n * 1. 只有 start 和 result 两个 phase(没有 args 和 end 阶段)\n * 2. 字段名是 name 不是 toolCallName\n * 3. args 在 start 阶段就是完整对象,不需要增量拼接\n * 4. result 的具体内容通过 toolResult 角色的消息传递(在 chat final 中),\n * tool stream 的 result phase 只包含 meta 和 isError\n */\n private handleToolStream(data: AgentEventPayload['data']): EventMapResult {\n if (!data?.toolCallId) {\n return { content: null, isFinal: false, hasError: false };\n }\n\n // OpenClaw 使用 phase 字段(不是 state),工具名使用 name 字段(不是 toolCallName)\n const phase = (data.phase || data.state) as string;\n const toolCallId = data.toolCallId as string;\n const toolCallName = (data.name || data.toolCallName || 'unknown') as string;\n\n switch (phase) {\n case 'start':\n return this.handleToolCallStart(toolCallId, toolCallName, data);\n case 'result':\n return this.handleToolCallResult(toolCallId, data);\n case 'args':\n // 兼容 Mock Server 或其他 Gateway 实现可能使用的 args 增量阶段\n return this.handleToolCallArgs(toolCallId, data);\n case 'end':\n // 兼容可能的 end 阶段\n return this.handleToolCallEnd(toolCallId);\n default:\n // 兜底:如果没有 phase/state,尝试从 data 推断\n return this.handleToolCallGeneric(data);\n }\n }\n\n /**\n * 处理工具调用开始(phase: 'start')\n *\n * OpenClaw 实际行为:start 阶段就包含完整的 args 对象(不是 JSON 字符串)\n * 因此直接序列化 args 并创建 toolcall 内容\n */\n private handleToolCallStart(toolCallId: string, toolCallName: string, data: AgentEventPayload['data']): EventMapResult {\n // OpenClaw 的 args 在 start 阶段是完整对象,需要序列化为 JSON 字符串\n const rawArgs = data?.args;\n let argsStr = '';\n if (rawArgs !== undefined && rawArgs !== null) {\n argsStr = typeof rawArgs === 'string' ? rawArgs : JSON.stringify(rawArgs);\n }\n\n this.toolCallMap[toolCallId] = {\n eventType: 'TOOL_CALL_START',\n toolCallId,\n toolCallName: toolCallName || 'unknown',\n parentMessageId: (data?.parentMessageId as string) || '',\n args: argsStr,\n };\n\n // OpenClaw 的 start 阶段已包含完整 args,状态可以直接标记为 executing(streaming)\n return {\n content: createToolCallContent(this.toolCallMap[toolCallId], 'streaming', 'append'),\n isFinal: false,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n /**\n * 处理工具调用参数增量(兼容 args 增量阶段)\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 * 处理工具调用结果(phase: 'result')\n *\n * OpenClaw 实际行为:\n * - result phase 的 data 包含 meta(描述性信息)和 isError(是否出错)\n * - 工具调用的具体结果文本通过 chat final 中的 toolResult 角色消息传递\n * - 因此此处不一定有 content/result 文本,但应标记 toolcall 为 complete\n */\n private handleToolCallResult(toolCallId: string, data: AgentEventPayload['data']): EventMapResult {\n if (!this.toolCallMap[toolCallId]) {\n // 如果之前没有 start 事件,先创建 toolcall 记录\n const toolCallName = (data?.name || data?.toolCallName || 'unknown') as string;\n this.toolCallMap[toolCallId] = {\n eventType: 'TOOL_CALL_START',\n toolCallId,\n toolCallName,\n parentMessageId: '',\n args: '',\n };\n }\n\n // 从 data 中提取结果信息\n const resultContent = (data?.content as string) || (data?.result as string) || '';\n const meta = (data?.meta as string) || '';\n const isError = data?.isError as boolean;\n\n // 构建 result 文本:优先使用 content/result,其次使用 meta 描述\n const resultStr = resultContent || meta || '';\n\n this.toolCallMap[toolCallId] = updateToolCall(this.toolCallMap[toolCallId], {\n eventType: 'TOOL_CALL_RESULT',\n result: resultStr,\n ...(isError !== undefined ? { ext: { isError } } : {}),\n });\n\n this.toolCallEnded.add(toolCallId);\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 * 处理工具调用结束(兼容 end 阶段)\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 * 兜底处理工具调用数据(无 phase/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.name || data.toolCallName || 'unknown') 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/meta/isError,当作 result 更新\n if (data.content || data.result || data.meta || data.isError !== undefined) {\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.name as string) || (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","phase","toolCallName","name","handleToolCallStart","handleToolCallResult","handleToolCallArgs","handleToolCallEnd","handleToolCallGeneric","rawArgs","args","argsStr","JSON","stringify","toolCallMap","parentMessageId","createToolCallContent","currentArgs","newArgs","mergeStringContent","updateToolCall","resultContent","result","meta","isError","resultStr","_objectSpread","ext","toolCallEnded","add","suggestionContent","handleSuggestionToolCall","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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"}
|
|
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 console.log(`[OpenClaw EventMapper] agent stream=\"${stream}\", data=`, JSON.stringify(data).slice(0, 300));\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.LIFECYCLE:\n // case AgentStreamType.SYSTEM:\n // // lifecycle/system 流是 agent 生命周期事件,不包含文本内容,跳过\n // console.log(`[OpenClaw EventMapper] Skipping ${stream} stream event`);\n // return { content: null, isFinal: false, hasError: false };\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 结构(经过对真实 Gateway 数据抓取确认):\n *\n * phase: 'start' (开始,包含完整 args):\n * {\n * phase: 'start',\n * name: 'read', // 工具名称(字段名是 name,不是 toolCallName)\n * toolCallId: 'read:0', // 工具调用 ID\n * args: { file_path: '...' }, // 完整参数对象(非 JSON 字符串,start 阶段就包含全部 args)\n * }\n *\n * phase: 'result' (结果):\n * {\n * phase: 'result',\n * name: 'read',\n * toolCallId: 'read:0',\n * meta: 'from ~/.openclaw/workspace/memory/2026-03-11.md', // 结果元信息\n * isError: true, // 是否出错\n * }\n *\n * 注意:\n * 1. 只有 start 和 result 两个 phase(没有 args 和 end 阶段)\n * 2. 字段名是 name 不是 toolCallName\n * 3. args 在 start 阶段就是完整对象,不需要增量拼接\n * 4. result 的具体内容通过 toolResult 角色的消息传递(在 chat final 中),\n * tool stream 的 result phase 只包含 meta 和 isError\n */\n private handleToolStream(data: AgentEventPayload['data']): EventMapResult {\n if (!data?.toolCallId) {\n return { content: null, isFinal: false, hasError: false };\n }\n\n // OpenClaw 使用 phase 字段(不是 state),工具名使用 name 字段(不是 toolCallName)\n const phase = (data.phase || data.state) as string;\n const toolCallId = data.toolCallId as string;\n const toolCallName = (data.name || data.toolCallName || 'unknown') as string;\n\n switch (phase) {\n case 'start':\n return this.handleToolCallStart(toolCallId, toolCallName, data);\n case 'result':\n return this.handleToolCallResult(toolCallId, data);\n case 'args':\n // 兼容 Mock Server 或其他 Gateway 实现可能使用的 args 增量阶段\n return this.handleToolCallArgs(toolCallId, data);\n case 'end':\n // 兼容可能的 end 阶段\n return this.handleToolCallEnd(toolCallId);\n default:\n // 兜底:如果没有 phase/state,尝试从 data 推断\n return this.handleToolCallGeneric(data);\n }\n }\n\n /**\n * 处理工具调用开始(phase: 'start')\n *\n * OpenClaw 实际行为:start 阶段就包含完整的 args 对象(不是 JSON 字符串)\n * 因此直接序列化 args 并创建 toolcall 内容\n */\n private handleToolCallStart(toolCallId: string, toolCallName: string, data: AgentEventPayload['data']): EventMapResult {\n // OpenClaw 的 args 在 start 阶段是完整对象,需要序列化为 JSON 字符串\n const rawArgs = data?.args;\n let argsStr = '';\n if (rawArgs !== undefined && rawArgs !== null) {\n argsStr = typeof rawArgs === 'string' ? rawArgs : JSON.stringify(rawArgs);\n }\n\n this.toolCallMap[toolCallId] = {\n eventType: 'TOOL_CALL_START',\n toolCallId,\n toolCallName: toolCallName || 'unknown',\n parentMessageId: (data?.parentMessageId as string) || '',\n args: argsStr,\n };\n\n // OpenClaw 的 start 阶段已包含完整 args,状态可以直接标记为 executing(streaming)\n return {\n content: createToolCallContent(this.toolCallMap[toolCallId], 'streaming', 'append'),\n isFinal: false,\n hasError: false,\n runId: this.currentRunId || undefined,\n };\n }\n\n /**\n * 处理工具调用参数增量(兼容 args 增量阶段)\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 * 处理工具调用结果(phase: 'result')\n *\n * OpenClaw 实际行为:\n * - result phase 的 data 包含 meta(描述性信息)和 isError(是否出错)\n * - 工具调用的具体结果文本通过 chat final 中的 toolResult 角色消息传递\n * - 因此此处不一定有 content/result 文本,但应标记 toolcall 为 complete\n */\n private handleToolCallResult(toolCallId: string, data: AgentEventPayload['data']): EventMapResult {\n if (!this.toolCallMap[toolCallId]) {\n // 如果之前没有 start 事件,先创建 toolcall 记录\n const toolCallName = (data?.name || data?.toolCallName || 'unknown') as string;\n this.toolCallMap[toolCallId] = {\n eventType: 'TOOL_CALL_START',\n toolCallId,\n toolCallName,\n parentMessageId: '',\n args: '',\n };\n }\n\n // 从 data 中提取结果信息\n const resultContent = (data?.content as string) || (data?.result as string) || '';\n const meta = (data?.meta as string) || '';\n const isError = data?.isError as boolean;\n\n // 构建 result 文本:优先使用 content/result,其次使用 meta 描述\n const resultStr = resultContent || meta || '';\n\n this.toolCallMap[toolCallId] = updateToolCall(this.toolCallMap[toolCallId], {\n eventType: 'TOOL_CALL_RESULT',\n result: resultStr,\n ...(isError !== undefined ? { ext: { isError } } : {}),\n });\n\n this.toolCallEnded.add(toolCallId);\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 * 处理工具调用结束(兼容 end 阶段)\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 * 兜底处理工具调用数据(无 phase/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.name || data.toolCallName || 'unknown') 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/meta/isError,当作 result 更新\n if (data.content || data.result || data.meta || data.isError !== undefined) {\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.name as string) || (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","console","log","concat","JSON","stringify","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","phase","toolCallName","name","handleToolCallStart","handleToolCallResult","handleToolCallArgs","handleToolCallEnd","handleToolCallGeneric","rawArgs","args","argsStr","toolCallMap","parentMessageId","createToolCallContent","currentArgs","newArgs","mergeStringContent","updateToolCall","resultContent","result","meta","isError","resultStr","_objectSpread","ext","toolCallEnded","add","suggestionContent","handleSuggestionToolCall","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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"}
|
|
@@ -15,6 +15,7 @@ import { type ConvertHistoryOptions } from './history-converter';
|
|
|
15
15
|
export * from './types';
|
|
16
16
|
export { OpenClawEventMapper, type EventMapResult } from './event-mapper';
|
|
17
17
|
export { OpenClawRPCHandler, RPCError } from './rpc-handler';
|
|
18
|
+
export { DeviceKeyManager, type DeviceKeyPair, type DeviceIdentity } from './device-key-manager';
|
|
18
19
|
export { convertOpenClawHistory, convertOpenClawHistoryResponse, type OpenClawHistoryMessage, type OpenClawHistoryResponse, type ConvertHistoryOptions, } from './history-converter';
|
|
19
20
|
/**
|
|
20
21
|
* OpenClaw 适配器回调接口
|
|
@@ -69,11 +70,21 @@ export declare class OpenClawAdapter extends EventEmitter {
|
|
|
69
70
|
private callbacks;
|
|
70
71
|
private isStreaming;
|
|
71
72
|
private currentRequestParams;
|
|
73
|
+
private deviceKeyManager;
|
|
74
|
+
/** 动态传入的认证信息,用于 connect 握手(一次性使用) */
|
|
75
|
+
private pendingAuth;
|
|
72
76
|
constructor(config: OpenClawAdapterConfig);
|
|
73
77
|
/**
|
|
74
78
|
* 设置回调
|
|
75
79
|
*/
|
|
76
80
|
setCallbacks(callbacks: OpenClawAdapterCallbacks): void;
|
|
81
|
+
/**
|
|
82
|
+
* 设置连接认证信息(在 connect 之前调用)
|
|
83
|
+
*
|
|
84
|
+
* 传入的 auth 会在下一次 connect 握手时使用(一次性),
|
|
85
|
+
* 用于从 onRequest 动态获取 token 等认证信息。
|
|
86
|
+
*/
|
|
87
|
+
setConnectAuth(auth: Record<string, unknown>): void;
|
|
77
88
|
/**
|
|
78
89
|
* 连接到 OpenClaw Gateway
|
|
79
90
|
* 等待 WebSocket 连接建立并完成认证握手后才返回
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* tdesign v1.1.0-alpha.
|
|
2
|
+
* tdesign v1.1.0-alpha.17
|
|
3
3
|
* (c) 2026 tdesign
|
|
4
4
|
* @license MIT
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
|
|
7
8
|
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
8
9
|
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
9
10
|
import _createClass from '@babel/runtime/helpers/createClass';
|
|
@@ -26,6 +27,8 @@ export { AgentDataType, AgentStreamType, ChatEventState, OpenClawConnectionState
|
|
|
26
27
|
import { generateUUID, formatWebSocketUrl, parseFrame, getPlatform, getUserAgent, getLocale } from './utils.js';
|
|
27
28
|
import { convertOpenClawHistoryResponse, convertOpenClawHistory } from './history-converter.js';
|
|
28
29
|
export { convertOpenClawHistory, convertOpenClawHistoryResponse } from './history-converter.js';
|
|
30
|
+
import { DeviceKeyManager } from './device-key-manager.js';
|
|
31
|
+
export { DeviceKeyManager } from './device-key-manager.js';
|
|
29
32
|
import './types/index.js';
|
|
30
33
|
export { isEventFrame, isRequestFrame, isResponseFrame } from './types/messages.js';
|
|
31
34
|
import '../../server/errors.js';
|
|
@@ -40,9 +43,9 @@ import '../shared/activity-manager.js';
|
|
|
40
43
|
import '../agui/ActivityManager.js';
|
|
41
44
|
import '../../utils/index.js';
|
|
42
45
|
import '../../utils/immutable-patch.js';
|
|
43
|
-
import '@babel/runtime/helpers/objectWithoutProperties';
|
|
44
46
|
import '@babel/runtime/helpers/toArray';
|
|
45
47
|
|
|
48
|
+
var _excluded = ["auth"];
|
|
46
49
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
47
50
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
48
51
|
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
@@ -58,6 +61,8 @@ var OpenClawAdapter = /*#__PURE__*/function (_EventEmitter) {
|
|
|
58
61
|
_defineProperty(_this, "callbacks", {});
|
|
59
62
|
_defineProperty(_this, "isStreaming", false);
|
|
60
63
|
_defineProperty(_this, "currentRequestParams", null);
|
|
64
|
+
_defineProperty(_this, "deviceKeyManager", null);
|
|
65
|
+
_defineProperty(_this, "pendingAuth", null);
|
|
61
66
|
_this.adapterConfig = config;
|
|
62
67
|
_this.config = mergeOpenClawConfig(config);
|
|
63
68
|
_this.instanceId = generateUUID();
|
|
@@ -65,6 +70,9 @@ var OpenClawAdapter = /*#__PURE__*/function (_EventEmitter) {
|
|
|
65
70
|
timeout: config.timeout
|
|
66
71
|
});
|
|
67
72
|
_this.eventMapper = new OpenClawEventMapper();
|
|
73
|
+
if (_this.config.deviceAuth) {
|
|
74
|
+
_this.deviceKeyManager = new DeviceKeyManager(_this.config.client.id);
|
|
75
|
+
}
|
|
68
76
|
return _this;
|
|
69
77
|
}
|
|
70
78
|
_inherits(OpenClawAdapter, _EventEmitter);
|
|
@@ -73,6 +81,11 @@ var OpenClawAdapter = /*#__PURE__*/function (_EventEmitter) {
|
|
|
73
81
|
value: function setCallbacks(callbacks) {
|
|
74
82
|
this.callbacks = callbacks;
|
|
75
83
|
}
|
|
84
|
+
}, {
|
|
85
|
+
key: "setConnectAuth",
|
|
86
|
+
value: function setConnectAuth(auth) {
|
|
87
|
+
this.pendingAuth = auth;
|
|
88
|
+
}
|
|
76
89
|
}, {
|
|
77
90
|
key: "connect",
|
|
78
91
|
value: function () {
|
|
@@ -156,7 +169,7 @@ var OpenClawAdapter = /*#__PURE__*/function (_EventEmitter) {
|
|
|
156
169
|
key: "sendMessage",
|
|
157
170
|
value: function () {
|
|
158
171
|
var _sendMessage = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(params, requestParams) {
|
|
159
|
-
var chatParams, _this$callbacks$onSta, _this$callbacks, _this$callbacks$onErr, _this$callbacks2, _t;
|
|
172
|
+
var _ref, _auth, sendParams, chatParams, _this$callbacks$onSta, _this$callbacks, _this$callbacks$onErr, _this$callbacks2, _t;
|
|
160
173
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
161
174
|
while (1) switch (_context2.prev = _context2.next) {
|
|
162
175
|
case 0:
|
|
@@ -169,10 +182,11 @@ var OpenClawAdapter = /*#__PURE__*/function (_EventEmitter) {
|
|
|
169
182
|
this.currentRequestParams = params;
|
|
170
183
|
this.isStreaming = true;
|
|
171
184
|
this.eventMapper.reset();
|
|
185
|
+
_ref = requestParams || {}, _auth = _ref.auth, sendParams = _objectWithoutProperties(_ref, _excluded);
|
|
172
186
|
chatParams = _objectSpread({
|
|
173
187
|
message: params.prompt || "",
|
|
174
188
|
idempotencyKey: generateUUID()
|
|
175
|
-
},
|
|
189
|
+
}, sendParams);
|
|
176
190
|
_context2.prev = 2;
|
|
177
191
|
(_this$callbacks$onSta = (_this$callbacks = this.callbacks).onStart) === null || _this$callbacks$onSta === void 0 || _this$callbacks$onSta.call(_this$callbacks);
|
|
178
192
|
_context2.next = 3;
|
|
@@ -367,13 +381,15 @@ var OpenClawAdapter = /*#__PURE__*/function (_EventEmitter) {
|
|
|
367
381
|
});
|
|
368
382
|
this.wsClient.on("error", function (error) {
|
|
369
383
|
var _this4$callbacks$onEr, _this4$callbacks;
|
|
370
|
-
_this4.logger.error("OpenClaw WebSocket error:", error);
|
|
384
|
+
_this4.logger.error("[OpenClaw] WebSocket error:", (error === null || error === void 0 ? void 0 : error.message) || error);
|
|
371
385
|
(_this4$callbacks$onEr = (_this4$callbacks = _this4.callbacks).onError) === null || _this4$callbacks$onEr === void 0 || _this4$callbacks$onEr.call(_this4$callbacks, error);
|
|
372
386
|
});
|
|
373
387
|
this.wsClient.on("complete", function (isAborted) {
|
|
374
388
|
var _this4$callbacks$onDi, _this4$callbacks3;
|
|
389
|
+
console.warn("[OpenClaw] WebSocket complete event! isAborted=".concat(isAborted, ", isStreaming=").concat(_this4.isStreaming));
|
|
375
390
|
if (_this4.isStreaming) {
|
|
376
391
|
var _this4$callbacks$onCo, _this4$callbacks2;
|
|
392
|
+
console.warn("[OpenClaw] \u26A0\uFE0F WebSocket closed while still streaming! This caused onComplete to fire prematurely.");
|
|
377
393
|
_this4.isStreaming = false;
|
|
378
394
|
(_this4$callbacks$onCo = (_this4$callbacks2 = _this4.callbacks).onComplete) === null || _this4$callbacks$onCo === void 0 || _this4$callbacks$onCo.call(_this4$callbacks2, isAborted, _this4.currentRequestParams || void 0);
|
|
379
395
|
}
|
|
@@ -389,11 +405,14 @@ var OpenClawAdapter = /*#__PURE__*/function (_EventEmitter) {
|
|
|
389
405
|
}, {
|
|
390
406
|
key: "handleWebSocketMessage",
|
|
391
407
|
value: function handleWebSocketMessage(data) {
|
|
408
|
+
var rawStr = typeof data === "string" ? data : JSON.stringify(data);
|
|
409
|
+
console.log("[OpenClaw RAW] ".concat(rawStr.slice(0, 800)));
|
|
392
410
|
var frame = parseFrame(data);
|
|
393
411
|
if (!frame) {
|
|
394
|
-
|
|
412
|
+
console.warn("[OpenClaw] Failed to parse frame, raw data:", rawStr.slice(0, 500));
|
|
395
413
|
return;
|
|
396
414
|
}
|
|
415
|
+
console.log("[OpenClaw Frame] type=\"".concat(frame.type, "\", event=").concat(frame.event, ", isStreaming=").concat(this.isStreaming));
|
|
397
416
|
if (frame.type === "res") {
|
|
398
417
|
this.rpcHandler.handleResponse(frame);
|
|
399
418
|
return;
|
|
@@ -411,8 +430,14 @@ var OpenClawAdapter = /*#__PURE__*/function (_EventEmitter) {
|
|
|
411
430
|
this.handleConnectChallenge(payload);
|
|
412
431
|
return;
|
|
413
432
|
}
|
|
433
|
+
if (event === OpenClawEventType.HEALTH || event === OpenClawEventType.HEARTBEAT || event === "tick") {
|
|
434
|
+
console.log("[OpenClaw] Skipping non-business event: \"".concat(event, "\""));
|
|
435
|
+
return;
|
|
436
|
+
}
|
|
437
|
+
console.log("[OpenClaw Event] event=\"".concat(event, "\", isStreaming=").concat(this.isStreaming, ", payload="), JSON.stringify(payload).slice(0, 500));
|
|
414
438
|
if (this.isStreaming) {
|
|
415
439
|
var result = this.eventMapper.mapEvent(frame);
|
|
440
|
+
console.log("[OpenClaw mapResult] content=".concat(result.content ? JSON.stringify(result.content).slice(0, 200) : "null", ", isFinal=").concat(result.isFinal, ", hasError=").concat(result.hasError));
|
|
416
441
|
if (result.content) {
|
|
417
442
|
var _this$callbacks$onMes, _this$callbacks7;
|
|
418
443
|
(_this$callbacks$onMes = (_this$callbacks7 = this.callbacks).onMessage) === null || _this$callbacks$onMes === void 0 || _this$callbacks$onMes.call(_this$callbacks7, result.content);
|
|
@@ -427,13 +452,15 @@ var OpenClawAdapter = /*#__PURE__*/function (_EventEmitter) {
|
|
|
427
452
|
var _this$callbacks$onErr3, _this$callbacks9;
|
|
428
453
|
(_this$callbacks$onErr3 = (_this$callbacks9 = this.callbacks).onError) === null || _this$callbacks$onErr3 === void 0 || _this$callbacks$onErr3.call(_this$callbacks9, new Error(result.errorMessage));
|
|
429
454
|
}
|
|
455
|
+
} else {
|
|
456
|
+
console.warn("[OpenClaw] Received event \"".concat(event, "\" but isStreaming=false, event may be lost. Payload:"), JSON.stringify(payload).slice(0, 300));
|
|
430
457
|
}
|
|
431
458
|
}
|
|
432
459
|
}, {
|
|
433
460
|
key: "handleConnectChallenge",
|
|
434
461
|
value: function () {
|
|
435
462
|
var _handleConnectChallenge = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee7(payload) {
|
|
436
|
-
var connectParams, _this$callbacks$onCon, _this$callbacks0, response, connectPayload, _this$callbacks$onHis, _this$callbacks1, historyResponse, convertedMessages, _this$callbacks$onErr4, _this$callbacks10, _t2;
|
|
463
|
+
var connectParams, auth, deviceIdentity, _this$callbacks$onCon, _this$callbacks0, response, connectPayload, _this$callbacks$onHis, _this$callbacks1, historyResponse, convertedMessages, _this$callbacks$onErr4, _this$callbacks10, _t2, _t3;
|
|
437
464
|
return _regeneratorRuntime.wrap(function (_context7) {
|
|
438
465
|
while (1) switch (_context7.prev = _context7.next) {
|
|
439
466
|
case 0:
|
|
@@ -454,10 +481,36 @@ var OpenClawAdapter = /*#__PURE__*/function (_EventEmitter) {
|
|
|
454
481
|
userAgent: getUserAgent(),
|
|
455
482
|
locale: getLocale()
|
|
456
483
|
};
|
|
484
|
+
auth = this.pendingAuth || (Object.keys(this.config.auth).length > 0 ? this.config.auth : void 0);
|
|
485
|
+
if (auth) {
|
|
486
|
+
connectParams.auth = auth;
|
|
487
|
+
}
|
|
488
|
+
this.pendingAuth = null;
|
|
489
|
+
if (!(this.deviceKeyManager && payload.nonce)) {
|
|
490
|
+
_context7.next = 5;
|
|
491
|
+
break;
|
|
492
|
+
}
|
|
457
493
|
_context7.prev = 1;
|
|
458
494
|
_context7.next = 2;
|
|
459
|
-
return this.
|
|
495
|
+
return this.deviceKeyManager.initialize();
|
|
460
496
|
case 2:
|
|
497
|
+
_context7.next = 3;
|
|
498
|
+
return this.deviceKeyManager.signChallenge(payload.nonce);
|
|
499
|
+
case 3:
|
|
500
|
+
deviceIdentity = _context7.sent;
|
|
501
|
+
connectParams.device = deviceIdentity;
|
|
502
|
+
this.logger.debug("Device auth: signed nonce, deviceId=".concat(deviceIdentity.id));
|
|
503
|
+
_context7.next = 5;
|
|
504
|
+
break;
|
|
505
|
+
case 4:
|
|
506
|
+
_context7.prev = 4;
|
|
507
|
+
_t2 = _context7["catch"](1);
|
|
508
|
+
this.logger.warn("Device auth: failed to sign challenge, connecting without device identity:", _t2);
|
|
509
|
+
case 5:
|
|
510
|
+
_context7.prev = 5;
|
|
511
|
+
_context7.next = 6;
|
|
512
|
+
return this.rpcHandler.connect(connectParams);
|
|
513
|
+
case 6:
|
|
461
514
|
response = _context7.sent;
|
|
462
515
|
this.connectionState = OpenClawConnectionState.AUTHENTICATED;
|
|
463
516
|
this.logger.info("OpenClaw authenticated successfully:", response);
|
|
@@ -480,20 +533,20 @@ var OpenClawAdapter = /*#__PURE__*/function (_EventEmitter) {
|
|
|
480
533
|
this.logger.warn("Failed to convert history messages from connect response:", historyError);
|
|
481
534
|
}
|
|
482
535
|
}
|
|
483
|
-
_context7.next =
|
|
536
|
+
_context7.next = 8;
|
|
484
537
|
break;
|
|
485
|
-
case
|
|
486
|
-
_context7.prev =
|
|
487
|
-
|
|
538
|
+
case 7:
|
|
539
|
+
_context7.prev = 7;
|
|
540
|
+
_t3 = _context7["catch"](5);
|
|
488
541
|
this.connectionState = OpenClawConnectionState.ERROR;
|
|
489
|
-
this.logger.error("OpenClaw authentication failed:",
|
|
490
|
-
(_this$callbacks$onErr4 = (_this$callbacks10 = this.callbacks).onError) === null || _this$callbacks$onErr4 === void 0 || _this$callbacks$onErr4.call(_this$callbacks10,
|
|
491
|
-
this.emit("error",
|
|
492
|
-
case
|
|
542
|
+
this.logger.error("OpenClaw authentication failed:", _t3);
|
|
543
|
+
(_this$callbacks$onErr4 = (_this$callbacks10 = this.callbacks).onError) === null || _this$callbacks$onErr4 === void 0 || _this$callbacks$onErr4.call(_this$callbacks10, _t3);
|
|
544
|
+
this.emit("error", _t3);
|
|
545
|
+
case 8:
|
|
493
546
|
case "end":
|
|
494
547
|
return _context7.stop();
|
|
495
548
|
}
|
|
496
|
-
}, _callee7, this, [[1,
|
|
549
|
+
}, _callee7, this, [[1, 4], [5, 7]]);
|
|
497
550
|
}));
|
|
498
551
|
function handleConnectChallenge(_x6) {
|
|
499
552
|
return _handleConnectChallenge.apply(this, arguments);
|