@quukk/opencode-clawmessenger 0.2.0 → 1.0.3

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 (106) hide show
  1. package/README.md +71 -623
  2. package/bin/opencode-clawmessenger +2 -2
  3. package/bin/opencode-clawmessenger-setup +5 -5
  4. package/dist/cli.d.ts +0 -1
  5. package/dist/cli.js +1 -288
  6. package/dist/core/auto-register.d.ts +0 -1
  7. package/dist/core/auto-register.js +1 -174
  8. package/dist/core/auto-serve.d.ts +13 -0
  9. package/dist/core/auto-serve.js +1 -0
  10. package/dist/core/config.d.ts +2 -3
  11. package/dist/core/config.js +1 -80
  12. package/dist/core/daemon.d.ts +0 -1
  13. package/dist/core/daemon.js +1 -77
  14. package/dist/core/dedup.d.ts +0 -1
  15. package/dist/core/dedup.js +1 -25
  16. package/dist/core/hook-manager.d.ts +0 -1
  17. package/dist/core/hook-manager.js +1 -33
  18. package/dist/core/logger.d.ts +0 -1
  19. package/dist/core/logger.js +1 -49
  20. package/dist/core/mac-address.d.ts +0 -1
  21. package/dist/core/mac-address.js +1 -43
  22. package/dist/core/message-handler.d.ts +1 -1
  23. package/dist/core/message-handler.js +1 -984
  24. package/dist/core/ops-assistant.d.ts +0 -1
  25. package/dist/core/ops-assistant.js +1 -270
  26. package/dist/core/qr-crypto.d.ts +0 -1
  27. package/dist/core/qr-crypto.js +1 -66
  28. package/dist/core/session-manager.d.ts +0 -1
  29. package/dist/core/session-manager.js +1 -144
  30. package/dist/core/types.d.ts +1 -2
  31. package/dist/core/types.js +1 -26
  32. package/dist/index.d.ts +0 -1
  33. package/dist/index.js +1 -16
  34. package/dist/openclaw/client.d.ts +0 -1
  35. package/dist/openclaw/client.js +1 -494
  36. package/dist/opencode/client.d.ts +0 -1
  37. package/dist/opencode/client.js +1 -279
  38. package/dist/opencode/event-handler.d.ts +0 -1
  39. package/dist/opencode/event-handler.js +1 -467
  40. package/dist/plugin.d.ts +0 -1
  41. package/dist/plugin.js +1 -148
  42. package/dist/rongcloud/client.d.ts +0 -1
  43. package/dist/rongcloud/client.js +1 -292
  44. package/dist/rongcloud/env-polyfill.d.ts +0 -1
  45. package/dist/rongcloud/env-polyfill.js +1 -107
  46. package/dist/rongcloud/server-api.d.ts +0 -1
  47. package/dist/rongcloud/server-api.js +1 -157
  48. package/dist/standalone.d.ts +0 -1
  49. package/dist/standalone.js +1 -229
  50. package/dist/types/plugin.d.ts +0 -1
  51. package/dist/types/plugin.js +1 -2
  52. package/dist/websocket/client.d.ts +0 -1
  53. package/dist/websocket/client.js +1 -88
  54. package/dist/websocket/server-client.d.ts +0 -1
  55. package/dist/websocket/server-client.js +1 -98
  56. package/package.json +83 -81
  57. package/dist/cli.d.ts.map +0 -1
  58. package/dist/cli.js.map +0 -1
  59. package/dist/core/auto-register.d.ts.map +0 -1
  60. package/dist/core/auto-register.js.map +0 -1
  61. package/dist/core/config.d.ts.map +0 -1
  62. package/dist/core/config.js.map +0 -1
  63. package/dist/core/daemon.d.ts.map +0 -1
  64. package/dist/core/daemon.js.map +0 -1
  65. package/dist/core/dedup.d.ts.map +0 -1
  66. package/dist/core/dedup.js.map +0 -1
  67. package/dist/core/hook-manager.d.ts.map +0 -1
  68. package/dist/core/hook-manager.js.map +0 -1
  69. package/dist/core/logger.d.ts.map +0 -1
  70. package/dist/core/logger.js.map +0 -1
  71. package/dist/core/mac-address.d.ts.map +0 -1
  72. package/dist/core/mac-address.js.map +0 -1
  73. package/dist/core/message-handler.d.ts.map +0 -1
  74. package/dist/core/message-handler.js.map +0 -1
  75. package/dist/core/ops-assistant.d.ts.map +0 -1
  76. package/dist/core/ops-assistant.js.map +0 -1
  77. package/dist/core/qr-crypto.d.ts.map +0 -1
  78. package/dist/core/qr-crypto.js.map +0 -1
  79. package/dist/core/session-manager.d.ts.map +0 -1
  80. package/dist/core/session-manager.js.map +0 -1
  81. package/dist/core/types.d.ts.map +0 -1
  82. package/dist/core/types.js.map +0 -1
  83. package/dist/index.d.ts.map +0 -1
  84. package/dist/index.js.map +0 -1
  85. package/dist/openclaw/client.d.ts.map +0 -1
  86. package/dist/openclaw/client.js.map +0 -1
  87. package/dist/opencode/client.d.ts.map +0 -1
  88. package/dist/opencode/client.js.map +0 -1
  89. package/dist/opencode/event-handler.d.ts.map +0 -1
  90. package/dist/opencode/event-handler.js.map +0 -1
  91. package/dist/plugin.d.ts.map +0 -1
  92. package/dist/plugin.js.map +0 -1
  93. package/dist/rongcloud/client.d.ts.map +0 -1
  94. package/dist/rongcloud/client.js.map +0 -1
  95. package/dist/rongcloud/env-polyfill.d.ts.map +0 -1
  96. package/dist/rongcloud/env-polyfill.js.map +0 -1
  97. package/dist/rongcloud/server-api.d.ts.map +0 -1
  98. package/dist/rongcloud/server-api.js.map +0 -1
  99. package/dist/standalone.d.ts.map +0 -1
  100. package/dist/standalone.js.map +0 -1
  101. package/dist/types/plugin.d.ts.map +0 -1
  102. package/dist/types/plugin.js.map +0 -1
  103. package/dist/websocket/client.d.ts.map +0 -1
  104. package/dist/websocket/client.js.map +0 -1
  105. package/dist/websocket/server-client.d.ts.map +0 -1
  106. package/dist/websocket/server-client.js.map +0 -1
@@ -1,494 +1 @@
1
- import { spawn } from 'child_process';
2
- import net from 'net';
3
- import os from 'os';
4
- import fs from 'fs';
5
- import path from 'path';
6
- import axios from 'axios';
7
- import { createLogger } from '../core/logger.js';
8
- const log = createLogger('OpenClawClient');
9
- const DEFAULT_GATEWAY_PORT = 18789;
10
- function getRealHomeDir() {
11
- const envHome = process.env.CLAW_SERVICE_HOME || process.env.USERPROFILE || process.env.HOME;
12
- if (envHome && !envHome.includes('systemprofile')) {
13
- return envHome;
14
- }
15
- const homeDir = os.homedir();
16
- if (!homeDir.includes('systemprofile')) {
17
- return homeDir;
18
- }
19
- const usersDir = 'C:\\Users';
20
- if (fs.existsSync(usersDir)) {
21
- const entries = fs.readdirSync(usersDir, { withFileTypes: true });
22
- for (const entry of entries) {
23
- if (entry.isDirectory() && !['Public', 'Default', 'All Users', 'Default User'].includes(entry.name)) {
24
- const candidate = path.join(usersDir, entry.name);
25
- if (fs.existsSync(path.join(candidate, '.openclaw'))) {
26
- return candidate;
27
- }
28
- }
29
- }
30
- }
31
- return homeDir;
32
- }
33
- function getOpenClawEnv(baseEnv = process.env) {
34
- const realHome = getRealHomeDir();
35
- const env = { ...baseEnv };
36
- const systemHome = os.homedir();
37
- env.USERPROFILE = realHome;
38
- env.HOME = realHome;
39
- if (process.platform === 'win32') {
40
- const match = realHome.match(/^([A-Za-z]:)(.*)$/);
41
- if (match) {
42
- env.HOMEDRIVE = match[1];
43
- env.HOMEPATH = match[2];
44
- }
45
- const fixPath = (originalPath) => {
46
- if (!originalPath)
47
- return null;
48
- const lowerOriginal = originalPath.toLowerCase();
49
- const lowerSystemHome = systemHome.toLowerCase();
50
- if (lowerOriginal.includes(lowerSystemHome)) {
51
- const idx = lowerOriginal.indexOf(lowerSystemHome);
52
- return originalPath.substring(0, idx) + realHome + originalPath.substring(idx + systemHome.length);
53
- }
54
- return null;
55
- };
56
- if (baseEnv.APPDATA) {
57
- const fixed = fixPath(baseEnv.APPDATA);
58
- if (fixed)
59
- env.APPDATA = fixed;
60
- }
61
- if (!env.APPDATA) {
62
- env.APPDATA = path.join(realHome, 'AppData', 'Roaming');
63
- }
64
- if (baseEnv.LOCALAPPDATA) {
65
- const fixed = fixPath(baseEnv.LOCALAPPDATA);
66
- if (fixed)
67
- env.LOCALAPPDATA = fixed;
68
- }
69
- if (!env.LOCALAPPDATA) {
70
- env.LOCALAPPDATA = path.join(realHome, 'AppData', 'Local');
71
- }
72
- }
73
- return env;
74
- }
75
- function getGatewayToken() {
76
- const homeDir = getRealHomeDir();
77
- const possibleFiles = [
78
- path.join(homeDir, '.openclaw', 'openclaw.json'),
79
- path.join(homeDir, '.openclaw', 'config.json'),
80
- path.join(homeDir, '.openclaw', 'tools.json'),
81
- path.join(homeDir, '.openclaw', 'settings.json'),
82
- ];
83
- for (const filePath of possibleFiles) {
84
- try {
85
- if (fs.existsSync(filePath)) {
86
- const content = fs.readFileSync(filePath, 'utf-8');
87
- const config = JSON.parse(content);
88
- const token = config.gatewayToken
89
- || config.gateway?.auth?.token
90
- || config.token
91
- || config.apiKey
92
- || config.api_key
93
- || config.password;
94
- if (token)
95
- return String(token);
96
- }
97
- }
98
- catch {
99
- // ignore
100
- }
101
- }
102
- return null;
103
- }
104
- function checkPort(port) {
105
- return new Promise((resolve) => {
106
- const sock = new net.Socket();
107
- sock.setTimeout(3000);
108
- sock.once('connect', () => {
109
- sock.destroy();
110
- resolve(true);
111
- });
112
- sock.once('error', () => {
113
- sock.destroy();
114
- resolve(false);
115
- });
116
- sock.once('timeout', () => {
117
- sock.destroy();
118
- resolve(false);
119
- });
120
- sock.connect(port, '127.0.0.1');
121
- });
122
- }
123
- function ensureChatCompletionsConfig() {
124
- const realHome = getRealHomeDir();
125
- const openclawDir = path.join(realHome, '.openclaw');
126
- const configPath = path.join(openclawDir, 'openclaw.json');
127
- let settings = {};
128
- let existed = false;
129
- try {
130
- if (fs.existsSync(configPath)) {
131
- const content = fs.readFileSync(configPath, 'utf-8');
132
- settings = JSON.parse(content);
133
- existed = true;
134
- }
135
- }
136
- catch {
137
- settings = {};
138
- }
139
- const gateway = settings.gateway || {};
140
- const http = gateway.http || {};
141
- const endpoints = http.endpoints || {};
142
- const chatCompletions = endpoints.chatCompletions || {};
143
- if (chatCompletions.enabled === true) {
144
- log.info('openclaw.json 中 chatCompletions 已启用');
145
- return;
146
- }
147
- endpoints.chatCompletions = { enabled: true };
148
- http.endpoints = endpoints;
149
- gateway.http = http;
150
- settings.gateway = gateway;
151
- try {
152
- if (!fs.existsSync(openclawDir)) {
153
- fs.mkdirSync(openclawDir, { recursive: true });
154
- }
155
- fs.writeFileSync(configPath, JSON.stringify(settings, null, 2), 'utf-8');
156
- log.info(`已自动在 openclaw.json 中启用 chatCompletions (${existed ? '更新' : '新建'})`);
157
- }
158
- catch (err) {
159
- log.warn({ err }, '写入 openclaw.json 失败');
160
- }
161
- }
162
- function startOpenClawGateway() {
163
- return new Promise((resolve) => {
164
- ensureChatCompletionsConfig();
165
- log.info('正在启动 OpenClaw gateway...');
166
- const child = spawn('openclaw', ['gateway'], {
167
- shell: true,
168
- windowsHide: true,
169
- detached: true,
170
- stdio: 'ignore',
171
- env: getOpenClawEnv(),
172
- });
173
- child.unref();
174
- let attempts = 0;
175
- const maxAttempts = 20;
176
- const interval = setInterval(async () => {
177
- attempts++;
178
- const gatewayRunning = await checkPort(DEFAULT_GATEWAY_PORT);
179
- if (gatewayRunning) {
180
- clearInterval(interval);
181
- log.info(`OpenClaw gateway 启动成功 (${DEFAULT_GATEWAY_PORT})`);
182
- resolve(true);
183
- }
184
- else if (attempts >= maxAttempts) {
185
- clearInterval(interval);
186
- log.warn('OpenClaw gateway 启动超时');
187
- resolve(false);
188
- }
189
- }, 1000);
190
- child.on('error', (err) => {
191
- log.error({ err }, '启动 gateway 失败');
192
- clearInterval(interval);
193
- resolve(false);
194
- });
195
- });
196
- }
197
- export class OpenClawClient {
198
- constructor(gatewayUrl = `http://127.0.0.1:${DEFAULT_GATEWAY_PORT}`) {
199
- this.gatewayStarting = false;
200
- this.gatewayStarted = false;
201
- this.gatewayUrl = gatewayUrl;
202
- }
203
- static async acquireSlot() {
204
- if (OpenClawClient.runningCount < OpenClawClient.maxConcurrency) {
205
- OpenClawClient.runningCount++;
206
- return;
207
- }
208
- return new Promise((resolve) => OpenClawClient.waitQueue.push(resolve));
209
- }
210
- static releaseSlot() {
211
- OpenClawClient.runningCount--;
212
- if (OpenClawClient.waitQueue.length > 0) {
213
- const next = OpenClawClient.waitQueue.shift();
214
- OpenClawClient.runningCount++;
215
- next?.();
216
- }
217
- }
218
- async ensureGatewayRunning() {
219
- const gatewayRunning = await checkPort(DEFAULT_GATEWAY_PORT);
220
- if (gatewayRunning) {
221
- this.gatewayStarted = true;
222
- return true;
223
- }
224
- this.gatewayStarted = false;
225
- if (this.gatewayStarting) {
226
- for (let i = 0; i < 25; i++) {
227
- await new Promise((r) => setTimeout(r, 1000));
228
- if (await checkPort(DEFAULT_GATEWAY_PORT)) {
229
- this.gatewayStarted = true;
230
- return true;
231
- }
232
- }
233
- return false;
234
- }
235
- this.gatewayStarting = true;
236
- try {
237
- const started = await startOpenClawGateway();
238
- this.gatewayStarted = started;
239
- return started;
240
- }
241
- finally {
242
- this.gatewayStarting = false;
243
- }
244
- }
245
- _getConversationHistory(fromUser) {
246
- return OpenClawClient.conversationHistory.get(fromUser) || [];
247
- }
248
- _addToHistory(fromUser, role, content) {
249
- let history = this._getConversationHistory(fromUser);
250
- const truncated = content.length > OpenClawClient.maxMessageLength
251
- ? content.substring(0, OpenClawClient.maxMessageLength) + '...'
252
- : content;
253
- history.push({ role, content: truncated });
254
- const maxMessages = OpenClawClient.maxHistoryRounds * 2;
255
- if (history.length > maxMessages) {
256
- history = history.slice(history.length - maxMessages);
257
- }
258
- OpenClawClient.conversationHistory.set(fromUser, history);
259
- }
260
- clearHistory(fromUser) {
261
- OpenClawClient.conversationHistory.delete(fromUser);
262
- }
263
- _buildMessagesWithHistory(fromUser, currentMessage) {
264
- const history = this._getConversationHistory(fromUser);
265
- return [...history, { role: 'user', content: currentMessage }];
266
- }
267
- cancelActiveRequest(fromUser) {
268
- const active = OpenClawClient.activeRequests.get(fromUser);
269
- if (active) {
270
- log.info({ fromUser }, '取消用户活跃请求');
271
- active.abort();
272
- OpenClawClient.activeRequests.delete(fromUser);
273
- return true;
274
- }
275
- return false;
276
- }
277
- async chatStream(message, fromUser, onDelta, onDone, onError) {
278
- if (!message || !message.trim()) {
279
- onError?.(new Error('消息内容为空'));
280
- return;
281
- }
282
- const gatewayReady = await this.ensureGatewayRunning();
283
- if (!gatewayReady) {
284
- const err = new Error('OpenClaw gateway 启动失败');
285
- log.error(err.message);
286
- onError?.(err);
287
- return;
288
- }
289
- this.cancelActiveRequest(fromUser);
290
- log.info({ fromUser }, '准备 SSE 流式调用 OpenClaw');
291
- const gatewayToken = getGatewayToken();
292
- const sessionId = `clawmessenger-${fromUser}`;
293
- const messagesWithHistory = this._buildMessagesWithHistory(fromUser, message);
294
- const endpoints = [
295
- `${this.gatewayUrl}/v1/chat/completions`,
296
- `${this.gatewayUrl}/v1/responses`,
297
- ];
298
- for (let i = 0; i < endpoints.length; i++) {
299
- const apiUrl = endpoints[i];
300
- try {
301
- const fullText = await this._doChatStream(apiUrl, gatewayToken, sessionId, fromUser, messagesWithHistory, onDelta);
302
- this._addToHistory(fromUser, 'user', message);
303
- this._addToHistory(fromUser, 'assistant', fullText);
304
- return;
305
- }
306
- catch (err) {
307
- if (err.name === 'AbortError' || err.message?.includes('aborted')) {
308
- log.info({ fromUser }, '请求被用户取消');
309
- return;
310
- }
311
- const is404 = err.response?.status === 404;
312
- const isLast = i === endpoints.length - 1;
313
- if (is404 && !isLast) {
314
- log.warn(`SSE 端点 ${apiUrl} 返回 404,尝试备用端点`);
315
- continue;
316
- }
317
- if (is404 && isLast) {
318
- log.error('所有 SSE 端点均返回 404。OpenClaw responses 端点未启用。');
319
- log.error('请检查 ~/.openclaw/openclaw.json 中是否包含: gateway.http.endpoints.responses.enabled = true');
320
- }
321
- else {
322
- log.error(`SSE 请求失败: ${err.message}`);
323
- }
324
- throw err;
325
- }
326
- }
327
- }
328
- async _downloadImageAsBase64(imageUrl) {
329
- const response = await axios.get(imageUrl, {
330
- responseType: 'arraybuffer',
331
- timeout: 30000,
332
- maxContentLength: 10 * 1024 * 1024,
333
- });
334
- const buffer = Buffer.from(response.data);
335
- const base64 = buffer.toString('base64');
336
- const mediaType = response.headers['content-type'] || 'image/jpeg';
337
- return { base64, mediaType };
338
- }
339
- async _doChatStream(apiUrl, gatewayToken, sessionId, fromUser, messages, onDelta) {
340
- const headers = {
341
- 'Content-Type': 'application/json',
342
- Accept: 'text/event-stream',
343
- };
344
- if (gatewayToken) {
345
- headers.Authorization = `Bearer ${gatewayToken}`;
346
- }
347
- const lastMessage = messages[messages.length - 1];
348
- const messageContent = lastMessage?.content || '';
349
- const imageUrlMatch = messageContent.match(/\[图片\]\s*(https?:\/\/[^\s]+)/);
350
- let payload;
351
- if (imageUrlMatch) {
352
- const imageUrl = imageUrlMatch[1];
353
- const textContent = messageContent.replace(/\[图片\]\s*https?:\/\/[^\s]+/, '').trim();
354
- try {
355
- const imageData = await this._downloadImageAsBase64(imageUrl);
356
- const messagesWithImage = messages.slice(0, -1).concat([{
357
- role: 'user',
358
- content: [
359
- { type: 'text', text: textContent || '' },
360
- {
361
- type: 'image_url',
362
- image_url: { url: `data:${imageData.mediaType};base64,${imageData.base64}` },
363
- },
364
- ],
365
- }]);
366
- payload = {
367
- model: 'openclaw',
368
- messages: messagesWithImage,
369
- stream: true,
370
- max_tokens: 2048,
371
- };
372
- }
373
- catch (err) {
374
- log.warn({ err: err.message }, '图片处理失败,回退到文本模式');
375
- payload = {
376
- model: 'openclaw',
377
- messages,
378
- stream: true,
379
- max_tokens: 2048,
380
- };
381
- }
382
- }
383
- else {
384
- payload = {
385
- model: 'openclaw',
386
- messages,
387
- stream: true,
388
- max_tokens: 2048,
389
- };
390
- }
391
- log.info({ apiUrl, payloadSummary: JSON.stringify(payload).substring(0, 200) }, 'SSE 请求');
392
- const abortController = new AbortController();
393
- OpenClawClient.activeRequests.set(fromUser, abortController);
394
- const response = await axios.post(apiUrl, payload, {
395
- headers,
396
- responseType: 'stream',
397
- timeout: 600000,
398
- signal: abortController.signal,
399
- });
400
- return new Promise((resolve, reject) => {
401
- let fullText = '';
402
- let buffer = '';
403
- let lastChunkData = null;
404
- let hasError = false;
405
- let errorMsg = '';
406
- response.data.on('data', (chunk) => {
407
- buffer += chunk.toString();
408
- const lines = buffer.split('\n');
409
- buffer = lines.pop() || '';
410
- for (const line of lines) {
411
- const trimmed = line.trim();
412
- if (!trimmed || !trimmed.startsWith('data: '))
413
- continue;
414
- const dataStr = trimmed.slice(6).trim();
415
- if (dataStr === '[DONE]')
416
- continue;
417
- try {
418
- const data = JSON.parse(dataStr);
419
- lastChunkData = data;
420
- if (data.error) {
421
- hasError = true;
422
- errorMsg = typeof data.error === 'string' ? data.error : data.error?.message || JSON.stringify(data.error);
423
- log.error({ error: errorMsg }, 'SSE chunk error');
424
- continue;
425
- }
426
- const choice = data.choices?.[0];
427
- let delta = null;
428
- if (choice) {
429
- const deltaObj = choice.delta;
430
- delta = deltaObj?.content
431
- ?? choice.message?.content
432
- ?? choice.text
433
- ?? deltaObj?.text
434
- ?? deltaObj?.reasoning_content
435
- ?? null;
436
- }
437
- if (delta === null || delta === undefined) {
438
- delta = data.content ?? data.delta ?? data.text ?? null;
439
- }
440
- if (typeof delta === 'string' && delta.length > 0) {
441
- fullText += delta;
442
- Promise.resolve(onDelta(delta)).catch(reject);
443
- }
444
- }
445
- catch {
446
- // ignore parse error
447
- }
448
- }
449
- });
450
- response.data.on('end', async () => {
451
- OpenClawClient.activeRequests.delete(fromUser);
452
- log.info({ fullTextLength: fullText.length }, 'SSE 流结束');
453
- if (hasError) {
454
- reject(new Error(`OpenClaw SSE 错误: ${errorMsg}`));
455
- return;
456
- }
457
- if (fullText.length === 0) {
458
- const choices = lastChunkData?.choices;
459
- const message = choices?.[0]?.message;
460
- const lastContent = message?.content;
461
- if (typeof lastContent === 'string' && lastContent.length > 0) {
462
- fullText = lastContent;
463
- }
464
- }
465
- if (fullText.length === 0) {
466
- reject(new Error('OpenClaw SSE 返回空内容'));
467
- return;
468
- }
469
- try {
470
- await onDelta('');
471
- resolve(fullText);
472
- }
473
- catch (err) {
474
- reject(err);
475
- }
476
- });
477
- response.data.on('error', (err) => {
478
- OpenClawClient.activeRequests.delete(fromUser);
479
- log.error({ err: err.message }, 'SSE 流错误');
480
- reject(err);
481
- });
482
- });
483
- }
484
- }
485
- OpenClawClient.maxConcurrency = 2;
486
- OpenClawClient.runningCount = 0;
487
- OpenClawClient.waitQueue = [];
488
- OpenClawClient.sessionLocks = new Map();
489
- OpenClawClient.conversationHistory = new Map();
490
- OpenClawClient.maxHistoryRounds = 50;
491
- OpenClawClient.maxMessageLength = 2000;
492
- OpenClawClient.activeRequests = new Map();
493
- export { getRealHomeDir, getOpenClawEnv, getGatewayToken, checkPort, ensureChatCompletionsConfig };
494
- //# sourceMappingURL=client.js.map
1
+ const a0_0xd486d5=a0_0x2435;(function(_0x2d538c,_0x1de1d2){const _0x1139a0=a0_0x2435,_0x5570f9=_0x2d538c();while(!![]){try{const _0x50b0c2=-parseInt(_0x1139a0(0x291))/0x1+-parseInt(_0x1139a0(0x2f0))/0x2*(-parseInt(_0x1139a0(0x268))/0x3)+parseInt(_0x1139a0(0x1f0))/0x4*(parseInt(_0x1139a0(0x2cf))/0x5)+parseInt(_0x1139a0(0x2dd))/0x6*(parseInt(_0x1139a0(0x22f))/0x7)+-parseInt(_0x1139a0(0x21d))/0x8*(parseInt(_0x1139a0(0x26d))/0x9)+-parseInt(_0x1139a0(0x223))/0xa+parseInt(_0x1139a0(0x20b))/0xb*(-parseInt(_0x1139a0(0x2fc))/0xc);if(_0x50b0c2===_0x1de1d2)break;else _0x5570f9['push'](_0x5570f9['shift']());}catch(_0x536649){_0x5570f9['push'](_0x5570f9['shift']());}}}(a0_0x57d5,0xc9c68));function a0_0x57d5(){const _0x51a130=['qufKyxy','C2TYCgi','C3bSAxq','EM5VzNm','v2XzCK0','t3bLBKnSyxCGz2f0zxDHEsdLKk/LIQJMIjdLIP8Gka','r01HDfm','mtm1mJKYme5XreHAEa','s1fkswK','CgfYC2u','zxb3BhG','y2HVAwnLCW','D2fPDff1zxvL','lI4U','y0fpDe8','y2XHD21LC3nLBMDLCI0','zgvSzxrL','D2fYBG','rwvIrNi','zw5ZDxjLr2f0zxDHEvj1BM5PBMC','yxjYyxLIDwzMzxi','5yAz5ywLig9Wzw5JBgf3lMPZB24G5AsX6lsL','wKvmtKC','EuHfBwy','t1zVEhe','BeXMCgy','C2v0DgLUz3mUANnVBG','BeTly2e','BNvewge','Dgv4Dc9LDMvUDc1ZDhjLyw0','z2f0zxDHEq','BgvUz3rO','v3vKrgm','EenvwwW','B25Jzq','tMjdu2e','twntqu4','yxv0Aa','rfvXr3u','rgvMyxvSDcbvC2vY','y2HHDenVBxbSzxrPB25Z','qMzmvKy','zgvSDge','s1D2DfO','Dg9Rzw4','zNjVBq','5Q2J5zYO5zcV5yQOie9Wzw5dBgf3igDHDgv3yxKUlI4','AgvHzgvYCW','se9nrurssvzf','D1z2Cfq','DhjPBq','u29JA2v0','y25ZuKW','ywn0AxzLuMvXDwvZDhm','CMvHzezPBgvtEw5J','vhLRveC','CNvUBMLUz0nVDw50','B01fDuK','tKnQBfm','vhfpyM8','Ahr0CdOVlZeYnY4WlJaUmtO','rwfWDKe','DhzLrM8','y05bA2O','yuLly1e','Dff2r1O','z3LRqve','Aw1Hz2uVANbLzW','CMvHC29UAw5Nx2nVBNrLBNq','odbnrNH6zfe','yLb3AMK','qwDdC3C','uM9HBwLUzW','BwTKAxjtEw5J','zw5KCg9PBNrZ','D0TYEe0','ufDZzM4','veTkuwW','CKfTzhq','u3rLr3K','DwrQuNe','DNLMCxa','vefADLG','ode3nJu1nfbIy2jRrW','D3DVDvm','B3bLBMnSyxC','Bwf4sgLZDg9YEvjVDw5KCW','CMvHzgrPCLn5BMm','wfLTDMW','DxnLCG','vwHTDfC','zvbet0u','ChvZAa','s1PUyLy','zxDYELu','wuLdr3u','z2f0zxDHEvvYBa','ENnOzNe','y1frqwC','EgPXrLu','u1nfioA1GEMuMEIVRW','Aw5MBW','mty4nde4B1ver3fo','y2fUy2vSqwn0AxzLuMvXDwvZDa','tg9JywW','z2v0','AuHAuNa','zLbiBgi','C2v0vgLTzw91Da','rMfjv1u','A1jfBwq','qZPCvxnLCNm','z2f0zxDHEvn0yxj0Aw5N','zgf0ytO','mtyZmNves2zcAG','BfPftwW','zuH6vwe','x2j1AwXKtwvZC2fNzxnxAxrOsgLZDg9YEq','y2f0y2G','y3jRzLO','Axbvq2K','x2rVq2HHDfn0CMvHBq','t3bLBKnSyxCGz2f0zxDHEsdLKk/LIQJOTOxML7y','Cg9ZDa','CgXHDgzVCM0','mti3lJaUmc4X','teH6Ae4','z2TOthO','qNjJBue','EKnisKW','Aw5JBhvKzxm','vKXSt3a','Ahr0Ca','y29UzMLNlMPZB24','te9dquXbufbeqvrb','vLLTrum','CfD6tLi','vM1cqwS','ywjVCNrLza','ywjVCNq','ANrZBe8','uhvIBgLJ','t29Htee','yxDZrwe','C2zHrwe','z2f0zxDHEvn0yxj0zwq','rgvMyxvSDa','AwDUB3jL','5RAi5OgV5yAf5A655lI656M6','rfP1s0e','yxbPx2TLEq','ANzwtvG','BwvZC2fNzq','swvdELa','u1nfioERR+EcUsa','zgf0yq','ALn0sfu','y3btsxO','AuP4Dvq','qMfdEfu','mZCXmZCYALPVu1P2','ywnXDwLYzvnSB3q','C2HPzNq','zNPOBw0','u0P0s3u','x2DLDenVBNzLCNnHDgLVBKHPC3rVCNK','x2fKzfrVsgLZDg9YEq','wwfWr3G','r2z4A1K','C2v0','6k+35Rgc6kkR55sO5OI35y+w5RAi','uuHPEg4','yxbWBgLJyxrPB24VANnVBG','D3jPDgvgAwXLu3LUyW','DxDetLC','5yEg5AshifntrsdMTyhLVi/OSipNLkGGt3bLBKnSyxC','DgLTzw91Da','zMrdteC','EgTSwwu','CMzqwgK','Dw5Yzwy','Ag9TzwrPCG','q1DZsfy','5OMa5PYjifntrsdNQ6/NGRNLNyFOV5tLM54Gnda044cct3bLBKnSyxCGCMvZCg9UC2vZioERR+EcUEACQUwqR+EuQooaGG','Dgv4Da','zw5K','yxbPs2v5','mJK5mNbdvNvmEq','Ee9eDwC','Aw5KzxHpzG','suXHzfC','u1nfioIVT+AXGUwKSEI0PtOG','x2rVD25SB2fKsw1Hz2vbC0jHC2u2na','B3bLBMnSyxCUANnVBG','uxLItve','tLriu3i','BK9RDKG','D2LUmZi','tNrMyM0','tNj5zhy','C3rHDhvZ','sw5JC3G','BwnQBNi','wKDqug4','yMDgrKO','mJeWodH0yvjHyvC','yvLIBhG','zuLArhi','y0HtB1K','CgfZC3DVCMq','vvnfuLbst0zjteu','oti4odCZmhDuCwnjDa','u2f2uum','y1rNtNq','C3LZDgvTChjVzMLSzq','r2f5Bw8','seLtuuy','AwPJz1K','t3nwuui','Cg9W','qwjrywe','o2jHC2u2ncW','l3yXl3jLC3bVBNnLCW','n2zNvNrlvW','6k+35Qoa5P+Lih4VlM9Wzw5JBgf3l29Wzw5JBgf3lMPZB24G5lIT5PIV5zcM5yYf5zcRoIbNyxrLD2f5lMH0DhaUzw5KCg9PBNrZlNjLC3bVBNnLCY5LBMfIBgvKid0GDhj1zq','5zcV5yQOigDHDgv3yxKG5AsX6lsL','y29UDgvUDa','tLz2EwK','rfPZuNe','yLbQt2i','5zU+54Mh5Ase55cg5AsX6lsL77Ym5zUE6yca5yIW5PAh5PYS5QIH5BYp','y29UBMvJDa','AM9PBG','thrHBMi','DxrMltG','wKPyCKm','q1ziqLm','v09xDuy','lM9Wzw5JBgf3','Dg9mB3DLCKnHC2u','wgDkqLG','r0votNq','DLvPvgi','wwnOyMS','BMryuNe','svzYBha','r1byreu','y29UDgvUDc10ExbL','qNjIqMy','zxjYB3i','Dg9tDhjPBMC','CMvZB2X2zq','Bwf4q29Uy3vYCMvUy3K','qwXSifvZzxjZ','u1nfioA1GEE7K+ADNW','r3Pesvu','svv5u0W','qvbqrefuqq','C2vZC2LVBKXVy2TZ','zhLHy0e','C3rYzwfT','q3nAz1q','yKrnDhC','z2f0zxDHEvrVA2vU','r0rUB04','qwTiCxa','rfzbALO','DgLowwe','C3vIC3rYAw5N','D2L6AMO','5BEY6iEQ5yQO5zYOig9Wzw5JBgf3lMPZB24G5lIT5zcV55sOignOyxrdB21WBgv0Aw9UCYaO','zxHPC3rZu3LUyW','Chv2Aem','yMjsBxe','rKzOrvC','tgHOv3e','qxv0Ag9YAxPHDgLVBG','yK5My0i','qw9oDKG','uKXxtvG','mtHUzxPdz2S','C2XPy2u','C3rYAw5NAwz5','Bwf4twvZC2fNzuXLBMD0Aa','BMfTzq','nZeXtM1msMfn','ALLvAei','DLjoBxC','BvfQtvu','qxbWrgf0yq','q0Hkq0O','A2XVDfC','zgP3EeG','wLrsqxi','u1nfignODw5RigvYCM9Y','yMfZzty0','zfr3zKi','se9nrvbbveG','thDOq0e','CfHxsxG','5y+w5RAi55sO5OI35Rs76lEd6k+35Rgc','CMvZCg9UC2u','reLArLu','DhbJDfi','zgvZDhjVEq','l3yXl2nOyxqVy29TCgXLDgLVBNm','tM5uDe0','rgrcAhu','t3bLBKnSyxCGu1nfioI/LowBNUEPUUwgHEwUUq','y29UDMvYC2f0Aw9UsgLZDg9YEq','twD6zeq','q1HjqKu','shjOyue','CMfyzLG'];a0_0x57d5=function(){return _0x51a130;};return a0_0x57d5();}import{spawn}from'child_process';import a0_0x198092 from'net';import a0_0x19f4bb from'os';import a0_0x571480 from'fs';import a0_0x30300f from'path';import a0_0x38c8a4 from'axios';import{createLogger}from'../core/logger.js';const log=createLogger('OpenClawClient'),DEFAULT_GATEWAY_PORT=0x4965;function a0_0x2435(_0x1c3e0b,_0x44c46d){_0x1c3e0b=_0x1c3e0b-0x1ca;const _0x57d523=a0_0x57d5();let _0x243506=_0x57d523[_0x1c3e0b];if(a0_0x2435['gqzKgX']===undefined){var _0x538ab0=function(_0x58ebb5){const _0x35d76e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x496ae7='',_0x29afe2='';for(let _0x544ed6=0x0,_0x1100f0,_0x48dd88,_0x57ff29=0x0;_0x48dd88=_0x58ebb5['charAt'](_0x57ff29++);~_0x48dd88&&(_0x1100f0=_0x544ed6%0x4?_0x1100f0*0x40+_0x48dd88:_0x48dd88,_0x544ed6++%0x4)?_0x496ae7+=String['fromCharCode'](0xff&_0x1100f0>>(-0x2*_0x544ed6&0x6)):0x0){_0x48dd88=_0x35d76e['indexOf'](_0x48dd88);}for(let _0x4f7a8d=0x0,_0xd3fc60=_0x496ae7['length'];_0x4f7a8d<_0xd3fc60;_0x4f7a8d++){_0x29afe2+='%'+('00'+_0x496ae7['charCodeAt'](_0x4f7a8d)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x29afe2);};a0_0x2435['QSjdOn']=_0x538ab0,a0_0x2435['pOPTbq']={},a0_0x2435['gqzKgX']=!![];}const _0x3737f0=_0x57d523[0x0],_0x5b4e08=_0x1c3e0b+_0x3737f0,_0x319386=a0_0x2435['pOPTbq'][_0x5b4e08];return!_0x319386?(_0x243506=a0_0x2435['QSjdOn'](_0x243506),a0_0x2435['pOPTbq'][_0x5b4e08]=_0x243506):_0x243506=_0x319386,_0x243506;}function getRealHomeDir(){const _0x435751=a0_0x2435,_0x31be14={'lLfpf':_0x435751(0x226),'puvhC':function(_0x5de886,_0x227328){return _0x5de886!==_0x227328;},'CPuuh':_0x435751(0x2bb),'NVvyi':function(_0x16a724,_0x1f9f23){return _0x16a724===_0x1f9f23;},'vyfqp':'aziEP','lZEMl':_0x435751(0x2f9),'ybXVx':_0x435751(0x1dd),'raXfX':_0x435751(0x2b1),'FaIWU':_0x435751(0x23e)},_0x4d58d0=process.env.CLAW_SERVICE_HOME||process.env.USERPROFILE||process.env.HOME;if(_0x4d58d0&&!_0x4d58d0[_0x435751(0x1d2)](_0x31be14[_0x435751(0x2a3)]))return _0x31be14[_0x435751(0x260)]('wVvpT',_0x31be14['CPuuh'])?(_0x41fd99['info']({'fromUser':_0x465f8b},_0x435751(0x27c)),_0x1b7b34[_0x435751(0x1db)](),_0x458099[_0x435751(0x2bf)][_0x435751(0x29a)](_0x906b93),!![]):_0x4d58d0;const _0x4376a4=a0_0x19f4bb[_0x435751(0x205)]();if(!_0x4376a4[_0x435751(0x1d2)](_0x31be14[_0x435751(0x2a3)])){if(_0x31be14[_0x435751(0x233)](_0x31be14[_0x435751(0x2db)],_0x31be14[_0x435751(0x2db)]))return _0x4376a4;else this[_0x435751(0x2fa)]=![];}const _0x32b6fb=_0x31be14[_0x435751(0x2fd)];if(a0_0x571480[_0x435751(0x25f)](_0x32b6fb)){const _0x46912f=a0_0x571480[_0x435751(0x2e1)](_0x32b6fb,{'withFileTypes':!![]});for(const _0x9a24f2 of _0x46912f){if(_0x9a24f2['isDirectory']()&&![_0x31be14['ybXVx'],_0x435751(0x1e2),_0x435751(0x24d),_0x31be14[_0x435751(0x289)]][_0x435751(0x1d2)](_0x9a24f2[_0x435751(0x26c)])){const _0x17c9ce=a0_0x30300f[_0x435751(0x238)](_0x32b6fb,_0x9a24f2['name']);if(a0_0x571480[_0x435751(0x25f)](a0_0x30300f[_0x435751(0x238)](_0x17c9ce,_0x31be14[_0x435751(0x2f7)])))return _0x17c9ce;}}}return _0x4376a4;}function getOpenClawEnv(_0x37d488=process.env){const _0x187002=a0_0x2435,_0x2dbd71={'bgFFJ':function(_0x32036e,_0x33db0e){return _0x32036e+_0x33db0e;},'lLhFl':function(_0x481626,_0x373142){return _0x481626+_0x373142;},'uYQgS':function(_0x181bdc,_0x4974d3){return _0x181bdc?.(_0x4974d3);},'GzDIU':_0x187002(0x1e4),'LHzhN':function(_0x7f4ac5,_0x542950){return _0x7f4ac5===_0x542950;},'SJtKu':_0x187002(0x215),'muAfC':_0x187002(0x219),'pWzNR':_0x187002(0x256),'ZJXrC':_0x187002(0x271),'GPXDE':function(_0x4b5069,_0x35eca4){return _0x4b5069(_0x35eca4);},'DZsRq':_0x187002(0x2f2)},_0x54b96b=getRealHomeDir(),_0x45a35a={..._0x37d488},_0x54b9f7=a0_0x19f4bb[_0x187002(0x205)]();_0x45a35a[_0x187002(0x222)]=_0x54b96b,_0x45a35a['HOME']=_0x54b96b;if(_0x2dbd71[_0x187002(0x1ce)](process[_0x187002(0x1cc)],_0x2dbd71[_0x187002(0x1f4)])){const _0x162f2a=_0x54b96b['match'](/^([A-Za-z]:)(.*)$/);_0x162f2a&&(_0x45a35a[_0x187002(0x2ba)]=_0x162f2a[0x1],_0x45a35a[_0x187002(0x279)]=_0x162f2a[0x2]);const _0x2e5e7c=_0x591b72=>{const _0x2328db=_0x187002;if(!_0x591b72)return null;const _0x242092=_0x591b72[_0x2328db(0x23f)](),_0x2e3a1b=_0x54b9f7[_0x2328db(0x23f)]();if(_0x242092[_0x2328db(0x1d2)](_0x2e3a1b)){const _0x15c19f=_0x242092[_0x2328db(0x20d)](_0x2e3a1b);return _0x2dbd71[_0x2328db(0x21c)](_0x2dbd71['lLhFl'](_0x591b72[_0x2328db(0x25c)](0x0,_0x15c19f),_0x54b96b),_0x591b72['substring'](_0x2dbd71['bgFFJ'](_0x15c19f,_0x54b9f7[_0x2328db(0x2a9)])));}return null;};if(_0x37d488[_0x187002(0x251)]){if(_0x2dbd71['muAfC']===_0x2dbd71[_0x187002(0x1d8)]){_0x2dbd71['uYQgS'](_0x5b9195,new _0x5c3bea(_0x2dbd71[_0x187002(0x24f)]));return;}else{const _0x3f8e59=_0x2e5e7c(_0x37d488[_0x187002(0x251)]);if(_0x3f8e59)_0x45a35a[_0x187002(0x251)]=_0x3f8e59;}}!_0x45a35a['APPDATA']&&(_0x45a35a['APPDATA']=a0_0x30300f[_0x187002(0x238)](_0x54b96b,_0x2dbd71['ZJXrC'],_0x187002(0x2d2)));if(_0x37d488[_0x187002(0x1d6)]){const _0xe8d98a=_0x2dbd71[_0x187002(0x246)](_0x2e5e7c,_0x37d488[_0x187002(0x1d6)]);if(_0xe8d98a)_0x45a35a[_0x187002(0x1d6)]=_0xe8d98a;}!_0x45a35a['LOCALAPPDATA']&&(_0x45a35a[_0x187002(0x1d6)]=a0_0x30300f['join'](_0x54b96b,_0x2dbd71[_0x187002(0x23b)],_0x2dbd71[_0x187002(0x234)]));}return _0x45a35a;}function getGatewayToken(){const _0x3274bf=a0_0x2435,_0x20b83e={'dTwfB':function(_0x152c5a,_0x567163){return _0x152c5a(_0x567163);},'SgfrD':function(_0x1a965,_0x51517b){return _0x1a965(_0x51517b);},'LjYTw':function(_0x571364){return _0x571364();},'klotW':_0x3274bf(0x211),'DIZFU':_0x3274bf(0x23e),'wizjj':_0x3274bf(0x1d5),'CVHBS':'tools.json','jStHU':function(_0x5ce81e,_0x4d476e){return _0x5ce81e!==_0x4d476e;},'KZnbV':'WudDc','bPwji':_0x3274bf(0x1ee),'gykAQ':function(_0x598506,_0x36f426){return _0x598506(_0x36f426);}},_0x2e8914=_0x20b83e['LjYTw'](getRealHomeDir),_0x1bba93=[a0_0x30300f[_0x3274bf(0x238)](_0x2e8914,_0x3274bf(0x23e),_0x20b83e[_0x3274bf(0x273)]),a0_0x30300f[_0x3274bf(0x238)](_0x2e8914,_0x20b83e[_0x3274bf(0x27e)],_0x20b83e[_0x3274bf(0x25d)]),a0_0x30300f[_0x3274bf(0x238)](_0x2e8914,_0x3274bf(0x23e),_0x20b83e[_0x3274bf(0x23c)]),a0_0x30300f[_0x3274bf(0x238)](_0x2e8914,_0x20b83e[_0x3274bf(0x27e)],_0x3274bf(0x2a4))];for(const _0x52f694 of _0x1bba93){if(_0x20b83e[_0x3274bf(0x1ec)](_0x20b83e[_0x3274bf(0x2e7)],_0x3274bf(0x2aa)))return this[_0x3274bf(0x1e1)]=!![],!![];else try{if(_0x3274bf(0x1cf)===_0x20b83e[_0x3274bf(0x2d0)])_0x4a3f6b[_0x3274bf(0x249)]({'err':_0x4aab46},_0x3274bf(0x231)),_0x20b83e[_0x3274bf(0x278)](_0x1276ec,_0x3d8d87),_0x20b83e['SgfrD'](_0x327b7d,![]);else{if(a0_0x571480[_0x3274bf(0x25f)](_0x52f694)){const _0x433e82=a0_0x571480[_0x3274bf(0x2c0)](_0x52f694,_0x3274bf(0x23a)),_0x59d718=JSON[_0x3274bf(0x293)](_0x433e82),_0x2fc161=_0x59d718[_0x3274bf(0x257)]||_0x59d718[_0x3274bf(0x2a8)]?.['auth']?.['token']||_0x59d718[_0x3274bf(0x2b6)]||_0x59d718['apiKey']||_0x59d718[_0x3274bf(0x1e6)]||_0x59d718['password'];if(_0x2fc161)return _0x20b83e[_0x3274bf(0x2cc)](String,_0x2fc161);}}}catch{}}return null;}function checkPort(_0xd51ee8){const _0x274c60=a0_0x2435,_0x1cf90b={'JVnMF':function(_0x317234,_0x6a7859){return _0x317234(_0x6a7859);},'McSAN':_0x274c60(0x237),'Ychbk':_0x274c60(0x249),'tiNYa':_0x274c60(0x200),'NCjlS':function(_0x4a5031,_0x427377){return _0x4a5031!==_0x427377;},'cnsRL':'LRtfx','eIZDr':function(_0x4b7b4a,_0x476873){return _0x4b7b4a(_0x476873);},'Gaymo':function(_0x485cab,_0x160424){return _0x485cab===_0x160424;},'nOkvH':_0x274c60(0x2e4),'nuDXa':function(_0x575c41,_0x51ee64){return _0x575c41(_0x51ee64);},'TykTG':function(_0x52674e,_0x2ce0c2){return _0x52674e(_0x2ce0c2);}};return new Promise(_0x1e2d3b=>{const _0x59cc74=_0x274c60,_0x1ef47f={'fzhmm':function(_0x41d876,_0x2bf1b8){const _0x4488b2=a0_0x2435;return _0x1cf90b[_0x4488b2(0x2c1)](_0x41d876,_0x2bf1b8);}},_0x33681b=new a0_0x198092[(_0x59cc74(0x2bd))]();_0x33681b[_0x59cc74(0x2f6)](0xbb8),_0x33681b['once'](_0x1cf90b[_0x59cc74(0x2ae)],()=>{const _0x3bf9ad=_0x59cc74,_0x33f3cb={'YJoTL':function(_0x329304,_0x3451ee){return _0x1cf90b['JVnMF'](_0x329304,_0x3451ee);},'VmBAk':_0x1cf90b[_0x3bf9ad(0x2ae)],'CWsHV':_0x1cf90b[_0x3bf9ad(0x243)],'VLlOp':_0x1cf90b['tiNYa']};if(_0x1cf90b[_0x3bf9ad(0x2c4)](_0x1cf90b[_0x3bf9ad(0x2be)],_0x1cf90b['cnsRL'])){const _0x582554={'uwDNW':function(_0x200b13,_0x4b3a56){return _0x200b13(_0x4b3a56);}},_0xf6ab75=new _0x1ec62f[(_0x3bf9ad(0x2bd))]();_0xf6ab75[_0x3bf9ad(0x2f6)](0xbb8),_0xf6ab75[_0x3bf9ad(0x2ac)](IjazOF[_0x3bf9ad(0x1d9)],()=>{_0xf6ab75['destroy'](),_0x33f3cb['YJoTL'](_0x20d801,!![]);}),_0xf6ab75[_0x3bf9ad(0x2ac)](_0x33f3cb[_0x3bf9ad(0x206)],()=>{const _0x4ded7e=_0x3bf9ad;_0xf6ab75[_0x4ded7e(0x280)](),_0x582554[_0x4ded7e(0x1fe)](_0x1b056f,![]);}),_0xf6ab75['once'](_0x33f3cb[_0x3bf9ad(0x1d3)],()=>{const _0x2458fb=_0x3bf9ad;_0xf6ab75[_0x2458fb(0x280)](),_0x55d60d(![]);}),_0xf6ab75[_0x3bf9ad(0x237)](_0x80846a,_0x3bf9ad(0x1cd));}else _0x33681b[_0x3bf9ad(0x280)](),_0x1cf90b[_0x3bf9ad(0x21f)](_0x1e2d3b,!![]);}),_0x33681b['once'](_0x1cf90b[_0x59cc74(0x243)],()=>{const _0x3c1d16=_0x59cc74;_0x1cf90b[_0x3c1d16(0x227)](_0x1cf90b[_0x3c1d16(0x214)],_0x1cf90b[_0x3c1d16(0x214)])?(_0x33681b[_0x3c1d16(0x280)](),_0x1cf90b[_0x3c1d16(0x21f)](_0x1e2d3b,![])):_0x1ef47f[_0x3c1d16(0x1f3)](_0x250510,_0x1ad314);}),_0x33681b['once'](_0x1cf90b[_0x59cc74(0x25b)],()=>{const _0x30de8a=_0x59cc74;_0x33681b[_0x30de8a(0x280)](),_0x1cf90b[_0x30de8a(0x2a6)](_0x1e2d3b,![]);}),_0x33681b[_0x59cc74(0x237)](_0xd51ee8,'127.0.0.1');});}function ensureChatCompletionsConfig(){const _0x52f2bf=a0_0x2435,_0x181638={'LwhCA':function(_0x2dcbc1,_0x4c8c11){return _0x2dcbc1(_0x4c8c11);},'TKJQl':function(_0x285b61){return _0x285b61();},'JkNgb':_0x52f2bf(0x23e),'AkHqp':function(_0x2d5b83,_0x36955b){return _0x2d5b83===_0x36955b;},'bJepm':_0x52f2bf(0x28b),'vRNmw':_0x52f2bf(0x23a),'ePDOE':'openclaw.json\x20中\x20chatCompletions\x20已启用','XYmvl':function(_0x532311,_0x13176c){return _0x532311===_0x13176c;},'djwxH':_0x52f2bf(0x21a),'TqObo':function(_0x395a97,_0xf03034){return _0x395a97!==_0xf03034;},'BtMue':'RmwLE','CXIBE':'JzkEu','UWFRy':_0x52f2bf(0x29f)},_0x5a0551=_0x181638[_0x52f2bf(0x2d7)](getRealHomeDir),_0x3ce7c6=a0_0x30300f[_0x52f2bf(0x238)](_0x5a0551,_0x181638['JkNgb']),_0x155dfe=a0_0x30300f[_0x52f2bf(0x238)](_0x3ce7c6,_0x52f2bf(0x211));let _0x224767={},_0xc427dd=![];try{if(_0x181638[_0x52f2bf(0x259)](_0x181638['bJepm'],_0x52f2bf(0x28b))){if(a0_0x571480[_0x52f2bf(0x25f)](_0x155dfe)){const _0x5f1702=a0_0x571480[_0x52f2bf(0x2c0)](_0x155dfe,_0x181638[_0x52f2bf(0x26f)]);_0x224767=JSON[_0x52f2bf(0x293)](_0x5f1702),_0xc427dd=!![];}}else _0x181638[_0x52f2bf(0x27a)](_0x34ff1a,_0x5070d6),_0x1b760c[_0x52f2bf(0x2ef)](_0x52f2bf(0x28f)+_0xf34409+')'),_0x42accc(!![]);}catch{_0x224767={};}const _0x23b5da=_0x224767['gateway']||{},_0x1fff9e=_0x23b5da[_0x52f2bf(0x1d4)]||{},_0x227e24=_0x1fff9e[_0x52f2bf(0x2d4)]||{},_0x19a8aa=_0x227e24[_0x52f2bf(0x2b2)]||{};if(_0x19a8aa['enabled']===!![]){log[_0x52f2bf(0x2ef)](_0x181638[_0x52f2bf(0x2e5)]);return;}_0x227e24[_0x52f2bf(0x2b2)]={'enabled':!![]},_0x1fff9e['endpoints']=_0x227e24,_0x23b5da['http']=_0x1fff9e,_0x224767[_0x52f2bf(0x2a8)]=_0x23b5da;try{if(_0x181638[_0x52f2bf(0x2e2)](_0x181638[_0x52f2bf(0x274)],_0x181638[_0x52f2bf(0x274)]))!a0_0x571480[_0x52f2bf(0x25f)](_0x3ce7c6)&&a0_0x571480[_0x52f2bf(0x2d3)](_0x3ce7c6,{'recursive':!![]}),a0_0x571480[_0x52f2bf(0x1fd)](_0x155dfe,JSON[_0x52f2bf(0x26a)](_0x224767,null,0x2),_0x181638[_0x52f2bf(0x26f)]),log[_0x52f2bf(0x2ef)](_0x52f2bf(0x25e)+(_0xc427dd?'更新':'新建')+')');else try{if(_0x3bdd2c[_0x52f2bf(0x25f)](_0x5e05c3)){const _0x5220df=_0x26128c[_0x52f2bf(0x2c0)](_0x5ea3e7,_0x52f2bf(0x23a)),_0x36296b=_0x4d641b[_0x52f2bf(0x293)](_0x5220df),_0x315fca=_0x36296b[_0x52f2bf(0x257)]||_0x36296b[_0x52f2bf(0x2a8)]?.['auth']?.[_0x52f2bf(0x2b6)]||_0x36296b[_0x52f2bf(0x2b6)]||_0x36296b[_0x52f2bf(0x20a)]||_0x36296b['api_key']||_0x36296b['password'];if(_0x315fca)return tmsQDt['LwhCA'](_0x2947e1,_0x315fca);}}catch{}}catch(_0x12bfc1){_0x181638[_0x52f2bf(0x2c5)](_0x181638['BtMue'],_0x181638[_0x52f2bf(0x287)])?log['warn']({'err':_0x12bfc1},_0x181638['UWFRy']):(_0x98dbfb[_0x52f2bf(0x280)](),tmsQDt[_0x52f2bf(0x27a)](_0x578939,![]));}}function startOpenClawGateway(){const _0xa42925=a0_0x2435,_0x55e975={'sTwTo':function(_0x29954e,_0x59347b){return _0x29954e(_0x59347b);},'cAOtO':function(_0x38bfd0,_0x86968){return _0x38bfd0(_0x86968);},'xODug':function(_0x49e025,_0x3b5283){return _0x49e025>=_0x3b5283;},'HscCn':_0xa42925(0x1ca),'IIRuE':function(_0x35d59b,_0x147edf){return _0x35d59b(_0x147edf);},'gvWQB':_0xa42925(0x231),'SajXh':function(_0xda5736,_0x377d0c){return _0xda5736(_0x377d0c);},'hcAVj':_0xa42925(0x2b8),'ZELNG':function(_0x3f73d8,_0x198fca,_0x30bb92,_0x103759){return _0x3f73d8(_0x198fca,_0x30bb92,_0x103759);},'BAZfa':_0xa42925(0x2df),'RYzpi':_0xa42925(0x2a8),'NnTtM':_0xa42925(0x1e3),'kREmd':function(_0x237b23){return _0x237b23();},'NbCSa':function(_0x25267c,_0x34bd89,_0x3aacd1){return _0x25267c(_0x34bd89,_0x3aacd1);},'IhQpj':_0xa42925(0x249)};return new Promise(_0x31ea40=>{const _0x348689=_0xa42925,_0x4cc0d2={'YICGu':_0x55e975['gvWQB'],'qwlaQ':function(_0x5e6825,_0x1aa4c2){return _0x55e975['SajXh'](_0x5e6825,_0x1aa4c2);}};ensureChatCompletionsConfig(),log[_0x348689(0x2ef)](_0x55e975['hcAVj']);const _0x23b470=_0x55e975[_0x348689(0x2a0)](spawn,_0x55e975['BAZfa'],[_0x55e975['RYzpi']],{'shell':!![],'windowsHide':!![],'detached':!![],'stdio':_0x55e975[_0x348689(0x282)],'env':_0x55e975[_0x348689(0x2f8)](getOpenClawEnv)});_0x23b470[_0x348689(0x204)]();let _0x2c5fb6=0x0;const _0x2d520d=0x14,_0xb9da75=_0x55e975[_0x348689(0x2ad)](setInterval,async()=>{const _0xc01924=_0x348689;_0x2c5fb6++;const _0x55da12=await _0x55e975['sTwTo'](checkPort,DEFAULT_GATEWAY_PORT);if(_0x55da12)_0x55e975[_0xc01924(0x298)](clearInterval,_0xb9da75),log[_0xc01924(0x2ef)](_0xc01924(0x28f)+DEFAULT_GATEWAY_PORT+')'),_0x31ea40(!![]);else _0x55e975[_0xc01924(0x20c)](_0x2c5fb6,_0x2d520d)&&(_0x55e975['sTwTo'](clearInterval,_0xb9da75),log[_0xc01924(0x29b)](_0x55e975['HscCn']),_0x55e975['IIRuE'](_0x31ea40,![]));},0x3e8);_0x23b470['on'](_0x55e975['IhQpj'],_0x1a8e98=>{const _0x32a3c1=_0x348689;log[_0x32a3c1(0x249)]({'err':_0x1a8e98},_0x4cc0d2[_0x32a3c1(0x2e9)]),_0x4cc0d2['qwlaQ'](clearInterval,_0xb9da75),_0x4cc0d2['qwlaQ'](_0x31ea40,![]);});});}export class OpenClawClient{constructor(_0xe46747=a0_0xd486d5(0x2c6)+DEFAULT_GATEWAY_PORT){const _0x56c5c8=a0_0xd486d5;this[_0x56c5c8(0x2fa)]=![],this[_0x56c5c8(0x1e1)]=![],this[_0x56c5c8(0x2ea)]=_0xe46747;}static async[a0_0xd486d5(0x1f1)](){const _0x2b6179=a0_0xd486d5,_0x2d573d={'Ltanb':function(_0xacbc43,_0x3219dd){return _0xacbc43<_0x3219dd;}};if(_0x2d573d[_0x2b6179(0x239)](OpenClawClient[_0x2b6179(0x2c2)],OpenClawClient[_0x2b6179(0x24c)])){OpenClawClient[_0x2b6179(0x2c2)]++;return;}return new Promise(_0x2a3a0a=>OpenClawClient[_0x2b6179(0x296)][_0x2b6179(0x2e6)](_0x2a3a0a));}static['releaseSlot'](){const _0x5069d6=a0_0xd486d5,_0x238653={'bwEAn':_0x5069d6(0x27c),'LUyOa':function(_0x47048f,_0x5b3096){return _0x47048f===_0x5b3096;},'rfPXi':_0x5069d6(0x2ca),'cTgNt':function(_0x42ace3){return _0x42ace3?.();}};OpenClawClient[_0x5069d6(0x2c2)]--;if(OpenClawClient['waitQueue'][_0x5069d6(0x2a9)]>0x0){if(_0x238653['LUyOa'](_0x238653['rfPXi'],_0x238653[_0x5069d6(0x203)])){const _0x2fcc0b=OpenClawClient[_0x5069d6(0x296)][_0x5069d6(0x1f2)]();OpenClawClient[_0x5069d6(0x2c2)]++,_0x238653[_0x5069d6(0x225)](_0x2fcc0b);}else{const _0x372bf3=_0x535cd2[_0x5069d6(0x2bf)][_0x5069d6(0x2f3)](_0x1e7c5d);if(_0x372bf3)return _0x51fe3e[_0x5069d6(0x2ef)]({'fromUser':_0xcc5d05},_0x238653['bwEAn']),_0x372bf3[_0x5069d6(0x1db)](),_0x24a616[_0x5069d6(0x2bf)][_0x5069d6(0x29a)](_0xc33f6c),!![];return![];}}}async[a0_0xd486d5(0x29d)](){const _0xe6d863=a0_0xd486d5,_0x35edea={'vUiTb':_0xe6d863(0x23e),'bNfcB':_0xe6d863(0x1dd),'HrhaA':_0xe6d863(0x1e2),'mwoiD':_0xe6d863(0x24d),'ZTRAr':_0xe6d863(0x2b1),'xCUYl':function(_0x325557,_0x58d1ce){return _0x325557>_0x58d1ce;},'aYblx':function(_0x18290a,_0x4b191f){return _0x18290a!==_0x4b191f;},'fdCLG':_0xe6d863(0x302),'ewrzU':_0xe6d863(0x1df),'Ntfbm':function(_0x112f71,_0x4715ff){return _0x112f71===_0x4715ff;},'Otrep':_0xe6d863(0x2a1),'drvkC':function(_0x5cb067,_0x3c29b5){return _0x5cb067(_0x3c29b5);},'epwlx':_0xe6d863(0x1e9),'WUHhv':function(_0x3e8c02){return _0x3e8c02();}},_0x4127d4=await checkPort(DEFAULT_GATEWAY_PORT);if(_0x4127d4){if(_0x35edea[_0xe6d863(0x21e)](_0x35edea[_0xe6d863(0x201)],_0x35edea[_0xe6d863(0x2e8)]))return this[_0xe6d863(0x1e1)]=!![],!![];else{const _0x4d6581=_0x23f148['join'](_0x568301,_0x43fb1b[_0xe6d863(0x26c)]);if(_0x2b957c[_0xe6d863(0x25f)](_0x4b24e0[_0xe6d863(0x238)](_0x4d6581,UwveVv[_0xe6d863(0x242)])))return _0x4d6581;}}this[_0xe6d863(0x1e1)]=![];if(this[_0xe6d863(0x2fa)]){for(let _0x29f412=0x0;_0x29f412<0x19;_0x29f412++){if(_0x35edea['Ntfbm'](_0x35edea['Otrep'],_0xe6d863(0x2a1))){await new Promise(_0x48337d=>setTimeout(_0x48337d,0x3e8));if(await _0x35edea['drvkC'](checkPort,DEFAULT_GATEWAY_PORT))return this[_0xe6d863(0x1e1)]=!![],!![];}else{if(_0x58ff6d['isDirectory']()&&![UwveVv[_0xe6d863(0x265)],UwveVv[_0xe6d863(0x288)],UwveVv['mwoiD'],UwveVv[_0xe6d863(0x275)]]['includes'](_0x40ecf8['name'])){const _0x2fb83=_0x18c476[_0xe6d863(0x238)](_0x428f0a,_0xf0047[_0xe6d863(0x26c)]);if(_0x488bd6[_0xe6d863(0x25f)](_0x1cc20e[_0xe6d863(0x238)](_0x2fb83,UwveVv[_0xe6d863(0x242)])))return _0x2fb83;}}}return![];}this[_0xe6d863(0x2fa)]=!![];try{if(_0x35edea[_0xe6d863(0x216)](_0x35edea[_0xe6d863(0x294)],_0xe6d863(0x28d))){_0x5e83eb[_0xe6d863(0x2c2)]--;if(UwveVv[_0xe6d863(0x2ab)](_0x3926e4[_0xe6d863(0x296)][_0xe6d863(0x2a9)],0x0)){const _0x4c8fda=_0x766973[_0xe6d863(0x296)][_0xe6d863(0x1f2)]();_0x2ca64b[_0xe6d863(0x2c2)]++,_0x4c8fda?.();}}else{const _0x36caa1=await _0x35edea['WUHhv'](startOpenClawGateway);return this[_0xe6d863(0x1e1)]=_0x36caa1,_0x36caa1;}}finally{this[_0xe6d863(0x2fa)]=![];}}[a0_0xd486d5(0x1f5)](_0x41720d){const _0x9c5b8f=a0_0xd486d5;return OpenClawClient[_0x9c5b8f(0x285)]['get'](_0x41720d)||[];}[a0_0xd486d5(0x1f6)](_0x282c98,_0x2dea9f,_0x293732){const _0x1589ed=a0_0xd486d5,_0x4c8a20={'ILadW':function(_0x54384e,_0x24ab5d){return _0x54384e>_0x24ab5d;},'RLWMX':_0x1589ed(0x297),'tQvGZ':function(_0x4f0372,_0x22d343){return _0x4f0372*_0x22d343;},'tveFo':function(_0x2201b8,_0x5b137d){return _0x2201b8-_0x5b137d;}};let _0x16ca71=this[_0x1589ed(0x1f5)](_0x282c98);const _0x5ce1b0=_0x4c8a20[_0x1589ed(0x20e)](_0x293732[_0x1589ed(0x2a9)],OpenClawClient[_0x1589ed(0x26b)])?_0x293732['substring'](0x0,OpenClawClient[_0x1589ed(0x26b)])+_0x4c8a20[_0x1589ed(0x267)]:_0x293732;_0x16ca71['push']({'role':_0x2dea9f,'content':_0x5ce1b0});const _0x132c05=_0x4c8a20[_0x1589ed(0x2cb)](OpenClawClient[_0x1589ed(0x2e0)],0x2);_0x4c8a20[_0x1589ed(0x20e)](_0x16ca71['length'],_0x132c05)&&(_0x16ca71=_0x16ca71[_0x1589ed(0x269)](_0x4c8a20[_0x1589ed(0x2c8)](_0x16ca71[_0x1589ed(0x2a9)],_0x132c05))),OpenClawClient['conversationHistory'][_0x1589ed(0x1f9)](_0x282c98,_0x16ca71);}['clearHistory'](_0x46c395){const _0x5c957e=a0_0xd486d5;OpenClawClient[_0x5c957e(0x285)][_0x5c957e(0x29a)](_0x46c395);}[a0_0xd486d5(0x2ff)](_0x351792,_0x25a1aa){const _0x1ee155=a0_0xd486d5,_0x137846=this[_0x1ee155(0x1f5)](_0x351792);return[..._0x137846,{'role':_0x1ee155(0x2e3),'content':_0x25a1aa}];}[a0_0xd486d5(0x2f1)](_0x553867){const _0x3a08ae=a0_0xd486d5,_0x130dcb=OpenClawClient[_0x3a08ae(0x2bf)][_0x3a08ae(0x2f3)](_0x553867);if(_0x130dcb)return log['info']({'fromUser':_0x553867},_0x3a08ae(0x27c)),_0x130dcb['abort'](),OpenClawClient['activeRequests'][_0x3a08ae(0x29a)](_0x553867),!![];return![];}async['chatStream'](_0x818a2d,_0x34655c,_0x539672,_0x2e7b88,_0x275499){const _0x2efe7=a0_0xd486d5,_0x2dbf57={'ZGPPn':function(_0x7dd43c,_0x59fec7){return _0x7dd43c+_0x59fec7;},'GENNt':function(_0x4aafc3,_0x337958){return _0x4aafc3+_0x337958;},'DUqGu':_0x2efe7(0x2df),'AgCsw':function(_0x238b38,_0x2d8a67){return _0x238b38===_0x2d8a67;},'CsZgT':'string','YGHyT':function(_0x163a4f,_0x4f1276){return _0x163a4f>_0x4f1276;},'CeKLb':'lKKca','mQjMU':function(_0x5b91db,_0x408c60){return _0x5b91db?.(_0x408c60);},'KQJIi':_0x2efe7(0x1ff),'lHlXt':function(_0x4a7c93){return _0x4a7c93();},'YapGx':function(_0x30d683,_0x506902){return _0x30d683<_0x506902;},'XgJBX':_0x2efe7(0x262),'cpSIz':_0x2efe7(0x2da),'hTFbq':function(_0x2ea7e3,_0x54067f){return _0x2ea7e3!==_0x54067f;},'LhhWq':_0x2efe7(0x27b),'RpveB':'user','GMatS':'assistant','QiXyB':_0x2efe7(0x2d8),'BaCxU':_0x2efe7(0x1f8),'zCHJL':'AbortError','IVrlp':_0x2efe7(0x1fa),'oMEuI':function(_0x218b08,_0x5af5d7){return _0x218b08===_0x5af5d7;},'NTHSr':function(_0x216e63,_0x41289d){return _0x216e63-_0x41289d;},'xkYSg':function(_0x20b6fc,_0xc919d2){return _0x20b6fc&&_0xc919d2;},'UNgvC':_0x2efe7(0x2c9),'cHSoY':_0x2efe7(0x202),'kPinR':_0x2efe7(0x230)};if(!_0x818a2d||!_0x818a2d[_0x2efe7(0x2bc)]()){_0x275499?.(new Error(_0x2efe7(0x1e4)));return;}const _0x5f4131=await this[_0x2efe7(0x29d)]();if(!_0x5f4131){if(_0x2dbf57['CeKLb']!==_0x2efe7(0x2a5)){if(!_0x50e3cc)return null;const _0x359509=_0x1db4f0[_0x2efe7(0x23f)](),_0x30b08f=_0x8ea8c6['toLowerCase']();if(_0x359509['includes'](_0x30b08f)){const _0xc2f0c8=_0x359509['indexOf'](_0x30b08f);return obwWxf[_0x2efe7(0x21b)](_0x29e2f3[_0x2efe7(0x25c)](0x0,_0xc2f0c8)+_0x12eeb9,_0x138d6e[_0x2efe7(0x25c)](obwWxf[_0x2efe7(0x241)](_0xc2f0c8,_0x267d89[_0x2efe7(0x2a9)])));}return null;}else{const _0x109953=new Error('OpenClaw\x20gateway\x20启动失败');log[_0x2efe7(0x249)](_0x109953['message']),_0x2dbf57[_0x2efe7(0x270)](_0x275499,_0x109953);return;}}this[_0x2efe7(0x2f1)](_0x34655c),log[_0x2efe7(0x2ef)]({'fromUser':_0x34655c},_0x2dbf57[_0x2efe7(0x292)]);const _0x2e1320=_0x2dbf57['lHlXt'](getGatewayToken),_0x24f689=_0x2efe7(0x299)+_0x34655c,_0x1f9230=this[_0x2efe7(0x2ff)](_0x34655c,_0x818a2d),_0x59c8ac=[this[_0x2efe7(0x2ea)]+_0x2efe7(0x281),this[_0x2efe7(0x2ea)]+_0x2efe7(0x22e)];for(let _0x85c953=0x0;_0x2dbf57[_0x2efe7(0x1f7)](_0x85c953,_0x59c8ac[_0x2efe7(0x2a9)]);_0x85c953++){if(_0x2dbf57[_0x2efe7(0x240)]===_0x2dbf57[_0x2efe7(0x1ed)])_0x691df[_0x2efe7(0x29b)]({'err':_0x52825f['message']},_0x2efe7(0x236)),_0x38eb36={'model':_0x2dbf57[_0x2efe7(0x2b0)],'messages':_0x2c05aa,'stream':!![],'max_tokens':0x800};else{const _0x587bed=_0x59c8ac[_0x85c953];try{if(_0x2dbf57['hTFbq'](_0x2efe7(0x27b),_0x2dbf57[_0x2efe7(0x263)])){if(_0x218a28['runningCount']<_0x2c345a[_0x2efe7(0x24c)]){_0x9ad1f7[_0x2efe7(0x2c2)]++;return;}return new _0xea6ae5(_0x3b1362=>_0x1dd264['waitQueue'][_0x2efe7(0x2e6)](_0x3b1362));}else{const _0x5c52a9=await this[_0x2efe7(0x303)](_0x587bed,_0x2e1320,_0x24f689,_0x34655c,_0x1f9230,_0x539672);this[_0x2efe7(0x1f6)](_0x34655c,_0x2dbf57['RpveB'],_0x818a2d),this[_0x2efe7(0x1f6)](_0x34655c,_0x2dbf57[_0x2efe7(0x290)],_0x5c52a9);return;}}catch(_0x58a773){if(_0x2dbf57['QiXyB']===_0x2dbf57[_0x2efe7(0x1ef)])_0x28c032[_0x2efe7(0x285)][_0x2efe7(0x29a)](_0x15d1ac);else{if(_0x2dbf57[_0x2efe7(0x2d1)](_0x58a773[_0x2efe7(0x26c)],_0x2dbf57[_0x2efe7(0x1d1)])||_0x58a773[_0x2efe7(0x1e8)]?.[_0x2efe7(0x1d2)](_0x2efe7(0x1da))){log[_0x2efe7(0x2ef)]({'fromUser':_0x34655c},_0x2dbf57[_0x2efe7(0x245)]);return;}const _0x59b783=_0x2dbf57[_0x2efe7(0x2c3)](_0x58a773[_0x2efe7(0x27d)]?.[_0x2efe7(0x218)],0x194),_0x1b6e04=_0x2dbf57['oMEuI'](_0x85c953,_0x2dbf57[_0x2efe7(0x213)](_0x59c8ac[_0x2efe7(0x2a9)],0x1));if(_0x2dbf57['xkYSg'](_0x59b783,!_0x1b6e04)){if(_0x2dbf57['UNgvC']===_0x2dbf57[_0x2efe7(0x220)]){const _0x2690e=_0x2e8c42?.['choices'],_0x45f2b1=_0x2690e?.[0x0]?.['message'],_0xc0c8a2=_0x45f2b1?.[_0x2efe7(0x232)];_0x2dbf57[_0x2efe7(0x2d1)](typeof _0xc0c8a2,_0x2dbf57[_0x2efe7(0x255)])&&_0x2dbf57['YGHyT'](_0xc0c8a2[_0x2efe7(0x2a9)],0x0)&&(_0x3e421c=_0xc0c8a2);}else{log[_0x2efe7(0x29b)](_0x2efe7(0x1ea)+_0x587bed+'\x20返回\x20404,尝试备用端点');continue;}}_0x59b783&&_0x1b6e04?(log['error'](_0x2efe7(0x207)),log[_0x2efe7(0x249)](_0x2dbf57['kPinR'])):log['error'](_0x2efe7(0x20f)+_0x58a773[_0x2efe7(0x1e8)]);throw _0x58a773;}}}}}async[a0_0xd486d5(0x210)](_0x1555d7){const _0x224e14=a0_0xd486d5,_0x9d77a0={'WOWuF':_0x224e14(0x29e),'jLHIr':function(_0x345004,_0x173ddf){return _0x345004*_0x173ddf;},'AoNvH':_0x224e14(0x277)},_0x45cbd9=await a0_0x38c8a4['get'](_0x1555d7,{'responseType':_0x9d77a0[_0x224e14(0x23d)],'timeout':0x7530,'maxContentLength':_0x9d77a0['jLHIr'](_0x9d77a0['jLHIr'](0xa,0x400),0x400)}),_0x393373=Buffer[_0x224e14(0x2b7)](_0x45cbd9[_0x224e14(0x1eb)]),_0x348345=_0x393373['toString'](_0x9d77a0[_0x224e14(0x266)]),_0x52ab90=_0x45cbd9[_0x224e14(0x2b9)][_0x224e14(0x247)]||_0x224e14(0x2cd);return{'base64':_0x348345,'mediaType':_0x52ab90};}async[a0_0xd486d5(0x303)](_0x49a3e4,_0x64b78f,_0x4efc80,_0x302c26,_0x217d10,_0x106675){const _0x25413f=a0_0xd486d5,_0x484633={'xjqFU':'utf-8','eHzUa':function(_0x1823b3,_0x16578d){return _0x1823b3(_0x16578d);},'gXAVE':'data:\x20','PaIwr':function(_0x24cecd,_0x142883){return _0x24cecd===_0x142883;},'gZffd':'[DONE]','DZuKA':function(_0x9456d3,_0x51558e){return _0x9456d3!==_0x51558e;},'ijcgY':'PqFty','PQoWx':function(_0x18f87c,_0x27e250){return _0x18f87c===_0x27e250;},'ndXRq':_0x25413f(0x276),'sfaEa':_0x25413f(0x22a),'OoaLA':function(_0x48cdf9,_0x58eaaf){return _0x48cdf9===_0x58eaaf;},'QVNzG':'string','OVoxq':function(_0x11bac0,_0x235e50){return _0x11bac0>_0x235e50;},'KWvtZ':function(_0x2cc6fb,_0x32e487){return _0x2cc6fb===_0x32e487;},'fPHlb':_0x25413f(0x2b3),'AbQaa':function(_0x192865,_0x49fe8e){return _0x192865!==_0x49fe8e;},'BrbBf':_0x25413f(0x2d9),'jtslO':_0x25413f(0x1fb),'AAdav':_0x25413f(0x24e),'wwouS':function(_0x2a8638,_0x78422a){return _0x2a8638(_0x78422a);},'DVAjZ':_0x25413f(0x1d0),'VKDwO':function(_0xd553e2,_0x3343d5){return _0xd553e2!==_0x3343d5;},'SwklB':_0x25413f(0x1d7),'EapvA':function(_0xa46977,_0x2ddcdb){return _0xa46977(_0x2ddcdb);},'DdBhu':_0x25413f(0x284),'IUySL':function(_0x2e969d,_0x4d3025){return _0x2e969d(_0x4d3025);},'tpctR':_0x25413f(0x2df),'QybMQ':function(_0x6cdf83,_0x1a9e8a){return _0x6cdf83!==_0x1a9e8a;},'iHZRp':_0x25413f(0x228),'WlYrM':_0x25413f(0x1eb),'MgzdD':'error','cQQAg':_0x25413f(0x2a7),'Nrydv':function(_0x41ecb5,_0x44344e){return _0x41ecb5-_0x44344e;},'TAZvX':_0x25413f(0x235),'bkgYU':'image_url','GDnoN':'图片处理失败,回退到文本模式','jvVMX':_0x25413f(0x254)},_0x58963e={'Content-Type':_0x25413f(0x1fc),'Accept':_0x484633[_0x25413f(0x2ec)]};_0x64b78f&&(_0x58963e[_0x25413f(0x264)]='Bearer\x20'+_0x64b78f);const _0x496dc7=_0x217d10[_0x484633[_0x25413f(0x217)](_0x217d10[_0x25413f(0x2a9)],0x1)],_0x27c336=_0x496dc7?.[_0x25413f(0x232)]||'',_0x5a316a=_0x27c336['match'](/\[图片\]\s*(https?:\/\/[^\s]+)/);let _0x4f59f2;if(_0x5a316a){if(_0x484633[_0x25413f(0x212)](_0x484633[_0x25413f(0x2dc)],_0x25413f(0x224))){const _0x666bda=_0x5a316a[0x1],_0x4fdfd0=_0x27c336['replace'](/\[图片\]\s*https?:\/\/[^\s]+/,'')[_0x25413f(0x2bc)]();try{const _0x2cdb5c=await this[_0x25413f(0x210)](_0x666bda),_0x5a5d73=_0x217d10[_0x25413f(0x269)](0x0,-0x1)['concat']([{'role':_0x25413f(0x2e3),'content':[{'type':_0x25413f(0x208),'text':_0x4fdfd0||''},{'type':_0x484633['bkgYU'],'image_url':{'url':_0x25413f(0x2fb)+_0x2cdb5c['mediaType']+_0x25413f(0x22d)+_0x2cdb5c['base64']}}]}]);_0x4f59f2={'model':'openclaw','messages':_0x5a5d73,'stream':!![],'max_tokens':0x800};}catch(_0x4b4645){log[_0x25413f(0x29b)]({'err':_0x4b4645['message']},_0x484633[_0x25413f(0x258)]),_0x4f59f2={'model':_0x484633[_0x25413f(0x27f)],'messages':_0x217d10,'stream':!![],'max_tokens':0x800};}}else{if(_0x226563[_0x25413f(0x25f)](_0x28055b)){const _0x2cecca=_0x394915[_0x25413f(0x2c0)](_0x3d4de8,aMWWHR[_0x25413f(0x2ed)]);_0x218226=_0x4dd49d[_0x25413f(0x293)](_0x2cecca),_0x29560b=!![];}}}else _0x4f59f2={'model':_0x484633[_0x25413f(0x27f)],'messages':_0x217d10,'stream':!![],'max_tokens':0x800};log[_0x25413f(0x2ef)]({'apiUrl':_0x49a3e4,'payloadSummary':JSON['stringify'](_0x4f59f2)[_0x25413f(0x25c)](0x0,0xc8)},'SSE\x20请求');const _0x460e21=new AbortController();OpenClawClient[_0x25413f(0x2bf)][_0x25413f(0x1f9)](_0x302c26,_0x460e21);const _0x4d9e5e=await a0_0x38c8a4[_0x25413f(0x1cb)](_0x49a3e4,_0x4f59f2,{'headers':_0x58963e,'responseType':_0x484633[_0x25413f(0x1e7)],'timeout':0x927c0,'signal':_0x460e21['signal']});return new Promise((_0x5f5a2c,_0x447fc7)=>{const _0x2b4b1e=_0x25413f,_0x21d019={'wKrxM':_0x484633[_0x2b4b1e(0x27f)],'tulNH':function(_0x56d64a,_0x3fabd2){const _0x1b8408=_0x2b4b1e;return _0x484633[_0x1b8408(0x212)](_0x56d64a,_0x3fabd2);},'jYUhB':_0x484633[_0x2b4b1e(0x2f4)],'CHJCJ':function(_0x52069c,_0x3fd967){const _0x54ecf3=_0x2b4b1e;return _0x484633[_0x54ecf3(0x2de)](_0x52069c,_0x3fd967);}};let _0x3c2717='',_0x365caf='',_0x298928=null,_0x2eea57=![],_0x2d174a='';_0x4d9e5e[_0x2b4b1e(0x1eb)]['on'](_0x484633[_0x2b4b1e(0x28e)],_0x56af85=>{const _0x204433=_0x2b4b1e,_0x48e5d9={'zshfq':_0x484633[_0x204433(0x2ed)],'bbRmq':function(_0x9a1829,_0x5ba900){const _0x5247bc=_0x204433;return _0x484633[_0x5247bc(0x2fe)](_0x9a1829,_0x5ba900);},'crkfZ':function(_0x3a2a8c,_0x11aff7){return _0x484633['eHzUa'](_0x3a2a8c,_0x11aff7);}};_0x365caf+=_0x56af85[_0x204433(0x24a)]();const _0x4bf0e6=_0x365caf[_0x204433(0x28c)]('\x0a');_0x365caf=_0x4bf0e6[_0x204433(0x22b)]()||'';for(const _0x412ce5 of _0x4bf0e6){const _0x2ef7da=_0x412ce5[_0x204433(0x2bc)]();if(!_0x2ef7da||!_0x2ef7da['startsWith'](_0x484633['gXAVE']))continue;const _0x4c44f2=_0x2ef7da[_0x204433(0x269)](0x6)[_0x204433(0x2bc)]();if(_0x484633['PaIwr'](_0x4c44f2,_0x484633['gZffd']))continue;try{if(_0x484633[_0x204433(0x1e5)](_0x204433(0x253),_0x484633[_0x204433(0x229)])){const _0x176e5a=JSON['parse'](_0x4c44f2);_0x298928=_0x176e5a;if(_0x176e5a[_0x204433(0x249)]){_0x2eea57=!![],_0x2d174a=_0x484633['PQoWx'](typeof _0x176e5a[_0x204433(0x249)],'string')?_0x176e5a['error']:_0x176e5a[_0x204433(0x249)]?.[_0x204433(0x1e8)]||JSON[_0x204433(0x26a)](_0x176e5a[_0x204433(0x249)]),log[_0x204433(0x249)]({'error':_0x2d174a},_0x484633[_0x204433(0x244)]);continue;}const _0xe586f1=_0x176e5a[_0x204433(0x295)]?.[0x0];let _0x4e1ff4=null;if(_0xe586f1){if(_0x204433(0x29c)!==_0x484633[_0x204433(0x1e0)]){const _0x5e2030=_0xe586f1[_0x204433(0x2b4)];_0x4e1ff4=_0x5e2030?.[_0x204433(0x232)]??_0xe586f1['message']?.[_0x204433(0x232)]??_0xe586f1[_0x204433(0x208)]??_0x5e2030?.[_0x204433(0x208)]??_0x5e2030?.[_0x204433(0x2ce)]??null;}else{const _0x48e640=_0x432e53[_0x204433(0x2c0)](_0x3c1d27,TPwAuq[_0x204433(0x2eb)]),_0x58478a=_0x27ddd0[_0x204433(0x293)](_0x48e640),_0x28bffd=_0x58478a['gatewayToken']||_0x58478a['gateway']?.[_0x204433(0x2af)]?.[_0x204433(0x2b6)]||_0x58478a[_0x204433(0x2b6)]||_0x58478a[_0x204433(0x20a)]||_0x58478a[_0x204433(0x1e6)]||_0x58478a[_0x204433(0x221)];if(_0x28bffd)return TPwAuq[_0x204433(0x261)](_0x2d6f6c,_0x28bffd);}}(_0x484633[_0x204433(0x1de)](_0x4e1ff4,null)||_0x4e1ff4===undefined)&&(_0x4e1ff4=_0x176e5a['content']??_0x176e5a[_0x204433(0x2b4)]??_0x176e5a[_0x204433(0x208)]??null);if(typeof _0x4e1ff4===_0x484633['QVNzG']&&_0x484633[_0x204433(0x2a2)](_0x4e1ff4['length'],0x0)){if(_0x484633[_0x204433(0x2b5)](_0x204433(0x2d6),_0x484633[_0x204433(0x2f5)])){if(_0x1c5ff7['existsSync'](_0x4d7e2c)){const _0x5786aa=_0x260063[_0x204433(0x2c0)](_0x2ad280,TPwAuq['zshfq']),_0x3472b4=_0x59c0e1[_0x204433(0x293)](_0x5786aa),_0x2252db=_0x3472b4[_0x204433(0x257)]||_0x3472b4[_0x204433(0x2a8)]?.[_0x204433(0x2af)]?.['token']||_0x3472b4[_0x204433(0x2b6)]||_0x3472b4[_0x204433(0x20a)]||_0x3472b4[_0x204433(0x1e6)]||_0x3472b4['password'];if(_0x2252db)return TPwAuq[_0x204433(0x301)](_0xdb299f,_0x2252db);}}else _0x3c2717+=_0x4e1ff4,Promise[_0x204433(0x24b)](_0x484633['eHzUa'](_0x106675,_0x4e1ff4))[_0x204433(0x300)](_0x447fc7);}}else{const _0x1271fa=_0x4e6d0f[_0x204433(0x2b4)];_0x35ac14=_0x1271fa?.[_0x204433(0x232)]??_0x429116['message']?.['content']??_0x888c63[_0x204433(0x208)]??_0x1271fa?.['text']??_0x1271fa?.[_0x204433(0x2ce)]??null;}}catch{}}}),_0x4d9e5e['data']['on'](_0x2b4b1e(0x209),async()=>{const _0x36212e=_0x2b4b1e;if(_0x484633[_0x36212e(0x22c)](_0x484633[_0x36212e(0x248)],_0x484633[_0x36212e(0x1dc)])){OpenClawClient[_0x36212e(0x2bf)][_0x36212e(0x29a)](_0x302c26),log[_0x36212e(0x2ef)]({'fullTextLength':_0x3c2717[_0x36212e(0x2a9)]},_0x484633[_0x36212e(0x28a)]);if(_0x2eea57){_0x484633[_0x36212e(0x2de)](_0x447fc7,new Error('OpenClaw\x20SSE\x20错误:\x20'+_0x2d174a));return;}if(_0x484633['PQoWx'](_0x3c2717['length'],0x0)){if(_0x36212e(0x1d0)===_0x484633[_0x36212e(0x25a)]){const _0xbbb1e0=_0x298928?.['choices'],_0x46d933=_0xbbb1e0?.[0x0]?.[_0x36212e(0x1e8)],_0x47ef09=_0x46d933?.[_0x36212e(0x232)];typeof _0x47ef09==='string'&&_0x47ef09[_0x36212e(0x2a9)]>0x0&&(_0x3c2717=_0x47ef09);}else{const _0x3d2801=this[_0x36212e(0x1f5)](_0x4c7ffb);return[..._0x3d2801,{'role':'user','content':_0x4537c4}];}}if(_0x484633[_0x36212e(0x1de)](_0x3c2717[_0x36212e(0x2a9)],0x0)){if(_0x484633['VKDwO']('LFAEY',_0x484633['SwklB'])){_0x484633[_0x36212e(0x2c7)](_0x447fc7,new Error(_0x484633[_0x36212e(0x283)]));return;}else _0x92e44=_0x446d24[_0x36212e(0x269)](_0x5f035a[_0x36212e(0x2a9)]-_0x2fef22);}try{await _0x484633[_0x36212e(0x2c7)](_0x106675,''),_0x484633[_0x36212e(0x250)](_0x5f5a2c,_0x3c2717);}catch(_0x5aa286){_0x484633[_0x36212e(0x2de)](_0x447fc7,_0x5aa286);}}else _0x5bb6ec={'model':ADcudB[_0x36212e(0x2d5)],'messages':_0x51c67e,'stream':!![],'max_tokens':0x800};}),_0x4d9e5e['data']['on'](_0x484633[_0x2b4b1e(0x286)],_0x8c45a9=>{const _0x2edd83=_0x2b4b1e;_0x21d019['tulNH'](_0x21d019[_0x2edd83(0x26e)],_0x2edd83(0x228))?_0x33caa0=_0x57bec0:(OpenClawClient[_0x2edd83(0x2bf)][_0x2edd83(0x29a)](_0x302c26),log[_0x2edd83(0x249)]({'err':_0x8c45a9['message']},_0x2edd83(0x2ee)),_0x21d019[_0x2edd83(0x272)](_0x447fc7,_0x8c45a9));});});}}OpenClawClient[a0_0xd486d5(0x24c)]=0x2,OpenClawClient['runningCount']=0x0,OpenClawClient[a0_0xd486d5(0x296)]=[],OpenClawClient[a0_0xd486d5(0x252)]=new Map(),OpenClawClient[a0_0xd486d5(0x285)]=new Map(),OpenClawClient[a0_0xd486d5(0x2e0)]=0x32,OpenClawClient[a0_0xd486d5(0x26b)]=0x7d0,OpenClawClient[a0_0xd486d5(0x2bf)]=new Map();export{getRealHomeDir,getOpenClawEnv,getGatewayToken,checkPort,ensureChatCompletionsConfig};
@@ -32,4 +32,3 @@ export declare class OpenCodeClient {
32
32
  listSessions(): Promise<any[]>;
33
33
  }
34
34
  export declare function checkOpencodeStatus(opencodeUrl: string, password?: string): Promise<boolean>;
35
- //# sourceMappingURL=client.d.ts.map