@tdesign-react/chat 1.1.0-alpha.17 → 1.1.0-alpha.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (169) hide show
  1. package/es/_chunks/dep-5d7a98b7.js +169 -0
  2. package/es/_chunks/dep-5d7a98b7.js.map +1 -0
  3. package/es/_chunks/dep-907337f3.js +1247 -0
  4. package/es/_chunks/dep-907337f3.js.map +1 -0
  5. package/es/_chunks/dep-ee7a509c.js +438 -0
  6. package/es/_chunks/dep-ee7a509c.js.map +1 -0
  7. package/es/_util/reactify.js +1 -1
  8. package/es/_util/useDynamicStyle.js +1 -1
  9. package/es/attachments/index.js +1 -1
  10. package/es/chat-actionbar/index.js +1 -1
  11. package/es/chat-engine/components/activity/index.js +2 -2
  12. package/es/chat-engine/components/activity/registry.js +1 -1
  13. package/es/chat-engine/components/activity/render.js +2 -2
  14. package/es/chat-engine/components/activity/types.js +1 -1
  15. package/es/chat-engine/components/index.js +5 -4
  16. package/es/chat-engine/components/index.js.map +1 -1
  17. package/es/chat-engine/components/json-render/catalog/atomic/button.js +1 -1
  18. package/es/chat-engine/components/json-render/catalog/atomic/card.js +1 -1
  19. package/es/chat-engine/components/json-render/catalog/atomic/input.js +5 -4
  20. package/es/chat-engine/components/json-render/catalog/atomic/input.js.map +1 -1
  21. package/es/chat-engine/components/json-render/catalog/atomic/layout.js +1 -1
  22. package/es/chat-engine/components/json-render/catalog/atomic/text.js +1 -1
  23. package/es/chat-engine/components/json-render/catalog/catalog-to-prompt.js +1 -1
  24. package/es/chat-engine/components/json-render/contexts/actions.js +2 -2
  25. package/es/chat-engine/components/json-render/contexts/data.js +2 -2
  26. package/es/chat-engine/components/json-render/contexts/index.js +2 -2
  27. package/es/chat-engine/components/json-render/contexts/store.js +1 -1
  28. package/es/chat-engine/components/json-render/contexts/tree.js +1 -1
  29. package/es/chat-engine/components/json-render/contexts/validation.js +2 -2
  30. package/es/chat-engine/components/json-render/contexts/visibility.js +2 -2
  31. package/es/chat-engine/components/json-render/index.js +5 -4
  32. package/es/chat-engine/components/json-render/index.js.map +1 -1
  33. package/es/chat-engine/components/json-render/registry/a2ui-binding.js +5 -4
  34. package/es/chat-engine/components/json-render/registry/a2ui-binding.js.map +1 -1
  35. package/es/chat-engine/components/json-render/registry/a2ui-registry.js +5 -4
  36. package/es/chat-engine/components/json-render/registry/a2ui-registry.js.map +1 -1
  37. package/es/chat-engine/components/json-render/registry/config.js +5 -4
  38. package/es/chat-engine/components/json-render/registry/config.js.map +1 -1
  39. package/es/chat-engine/components/json-render/registry/index.js +5 -4
  40. package/es/chat-engine/components/json-render/registry/index.js.map +1 -1
  41. package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js +4 -3
  42. package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js.map +1 -1
  43. package/es/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.js +3 -3
  44. package/es/chat-engine/components/json-render/renderer/JsonUIRenderer.js +2 -2
  45. package/es/chat-engine/components/json-render/renderer/_index.js +2 -2
  46. package/es/chat-engine/components/json-render/types.js +1 -1
  47. package/es/chat-engine/components/provider/agent-state.js +3 -2
  48. package/es/chat-engine/components/provider/agent-state.js.map +1 -1
  49. package/es/chat-engine/components/shared/ComponentErrorBoundary.js +1 -1
  50. package/es/chat-engine/components/shared/createRegistry.js +1 -1
  51. package/es/chat-engine/components/shared/index.js +1 -1
  52. package/es/chat-engine/components/shared/useRegistrationListener.js +1 -1
  53. package/es/chat-engine/components/toolcall/index.js +3 -2
  54. package/es/chat-engine/components/toolcall/index.js.map +1 -1
  55. package/es/chat-engine/components/toolcall/registry.js +1 -1
  56. package/es/chat-engine/components/toolcall/render.js +3 -2
  57. package/es/chat-engine/components/toolcall/render.js.map +1 -1
  58. package/es/chat-engine/components/toolcall/types.js +1 -1
  59. package/es/chat-engine/core/adapters/a2ui/index.js +1 -1
  60. package/es/chat-engine/core/adapters/a2ui/processor/A2uiMessageProcessor.js +1 -1
  61. package/es/chat-engine/core/adapters/a2ui/processor/ComponentTree.js +1 -1
  62. package/es/chat-engine/core/adapters/a2ui/processor/DataStore.js +1 -1
  63. package/es/chat-engine/core/adapters/a2ui/processor/PathResolver.js +1 -1
  64. package/es/chat-engine/core/adapters/a2ui/types/index.js +1 -1
  65. package/es/chat-engine/core/adapters/a2ui/types/types.js +1 -1
  66. package/es/chat-engine/core/adapters/a2ui/utils/binding.js +1 -1
  67. package/es/chat-engine/core/adapters/a2ui/utils/index.js +1 -1
  68. package/es/chat-engine/core/adapters/a2ui/utils/validation.js +1 -1
  69. package/es/chat-engine/core/adapters/agui/ActivityManager.js +1 -1
  70. package/es/chat-engine/core/adapters/agui/StateManager.js +1 -1
  71. package/es/chat-engine/core/adapters/agui/event-mapper.js +1 -1
  72. package/es/chat-engine/core/adapters/agui/index.js +16 -2
  73. package/es/chat-engine/core/adapters/agui/index.js.map +1 -1
  74. package/es/chat-engine/core/adapters/agui/types/events.js +1 -1
  75. package/es/chat-engine/core/adapters/agui/types/index.js +1 -1
  76. package/es/chat-engine/core/adapters/agui/utils.js +1 -1
  77. package/es/chat-engine/core/adapters/index.js +2 -1
  78. package/es/chat-engine/core/adapters/index.js.map +1 -1
  79. package/es/chat-engine/core/adapters/json-render/SurfaceStateManager.js +1 -1
  80. package/es/chat-engine/core/adapters/json-render/a2ui-to-jsonrender.js +1 -1
  81. package/es/chat-engine/core/adapters/json-render/engine.js +1 -1
  82. package/es/chat-engine/core/adapters/json-render/index.js +1 -1
  83. package/es/chat-engine/core/adapters/json-render/types/a2ui.js +1 -1
  84. package/es/chat-engine/core/adapters/json-render/types/core.js +1 -1
  85. package/es/chat-engine/core/adapters/json-render/types/index.js +1 -1
  86. package/es/chat-engine/core/adapters/openclaw/device-key-manager.d.ts +65 -0
  87. package/es/chat-engine/core/adapters/openclaw/device-key-manager.js +375 -0
  88. package/es/chat-engine/core/adapters/openclaw/device-key-manager.js.map +1 -0
  89. package/es/chat-engine/core/adapters/openclaw/event-mapper.js +2 -1
  90. package/es/chat-engine/core/adapters/openclaw/event-mapper.js.map +1 -1
  91. package/es/chat-engine/core/adapters/openclaw/history-converter.js +1 -1
  92. package/es/chat-engine/core/adapters/openclaw/index.d.ts +11 -0
  93. package/es/chat-engine/core/adapters/openclaw/index.js +70 -17
  94. package/es/chat-engine/core/adapters/openclaw/index.js.map +1 -1
  95. package/es/chat-engine/core/adapters/openclaw/rpc-handler.js +1 -1
  96. package/es/chat-engine/core/adapters/openclaw/types/config.d.ts +21 -0
  97. package/es/chat-engine/core/adapters/openclaw/types/config.js +8 -4
  98. package/es/chat-engine/core/adapters/openclaw/types/config.js.map +1 -1
  99. package/es/chat-engine/core/adapters/openclaw/types/events.d.ts +3 -1
  100. package/es/chat-engine/core/adapters/openclaw/types/events.js +2 -1
  101. package/es/chat-engine/core/adapters/openclaw/types/events.js.map +1 -1
  102. package/es/chat-engine/core/adapters/openclaw/types/index.js +1 -1
  103. package/es/chat-engine/core/adapters/openclaw/types/messages.d.ts +13 -0
  104. package/es/chat-engine/core/adapters/openclaw/types/messages.js +1 -1
  105. package/es/chat-engine/core/adapters/openclaw/types/messages.js.map +1 -1
  106. package/es/chat-engine/core/adapters/openclaw/utils.js +1 -1
  107. package/es/chat-engine/core/adapters/shared/activity-manager.js +1 -1
  108. package/es/chat-engine/core/adapters/shared/content-factory.js +1 -1
  109. package/es/chat-engine/core/adapters/shared/index.js +1 -1
  110. package/es/chat-engine/core/adapters/shared/merge-utils.js +1 -1
  111. package/es/chat-engine/core/event-bus/ChatEventBus.js +1 -1
  112. package/es/chat-engine/core/event-bus/index.js +1 -1
  113. package/es/chat-engine/core/event-bus/types.js +1 -1
  114. package/es/chat-engine/core/index.d.ts +3 -1
  115. package/es/chat-engine/core/index.js +150 -111
  116. package/es/chat-engine/core/index.js.map +1 -1
  117. package/es/chat-engine/core/processor/index.js +1 -1
  118. package/es/chat-engine/core/server/batch-client.js +1 -1
  119. package/es/chat-engine/core/server/connection-manager.js +1 -1
  120. package/es/chat-engine/core/server/errors.js +1 -1
  121. package/es/chat-engine/core/server/index.js +1 -1
  122. package/es/chat-engine/core/server/llm-service.js +1 -1
  123. package/es/chat-engine/core/server/sse-client.js +1 -1
  124. package/es/chat-engine/core/server/sse-parser.js +1 -1
  125. package/es/chat-engine/core/server/types.js +1 -1
  126. package/es/chat-engine/core/server/websocket-client.d.ts +2 -0
  127. package/es/chat-engine/core/server/websocket-client.js +19 -3
  128. package/es/chat-engine/core/server/websocket-client.js.map +1 -1
  129. package/es/chat-engine/core/store/message.js +2 -2
  130. package/es/chat-engine/core/store/model.js +2 -2
  131. package/es/chat-engine/core/store/reactiveState.js +2 -2
  132. package/es/chat-engine/core/stream-handlers/agui-stream-handler.js +1 -1
  133. package/es/chat-engine/core/stream-handlers/default-stream-handler.js +1 -1
  134. package/es/chat-engine/core/stream-handlers/index.js +4 -3
  135. package/es/chat-engine/core/stream-handlers/index.js.map +1 -1
  136. package/es/chat-engine/core/stream-handlers/openclaw-stream-handler.d.ts +8 -0
  137. package/es/chat-engine/core/stream-handlers/openclaw-stream-handler.js +73 -22
  138. package/es/chat-engine/core/stream-handlers/openclaw-stream-handler.js.map +1 -1
  139. package/es/chat-engine/core/stream-handlers/types.d.ts +1 -1
  140. package/es/chat-engine/core/stream-handlers/types.js +1 -1
  141. package/es/chat-engine/core/type.js +1 -1
  142. package/es/chat-engine/core/utils/eventEmitter.js +1 -1
  143. package/es/chat-engine/core/utils/immutable-patch.js +1 -1
  144. package/es/chat-engine/core/utils/index.js +1 -1
  145. package/es/chat-engine/core/utils/json-patch/helpers.js +1 -1
  146. package/es/chat-engine/core/utils/json-patch/index.js +1 -1
  147. package/es/chat-engine/core/utils/logger.js +1 -1
  148. package/es/chat-engine/core/utils/performance.js +1 -1
  149. package/es/chat-engine/hooks/index.js +3 -2
  150. package/es/chat-engine/hooks/index.js.map +1 -1
  151. package/es/chat-engine/hooks/useAgentActivity.js +1 -1
  152. package/es/chat-engine/hooks/useAgentState.js +3 -2
  153. package/es/chat-engine/hooks/useAgentState.js.map +1 -1
  154. package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
  155. package/es/chat-engine/hooks/useChat.js +34 -10
  156. package/es/chat-engine/hooks/useChat.js.map +1 -1
  157. package/es/chat-engine/index.js +7 -6
  158. package/es/chat-engine/index.js.map +1 -1
  159. package/es/chat-filecard/index.js +1 -1
  160. package/es/chat-loading/index.js +1 -1
  161. package/es/chat-markdown/index.js +1 -1
  162. package/es/chat-message/index.js +1 -1
  163. package/es/chat-sender/index.js +1 -1
  164. package/es/chat-thinking/index.js +1 -1
  165. package/es/chatbot/index.js +1 -1
  166. package/es/index.js +5 -4
  167. package/es/index.js.map +1 -1
  168. package/es/style/index.js +1 -1
  169. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -19,8 +19,10 @@ import '../event-bus/index.js';
19
19
  import '../event-bus/ChatEventBus.js';
20
20
  import '@babel/runtime/helpers/toConsumableArray';
21
21
  import '../event-bus/types.js';
22
+ import '@babel/runtime/helpers/typeof';
22
23
  import '../utils/logger.js';
23
24
  import '../adapters/openclaw/index.js';
25
+ import '@babel/runtime/helpers/objectWithoutProperties';
24
26
  import '@babel/runtime/helpers/possibleConstructorReturn';
25
27
  import '@babel/runtime/helpers/getPrototypeOf';
26
28
  import '@babel/runtime/helpers/inherits';
@@ -29,7 +31,6 @@ import '../server/websocket-client.js';
29
31
  import '../server/errors.js';
30
32
  import '@babel/runtime/helpers/wrapNativeSuper';
31
33
  import '../adapters/openclaw/event-mapper.js';
32
- import '@babel/runtime/helpers/typeof';
33
34
  import '../adapters/openclaw/types/events.js';
34
35
  import '../adapters/shared/index.js';
35
36
  import '../adapters/shared/content-factory.js';
@@ -39,12 +40,12 @@ import '../adapters/shared/activity-manager.js';
39
40
  import '../adapters/agui/ActivityManager.js';
40
41
  import '../utils/index.js';
41
42
  import '../utils/immutable-patch.js';
42
- import '@babel/runtime/helpers/objectWithoutProperties';
43
43
  import '@babel/runtime/helpers/toArray';
44
44
  import '../adapters/openclaw/rpc-handler.js';
45
45
  import '../adapters/openclaw/types/config.js';
46
46
  import '../adapters/openclaw/utils.js';
47
47
  import '../adapters/openclaw/history-converter.js';
48
+ import '../adapters/openclaw/device-key-manager.js';
48
49
  import '../adapters/openclaw/types/index.js';
49
50
  import '../adapters/openclaw/types/messages.js';
50
51
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../pro-components/chat/chat-engine/core/stream-handlers/index.ts"],"sourcesContent":["/**\n * StreamHandler 模块\n *\n * 统一导出 + 工厂函数\n */\nexport type { IStreamHandler, StreamContext } from './types';\nexport { DefaultStreamHandler } from './default-stream-handler';\nexport { AGUIStreamHandler } from './agui-stream-handler';\nexport { OpenClawStreamHandler } from './openclaw-stream-handler';\n\nimport type { AGUIAdapter } from '../adapters/agui';\nimport { LLMService } from '../server';\nimport type { IStreamHandler } from './types';\nimport { DefaultStreamHandler } from './default-stream-handler';\nimport { AGUIStreamHandler } from './agui-stream-handler';\nimport { OpenClawStreamHandler } from './openclaw-stream-handler';\n\nexport interface CreateStreamHandlerOptions {\n protocol?: 'default' | 'agui' | 'openclaw';\n llmService: LLMService;\n aguiAdapter?: AGUIAdapter | null;\n}\n\n/**\n * 工厂函数:根据协议类型创建对应的 StreamHandler\n */\nexport function createStreamHandler(options: CreateStreamHandlerOptions): IStreamHandler {\n const { protocol, llmService, aguiAdapter } = options;\n\n switch (protocol) {\n case 'agui':\n if (!aguiAdapter) {\n throw new Error('AGUIAdapter is required for agui protocol');\n }\n return new AGUIStreamHandler(llmService, aguiAdapter);\n\n case 'openclaw':\n return new OpenClawStreamHandler({ llmService });\n\n default:\n return new DefaultStreamHandler(llmService);\n }\n}\n"],"names":["createStreamHandler","options","protocol","llmService","aguiAdapter","Error","AGUIStreamHandler","OpenClawStreamHandler","DefaultStreamHandler"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BO,SAASA,oBAAoBC,OAAqD,EAAA;AACvF,EAAA,IAAQC,QAAA,GAAsCD,OAAA,CAAtCC,QAAA;IAAUC,UAAY,GAAgBF,OAAA,CAA5BE,UAAY;IAAAC,WAAA,GAAgBH,OAAA,CAAhBG,WAAA,CAAA;AAEtB,EAAA,QAAAF,QAAA;AACD,IAAA,KAAA,MAAA;MACH,IAAI,CAACE,WAAa,EAAA;AACV,QAAA,MAAA,IAAIC,MAAM,2CAA2C,CAAA,CAAA;AAC7D,OAAA;AACO,MAAA,OAAA,IAAIC,iBAAkB,CAAAH,UAAA,EAAYC,WAAW,CAAA,CAAA;AAEjD,IAAA,KAAA,UAAA;MACH,OAAO,IAAIG,qBAAAA,CAAsB;AAAEJ,QAAAA,UAAA,EAAAA,UAAAA;AAAW,OAAC,CAAA,CAAA;AAAA,IAAA;AAGxC,MAAA,OAAA,IAAIK,qBAAqBL,UAAU,CAAA,CAAA;AAAA,GAAA;AAEhD;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../pro-components/chat/chat-engine/core/stream-handlers/index.ts"],"sourcesContent":["/**\n * StreamHandler 模块\n *\n * 统一导出 + 工厂函数\n */\nexport type { IStreamHandler, StreamContext } from './types';\nexport { DefaultStreamHandler } from './default-stream-handler';\nexport { AGUIStreamHandler } from './agui-stream-handler';\nexport { OpenClawStreamHandler } from './openclaw-stream-handler';\n\nimport type { AGUIAdapter } from '../adapters/agui';\nimport { LLMService } from '../server';\nimport type { IStreamHandler } from './types';\nimport { DefaultStreamHandler } from './default-stream-handler';\nimport { AGUIStreamHandler } from './agui-stream-handler';\nimport { OpenClawStreamHandler } from './openclaw-stream-handler';\n\nexport interface CreateStreamHandlerOptions {\n protocol?: 'default' | 'agui' | 'openclaw';\n llmService: LLMService;\n aguiAdapter?: AGUIAdapter | null;\n}\n\n/**\n * 工厂函数:根据协议类型创建对应的 StreamHandler\n */\nexport function createStreamHandler(options: CreateStreamHandlerOptions): IStreamHandler {\n const { protocol, llmService, aguiAdapter } = options;\n\n switch (protocol) {\n case 'agui':\n if (!aguiAdapter) {\n throw new Error('AGUIAdapter is required for agui protocol');\n }\n return new AGUIStreamHandler(llmService, aguiAdapter);\n\n case 'openclaw':\n return new OpenClawStreamHandler({ llmService });\n\n default:\n return new DefaultStreamHandler(llmService);\n }\n}\n"],"names":["createStreamHandler","options","protocol","llmService","aguiAdapter","Error","AGUIStreamHandler","OpenClawStreamHandler","DefaultStreamHandler"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BO,SAASA,oBAAoBC,OAAqD,EAAA;AACvF,EAAA,IAAQC,QAAA,GAAsCD,OAAA,CAAtCC,QAAA;IAAUC,UAAY,GAAgBF,OAAA,CAA5BE,UAAY;IAAAC,WAAA,GAAgBH,OAAA,CAAhBG,WAAA,CAAA;AAEtB,EAAA,QAAAF,QAAA;AACD,IAAA,KAAA,MAAA;MACH,IAAI,CAACE,WAAa,EAAA;AACV,QAAA,MAAA,IAAIC,MAAM,2CAA2C,CAAA,CAAA;AAC7D,OAAA;AACO,MAAA,OAAA,IAAIC,iBAAkB,CAAAH,UAAA,EAAYC,WAAW,CAAA,CAAA;AAEjD,IAAA,KAAA,UAAA;MACH,OAAO,IAAIG,qBAAAA,CAAsB;AAAEJ,QAAAA,UAAA,EAAAA,UAAAA;AAAW,OAAC,CAAA,CAAA;AAAA,IAAA;AAGxC,MAAA,OAAA,IAAIK,qBAAqBL,UAAU,CAAA,CAAA;AAAA,GAAA;AAEhD;;;;"}
@@ -41,6 +41,14 @@ export declare class OpenClawStreamHandler implements IStreamHandler {
41
41
  * 获取适配器实例(供外部调用 invokeAction 等)
42
42
  */
43
43
  getAdapter(): OpenClawAdapter | null;
44
+ /**
45
+ * 从 onRequest 获取认证信息,传给 adapter 用于 connect 握手
46
+ *
47
+ * onRequest 返回值中如果包含 `auth` 字段(如 `{ auth: { token: '...' } }`),
48
+ * 会被提取出来作为 connect 握手的认证参数。
49
+ * 其他字段(如 sessionKey、message)属于 sendMessage 阶段使用,不会传入 connect。
50
+ */
51
+ private prepareConnectAuth;
44
52
  /**
45
53
  * 确保 OpenClaw 适配器已创建
46
54
  */
@@ -1,9 +1,10 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
6
6
 
7
+ import _typeof from '@babel/runtime/helpers/typeof';
7
8
  import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
8
9
  import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
9
10
  import _createClass from '@babel/runtime/helpers/createClass';
@@ -15,6 +16,7 @@ import { OpenClawAdapter } from '../adapters/openclaw/index.js';
15
16
  import { ChatEngineEventType } from '../event-bus/types.js';
16
17
  import '../event-bus/ChatEventBus.js';
17
18
  import '@babel/runtime/helpers/toConsumableArray';
19
+ import '@babel/runtime/helpers/objectWithoutProperties';
18
20
  import '@babel/runtime/helpers/possibleConstructorReturn';
19
21
  import '@babel/runtime/helpers/getPrototypeOf';
20
22
  import '@babel/runtime/helpers/inherits';
@@ -23,7 +25,6 @@ import '../server/websocket-client.js';
23
25
  import '../server/errors.js';
24
26
  import '@babel/runtime/helpers/wrapNativeSuper';
25
27
  import '../adapters/openclaw/event-mapper.js';
26
- import '@babel/runtime/helpers/typeof';
27
28
  import '../adapters/openclaw/types/events.js';
28
29
  import '../adapters/shared/index.js';
29
30
  import '../adapters/shared/content-factory.js';
@@ -33,12 +34,12 @@ import '../adapters/shared/activity-manager.js';
33
34
  import '../adapters/agui/ActivityManager.js';
34
35
  import '../utils/index.js';
35
36
  import '../utils/immutable-patch.js';
36
- import '@babel/runtime/helpers/objectWithoutProperties';
37
37
  import '@babel/runtime/helpers/toArray';
38
38
  import '../adapters/openclaw/rpc-handler.js';
39
39
  import '../adapters/openclaw/types/config.js';
40
40
  import '../adapters/openclaw/utils.js';
41
41
  import '../adapters/openclaw/history-converter.js';
42
+ import '../adapters/openclaw/device-key-manager.js';
42
43
  import '../adapters/openclaw/types/index.js';
43
44
  import '../adapters/openclaw/types/messages.js';
44
45
 
@@ -63,24 +64,27 @@ var OpenClawStreamHandler = /*#__PURE__*/function () {
63
64
  this.updateCallbacks(config, onHistoryLoaded);
64
65
  _context.prev = 1;
65
66
  if (this.openclawAdapter.isAuthenticated()) {
66
- _context.next = 2;
67
+ _context.next = 3;
67
68
  break;
68
69
  }
69
70
  _context.next = 2;
70
- return this.openclawAdapter.connect();
71
+ return this.prepareConnectAuth(config);
71
72
  case 2:
72
- _context.next = 4;
73
- break;
73
+ _context.next = 3;
74
+ return this.openclawAdapter.connect();
74
75
  case 3:
75
- _context.prev = 3;
76
+ _context.next = 5;
77
+ break;
78
+ case 4:
79
+ _context.prev = 4;
76
80
  _t = _context["catch"](1);
77
81
  (_config$onError = config.onError) === null || _config$onError === void 0 || _config$onError.call(config, _t);
78
82
  this.logger.error("OpenClaw pre-connect failed:", _t);
79
- case 4:
83
+ case 5:
80
84
  case "end":
81
85
  return _context.stop();
82
86
  }
83
- }, _callee, this, [[1, 3]]);
87
+ }, _callee, this, [[1, 4]]);
84
88
  }));
85
89
  function initConnection(_x, _x2) {
86
90
  return _initConnection.apply(this, arguments);
@@ -100,40 +104,43 @@ var OpenClawStreamHandler = /*#__PURE__*/function () {
100
104
  this.updateStreamCallbacks(config, context);
101
105
  _context2.prev = 1;
102
106
  if (this.openclawAdapter.isAuthenticated()) {
103
- _context2.next = 2;
107
+ _context2.next = 3;
104
108
  break;
105
109
  }
106
110
  _context2.next = 2;
107
- return this.openclawAdapter.connect();
111
+ return this.prepareConnectAuth(config);
108
112
  case 2:
109
113
  _context2.next = 3;
110
- return (_config$onRequest = config.onRequest) === null || _config$onRequest === void 0 ? void 0 : _config$onRequest.call(config, params);
114
+ return this.openclawAdapter.connect();
111
115
  case 3:
116
+ _context2.next = 4;
117
+ return (_config$onRequest = config.onRequest) === null || _config$onRequest === void 0 ? void 0 : _config$onRequest.call(config, params);
118
+ case 4:
112
119
  _t2 = _context2.sent;
113
120
  if (_t2) {
114
- _context2.next = 4;
121
+ _context2.next = 5;
115
122
  break;
116
123
  }
117
124
  _t2 = {};
118
- case 4:
125
+ case 5:
119
126
  requestParams = _t2;
120
- _context2.next = 5;
127
+ _context2.next = 6;
121
128
  return this.openclawAdapter.sendMessage(params, requestParams);
122
- case 5:
123
- _context2.next = 7;
124
- break;
125
129
  case 6:
126
- _context2.prev = 6;
130
+ _context2.next = 8;
131
+ break;
132
+ case 7:
133
+ _context2.prev = 7;
127
134
  _t3 = _context2["catch"](1);
128
135
  if (messageId) {
129
136
  context.handleError(messageId, _t3);
130
137
  }
131
138
  throw _t3;
132
- case 7:
139
+ case 8:
133
140
  case "end":
134
141
  return _context2.stop();
135
142
  }
136
- }, _callee2, this, [[1, 6]]);
143
+ }, _callee2, this, [[1, 7]]);
137
144
  }));
138
145
  function handleStream(_x3, _x4) {
139
146
  return _handleStream.apply(this, arguments);
@@ -177,6 +184,50 @@ var OpenClawStreamHandler = /*#__PURE__*/function () {
177
184
  value: function getAdapter() {
178
185
  return this.openclawAdapter;
179
186
  }
187
+ }, {
188
+ key: "prepareConnectAuth",
189
+ value: function () {
190
+ var _prepareConnectAuth = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4(config) {
191
+ var requestParams, auth, _t4;
192
+ return _regeneratorRuntime.wrap(function (_context4) {
193
+ while (1) switch (_context4.prev = _context4.next) {
194
+ case 0:
195
+ if (!(!this.openclawAdapter || !config.onRequest)) {
196
+ _context4.next = 1;
197
+ break;
198
+ }
199
+ return _context4.abrupt("return");
200
+ case 1:
201
+ _context4.prev = 1;
202
+ _context4.next = 2;
203
+ return config.onRequest({
204
+ prompt: ""
205
+ });
206
+ case 2:
207
+ requestParams = _context4.sent;
208
+ if (requestParams) {
209
+ auth = requestParams.auth;
210
+ if (auth && _typeof(auth) === "object") {
211
+ this.openclawAdapter.setConnectAuth(auth);
212
+ }
213
+ }
214
+ _context4.next = 4;
215
+ break;
216
+ case 3:
217
+ _context4.prev = 3;
218
+ _t4 = _context4["catch"](1);
219
+ this.logger.warn("Failed to get connect auth from onRequest:", _t4);
220
+ case 4:
221
+ case "end":
222
+ return _context4.stop();
223
+ }
224
+ }, _callee4, this, [[1, 3]]);
225
+ }));
226
+ function prepareConnectAuth(_x5) {
227
+ return _prepareConnectAuth.apply(this, arguments);
228
+ }
229
+ return prepareConnectAuth;
230
+ }()
180
231
  }, {
181
232
  key: "ensureAdapter",
182
233
  value: function ensureAdapter(config) {
@@ -1 +1 @@
1
- {"version":3,"file":"openclaw-stream-handler.js","sources":["../../../../../pro-components/chat/chat-engine/core/stream-handlers/openclaw-stream-handler.ts"],"sourcesContent":["/**\n * OpenClaw 协议流式处理器\n *\n * 负责 OpenClaw WebSocket 连接的完整生命周期管理:\n * - 适配器创建与持有(从 LLMService 移入)\n * - 连接建立与认证\n * - 消息发送与流式响应\n * - 历史消息接收\n *\n * OpenClaw 的 chunk.data 已经是 AIMessageContent 格式(由 OpenClawAdapter 转换)\n */\nimport type { AIMessageContent, ChatRequestParams, ChatServiceConfig, SSEChunkData } from '../type';\nimport { ChatEngineEventType } from '../event-bus';\nimport { LoggerManager } from '../utils/logger';\nimport {\n OpenClawAdapter,\n type OpenClawAdapterConfig,\n} from '../adapters/openclaw';\nimport type { IStreamHandler, StreamContext } from './types';\nimport type { LLMService } from '../server';\n\nexport interface OpenClawStreamHandlerOptions {\n /** LLM 服务引用(用于 SSE/Batch 的 abort) */\n llmService: LLMService;\n}\n\nexport class OpenClawStreamHandler implements IStreamHandler {\n private openclawAdapter: OpenClawAdapter | null = null;\n private llmService: LLMService;\n private logger = LoggerManager.getLogger();\n\n constructor(options: OpenClawStreamHandlerOptions) {\n this.llmService = options.llmService;\n }\n\n /**\n * 初始化:在 ChatEngine.init() 阶段预建立 WebSocket 连接\n *\n * Gateway 会在 connect 响应中推送历史消息,通过 onHistoryLoaded 自动回填。\n */\n async initConnection(config: ChatServiceConfig, onHistoryLoaded?: (messages: any[]) => void): Promise<void> {\n this.ensureAdapter(config);\n this.updateCallbacks(config, onHistoryLoaded);\n\n try {\n if (!this.openclawAdapter!.isAuthenticated()) {\n await this.openclawAdapter!.connect();\n }\n } catch (error) {\n config.onError?.(error as Error);\n // 连接失败不抛出,允许后续 sendMessage 时重试\n this.logger.error('OpenClaw pre-connect failed:', error);\n }\n }\n\n async handleStream(params: ChatRequestParams, context: StreamContext): Promise<void> {\n const { messageId, config } = context;\n\n this.ensureAdapter(config);\n this.updateStreamCallbacks(config, context);\n\n try {\n // 连接 WebSocket(如果未连接,比如 init 阶段连接失败需要重试)\n if (!this.openclawAdapter!.isAuthenticated()) {\n await this.openclawAdapter!.connect();\n }\n\n // 通过 onRequest 获取用户自定义的业务参数\n const requestParams = (await config.onRequest?.(params)) || {};\n\n // 发送消息(requestParams 包含用户自定义的 sessionKey、token 等)\n await this.openclawAdapter!.sendMessage(params, requestParams as Record<string, unknown>);\n } catch (error) {\n if (messageId) {\n context.handleError(messageId, error);\n }\n throw error;\n }\n }\n\n /**\n * 中止当前请求\n */\n abort(): void {\n this.openclawAdapter?.abort();\n }\n\n /**\n * 销毁处理器,释放 OpenClaw 连接资源\n */\n async destroy(): Promise<void> {\n if (this.openclawAdapter) {\n await this.openclawAdapter.destroy();\n this.openclawAdapter = null;\n }\n }\n\n /**\n * 获取适配器实例(供外部调用 invokeAction 等)\n */\n getAdapter(): OpenClawAdapter | null {\n return this.openclawAdapter;\n }\n\n // ==================== 内部方法 ====================\n\n /**\n * 确保 OpenClaw 适配器已创建\n */\n private ensureAdapter(config: ChatServiceConfig): void {\n if (this.openclawAdapter) return;\n\n const openclawConfig = config.openclaw || {};\n\n const adapterConfig: OpenClawAdapterConfig = {\n endpoint: config.endpoint!,\n timeout: config.timeout,\n maxRetries: config.maxRetries,\n retryInterval: config.retryInterval,\n ...openclawConfig,\n };\n\n this.openclawAdapter = new OpenClawAdapter(adapterConfig);\n }\n\n /**\n * 更新 init 阶段的回调(连接 + 历史消息)\n */\n private updateCallbacks(config: ChatServiceConfig, onHistoryLoaded?: (messages: any[]) => void): void {\n if (!this.openclawAdapter) return;\n\n this.openclawAdapter.setCallbacks({\n onConnected: () => {\n this.logger.info('OpenClaw connected');\n },\n onStart: () => {\n config.onStart?.('openclaw:stream:start');\n },\n onMessage: () => {\n // init 阶段无需处理消息\n },\n onComplete: () => {\n // init 阶段无需处理完成\n },\n onError: (error) => {\n config.onError?.(error);\n },\n onHistoryLoaded: (messages) => {\n this.logger.info(`OpenClaw history loaded: ${messages.length} messages`);\n onHistoryLoaded?.(messages);\n },\n });\n }\n\n /**\n * 更新流式请求阶段的回调(消息处理 + 事件发布)\n */\n private updateStreamCallbacks(config: ChatServiceConfig, context: StreamContext): void {\n if (!this.openclawAdapter) return;\n\n const { messageId } = context;\n\n this.openclawAdapter.setCallbacks({\n onConnected: () => {\n this.logger.info('OpenClaw connected');\n },\n onStart: () => {\n config.onStart?.('openclaw:stream:start');\n },\n onMessage: (content) => {\n if (context.getStopReceive() || !messageId) return;\n\n // OpenClaw 的 content 已经是 AIMessageContent 格式(由 OpenClawAdapter 转换)\n const chunk: SSEChunkData = {\n event: 'openclaw',\n data: content,\n };\n let result: AIMessageContent | AIMessageContent[] | null = content;\n\n // 允许用户通过 onMessage 进行自定义处理\n if (config.onMessage) {\n const userResult = config.onMessage(chunk, context.messageStore.getMessageByID(messageId), result);\n if (userResult) {\n result = userResult;\n }\n }\n\n // 发布流数据事件\n context.eventBus.emit(ChatEngineEventType.REQUEST_STREAM, {\n messageId,\n chunk,\n content: result,\n });\n\n // 处理消息结果\n context.processMessageResult(messageId, result);\n },\n onComplete: (isAborted, requestParams) => {\n if (messageId) {\n context.handleComplete(messageId, isAborted, requestParams || context.config);\n }\n },\n onError: (error) => {\n if (messageId) context.handleError(messageId, error);\n },\n onHistoryLoaded: (messages) => {\n // 流式阶段不应再处理历史消息\n this.logger.info(`OpenClaw history loaded during stream: ${messages.length} messages (ignored)`);\n },\n });\n }\n}\n"],"names":["OpenClawStreamHandler","options","_classCallCheck","_defineProperty","LoggerManager","getLogger","llmService","_createClass","key","value","_initConnection","_asyncToGenerator","_regeneratorRuntime","mark","_callee","config","onHistoryLoaded","_config$onError","_t","wrap","_context","prev","next","ensureAdapter","updateCallbacks","openclawAdapter","isAuthenticated","connect","onError","call","logger","error","stop","initConnection","_x","_x2","apply","arguments","_handleStream","_callee2","params","context","messageId","_config$onRequest","requestParams","_t2","_t3","_context2","updateStreamCallbacks","onRequest","sendMessage","handleError","handleStream","_x3","_x4","abort","_this$openclawAdapter","_destroy","_callee3","_context3","destroy","getAdapter","openclawConfig","openclaw","adapterConfig","_objectSpread","endpoint","timeout","maxRetries","retryInterval","OpenClawAdapter","_this","setCallbacks","onConnected","info","onStart","_config$onStart","onMessage","onComplete","_config$onError2","messages","concat","length","_this2","_config$onStart2","content","getStopReceive","chunk","event","data","result","userResult","messageStore","getMessageByID","eventBus","emit","ChatEngineEventType","REQUEST_STREAM","processMessageResult","isAborted","handleComplete"],"mappings":"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"}
1
+ {"version":3,"file":"openclaw-stream-handler.js","sources":["../../../../../pro-components/chat/chat-engine/core/stream-handlers/openclaw-stream-handler.ts"],"sourcesContent":["/**\n * OpenClaw 协议流式处理器\n *\n * 负责 OpenClaw WebSocket 连接的完整生命周期管理:\n * - 适配器创建与持有(从 LLMService 移入)\n * - 连接建立与认证\n * - 消息发送与流式响应\n * - 历史消息接收\n *\n * OpenClaw 的 chunk.data 已经是 AIMessageContent 格式(由 OpenClawAdapter 转换)\n */\nimport type { AIMessageContent, ChatRequestParams, ChatServiceConfig, SSEChunkData } from '../type';\nimport { ChatEngineEventType } from '../event-bus';\nimport { LoggerManager } from '../utils/logger';\nimport {\n OpenClawAdapter,\n type OpenClawAdapterConfig,\n} from '../adapters/openclaw';\nimport type { IStreamHandler, StreamContext } from './types';\nimport type { LLMService } from '../server';\n\nexport interface OpenClawStreamHandlerOptions {\n /** LLM 服务引用(用于 SSE/Batch 的 abort) */\n llmService: LLMService;\n}\n\nexport class OpenClawStreamHandler implements IStreamHandler {\n private openclawAdapter: OpenClawAdapter | null = null;\n private llmService: LLMService;\n private logger = LoggerManager.getLogger();\n\n constructor(options: OpenClawStreamHandlerOptions) {\n this.llmService = options.llmService;\n }\n\n /**\n * 初始化:在 ChatEngine.init() 阶段预建立 WebSocket 连接\n *\n * Gateway 会在 connect 响应中推送历史消息,通过 onHistoryLoaded 自动回填。\n */\n async initConnection(config: ChatServiceConfig, onHistoryLoaded?: (messages: any[]) => void): Promise<void> {\n this.ensureAdapter(config);\n this.updateCallbacks(config, onHistoryLoaded);\n\n try {\n if (!this.openclawAdapter!.isAuthenticated()) {\n // 在 connect 前获取认证信息(token 等),传给 adapter 用于握手\n await this.prepareConnectAuth(config);\n await this.openclawAdapter!.connect();\n }\n } catch (error) {\n config.onError?.(error as Error);\n // 连接失败不抛出,允许后续 sendMessage 时重试\n this.logger.error('OpenClaw pre-connect failed:', error);\n }\n }\n\n async handleStream(params: ChatRequestParams, context: StreamContext): Promise<void> {\n const { messageId, config } = context;\n\n this.ensureAdapter(config);\n this.updateStreamCallbacks(config, context);\n\n try {\n // 连接 WebSocket(如果未连接,比如 init 阶段连接失败需要重试)\n if (!this.openclawAdapter!.isAuthenticated()) {\n await this.prepareConnectAuth(config);\n await this.openclawAdapter!.connect();\n }\n\n // 通过 onRequest 获取用户自定义的业务参数\n const requestParams = (await config.onRequest?.(params)) || {};\n\n // 发送消息(requestParams 包含用户自定义的 sessionKey、token 等)\n await this.openclawAdapter!.sendMessage(params, requestParams as Record<string, unknown>);\n } catch (error) {\n if (messageId) {\n context.handleError(messageId, error);\n }\n throw error;\n }\n }\n\n /**\n * 中止当前请求\n */\n abort(): void {\n this.openclawAdapter?.abort();\n }\n\n /**\n * 销毁处理器,释放 OpenClaw 连接资源\n */\n async destroy(): Promise<void> {\n if (this.openclawAdapter) {\n await this.openclawAdapter.destroy();\n this.openclawAdapter = null;\n }\n }\n\n /**\n * 获取适配器实例(供外部调用 invokeAction 等)\n */\n getAdapter(): OpenClawAdapter | null {\n return this.openclawAdapter;\n }\n\n // ==================== 内部方法 ====================\n\n /**\n * 从 onRequest 获取认证信息,传给 adapter 用于 connect 握手\n *\n * onRequest 返回值中如果包含 `auth` 字段(如 `{ auth: { token: '...' } }`),\n * 会被提取出来作为 connect 握手的认证参数。\n * 其他字段(如 sessionKey、message)属于 sendMessage 阶段使用,不会传入 connect。\n */\n private async prepareConnectAuth(config: ChatServiceConfig): Promise<void> {\n if (!this.openclawAdapter || !config.onRequest) return;\n\n try {\n // 用空的 params 调用 onRequest,仅获取 auth 信息\n const requestParams = await config.onRequest({ prompt: '' } as ChatRequestParams);\n if (requestParams) {\n const { auth } = requestParams as Record<string, unknown>;\n if (auth && typeof auth === 'object') {\n this.openclawAdapter.setConnectAuth(auth as Record<string, unknown>);\n }\n }\n } catch (error) {\n this.logger.warn('Failed to get connect auth from onRequest:', error);\n }\n }\n\n /**\n * 确保 OpenClaw 适配器已创建\n */\n private ensureAdapter(config: ChatServiceConfig): void {\n if (this.openclawAdapter) return;\n\n const openclawConfig = config.openclaw || {};\n\n const adapterConfig: OpenClawAdapterConfig = {\n endpoint: config.endpoint!,\n timeout: config.timeout,\n maxRetries: config.maxRetries,\n retryInterval: config.retryInterval,\n ...openclawConfig,\n };\n\n this.openclawAdapter = new OpenClawAdapter(adapterConfig);\n }\n\n /**\n * 更新 init 阶段的回调(连接 + 历史消息)\n */\n private updateCallbacks(config: ChatServiceConfig, onHistoryLoaded?: (messages: any[]) => void): void {\n if (!this.openclawAdapter) return;\n\n this.openclawAdapter.setCallbacks({\n onConnected: () => {\n this.logger.info('OpenClaw connected');\n },\n onStart: () => {\n config.onStart?.('openclaw:stream:start');\n },\n onMessage: () => {\n // init 阶段无需处理消息\n },\n onComplete: () => {\n // init 阶段无需处理完成\n },\n onError: (error) => {\n config.onError?.(error);\n },\n onHistoryLoaded: (messages) => {\n this.logger.info(`OpenClaw history loaded: ${messages.length} messages`);\n onHistoryLoaded?.(messages);\n },\n });\n }\n\n /**\n * 更新流式请求阶段的回调(消息处理 + 事件发布)\n */\n private updateStreamCallbacks(config: ChatServiceConfig, context: StreamContext): void {\n if (!this.openclawAdapter) return;\n\n const { messageId } = context;\n\n this.openclawAdapter.setCallbacks({\n onConnected: () => {\n this.logger.info('OpenClaw connected');\n },\n onStart: () => {\n config.onStart?.('openclaw:stream:start');\n },\n onMessage: (content) => {\n if (context.getStopReceive() || !messageId) return;\n\n // OpenClaw 的 content 已经是 AIMessageContent 格式(由 OpenClawAdapter 转换)\n const chunk: SSEChunkData = {\n event: 'openclaw',\n data: content,\n };\n let result: AIMessageContent | AIMessageContent[] | null = content;\n\n // 允许用户通过 onMessage 进行自定义处理\n if (config.onMessage) {\n const userResult = config.onMessage(chunk, context.messageStore.getMessageByID(messageId), result);\n if (userResult) {\n result = userResult;\n }\n }\n\n // 发布流数据事件\n context.eventBus.emit(ChatEngineEventType.REQUEST_STREAM, {\n messageId,\n chunk,\n content: result,\n });\n\n // 处理消息结果\n context.processMessageResult(messageId, result);\n },\n onComplete: (isAborted, requestParams) => {\n if (messageId) {\n context.handleComplete(messageId, isAborted, requestParams || context.config);\n }\n },\n onError: (error) => {\n if (messageId) context.handleError(messageId, error);\n },\n onHistoryLoaded: (messages) => {\n // 流式阶段不应再处理历史消息\n this.logger.info(`OpenClaw history loaded during stream: ${messages.length} messages (ignored)`);\n },\n });\n }\n}\n"],"names":["OpenClawStreamHandler","options","_classCallCheck","_defineProperty","LoggerManager","getLogger","llmService","_createClass","key","value","_initConnection","_asyncToGenerator","_regeneratorRuntime","mark","_callee","config","onHistoryLoaded","_config$onError","_t","wrap","_context","prev","next","ensureAdapter","updateCallbacks","openclawAdapter","isAuthenticated","prepareConnectAuth","connect","onError","call","logger","error","stop","initConnection","_x","_x2","apply","arguments","_handleStream","_callee2","params","context","messageId","_config$onRequest","requestParams","_t2","_t3","_context2","updateStreamCallbacks","onRequest","sendMessage","handleError","handleStream","_x3","_x4","abort","_this$openclawAdapter","_destroy","_callee3","_context3","destroy","getAdapter","_prepareConnectAuth","_callee4","auth","_t4","_context4","abrupt","prompt","_typeof","setConnectAuth","warn","openclawConfig","openclaw","adapterConfig","_objectSpread","endpoint","timeout","maxRetries","retryInterval","OpenClawAdapter","_this","setCallbacks","onConnected","info","onStart","_config$onStart","onMessage","onComplete","_config$onError2","messages","concat","length","_this2","_config$onStart2","content","getStopReceive","chunk","event","data","result","userResult","messageStore","getMessageByID","eventBus","emit","ChatEngineEventType","REQUEST_STREAM","processMessageResult","isAborted","handleComplete"],"mappings":"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"}
@@ -43,5 +43,5 @@ export interface IStreamHandler {
43
43
  /**
44
44
  * 销毁处理器,释放资源
45
45
  */
46
- destroy?(): void;
46
+ destroy?(): void | Promise<void>;
47
47
  }
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -36,7 +36,7 @@ import '../core/adapters/agui/utils.js';
36
36
  import '../core/store/message.js';
37
37
  import '@babel/runtime/helpers/get';
38
38
  import '../core/store/reactiveState.js';
39
- import '../../_chunks/dep-13265eca.js';
39
+ import '../../_chunks/dep-907337f3.js';
40
40
  import '../core/event-bus/index.js';
41
41
  import '../core/event-bus/ChatEventBus.js';
42
42
  import '../core/event-bus/types.js';
@@ -67,6 +67,7 @@ import '../core/adapters/openclaw/rpc-handler.js';
67
67
  import '../core/adapters/openclaw/types/config.js';
68
68
  import '../core/adapters/openclaw/utils.js';
69
69
  import '../core/adapters/openclaw/history-converter.js';
70
+ import '../core/adapters/openclaw/device-key-manager.js';
70
71
  import '../core/adapters/openclaw/types/index.js';
71
72
  import '../core/adapters/openclaw/types/messages.js';
72
73
  import '../core/adapters/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -32,7 +32,7 @@ import '../core/adapters/agui/utils.js';
32
32
  import '../core/store/message.js';
33
33
  import '@babel/runtime/helpers/get';
34
34
  import '../core/store/reactiveState.js';
35
- import '../../_chunks/dep-13265eca.js';
35
+ import '../../_chunks/dep-907337f3.js';
36
36
  import '../core/event-bus/index.js';
37
37
  import '../core/event-bus/ChatEventBus.js';
38
38
  import '../core/event-bus/types.js';
@@ -63,6 +63,7 @@ import '../core/adapters/openclaw/rpc-handler.js';
63
63
  import '../core/adapters/openclaw/types/config.js';
64
64
  import '../core/adapters/openclaw/utils.js';
65
65
  import '../core/adapters/openclaw/history-converter.js';
66
+ import '../core/adapters/openclaw/device-key-manager.js';
66
67
  import '../core/adapters/openclaw/types/index.js';
67
68
  import '../core/adapters/openclaw/types/messages.js';
68
69
  import '../core/adapters/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"useAgentState.js","sources":["../../../../pro-components/chat/chat-engine/hooks/useAgentState.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport { useState, useEffect, useRef, createContext, useContext, useMemo } from 'react';\n// import { stateManager } from 'tdesign-web-components/lib/chat-engine';\nimport { stateManager } from '../core';\n\n/**\n * 状态订阅相关类型定义\n */\n\nexport interface StateActionOptions {\n /**\n * 初始状态\n */\n initialState?: Record<string, any>;\n /**\n * 只订阅特定key的变化\n */\n subscribeKey?: string;\n}\n\nexport interface UseStateActionReturn {\n /**\n * 全量状态Map - 包含所有stateKey的状态\n * 格式: { [stateKey]: stateData }\n */\n stateMap: Record<string, any>;\n /**\n * 当前最新的状态key\n */\n currentStateKey: string | null;\n /**\n * 设置状态Map,用于加载历史对话消息中的state数据\n */\n setStateMap: (stateMap: Record<string, any> | ((prev: Record<string, any>) => Record<string, any>)) => void;\n /**\n * 获取当前完整状态的方法\n */\n getCurrentState: () => Record<string, any>;\n /**\n * 获取特定 key 状态的方法\n */\n getStateByKey: (key: string) => any;\n}\n\nexport const useAgentState = <T = any>(options: StateActionOptions = {}): UseStateActionReturn => {\n const { initialState, subscribeKey } = options;\n const [stateMap, setStateMap] = useState<Record<string, any>>(initialState || {});\n const [currentStateKey, setCurrentStateKey] = useState<string | null>(null);\n\n // 使用 ref 来避免不必要的重新渲染\n const stateMapRef = useRef(stateMap);\n stateMapRef.current = stateMap;\n\n useEffect(\n () =>\n stateManager.subscribeToLatest((newState: T, newStateKey: string) => {\n // 如果指定了 subscribeKey,只有匹配时才更新状态\n if (subscribeKey && newStateKey !== subscribeKey) {\n // 仍然更新内部状态,但不触发重新渲染\n stateMapRef.current = {\n ...stateMapRef.current,\n [newStateKey]: newState,\n };\n return;\n }\n\n setStateMap((prev) => ({\n ...prev,\n [newStateKey]: newState,\n }));\n setCurrentStateKey(newStateKey);\n }),\n [subscribeKey],\n );\n\n return {\n stateMap: stateMapRef.current,\n currentStateKey,\n setStateMap,\n getCurrentState: () => stateMapRef.current,\n getStateByKey: (key: string) => stateMapRef.current[key],\n };\n};\n\n// 创建 AgentState Context\nexport const AgentStateContext = createContext<UseStateActionReturn | null>(null);\n\n// 简化的状态选择器\nexport const useAgentStateDataByKey = (stateKey?: string) => {\n const contextState = useContext(AgentStateContext);\n const independentState = useAgentState({ subscribeKey: stateKey });\n\n return useMemo(() => {\n if (contextState) {\n // 有 Provider,使用 Context 状态\n const { stateMap } = contextState;\n return stateKey ? stateMap[stateKey] : stateMap;\n }\n\n // 没有 Provider,使用独立状态\n const { stateMap } = independentState;\n return stateKey ? stateMap[stateKey] : stateMap;\n }, [\n stateKey,\n // 关键:添加和 useAgentStateByKey 相同的深度依赖逻辑\n contextState && (stateKey ? contextState.stateMap[stateKey] : JSON.stringify(contextState.stateMap)),\n independentState && (stateKey ? independentState.stateMap[stateKey] : JSON.stringify(independentState.stateMap)),\n ]);\n};\n\n// 导出 Context Hook\nexport const useAgentStateContext = (): UseStateActionReturn => {\n const context = useContext(AgentStateContext);\n\n if (!context) {\n throw new Error('useAgentState must be used within AgentStateProvider');\n }\n\n return context;\n};\n"],"names":["useAgentState","options","arguments","length","undefined","initialState","subscribeKey","_useState","useState","_useState2","_slicedToArray","stateMap","setStateMap","_useState3","_useState4","currentStateKey","setCurrentStateKey","stateMapRef","useRef","current","useEffect","stateManager","subscribeToLatest","newState","newStateKey","_objectSpread","_defineProperty","prev","getCurrentState","getStateByKey","key","AgentStateContext","createContext","useAgentStateDataByKey","stateKey","contextState","useContext","independentState","useMemo","JSON","stringify","useAgentStateContext","context","Error"],"mappings":"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"}
1
+ {"version":3,"file":"useAgentState.js","sources":["../../../../pro-components/chat/chat-engine/hooks/useAgentState.ts"],"sourcesContent":["/* eslint-disable react-hooks/exhaustive-deps */\nimport { useState, useEffect, useRef, createContext, useContext, useMemo } from 'react';\n// import { stateManager } from 'tdesign-web-components/lib/chat-engine';\nimport { stateManager } from '../core';\n\n/**\n * 状态订阅相关类型定义\n */\n\nexport interface StateActionOptions {\n /**\n * 初始状态\n */\n initialState?: Record<string, any>;\n /**\n * 只订阅特定key的变化\n */\n subscribeKey?: string;\n}\n\nexport interface UseStateActionReturn {\n /**\n * 全量状态Map - 包含所有stateKey的状态\n * 格式: { [stateKey]: stateData }\n */\n stateMap: Record<string, any>;\n /**\n * 当前最新的状态key\n */\n currentStateKey: string | null;\n /**\n * 设置状态Map,用于加载历史对话消息中的state数据\n */\n setStateMap: (stateMap: Record<string, any> | ((prev: Record<string, any>) => Record<string, any>)) => void;\n /**\n * 获取当前完整状态的方法\n */\n getCurrentState: () => Record<string, any>;\n /**\n * 获取特定 key 状态的方法\n */\n getStateByKey: (key: string) => any;\n}\n\nexport const useAgentState = <T = any>(options: StateActionOptions = {}): UseStateActionReturn => {\n const { initialState, subscribeKey } = options;\n const [stateMap, setStateMap] = useState<Record<string, any>>(initialState || {});\n const [currentStateKey, setCurrentStateKey] = useState<string | null>(null);\n\n // 使用 ref 来避免不必要的重新渲染\n const stateMapRef = useRef(stateMap);\n stateMapRef.current = stateMap;\n\n useEffect(\n () =>\n stateManager.subscribeToLatest((newState: T, newStateKey: string) => {\n // 如果指定了 subscribeKey,只有匹配时才更新状态\n if (subscribeKey && newStateKey !== subscribeKey) {\n // 仍然更新内部状态,但不触发重新渲染\n stateMapRef.current = {\n ...stateMapRef.current,\n [newStateKey]: newState,\n };\n return;\n }\n\n setStateMap((prev) => ({\n ...prev,\n [newStateKey]: newState,\n }));\n setCurrentStateKey(newStateKey);\n }),\n [subscribeKey],\n );\n\n return {\n stateMap: stateMapRef.current,\n currentStateKey,\n setStateMap,\n getCurrentState: () => stateMapRef.current,\n getStateByKey: (key: string) => stateMapRef.current[key],\n };\n};\n\n// 创建 AgentState Context\nexport const AgentStateContext = createContext<UseStateActionReturn | null>(null);\n\n// 简化的状态选择器\nexport const useAgentStateDataByKey = (stateKey?: string) => {\n const contextState = useContext(AgentStateContext);\n const independentState = useAgentState({ subscribeKey: stateKey });\n\n return useMemo(() => {\n if (contextState) {\n // 有 Provider,使用 Context 状态\n const { stateMap } = contextState;\n return stateKey ? stateMap[stateKey] : stateMap;\n }\n\n // 没有 Provider,使用独立状态\n const { stateMap } = independentState;\n return stateKey ? stateMap[stateKey] : stateMap;\n }, [\n stateKey,\n // 关键:添加和 useAgentStateByKey 相同的深度依赖逻辑\n contextState && (stateKey ? contextState.stateMap[stateKey] : JSON.stringify(contextState.stateMap)),\n independentState && (stateKey ? independentState.stateMap[stateKey] : JSON.stringify(independentState.stateMap)),\n ]);\n};\n\n// 导出 Context Hook\nexport const useAgentStateContext = (): UseStateActionReturn => {\n const context = useContext(AgentStateContext);\n\n if (!context) {\n throw new Error('useAgentState must be used within AgentStateProvider');\n }\n\n return context;\n};\n"],"names":["useAgentState","options","arguments","length","undefined","initialState","subscribeKey","_useState","useState","_useState2","_slicedToArray","stateMap","setStateMap","_useState3","_useState4","currentStateKey","setCurrentStateKey","stateMapRef","useRef","current","useEffect","stateManager","subscribeToLatest","newState","newStateKey","_objectSpread","_defineProperty","prev","getCurrentState","getStateByKey","key","AgentStateContext","createContext","useAgentStateDataByKey","stateKey","contextState","useContext","independentState","useMemo","JSON","stringify","useAgentStateContext","context","Error"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
@@ -1,18 +1,18 @@
1
1
  /**
2
- * tdesign v1.1.0-alpha.16
2
+ * tdesign v1.1.0-alpha.17
3
3
  * (c) 2026 tdesign
4
4
  * @license MIT
5
5
  */
6
6
 
7
+ import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
7
8
  import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
9
+ import _regeneratorRuntime from '@babel/runtime/regenerator';
8
10
  import { useState, useRef, useEffect } from 'react';
9
11
  import ChatEngine from '../core/index.js';
10
12
  import '@babel/runtime/helpers/objectWithoutProperties';
11
- import '@babel/runtime/helpers/asyncToGenerator';
12
13
  import '@babel/runtime/helpers/classCallCheck';
13
14
  import '@babel/runtime/helpers/createClass';
14
15
  import '@babel/runtime/helpers/defineProperty';
15
- import '@babel/runtime/regenerator';
16
16
  import '../core/adapters/agui/index.js';
17
17
  import '../core/adapters/agui/event-mapper.js';
18
18
  import '@babel/runtime/helpers/toConsumableArray';
@@ -32,7 +32,7 @@ import '../core/adapters/agui/utils.js';
32
32
  import '../core/store/message.js';
33
33
  import '@babel/runtime/helpers/get';
34
34
  import '../core/store/reactiveState.js';
35
- import '../../_chunks/dep-13265eca.js';
35
+ import '../../_chunks/dep-907337f3.js';
36
36
  import '../core/event-bus/index.js';
37
37
  import '../core/event-bus/ChatEventBus.js';
38
38
  import '../core/event-bus/types.js';
@@ -63,6 +63,7 @@ import '../core/adapters/openclaw/rpc-handler.js';
63
63
  import '../core/adapters/openclaw/types/config.js';
64
64
  import '../core/adapters/openclaw/utils.js';
65
65
  import '../core/adapters/openclaw/history-converter.js';
66
+ import '../core/adapters/openclaw/device-key-manager.js';
66
67
  import '../core/adapters/openclaw/types/index.js';
67
68
  import '../core/adapters/openclaw/types/messages.js';
68
69
  import '../core/adapters/index.js';
@@ -101,16 +102,39 @@ var useChat = function useChat(_ref) {
101
102
  syncState(state.messages);
102
103
  });
103
104
  };
104
- var initChat = function initChat() {
105
- chatEngine.init(chatServiceConfig, initialMessages);
106
- syncState(initialMessages);
107
- subscribeToChat();
108
- };
109
105
  useEffect(function () {
106
+ var isMounted = true;
107
+ var initChat = /*#__PURE__*/function () {
108
+ var _ref2 = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
109
+ return _regeneratorRuntime.wrap(function (_context) {
110
+ while (1) switch (_context.prev = _context.next) {
111
+ case 0:
112
+ _context.next = 1;
113
+ return chatEngine.init(chatServiceConfig, initialMessages);
114
+ case 1:
115
+ if (isMounted) {
116
+ _context.next = 2;
117
+ break;
118
+ }
119
+ return _context.abrupt("return");
120
+ case 2:
121
+ syncState(initialMessages);
122
+ subscribeToChat();
123
+ case 3:
124
+ case "end":
125
+ return _context.stop();
126
+ }
127
+ }, _callee);
128
+ }));
129
+ return function initChat() {
130
+ return _ref2.apply(this, arguments);
131
+ };
132
+ }();
110
133
  initChat();
111
134
  return function () {
112
135
  var _msgSubscribeRef$curr2;
113
- return (_msgSubscribeRef$curr2 = msgSubscribeRef.current) === null || _msgSubscribeRef$curr2 === void 0 ? void 0 : _msgSubscribeRef$curr2.call(msgSubscribeRef);
136
+ isMounted = false;
137
+ (_msgSubscribeRef$curr2 = msgSubscribeRef.current) === null || _msgSubscribeRef$curr2 === void 0 || _msgSubscribeRef$curr2.call(msgSubscribeRef);
114
138
  };
115
139
  }, []);
116
140
  useEffect(function () {