@tdesign-react/chat 1.1.0-alpha.11 → 1.1.0-alpha.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/_chunks/dep-58d90dfe.js +438 -0
- package/es/_chunks/dep-58d90dfe.js.map +1 -0
- package/es/_chunks/dep-771678df.js +438 -0
- package/es/_chunks/dep-771678df.js.map +1 -0
- package/es/_chunks/dep-93283bbd.js +1247 -0
- package/es/_chunks/dep-93283bbd.js.map +1 -0
- package/es/_chunks/dep-dbdfe7d6.js +169 -0
- package/es/_chunks/dep-dbdfe7d6.js.map +1 -0
- package/es/_util/reactify.js +1 -1
- package/es/_util/useDynamicStyle.js +1 -1
- package/es/attachments/index.js +1 -1
- package/es/chat-actionbar/index.js +1 -1
- package/es/chat-engine/components/activity/index.js +2 -2
- package/es/chat-engine/components/activity/registry.js +1 -1
- package/es/chat-engine/components/activity/render.js +2 -2
- package/es/chat-engine/components/activity/types.js +1 -1
- package/es/chat-engine/components/index.js +17 -4
- package/es/chat-engine/components/index.js.map +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/button.js +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/card.js +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/input.js +17 -4
- package/es/chat-engine/components/json-render/catalog/atomic/input.js.map +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/layout.js +1 -1
- package/es/chat-engine/components/json-render/catalog/atomic/text.js +1 -1
- package/es/chat-engine/components/json-render/catalog/catalog-to-prompt.js +1 -1
- package/es/chat-engine/components/json-render/contexts/actions.js +2 -2
- package/es/chat-engine/components/json-render/contexts/data.js +2 -2
- package/es/chat-engine/components/json-render/contexts/index.js +2 -2
- package/es/chat-engine/components/json-render/contexts/store.js +1 -1
- package/es/chat-engine/components/json-render/contexts/tree.js +1 -1
- package/es/chat-engine/components/json-render/contexts/validation.js +2 -2
- package/es/chat-engine/components/json-render/contexts/visibility.js +2 -2
- package/es/chat-engine/components/json-render/index.js +17 -4
- package/es/chat-engine/components/json-render/index.js.map +1 -1
- package/es/chat-engine/components/json-render/registry/a2ui-binding.js +17 -4
- package/es/chat-engine/components/json-render/registry/a2ui-binding.js.map +1 -1
- package/es/chat-engine/components/json-render/registry/a2ui-registry.js +17 -4
- package/es/chat-engine/components/json-render/registry/a2ui-registry.js.map +1 -1
- package/es/chat-engine/components/json-render/registry/config.js +17 -4
- package/es/chat-engine/components/json-render/registry/config.js.map +1 -1
- package/es/chat-engine/components/json-render/registry/index.js +17 -4
- package/es/chat-engine/components/json-render/registry/index.js.map +1 -1
- package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js +16 -3
- package/es/chat-engine/components/json-render/renderer/A2UIJsonRenderActivityRenderer.js.map +1 -1
- package/es/chat-engine/components/json-render/renderer/JsonRenderActivityRenderer.js +3 -3
- package/es/chat-engine/components/json-render/renderer/JsonUIRenderer.js +2 -2
- package/es/chat-engine/components/json-render/renderer/_index.js +2 -2
- package/es/chat-engine/components/json-render/types.js +1 -1
- package/es/chat-engine/components/provider/agent-state.js +15 -2
- package/es/chat-engine/components/provider/agent-state.js.map +1 -1
- package/es/chat-engine/components/shared/ComponentErrorBoundary.js +1 -1
- package/es/chat-engine/components/shared/createRegistry.js +1 -1
- package/es/chat-engine/components/shared/index.js +1 -1
- package/es/chat-engine/components/shared/useRegistrationListener.js +1 -1
- package/es/chat-engine/components/toolcall/index.js +15 -2
- package/es/chat-engine/components/toolcall/index.js.map +1 -1
- package/es/chat-engine/components/toolcall/registry.js +1 -1
- package/es/chat-engine/components/toolcall/render.js +15 -2
- package/es/chat-engine/components/toolcall/render.js.map +1 -1
- package/es/chat-engine/components/toolcall/types.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/index.js +2 -1
- package/es/chat-engine/core/adapters/a2ui/index.js.map +1 -1
- package/es/chat-engine/core/adapters/a2ui/processor/A2uiMessageProcessor.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/processor/ComponentTree.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/processor/DataStore.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/processor/PathResolver.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/types/index.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/types/types.js +1 -1
- package/es/chat-engine/core/adapters/a2ui/utils/binding.js +2 -1631
- package/es/chat-engine/core/adapters/a2ui/utils/binding.js.map +1 -1
- package/es/chat-engine/core/adapters/a2ui/utils/index.js +2 -1
- package/es/chat-engine/core/adapters/a2ui/utils/index.js.map +1 -1
- package/es/chat-engine/core/adapters/a2ui/utils/validation.js +1 -1
- package/es/chat-engine/core/adapters/agui/ActivityManager.js +1 -1
- package/es/chat-engine/core/adapters/agui/StateManager.js +1 -1
- package/es/chat-engine/core/adapters/agui/event-mapper.js +1 -1
- package/es/chat-engine/core/adapters/agui/index.js +1 -1
- package/es/chat-engine/core/adapters/agui/types/events.js +1 -1
- package/es/chat-engine/core/adapters/agui/types/index.js +1 -1
- package/es/chat-engine/core/adapters/agui/utils.js +1 -1
- package/es/chat-engine/core/adapters/index.d.ts +2 -0
- package/es/chat-engine/core/adapters/index.js +27 -9
- package/es/chat-engine/core/adapters/index.js.map +1 -1
- package/es/chat-engine/core/adapters/json-render/SurfaceStateManager.js +1 -1
- package/es/chat-engine/core/adapters/json-render/a2ui-to-jsonrender.js +1 -1
- package/es/chat-engine/core/adapters/json-render/engine.js +1 -1
- package/es/chat-engine/core/adapters/json-render/index.js +1 -1
- package/es/chat-engine/core/adapters/json-render/types/a2ui.js +1 -1
- package/es/chat-engine/core/adapters/json-render/types/core.js +1 -1
- package/es/chat-engine/core/adapters/json-render/types/index.js +1 -1
- package/es/chat-engine/core/adapters/openclaw/event-mapper.d.ts +212 -0
- package/es/chat-engine/core/adapters/openclaw/event-mapper.js +606 -0
- package/es/chat-engine/core/adapters/openclaw/event-mapper.js.map +1 -0
- package/es/chat-engine/core/adapters/openclaw/index.d.ts +158 -0
- package/es/chat-engine/core/adapters/openclaw/index.js +460 -0
- package/es/chat-engine/core/adapters/openclaw/index.js.map +1 -0
- package/es/chat-engine/core/adapters/openclaw/rpc-handler.d.ts +114 -0
- package/es/chat-engine/core/adapters/openclaw/rpc-handler.js +263 -0
- package/es/chat-engine/core/adapters/openclaw/rpc-handler.js.map +1 -0
- package/es/chat-engine/core/adapters/openclaw/types/config.d.ts +67 -0
- package/es/chat-engine/core/adapters/openclaw/types/config.js +35 -0
- package/es/chat-engine/core/adapters/openclaw/types/config.js.map +1 -0
- package/es/chat-engine/core/adapters/openclaw/types/events.d.ts +121 -0
- package/es/chat-engine/core/adapters/openclaw/types/events.js +71 -0
- package/es/chat-engine/core/adapters/openclaw/types/events.js.map +1 -0
- package/es/chat-engine/core/adapters/openclaw/types/index.d.ts +6 -0
- package/es/chat-engine/core/adapters/openclaw/types/index.js +11 -0
- package/es/chat-engine/core/adapters/openclaw/types/index.js.map +1 -0
- package/es/chat-engine/core/adapters/openclaw/types/messages.d.ts +215 -0
- package/es/chat-engine/core/adapters/openclaw/types/messages.js +18 -0
- package/es/chat-engine/core/adapters/openclaw/types/messages.js.map +1 -0
- package/es/chat-engine/core/adapters/openclaw/utils.d.ts +49 -0
- package/es/chat-engine/core/adapters/openclaw/utils.js +109 -0
- package/es/chat-engine/core/adapters/openclaw/utils.js.map +1 -0
- package/es/chat-engine/core/adapters/shared/activity-manager.d.ts +11 -0
- package/es/chat-engine/core/adapters/shared/activity-manager.js +17 -0
- package/es/chat-engine/core/adapters/shared/activity-manager.js.map +1 -0
- package/es/chat-engine/core/adapters/shared/content-factory.d.ts +7 -0
- package/es/chat-engine/core/adapters/shared/content-factory.js +11 -0
- package/es/chat-engine/core/adapters/shared/content-factory.js.map +1 -0
- package/es/chat-engine/core/adapters/shared/index.d.ts +11 -0
- package/es/chat-engine/core/adapters/shared/index.js +21 -0
- package/es/chat-engine/core/adapters/shared/index.js.map +1 -0
- package/es/chat-engine/core/adapters/shared/merge-utils.d.ts +7 -0
- package/es/chat-engine/core/adapters/shared/merge-utils.js +11 -0
- package/es/chat-engine/core/adapters/shared/merge-utils.js.map +1 -0
- package/es/chat-engine/core/event-bus/ChatEventBus.js +1 -1
- package/es/chat-engine/core/event-bus/index.js +1 -1
- package/es/chat-engine/core/event-bus/types.js +1 -1
- package/es/chat-engine/core/index.d.ts +7 -0
- package/es/chat-engine/core/index.js +83 -8
- package/es/chat-engine/core/index.js.map +1 -1
- package/es/chat-engine/core/processor/index.js +1 -1
- package/es/chat-engine/core/server/batch-client.js +1 -1
- package/es/chat-engine/core/server/connection-manager.js +1 -1
- package/es/chat-engine/core/server/errors.js +1 -1
- package/es/chat-engine/core/server/index.d.ts +1 -0
- package/es/chat-engine/core/server/index.js +22 -1
- package/es/chat-engine/core/server/index.js.map +1 -1
- package/es/chat-engine/core/server/llm-service.d.ts +5 -0
- package/es/chat-engine/core/server/llm-service.js +140 -13
- package/es/chat-engine/core/server/llm-service.js.map +1 -1
- package/es/chat-engine/core/server/sse-client.js +1 -1
- package/es/chat-engine/core/server/sse-parser.js +1 -1
- package/es/chat-engine/core/server/types.js +1 -1
- package/es/chat-engine/core/server/websocket-client.d.ts +139 -0
- package/es/chat-engine/core/server/websocket-client.js +386 -0
- package/es/chat-engine/core/server/websocket-client.js.map +1 -0
- package/es/chat-engine/core/store/message.js +2 -2
- package/es/chat-engine/core/store/model.js +2 -2
- package/es/chat-engine/core/store/reactiveState.js +2 -2
- package/es/chat-engine/core/type.d.ts +7 -1
- package/es/chat-engine/core/type.js +1 -1
- package/es/chat-engine/core/utils/eventEmitter.d.ts +1 -0
- package/es/chat-engine/core/utils/eventEmitter.js +11 -1
- package/es/chat-engine/core/utils/eventEmitter.js.map +1 -1
- package/es/chat-engine/core/utils/immutable-patch.js +1 -1
- package/es/chat-engine/core/utils/index.js +1 -1
- package/es/chat-engine/core/utils/json-patch/helpers.js +1 -1
- package/es/chat-engine/core/utils/json-patch/index.js +1 -1
- package/es/chat-engine/core/utils/logger.js +1 -1
- package/es/chat-engine/core/utils/performance.js +1 -1
- package/es/chat-engine/hooks/index.js +15 -2
- package/es/chat-engine/hooks/index.js.map +1 -1
- package/es/chat-engine/hooks/useAgentActivity.js +1 -1
- package/es/chat-engine/hooks/useAgentState.js +15 -2
- package/es/chat-engine/hooks/useAgentState.js.map +1 -1
- package/es/chat-engine/hooks/useAgentToolcall.js +1 -1
- package/es/chat-engine/hooks/useChat.js +15 -2
- package/es/chat-engine/hooks/useChat.js.map +1 -1
- package/es/chat-engine/index.js +19 -6
- package/es/chat-engine/index.js.map +1 -1
- package/es/chat-filecard/index.js +1 -1
- package/es/chat-loading/index.js +1 -1
- package/es/chat-markdown/index.js +1 -1
- package/es/chat-message/index.js +1 -1
- package/es/chat-sender/index.js +1 -1
- package/es/chat-thinking/index.js +1 -1
- package/es/chatbot/index.js +1 -1
- package/es/index.js +19 -6
- package/es/index.js.map +1 -1
- package/es/style/index.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* tdesign v1.1.0-alpha.12
|
|
3
|
+
* (c) 2026 tdesign
|
|
4
|
+
* @license MIT
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator';
|
|
8
|
+
import _classCallCheck from '@babel/runtime/helpers/classCallCheck';
|
|
9
|
+
import _createClass from '@babel/runtime/helpers/createClass';
|
|
10
|
+
import _possibleConstructorReturn from '@babel/runtime/helpers/possibleConstructorReturn';
|
|
11
|
+
import _getPrototypeOf from '@babel/runtime/helpers/getPrototypeOf';
|
|
12
|
+
import _inherits from '@babel/runtime/helpers/inherits';
|
|
13
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
14
|
+
import _regeneratorRuntime from '@babel/runtime/regenerator';
|
|
15
|
+
import SimpleEventEmitter from '../../utils/eventEmitter.js';
|
|
16
|
+
import { LoggerManager } from '../../utils/logger.js';
|
|
17
|
+
import { WebSocketClient, WebSocketConnectionState } from '../../server/websocket-client.js';
|
|
18
|
+
import { OpenClawEventMapper } from './event-mapper.js';
|
|
19
|
+
export { OpenClawEventMapper } from './event-mapper.js';
|
|
20
|
+
import { OpenClawRPCHandler } from './rpc-handler.js';
|
|
21
|
+
export { OpenClawRPCHandler, RPCError } from './rpc-handler.js';
|
|
22
|
+
import { mergeOpenClawConfig } from './types/config.js';
|
|
23
|
+
export { DEFAULT_OPENCLAW_CONFIG, mergeOpenClawConfig } from './types/config.js';
|
|
24
|
+
import { OpenClawConnectionState, OpenClawEventType } from './types/events.js';
|
|
25
|
+
export { AgentDataType, AgentStreamType, ChatEventState, OpenClawConnectionState, OpenClawEventType, OpenClawMethod } from './types/events.js';
|
|
26
|
+
import { generateUUID, formatWebSocketUrl, parseFrame, getPlatform, getUserAgent, getLocale } from './utils.js';
|
|
27
|
+
import './types/index.js';
|
|
28
|
+
export { isEventFrame, isRequestFrame, isResponseFrame } from './types/messages.js';
|
|
29
|
+
import '../../server/errors.js';
|
|
30
|
+
import '@babel/runtime/helpers/wrapNativeSuper';
|
|
31
|
+
import '@babel/runtime/helpers/typeof';
|
|
32
|
+
import '../shared/index.js';
|
|
33
|
+
import '../shared/content-factory.js';
|
|
34
|
+
import '../agui/utils.js';
|
|
35
|
+
import '@babel/runtime/helpers/toConsumableArray';
|
|
36
|
+
import '../shared/merge-utils.js';
|
|
37
|
+
import '../shared/activity-manager.js';
|
|
38
|
+
import '../agui/ActivityManager.js';
|
|
39
|
+
import '../../utils/index.js';
|
|
40
|
+
import '../../utils/immutable-patch.js';
|
|
41
|
+
import '@babel/runtime/helpers/objectWithoutProperties';
|
|
42
|
+
import '@babel/runtime/helpers/toArray';
|
|
43
|
+
|
|
44
|
+
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; }
|
|
45
|
+
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; }
|
|
46
|
+
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
|
|
47
|
+
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
48
|
+
var OpenClawAdapter = /*#__PURE__*/function (_EventEmitter) {
|
|
49
|
+
function OpenClawAdapter(config) {
|
|
50
|
+
var _this;
|
|
51
|
+
_classCallCheck(this, OpenClawAdapter);
|
|
52
|
+
_this = _callSuper(this, OpenClawAdapter);
|
|
53
|
+
_defineProperty(_this, "wsClient", null);
|
|
54
|
+
_defineProperty(_this, "connectionState", OpenClawConnectionState.DISCONNECTED);
|
|
55
|
+
_defineProperty(_this, "logger", LoggerManager.getLogger());
|
|
56
|
+
_defineProperty(_this, "callbacks", {});
|
|
57
|
+
_defineProperty(_this, "isStreaming", false);
|
|
58
|
+
_defineProperty(_this, "currentRequestParams", null);
|
|
59
|
+
_this.adapterConfig = config;
|
|
60
|
+
_this.config = mergeOpenClawConfig(config);
|
|
61
|
+
_this.instanceId = generateUUID();
|
|
62
|
+
_this.rpcHandler = new OpenClawRPCHandler({
|
|
63
|
+
timeout: config.timeout
|
|
64
|
+
});
|
|
65
|
+
_this.eventMapper = new OpenClawEventMapper();
|
|
66
|
+
return _this;
|
|
67
|
+
}
|
|
68
|
+
_inherits(OpenClawAdapter, _EventEmitter);
|
|
69
|
+
return _createClass(OpenClawAdapter, [{
|
|
70
|
+
key: "setCallbacks",
|
|
71
|
+
value: function setCallbacks(callbacks) {
|
|
72
|
+
this.callbacks = callbacks;
|
|
73
|
+
}
|
|
74
|
+
}, {
|
|
75
|
+
key: "connect",
|
|
76
|
+
value: function () {
|
|
77
|
+
var _connect = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
78
|
+
var _this2 = this;
|
|
79
|
+
var url, wsConfig;
|
|
80
|
+
return _regeneratorRuntime.wrap(function (_context) {
|
|
81
|
+
while (1) switch (_context.prev = _context.next) {
|
|
82
|
+
case 0:
|
|
83
|
+
if (!(this.connectionState === OpenClawConnectionState.AUTHENTICATED)) {
|
|
84
|
+
_context.next = 1;
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
return _context.abrupt("return");
|
|
88
|
+
case 1:
|
|
89
|
+
this.connectionState = OpenClawConnectionState.CONNECTING;
|
|
90
|
+
url = formatWebSocketUrl(this.adapterConfig.endpoint);
|
|
91
|
+
this.wsClient = new WebSocketClient(url);
|
|
92
|
+
this.rpcHandler.setSendFunction(function (frame) {
|
|
93
|
+
var _this2$wsClient;
|
|
94
|
+
(_this2$wsClient = _this2.wsClient) === null || _this2$wsClient === void 0 || _this2$wsClient.send(frame);
|
|
95
|
+
});
|
|
96
|
+
this.setupEventHandlers();
|
|
97
|
+
wsConfig = {
|
|
98
|
+
timeout: this.adapterConfig.timeout,
|
|
99
|
+
maxRetries: this.adapterConfig.maxRetries,
|
|
100
|
+
retryInterval: this.adapterConfig.retryInterval,
|
|
101
|
+
heartbeatInterval: this.config.heartbeatInterval
|
|
102
|
+
};
|
|
103
|
+
_context.next = 2;
|
|
104
|
+
return this.wsClient.connect(wsConfig);
|
|
105
|
+
case 2:
|
|
106
|
+
_context.next = 3;
|
|
107
|
+
return this.waitForAuthentication();
|
|
108
|
+
case 3:
|
|
109
|
+
case "end":
|
|
110
|
+
return _context.stop();
|
|
111
|
+
}
|
|
112
|
+
}, _callee, this);
|
|
113
|
+
}));
|
|
114
|
+
function connect() {
|
|
115
|
+
return _connect.apply(this, arguments);
|
|
116
|
+
}
|
|
117
|
+
return connect;
|
|
118
|
+
}()
|
|
119
|
+
}, {
|
|
120
|
+
key: "waitForAuthentication",
|
|
121
|
+
value: function waitForAuthentication() {
|
|
122
|
+
var _this3 = this;
|
|
123
|
+
if (this.connectionState === OpenClawConnectionState.AUTHENTICATED) {
|
|
124
|
+
return Promise.resolve();
|
|
125
|
+
}
|
|
126
|
+
var timeout = this.adapterConfig.timeout || 3e4;
|
|
127
|
+
return new Promise(function (resolve, reject) {
|
|
128
|
+
var timer = null;
|
|
129
|
+
var cleanup = function cleanup() {
|
|
130
|
+
if (timer) {
|
|
131
|
+
clearTimeout(timer);
|
|
132
|
+
timer = null;
|
|
133
|
+
}
|
|
134
|
+
_this3.off("connected", onConnected);
|
|
135
|
+
_this3.off("error", onError);
|
|
136
|
+
};
|
|
137
|
+
var onConnected = function onConnected() {
|
|
138
|
+
cleanup();
|
|
139
|
+
resolve();
|
|
140
|
+
};
|
|
141
|
+
var onError = function onError(error) {
|
|
142
|
+
cleanup();
|
|
143
|
+
reject(error);
|
|
144
|
+
};
|
|
145
|
+
_this3.once("connected", onConnected);
|
|
146
|
+
_this3.once("error", onError);
|
|
147
|
+
timer = setTimeout(function () {
|
|
148
|
+
cleanup();
|
|
149
|
+
reject(new Error("OpenClaw authentication timeout after ".concat(timeout, "ms")));
|
|
150
|
+
}, timeout);
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}, {
|
|
154
|
+
key: "sendMessage",
|
|
155
|
+
value: function () {
|
|
156
|
+
var _sendMessage = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee2(params, requestParams) {
|
|
157
|
+
var chatParams, _this$callbacks$onSta, _this$callbacks, _this$callbacks$onErr, _this$callbacks2, _t;
|
|
158
|
+
return _regeneratorRuntime.wrap(function (_context2) {
|
|
159
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
160
|
+
case 0:
|
|
161
|
+
if (!(this.connectionState !== OpenClawConnectionState.AUTHENTICATED)) {
|
|
162
|
+
_context2.next = 1;
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
throw new Error("Not authenticated. Please connect first.");
|
|
166
|
+
case 1:
|
|
167
|
+
this.currentRequestParams = params;
|
|
168
|
+
this.isStreaming = true;
|
|
169
|
+
this.eventMapper.reset();
|
|
170
|
+
chatParams = _objectSpread({
|
|
171
|
+
message: params.prompt || "",
|
|
172
|
+
idempotencyKey: generateUUID()
|
|
173
|
+
}, requestParams);
|
|
174
|
+
_context2.prev = 2;
|
|
175
|
+
(_this$callbacks$onSta = (_this$callbacks = this.callbacks).onStart) === null || _this$callbacks$onSta === void 0 || _this$callbacks$onSta.call(_this$callbacks);
|
|
176
|
+
_context2.next = 3;
|
|
177
|
+
return this.rpcHandler.chatSend(chatParams);
|
|
178
|
+
case 3:
|
|
179
|
+
_context2.next = 5;
|
|
180
|
+
break;
|
|
181
|
+
case 4:
|
|
182
|
+
_context2.prev = 4;
|
|
183
|
+
_t = _context2["catch"](2);
|
|
184
|
+
this.isStreaming = false;
|
|
185
|
+
(_this$callbacks$onErr = (_this$callbacks2 = this.callbacks).onError) === null || _this$callbacks$onErr === void 0 || _this$callbacks$onErr.call(_this$callbacks2, _t);
|
|
186
|
+
throw _t;
|
|
187
|
+
case 5:
|
|
188
|
+
case "end":
|
|
189
|
+
return _context2.stop();
|
|
190
|
+
}
|
|
191
|
+
}, _callee2, this, [[2, 4]]);
|
|
192
|
+
}));
|
|
193
|
+
function sendMessage(_x, _x2) {
|
|
194
|
+
return _sendMessage.apply(this, arguments);
|
|
195
|
+
}
|
|
196
|
+
return sendMessage;
|
|
197
|
+
}()
|
|
198
|
+
}, {
|
|
199
|
+
key: "handleEvent",
|
|
200
|
+
value: function handleEvent(chunk) {
|
|
201
|
+
var frame = parseFrame(chunk.data);
|
|
202
|
+
if (!frame || frame.type !== "event") {
|
|
203
|
+
return null;
|
|
204
|
+
}
|
|
205
|
+
var result = this.eventMapper.mapEvent(frame);
|
|
206
|
+
if (result.isFinal) {
|
|
207
|
+
var _this$callbacks$onCom, _this$callbacks3;
|
|
208
|
+
this.isStreaming = false;
|
|
209
|
+
(_this$callbacks$onCom = (_this$callbacks3 = this.callbacks).onComplete) === null || _this$callbacks$onCom === void 0 || _this$callbacks$onCom.call(_this$callbacks3, false, this.currentRequestParams || void 0);
|
|
210
|
+
}
|
|
211
|
+
if (result.hasError && result.errorMessage) {
|
|
212
|
+
var _this$callbacks$onErr2, _this$callbacks4;
|
|
213
|
+
(_this$callbacks$onErr2 = (_this$callbacks4 = this.callbacks).onError) === null || _this$callbacks$onErr2 === void 0 || _this$callbacks$onErr2.call(_this$callbacks4, new Error(result.errorMessage));
|
|
214
|
+
}
|
|
215
|
+
return result.content;
|
|
216
|
+
}
|
|
217
|
+
}, {
|
|
218
|
+
key: "invokeAction",
|
|
219
|
+
value: function () {
|
|
220
|
+
var _invokeAction = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee3(params) {
|
|
221
|
+
return _regeneratorRuntime.wrap(function (_context3) {
|
|
222
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
223
|
+
case 0:
|
|
224
|
+
if (!(this.connectionState !== OpenClawConnectionState.AUTHENTICATED)) {
|
|
225
|
+
_context3.next = 1;
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
throw new Error("Not authenticated. Please connect first.");
|
|
229
|
+
case 1:
|
|
230
|
+
return _context3.abrupt("return", this.rpcHandler.nodeInvoke(_objectSpread(_objectSpread({}, params), {}, {
|
|
231
|
+
runId: this.eventMapper.getCurrentRunId() || void 0
|
|
232
|
+
})));
|
|
233
|
+
case 2:
|
|
234
|
+
case "end":
|
|
235
|
+
return _context3.stop();
|
|
236
|
+
}
|
|
237
|
+
}, _callee3, this);
|
|
238
|
+
}));
|
|
239
|
+
function invokeAction(_x3) {
|
|
240
|
+
return _invokeAction.apply(this, arguments);
|
|
241
|
+
}
|
|
242
|
+
return invokeAction;
|
|
243
|
+
}()
|
|
244
|
+
}, {
|
|
245
|
+
key: "disconnect",
|
|
246
|
+
value: function () {
|
|
247
|
+
var _disconnect = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
|
|
248
|
+
var _this$callbacks$onDis, _this$callbacks5;
|
|
249
|
+
return _regeneratorRuntime.wrap(function (_context4) {
|
|
250
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
251
|
+
case 0:
|
|
252
|
+
this.connectionState = OpenClawConnectionState.CLOSING;
|
|
253
|
+
this.rpcHandler.cancelAll("Disconnecting");
|
|
254
|
+
if (!this.wsClient) {
|
|
255
|
+
_context4.next = 2;
|
|
256
|
+
break;
|
|
257
|
+
}
|
|
258
|
+
_context4.next = 1;
|
|
259
|
+
return this.wsClient.close();
|
|
260
|
+
case 1:
|
|
261
|
+
this.wsClient = null;
|
|
262
|
+
case 2:
|
|
263
|
+
this.connectionState = OpenClawConnectionState.DISCONNECTED;
|
|
264
|
+
(_this$callbacks$onDis = (_this$callbacks5 = this.callbacks).onDisconnected) === null || _this$callbacks$onDis === void 0 || _this$callbacks$onDis.call(_this$callbacks5);
|
|
265
|
+
case 3:
|
|
266
|
+
case "end":
|
|
267
|
+
return _context4.stop();
|
|
268
|
+
}
|
|
269
|
+
}, _callee4, this);
|
|
270
|
+
}));
|
|
271
|
+
function disconnect() {
|
|
272
|
+
return _disconnect.apply(this, arguments);
|
|
273
|
+
}
|
|
274
|
+
return disconnect;
|
|
275
|
+
}()
|
|
276
|
+
}, {
|
|
277
|
+
key: "abort",
|
|
278
|
+
value: function abort() {
|
|
279
|
+
if (this.isStreaming) {
|
|
280
|
+
var _this$callbacks$onCom2, _this$callbacks6;
|
|
281
|
+
this.isStreaming = false;
|
|
282
|
+
(_this$callbacks$onCom2 = (_this$callbacks6 = this.callbacks).onComplete) === null || _this$callbacks$onCom2 === void 0 || _this$callbacks$onCom2.call(_this$callbacks6, true, this.currentRequestParams || void 0);
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
}, {
|
|
286
|
+
key: "getConnectionState",
|
|
287
|
+
value: function getConnectionState() {
|
|
288
|
+
return this.connectionState;
|
|
289
|
+
}
|
|
290
|
+
}, {
|
|
291
|
+
key: "isAuthenticated",
|
|
292
|
+
value: function isAuthenticated() {
|
|
293
|
+
return this.connectionState === OpenClawConnectionState.AUTHENTICATED;
|
|
294
|
+
}
|
|
295
|
+
}, {
|
|
296
|
+
key: "reset",
|
|
297
|
+
value: function reset() {
|
|
298
|
+
this.eventMapper.reset();
|
|
299
|
+
this.rpcHandler.reset();
|
|
300
|
+
this.isStreaming = false;
|
|
301
|
+
this.currentRequestParams = null;
|
|
302
|
+
}
|
|
303
|
+
}, {
|
|
304
|
+
key: "destroy",
|
|
305
|
+
value: function () {
|
|
306
|
+
var _destroy = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee5() {
|
|
307
|
+
return _regeneratorRuntime.wrap(function (_context5) {
|
|
308
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
309
|
+
case 0:
|
|
310
|
+
_context5.next = 1;
|
|
311
|
+
return this.disconnect();
|
|
312
|
+
case 1:
|
|
313
|
+
this.rpcHandler.destroy();
|
|
314
|
+
this.removeAllListeners();
|
|
315
|
+
case 2:
|
|
316
|
+
case "end":
|
|
317
|
+
return _context5.stop();
|
|
318
|
+
}
|
|
319
|
+
}, _callee5, this);
|
|
320
|
+
}));
|
|
321
|
+
function destroy() {
|
|
322
|
+
return _destroy.apply(this, arguments);
|
|
323
|
+
}
|
|
324
|
+
return destroy;
|
|
325
|
+
}()
|
|
326
|
+
}, {
|
|
327
|
+
key: "setupEventHandlers",
|
|
328
|
+
value: function setupEventHandlers() {
|
|
329
|
+
var _this4 = this;
|
|
330
|
+
if (!this.wsClient) return;
|
|
331
|
+
this.wsClient.on("message", function (event) {
|
|
332
|
+
_this4.handleWebSocketMessage(event.data);
|
|
333
|
+
});
|
|
334
|
+
this.wsClient.on("error", function (error) {
|
|
335
|
+
var _this4$callbacks$onEr, _this4$callbacks;
|
|
336
|
+
_this4.logger.error("OpenClaw WebSocket error:", error);
|
|
337
|
+
(_this4$callbacks$onEr = (_this4$callbacks = _this4.callbacks).onError) === null || _this4$callbacks$onEr === void 0 || _this4$callbacks$onEr.call(_this4$callbacks, error);
|
|
338
|
+
});
|
|
339
|
+
this.wsClient.on("complete", function (isAborted) {
|
|
340
|
+
var _this4$callbacks$onDi, _this4$callbacks3;
|
|
341
|
+
if (_this4.isStreaming) {
|
|
342
|
+
var _this4$callbacks$onCo, _this4$callbacks2;
|
|
343
|
+
_this4.isStreaming = false;
|
|
344
|
+
(_this4$callbacks$onCo = (_this4$callbacks2 = _this4.callbacks).onComplete) === null || _this4$callbacks$onCo === void 0 || _this4$callbacks$onCo.call(_this4$callbacks2, isAborted, _this4.currentRequestParams || void 0);
|
|
345
|
+
}
|
|
346
|
+
(_this4$callbacks$onDi = (_this4$callbacks3 = _this4.callbacks).onDisconnected) === null || _this4$callbacks$onDi === void 0 || _this4$callbacks$onDi.call(_this4$callbacks3, isAborted ? "Aborted" : "Connection closed");
|
|
347
|
+
});
|
|
348
|
+
this.wsClient.on("stateChange", function (event) {
|
|
349
|
+
_this4.logger.debug("WebSocket state: ".concat(event.from, " -> ").concat(event.to));
|
|
350
|
+
if (event.to === WebSocketConnectionState.CONNECTED) {
|
|
351
|
+
_this4.connectionState = OpenClawConnectionState.HANDSHAKING;
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
}, {
|
|
356
|
+
key: "handleWebSocketMessage",
|
|
357
|
+
value: function handleWebSocketMessage(data) {
|
|
358
|
+
var frame = parseFrame(data);
|
|
359
|
+
if (!frame) {
|
|
360
|
+
this.logger.warn("Failed to parse OpenClaw frame:", data);
|
|
361
|
+
return;
|
|
362
|
+
}
|
|
363
|
+
if (frame.type === "res") {
|
|
364
|
+
this.rpcHandler.handleResponse(frame);
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
if (frame.type === "event") {
|
|
368
|
+
this.handleEventFrame(frame);
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
}, {
|
|
372
|
+
key: "handleEventFrame",
|
|
373
|
+
value: function handleEventFrame(frame) {
|
|
374
|
+
var event = frame.event,
|
|
375
|
+
payload = frame.payload;
|
|
376
|
+
if (event === OpenClawEventType.CONNECT_CHALLENGE) {
|
|
377
|
+
this.handleConnectChallenge(payload);
|
|
378
|
+
return;
|
|
379
|
+
}
|
|
380
|
+
if (this.isStreaming) {
|
|
381
|
+
var result = this.eventMapper.mapEvent(frame);
|
|
382
|
+
if (result.content) {
|
|
383
|
+
var _this$callbacks$onMes, _this$callbacks7;
|
|
384
|
+
(_this$callbacks$onMes = (_this$callbacks7 = this.callbacks).onMessage) === null || _this$callbacks$onMes === void 0 || _this$callbacks$onMes.call(_this$callbacks7, result.content);
|
|
385
|
+
this.emit("message", result.content);
|
|
386
|
+
}
|
|
387
|
+
if (result.isFinal) {
|
|
388
|
+
var _this$callbacks$onCom3, _this$callbacks8;
|
|
389
|
+
this.isStreaming = false;
|
|
390
|
+
(_this$callbacks$onCom3 = (_this$callbacks8 = this.callbacks).onComplete) === null || _this$callbacks$onCom3 === void 0 || _this$callbacks$onCom3.call(_this$callbacks8, false, this.currentRequestParams || void 0);
|
|
391
|
+
}
|
|
392
|
+
if (result.hasError && result.errorMessage) {
|
|
393
|
+
var _this$callbacks$onErr3, _this$callbacks9;
|
|
394
|
+
(_this$callbacks$onErr3 = (_this$callbacks9 = this.callbacks).onError) === null || _this$callbacks$onErr3 === void 0 || _this$callbacks$onErr3.call(_this$callbacks9, new Error(result.errorMessage));
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
}, {
|
|
399
|
+
key: "handleConnectChallenge",
|
|
400
|
+
value: function () {
|
|
401
|
+
var _handleConnectChallenge = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee6(payload) {
|
|
402
|
+
var _this$config$auth;
|
|
403
|
+
var connectParams, _this$callbacks$onCon, _this$callbacks0, response, _this$callbacks$onErr4, _this$callbacks1, _t2;
|
|
404
|
+
return _regeneratorRuntime.wrap(function (_context6) {
|
|
405
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
406
|
+
case 0:
|
|
407
|
+
this.logger.debug("Received connect.challenge, sending connect request");
|
|
408
|
+
connectParams = _objectSpread(_objectSpread({
|
|
409
|
+
minProtocol: this.config.protocolVersion.min,
|
|
410
|
+
maxProtocol: this.config.protocolVersion.max,
|
|
411
|
+
client: {
|
|
412
|
+
id: this.config.client.id,
|
|
413
|
+
version: this.config.client.version,
|
|
414
|
+
platform: getPlatform(),
|
|
415
|
+
mode: this.config.client.mode,
|
|
416
|
+
instanceId: this.instanceId
|
|
417
|
+
},
|
|
418
|
+
role: "operator",
|
|
419
|
+
scopes: ["operator.admin", "operator.approvals", "operator.pairing"],
|
|
420
|
+
caps: []
|
|
421
|
+
}, (_this$config$auth = this.config.auth) !== null && _this$config$auth !== void 0 && _this$config$auth.token ? {
|
|
422
|
+
auth: this.config.auth
|
|
423
|
+
} : {}), {}, {
|
|
424
|
+
userAgent: getUserAgent(),
|
|
425
|
+
locale: getLocale()
|
|
426
|
+
});
|
|
427
|
+
_context6.prev = 1;
|
|
428
|
+
_context6.next = 2;
|
|
429
|
+
return this.rpcHandler.connect(connectParams);
|
|
430
|
+
case 2:
|
|
431
|
+
response = _context6.sent;
|
|
432
|
+
this.connectionState = OpenClawConnectionState.AUTHENTICATED;
|
|
433
|
+
this.logger.info("OpenClaw authenticated successfully:", response);
|
|
434
|
+
(_this$callbacks$onCon = (_this$callbacks0 = this.callbacks).onConnected) === null || _this$callbacks$onCon === void 0 || _this$callbacks$onCon.call(_this$callbacks0);
|
|
435
|
+
this.emit("connected", response);
|
|
436
|
+
_context6.next = 4;
|
|
437
|
+
break;
|
|
438
|
+
case 3:
|
|
439
|
+
_context6.prev = 3;
|
|
440
|
+
_t2 = _context6["catch"](1);
|
|
441
|
+
this.connectionState = OpenClawConnectionState.ERROR;
|
|
442
|
+
this.logger.error("OpenClaw authentication failed:", _t2);
|
|
443
|
+
(_this$callbacks$onErr4 = (_this$callbacks1 = this.callbacks).onError) === null || _this$callbacks$onErr4 === void 0 || _this$callbacks$onErr4.call(_this$callbacks1, _t2);
|
|
444
|
+
this.emit("error", _t2);
|
|
445
|
+
case 4:
|
|
446
|
+
case "end":
|
|
447
|
+
return _context6.stop();
|
|
448
|
+
}
|
|
449
|
+
}, _callee6, this, [[1, 3]]);
|
|
450
|
+
}));
|
|
451
|
+
function handleConnectChallenge(_x4) {
|
|
452
|
+
return _handleConnectChallenge.apply(this, arguments);
|
|
453
|
+
}
|
|
454
|
+
return handleConnectChallenge;
|
|
455
|
+
}()
|
|
456
|
+
}]);
|
|
457
|
+
}(SimpleEventEmitter);
|
|
458
|
+
|
|
459
|
+
export { OpenClawAdapter };
|
|
460
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../pro-components/chat/chat-engine/core/adapters/openclaw/index.ts"],"sourcesContent":["/**\n * OpenClaw 协议适配器\n *\n * 功能:\n * 1. 管理 WebSocket 连接生命周期\n * 2. 处理 OpenClaw 协议的握手和认证\n * 3. 将 OpenClaw 事件转换为 ChatEngine 统一的消息格式\n * 4. 提供与 AGUIAdapter 相似的接口,便于 ChatEngine 统一调度\n */\nimport EventEmitter from '../../utils/eventEmitter';\nimport { LoggerManager } from '../../utils/logger';\nimport { WebSocketClient, type WebSocketClientConfig, WebSocketConnectionState } from '../../server/websocket-client';\nimport type { AIMessageContent, ChatRequestParams, SSEChunkData } from '../../type';\nimport { OpenClawEventMapper, type EventMapResult } from './event-mapper';\nimport { OpenClawRPCHandler, RPCError } from './rpc-handler';\nimport type {\n OpenClawConfig,\n OpenClawFrame,\n OpenClawEventFrame,\n OpenClawResponseFrame,\n ConnectParams,\n ConnectChallengePayload,\n} from './types';\nimport { mergeOpenClawConfig, DEFAULT_OPENCLAW_CONFIG } from './types/config';\nimport { OpenClawEventType, OpenClawConnectionState } from './types/events';\nimport {\n generateUUID,\n parseFrame,\n getPlatform,\n getUserAgent,\n getLocale,\n formatWebSocketUrl,\n} from './utils';\n\n// 重新导出类型\nexport * from './types';\nexport { OpenClawEventMapper, type EventMapResult } from './event-mapper';\nexport { OpenClawRPCHandler, RPCError } from './rpc-handler';\n\n/**\n * OpenClaw 适配器回调接口\n */\nexport interface OpenClawAdapterCallbacks {\n /** 连接成功 */\n onConnected?: () => void;\n /** 连接断开 */\n onDisconnected?: (reason?: string) => void;\n /** 消息开始 */\n onStart?: () => void;\n /** 消息完成 */\n onComplete?: (isAborted: boolean, params?: ChatRequestParams) => void;\n /** 错误发生 */\n onError?: (error: Error) => void;\n /** 消息内容更新 */\n onMessage?: (content: AIMessageContent | AIMessageContent[]) => void;\n}\n\n/**\n * OpenClaw 适配器配置\n */\nexport interface OpenClawAdapterConfig extends OpenClawConfig {\n /** WebSocket 端点 */\n endpoint: string;\n /** 请求超时(毫秒) */\n timeout?: number;\n /** 最大重试次数 */\n maxRetries?: number;\n /** 重试间隔(毫秒) */\n retryInterval?: number;\n}\n\n/**\n * OpenClaw 协议适配器\n */\nexport class OpenClawAdapter extends EventEmitter {\n private wsClient: WebSocketClient | null = null;\n\n private rpcHandler: OpenClawRPCHandler;\n\n private eventMapper: OpenClawEventMapper;\n\n private config: Required<OpenClawConfig>;\n\n private adapterConfig: OpenClawAdapterConfig;\n\n private connectionState = OpenClawConnectionState.DISCONNECTED;\n\n private instanceId: string;\n\n private logger = LoggerManager.getLogger();\n\n private callbacks: OpenClawAdapterCallbacks = {};\n\n private isStreaming = false;\n\n private currentRequestParams: ChatRequestParams | null = null;\n\n constructor(config: OpenClawAdapterConfig) {\n super();\n this.adapterConfig = config;\n this.config = mergeOpenClawConfig(config);\n this.instanceId = generateUUID();\n this.rpcHandler = new OpenClawRPCHandler({ timeout: config.timeout });\n this.eventMapper = new OpenClawEventMapper();\n }\n\n /**\n * 设置回调\n */\n setCallbacks(callbacks: OpenClawAdapterCallbacks): void {\n this.callbacks = callbacks;\n }\n\n /**\n * 连接到 OpenClaw Gateway\n * 等待 WebSocket 连接建立并完成认证握手后才返回\n */\n async connect(): Promise<void> {\n if (this.connectionState === OpenClawConnectionState.AUTHENTICATED) {\n return;\n }\n\n this.connectionState = OpenClawConnectionState.CONNECTING;\n\n const url = formatWebSocketUrl(this.adapterConfig.endpoint);\n this.wsClient = new WebSocketClient(url);\n\n // 设置 RPC 发送函数\n this.rpcHandler.setSendFunction((frame) => {\n this.wsClient?.send(frame);\n });\n\n // 绑定事件处理\n this.setupEventHandlers();\n\n // 连接 WebSocket\n const wsConfig: WebSocketClientConfig = {\n timeout: this.adapterConfig.timeout,\n maxRetries: this.adapterConfig.maxRetries,\n retryInterval: this.adapterConfig.retryInterval,\n heartbeatInterval: this.config.heartbeatInterval,\n };\n\n await this.wsClient.connect(wsConfig);\n\n // 等待认证完成(connect.challenge 握手)\n await this.waitForAuthentication();\n }\n\n /**\n * 等待认证完成\n * WebSocket 连接建立后,服务器会发送 connect.challenge 事件,\n * 适配器会自动回复 connect 请求完成握手。\n * 此方法等待整个握手流程完成后再返回。\n */\n private waitForAuthentication(): Promise<void> {\n // 如果已经认证,直接返回\n if (this.connectionState === OpenClawConnectionState.AUTHENTICATED) {\n return Promise.resolve();\n }\n\n const timeout = this.adapterConfig.timeout || 30000;\n\n return new Promise<void>((resolve, reject) => {\n let timer: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n this.off('connected', onConnected);\n this.off('error', onError);\n };\n\n const onConnected = () => {\n cleanup();\n resolve();\n };\n\n const onError = (error: Error) => {\n cleanup();\n reject(error);\n };\n\n this.once('connected', onConnected);\n this.once('error', onError);\n\n // 超时处理\n timer = setTimeout(() => {\n cleanup();\n reject(new Error(`OpenClaw authentication timeout after ${timeout}ms`));\n }, timeout);\n });\n }\n\n /**\n * 发送聊天消息\n */\n async sendMessage(params: ChatRequestParams, requestParams?: Record<string, unknown>): Promise<void> {\n if (this.connectionState !== OpenClawConnectionState.AUTHENTICATED) {\n throw new Error('Not authenticated. Please connect first.');\n }\n\n this.currentRequestParams = params;\n this.isStreaming = true;\n this.eventMapper.reset();\n\n // 合并用户自定义参数\n const chatParams = {\n message: params.prompt || '',\n idempotencyKey: generateUUID(),\n ...requestParams,\n };\n\n try {\n this.callbacks.onStart?.();\n await this.rpcHandler.chatSend(chatParams);\n // 响应会通过事件流返回,这里只是发送请求\n } catch (error) {\n this.isStreaming = false;\n this.callbacks.onError?.(error as Error);\n throw error;\n }\n }\n\n /**\n * 处理 SSE 数据块(兼容 ChatEngine 接口)\n */\n handleEvent(chunk: SSEChunkData): AIMessageContent | AIMessageContent[] | null {\n // 将 SSE 格式转换为 OpenClaw 帧格式\n const frame = parseFrame(chunk.data);\n if (!frame || frame.type !== 'event') {\n return null;\n }\n\n const result = this.eventMapper.mapEvent(frame as OpenClawEventFrame);\n\n if (result.isFinal) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(false, this.currentRequestParams || undefined);\n }\n\n if (result.hasError && result.errorMessage) {\n this.callbacks.onError?.(new Error(result.errorMessage));\n }\n\n return result.content;\n }\n\n /**\n * 调用 Action(供 Toolcall/Activity 组件的 respond/action 使用)\n *\n * 通过 OpenClaw 的 node.invoke RPC 方法上行,利用 WebSocket 双向通道\n * 将用户在交互式组件中的操作(respond/confirm/update 等)发送回 Agent 端。\n *\n * @param params.nodeId - toolCallId 或 activityType,标识目标节点\n * @param params.action - 操作类型,如 \"respond\" | \"update\" | \"confirm\"\n * @param params.payload - 用户操作数据\n * @returns Agent 端返回的响应数据\n *\n * @example\n * ```tsx\n * // 在 ToolCallRenderer 的 onRespond 中使用\n * <ToolCallRenderer\n * toolCall={toolCall}\n * onRespond={async (tc, response) => {\n * await openclawAdapter.invokeAction({\n * nodeId: tc.toolCallId,\n * action: 'respond',\n * payload: response,\n * });\n * }}\n * />\n * ```\n */\n async invokeAction(params: {\n nodeId: string;\n action: string;\n payload: unknown;\n }): Promise<unknown> {\n if (this.connectionState !== OpenClawConnectionState.AUTHENTICATED) {\n throw new Error('Not authenticated. Please connect first.');\n }\n\n return this.rpcHandler.nodeInvoke({\n ...params,\n runId: this.eventMapper.getCurrentRunId() || undefined,\n });\n }\n\n /**\n * 断开连接\n */\n async disconnect(): Promise<void> {\n this.connectionState = OpenClawConnectionState.CLOSING;\n this.rpcHandler.cancelAll('Disconnecting');\n\n if (this.wsClient) {\n await this.wsClient.close();\n this.wsClient = null;\n }\n\n this.connectionState = OpenClawConnectionState.DISCONNECTED;\n this.callbacks.onDisconnected?.();\n }\n\n /**\n * 中止当前流式传输\n */\n abort(): void {\n if (this.isStreaming) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(true, this.currentRequestParams || undefined);\n }\n }\n\n /**\n * 获取连接状态\n */\n getConnectionState(): OpenClawConnectionState {\n return this.connectionState;\n }\n\n /**\n * 检查是否已认证\n */\n isAuthenticated(): boolean {\n return this.connectionState === OpenClawConnectionState.AUTHENTICATED;\n }\n\n /**\n * 重置适配器状态\n */\n reset(): void {\n this.eventMapper.reset();\n this.rpcHandler.reset();\n this.isStreaming = false;\n this.currentRequestParams = null;\n }\n\n /**\n * 销毁适配器\n */\n async destroy(): Promise<void> {\n await this.disconnect();\n this.rpcHandler.destroy();\n this.removeAllListeners();\n }\n\n /**\n * 设置 WebSocket 事件处理器\n */\n private setupEventHandlers(): void {\n if (!this.wsClient) return;\n\n this.wsClient.on('message', (event: { event: string; data: unknown }) => {\n this.handleWebSocketMessage(event.data);\n });\n\n this.wsClient.on('error', (error: Error) => {\n this.logger.error('OpenClaw WebSocket error:', error);\n this.callbacks.onError?.(error);\n });\n\n this.wsClient.on('complete', (isAborted: boolean) => {\n if (this.isStreaming) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(isAborted, this.currentRequestParams || undefined);\n }\n this.callbacks.onDisconnected?.(isAborted ? 'Aborted' : 'Connection closed');\n });\n\n this.wsClient.on('stateChange', (event: { from: WebSocketConnectionState; to: WebSocketConnectionState }) => {\n this.logger.debug(`WebSocket state: ${event.from} -> ${event.to}`);\n if (event.to === WebSocketConnectionState.CONNECTED) {\n this.connectionState = OpenClawConnectionState.HANDSHAKING;\n }\n });\n }\n\n /**\n * 处理 WebSocket 消息\n */\n private handleWebSocketMessage(data: unknown): void {\n const frame = parseFrame(data as string | object);\n if (!frame) {\n this.logger.warn('Failed to parse OpenClaw frame:', data);\n return;\n }\n\n // 处理响应帧\n if (frame.type === 'res') {\n this.rpcHandler.handleResponse(frame as OpenClawResponseFrame);\n return;\n }\n\n // 处理事件帧\n if (frame.type === 'event') {\n this.handleEventFrame(frame as OpenClawEventFrame);\n }\n }\n\n /**\n * 处理事件帧\n */\n private handleEventFrame(frame: OpenClawEventFrame): void {\n const { event, payload } = frame;\n\n // 处理连接挑战事件\n if (event === OpenClawEventType.CONNECT_CHALLENGE) {\n this.handleConnectChallenge(payload as ConnectChallengePayload);\n return;\n }\n\n // 流式消息事件\n if (this.isStreaming) {\n const result = this.eventMapper.mapEvent(frame);\n\n if (result.content) {\n this.callbacks.onMessage?.(result.content);\n this.emit('message', result.content);\n }\n\n if (result.isFinal) {\n this.isStreaming = false;\n this.callbacks.onComplete?.(false, this.currentRequestParams || undefined);\n }\n\n if (result.hasError && result.errorMessage) {\n this.callbacks.onError?.(new Error(result.errorMessage));\n }\n }\n }\n\n /**\n * 处理连接挑战(握手)\n */\n private async handleConnectChallenge(payload: ConnectChallengePayload): Promise<void> {\n this.logger.debug('Received connect.challenge, sending connect request');\n\n const connectParams: ConnectParams = {\n minProtocol: this.config.protocolVersion.min,\n maxProtocol: this.config.protocolVersion.max,\n client: {\n id: this.config.client.id,\n version: this.config.client.version,\n platform: getPlatform(),\n mode: this.config.client.mode,\n instanceId: this.instanceId,\n },\n role: 'operator',\n scopes: ['operator.admin', 'operator.approvals', 'operator.pairing'],\n caps: [],\n // 传入认证信息(来自 openclaw onboard 的 operator token)\n ...(this.config.auth?.token ? { auth: this.config.auth } : {}),\n userAgent: getUserAgent(),\n locale: getLocale(),\n };\n\n try {\n const response = await this.rpcHandler.connect(connectParams);\n this.connectionState = OpenClawConnectionState.AUTHENTICATED;\n this.logger.info('OpenClaw authenticated successfully:', response);\n this.callbacks.onConnected?.();\n this.emit('connected', response);\n } catch (error) {\n this.connectionState = OpenClawConnectionState.ERROR;\n this.logger.error('OpenClaw authentication failed:', error);\n this.callbacks.onError?.(error as Error);\n this.emit('error', error);\n }\n }\n}\n"],"names":["OpenClawAdapter","config","_this","_classCallCheck","_callSuper","_defineProperty","OpenClawConnectionState","DISCONNECTED","LoggerManager","getLogger","adapterConfig","mergeOpenClawConfig","instanceId","generateUUID","rpcHandler","OpenClawRPCHandler","timeout","eventMapper","OpenClawEventMapper","_inherits","_EventEmitter","_createClass","key","value","setCallbacks","callbacks","_connect","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_this2","url","wsConfig","wrap","_context","prev","next","connectionState","AUTHENTICATED","abrupt","CONNECTING","formatWebSocketUrl","endpoint","wsClient","WebSocketClient","setSendFunction","frame","_this2$wsClient","send","setupEventHandlers","maxRetries","retryInterval","heartbeatInterval","connect","waitForAuthentication","stop","apply","arguments","_this3","Promise","resolve","reject","timer","cleanup","clearTimeout","off","onConnected","onError","error","once","setTimeout","Error","concat","_sendMessage","_callee2","params","requestParams","chatParams","_this$callbacks$onSta","_this$callbacks","_this$callbacks$onErr","_this$callbacks2","_t","_context2","currentRequestParams","isStreaming","reset","_objectSpread","message","prompt","idempotencyKey","onStart","call","chatSend","sendMessage","_x","_x2","handleEvent","chunk","parseFrame","data","type","result","mapEvent","isFinal","_this$callbacks$onCom","_this$callbacks3","onComplete","hasError","errorMessage","_this$callbacks$onErr2","_this$callbacks4","content","_invokeAction","_callee3","_context3","nodeInvoke","runId","getCurrentRunId","invokeAction","_callee4","_this$callbacks$onDis","_this$callbacks5","_context4","CLOSING","cancelAll","close","onDisconnected","disconnect","_disconnect","abort","_this$callbacks$onCom2","_this$callbacks6","getConnectionState","isAuthenticated","_destroy","_callee5","_context5","destroy","removeAllListeners","_this4","on","event","handleWebSocketMessage","_this4$callbacks$onEr","_this4$callbacks","logger","isAborted","_this4$callbacks$onDi","_this4$callbacks3","_this4$callbacks$onCo","_this4$callbacks2","debug","from","to","WebSocketConnectionState","CONNECTED","HANDSHAKING","warn","handleResponse","handleEventFrame","payload","OpenClawEventType","CONNECT_CHALLENGE","handleConnectChallenge","_this$callbacks$onMes","_this$callbacks7","onMessage","emit","_this$callbacks$onCom3","_this$callbacks8","_this$callbacks$onErr3","_this$callbacks9","_handleConnectChallenge","_callee6","_this$config$auth","connectParams","_this$callbacks$onCon","_this$callbacks0","response","_this$callbacks$onErr4","_this$callbacks1","_t2","_context6","minProtocol","protocolVersion","min","maxProtocol","max","client","id","version","platform","getPlatform","mode","role","scopes","caps","auth","token","userAgent","getUserAgent","locale","getLocale","sent","info","ERROR","EventEmitter"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0EaA,IAAAA;EAuBX,SAAAA,eAAAA,CAAYC,MAA+B,EAAA;AAAA,IAAA,IAAAC,KAAA,CAAA;AAAAC,IAAAA,eAAA,OAAAH,eAAA,CAAA,CAAA;IACnCE,KAAA,GAAAE,UAAA,CAAA,IAAA,EAAAJ,eAAA,CAAA,CAAA;IAAAK,eAAA,CAAAH,KAAA,EAAA,UAAA,EAvBmC,IAAA,CAAA,CAAA;AAAAG,IAAAA,eAAA,CAAAH,KAAA,EAUjBI,iBAAAA,EAAAA,uBAAwB,CAAAC,YAAA,CAAA,CAAA;AAAAF,IAAAA,eAAA,CAAAH,KAAA,EAAA,QAAA,EAIjCM,cAAcC,SAAU,EAAA,CAAA,CAAA;AAAAJ,IAAAA,eAAA,CAAAH,KAAA,EAEK,WAAA,EAAA,EAAC,CAAA,CAAA;IAAAG,eAAA,CAAAH,KAAA,EAAA,aAAA,EAEzB,KAAA,CAAA,CAAA;IAAAG,eAAA,CAAAH,KAAA,EAAA,sBAAA,EAEmC,IAAA,CAAA,CAAA;IAIvDA,KAAA,CAAKQ,aAAgB,GAAAT,MAAA,CAAA;AAChBC,IAAAA,KAAA,CAAAD,MAAA,GAASU,oBAAoBV,MAAM,CAAA,CAAA;AACxCC,IAAAA,KAAA,CAAKU,aAAaC,YAAa,EAAA,CAAA;AAC/BX,IAAAA,KAAA,CAAKY,aAAa,IAAIC,kBAAA,CAAmB;MAAEC,OAAS,EAAAf,MAAA,CAAOe,OAAAA;AAAQ,KAAC,CAAA,CAAA;AAC/Dd,IAAAA,KAAA,CAAAe,WAAA,GAAc,IAAIC,mBAAoB,EAAA,CAAA;AAAA,IAAA,OAAAhB,KAAA,CAAA;AAC7C,GAAA;EAAAiB,SAAA,CAAAnB,eAAA,EAAAoB,aAAA,CAAA,CAAA;EAAA,OAAAC,YAAA,CAAArB,eAAA,EAAA,CAAA;IAAAsB,GAAA,EAAA,cAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAC,aAAaC,SAA2C,EAAA;MACtD,IAAA,CAAKA,SAAY,GAAAA,SAAA,CAAA;AACnB,KAAA;AAAA,GAAA,EAAA;IAAAH,GAAA,EAAA,SAAA;IAAAC,KAAA,EAAA,YAAA;MAAA,IAAAG,QAAA,GAAAC,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAMA,SAAAC,OAAA,GAAA;AAAA,QAAA,IAAAC,MAAA,GAAA,IAAA,CAAA;QAAA,IAAAC,GAAA,EAAAC,QAAA,CAAA;AAAA,QAAA,OAAAL,mBAAA,CAAAM,IAAA,CAAA,UAAAC,QAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,IAAA,EACM,IAAA,CAAKC,eAAoB,KAAAhC,uBAAA,CAAwBiC,aAAe,CAAA,EAAA;AAAAJ,gBAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;cAAA,OAAAF,QAAA,CAAAK,MAAA,CAAA,QAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAIpE,cAAA,IAAA,CAAKF,kBAAkBhC,uBAAwB,CAAAmC,UAAA,CAAA;cAEzCT,GAAM,GAAAU,kBAAA,CAAmB,IAAK,CAAAhC,aAAA,CAAciC,QAAQ,CAAA,CAAA;AACrD,cAAA,IAAA,CAAAC,QAAA,GAAW,IAAIC,eAAA,CAAgBb,GAAG,CAAA,CAAA;AAGlC,cAAA,IAAA,CAAAlB,UAAA,CAAWgC,eAAgB,CAAA,UAACC,KAAU,EAAA;AAAA,gBAAA,IAAAC,eAAA,CAAA;AACpC,gBAAA,CAAAA,eAAA,GAAAjB,MAAA,CAAAa,QAAA,MAAA,IAAA,IAAAI,eAAA,KAAA,KAAA,CAAA,IAAAA,eAAA,CAAUC,KAAKF,KAAK,CAAA,CAAA;AAC3B,eAAC,CAAA,CAAA;cAGD,IAAA,CAAKG,kBAAmB,EAAA,CAAA;AAGlBjB,cAAAA,QAAkC,GAAA;AACtCjB,gBAAAA,OAAA,EAAS,KAAKN,aAAc,CAAAM,OAAA;AAC5BmC,gBAAAA,UAAA,EAAY,KAAKzC,aAAc,CAAAyC,UAAA;AAC/BC,gBAAAA,aAAA,EAAe,KAAK1C,aAAc,CAAA0C,aAAA;AAClCC,gBAAAA,iBAAA,EAAmB,KAAKpD,MAAO,CAAAoD,iBAAAA;eACjC,CAAA;AAAAlB,cAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAEM,IAAA,CAAKO,QAAS,CAAAU,OAAA,CAAQrB,QAAQ,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAAAE,cAAAA,QAAA,CAAAE,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAG9B,KAAKkB,qBAAsB,EAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAApB,QAAA,CAAAqB,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAA1B,OAAA,EAAA,IAAA,CAAA,CAAA;OACnC,CAAA,CAAA,CAAA;AAAA,MAAA,SA9BMwB,OAAyBA,GAAA;AAAA,QAAA,OAAA5B,QAAA,CAAA+B,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAAA,OAAzBJ,OAAyB,CAAA;AAAA,KAAA,EAAA;AAAA,GAAA,EAAA;IAAAhC,GAAA,EAAA,uBAAA;AAAAC,IAAAA,KAAA,EAsCvB,SAAAgC,qBAAuCA,GAAA;AAAA,MAAA,IAAAI,MAAA,GAAA,IAAA,CAAA;AAEzC,MAAA,IAAA,IAAA,CAAKrB,eAAoB,KAAAhC,uBAAA,CAAwBiC,aAAe,EAAA;AAClE,QAAA,OAAOqB,QAAQC,OAAQ,EAAA,CAAA;AACzB,OAAA;MAEM,IAAA7C,OAAA,GAAU,IAAK,CAAAN,aAAA,CAAcM,OAAW,IAAA,GAAA,CAAA;AAE9C,MAAA,OAAO,IAAI4C,OAAA,CAAc,UAACC,OAAA,EAASC,MAAW,EAAA;QAC5C,IAAIC,KAA8C,GAAA,IAAA,CAAA;AAElD,QAAA,IAAMC,UAAU,SAAVA,UAAgB;AACpB,UAAA,IAAID,KAAO,EAAA;YACTE,YAAA,CAAaF,KAAK,CAAA,CAAA;AACVA,YAAAA,KAAA,GAAA,IAAA,CAAA;AACV,WAAA;AACKJ,UAAAA,MAAA,CAAAO,GAAA,CAAI,aAAaC,WAAW,CAAA,CAAA;AAC5BR,UAAAA,MAAA,CAAAO,GAAA,CAAI,SAASE,OAAO,CAAA,CAAA;SAC3B,CAAA;AAEA,QAAA,IAAMD,cAAc,SAAdA,cAAoB;AAChBH,UAAAA,OAAA,EAAA,CAAA;AACAH,UAAAA,OAAA,EAAA,CAAA;SACV,CAAA;AAEM,QAAA,IAAAO,OAAA,GAAU,SAAVA,OAAAA,CAAWC,KAAiB,EAAA;AACxBL,UAAAA,OAAA,EAAA,CAAA;UACRF,MAAA,CAAOO,KAAK,CAAA,CAAA;SACd,CAAA;AAEKV,QAAAA,MAAA,CAAAW,IAAA,CAAK,aAAaH,WAAW,CAAA,CAAA;AAC7BR,QAAAA,MAAA,CAAAW,IAAA,CAAK,SAASF,OAAO,CAAA,CAAA;QAG1BL,KAAA,GAAQQ,WAAW,YAAM;AACfP,UAAAA,OAAA,EAAA,CAAA;UACRF,MAAA,CAAO,IAAIU,KAAA,CAAA,wCAAA,CAAAC,MAAA,CAA+CzD,OAAA,EAAW,IAAA,CAAA,CAAC,CAAA,CAAA;WACrEA,OAAO,CAAA,CAAA;AACZ,OAAC,CAAA,CAAA;AACH,KAAA;AAAA,GAAA,EAAA;IAAAM,GAAA,EAAA,aAAA;IAAAC,KAAA,EAAA,YAAA;AAAA,MAAA,IAAAmD,YAAA,GAAA/C,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAKA,SAAA8C,QAAAA,CAAkBC,MAAA,EAA2BC,aAAwD,EAAA;QAAA,IAAAC,UAAA,EAAAC,qBAAA,EAAAC,eAAA,EAAAC,qBAAA,EAAAC,gBAAA,EAAAC,EAAA,CAAA;AAAA,QAAA,OAAAvD,mBAAA,CAAAM,IAAA,CAAA,UAAAkD,SAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAhD,IAAA,GAAAgD,SAAA,CAAA/C,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,IAAA,EAC/F,IAAA,CAAKC,eAAoB,KAAAhC,uBAAA,CAAwBiC,aAAe,CAAA,EAAA;AAAA6C,gBAAAA,SAAA,CAAA/C,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;AAAA,cAAA,MAC5D,IAAImC,MAAM,0CAA0C,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;cAG5D,IAAA,CAAKa,oBAAuB,GAAAT,MAAA,CAAA;cAC5B,IAAA,CAAKU,WAAc,GAAA,IAAA,CAAA;AACnB,cAAA,IAAA,CAAKrE,YAAYsE,KAAM,EAAA,CAAA;AAGjBT,cAAAA,UAAa,GAAAU,aAAA,CAAA;AACjBC,gBAAAA,OAAA,EAASb,OAAOc,MAAU,IAAA,EAAA;gBAC1BC,gBAAgB9E,YAAa,EAAA;AAAA,eAAA,EAC1BgE,aAAA,CAAA,CAAA;AAAAO,cAAAA,SAAA,CAAAhD,IAAA,GAAA,CAAA,CAAA;AAIH,cAAA,CAAA2C,qBAAA,GAAAC,CAAAA,eAAA,GAAA,IAAA,CAAKvD,WAAUmE,OAAU,MAAAb,IAAAA,IAAAA,qBAAA,eAAzBA,qBAAA,CAAAc,IAAA,CAAAb,eAAyB,CAAA,CAAA;AAAAI,cAAAA,SAAA,CAAA/C,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OACnB,IAAA,CAAKvB,UAAW,CAAAgF,QAAA,CAAShB,UAAU,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAAAM,cAAAA,SAAA,CAAA/C,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,MAAA;AAAA,YAAA,KAAA,CAAA;AAAA+C,cAAAA,SAAA,CAAAhD,IAAA,GAAA,CAAA,CAAA;AAAA+C,cAAAA,EAAA,GAAAC,SAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA;cAGzC,IAAA,CAAKE,WAAc,GAAA,KAAA,CAAA;AACd,cAAA,CAAAL,qBAAA,GAAAC,CAAAA,gBAAA,OAAA,CAAAzD,SAAA,EAAU2C,yDAAVa,qBAAA,CAAAY,IAAA,CAAAX,gBAAA,EAAAC,EAAkC,CAAA,CAAA;AAAA,cAAA,MAAAA,EAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAC,SAAA,CAAA5B,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAAmB,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;OAG3C,CAAA,CAAA,CAAA;AAAA,MAAA,SAzBMoB,WAAYA,CAAAC,EAAA,EAAAC,GAAA,EAAA;AAAA,QAAA,OAAAvB,YAAA,CAAAjB,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAAA,OAAZqC,WAAY,CAAA;AAAA,KAAA,EAAA;AAAA,GAAA,EAAA;IAAAzE,GAAA,EAAA,aAAA;AAAAC,IAAAA,KAAA,EA8BlB,SAAA2E,YAAYC,KAAmE,EAAA;AAEvE,MAAA,IAAApD,KAAA,GAAQqD,UAAW,CAAAD,KAAA,CAAME,IAAI,CAAA,CAAA;MACnC,IAAI,CAACtD,KAAA,IAASA,KAAM,CAAAuD,IAAA,KAAS,OAAS,EAAA;AAC7B,QAAA,OAAA,IAAA,CAAA;AACT,OAAA;MAEA,IAAMC,MAAS,GAAA,IAAA,CAAKtF,WAAY,CAAAuF,QAAA,CAASzD,KAA2B,CAAA,CAAA;MAEpE,IAAIwD,OAAOE,OAAS,EAAA;QAAA,IAAAC,qBAAA,EAAAC,gBAAA,CAAA;QAClB,IAAA,CAAKrB,WAAc,GAAA,KAAA,CAAA;QACnB,CAAAoB,qBAAA,GAAAC,CAAAA,gBAAA,GAAA,IAAA,CAAKlF,SAAU,EAAAmF,UAAA,MAAAF,IAAAA,IAAAA,qBAAA,KAAfA,KAAAA,CAAAA,IAAAA,qBAAA,CAAAb,IAAA,CAAAc,gBAAA,EAA4B,KAAO,EAAA,IAAA,CAAKtB,wBAAwB,KAAS,CAAA,CAAA,CAAA;AAC3E,OAAA;AAEI,MAAA,IAAAkB,MAAA,CAAOM,QAAY,IAAAN,MAAA,CAAOO,YAAc,EAAA;QAAA,IAAAC,sBAAA,EAAAC,gBAAA,CAAA;QAC1C,CAAAD,sBAAA,GAAAC,CAAAA,gBAAA,GAAA,IAAA,CAAKvF,WAAU2C,OAAU,MAAA2C,IAAAA,IAAAA,sBAAA,KAAzBA,KAAAA,CAAAA,IAAAA,sBAAA,CAAAlB,IAAA,CAAAmB,gBAAA,EAAyB,IAAIxC,KAAM,CAAA+B,MAAA,CAAOO,YAAY,CAAC,CAAA,CAAA;AACzD,OAAA;MAEA,OAAOP,MAAO,CAAAU,OAAA,CAAA;AAChB,KAAA;AAAA,GAAA,EAAA;IAAA3F,GAAA,EAAA,cAAA;IAAAC,KAAA,EAAA,YAAA;MAAA,IAAA2F,aAAA,GAAAvF,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CA4BA,SAAAsF,QAAAA,CAAmBvC,MAIE,EAAA;AAAA,QAAA,OAAAhD,mBAAA,CAAAM,IAAA,CAAA,UAAAkF,SAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAhF,IAAA,GAAAgF,SAAA,CAAA/E,IAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,IAAA,EACf,IAAA,CAAKC,eAAoB,KAAAhC,uBAAA,CAAwBiC,aAAe,CAAA,EAAA;AAAA6E,gBAAAA,SAAA,CAAA/E,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;AAAA,cAAA,MAC5D,IAAImC,MAAM,0CAA0C,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAAA,cAAA,OAAA4C,SAAA,CAAA5E,MAAA,CAAA,QAAA,EAGrD,IAAA,CAAK1B,WAAWuG,UAAW,CAAA7B,aAAA,CAAAA,aAAA,KAC7BZ,MAAA,CAAA,EAAA,EAAA,EAAA;gBACH0C,KAAO,EAAA,IAAA,CAAKrG,WAAY,CAAAsG,eAAA,EAAqB,IAAA,KAAA,CAAA;AAAA,eAAA,CAC9C,CAAA,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAH,SAAA,CAAA5D,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAA2D,QAAA,EAAA,IAAA,CAAA,CAAA;OACH,CAAA,CAAA,CAAA;MAAA,SAbMK;;;aAAAA;;;;;gFAkBN,SAAAC,QAAA,GAAA;QAAA,IAAAC,qBAAA,EAAAC,gBAAA,CAAA;AAAA,QAAA,OAAA/F,mBAAA,CAAAM,IAAA,CAAA,UAAA0F,SAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAxF,IAAA,GAAAwF,SAAA,CAAAvF,IAAA;AAAA,YAAA,KAAA,CAAA;AACE,cAAA,IAAA,CAAKC,kBAAkBhC,uBAAwB,CAAAuH,OAAA,CAAA;AAC1C,cAAA,IAAA,CAAA/G,UAAA,CAAWgH,UAAU,eAAe,CAAA,CAAA;cAAA,IAErC,CAAA,KAAKlF,QAAU,EAAA;AAAAgF,gBAAAA,SAAA,CAAAvF,IAAA,GAAA,CAAA,CAAA;AAAA,gBAAA,MAAA;AAAA,eAAA;AAAAuF,cAAAA,SAAA,CAAAvF,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OACX,IAAA,CAAKO,SAASmF,KAAM,EAAA,CAAA;AAAA,YAAA,KAAA,CAAA;cAC1B,IAAA,CAAKnF,QAAW,GAAA,IAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AAGlB,cAAA,IAAA,CAAKN,kBAAkBhC,uBAAwB,CAAAC,YAAA,CAAA;AAC/C,cAAA,CAAAmH,qBAAA,GAAAC,CAAAA,gBAAA,GAAA,IAAA,CAAKlG,WAAUuG,cAAiB,MAAAN,IAAAA,IAAAA,qBAAA,eAAhCA,qBAAA,CAAA7B,IAAA,CAAA8B,gBAAgC,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAC,SAAA,CAAApE,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAAiE,QAAA,EAAA,IAAA,CAAA,CAAA;OAClC,CAAA,CAAA,CAAA;AAAA,MAAA,SAXMQ,UAA4BA,GAAA;AAAA,QAAA,OAAAC,WAAA,CAAAzE,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAAA,OAA5BuE,UAA4B,CAAA;AAAA,KAAA,EAAA;AAAA,GAAA,EAAA;IAAA3G,GAAA,EAAA,OAAA;AAAAC,IAAAA,KAAA,EAgBlC,SAAA4G,KAAcA,GAAA;MACZ,IAAI,KAAK7C,WAAa,EAAA;QAAA,IAAA8C,sBAAA,EAAAC,gBAAA,CAAA;QACpB,IAAA,CAAK/C,WAAc,GAAA,KAAA,CAAA;QACnB,CAAA8C,sBAAA,GAAAC,CAAAA,gBAAA,GAAA,IAAA,CAAK5G,SAAU,EAAAmF,UAAA,MAAAwB,IAAAA,IAAAA,sBAAA,KAAfA,KAAAA,CAAAA,IAAAA,sBAAA,CAAAvC,IAAA,CAAAwC,gBAAA,EAA4B,IAAM,EAAA,IAAA,CAAKhD,wBAAwB,KAAS,CAAA,CAAA,CAAA;AAC1E,OAAA;AACF,KAAA;AAAA,GAAA,EAAA;IAAA/D,GAAA,EAAA,oBAAA;AAAAC,IAAAA,KAAA,EAKA,SAAA+G,kBAA8CA,GAAA;MAC5C,OAAO,IAAK,CAAAhG,eAAA,CAAA;AACd,KAAA;AAAA,GAAA,EAAA;IAAAhB,GAAA,EAAA,iBAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAgH,eAA2BA,GAAA;AAClB,MAAA,OAAA,IAAA,CAAKjG,oBAAoBhC,uBAAwB,CAAAiC,aAAA,CAAA;AAC1D,KAAA;AAAA,GAAA,EAAA;IAAAjB,GAAA,EAAA,OAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAgE,KAAcA,GAAA;AACZ,MAAA,IAAA,CAAKtE,YAAYsE,KAAM,EAAA,CAAA;AACvB,MAAA,IAAA,CAAKzE,WAAWyE,KAAM,EAAA,CAAA;MACtB,IAAA,CAAKD,WAAc,GAAA,KAAA,CAAA;MACnB,IAAA,CAAKD,oBAAuB,GAAA,IAAA,CAAA;AAC9B,KAAA;AAAA,GAAA,EAAA;IAAA/D,GAAA,EAAA,SAAA;IAAAC,KAAA,EAAA,YAAA;MAAA,IAAAiH,QAAA,GAAA7G,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAKA,SAAA4G,QAAA,GAAA;AAAA,QAAA,OAAA7G,mBAAA,CAAAM,IAAA,CAAA,UAAAwG,SAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAAtG,IAAA,GAAAsG,SAAA,CAAArG,IAAA;AAAA,YAAA,KAAA,CAAA;AAAAqG,cAAAA,SAAA,CAAArG,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OACQ,KAAK4F,UAAW,EAAA,CAAA;AAAA,YAAA,KAAA,CAAA;AACtB,cAAA,IAAA,CAAKnH,WAAW6H,OAAQ,EAAA,CAAA;cACxB,IAAA,CAAKC,kBAAmB,EAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAF,SAAA,CAAAlF,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAAiF,QAAA,EAAA,IAAA,CAAA,CAAA;OAC1B,CAAA,CAAA,CAAA;AAAA,MAAA,SAJME,OAAyBA,GAAA;AAAA,QAAA,OAAAH,QAAA,CAAA/E,KAAA,CAAA,IAAA,EAAAC,SAAA,CAAA,CAAA;AAAA,OAAA;AAAA,MAAA,OAAzBiF,OAAyB,CAAA;AAAA,KAAA,EAAA;AAAA,GAAA,EAAA;IAAArH,GAAA,EAAA,oBAAA;AAAAC,IAAAA,KAAA,EASvB,SAAA2B,kBAA2BA,GAAA;AAAA,MAAA,IAAA2F,MAAA,GAAA,IAAA,CAAA;AACjC,MAAA,IAAI,CAAC,IAAK,CAAAjG,QAAA,EAAU,OAAA;MAEpB,IAAA,CAAKA,QAAS,CAAAkG,EAAA,CAAG,SAAW,EAAA,UAACC,KAA4C,EAAA;AAClEF,QAAAA,MAAA,CAAAG,sBAAA,CAAuBD,MAAM1C,IAAI,CAAA,CAAA;AACxC,OAAC,CAAA,CAAA;MAED,IAAA,CAAKzD,QAAS,CAAAkG,EAAA,CAAG,OAAS,EAAA,UAACzE,KAAiB,EAAA;QAAA,IAAA4E,qBAAA,EAAAC,gBAAA,CAAA;QACrCL,MAAA,CAAAM,MAAA,CAAO9E,KAAM,CAAA,2BAAA,EAA6BA,KAAK,CAAA,CAAA;AAC/C,QAAA,CAAA4E,qBAAA,GAAAC,CAAAA,gBAAA,GAAAL,MAAA,CAAApH,SAAA,EAAU2C,yDAAV6E,qBAAA,CAAApD,IAAA,CAAAqD,gBAAA,EAAoB7E,KAAK,CAAA,CAAA;AAChC,OAAC,CAAA,CAAA;MAED,IAAA,CAAKzB,QAAS,CAAAkG,EAAA,CAAG,UAAY,EAAA,UAACM,SAAuB,EAAA;QAAA,IAAAC,qBAAA,EAAAC,iBAAA,CAAA;QACnD,IAAIT,OAAKvD,WAAa,EAAA;UAAA,IAAAiE,qBAAA,EAAAC,iBAAA,CAAA;UACpBX,MAAA,CAAKvD,WAAc,GAAA,KAAA,CAAA;UACnB,CAAAiE,qBAAA,GAAAC,CAAAA,iBAAA,GAAAX,MAAA,CAAKpH,SAAU,EAAAmF,UAAA,MAAA2C,IAAAA,IAAAA,qBAAA,KAAfA,KAAAA,CAAAA,IAAAA,qBAAA,CAAA1D,IAAA,CAAA2D,iBAAA,EAA4BJ,SAAW,EAAAP,MAAA,CAAKxD,wBAAwB,KAAS,CAAA,CAAA,CAAA;AAC/E,SAAA;QACA,CAAAgE,qBAAA,IAAAC,iBAAA,GAAAT,MAAA,CAAKpH,SAAU,EAAAuG,cAAA,MAAAqB,IAAAA,IAAAA,qBAAA,eAAfA,qBAAA,CAAAxD,IAAA,CAAAyD,iBAAA,EAAgCF,SAAY,GAAA,SAAA,GAAY,mBAAmB,CAAA,CAAA;AAC7E,OAAC,CAAA,CAAA;MAED,IAAA,CAAKxG,QAAS,CAAAkG,EAAA,CAAG,aAAe,EAAA,UAACC,KAA4E,EAAA;AAC3GF,QAAAA,MAAA,CAAKM,OAAOM,KAAM,CAAA,mBAAA,CAAAhF,MAAA,CAAoBsE,KAAM,CAAAW,IAAA,UAAAjF,MAAA,CAAWsE,MAAMY,EAAI,CAAA,CAAA,CAAA;AAC7D,QAAA,IAAAZ,KAAA,CAAMY,EAAO,KAAAC,wBAAA,CAAyBC,SAAW,EAAA;AACnDhB,UAAAA,MAAA,CAAKvG,kBAAkBhC,uBAAwB,CAAAwJ,WAAA,CAAA;AACjD,SAAA;AACF,OAAC,CAAA,CAAA;AACH,KAAA;AAAA,GAAA,EAAA;IAAAxI,GAAA,EAAA,wBAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAAyH,uBAAuB3C,IAAqB,EAAA;AAC5C,MAAA,IAAAtD,KAAA,GAAQqD,WAAWC,IAAuB,CAAA,CAAA;MAChD,IAAI,CAACtD,KAAO,EAAA;QACL,IAAA,CAAAoG,MAAA,CAAOY,IAAK,CAAA,iCAAA,EAAmC1D,IAAI,CAAA,CAAA;AACxD,QAAA,OAAA;AACF,OAAA;AAGI,MAAA,IAAAtD,KAAA,CAAMuD,SAAS,KAAO,EAAA;AACnB,QAAA,IAAA,CAAAxF,UAAA,CAAWkJ,eAAejH,KAA8B,CAAA,CAAA;AAC7D,QAAA,OAAA;AACF,OAAA;AAGI,MAAA,IAAAA,KAAA,CAAMuD,SAAS,OAAS,EAAA;AAC1B,QAAA,IAAA,CAAK2D,iBAAiBlH,KAA2B,CAAA,CAAA;AACnD,OAAA;AACF,KAAA;AAAA,GAAA,EAAA;IAAAzB,GAAA,EAAA,kBAAA;AAAAC,IAAAA,KAAA,EAKQ,SAAA0I,iBAAiBlH,KAAiC,EAAA;AAClD,MAAA,IAAEgG,KAAO,GAAYhG,KAAA,CAAnBgG,KAAO;QAAAmB,OAAA,GAAYnH,KAAA,CAAZmH,OAAA,CAAA;AAGX,MAAA,IAAAnB,KAAA,KAAUoB,kBAAkBC,iBAAmB,EAAA;AACjD,QAAA,IAAA,CAAKC,uBAAuBH,OAAkC,CAAA,CAAA;AAC9D,QAAA,OAAA;AACF,OAAA;MAGA,IAAI,KAAK5E,WAAa,EAAA;QACpB,IAAMiB,MAAS,GAAA,IAAA,CAAKtF,WAAY,CAAAuF,QAAA,CAASzD,KAAK,CAAA,CAAA;QAE9C,IAAIwD,OAAOU,OAAS,EAAA;UAAA,IAAAqD,qBAAA,EAAAC,gBAAA,CAAA;UACb,CAAAD,qBAAA,IAAAC,gBAAA,GAAA,IAAA,CAAA9I,SAAA,EAAU+I,SAAY,MAAAF,IAAAA,IAAAA,qBAAA,eAAtBA,qBAAA,CAAAzE,IAAA,CAAA0E,gBAAA,EAAsBhE,MAAA,CAAOU,OAAO,CAAA,CAAA;UACpC,IAAA,CAAAwD,IAAA,CAAK,SAAW,EAAAlE,MAAA,CAAOU,OAAO,CAAA,CAAA;AACrC,SAAA;QAEA,IAAIV,OAAOE,OAAS,EAAA;UAAA,IAAAiE,sBAAA,EAAAC,gBAAA,CAAA;UAClB,IAAA,CAAKrF,WAAc,GAAA,KAAA,CAAA;UACnB,CAAAoF,sBAAA,GAAAC,CAAAA,gBAAA,GAAA,IAAA,CAAKlJ,SAAU,EAAAmF,UAAA,MAAA8D,IAAAA,IAAAA,sBAAA,KAAfA,KAAAA,CAAAA,IAAAA,sBAAA,CAAA7E,IAAA,CAAA8E,gBAAA,EAA4B,KAAO,EAAA,IAAA,CAAKtF,wBAAwB,KAAS,CAAA,CAAA,CAAA;AAC3E,SAAA;AAEI,QAAA,IAAAkB,MAAA,CAAOM,QAAY,IAAAN,MAAA,CAAOO,YAAc,EAAA;UAAA,IAAA8D,sBAAA,EAAAC,gBAAA,CAAA;UAC1C,CAAAD,sBAAA,GAAAC,CAAAA,gBAAA,GAAA,IAAA,CAAKpJ,WAAU2C,OAAU,MAAAwG,IAAAA,IAAAA,sBAAA,KAAzBA,KAAAA,CAAAA,IAAAA,sBAAA,CAAA/E,IAAA,CAAAgF,gBAAA,EAAyB,IAAIrG,KAAM,CAAA+B,MAAA,CAAOO,YAAY,CAAC,CAAA,CAAA;AACzD,SAAA;AACF,OAAA;AACF,KAAA;AAAA,GAAA,EAAA;IAAAxF,GAAA,EAAA,wBAAA;IAAAC,KAAA,EAAA,YAAA;MAAA,IAAAuJ,uBAAA,GAAAnJ,iBAAA,cAAAC,mBAAA,CAAAC,IAAA,CAKA,SAAAkJ,QAAAA,CAAqCb,OAAiD,EAAA;AAAA,QAAA,IAAAc,iBAAA,CAAA;AAAA,QAAA,IAAAC,aAAA,EAAAC,qBAAA,EAAAC,gBAAA,EAAAC,QAAA,EAAAC,sBAAA,EAAAC,gBAAA,EAAAC,GAAA,CAAA;AAAA,QAAA,OAAA3J,mBAAA,CAAAM,IAAA,CAAA,UAAAsJ,SAAA,EAAA;AAAA,UAAA,OAAA,CAAA,EAAA,QAAAA,SAAA,CAAApJ,IAAA,GAAAoJ,SAAA,CAAAnJ,IAAA;AAAA,YAAA,KAAA,CAAA;AAC/E,cAAA,IAAA,CAAA8G,MAAA,CAAOM,MAAM,qDAAqD,CAAA,CAAA;cAEjEwB,aAA+B,GAAAzF,aAAA,CAAAA,aAAA,CAAA;AACnCiG,gBAAAA,WAAA,EAAa,IAAK,CAAAxL,MAAA,CAAOyL,eAAgB,CAAAC,GAAA;AACzCC,gBAAAA,WAAA,EAAa,IAAK,CAAA3L,MAAA,CAAOyL,eAAgB,CAAAG,GAAA;AACzCC,gBAAAA,MAAQ,EAAA;AACNC,kBAAAA,EAAA,EAAI,IAAK,CAAA9L,MAAA,CAAO6L,MAAO,CAAAC,EAAA;AACvBC,kBAAAA,OAAA,EAAS,IAAK,CAAA/L,MAAA,CAAO6L,MAAO,CAAAE,OAAA;kBAC5BC,UAAUC,WAAY,EAAA;AACtBC,kBAAAA,IAAA,EAAM,IAAK,CAAAlM,MAAA,CAAO6L,MAAO,CAAAK,IAAA;kBACzBvL,YAAY,IAAK,CAAAA,UAAAA;iBACnB;AACAwL,gBAAAA,IAAM,EAAA,UAAA;AACNC,gBAAAA,MAAQ,EAAA,CAAC,gBAAkB,EAAA,oBAAA,EAAsB,kBAAkB,CAAA;AACnEC,gBAAAA,MAAM,EAAA;AAAC,eAAA,EAEH,CAAAtB,iBAAA,GAAK,IAAA,CAAA/K,MAAA,CAAOsM,IAAM,MAAA,IAAA,IAAAvB,iBAAA,KAAA,KAAA,CAAA,IAAlBA,iBAAA,CAAkBwB,KAAA,GAAQ;AAAED,gBAAAA,IAAA,EAAM,IAAK,CAAAtM,MAAA,CAAOsM,IAAAA;eAAK,GAAI,EAAC,CAAA,EAAA,EAAA,EAAA;gBAC5DE,WAAWC,YAAa,EAAA;gBACxBC,QAAQC,SAAU,EAAA;AAAA,eAAA,CAAA,CAAA;AAAApB,cAAAA,SAAA,CAAApJ,IAAA,GAAA,CAAA,CAAA;AAAAoJ,cAAAA,SAAA,CAAAnJ,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,OAIK,IAAK,CAAAvB,UAAA,CAAWwC,QAAQ2H,aAAa,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA;cAAtDG,QAAW,GAAAI,SAAA,CAAAqB,IAAA,CAAA;AACjB,cAAA,IAAA,CAAKvK,kBAAkBhC,uBAAwB,CAAAiC,aAAA,CAAA;cAC1C,IAAA,CAAA4G,MAAA,CAAO2D,IAAK,CAAA,sCAAA,EAAwC1B,QAAQ,CAAA,CAAA;AACjE,cAAA,CAAAF,qBAAA,GAAAC,CAAAA,gBAAA,GAAA,IAAA,CAAK1J,WAAU0C,WAAc,MAAA+G,IAAAA,IAAAA,qBAAA,eAA7BA,qBAAA,CAAArF,IAAA,CAAAsF,gBAA6B,CAAA,CAAA;AACxB,cAAA,IAAA,CAAAV,IAAA,CAAK,aAAaW,QAAQ,CAAA,CAAA;AAAAI,cAAAA,SAAA,CAAAnJ,IAAA,GAAA,CAAA,CAAA;AAAA,cAAA,MAAA;AAAA,YAAA,KAAA,CAAA;AAAAmJ,cAAAA,SAAA,CAAApJ,IAAA,GAAA,CAAA,CAAA;AAAAmJ,cAAAA,GAAA,GAAAC,SAAA,CAAA,OAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAE/B,cAAA,IAAA,CAAKlJ,kBAAkBhC,uBAAwB,CAAAyM,KAAA,CAAA;cAC1C,IAAA,CAAA5D,MAAA,CAAO9E,KAAM,CAAA,iCAAA,EAAAkH,GAAwC,CAAA,CAAA;AACrD,cAAA,CAAAF,sBAAA,GAAAC,CAAAA,gBAAA,OAAA,CAAA7J,SAAA,EAAU2C,0DAAViH,sBAAA,CAAAxF,IAAA,CAAAyF,gBAAA,EAAAC,GAAkC,CAAA,CAAA;AAClC,cAAA,IAAA,CAAAd,IAAA,CAAK,YAAc,CAAA,CAAA;AAAA,YAAA,KAAA,CAAA,CAAA;AAAA,YAAA,KAAA,KAAA;cAAA,OAAAe,SAAA,CAAAhI,IAAA,EAAA,CAAA;AAAA,WAAA;AAAA,SAAA,EAAAuH,QAAA,EAAA,IAAA,EAAA,CAAA,CAAA,CAAA,EAAA,CAAA,CAAA,CAAA,CAAA,CAAA;OAE5B,CAAA,CAAA,CAAA;MAAA,SAlCcV;;;aAAAA;;;EA5WqB2C,kBAAa;;;;"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OpenClaw RPC 请求/响应处理器
|
|
3
|
+
*
|
|
4
|
+
* 管理请求队列、响应匹配、超时和错误处理
|
|
5
|
+
*/
|
|
6
|
+
import type { OpenClawRequestFrame, OpenClawResponseFrame, OpenClawFrame, ConnectParams, ConnectResponse, ChatSendParams, ChatSendResponse } from './types';
|
|
7
|
+
/**
|
|
8
|
+
* RPC 处理器配置
|
|
9
|
+
*/
|
|
10
|
+
export interface RPCHandlerConfig {
|
|
11
|
+
/** 请求超时时间(毫秒),默认 30000 */
|
|
12
|
+
timeout?: number;
|
|
13
|
+
/** 是否自动重试失败的请求,默认 false */
|
|
14
|
+
autoRetry?: boolean;
|
|
15
|
+
/** 最大重试次数,默认 3 */
|
|
16
|
+
maxRetries?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* RPC 错误类
|
|
20
|
+
*/
|
|
21
|
+
export declare class RPCError extends Error {
|
|
22
|
+
code: string;
|
|
23
|
+
details?: unknown;
|
|
24
|
+
constructor(message: string, code: string, details?: unknown);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* OpenClaw RPC 处理器
|
|
28
|
+
*
|
|
29
|
+
* 功能:
|
|
30
|
+
* - 管理请求队列
|
|
31
|
+
* - 匹配响应到对应的请求
|
|
32
|
+
* - 处理超时
|
|
33
|
+
* - 提供便捷的 RPC 方法调用
|
|
34
|
+
*/
|
|
35
|
+
export declare class OpenClawRPCHandler {
|
|
36
|
+
private pendingRequests;
|
|
37
|
+
private config;
|
|
38
|
+
private sendFn;
|
|
39
|
+
private seq;
|
|
40
|
+
constructor(config?: RPCHandlerConfig);
|
|
41
|
+
/**
|
|
42
|
+
* 设置发送函数
|
|
43
|
+
*/
|
|
44
|
+
setSendFunction(fn: (frame: OpenClawRequestFrame) => void): void;
|
|
45
|
+
/**
|
|
46
|
+
* 生成唯一请求 ID
|
|
47
|
+
*/
|
|
48
|
+
generateRequestId(): string;
|
|
49
|
+
/**
|
|
50
|
+
* 发送 RPC 请求
|
|
51
|
+
*/
|
|
52
|
+
request<TParams extends Record<string, unknown>, TResult>(method: string, params: TParams): Promise<TResult>;
|
|
53
|
+
/**
|
|
54
|
+
* 处理响应帧
|
|
55
|
+
*/
|
|
56
|
+
handleResponse(frame: OpenClawResponseFrame): boolean;
|
|
57
|
+
/**
|
|
58
|
+
* 处理接收到的消息帧
|
|
59
|
+
* 自动区分响应和事件
|
|
60
|
+
*/
|
|
61
|
+
handleFrame(frame: OpenClawFrame): {
|
|
62
|
+
type: 'response' | 'event';
|
|
63
|
+
handled: boolean;
|
|
64
|
+
data?: unknown;
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* 发送连接认证请求
|
|
68
|
+
*/
|
|
69
|
+
connect(params: ConnectParams): Promise<ConnectResponse>;
|
|
70
|
+
/**
|
|
71
|
+
* 发送聊天消息
|
|
72
|
+
*/
|
|
73
|
+
chatSend(params: ChatSendParams): Promise<ChatSendResponse>;
|
|
74
|
+
/**
|
|
75
|
+
* 发送心跳
|
|
76
|
+
*/
|
|
77
|
+
heartbeat(): Promise<{
|
|
78
|
+
ts: number;
|
|
79
|
+
}>;
|
|
80
|
+
/**
|
|
81
|
+
* 节点调用(用于 Toolcall/Activity 的 action 上行)
|
|
82
|
+
*
|
|
83
|
+
* 遵循 OpenClaw 的 node.invoke RPC 方法,通过 WebSocket 双向通道
|
|
84
|
+
* 将用户在 Toolcall/Activity 组件中的操作(respond/confirm/update 等)
|
|
85
|
+
* 发送回 Agent 端处理。
|
|
86
|
+
*
|
|
87
|
+
* @param params.nodeId - toolCallId 或 activityType,标识目标节点
|
|
88
|
+
* @param params.action - 操作类型,如 "respond" | "update" | "confirm"
|
|
89
|
+
* @param params.payload - 用户操作数据
|
|
90
|
+
* @param params.runId - 关联的运行 ID(可选)
|
|
91
|
+
*/
|
|
92
|
+
nodeInvoke(params: {
|
|
93
|
+
nodeId: string;
|
|
94
|
+
action: string;
|
|
95
|
+
payload: unknown;
|
|
96
|
+
runId?: string;
|
|
97
|
+
}): Promise<unknown>;
|
|
98
|
+
/**
|
|
99
|
+
* 取消所有待处理的请求
|
|
100
|
+
*/
|
|
101
|
+
cancelAll(reason?: string): void;
|
|
102
|
+
/**
|
|
103
|
+
* 获取待处理请求数量
|
|
104
|
+
*/
|
|
105
|
+
getPendingCount(): number;
|
|
106
|
+
/**
|
|
107
|
+
* 重置处理器状态
|
|
108
|
+
*/
|
|
109
|
+
reset(): void;
|
|
110
|
+
/**
|
|
111
|
+
* 销毁处理器
|
|
112
|
+
*/
|
|
113
|
+
destroy(): void;
|
|
114
|
+
}
|