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

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 (140) hide show
  1. package/es/_chunks/dep-13fe70ea.js +438 -0
  2. package/es/_chunks/dep-13fe70ea.js.map +1 -0
  3. package/es/_chunks/dep-5e2400d2.js +438 -0
  4. package/es/_chunks/dep-5e2400d2.js.map +1 -0
  5. package/es/_chunks/dep-60f2a734.js +169 -0
  6. package/es/_chunks/dep-60f2a734.js.map +1 -0
  7. package/es/_chunks/dep-98d23dfa.js +169 -0
  8. package/es/_chunks/dep-98d23dfa.js.map +1 -0
  9. package/es/_chunks/dep-991f7c12.js +1247 -0
  10. package/es/_chunks/dep-991f7c12.js.map +1 -0
  11. package/es/_chunks/dep-b4eec30f.js +1247 -0
  12. package/es/_chunks/dep-b4eec30f.js.map +1 -0
  13. package/es/_util/reactify.js +1 -1
  14. package/es/_util/useDynamicStyle.js +1 -1
  15. package/es/attachments/index.js +1 -1
  16. package/es/chat-actionbar/index.js +1 -1
  17. package/es/chat-engine/components/activity/index.js +2 -2
  18. package/es/chat-engine/components/activity/registry.js +1 -1
  19. package/es/chat-engine/components/activity/render.js +2 -2
  20. package/es/chat-engine/components/activity/types.js +1 -1
  21. package/es/chat-engine/components/index.js +4 -4
  22. package/es/chat-engine/components/json-render/catalog/atomic/button.js +1 -1
  23. package/es/chat-engine/components/json-render/catalog/atomic/card.js +1 -1
  24. package/es/chat-engine/components/json-render/catalog/atomic/input.js +4 -4
  25. package/es/chat-engine/components/json-render/catalog/atomic/layout.js +1 -1
  26. package/es/chat-engine/components/json-render/catalog/atomic/text.js +1 -1
  27. package/es/chat-engine/components/json-render/catalog/catalog-to-prompt.js +1 -1
  28. package/es/chat-engine/components/json-render/contexts/actions.js +2 -2
  29. package/es/chat-engine/components/json-render/contexts/data.js +2 -2
  30. package/es/chat-engine/components/json-render/contexts/index.js +2 -2
  31. package/es/chat-engine/components/json-render/contexts/store.js +1 -1
  32. package/es/chat-engine/components/json-render/contexts/tree.js +1 -1
  33. package/es/chat-engine/components/json-render/contexts/validation.js +2 -2
  34. package/es/chat-engine/components/json-render/contexts/visibility.js +2 -2
  35. package/es/chat-engine/components/json-render/index.js +4 -4
  36. package/es/chat-engine/components/json-render/registry/a2ui-binding.js +4 -4
  37. package/es/chat-engine/components/json-render/registry/a2ui-registry.js +4 -4
  38. package/es/chat-engine/components/json-render/registry/config.js +4 -4
  39. package/es/chat-engine/components/json-render/registry/index.js +4 -4
  40. package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js +3 -3
  41. package/es/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.js +3 -3
  42. package/es/chat-engine/components/json-render/renderer/JsonUIRenderer.js +2 -2
  43. package/es/chat-engine/components/json-render/renderer/_index.js +2 -2
  44. package/es/chat-engine/components/json-render/types.js +1 -1
  45. package/es/chat-engine/components/provider/agent-state.js +2 -2
  46. package/es/chat-engine/components/shared/ComponentErrorBoundary.js +1 -1
  47. package/es/chat-engine/components/shared/createRegistry.js +1 -1
  48. package/es/chat-engine/components/shared/index.js +1 -1
  49. package/es/chat-engine/components/shared/useRegistrationListener.js +1 -1
  50. package/es/chat-engine/components/toolcall/index.js +2 -2
  51. package/es/chat-engine/components/toolcall/registry.js +1 -1
  52. package/es/chat-engine/components/toolcall/render.js +2 -2
  53. package/es/chat-engine/components/toolcall/types.js +1 -1
  54. package/es/chat-engine/core/adapters/a2ui/index.js +1 -1
  55. package/es/chat-engine/core/adapters/a2ui/processor/A2uiMessageProcessor.js +1 -1
  56. package/es/chat-engine/core/adapters/a2ui/processor/ComponentTree.js +1 -1
  57. package/es/chat-engine/core/adapters/a2ui/processor/DataStore.js +1 -1
  58. package/es/chat-engine/core/adapters/a2ui/processor/PathResolver.js +1 -1
  59. package/es/chat-engine/core/adapters/a2ui/types/index.js +1 -1
  60. package/es/chat-engine/core/adapters/a2ui/types/types.js +1 -1
  61. package/es/chat-engine/core/adapters/a2ui/utils/binding.js +1 -1
  62. package/es/chat-engine/core/adapters/a2ui/utils/index.js +1 -1
  63. package/es/chat-engine/core/adapters/a2ui/utils/validation.js +1 -1
  64. package/es/chat-engine/core/adapters/agui/ActivityManager.js +1 -1
  65. package/es/chat-engine/core/adapters/agui/StateManager.js +1 -1
  66. package/es/chat-engine/core/adapters/agui/event-mapper.js +1 -1
  67. package/es/chat-engine/core/adapters/agui/index.js +1 -1
  68. package/es/chat-engine/core/adapters/agui/types/events.js +1 -1
  69. package/es/chat-engine/core/adapters/agui/types/index.js +1 -1
  70. package/es/chat-engine/core/adapters/agui/utils.js +1 -1
  71. package/es/chat-engine/core/adapters/index.js +1 -1
  72. package/es/chat-engine/core/adapters/json-render/SurfaceStateManager.js +1 -1
  73. package/es/chat-engine/core/adapters/json-render/a2ui-to-jsonrender.js +1 -1
  74. package/es/chat-engine/core/adapters/json-render/engine.js +1 -1
  75. package/es/chat-engine/core/adapters/json-render/index.js +1 -1
  76. package/es/chat-engine/core/adapters/json-render/types/a2ui.js +1 -1
  77. package/es/chat-engine/core/adapters/json-render/types/core.js +1 -1
  78. package/es/chat-engine/core/adapters/json-render/types/index.js +1 -1
  79. package/es/chat-engine/core/adapters/openclaw/event-mapper.js +1 -1
  80. package/es/chat-engine/core/adapters/openclaw/index.js +41 -14
  81. package/es/chat-engine/core/adapters/openclaw/index.js.map +1 -1
  82. package/es/chat-engine/core/adapters/openclaw/rpc-handler.js +1 -1
  83. package/es/chat-engine/core/adapters/openclaw/types/config.d.ts +34 -2
  84. package/es/chat-engine/core/adapters/openclaw/types/config.js +5 -3
  85. package/es/chat-engine/core/adapters/openclaw/types/config.js.map +1 -1
  86. package/es/chat-engine/core/adapters/openclaw/types/events.js +1 -1
  87. package/es/chat-engine/core/adapters/openclaw/types/index.js +1 -1
  88. package/es/chat-engine/core/adapters/openclaw/types/messages.d.ts +13 -0
  89. package/es/chat-engine/core/adapters/openclaw/types/messages.js +1 -1
  90. package/es/chat-engine/core/adapters/openclaw/types/messages.js.map +1 -1
  91. package/es/chat-engine/core/adapters/openclaw/utils.d.ts +26 -0
  92. package/es/chat-engine/core/adapters/openclaw/utils.js +93 -2
  93. package/es/chat-engine/core/adapters/openclaw/utils.js.map +1 -1
  94. package/es/chat-engine/core/adapters/shared/activity-manager.js +1 -1
  95. package/es/chat-engine/core/adapters/shared/content-factory.js +1 -1
  96. package/es/chat-engine/core/adapters/shared/index.js +1 -1
  97. package/es/chat-engine/core/adapters/shared/merge-utils.js +1 -1
  98. package/es/chat-engine/core/event-bus/ChatEventBus.js +1 -1
  99. package/es/chat-engine/core/event-bus/index.js +1 -1
  100. package/es/chat-engine/core/event-bus/types.js +1 -1
  101. package/es/chat-engine/core/index.js +2 -2
  102. package/es/chat-engine/core/processor/index.js +1 -1
  103. package/es/chat-engine/core/server/batch-client.js +1 -1
  104. package/es/chat-engine/core/server/connection-manager.js +1 -1
  105. package/es/chat-engine/core/server/errors.js +1 -1
  106. package/es/chat-engine/core/server/index.js +1 -1
  107. package/es/chat-engine/core/server/llm-service.js +1 -1
  108. package/es/chat-engine/core/server/sse-client.js +1 -1
  109. package/es/chat-engine/core/server/sse-parser.js +1 -1
  110. package/es/chat-engine/core/server/types.js +1 -1
  111. package/es/chat-engine/core/server/websocket-client.d.ts +4 -0
  112. package/es/chat-engine/core/server/websocket-client.js +9 -10
  113. package/es/chat-engine/core/server/websocket-client.js.map +1 -1
  114. package/es/chat-engine/core/store/message.js +2 -2
  115. package/es/chat-engine/core/store/model.js +2 -2
  116. package/es/chat-engine/core/store/reactiveState.js +2 -2
  117. package/es/chat-engine/core/type.js +1 -1
  118. package/es/chat-engine/core/utils/eventEmitter.js +1 -1
  119. package/es/chat-engine/core/utils/immutable-patch.js +1 -1
  120. package/es/chat-engine/core/utils/index.js +1 -1
  121. package/es/chat-engine/core/utils/json-patch/helpers.js +1 -1
  122. package/es/chat-engine/core/utils/json-patch/index.js +1 -1
  123. package/es/chat-engine/core/utils/logger.js +1 -1
  124. package/es/chat-engine/core/utils/performance.js +1 -1
  125. package/es/chat-engine/hooks/index.js +2 -2
  126. package/es/chat-engine/hooks/useAgentActivity.js +1 -1
  127. package/es/chat-engine/hooks/useAgentState.js +2 -2
  128. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  129. package/es/chat-engine/hooks/useChat.js +2 -2
  130. package/es/chat-engine/index.js +4 -4
  131. package/es/chat-filecard/index.js +1 -1
  132. package/es/chat-loading/index.js +1 -1
  133. package/es/chat-markdown/index.js +1 -1
  134. package/es/chat-message/index.js +1 -1
  135. package/es/chat-sender/index.js +1 -1
  136. package/es/chat-thinking/index.js +1 -1
  137. package/es/chatbot/index.js +1 -1
  138. package/es/index.js +4 -4
  139. package/es/style/index.js +1 -1
  140. package/package.json +1 -1
@@ -56,12 +56,44 @@ 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
+ };
59
74
  }
60
75
  /**
61
76
  * OpenClaw 配置默认值
62
77
  */
63
- export declare const DEFAULT_OPENCLAW_CONFIG: Required<OpenClawConfig>;
78
+ export declare const DEFAULT_OPENCLAW_CONFIG: {
79
+ heartbeatInterval: number;
80
+ client: {
81
+ id: string;
82
+ version: string;
83
+ mode: string;
84
+ };
85
+ protocolVersion: {
86
+ min: number;
87
+ max: number;
88
+ };
89
+ auth: NonNullable<OpenClawConfig["auth"]>;
90
+ device: OpenClawConfig["device"];
91
+ };
92
+ /** 合并后的配置类型(device 保持可选) */
93
+ export type MergedOpenClawConfig = Omit<Required<OpenClawConfig>, 'device'> & {
94
+ device?: OpenClawConfig['device'];
95
+ };
64
96
  /**
65
97
  * 合并 OpenClaw 配置与默认值
66
98
  */
67
- export declare function mergeOpenClawConfig(config?: OpenClawConfig): Required<OpenClawConfig>;
99
+ export declare function mergeOpenClawConfig(config?: OpenClawConfig): MergedOpenClawConfig;
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -19,7 +19,8 @@ var DEFAULT_OPENCLAW_CONFIG = {
19
19
  min: 3,
20
20
  max: 3
21
21
  },
22
- auth: {}
22
+ auth: {},
23
+ device: void 0
23
24
  };
24
25
  function mergeOpenClawConfig(config) {
25
26
  var _config$heartbeatInte, _config$auth;
@@ -27,7 +28,8 @@ function mergeOpenClawConfig(config) {
27
28
  heartbeatInterval: (_config$heartbeatInte = config === null || config === void 0 ? void 0 : config.heartbeatInterval) !== null && _config$heartbeatInte !== void 0 ? _config$heartbeatInte : DEFAULT_OPENCLAW_CONFIG.heartbeatInterval,
28
29
  client: _objectSpread(_objectSpread({}, DEFAULT_OPENCLAW_CONFIG.client), config === null || config === void 0 ? void 0 : config.client),
29
30
  protocolVersion: _objectSpread(_objectSpread({}, DEFAULT_OPENCLAW_CONFIG.protocolVersion), config === null || config === void 0 ? void 0 : config.protocolVersion),
30
- auth: (_config$auth = config === null || config === void 0 ? void 0 : config.auth) !== null && _config$auth !== void 0 ? _config$auth : DEFAULT_OPENCLAW_CONFIG.auth
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
31
33
  };
32
34
  }
33
35
 
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sources":["../../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/types/config.ts"],"sourcesContent":["/**\n * OpenClaw 配置类型定义(精简版)\n *\n * 设计原则:\n * - 只保留协议层必需的配置\n * - 业务参数(sessionKey、token、message 等)通过 onRequest 回调传入\n * - 通用网络配置(endpoint、maxRetries、timeout 等)复用外层 ChatNetworkConfig\n */\n\n/**\n * OpenClaw 客户端标识配置\n * 用于 connect 握手时的客户端识别\n */\nexport interface OpenClawClientConfig {\n /** 客户端 ID,默认 'webchat' */\n id?: string;\n /** 客户端版本,默认 '1.0.0' */\n version?: string;\n /** 客户端模式,默认 'webchat' */\n mode?: string;\n}\n\n/**\n * OpenClaw 协议版本配置\n */\nexport interface OpenClawProtocolVersion {\n /** 最小支持的协议版本,默认 3 */\n min?: number;\n /** 最大支持的协议版本,默认 3 */\n max?: number;\n}\n\n/**\n * OpenClaw 专属配置\n * 只包含协议层必需的字段,业务参数通过 onRequest 传入\n */\nexport interface OpenClawConfig {\n /**\n * 心跳间隔(毫秒)\n * - 默认 30000 (30秒)\n * - 设置为 0 表示禁用心跳\n */\n heartbeatInterval?: number;\n\n /**\n * 客户端标识配置\n * 用于 connect 握手时的客户端识别\n */\n client?: OpenClawClientConfig;\n\n /**\n * 协议版本范围\n * 一般不需要修改,除非服务端有特殊要求\n */\n protocolVersion?: OpenClawProtocolVersion;\n\n /**\n * 认证信息,用于 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: Required<OpenClawConfig> = {\n heartbeatInterval: 30000,\n client: {\n id: 'webchat',\n version: '1.0.0',\n mode: 'webchat',\n },\n protocolVersion: {\n min: 3,\n max: 3,\n },\n auth: {},\n};\n\n/**\n * 合并 OpenClaw 配置与默认值\n */\nexport function mergeOpenClawConfig(config?: OpenClawConfig): Required<OpenClawConfig> {\n return {\n heartbeatInterval: config?.heartbeatInterval ?? DEFAULT_OPENCLAW_CONFIG.heartbeatInterval,\n client: {\n ...DEFAULT_OPENCLAW_CONFIG.client,\n ...config?.client,\n },\n protocolVersion: {\n ...DEFAULT_OPENCLAW_CONFIG.protocolVersion,\n ...config?.protocolVersion,\n },\n 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,uBAAoD,GAAA;AAC/DC,EAAAA,iBAAmB,EAAA,GAAA;AACnBC,EAAAA,MAAQ,EAAA;AACNC,IAAAA,EAAI,EAAA,SAAA;AACJC,IAAAA,OAAS,EAAA,OAAA;AACTC,IAAAA,IAAM,EAAA,SAAA;GACR;AACAC,EAAAA,eAAiB,EAAA;AACfC,IAAAA,GAAK,EAAA,CAAA;AACLC,IAAAA,GAAK,EAAA,CAAA;GACP;AACAC,EAAAA,MAAM,EAAC;AACT,EAAA;AAKO,SAASC,oBAAoBC,MAAmD,EAAA;EAAA,IAAAC,qBAAA,EAAAC,YAAA,CAAA;EAC9E,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
+ {"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,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -79,6 +79,19 @@ 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
+ };
82
95
  /** 角色 */
83
96
  role?: string;
84
97
  /** 权限范围 */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1 +1 @@
1
- {"version":3,"file":"messages.js","sources":["../../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/types/messages.ts"],"sourcesContent":["/**\n * OpenClaw 消息格式类型定义\n *\n * OpenClaw 采用 RPC 风格的消息通信,有三种消息类型:\n * - req: 客户端向 Gateway 发起的请求\n * - res: Gateway 返回的响应\n * - event: 服务端主动推送的事件\n */\n\n/**\n * OpenClaw 消息类型\n */\nexport type OpenClawMessageType = 'req' | 'res' | 'event';\n\n/**\n * OpenClaw 请求帧\n */\nexport interface OpenClawRequestFrame<TParams = Record<string, unknown>> {\n type: 'req';\n /** 请求唯一标识,用于匹配响应 */\n id: string;\n /** RPC 方法名 */\n method: string;\n /** 请求参数 */\n params: TParams;\n}\n\n/**\n * OpenClaw 响应帧\n */\nexport interface OpenClawResponseFrame<TPayload = unknown> {\n type: 'res';\n /** 请求唯一标识,与请求帧的 id 对应 */\n id: string;\n /** 是否成功 */\n ok: boolean;\n /** 成功时的响应数据 */\n payload?: TPayload;\n /** 失败时的错误信息 */\n error?: OpenClawError;\n}\n\n/**\n * OpenClaw 事件帧\n */\nexport interface OpenClawEventFrame<TPayload = unknown> {\n type: 'event';\n /** 事件名称 */\n event: string;\n /** 事件序号 */\n seq?: number;\n /** 事件数据 */\n payload?: TPayload;\n}\n\n/**\n * OpenClaw 错误信息\n */\nexport interface OpenClawError {\n /** 错误码 */\n code: string;\n /** 错误消息 */\n message: string;\n /** 详细信息 */\n details?: unknown;\n}\n\n/**\n * OpenClaw 消息帧(联合类型)\n */\nexport type OpenClawFrame<T = unknown> =\n | OpenClawRequestFrame<T extends Record<string, unknown> ? T : Record<string, unknown>>\n | OpenClawResponseFrame<T>\n | OpenClawEventFrame<T>;\n\n// ============= RPC 方法参数类型 =============\n\n/**\n * connect 方法参数\n */\nexport interface ConnectParams {\n /** 最小协议版本 */\n minProtocol: number;\n /** 最大协议版本 */\n maxProtocol: number;\n /** 客户端信息 */\n client: {\n id: string;\n version: string;\n platform: string;\n mode: string;\n instanceId: string;\n };\n /** 角色 */\n role?: string;\n /** 权限范围 */\n scopes?: string[];\n /** 能力列表 */\n caps?: string[];\n /** 认证信息(可选,由 onRequest 传入) */\n auth?: {\n token?: string;\n [key: string]: unknown;\n };\n /** User Agent */\n userAgent?: string;\n /** 语言环境 */\n locale?: string;\n}\n\n/**\n * connect 方法响应\n */\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;;;;"}
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;;;;"}
@@ -47,3 +47,29 @@ 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
+ }>;
@@ -1,11 +1,13 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
6
6
 
7
+ import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
7
8
  import _defineProperty from '@babel/runtime/helpers/defineProperty';
8
9
  import _typeof from '@babel/runtime/helpers/typeof';
10
+ import _regeneratorRuntime from '@babel/runtime/regenerator';
9
11
 
10
12
  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; }
11
13
  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; }
@@ -104,6 +106,95 @@ function deepMerge(target, source) {
104
106
  }
105
107
  return result;
106
108
  }
109
+ function extractKeyFromPem(pem) {
110
+ return pem.replace(/-----BEGIN [\w\s]+-----/, "").replace(/-----END [\w\s]+-----/, "").replace(/\s/g, "");
111
+ }
112
+ function extractRawPublicKey(publicKeyPem) {
113
+ var b64 = extractKeyFromPem(publicKeyPem);
114
+ var binary = atob(b64);
115
+ var rawBytes = binary.slice(12);
116
+ return btoa(rawBytes);
117
+ }
118
+ function base64ToBase64Url(base64) {
119
+ return base64.replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
120
+ }
121
+ function base64ToUint8Array(base64) {
122
+ var binary = atob(base64);
123
+ var bytes = new Uint8Array(binary.length);
124
+ for (var i = 0; i < binary.length; i++) {
125
+ bytes[i] = binary.charCodeAt(i);
126
+ }
127
+ return bytes;
128
+ }
129
+ function uint8ArrayToBase64Url(bytes) {
130
+ var binary = "";
131
+ for (var i = 0; i < bytes.length; i++) {
132
+ binary += String.fromCharCode(bytes[i]);
133
+ }
134
+ return base64ToBase64Url(btoa(binary));
135
+ }
136
+ function signWithEd25519(_x, _x2) {
137
+ return _signWithEd.apply(this, arguments);
138
+ }
139
+ function _signWithEd() {
140
+ _signWithEd = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(privateKeyPem, data) {
141
+ var keyData, keyBytes, cryptoKey, encoder, dataBytes, signature;
142
+ return _regeneratorRuntime.wrap(function (_context) {
143
+ while (1) switch (_context.prev = _context.next) {
144
+ case 0:
145
+ keyData = extractKeyFromPem(privateKeyPem);
146
+ keyBytes = base64ToUint8Array(keyData);
147
+ _context.next = 1;
148
+ return crypto.subtle.importKey("pkcs8", keyBytes.buffer, {
149
+ name: "Ed25519"
150
+ }, false, ["sign"]);
151
+ case 1:
152
+ cryptoKey = _context.sent;
153
+ encoder = new TextEncoder();
154
+ dataBytes = encoder.encode(data);
155
+ _context.next = 2;
156
+ return crypto.subtle.sign("Ed25519", cryptoKey, dataBytes);
157
+ case 2:
158
+ signature = _context.sent;
159
+ return _context.abrupt("return", uint8ArrayToBase64Url(new Uint8Array(signature)));
160
+ case 3:
161
+ case "end":
162
+ return _context.stop();
163
+ }
164
+ }, _callee);
165
+ }));
166
+ return _signWithEd.apply(this, arguments);
167
+ }
168
+ function buildDeviceSignature(_x3, _x4) {
169
+ return _buildDeviceSignature.apply(this, arguments);
170
+ }
171
+ function _buildDeviceSignature() {
172
+ _buildDeviceSignature = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(deviceConfig, nonce) {
173
+ var signedAt, signature, publicKey;
174
+ return _regeneratorRuntime.wrap(function (_context2) {
175
+ while (1) switch (_context2.prev = _context2.next) {
176
+ case 0:
177
+ signedAt = Date.now();
178
+ _context2.next = 1;
179
+ return signWithEd25519(deviceConfig.privateKeyPem, nonce);
180
+ case 1:
181
+ signature = _context2.sent;
182
+ publicKey = base64ToBase64Url(extractRawPublicKey(deviceConfig.publicKeyPem));
183
+ return _context2.abrupt("return", {
184
+ id: deviceConfig.id,
185
+ nonce: nonce,
186
+ publicKey: publicKey,
187
+ signature: signature,
188
+ signedAt: signedAt
189
+ });
190
+ case 2:
191
+ case "end":
192
+ return _context2.stop();
193
+ }
194
+ }, _callee2);
195
+ }));
196
+ return _buildDeviceSignature.apply(this, arguments);
197
+ }
107
198
 
108
- export { calculateBackoffDelay, createRequestFrame, deepMerge, formatWebSocketUrl, generateUUID, getLocale, getPlatform, getUserAgent, isWebSocketSupported, parseFrame, safeJsonParse };
199
+ export { buildDeviceSignature, calculateBackoffDelay, createRequestFrame, deepMerge, formatWebSocketUrl, generateUUID, getLocale, getPlatform, getUserAgent, isWebSocketSupported, parseFrame, safeJsonParse, signWithEd25519 };
109
200
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/utils.ts"],"sourcesContent":["/**\n * OpenClaw 工具函数\n */\nimport type { OpenClawFrame, OpenClawRequestFrame, OpenClawResponseFrame, OpenClawEventFrame } from './types';\n\n/**\n * 生成 UUID\n */\nexport function generateUUID(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * 解析 OpenClaw 消息帧\n */\nexport function parseFrame(data: string | object): OpenClawFrame | null {\n try {\n const frame = typeof data === 'string' ? JSON.parse(data) : data;\n if (!frame || typeof frame !== 'object') {\n return null;\n }\n if (!['req', 'res', 'event'].includes(frame.type)) {\n return null;\n }\n return frame as OpenClawFrame;\n } catch {\n return null;\n }\n}\n\n/**\n * 创建请求帧\n */\nexport function createRequestFrame<T extends Record<string, unknown>>(\n method: string,\n params: T,\n id?: string,\n): OpenClawRequestFrame<T> {\n return {\n type: 'req',\n id: id || generateUUID(),\n method,\n params,\n };\n}\n\n/**\n * 获取平台信息\n */\nexport function getPlatform(): string {\n if (typeof navigator !== 'undefined') {\n return navigator.platform || 'web';\n }\n return 'web';\n}\n\n/**\n * 获取 User Agent\n */\nexport function getUserAgent(): string {\n if (typeof navigator !== 'undefined') {\n return navigator.userAgent;\n }\n return 'TDesign-ChatEngine/1.0';\n}\n\n/**\n * 获取语言环境\n */\nexport function getLocale(): string {\n if (typeof navigator !== 'undefined') {\n return navigator.language || 'en-US';\n }\n return 'en-US';\n}\n\n/**\n * 检查 WebSocket 是否可用\n */\nexport function isWebSocketSupported(): boolean {\n return typeof WebSocket !== 'undefined';\n}\n\n/**\n * 格式化 WebSocket URL\n * 确保 URL 使用正确的协议\n */\nexport function formatWebSocketUrl(url: string): string {\n if (url.startsWith('ws://') || url.startsWith('wss://')) {\n return url;\n }\n // 如果是 http/https,转换为 ws/wss\n if (url.startsWith('https://')) {\n return url.replace('https://', 'wss://');\n }\n if (url.startsWith('http://')) {\n return url.replace('http://', 'ws://');\n }\n // 默认添加 ws://\n return `ws://${url}`;\n}\n\n/**\n * 计算指数退避延迟\n */\nexport function calculateBackoffDelay(\n attempt: number,\n baseDelay: number,\n maxDelay = 30000,\n jitter = true,\n): number {\n let delay = baseDelay * Math.pow(1.5, attempt - 1);\n delay = Math.min(delay, maxDelay);\n \n if (jitter) {\n // 添加 ±10% 的抖动\n const jitterRange = delay * 0.1;\n delay += (Math.random() - 0.5) * 2 * jitterRange;\n }\n \n return Math.floor(delay);\n}\n\n/**\n * 安全的 JSON 解析\n */\nexport function safeJsonParse<T>(data: string, fallback: T): T {\n try {\n return JSON.parse(data) as T;\n } catch {\n return fallback;\n }\n}\n\n/**\n * 深度合并对象\n */\nexport function deepMerge<T extends Record<string, unknown>>(target: T, source: Partial<T>): T {\n const result = { ...target };\n \n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n const targetValue = result[key];\n const sourceValue = source[key];\n \n if (\n typeof targetValue === 'object' &&\n targetValue !== null &&\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n !Array.isArray(targetValue) &&\n !Array.isArray(sourceValue)\n ) {\n result[key] = deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>,\n ) as T[typeof key];\n } else if (sourceValue !== undefined) {\n result[key] = sourceValue as T[typeof key];\n }\n }\n }\n \n return result;\n}\n"],"names":["generateUUID","replace","c","r","Math","random","v","toString","parseFrame","data","frame","JSON","parse","_typeof","includes","type","_unused","createRequestFrame","method","params","id","getPlatform","navigator","platform","getUserAgent","userAgent","getLocale","language","isWebSocketSupported","WebSocket","formatWebSocketUrl","url","startsWith","concat","calculateBackoffDelay","attempt","baseDelay","maxDelay","arguments","length","undefined","jitter","delay","pow","min","jitterRange","floor","safeJsonParse","fallback","_unused2","deepMerge","target","source","result","_objectSpread","key","Object","prototype","hasOwnProperty","call","targetValue","sourceValue","Array","isArray"],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/utils.ts"],"sourcesContent":["/**\n * OpenClaw 工具函数\n */\nimport type { OpenClawFrame, OpenClawRequestFrame, OpenClawResponseFrame, OpenClawEventFrame } from './types';\n\n/**\n * 生成 UUID\n */\nexport function generateUUID(): string {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n\n/**\n * 解析 OpenClaw 消息帧\n */\nexport function parseFrame(data: string | object): OpenClawFrame | null {\n try {\n const frame = typeof data === 'string' ? JSON.parse(data) : data;\n if (!frame || typeof frame !== 'object') {\n return null;\n }\n if (!['req', 'res', 'event'].includes(frame.type)) {\n return null;\n }\n return frame as OpenClawFrame;\n } catch {\n return null;\n }\n}\n\n/**\n * 创建请求帧\n */\nexport function createRequestFrame<T extends Record<string, unknown>>(\n method: string,\n params: T,\n id?: string,\n): OpenClawRequestFrame<T> {\n return {\n type: 'req',\n id: id || generateUUID(),\n method,\n params,\n };\n}\n\n/**\n * 获取平台信息\n */\nexport function getPlatform(): string {\n if (typeof navigator !== 'undefined') {\n return navigator.platform || 'web';\n }\n return 'web';\n}\n\n/**\n * 获取 User Agent\n */\nexport function getUserAgent(): string {\n if (typeof navigator !== 'undefined') {\n return navigator.userAgent;\n }\n return 'TDesign-ChatEngine/1.0';\n}\n\n/**\n * 获取语言环境\n */\nexport function getLocale(): string {\n if (typeof navigator !== 'undefined') {\n return navigator.language || 'en-US';\n }\n return 'en-US';\n}\n\n/**\n * 检查 WebSocket 是否可用\n */\nexport function isWebSocketSupported(): boolean {\n return typeof WebSocket !== 'undefined';\n}\n\n/**\n * 格式化 WebSocket URL\n * 确保 URL 使用正确的协议\n */\nexport function formatWebSocketUrl(url: string): string {\n if (url.startsWith('ws://') || url.startsWith('wss://')) {\n return url;\n }\n // 如果是 http/https,转换为 ws/wss\n if (url.startsWith('https://')) {\n return url.replace('https://', 'wss://');\n }\n if (url.startsWith('http://')) {\n return url.replace('http://', 'ws://');\n }\n // 默认添加 ws://\n return `ws://${url}`;\n}\n\n/**\n * 计算指数退避延迟\n */\nexport function calculateBackoffDelay(\n attempt: number,\n baseDelay: number,\n maxDelay = 30000,\n jitter = true,\n): number {\n let delay = baseDelay * Math.pow(1.5, attempt - 1);\n delay = Math.min(delay, maxDelay);\n \n if (jitter) {\n // 添加 ±10% 的抖动\n const jitterRange = delay * 0.1;\n delay += (Math.random() - 0.5) * 2 * jitterRange;\n }\n \n return Math.floor(delay);\n}\n\n/**\n * 安全的 JSON 解析\n */\nexport function safeJsonParse<T>(data: string, fallback: T): T {\n try {\n return JSON.parse(data) as T;\n } catch {\n return fallback;\n }\n}\n\n/**\n * 深度合并对象\n */\nexport function deepMerge<T extends Record<string, unknown>>(target: T, source: Partial<T>): T {\n const result = { ...target };\n \n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n const targetValue = result[key];\n const sourceValue = source[key];\n \n if (\n typeof targetValue === 'object' &&\n targetValue !== null &&\n typeof sourceValue === 'object' &&\n sourceValue !== null &&\n !Array.isArray(targetValue) &&\n !Array.isArray(sourceValue)\n ) {\n result[key] = deepMerge(\n targetValue as Record<string, unknown>,\n sourceValue as Record<string, unknown>,\n ) as T[typeof key];\n } else if (sourceValue !== undefined) {\n result[key] = sourceValue as T[typeof key];\n }\n }\n }\n \n return result;\n}\n\n// ============= Ed25519 设备签名工具 =============\n\n/**\n * 从 PEM 格式中提取 Base64 编码的密钥数据\n */\nfunction extractKeyFromPem(pem: string): string {\n return pem\n .replace(/-----BEGIN [\\w\\s]+-----/, '')\n .replace(/-----END [\\w\\s]+-----/, '')\n .replace(/\\s/g, '');\n}\n\n/**\n * 从 PEM 格式的公钥中提取原始公钥字节(32 字节)\n * Ed25519 公钥的 SPKI DER 结构为 12 字节头 + 32 字节公钥\n */\nfunction extractRawPublicKey(publicKeyPem: string): string {\n const b64 = extractKeyFromPem(publicKeyPem);\n const binary = atob(b64);\n // SPKI 编码的 Ed25519 公钥:前 12 字节是 ASN.1 头,后 32 字节是实际公钥\n const rawBytes = binary.slice(12);\n // 转为 Base64 返回\n return btoa(rawBytes);\n}\n\n/**\n * Base64 转 Base64 URL-safe 编码(无 padding)\n */\nfunction base64ToBase64Url(base64: string): string {\n return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\n\n/**\n * Base64 字符串转 Uint8Array\n */\nfunction base64ToUint8Array(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\n/**\n * Uint8Array 转 Base64 URL-safe 编码\n */\nfunction uint8ArrayToBase64Url(bytes: Uint8Array): string {\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return base64ToBase64Url(btoa(binary));\n}\n\n/**\n * 使用 Ed25519 私钥对数据进行签名\n *\n * @param privateKeyPem - PEM 格式的 Ed25519 私钥\n * @param data - 要签名的数据(UTF-8 字符串)\n * @returns Base64 URL-safe 编码的签名\n */\nexport async function signWithEd25519(privateKeyPem: string, data: string): Promise<string> {\n const keyData = extractKeyFromPem(privateKeyPem);\n const keyBytes = base64ToUint8Array(keyData);\n\n // 导入 Ed25519 私钥(PKCS8 格式)\n const cryptoKey = await crypto.subtle.importKey(\n 'pkcs8',\n keyBytes.buffer,\n { name: 'Ed25519' },\n false,\n ['sign'],\n );\n\n // 签名\n const encoder = new TextEncoder();\n const dataBytes = encoder.encode(data);\n const signature = await crypto.subtle.sign('Ed25519', cryptoKey, dataBytes);\n\n return uint8ArrayToBase64Url(new Uint8Array(signature));\n}\n\n/**\n * 构建设备签名对象,用于 connect 握手\n *\n * @param deviceConfig - 设备配置(id, publicKeyPem, privateKeyPem)\n * @param nonce - 来自 connect.challenge 的随机数\n * @returns 签名后的 device 对象,可直接放入 ConnectParams\n */\nexport async function buildDeviceSignature(\n deviceConfig: { id: string; publicKeyPem: string; privateKeyPem: string },\n nonce: string,\n): Promise<{\n id: string;\n nonce: string;\n publicKey: string;\n signature: string;\n signedAt: number;\n}> {\n const signedAt = Date.now();\n const signature = await signWithEd25519(deviceConfig.privateKeyPem, nonce);\n const publicKey = base64ToBase64Url(extractRawPublicKey(deviceConfig.publicKeyPem));\n\n return {\n id: deviceConfig.id,\n nonce,\n publicKey,\n signature,\n signedAt,\n };\n}\n"],"names":["generateUUID","replace","c","r","Math","random","v","toString","parseFrame","data","frame","JSON","parse","_typeof","includes","type","_unused","createRequestFrame","method","params","id","getPlatform","navigator","platform","getUserAgent","userAgent","getLocale","language","isWebSocketSupported","WebSocket","formatWebSocketUrl","url","startsWith","concat","calculateBackoffDelay","attempt","baseDelay","maxDelay","arguments","length","undefined","jitter","delay","pow","min","jitterRange","floor","safeJsonParse","fallback","_unused2","deepMerge","target","source","result","_objectSpread","key","Object","prototype","hasOwnProperty","call","targetValue","sourceValue","Array","isArray","extractKeyFromPem","pem","extractRawPublicKey","publicKeyPem","b64","binary","atob","rawBytes","slice","btoa","base64ToBase64Url","base64","base64ToUint8Array","bytes","Uint8Array","i","charCodeAt","uint8ArrayToBase64Url","String","fromCharCode","signWithEd25519","_x","_x2","_signWithEd","apply","_asyncToGenerator","_regeneratorRuntime","mark","_callee","privateKeyPem","keyData","keyBytes","cryptoKey","encoder","dataBytes","signature","wrap","_context","prev","next","crypto","subtle","importKey","buffer","name","sent","TextEncoder","encode","sign","stop","buildDeviceSignature","_x3","_x4","_buildDeviceSignature","_callee2","deviceConfig","nonce","signedAt","publicKey","_context2","Date","now","abrupt"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -49,7 +49,7 @@ import './utils/immutable-patch.js';
49
49
  import '@babel/runtime/helpers/toArray';
50
50
  import '@babel/runtime/helpers/get';
51
51
  import './store/reactiveState.js';
52
- import '../../_chunks/dep-93283bbd.js';
52
+ import '../../_chunks/dep-b4eec30f.js';
53
53
  import './server/types.js';
54
54
  import './server/errors.js';
55
55
  import './server/connection-manager.js';
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -114,6 +114,10 @@ export declare class WebSocketClient extends EventEmitter {
114
114
  private scheduleReconnect;
115
115
  /**
116
116
  * 启动心跳
117
+ *
118
+ * 注意:OpenClaw Gateway 不支持 RPC 方式的 heartbeat 方法,
119
+ * 这里仅通过检测连接活跃度来判断是否需要重连,
120
+ * 不再主动发送 heartbeat 请求帧。
117
121
  */
118
122
  private startHeartbeat;
119
123
  /**
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.12
2
+ * tdesign v1.1.0-alpha.14
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -306,15 +306,14 @@ var WebSocketClient = /*#__PURE__*/function (_EventEmitter) {
306
306
  var _this4 = this;
307
307
  if (this.config.heartbeatInterval <= 0) return;
308
308
  this.heartbeatTimer = setInterval(function () {
309
- if (_this4.isConnected()) {
310
- _this4.send({
311
- type: "req",
312
- id: "heartbeat_".concat(Date.now()),
313
- method: "heartbeat",
314
- params: {
315
- ts: Date.now()
316
- }
317
- });
309
+ if (!_this4.isConnected()) {
310
+ return;
311
+ }
312
+ var idleTime = Date.now() - _this4.connectionInfo.lastActivity;
313
+ if (idleTime > _this4.config.heartbeatInterval * 2) {
314
+ var _this4$ws;
315
+ _this4.logger.warn("WebSocket ".concat(_this4.connectionId, " idle for ").concat(idleTime, "ms, reconnecting..."));
316
+ (_this4$ws = _this4.ws) === null || _this4$ws === void 0 || _this4$ws.close(4e3, "Heartbeat timeout");
318
317
  }
319
318
  }, this.config.heartbeatInterval);
320
319
  }