@tdesign-react/chat 1.1.0-alpha.15 → 1.1.0-alpha.16

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 (134) hide show
  1. package/es/_chunks/dep-13265eca.js +1247 -0
  2. package/es/_chunks/dep-13265eca.js.map +1 -0
  3. package/es/_chunks/dep-2bfe72cb.js +438 -0
  4. package/es/_chunks/dep-2bfe72cb.js.map +1 -0
  5. package/es/_chunks/dep-4932f9b9.js +169 -0
  6. package/es/_chunks/dep-4932f9b9.js.map +1 -0
  7. package/es/_chunks/dep-dfe91b1f.js +438 -0
  8. package/es/_chunks/dep-dfe91b1f.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 +4 -4
  18. package/es/chat-engine/components/json-render/catalog/atomic/button.js +1 -1
  19. package/es/chat-engine/components/json-render/catalog/atomic/card.js +1 -1
  20. package/es/chat-engine/components/json-render/catalog/atomic/input.js +4 -4
  21. package/es/chat-engine/components/json-render/catalog/atomic/layout.js +1 -1
  22. package/es/chat-engine/components/json-render/catalog/atomic/text.js +1 -1
  23. package/es/chat-engine/components/json-render/catalog/catalog-to-prompt.js +1 -1
  24. package/es/chat-engine/components/json-render/contexts/actions.js +2 -2
  25. package/es/chat-engine/components/json-render/contexts/data.js +2 -2
  26. package/es/chat-engine/components/json-render/contexts/index.js +2 -2
  27. package/es/chat-engine/components/json-render/contexts/store.js +1 -1
  28. package/es/chat-engine/components/json-render/contexts/tree.js +1 -1
  29. package/es/chat-engine/components/json-render/contexts/validation.js +2 -2
  30. package/es/chat-engine/components/json-render/contexts/visibility.js +2 -2
  31. package/es/chat-engine/components/json-render/index.js +4 -4
  32. package/es/chat-engine/components/json-render/registry/a2ui-binding.js +4 -4
  33. package/es/chat-engine/components/json-render/registry/a2ui-registry.js +4 -4
  34. package/es/chat-engine/components/json-render/registry/config.js +4 -4
  35. package/es/chat-engine/components/json-render/registry/index.js +4 -4
  36. package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js +3 -3
  37. package/es/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.js +3 -3
  38. package/es/chat-engine/components/json-render/renderer/JsonUIRenderer.js +2 -2
  39. package/es/chat-engine/components/json-render/renderer/_index.js +2 -2
  40. package/es/chat-engine/components/json-render/types.js +1 -1
  41. package/es/chat-engine/components/provider/agent-state.js +2 -2
  42. package/es/chat-engine/components/shared/ComponentErrorBoundary.js +1 -1
  43. package/es/chat-engine/components/shared/createRegistry.js +1 -1
  44. package/es/chat-engine/components/shared/index.js +1 -1
  45. package/es/chat-engine/components/shared/useRegistrationListener.js +1 -1
  46. package/es/chat-engine/components/toolcall/index.js +2 -2
  47. package/es/chat-engine/components/toolcall/registry.js +1 -1
  48. package/es/chat-engine/components/toolcall/render.js +2 -2
  49. package/es/chat-engine/components/toolcall/types.js +1 -1
  50. package/es/chat-engine/core/adapters/a2ui/index.js +1 -1
  51. package/es/chat-engine/core/adapters/a2ui/processor/A2uiMessageProcessor.js +1 -1
  52. package/es/chat-engine/core/adapters/a2ui/processor/ComponentTree.js +1 -1
  53. package/es/chat-engine/core/adapters/a2ui/processor/DataStore.js +1 -1
  54. package/es/chat-engine/core/adapters/a2ui/processor/PathResolver.js +1 -1
  55. package/es/chat-engine/core/adapters/a2ui/types/index.js +1 -1
  56. package/es/chat-engine/core/adapters/a2ui/types/types.js +1 -1
  57. package/es/chat-engine/core/adapters/a2ui/utils/binding.js +1 -1
  58. package/es/chat-engine/core/adapters/a2ui/utils/index.js +1 -1
  59. package/es/chat-engine/core/adapters/a2ui/utils/validation.js +1 -1
  60. package/es/chat-engine/core/adapters/agui/ActivityManager.js +1 -1
  61. package/es/chat-engine/core/adapters/agui/StateManager.js +1 -1
  62. package/es/chat-engine/core/adapters/agui/event-mapper.js +1 -1
  63. package/es/chat-engine/core/adapters/agui/index.js +1 -1
  64. package/es/chat-engine/core/adapters/agui/types/events.js +1 -1
  65. package/es/chat-engine/core/adapters/agui/types/index.js +1 -1
  66. package/es/chat-engine/core/adapters/agui/utils.js +1 -1
  67. package/es/chat-engine/core/adapters/index.js +1 -1
  68. package/es/chat-engine/core/adapters/json-render/SurfaceStateManager.js +1 -1
  69. package/es/chat-engine/core/adapters/json-render/a2ui-to-jsonrender.js +1 -1
  70. package/es/chat-engine/core/adapters/json-render/engine.js +1 -1
  71. package/es/chat-engine/core/adapters/json-render/index.js +1 -1
  72. package/es/chat-engine/core/adapters/json-render/types/a2ui.js +1 -1
  73. package/es/chat-engine/core/adapters/json-render/types/core.js +1 -1
  74. package/es/chat-engine/core/adapters/json-render/types/index.js +1 -1
  75. package/es/chat-engine/core/adapters/openclaw/event-mapper.js +1 -1
  76. package/es/chat-engine/core/adapters/openclaw/index.js +15 -42
  77. package/es/chat-engine/core/adapters/openclaw/index.js.map +1 -1
  78. package/es/chat-engine/core/adapters/openclaw/rpc-handler.js +1 -1
  79. package/es/chat-engine/core/adapters/openclaw/types/config.d.ts +2 -20
  80. package/es/chat-engine/core/adapters/openclaw/types/config.js +3 -5
  81. package/es/chat-engine/core/adapters/openclaw/types/config.js.map +1 -1
  82. package/es/chat-engine/core/adapters/openclaw/types/events.js +1 -1
  83. package/es/chat-engine/core/adapters/openclaw/types/index.js +1 -1
  84. package/es/chat-engine/core/adapters/openclaw/types/messages.d.ts +0 -13
  85. package/es/chat-engine/core/adapters/openclaw/types/messages.js +1 -1
  86. package/es/chat-engine/core/adapters/openclaw/types/messages.js.map +1 -1
  87. package/es/chat-engine/core/adapters/openclaw/utils.d.ts +0 -26
  88. package/es/chat-engine/core/adapters/openclaw/utils.js +2 -93
  89. package/es/chat-engine/core/adapters/openclaw/utils.js.map +1 -1
  90. package/es/chat-engine/core/adapters/shared/activity-manager.js +1 -1
  91. package/es/chat-engine/core/adapters/shared/content-factory.js +1 -1
  92. package/es/chat-engine/core/adapters/shared/index.js +1 -1
  93. package/es/chat-engine/core/adapters/shared/merge-utils.js +1 -1
  94. package/es/chat-engine/core/event-bus/ChatEventBus.js +1 -1
  95. package/es/chat-engine/core/event-bus/index.js +1 -1
  96. package/es/chat-engine/core/event-bus/types.js +1 -1
  97. package/es/chat-engine/core/index.js +2 -2
  98. package/es/chat-engine/core/processor/index.js +1 -1
  99. package/es/chat-engine/core/server/batch-client.js +1 -1
  100. package/es/chat-engine/core/server/connection-manager.js +1 -1
  101. package/es/chat-engine/core/server/errors.js +1 -1
  102. package/es/chat-engine/core/server/index.js +1 -1
  103. package/es/chat-engine/core/server/llm-service.js +1 -1
  104. package/es/chat-engine/core/server/sse-client.js +1 -1
  105. package/es/chat-engine/core/server/sse-parser.js +1 -1
  106. package/es/chat-engine/core/server/types.js +1 -1
  107. package/es/chat-engine/core/server/websocket-client.js +1 -1
  108. package/es/chat-engine/core/store/message.js +2 -2
  109. package/es/chat-engine/core/store/model.js +2 -2
  110. package/es/chat-engine/core/store/reactiveState.js +2 -2
  111. package/es/chat-engine/core/type.js +1 -1
  112. package/es/chat-engine/core/utils/eventEmitter.js +1 -1
  113. package/es/chat-engine/core/utils/immutable-patch.js +1 -1
  114. package/es/chat-engine/core/utils/index.js +1 -1
  115. package/es/chat-engine/core/utils/json-patch/helpers.js +1 -1
  116. package/es/chat-engine/core/utils/json-patch/index.js +1 -1
  117. package/es/chat-engine/core/utils/logger.js +1 -1
  118. package/es/chat-engine/core/utils/performance.js +1 -1
  119. package/es/chat-engine/hooks/index.js +2 -2
  120. package/es/chat-engine/hooks/useAgentActivity.js +1 -1
  121. package/es/chat-engine/hooks/useAgentState.js +2 -2
  122. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  123. package/es/chat-engine/hooks/useChat.js +2 -2
  124. package/es/chat-engine/index.js +4 -4
  125. package/es/chat-filecard/index.js +1 -1
  126. package/es/chat-loading/index.js +1 -1
  127. package/es/chat-markdown/index.js +1 -1
  128. package/es/chat-message/index.js +1 -1
  129. package/es/chat-sender/index.js +1 -1
  130. package/es/chat-thinking/index.js +1 -1
  131. package/es/chatbot/index.js +1 -1
  132. package/es/index.js +4 -4
  133. package/es/style/index.js +1 -1
  134. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -23,7 +23,7 @@ import { mergeOpenClawConfig } from './types/config.js';
23
23
  export { DEFAULT_OPENCLAW_CONFIG, mergeOpenClawConfig } from './types/config.js';
24
24
  import { OpenClawConnectionState, OpenClawEventType } from './types/events.js';
25
25
  export { AgentDataType, AgentStreamType, ChatEventState, OpenClawConnectionState, OpenClawEventType, OpenClawMethod } from './types/events.js';
26
- import { generateUUID, formatWebSocketUrl, parseFrame, buildDeviceSignature, getPlatform, getUserAgent, getLocale } from './utils.js';
26
+ import { generateUUID, formatWebSocketUrl, parseFrame, getPlatform, getUserAgent, getLocale } from './utils.js';
27
27
  import './types/index.js';
28
28
  export { isEventFrame, isRequestFrame, isResponseFrame } from './types/messages.js';
29
29
  import '../../server/errors.js';
@@ -398,9 +398,9 @@ var OpenClawAdapter = /*#__PURE__*/function (_EventEmitter) {
398
398
  }, {
399
399
  key: "handleConnectChallenge",
400
400
  value: function () {
401
- var _handleConnectChallenge = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(payload) {
401
+ var _handleConnectChallenge = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(_payload) {
402
402
  var _this$config$auth;
403
- var connectParams, nonce, _this$callbacks$onCon, _this$callbacks0, response, _this$callbacks$onErr4, _this$callbacks1, _t2, _t3;
403
+ var connectParams, _this$callbacks$onCon, _this$callbacks0, response, _this$callbacks$onErr4, _this$callbacks1, _t2;
404
404
  return _regeneratorRuntime.wrap(function (_context6) {
405
405
  while (1) switch (_context6.prev = _context6.next) {
406
406
  case 0:
@@ -424,56 +424,29 @@ var OpenClawAdapter = /*#__PURE__*/function (_EventEmitter) {
424
424
  userAgent: getUserAgent(),
425
425
  locale: getLocale()
426
426
  });
427
- if (!this.config.device) {
428
- _context6.next = 6;
429
- break;
430
- }
431
427
  _context6.prev = 1;
432
- nonce = payload.nonce;
433
- if (nonce) {
434
- _context6.next = 2;
435
- break;
436
- }
437
- this.logger.warn("connect.challenge payload missing nonce, skipping device signature");
438
- _context6.next = 4;
439
- break;
440
- case 2:
441
- _context6.next = 3;
442
- return buildDeviceSignature(this.config.device, nonce);
443
- case 3:
444
- connectParams.device = _context6.sent;
445
- this.logger.debug("Device signature built successfully for device:", this.config.device.id);
446
- case 4:
447
- _context6.next = 6;
448
- break;
449
- case 5:
450
- _context6.prev = 5;
451
- _t2 = _context6["catch"](1);
452
- this.logger.error("Failed to build device signature:", _t2);
453
- case 6:
454
- _context6.prev = 6;
455
- _context6.next = 7;
428
+ _context6.next = 2;
456
429
  return this.rpcHandler.connect(connectParams);
457
- case 7:
430
+ case 2:
458
431
  response = _context6.sent;
459
432
  this.connectionState = OpenClawConnectionState.AUTHENTICATED;
460
433
  this.logger.info("OpenClaw authenticated successfully:", response);
461
434
  (_this$callbacks$onCon = (_this$callbacks0 = this.callbacks).onConnected) === null || _this$callbacks$onCon === void 0 || _this$callbacks$onCon.call(_this$callbacks0);
462
435
  this.emit("connected", response);
463
- _context6.next = 9;
436
+ _context6.next = 4;
464
437
  break;
465
- case 8:
466
- _context6.prev = 8;
467
- _t3 = _context6["catch"](6);
438
+ case 3:
439
+ _context6.prev = 3;
440
+ _t2 = _context6["catch"](1);
468
441
  this.connectionState = OpenClawConnectionState.ERROR;
469
- this.logger.error("OpenClaw authentication failed:", _t3);
470
- (_this$callbacks$onErr4 = (_this$callbacks1 = this.callbacks).onError) === null || _this$callbacks$onErr4 === void 0 || _this$callbacks$onErr4.call(_this$callbacks1, _t3);
471
- this.emit("error", _t3);
472
- case 9:
442
+ this.logger.error("OpenClaw authentication failed:", _t2);
443
+ (_this$callbacks$onErr4 = (_this$callbacks1 = this.callbacks).onError) === null || _this$callbacks$onErr4 === void 0 || _this$callbacks$onErr4.call(_this$callbacks1, _t2);
444
+ this.emit("error", _t2);
445
+ case 4:
473
446
  case "end":
474
447
  return _context6.stop();
475
448
  }
476
- }, _callee6, this, [[1, 5], [6, 8]]);
449
+ }, _callee6, this, [[1, 3]]);
477
450
  }));
478
451
  function handleConnectChallenge(_x4) {
479
452
  return _handleConnectChallenge.apply(this, arguments);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/index.ts"],"sourcesContent":["/**\n * OpenClaw 协议适配器\n *\n * 功能:\n * 1. 管理 WebSocket 连接生命周期\n * 2. 处理 OpenClaw 协议的握手和认证\n * 3. 将 OpenClaw 事件转换为 ChatEngine 统一的消息格式\n * 4. 提供与 AGUIAdapter 相似的接口,便于 ChatEngine 统一调度\n */\nimport EventEmitter from '../../utils/eventEmitter';\nimport { LoggerManager } from '../../utils/logger';\nimport { WebSocketClient, type WebSocketClientConfig, WebSocketConnectionState } from '../../server/websocket-client';\nimport type { AIMessageContent, ChatRequestParams, SSEChunkData } from '../../type';\nimport { OpenClawEventMapper, type EventMapResult } from './event-mapper';\nimport { OpenClawRPCHandler, RPCError } from './rpc-handler';\nimport type {\n OpenClawConfig,\n OpenClawFrame,\n OpenClawEventFrame,\n OpenClawResponseFrame,\n ConnectParams,\n ConnectChallengePayload,\n} from './types';\nimport { mergeOpenClawConfig, type MergedOpenClawConfig } from './types/config';\nimport { OpenClawEventType, OpenClawConnectionState } from './types/events';\nimport {\n generateUUID,\n parseFrame,\n getPlatform,\n getUserAgent,\n getLocale,\n formatWebSocketUrl,\n buildDeviceSignature,\n} from './utils';\n\n// 重新导出类型\nexport * from './types';\nexport { OpenClawEventMapper, type EventMapResult } from './event-mapper';\nexport { OpenClawRPCHandler, RPCError } from './rpc-handler';\n\n/**\n * OpenClaw 适配器回调接口\n */\nexport interface OpenClawAdapterCallbacks {\n /** 连接成功 */\n onConnected?: () => void;\n /** 连接断开 */\n onDisconnected?: (reason?: string) => void;\n /** 消息开始 */\n onStart?: () => void;\n /** 消息完成 */\n onComplete?: (isAborted: boolean, params?: ChatRequestParams) => void;\n /** 错误发生 */\n onError?: (error: Error) => void;\n /** 消息内容更新 */\n onMessage?: (content: AIMessageContent | AIMessageContent[]) => void;\n}\n\n/**\n * OpenClaw 适配器配置\n */\nexport interface OpenClawAdapterConfig extends OpenClawConfig {\n /** WebSocket 端点 */\n endpoint: string;\n /** 请求超时(毫秒) */\n timeout?: number;\n /** 最大重试次数 */\n maxRetries?: number;\n /** 重试间隔(毫秒) */\n retryInterval?: number;\n}\n\n/**\n * OpenClaw 协议适配器\n */\nexport class OpenClawAdapter extends EventEmitter {\n private wsClient: WebSocketClient | null = null;\n\n private rpcHandler: OpenClawRPCHandler;\n\n private eventMapper: OpenClawEventMapper;\n\n private config: MergedOpenClawConfig;\n\n private adapterConfig: OpenClawAdapterConfig;\n\n private connectionState = OpenClawConnectionState.DISCONNECTED;\n\n private instanceId: string;\n\n private logger = LoggerManager.getLogger();\n\n private callbacks: OpenClawAdapterCallbacks = {};\n\n private isStreaming = false;\n\n private currentRequestParams: ChatRequestParams | null = null;\n\n constructor(config: OpenClawAdapterConfig) {\n super();\n this.adapterConfig = config;\n this.config = mergeOpenClawConfig(config);\n this.instanceId = generateUUID();\n this.rpcHandler = new OpenClawRPCHandler({ timeout: config.timeout });\n this.eventMapper = new OpenClawEventMapper();\n }\n\n /**\n * 设置回调\n */\n setCallbacks(callbacks: OpenClawAdapterCallbacks): void {\n this.callbacks = callbacks;\n }\n\n /**\n * 连接到 OpenClaw Gateway\n * 等待 WebSocket 连接建立并完成认证握手后才返回\n */\n async connect(): Promise<void> {\n if (this.connectionState === OpenClawConnectionState.AUTHENTICATED) {\n return;\n }\n\n this.connectionState = OpenClawConnectionState.CONNECTING;\n\n const url = formatWebSocketUrl(this.adapterConfig.endpoint);\n this.wsClient = new WebSocketClient(url);\n\n // 设置 RPC 发送函数\n this.rpcHandler.setSendFunction((frame) => {\n this.wsClient?.send(frame);\n });\n\n // 绑定事件处理\n this.setupEventHandlers();\n\n // 连接 WebSocket\n const wsConfig: WebSocketClientConfig = {\n timeout: this.adapterConfig.timeout,\n maxRetries: this.adapterConfig.maxRetries,\n retryInterval: this.adapterConfig.retryInterval,\n heartbeatInterval: this.config.heartbeatInterval,\n };\n\n await this.wsClient.connect(wsConfig);\n\n // 等待认证完成(connect.challenge 握手)\n await this.waitForAuthentication();\n }\n\n /**\n * 等待认证完成\n * WebSocket 连接建立后,服务器会发送 connect.challenge 事件,\n * 适配器会自动回复 connect 请求完成握手。\n * 此方法等待整个握手流程完成后再返回。\n */\n private waitForAuthentication(): Promise<void> {\n // 如果已经认证,直接返回\n if (this.connectionState === OpenClawConnectionState.AUTHENTICATED) {\n return Promise.resolve();\n }\n\n const timeout = this.adapterConfig.timeout || 30000;\n\n return new Promise<void>((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n this.off('connected', onConnected);\n this.off('error', onError);\n };\n\n const onConnected = () => {\n cleanup();\n resolve();\n };\n\n const onError = (error: Error) => {\n cleanup();\n reject(error);\n };\n\n this.once('connected', onConnected);\n this.once('error', onError);\n\n // 超时处理\n timer = setTimeout(() => {\n cleanup();\n reject(new Error(`OpenClaw authentication timeout after ${timeout}ms`));\n }, timeout);\n });\n }\n\n /**\n * 发送聊天消息\n */\n async sendMessage(params: ChatRequestParams, requestParams?: Record<string, unknown>): Promise<void> {\n if (this.connectionState !== OpenClawConnectionState.AUTHENTICATED) {\n throw new Error('Not authenticated. Please connect first.');\n }\n\n this.currentRequestParams = params;\n this.isStreaming = true;\n this.eventMapper.reset();\n\n // 合并用户自定义参数\n const chatParams = {\n message: params.prompt || '',\n idempotencyKey: generateUUID(),\n ...requestParams,\n };\n\n try {\n this.callbacks.onStart?.();\n await this.rpcHandler.chatSend(chatParams);\n // 响应会通过事件流返回,这里只是发送请求\n } catch (error) {\n this.isStreaming = false;\n this.callbacks.onError?.(error as Error);\n throw error;\n }\n }\n\n /**\n * 处理 SSE 数据块(兼容 ChatEngine 接口)\n */\n handleEvent(chunk: SSEChunkData): AIMessageContent | AIMessageContent[] | null {\n // 将 SSE 格式转换为 OpenClaw 帧格式\n const frame = parseFrame(chunk.data);\n if (!frame || frame.type !== 'event') {\n return null;\n }\n\n const result = this.eventMapper.mapEvent(frame as OpenClawEventFrame);\n\n if (result.isFinal) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(false, this.currentRequestParams || undefined);\n }\n\n if (result.hasError && result.errorMessage) {\n this.callbacks.onError?.(new Error(result.errorMessage));\n }\n\n return result.content;\n }\n\n /**\n * 调用 Action(供 Toolcall/Activity 组件的 respond/action 使用)\n *\n * 通过 OpenClaw 的 node.invoke RPC 方法上行,利用 WebSocket 双向通道\n * 将用户在交互式组件中的操作(respond/confirm/update 等)发送回 Agent 端。\n *\n * @param params.nodeId - toolCallId 或 activityType,标识目标节点\n * @param params.action - 操作类型,如 \"respond\" | \"update\" | \"confirm\"\n * @param params.payload - 用户操作数据\n * @returns Agent 端返回的响应数据\n *\n * @example\n * ```tsx\n * // 在 ToolCallRenderer 的 onRespond 中使用\n * <ToolCallRenderer\n * toolCall={toolCall}\n * onRespond={async (tc, response) => {\n * await openclawAdapter.invokeAction({\n * nodeId: tc.toolCallId,\n * action: 'respond',\n * payload: response,\n * });\n * }}\n * />\n * ```\n */\n async invokeAction(params: {\n nodeId: string;\n action: string;\n payload: unknown;\n }): Promise<unknown> {\n if (this.connectionState !== OpenClawConnectionState.AUTHENTICATED) {\n throw new Error('Not authenticated. Please connect first.');\n }\n\n return this.rpcHandler.nodeInvoke({\n ...params,\n runId: this.eventMapper.getCurrentRunId() || undefined,\n });\n }\n\n /**\n * 断开连接\n */\n async disconnect(): Promise<void> {\n this.connectionState = OpenClawConnectionState.CLOSING;\n this.rpcHandler.cancelAll('Disconnecting');\n\n if (this.wsClient) {\n await this.wsClient.close();\n this.wsClient = null;\n }\n\n this.connectionState = OpenClawConnectionState.DISCONNECTED;\n this.callbacks.onDisconnected?.();\n }\n\n /**\n * 中止当前流式传输\n */\n abort(): void {\n if (this.isStreaming) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(true, this.currentRequestParams || undefined);\n }\n }\n\n /**\n * 获取连接状态\n */\n getConnectionState(): OpenClawConnectionState {\n return this.connectionState;\n }\n\n /**\n * 检查是否已认证\n */\n isAuthenticated(): boolean {\n return this.connectionState === OpenClawConnectionState.AUTHENTICATED;\n }\n\n /**\n * 重置适配器状态\n */\n reset(): void {\n this.eventMapper.reset();\n this.rpcHandler.reset();\n this.isStreaming = false;\n this.currentRequestParams = null;\n }\n\n /**\n * 销毁适配器\n */\n async destroy(): Promise<void> {\n await this.disconnect();\n this.rpcHandler.destroy();\n this.removeAllListeners();\n }\n\n /**\n * 设置 WebSocket 事件处理器\n */\n private setupEventHandlers(): void {\n if (!this.wsClient) return;\n\n this.wsClient.on('message', (event: { event: string; data: unknown }) => {\n this.handleWebSocketMessage(event.data);\n });\n\n this.wsClient.on('error', (error: Error) => {\n this.logger.error('OpenClaw WebSocket error:', error);\n this.callbacks.onError?.(error);\n });\n\n this.wsClient.on('complete', (isAborted: boolean) => {\n if (this.isStreaming) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(isAborted, this.currentRequestParams || undefined);\n }\n this.callbacks.onDisconnected?.(isAborted ? 'Aborted' : 'Connection closed');\n });\n\n this.wsClient.on('stateChange', (event: { from: WebSocketConnectionState; to: WebSocketConnectionState }) => {\n this.logger.debug(`WebSocket state: ${event.from} -> ${event.to}`);\n if (event.to === WebSocketConnectionState.CONNECTED) {\n this.connectionState = OpenClawConnectionState.HANDSHAKING;\n }\n });\n }\n\n /**\n * 处理 WebSocket 消息\n */\n private handleWebSocketMessage(data: unknown): void {\n const frame = parseFrame(data as string | object);\n if (!frame) {\n this.logger.warn('Failed to parse OpenClaw frame:', data);\n return;\n }\n\n // 处理响应帧\n if (frame.type === 'res') {\n this.rpcHandler.handleResponse(frame as OpenClawResponseFrame);\n return;\n }\n\n // 处理事件帧\n if (frame.type === 'event') {\n this.handleEventFrame(frame as OpenClawEventFrame);\n }\n }\n\n /**\n * 处理事件帧\n */\n private handleEventFrame(frame: OpenClawEventFrame): void {\n const { event, payload } = frame;\n\n // 处理连接挑战事件\n if (event === OpenClawEventType.CONNECT_CHALLENGE) {\n this.handleConnectChallenge(payload as ConnectChallengePayload);\n return;\n }\n\n // 流式消息事件\n if (this.isStreaming) {\n const result = this.eventMapper.mapEvent(frame);\n\n if (result.content) {\n this.callbacks.onMessage?.(result.content);\n this.emit('message', result.content);\n }\n\n if (result.isFinal) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(false, this.currentRequestParams || undefined);\n }\n\n if (result.hasError && result.errorMessage) {\n this.callbacks.onError?.(new Error(result.errorMessage));\n }\n }\n }\n\n /**\n * 处理连接挑战(握手)\n */\n private async handleConnectChallenge(payload: ConnectChallengePayload): Promise<void> {\n this.logger.debug('Received connect.challenge, sending connect request');\n\n const connectParams: ConnectParams = {\n minProtocol: this.config.protocolVersion.min,\n maxProtocol: this.config.protocolVersion.max,\n client: {\n id: this.config.client.id,\n version: this.config.client.version,\n platform: getPlatform(),\n mode: this.config.client.mode,\n instanceId: this.instanceId,\n },\n role: 'operator',\n scopes: ['operator.admin', 'operator.approvals', 'operator.pairing'],\n caps: [],\n // 传入认证信息(来自 openclaw onboard 的 operator token)\n ...(this.config.auth?.token ? { auth: this.config.auth } : {}),\n userAgent: getUserAgent(),\n locale: getLocale(),\n };\n\n // 如果提供了 device 配置,使用 challenge nonce 构建设备签名\n if (this.config.device) {\n try {\n const nonce = payload.nonce;\n if (!nonce) {\n this.logger.warn('connect.challenge payload missing nonce, skipping device signature');\n } else {\n connectParams.device = await buildDeviceSignature(this.config.device, nonce);\n this.logger.debug('Device signature built successfully for device:', this.config.device.id);\n }\n } catch (error) {\n this.logger.error('Failed to build device signature:', error);\n // 签名失败不阻塞连接,继续尝试无签名连接\n }\n }\n\n try {\n const response = await this.rpcHandler.connect(connectParams);\n this.connectionState = OpenClawConnectionState.AUTHENTICATED;\n this.logger.info('OpenClaw authenticated successfully:', response);\n this.callbacks.onConnected?.();\n this.emit('connected', response);\n } catch (error) {\n this.connectionState = OpenClawConnectionState.ERROR;\n this.logger.error('OpenClaw authentication failed:', error);\n this.callbacks.onError?.(error as Error);\n this.emit('error', error);\n }\n }\n}\n"],"names":["OpenClawAdapter","config","_this","_classCallCheck","_callSuper","_defineProperty","OpenClawConnectionState","DISCONNECTED","LoggerManager","getLogger","adapterConfig","mergeOpenClawConfig","instanceId","generateUUID","rpcHandler","OpenClawRPCHandler","timeout","eventMapper","OpenClawEventMapper","_inherits","_EventEmitter","_createClass","key","value","setCallbacks","callbacks","_connect","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_this2","url","wsConfig","wrap","_context","prev","next","connectionState","AUTHENTICATED","abrupt","CONNECTING","formatWebSocketUrl","endpoint","wsClient","WebSocketClient","setSendFunction","frame","_this2$wsClient","send","setupEventHandlers","maxRetries","retryInterval","heartbeatInterval","connect","waitForAuthentication","stop","apply","arguments","_this3","Promise","resolve","reject","timer","cleanup","clearTimeout","off","onConnected","onError","error","once","setTimeout","Error","concat","_sendMessage","_callee2","params","requestParams","chatParams","_this$callbacks$onSta","_this$callbacks","_this$callbacks$onErr","_this$callbacks2","_t","_context2","currentRequestParams","isStreaming","reset","_objectSpread","message","prompt","idempotencyKey","onStart","call","chatSend","sendMessage","_x","_x2","handleEvent","chunk","parseFrame","data","type","result","mapEvent","isFinal","_this$callbacks$onCom","_this$callbacks3","onComplete","hasError","errorMessage","_this$callbacks$onErr2","_this$callbacks4","content","_invokeAction","_callee3","_context3","nodeInvoke","runId","getCurrentRunId","invokeAction","_callee4","_this$callbacks$onDis","_this$callbacks5","_context4","CLOSING","cancelAll","close","onDisconnected","disconnect","_disconnect","abort","_this$callbacks$onCom2","_this$callbacks6","getConnectionState","isAuthenticated","_destroy","_callee5","_context5","destroy","removeAllListeners","_this4","on","event","handleWebSocketMessage","_this4$callbacks$onEr","_this4$callbacks","logger","isAborted","_this4$callbacks$onDi","_this4$callbacks3","_this4$callbacks$onCo","_this4$callbacks2","debug","from","to","WebSocketConnectionState","CONNECTED","HANDSHAKING","warn","handleResponse","handleEventFrame","payload","OpenClawEventType","CONNECT_CHALLENGE","handleConnectChallenge","_this$callbacks$onMes","_this$callbacks7","onMessage","emit","_this$callbacks$onCom3","_this$callbacks8","_this$callbacks$onErr3","_this$callbacks9","_handleConnectChallenge","_callee6","_this$config$auth","connectParams","nonce","_this$callbacks$onCon","_this$callbacks0","response","_this$callbacks$onErr4","_this$callbacks1","_t2","_t3","_context6","minProtocol","protocolVersion","min","maxProtocol","max","client","id","version","platform","getPlatform","mode","role","scopes","caps","auth","token","userAgent","getUserAgent","locale","getLocale","device","buildDeviceSignature","sent","info","ERROR","EventEmitter"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/index.ts"],"sourcesContent":["/**\n * OpenClaw 协议适配器\n *\n * 功能:\n * 1. 管理 WebSocket 连接生命周期\n * 2. 处理 OpenClaw 协议的握手和认证\n * 3. 将 OpenClaw 事件转换为 ChatEngine 统一的消息格式\n * 4. 提供与 AGUIAdapter 相似的接口,便于 ChatEngine 统一调度\n */\nimport EventEmitter from '../../utils/eventEmitter';\nimport { LoggerManager } from '../../utils/logger';\nimport { WebSocketClient, type WebSocketClientConfig, WebSocketConnectionState } from '../../server/websocket-client';\nimport type { AIMessageContent, ChatRequestParams, SSEChunkData } from '../../type';\nimport { OpenClawEventMapper, type EventMapResult } from './event-mapper';\nimport { OpenClawRPCHandler, RPCError } from './rpc-handler';\nimport type {\n OpenClawConfig,\n OpenClawFrame,\n OpenClawEventFrame,\n OpenClawResponseFrame,\n ConnectParams,\n ConnectChallengePayload,\n} from './types';\nimport { mergeOpenClawConfig, type MergedOpenClawConfig } from './types/config';\nimport { OpenClawEventType, OpenClawConnectionState } from './types/events';\nimport {\n generateUUID,\n parseFrame,\n getPlatform,\n getUserAgent,\n getLocale,\n formatWebSocketUrl,\n} from './utils';\n\n// 重新导出类型\nexport * from './types';\nexport { OpenClawEventMapper, type EventMapResult } from './event-mapper';\nexport { OpenClawRPCHandler, RPCError } from './rpc-handler';\n\n/**\n * OpenClaw 适配器回调接口\n */\nexport interface OpenClawAdapterCallbacks {\n /** 连接成功 */\n onConnected?: () => void;\n /** 连接断开 */\n onDisconnected?: (reason?: string) => void;\n /** 消息开始 */\n onStart?: () => void;\n /** 消息完成 */\n onComplete?: (isAborted: boolean, params?: ChatRequestParams) => void;\n /** 错误发生 */\n onError?: (error: Error) => void;\n /** 消息内容更新 */\n onMessage?: (content: AIMessageContent | AIMessageContent[]) => void;\n}\n\n/**\n * OpenClaw 适配器配置\n */\nexport interface OpenClawAdapterConfig extends OpenClawConfig {\n /** WebSocket 端点 */\n endpoint: string;\n /** 请求超时(毫秒) */\n timeout?: number;\n /** 最大重试次数 */\n maxRetries?: number;\n /** 重试间隔(毫秒) */\n retryInterval?: number;\n}\n\n/**\n * OpenClaw 协议适配器\n */\nexport class OpenClawAdapter extends EventEmitter {\n private wsClient: WebSocketClient | null = null;\n\n private rpcHandler: OpenClawRPCHandler;\n\n private eventMapper: OpenClawEventMapper;\n\n private config: MergedOpenClawConfig;\n\n private adapterConfig: OpenClawAdapterConfig;\n\n private connectionState = OpenClawConnectionState.DISCONNECTED;\n\n private instanceId: string;\n\n private logger = LoggerManager.getLogger();\n\n private callbacks: OpenClawAdapterCallbacks = {};\n\n private isStreaming = false;\n\n private currentRequestParams: ChatRequestParams | null = null;\n\n constructor(config: OpenClawAdapterConfig) {\n super();\n this.adapterConfig = config;\n this.config = mergeOpenClawConfig(config);\n this.instanceId = generateUUID();\n this.rpcHandler = new OpenClawRPCHandler({ timeout: config.timeout });\n this.eventMapper = new OpenClawEventMapper();\n }\n\n /**\n * 设置回调\n */\n setCallbacks(callbacks: OpenClawAdapterCallbacks): void {\n this.callbacks = callbacks;\n }\n\n /**\n * 连接到 OpenClaw Gateway\n * 等待 WebSocket 连接建立并完成认证握手后才返回\n */\n async connect(): Promise<void> {\n if (this.connectionState === OpenClawConnectionState.AUTHENTICATED) {\n return;\n }\n\n this.connectionState = OpenClawConnectionState.CONNECTING;\n\n const url = formatWebSocketUrl(this.adapterConfig.endpoint);\n this.wsClient = new WebSocketClient(url);\n\n // 设置 RPC 发送函数\n this.rpcHandler.setSendFunction((frame) => {\n this.wsClient?.send(frame);\n });\n\n // 绑定事件处理\n this.setupEventHandlers();\n\n // 连接 WebSocket\n const wsConfig: WebSocketClientConfig = {\n timeout: this.adapterConfig.timeout,\n maxRetries: this.adapterConfig.maxRetries,\n retryInterval: this.adapterConfig.retryInterval,\n heartbeatInterval: this.config.heartbeatInterval,\n };\n\n await this.wsClient.connect(wsConfig);\n\n // 等待认证完成(connect.challenge 握手)\n await this.waitForAuthentication();\n }\n\n /**\n * 等待认证完成\n * WebSocket 连接建立后,服务器会发送 connect.challenge 事件,\n * 适配器会自动回复 connect 请求完成握手。\n * 此方法等待整个握手流程完成后再返回。\n */\n private waitForAuthentication(): Promise<void> {\n // 如果已经认证,直接返回\n if (this.connectionState === OpenClawConnectionState.AUTHENTICATED) {\n return Promise.resolve();\n }\n\n const timeout = this.adapterConfig.timeout || 30000;\n\n return new Promise<void>((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n this.off('connected', onConnected);\n this.off('error', onError);\n };\n\n const onConnected = () => {\n cleanup();\n resolve();\n };\n\n const onError = (error: Error) => {\n cleanup();\n reject(error);\n };\n\n this.once('connected', onConnected);\n this.once('error', onError);\n\n // 超时处理\n timer = setTimeout(() => {\n cleanup();\n reject(new Error(`OpenClaw authentication timeout after ${timeout}ms`));\n }, timeout);\n });\n }\n\n /**\n * 发送聊天消息\n */\n async sendMessage(params: ChatRequestParams, requestParams?: Record<string, unknown>): Promise<void> {\n if (this.connectionState !== OpenClawConnectionState.AUTHENTICATED) {\n throw new Error('Not authenticated. Please connect first.');\n }\n\n this.currentRequestParams = params;\n this.isStreaming = true;\n this.eventMapper.reset();\n\n // 合并用户自定义参数\n const chatParams = {\n message: params.prompt || '',\n idempotencyKey: generateUUID(),\n ...requestParams,\n };\n\n try {\n this.callbacks.onStart?.();\n await this.rpcHandler.chatSend(chatParams);\n // 响应会通过事件流返回,这里只是发送请求\n } catch (error) {\n this.isStreaming = false;\n this.callbacks.onError?.(error as Error);\n throw error;\n }\n }\n\n /**\n * 处理 SSE 数据块(兼容 ChatEngine 接口)\n */\n handleEvent(chunk: SSEChunkData): AIMessageContent | AIMessageContent[] | null {\n // 将 SSE 格式转换为 OpenClaw 帧格式\n const frame = parseFrame(chunk.data);\n if (!frame || frame.type !== 'event') {\n return null;\n }\n\n const result = this.eventMapper.mapEvent(frame as OpenClawEventFrame);\n\n if (result.isFinal) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(false, this.currentRequestParams || undefined);\n }\n\n if (result.hasError && result.errorMessage) {\n this.callbacks.onError?.(new Error(result.errorMessage));\n }\n\n return result.content;\n }\n\n /**\n * 调用 Action(供 Toolcall/Activity 组件的 respond/action 使用)\n *\n * 通过 OpenClaw 的 node.invoke RPC 方法上行,利用 WebSocket 双向通道\n * 将用户在交互式组件中的操作(respond/confirm/update 等)发送回 Agent 端。\n *\n * @param params.nodeId - toolCallId 或 activityType,标识目标节点\n * @param params.action - 操作类型,如 \"respond\" | \"update\" | \"confirm\"\n * @param params.payload - 用户操作数据\n * @returns Agent 端返回的响应数据\n *\n * @example\n * ```tsx\n * // 在 ToolCallRenderer 的 onRespond 中使用\n * <ToolCallRenderer\n * toolCall={toolCall}\n * onRespond={async (tc, response) => {\n * await openclawAdapter.invokeAction({\n * nodeId: tc.toolCallId,\n * action: 'respond',\n * payload: response,\n * });\n * }}\n * />\n * ```\n */\n async invokeAction(params: {\n nodeId: string;\n action: string;\n payload: unknown;\n }): Promise<unknown> {\n if (this.connectionState !== OpenClawConnectionState.AUTHENTICATED) {\n throw new Error('Not authenticated. Please connect first.');\n }\n\n return this.rpcHandler.nodeInvoke({\n ...params,\n runId: this.eventMapper.getCurrentRunId() || undefined,\n });\n }\n\n /**\n * 断开连接\n */\n async disconnect(): Promise<void> {\n this.connectionState = OpenClawConnectionState.CLOSING;\n this.rpcHandler.cancelAll('Disconnecting');\n\n if (this.wsClient) {\n await this.wsClient.close();\n this.wsClient = null;\n }\n\n this.connectionState = OpenClawConnectionState.DISCONNECTED;\n this.callbacks.onDisconnected?.();\n }\n\n /**\n * 中止当前流式传输\n */\n abort(): void {\n if (this.isStreaming) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(true, this.currentRequestParams || undefined);\n }\n }\n\n /**\n * 获取连接状态\n */\n getConnectionState(): OpenClawConnectionState {\n return this.connectionState;\n }\n\n /**\n * 检查是否已认证\n */\n isAuthenticated(): boolean {\n return this.connectionState === OpenClawConnectionState.AUTHENTICATED;\n }\n\n /**\n * 重置适配器状态\n */\n reset(): void {\n this.eventMapper.reset();\n this.rpcHandler.reset();\n this.isStreaming = false;\n this.currentRequestParams = null;\n }\n\n /**\n * 销毁适配器\n */\n async destroy(): Promise<void> {\n await this.disconnect();\n this.rpcHandler.destroy();\n this.removeAllListeners();\n }\n\n /**\n * 设置 WebSocket 事件处理器\n */\n private setupEventHandlers(): void {\n if (!this.wsClient) return;\n\n this.wsClient.on('message', (event: { event: string; data: unknown }) => {\n this.handleWebSocketMessage(event.data);\n });\n\n this.wsClient.on('error', (error: Error) => {\n this.logger.error('OpenClaw WebSocket error:', error);\n this.callbacks.onError?.(error);\n });\n\n this.wsClient.on('complete', (isAborted: boolean) => {\n if (this.isStreaming) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(isAborted, this.currentRequestParams || undefined);\n }\n this.callbacks.onDisconnected?.(isAborted ? 'Aborted' : 'Connection closed');\n });\n\n this.wsClient.on('stateChange', (event: { from: WebSocketConnectionState; to: WebSocketConnectionState }) => {\n this.logger.debug(`WebSocket state: ${event.from} -> ${event.to}`);\n if (event.to === WebSocketConnectionState.CONNECTED) {\n this.connectionState = OpenClawConnectionState.HANDSHAKING;\n }\n });\n }\n\n /**\n * 处理 WebSocket 消息\n */\n private handleWebSocketMessage(data: unknown): void {\n const frame = parseFrame(data as string | object);\n if (!frame) {\n this.logger.warn('Failed to parse OpenClaw frame:', data);\n return;\n }\n\n // 处理响应帧\n if (frame.type === 'res') {\n this.rpcHandler.handleResponse(frame as OpenClawResponseFrame);\n return;\n }\n\n // 处理事件帧\n if (frame.type === 'event') {\n this.handleEventFrame(frame as OpenClawEventFrame);\n }\n }\n\n /**\n * 处理事件帧\n */\n private handleEventFrame(frame: OpenClawEventFrame): void {\n const { event, payload } = frame;\n\n // 处理连接挑战事件\n if (event === OpenClawEventType.CONNECT_CHALLENGE) {\n this.handleConnectChallenge(payload as ConnectChallengePayload);\n return;\n }\n\n // 流式消息事件\n if (this.isStreaming) {\n const result = this.eventMapper.mapEvent(frame);\n\n if (result.content) {\n this.callbacks.onMessage?.(result.content);\n this.emit('message', result.content);\n }\n\n if (result.isFinal) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(false, this.currentRequestParams || undefined);\n }\n\n if (result.hasError && result.errorMessage) {\n this.callbacks.onError?.(new Error(result.errorMessage));\n }\n }\n }\n\n /**\n * 处理连接挑战(握手)\n */\n private async handleConnectChallenge(_payload: ConnectChallengePayload): Promise<void> {\n this.logger.debug('Received connect.challenge, sending connect request');\n\n const connectParams: ConnectParams = {\n minProtocol: this.config.protocolVersion.min,\n maxProtocol: this.config.protocolVersion.max,\n client: {\n id: this.config.client.id,\n version: this.config.client.version,\n platform: getPlatform(),\n mode: this.config.client.mode,\n instanceId: this.instanceId,\n },\n role: 'operator',\n scopes: ['operator.admin', 'operator.approvals', 'operator.pairing'],\n caps: [],\n // 传入认证信息(来自 openclaw onboard 的 operator token)\n ...(this.config.auth?.token ? { auth: this.config.auth } : {}),\n userAgent: getUserAgent(),\n locale: getLocale(),\n };\n\n try {\n const response = await this.rpcHandler.connect(connectParams);\n this.connectionState = OpenClawConnectionState.AUTHENTICATED;\n this.logger.info('OpenClaw authenticated successfully:', response);\n this.callbacks.onConnected?.();\n this.emit('connected', response);\n } catch (error) {\n this.connectionState = OpenClawConnectionState.ERROR;\n this.logger.error('OpenClaw authentication failed:', error);\n this.callbacks.onError?.(error as Error);\n this.emit('error', error);\n }\n }\n}\n"],"names":["OpenClawAdapter","config","_this","_classCallCheck","_callSuper","_defineProperty","OpenClawConnectionState","DISCONNECTED","LoggerManager","getLogger","adapterConfig","mergeOpenClawConfig","instanceId","generateUUID","rpcHandler","OpenClawRPCHandler","timeout","eventMapper","OpenClawEventMapper","_inherits","_EventEmitter","_createClass","key","value","setCallbacks","callbacks","_connect","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_this2","url","wsConfig","wrap","_context","prev","next","connectionState","AUTHENTICATED","abrupt","CONNECTING","formatWebSocketUrl","endpoint","wsClient","WebSocketClient","setSendFunction","frame","_this2$wsClient","send","setupEventHandlers","maxRetries","retryInterval","heartbeatInterval","connect","waitForAuthentication","stop","apply","arguments","_this3","Promise","resolve","reject","timer","cleanup","clearTimeout","off","onConnected","onError","error","once","setTimeout","Error","concat","_sendMessage","_callee2","params","requestParams","chatParams","_this$callbacks$onSta","_this$callbacks","_this$callbacks$onErr","_this$callbacks2","_t","_context2","currentRequestParams","isStreaming","reset","_objectSpread","message","prompt","idempotencyKey","onStart","call","chatSend","sendMessage","_x","_x2","handleEvent","chunk","parseFrame","data","type","result","mapEvent","isFinal","_this$callbacks$onCom","_this$callbacks3","onComplete","hasError","errorMessage","_this$callbacks$onErr2","_this$callbacks4","content","_invokeAction","_callee3","_context3","nodeInvoke","runId","getCurrentRunId","invokeAction","_callee4","_this$callbacks$onDis","_this$callbacks5","_context4","CLOSING","cancelAll","close","onDisconnected","disconnect","_disconnect","abort","_this$callbacks$onCom2","_this$callbacks6","getConnectionState","isAuthenticated","_destroy","_callee5","_context5","destroy","removeAllListeners","_this4","on","event","handleWebSocketMessage","_this4$callbacks$onEr","_this4$callbacks","logger","isAborted","_this4$callbacks$onDi","_this4$callbacks3","_this4$callbacks$onCo","_this4$callbacks2","debug","from","to","WebSocketConnectionState","CONNECTED","HANDSHAKING","warn","handleResponse","handleEventFrame","payload","OpenClawEventType","CONNECT_CHALLENGE","handleConnectChallenge","_this$callbacks$onMes","_this$callbacks7","onMessage","emit","_this$callbacks$onCom3","_this$callbacks8","_this$callbacks$onErr3","_this$callbacks9","_handleConnectChallenge","_callee6","_payload","_this$config$auth","connectParams","_this$callbacks$onCon","_this$callbacks0","response","_this$callbacks$onErr4","_this$callbacks1","_t2","_context6","minProtocol","protocolVersion","min","maxProtocol","max","client","id","version","platform","getPlatform","mode","role","scopes","caps","auth","token","userAgent","getUserAgent","locale","getLocale","sent","info","ERROR","EventEmitter"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -56,21 +56,6 @@ export interface OpenClawConfig {
56
56
  token?: string;
57
57
  [key: string]: unknown;
58
58
  };
59
- /**
60
- * 设备身份信息,用于 connect 握手时的设备签名认证
61
- * 来自 openclaw onboard 生成的 ~/.openclaw/identity/ 下的凭证文件
62
- *
63
- * 如果提供了 device 配置,connect 握手时会用私钥对 challenge nonce 进行 Ed25519 签名,
64
- * 证明客户端拥有该设备的私钥,服务端通过公钥验证签名。
65
- */
66
- device?: {
67
- /** 设备 ID(来自 device.json 的 deviceId) */
68
- id: string;
69
- /** Ed25519 公钥 PEM 格式(来自 device.json 的 publicKeyPem) */
70
- publicKeyPem: string;
71
- /** Ed25519 私钥 PEM 格式(来自 device.json 的 privateKeyPem) */
72
- privateKeyPem: string;
73
- };
74
59
  }
75
60
  /**
76
61
  * OpenClaw 配置默认值
@@ -87,12 +72,9 @@ export declare const DEFAULT_OPENCLAW_CONFIG: {
87
72
  max: number;
88
73
  };
89
74
  auth: NonNullable<OpenClawConfig["auth"]>;
90
- device: OpenClawConfig["device"];
91
- };
92
- /** 合并后的配置类型(device 保持可选) */
93
- export type MergedOpenClawConfig = Omit<Required<OpenClawConfig>, 'device'> & {
94
- device?: OpenClawConfig['device'];
95
75
  };
76
+ /** 合并后的配置类型 */
77
+ export type MergedOpenClawConfig = Required<OpenClawConfig>;
96
78
  /**
97
79
  * 合并 OpenClaw 配置与默认值
98
80
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -19,8 +19,7 @@ var DEFAULT_OPENCLAW_CONFIG = {
19
19
  min: 3,
20
20
  max: 3
21
21
  },
22
- auth: {},
23
- device: void 0
22
+ auth: {}
24
23
  };
25
24
  function mergeOpenClawConfig(config) {
26
25
  var _config$heartbeatInte, _config$auth;
@@ -28,8 +27,7 @@ function mergeOpenClawConfig(config) {
28
27
  heartbeatInterval: (_config$heartbeatInte = config === null || config === void 0 ? void 0 : config.heartbeatInterval) !== null && _config$heartbeatInte !== void 0 ? _config$heartbeatInte : DEFAULT_OPENCLAW_CONFIG.heartbeatInterval,
29
28
  client: _objectSpread(_objectSpread({}, DEFAULT_OPENCLAW_CONFIG.client), config === null || config === void 0 ? void 0 : config.client),
30
29
  protocolVersion: _objectSpread(_objectSpread({}, DEFAULT_OPENCLAW_CONFIG.protocolVersion), config === null || config === void 0 ? void 0 : config.protocolVersion),
31
- auth: (_config$auth = config === null || config === void 0 ? void 0 : config.auth) !== null && _config$auth !== void 0 ? _config$auth : DEFAULT_OPENCLAW_CONFIG.auth,
32
- device: config === null || config === void 0 ? void 0 : config.device
30
+ auth: (_config$auth = config === null || config === void 0 ? void 0 : config.auth) !== null && _config$auth !== void 0 ? _config$auth : DEFAULT_OPENCLAW_CONFIG.auth
33
31
  };
34
32
  }
35
33
 
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/types/config.ts"],"sourcesContent":["/**\n * OpenClaw 配置类型定义(精简版)\n *\n * 设计原则:\n * - 只保留协议层必需的配置\n * - 业务参数(sessionKey、token、message 等)通过 onRequest 回调传入\n * - 通用网络配置(endpoint、maxRetries、timeout 等)复用外层 ChatNetworkConfig\n */\n\n/**\n * OpenClaw 客户端标识配置\n * 用于 connect 握手时的客户端识别\n */\nexport interface OpenClawClientConfig {\n /** 客户端 ID,默认 'webchat' */\n id?: string;\n /** 客户端版本,默认 '1.0.0' */\n version?: string;\n /** 客户端模式,默认 'webchat' */\n mode?: string;\n}\n\n/**\n * OpenClaw 协议版本配置\n */\nexport interface OpenClawProtocolVersion {\n /** 最小支持的协议版本,默认 3 */\n min?: number;\n /** 最大支持的协议版本,默认 3 */\n max?: number;\n}\n\n/**\n * OpenClaw 专属配置\n * 只包含协议层必需的字段,业务参数通过 onRequest 传入\n */\nexport interface OpenClawConfig {\n /**\n * 心跳间隔(毫秒)\n * - 默认 30000 (30秒)\n * - 设置为 0 表示禁用心跳\n */\n heartbeatInterval?: number;\n\n /**\n * 客户端标识配置\n * 用于 connect 握手时的客户端识别\n */\n client?: OpenClawClientConfig;\n\n /**\n * 协议版本范围\n * 一般不需要修改,除非服务端有特殊要求\n */\n protocolVersion?: OpenClawProtocolVersion;\n\n /**\n * 认证信息,用于 connect 握手时传入\n * - token: 设备 operator token(来自 openclaw onboard)\n */\n auth?: {\n token?: string;\n [key: string]: unknown;\n };\n\n /**\n * 设备身份信息,用于 connect 握手时的设备签名认证\n * 来自 openclaw onboard 生成的 ~/.openclaw/identity/ 下的凭证文件\n *\n * 如果提供了 device 配置,connect 握手时会用私钥对 challenge nonce 进行 Ed25519 签名,\n * 证明客户端拥有该设备的私钥,服务端通过公钥验证签名。\n */\n device?: {\n /** 设备 ID(来自 device.json 的 deviceId) */\n id: string;\n /** Ed25519 公钥 PEM 格式(来自 device.json 的 publicKeyPem) */\n publicKeyPem: string;\n /** Ed25519 私钥 PEM 格式(来自 device.json 的 privateKeyPem) */\n privateKeyPem: string;\n };\n}\n\n/**\n * OpenClaw 配置默认值\n */\nexport const DEFAULT_OPENCLAW_CONFIG = {\n heartbeatInterval: 30000,\n client: {\n id: 'webchat',\n version: '1.0.0',\n mode: 'webchat',\n },\n protocolVersion: {\n min: 3,\n max: 3,\n },\n auth: {} as NonNullable<OpenClawConfig['auth']>,\n device: undefined as OpenClawConfig['device'],\n};\n\n/** 合并后的配置类型(device 保持可选) */\nexport type MergedOpenClawConfig = Omit<Required<OpenClawConfig>, 'device'> & {\n device?: OpenClawConfig['device'];\n};\n\n/**\n * 合并 OpenClaw 配置与默认值\n */\nexport function mergeOpenClawConfig(config?: OpenClawConfig): MergedOpenClawConfig {\n return {\n heartbeatInterval: config?.heartbeatInterval ?? DEFAULT_OPENCLAW_CONFIG.heartbeatInterval,\n client: {\n ...DEFAULT_OPENCLAW_CONFIG.client,\n ...config?.client,\n },\n protocolVersion: {\n ...DEFAULT_OPENCLAW_CONFIG.protocolVersion,\n ...config?.protocolVersion,\n },\n auth: config?.auth ?? DEFAULT_OPENCLAW_CONFIG.auth,\n device: config?.device,\n };\n}\n"],"names":["DEFAULT_OPENCLAW_CONFIG","heartbeatInterval","client","id","version","mode","protocolVersion","min","max","auth","device","mergeOpenClawConfig","config","_config$heartbeatInte","_config$auth","_objectSpread"],"mappings":";;;;;;;;;;AAqFO,IAAMA,uBAA0B,GAAA;AACrCC,EAAAA,iBAAmB,EAAA,GAAA;AACnBC,EAAAA,MAAQ,EAAA;AACNC,IAAAA,EAAI,EAAA,SAAA;AACJC,IAAAA,OAAS,EAAA,OAAA;AACTC,IAAAA,IAAM,EAAA,SAAA;GACR;AACAC,EAAAA,eAAiB,EAAA;AACfC,IAAAA,GAAK,EAAA,CAAA;AACLC,IAAAA,GAAK,EAAA,CAAA;GACP;EACAC,MAAM,EAAC;AACPC,EAAAA,MAAQ,EAAA,KAAA,CAAA;AACV,EAAA;AAUO,SAASC,oBAAoBC,MAA+C,EAAA;EAAA,IAAAC,qBAAA,EAAAC,YAAA,CAAA;EAC1E,OAAA;AACLb,IAAAA,iBAAA,GAAAY,qBAAA,GAAmBD,MAAQ,KAAA,IAAA,IAARA,MAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAQ,CAAAX,iBAAA,cAAAY,qBAAA,KAAA,KAAA,CAAA,GAAAA,qBAAA,GAAqBb,uBAAwB,CAAAC,iBAAA;AACxEC,IAAAA,MAAQ,EAAAa,aAAA,CAAAA,aAAA,CAAA,EAAA,EACHf,uBAAwB,CAAAE,MAAA,CACxBU,EAAAA,MAAQ,aAARA,MAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,MAAQ,CAAAV,MAAA,CACb;AACAI,IAAAA,eAAiB,EAAAS,aAAA,CAAAA,aAAA,CAAA,EAAA,EACZf,uBAAwB,CAAAM,eAAA,CACxBM,EAAAA,MAAQ,aAARA,MAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,MAAQ,CAAAN,eAAA,CACb;AACAG,IAAAA,IAAA,GAAAK,YAAA,GAAMF,MAAQ,KAAA,IAAA,IAARA,MAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAQ,CAAAH,IAAA,cAAAK,YAAA,KAAA,KAAA,CAAA,GAAAA,YAAA,GAAQd,uBAAwB,CAAAS,IAAA;AAC9CC,IAAAA,QAAQE,MAAQ,KAAA,IAAA,IAARA,MAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,MAAQ,CAAAF,MAAAA;GAClB,CAAA;AACF;;;;"}
1
+ {"version":3,"file":"config.js","sources":["../../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/types/config.ts"],"sourcesContent":["/**\n * OpenClaw 配置类型定义(精简版)\n *\n * 设计原则:\n * - 只保留协议层必需的配置\n * - 业务参数(sessionKey、token、message 等)通过 onRequest 回调传入\n * - 通用网络配置(endpoint、maxRetries、timeout 等)复用外层 ChatNetworkConfig\n */\n\n/**\n * OpenClaw 客户端标识配置\n * 用于 connect 握手时的客户端识别\n */\nexport interface OpenClawClientConfig {\n /** 客户端 ID,默认 'webchat' */\n id?: string;\n /** 客户端版本,默认 '1.0.0' */\n version?: string;\n /** 客户端模式,默认 'webchat' */\n mode?: string;\n}\n\n/**\n * OpenClaw 协议版本配置\n */\nexport interface OpenClawProtocolVersion {\n /** 最小支持的协议版本,默认 3 */\n min?: number;\n /** 最大支持的协议版本,默认 3 */\n max?: number;\n}\n\n/**\n * OpenClaw 专属配置\n * 只包含协议层必需的字段,业务参数通过 onRequest 传入\n */\nexport interface OpenClawConfig {\n /**\n * 心跳间隔(毫秒)\n * - 默认 30000 (30秒)\n * - 设置为 0 表示禁用心跳\n */\n heartbeatInterval?: number;\n\n /**\n * 客户端标识配置\n * 用于 connect 握手时的客户端识别\n */\n client?: OpenClawClientConfig;\n\n /**\n * 协议版本范围\n * 一般不需要修改,除非服务端有特殊要求\n */\n protocolVersion?: OpenClawProtocolVersion;\n\n /**\n * 认证信息,用于 connect 握手时传入\n * - token: 设备 operator token(来自 openclaw onboard)\n */\n auth?: {\n token?: string;\n [key: string]: unknown;\n };\n}\n\n/**\n * OpenClaw 配置默认值\n */\nexport const DEFAULT_OPENCLAW_CONFIG = {\n heartbeatInterval: 30000,\n client: {\n id: 'webchat',\n version: '1.0.0',\n mode: 'webchat',\n },\n protocolVersion: {\n min: 3,\n max: 3,\n },\n auth: {} as NonNullable<OpenClawConfig['auth']>,\n};\n\n/** 合并后的配置类型 */\nexport type MergedOpenClawConfig = Required<OpenClawConfig>;\n\n/**\n * 合并 OpenClaw 配置与默认值\n */\nexport function mergeOpenClawConfig(config?: OpenClawConfig): MergedOpenClawConfig {\n return {\n heartbeatInterval: config?.heartbeatInterval ?? DEFAULT_OPENCLAW_CONFIG.heartbeatInterval,\n client: {\n ...DEFAULT_OPENCLAW_CONFIG.client,\n ...config?.client,\n },\n protocolVersion: {\n ...DEFAULT_OPENCLAW_CONFIG.protocolVersion,\n ...config?.protocolVersion,\n },\n auth: config?.auth ?? DEFAULT_OPENCLAW_CONFIG.auth,\n };\n}\n"],"names":["DEFAULT_OPENCLAW_CONFIG","heartbeatInterval","client","id","version","mode","protocolVersion","min","max","auth","mergeOpenClawConfig","config","_config$heartbeatInte","_config$auth","_objectSpread"],"mappings":";;;;;;;;;;AAqEO,IAAMA,uBAA0B,GAAA;AACrCC,EAAAA,iBAAmB,EAAA,GAAA;AACnBC,EAAAA,MAAQ,EAAA;AACNC,IAAAA,EAAI,EAAA,SAAA;AACJC,IAAAA,OAAS,EAAA,OAAA;AACTC,IAAAA,IAAM,EAAA,SAAA;GACR;AACAC,EAAAA,eAAiB,EAAA;AACfC,IAAAA,GAAK,EAAA,CAAA;AACLC,IAAAA,GAAK,EAAA,CAAA;GACP;AACAC,EAAAA,MAAM,EAAC;AACT,EAAA;AAQO,SAASC,oBAAoBC,MAA+C,EAAA;EAAA,IAAAC,qBAAA,EAAAC,YAAA,CAAA;EAC1E,OAAA;AACLZ,IAAAA,iBAAA,GAAAW,qBAAA,GAAmBD,MAAQ,KAAA,IAAA,IAARA,MAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAQ,CAAAV,iBAAA,cAAAW,qBAAA,KAAA,KAAA,CAAA,GAAAA,qBAAA,GAAqBZ,uBAAwB,CAAAC,iBAAA;AACxEC,IAAAA,MAAQ,EAAAY,aAAA,CAAAA,aAAA,CAAA,EAAA,EACHd,uBAAwB,CAAAE,MAAA,CACxBS,EAAAA,MAAQ,aAARA,MAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,MAAQ,CAAAT,MAAA,CACb;AACAI,IAAAA,eAAiB,EAAAQ,aAAA,CAAAA,aAAA,CAAA,EAAA,EACZd,uBAAwB,CAAAM,eAAA,CACxBK,EAAAA,MAAQ,aAARA,MAAQ,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAARA,MAAQ,CAAAL,eAAA,CACb;AACAG,IAAAA,IAAA,GAAAI,YAAA,GAAMF,MAAQ,KAAA,IAAA,IAARA,MAAQ,KAARA,KAAAA,CAAAA,GAAAA,KAAAA,CAAAA,GAAAA,MAAQ,CAAAF,IAAA,cAAAI,YAAA,KAAA,KAAA,CAAA,GAAAA,YAAA,GAAQb,uBAAwB,CAAAS,IAAAA;GAChD,CAAA;AACF;;;;"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -79,19 +79,6 @@ export interface ConnectParams {
79
79
  mode: string;
80
80
  instanceId: string;
81
81
  };
82
- /** 设备身份签名(用于设备认证) */
83
- device?: {
84
- /** 设备 ID */
85
- id: string;
86
- /** 随机数(来自 connect.challenge) */
87
- nonce: string;
88
- /** Ed25519 公钥(Base64 编码,非 PEM) */
89
- publicKey: string;
90
- /** 对 nonce 的 Ed25519 签名(Base64 URL-safe 编码) */
91
- signature: string;
92
- /** 签名时间戳(毫秒) */
93
- signedAt: number;
94
- };
95
82
  /** 角色 */
96
83
  role?: string;
97
84
  /** 权限范围 */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.14
2
+ * tdesign v1.1.0-alpha.16
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sources":["../../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/types/messages.ts"],"sourcesContent":["/**\n * OpenClaw 消息格式类型定义\n *\n * OpenClaw 采用 RPC 风格的消息通信,有三种消息类型:\n * - req: 客户端向 Gateway 发起的请求\n * - res: Gateway 返回的响应\n * - event: 服务端主动推送的事件\n */\n\n/**\n * OpenClaw 消息类型\n */\nexport type OpenClawMessageType = 'req' | 'res' | 'event';\n\n/**\n * OpenClaw 请求帧\n */\nexport interface OpenClawRequestFrame<TParams = Record<string, unknown>> {\n type: 'req';\n /** 请求唯一标识,用于匹配响应 */\n id: string;\n /** RPC 方法名 */\n method: string;\n /** 请求参数 */\n params: TParams;\n}\n\n/**\n * OpenClaw 响应帧\n */\nexport interface OpenClawResponseFrame<TPayload = unknown> {\n type: 'res';\n /** 请求唯一标识,与请求帧的 id 对应 */\n id: string;\n /** 是否成功 */\n ok: boolean;\n /** 成功时的响应数据 */\n payload?: TPayload;\n /** 失败时的错误信息 */\n error?: OpenClawError;\n}\n\n/**\n * OpenClaw 事件帧\n */\nexport interface OpenClawEventFrame<TPayload = unknown> {\n type: 'event';\n /** 事件名称 */\n event: string;\n /** 事件序号 */\n seq?: number;\n /** 事件数据 */\n payload?: TPayload;\n}\n\n/**\n * OpenClaw 错误信息\n */\nexport interface OpenClawError {\n /** 错误码 */\n code: string;\n /** 错误消息 */\n message: string;\n /** 详细信息 */\n details?: unknown;\n}\n\n/**\n * OpenClaw 消息帧(联合类型)\n */\nexport type OpenClawFrame<T = unknown> =\n | OpenClawRequestFrame<T extends Record<string, unknown> ? T : Record<string, unknown>>\n | OpenClawResponseFrame<T>\n | OpenClawEventFrame<T>;\n\n// ============= RPC 方法参数类型 =============\n\n/**\n * connect 方法参数\n */\nexport interface ConnectParams {\n /** 最小协议版本 */\n minProtocol: number;\n /** 最大协议版本 */\n maxProtocol: number;\n /** 客户端信息 */\n client: {\n id: string;\n version: string;\n platform: string;\n mode: string;\n instanceId: string;\n };\n /** 设备身份签名(用于设备认证) */\n device?: {\n /** 设备 ID */\n id: string;\n /** 随机数(来自 connect.challenge) */\n nonce: string;\n /** Ed25519 公钥(Base64 编码,非 PEM) */\n publicKey: string;\n /** 对 nonce 的 Ed25519 签名(Base64 URL-safe 编码) */\n signature: string;\n /** 签名时间戳(毫秒) */\n signedAt: number;\n };\n /** 角色 */\n role?: string;\n /** 权限范围 */\n scopes?: string[];\n /** 能力列表 */\n caps?: string[];\n /** 认证信息(可选,由 onRequest 传入) */\n auth?: {\n token?: string;\n [key: string]: unknown;\n };\n /** User Agent */\n userAgent?: string;\n /** 语言环境 */\n locale?: string;\n}\n\n/**\n * connect 方法响应\n */\nexport interface ConnectResponse {\n /** 协商后的协议版本 */\n protocol: number;\n /** 会话 ID */\n sessionId: string;\n /** 服务端版本 */\n serverVersion?: string;\n /** 支持的能力列表 */\n capabilities?: string[];\n}\n\n/**\n * chat.send 方法参数(基础结构,具体字段由 onRequest 传入)\n */\nexport interface ChatSendParams {\n /** 消息内容 */\n message: string;\n /** 会话标识 */\n sessionKey?: string;\n /** 幂等键 */\n idempotencyKey?: string;\n /** 其他自定义参数 */\n [key: string]: unknown;\n}\n\n/**\n * chat.send 方法响应\n */\nexport interface ChatSendResponse {\n /** 运行 ID */\n runId: string;\n /** 状态 */\n status: string;\n}\n\n// ============= 事件类型 =============\n\n/**\n * connect.challenge 事件数据\n */\nexport interface ConnectChallengePayload {\n /** 随机数 */\n nonce: string;\n /** 协议版本 */\n protocolVersion?: number;\n}\n\n/**\n * chat 事件数据\n */\nexport interface ChatEventPayload {\n /** 运行 ID */\n runId?: string;\n /** 会话标识 */\n sessionKey?: string;\n /** 消息状态: delta(增量) | final(完成) | error(错误) | aborted(中止) */\n state: 'delta' | 'final' | 'error' | 'aborted';\n /** 消息内容 */\n message?: {\n role: 'assistant' | 'user' | 'system';\n content: Array<{\n type: string;\n text?: string;\n [key: string]: unknown;\n }>;\n };\n /** 错误消息 */\n errorMessage?: string;\n}\n\n/**\n * agent 事件数据\n *\n * 实际 OpenClaw agent 事件示例:\n * {\n * \"type\": \"event\",\n * \"event\": \"agent\",\n * \"payload\": {\n * \"runId\": \"b7dfa37d-...\",\n * \"stream\": \"assistant\",\n * \"data\": { \"text\": \"全量快照文本\", \"delta\": \"本次增量\" },\n * \"sessionKey\": \"agent:main:main\",\n * \"seq\": 12,\n * \"ts\": 1772612049089\n * },\n * \"seq\": 16278\n * }\n */\nexport interface AgentEventPayload {\n /** 运行 ID */\n runId?: string;\n /** 流类型: assistant | tool | system */\n stream?: string;\n /** 事件子类型(可选,实际 agent 流式事件中通常不存在) */\n type?: string;\n /** 数据内容 */\n data?: {\n /** 全量文本快照(包含到当前为止的所有文本) */\n text?: string;\n /** 本次增量文本 */\n delta?: string;\n [key: string]: unknown;\n };\n /** payload 内序号(agent 事件流内的顺序) */\n seq?: number;\n /** 时间戳 */\n ts?: number;\n /** 会话标识 */\n sessionKey?: string;\n}\n\n/**\n * 类型守卫:判断是否为请求帧\n */\nexport function isRequestFrame(frame: OpenClawFrame): frame is OpenClawRequestFrame {\n return frame.type === 'req';\n}\n\n/**\n * 类型守卫:判断是否为响应帧\n */\nexport function isResponseFrame(frame: OpenClawFrame): frame is OpenClawResponseFrame {\n return frame.type === 'res';\n}\n\n/**\n * 类型守卫:判断是否为事件帧\n */\nexport function isEventFrame(frame: OpenClawFrame): frame is OpenClawEventFrame {\n return frame.type === 'event';\n}\n"],"names":["isRequestFrame","frame","type","isResponseFrame","isEventFrame"],"mappings":";;;;;;AAgPO,SAASA,eAAeC,KAAqD,EAAA;AAClF,EAAA,OAAOA,MAAMC,IAAS,KAAA,KAAA,CAAA;AACxB,CAAA;AAKO,SAASC,gBAAgBF,KAAsD,EAAA;AACpF,EAAA,OAAOA,MAAMC,IAAS,KAAA,KAAA,CAAA;AACxB,CAAA;AAKO,SAASE,aAAaH,KAAmD,EAAA;AAC9E,EAAA,OAAOA,MAAMC,IAAS,KAAA,OAAA,CAAA;AACxB;;;;"}
1
+ {"version":3,"file":"messages.js","sources":["../../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/types/messages.ts"],"sourcesContent":["/**\n * OpenClaw 消息格式类型定义\n *\n * OpenClaw 采用 RPC 风格的消息通信,有三种消息类型:\n * - req: 客户端向 Gateway 发起的请求\n * - res: Gateway 返回的响应\n * - event: 服务端主动推送的事件\n */\n\n/**\n * OpenClaw 消息类型\n */\nexport type OpenClawMessageType = 'req' | 'res' | 'event';\n\n/**\n * OpenClaw 请求帧\n */\nexport interface OpenClawRequestFrame<TParams = Record<string, unknown>> {\n type: 'req';\n /** 请求唯一标识,用于匹配响应 */\n id: string;\n /** RPC 方法名 */\n method: string;\n /** 请求参数 */\n params: TParams;\n}\n\n/**\n * OpenClaw 响应帧\n */\nexport interface OpenClawResponseFrame<TPayload = unknown> {\n type: 'res';\n /** 请求唯一标识,与请求帧的 id 对应 */\n id: string;\n /** 是否成功 */\n ok: boolean;\n /** 成功时的响应数据 */\n payload?: TPayload;\n /** 失败时的错误信息 */\n error?: OpenClawError;\n}\n\n/**\n * OpenClaw 事件帧\n */\nexport interface OpenClawEventFrame<TPayload = unknown> {\n type: 'event';\n /** 事件名称 */\n event: string;\n /** 事件序号 */\n seq?: number;\n /** 事件数据 */\n payload?: TPayload;\n}\n\n/**\n * OpenClaw 错误信息\n */\nexport interface OpenClawError {\n /** 错误码 */\n code: string;\n /** 错误消息 */\n message: string;\n /** 详细信息 */\n details?: unknown;\n}\n\n/**\n * OpenClaw 消息帧(联合类型)\n */\nexport type OpenClawFrame<T = unknown> =\n | OpenClawRequestFrame<T extends Record<string, unknown> ? T : Record<string, unknown>>\n | OpenClawResponseFrame<T>\n | OpenClawEventFrame<T>;\n\n// ============= RPC 方法参数类型 =============\n\n/**\n * connect 方法参数\n */\nexport interface ConnectParams {\n /** 最小协议版本 */\n minProtocol: number;\n /** 最大协议版本 */\n maxProtocol: number;\n /** 客户端信息 */\n client: {\n id: string;\n version: string;\n platform: string;\n mode: string;\n instanceId: string;\n };\n /** 角色 */\n role?: string;\n /** 权限范围 */\n scopes?: string[];\n /** 能力列表 */\n caps?: string[];\n /** 认证信息(可选,由 onRequest 传入) */\n auth?: {\n token?: string;\n [key: string]: unknown;\n };\n /** User Agent */\n userAgent?: string;\n /** 语言环境 */\n locale?: string;\n}\n\n/**\n * connect 方法响应\n */\nexport interface ConnectResponse {\n /** 协商后的协议版本 */\n protocol: number;\n /** 会话 ID */\n sessionId: string;\n /** 服务端版本 */\n serverVersion?: string;\n /** 支持的能力列表 */\n capabilities?: string[];\n}\n\n/**\n * chat.send 方法参数(基础结构,具体字段由 onRequest 传入)\n */\nexport interface ChatSendParams {\n /** 消息内容 */\n message: string;\n /** 会话标识 */\n sessionKey?: string;\n /** 幂等键 */\n idempotencyKey?: string;\n /** 其他自定义参数 */\n [key: string]: unknown;\n}\n\n/**\n * chat.send 方法响应\n */\nexport interface ChatSendResponse {\n /** 运行 ID */\n runId: string;\n /** 状态 */\n status: string;\n}\n\n// ============= 事件类型 =============\n\n/**\n * connect.challenge 事件数据\n */\nexport interface ConnectChallengePayload {\n /** 随机数 */\n nonce: string;\n /** 协议版本 */\n protocolVersion?: number;\n}\n\n/**\n * chat 事件数据\n */\nexport interface ChatEventPayload {\n /** 运行 ID */\n runId?: string;\n /** 会话标识 */\n sessionKey?: string;\n /** 消息状态: delta(增量) | final(完成) | error(错误) | aborted(中止) */\n state: 'delta' | 'final' | 'error' | 'aborted';\n /** 消息内容 */\n message?: {\n role: 'assistant' | 'user' | 'system';\n content: Array<{\n type: string;\n text?: string;\n [key: string]: unknown;\n }>;\n };\n /** 错误消息 */\n errorMessage?: string;\n}\n\n/**\n * agent 事件数据\n *\n * 实际 OpenClaw agent 事件示例:\n * {\n * \"type\": \"event\",\n * \"event\": \"agent\",\n * \"payload\": {\n * \"runId\": \"b7dfa37d-...\",\n * \"stream\": \"assistant\",\n * \"data\": { \"text\": \"全量快照文本\", \"delta\": \"本次增量\" },\n * \"sessionKey\": \"agent:main:main\",\n * \"seq\": 12,\n * \"ts\": 1772612049089\n * },\n * \"seq\": 16278\n * }\n */\nexport interface AgentEventPayload {\n /** 运行 ID */\n runId?: string;\n /** 流类型: assistant | tool | system */\n stream?: string;\n /** 事件子类型(可选,实际 agent 流式事件中通常不存在) */\n type?: string;\n /** 数据内容 */\n data?: {\n /** 全量文本快照(包含到当前为止的所有文本) */\n text?: string;\n /** 本次增量文本 */\n delta?: string;\n [key: string]: unknown;\n };\n /** payload 内序号(agent 事件流内的顺序) */\n seq?: number;\n /** 时间戳 */\n ts?: number;\n /** 会话标识 */\n sessionKey?: string;\n}\n\n/**\n * 类型守卫:判断是否为请求帧\n */\nexport function isRequestFrame(frame: OpenClawFrame): frame is OpenClawRequestFrame {\n return frame.type === 'req';\n}\n\n/**\n * 类型守卫:判断是否为响应帧\n */\nexport function isResponseFrame(frame: OpenClawFrame): frame is OpenClawResponseFrame {\n return frame.type === 'res';\n}\n\n/**\n * 类型守卫:判断是否为事件帧\n */\nexport function isEventFrame(frame: OpenClawFrame): frame is OpenClawEventFrame {\n return frame.type === 'event';\n}\n"],"names":["isRequestFrame","frame","type","isResponseFrame","isEventFrame"],"mappings":";;;;;;AAmOO,SAASA,eAAeC,KAAqD,EAAA;AAClF,EAAA,OAAOA,MAAMC,IAAS,KAAA,KAAA,CAAA;AACxB,CAAA;AAKO,SAASC,gBAAgBF,KAAsD,EAAA;AACpF,EAAA,OAAOA,MAAMC,IAAS,KAAA,KAAA,CAAA;AACxB,CAAA;AAKO,SAASE,aAAaH,KAAmD,EAAA;AAC9E,EAAA,OAAOA,MAAMC,IAAS,KAAA,OAAA,CAAA;AACxB;;;;"}
@@ -47,29 +47,3 @@ export declare function safeJsonParse<T>(data: string, fallback: T): T;
47
47
  * 深度合并对象
48
48
  */
49
49
  export declare function deepMerge<T extends Record<string, unknown>>(target: T, source: Partial<T>): T;
50
- /**
51
- * 使用 Ed25519 私钥对数据进行签名
52
- *
53
- * @param privateKeyPem - PEM 格式的 Ed25519 私钥
54
- * @param data - 要签名的数据(UTF-8 字符串)
55
- * @returns Base64 URL-safe 编码的签名
56
- */
57
- export declare function signWithEd25519(privateKeyPem: string, data: string): Promise<string>;
58
- /**
59
- * 构建设备签名对象,用于 connect 握手
60
- *
61
- * @param deviceConfig - 设备配置(id, publicKeyPem, privateKeyPem)
62
- * @param nonce - 来自 connect.challenge 的随机数
63
- * @returns 签名后的 device 对象,可直接放入 ConnectParams
64
- */
65
- export declare function buildDeviceSignature(deviceConfig: {
66
- id: string;
67
- publicKeyPem: string;
68
- privateKeyPem: string;
69
- }, nonce: string): Promise<{
70
- id: string;
71
- nonce: string;
72
- publicKey: string;
73
- signature: string;
74
- signedAt: number;
75
- }>;