@honor-claw/yoyo 1.3.0-beta.1 → 1.3.0-beta.2

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 (2) hide show
  1. package/dist/index.mjs +816 -825
  2. package/package.json +1 -1
package/dist/index.mjs CHANGED
@@ -1,52 +1,43 @@
1
- import e, { promises as t, readFileSync as n } from "fs";
2
- import * as r from "path";
3
- import { dirname as i, join as a } from "path";
4
- import { fileURLToPath as o } from "url";
5
- import s, { constants as c, existsSync as l } from "node:fs";
6
- import u from "node:path";
7
- import d from "open";
8
- import { customAlphabet as f } from "nanoid";
9
- import { ProxyAgent as p, request as m } from "undici";
10
- import { HttpProxyAgent as ee } from "http-proxy-agent";
11
- import { HttpsProxyAgent as te } from "https-proxy-agent";
12
- import { createServer as ne } from "http";
13
- import { URL as re, fileURLToPath as h } from "node:url";
14
- import { createHash as g, randomBytes as ie } from "crypto";
15
- import _, { createHash as ae, randomUUID as oe } from "node:crypto";
1
+ import e, { constants as t, existsSync as n } from "node:fs";
2
+ import r from "node:path";
3
+ import i from "open";
4
+ import { customAlphabet as a } from "nanoid";
5
+ import { ProxyAgent as o, request as s } from "undici";
6
+ import { HttpProxyAgent as c } from "http-proxy-agent";
7
+ import { HttpsProxyAgent as l } from "https-proxy-agent";
8
+ import { createServer as u } from "http";
9
+ import { URL as d, fileURLToPath as f } from "node:url";
10
+ import { createHash as p, randomBytes as m } from "crypto";
11
+ import h, { createHash as g, randomUUID as _ } from "node:crypto";
16
12
  import v from "node:fs/promises";
17
- import se from "node:os";
18
- import y from "os";
19
- import { execFile as ce } from "child_process";
20
- import { promisify as le } from "util";
21
- import * as b from "winreg";
22
- import { z as x } from "zod";
23
- import S, { WebSocket as ue } from "ws";
24
- import { Buffer as C } from "node:buffer";
13
+ import y from "node:os";
14
+ import b, { promises as x } from "fs";
15
+ import S from "os";
16
+ import { execFile as ee } from "child_process";
17
+ import { promisify as te } from "util";
18
+ import * as C from "winreg";
19
+ import * as ne from "path";
20
+ import { z as w } from "zod";
21
+ import T, { WebSocket as re } from "ws";
22
+ import { Buffer as ie } from "node:buffer";
25
23
  //#region src/utils/version.ts
26
- var w = null;
27
- function de() {
28
- if (w !== null) return !!w;
29
- try {
30
- let e = n(a(i(o(import.meta.url)), "../../package.json"), "utf-8");
31
- w = (JSON.parse(e).version || "").includes("beta");
32
- } catch (e) {
33
- console.error(`Failed to check version: ${e}`);
34
- }
35
- return !!w;
24
+ var ae = null;
25
+ function oe() {
26
+ return ae === null && (ae = "1.3.0-beta.2".includes("beta") || "1.3.0-beta.2".includes("alpha")), !!ae;
36
27
  }
37
28
  //#endregion
38
29
  //#region src/runtime.ts
39
- var fe = null;
40
- function pe(e) {
41
- fe = e;
30
+ var se = null;
31
+ function ce(e) {
32
+ se = e;
42
33
  }
43
- function me() {
44
- if (!fe) throw Error("Yoyo runtime not initialized");
45
- return fe;
34
+ function le() {
35
+ if (!se) throw Error("Yoyo runtime not initialized");
36
+ return se;
46
37
  }
47
- function he() {
38
+ function ue() {
48
39
  try {
49
- let e = j();
40
+ let e = M();
50
41
  return {
51
42
  env: e.getEnvInfo().env,
52
43
  grayTag: e.getGrayTag()
@@ -57,46 +48,46 @@ function he() {
57
48
  }
58
49
  //#endregion
59
50
  //#region src/utils/env.ts
60
- var T = {
51
+ var E = {
61
52
  brand: "YOYO_CLAW_BRAND",
62
53
  manufacture: "YOYO_CLAW_MANUFACTURER",
63
54
  deviceType: "YOYO_CLAW_DEVICE_TYPE",
64
55
  userId: "YOYO_CLAW_USER_ID"
65
- }, ge = "YOYO_CLAW_ENV", _e = {
56
+ }, de = "YOYO_CLAW_ENV", fe = {
66
57
  dev: "dev",
67
58
  pre: "test",
68
59
  test: "test",
69
60
  prd: "production",
70
61
  production: "production"
71
62
  };
72
- function ve() {
63
+ function pe() {
73
64
  return {
74
- brand: process.env[T.brand],
75
- manufacture: process.env[T.manufacture],
76
- deviceType: process.env[T.deviceType]
65
+ brand: process.env[E.brand],
66
+ manufacture: process.env[E.manufacture],
67
+ deviceType: process.env[E.deviceType]
77
68
  };
78
69
  }
79
- function ye() {
80
- return process.env[T.userId];
70
+ function me() {
71
+ return process.env[E.userId];
81
72
  }
82
- function be() {
83
- let e = process.env[ge];
84
- if (e) return _e[e.toLowerCase()];
73
+ function he() {
74
+ let e = process.env[de];
75
+ if (e) return fe[e.toLowerCase()];
85
76
  }
86
77
  //#endregion
87
78
  //#region src/utils/error.ts
88
- function E(e, t) {
79
+ function D(e, t) {
89
80
  let n = e instanceof Error ? e.message : String(e);
90
81
  return Error(`${t}: ${n}`, { cause: e });
91
82
  }
92
83
  //#endregion
93
84
  //#region src/utils/logger.ts
94
- var xe = null;
95
- function Se(e) {
96
- xe = e;
85
+ var ge = null;
86
+ function _e(e) {
87
+ ge = e;
97
88
  }
98
- function D() {
99
- return xe || {
89
+ function O() {
90
+ return ge || {
100
91
  debug: console.debug,
101
92
  info: console.log,
102
93
  warn: console.warn,
@@ -105,7 +96,7 @@ function D() {
105
96
  }
106
97
  //#endregion
107
98
  //#region src/modules/configs/provider.ts
108
- function Ce(e) {
99
+ function ve(e) {
109
100
  let t = {};
110
101
  if (!e.models?.providers) return t;
111
102
  let n = Object.keys(e.models.providers);
@@ -115,7 +106,7 @@ function Ce(e) {
115
106
  }
116
107
  return t;
117
108
  }
118
- function we(e, t) {
109
+ function ye(e, t) {
119
110
  let n = { ...e };
120
111
  if (n.models?.providers) {
121
112
  let e = {};
@@ -128,46 +119,46 @@ function we(e, t) {
128
119
  providers: e
129
120
  };
130
121
  }
131
- return n.agents &&= Te(n.agents, t), n.auth?.profiles && (n.auth = {
122
+ return n.agents &&= be(n.agents, t), n.auth?.profiles && (n.auth = {
132
123
  ...n.auth,
133
- profiles: Oe(n.auth.profiles, t)
134
- }, je(t)), n;
124
+ profiles: Ce(n.auth.profiles, t)
125
+ }, Ee(t)), n;
135
126
  }
136
- function Te(e, t) {
127
+ function be(e, t) {
137
128
  let n = { ...e };
138
- return n.defaults &&= Ee(n.defaults, t), n.list &&= n.list.map((e) => De(e, t)), n;
129
+ return n.defaults &&= xe(n.defaults, t), n.list &&= n.list.map((e) => Se(e, t)), n;
139
130
  }
140
- function Ee(e, t) {
131
+ function xe(e, t) {
141
132
  let n = { ...e };
142
- if (n.model &&= O(n.model, t), n.imageModel &&= O(n.imageModel, t), n.pdfModel &&= O(n.pdfModel, t), n.models) {
133
+ if (n.model &&= k(n.model, t), n.imageModel &&= k(n.imageModel, t), n.pdfModel &&= k(n.pdfModel, t), n.models) {
143
134
  let e = {};
144
135
  for (let [r, i] of Object.entries(n.models)) {
145
- let n = k(r, t);
136
+ let n = A(r, t);
146
137
  e[n] = i;
147
138
  }
148
139
  n.models = e;
149
140
  }
150
141
  return n.subagents?.model && (n.subagents = {
151
142
  ...n.subagents,
152
- model: O(n.subagents.model, t)
143
+ model: k(n.subagents.model, t)
153
144
  }), n;
154
145
  }
155
- function De(e, t) {
146
+ function Se(e, t) {
156
147
  let n = { ...e };
157
- return n.model &&= O(n.model, t), n.subagents?.model && (n.subagents = {
148
+ return n.model &&= k(n.model, t), n.subagents?.model && (n.subagents = {
158
149
  ...n.subagents,
159
- model: O(n.subagents.model, t)
150
+ model: k(n.subagents.model, t)
160
151
  }), n;
161
152
  }
162
- function O(e, t) {
163
- if (typeof e == "string") return k(e, t);
153
+ function k(e, t) {
154
+ if (typeof e == "string") return A(e, t);
164
155
  if (typeof e == "object" && e) {
165
156
  let n = { ...e };
166
- return n.primary &&= k(n.primary, t), n.fallbacks && Array.isArray(n.fallbacks) && (n.fallbacks = n.fallbacks.map((e) => k(e, t))), n;
157
+ return n.primary &&= A(n.primary, t), n.fallbacks && Array.isArray(n.fallbacks) && (n.fallbacks = n.fallbacks.map((e) => A(e, t))), n;
167
158
  }
168
159
  return e;
169
160
  }
170
- function k(e, t) {
161
+ function A(e, t) {
171
162
  let n = e.split("/");
172
163
  if (n.length > 0) {
173
164
  let e = t[n[0]];
@@ -175,7 +166,7 @@ function k(e, t) {
175
166
  }
176
167
  return e;
177
168
  }
178
- function Oe(e, t) {
169
+ function Ce(e, t) {
179
170
  let n = {};
180
171
  for (let [r, i] of Object.entries(e)) {
181
172
  let e = { ...i }, a = t[e.provider];
@@ -183,74 +174,74 @@ function Oe(e, t) {
183
174
  }
184
175
  return n;
185
176
  }
186
- function ke() {
177
+ function we() {
187
178
  return process.platform === "win32" ? process.env.USERPROFILE || "" : process.env.HOME || "";
188
179
  }
189
- function Ae(e) {
190
- let t = [], n = ke(), r = e || u.join(n, ".openclaw"), i = u.join(r, "agents", "main", "agent", "auth-profiles.json");
191
- s.existsSync(i) && t.push(i);
192
- let a = u.join(r, "agents");
193
- if (s.existsSync(a)) {
194
- let e = s.readdirSync(a, { withFileTypes: !0 });
195
- for (let n of e) if (n.isDirectory()) {
196
- let e = u.join(a, n.name, "agent", "auth-profiles.json");
197
- s.existsSync(e) && !t.includes(e) && t.push(e);
180
+ function Te(t) {
181
+ let n = [], i = we(), a = t || r.join(i, ".openclaw"), o = r.join(a, "agents", "main", "agent", "auth-profiles.json");
182
+ e.existsSync(o) && n.push(o);
183
+ let s = r.join(a, "agents");
184
+ if (e.existsSync(s)) {
185
+ let t = e.readdirSync(s, { withFileTypes: !0 });
186
+ for (let i of t) if (i.isDirectory()) {
187
+ let t = r.join(s, i.name, "agent", "auth-profiles.json");
188
+ e.existsSync(t) && !n.includes(t) && n.push(t);
198
189
  }
199
190
  }
200
- return t;
191
+ return n;
201
192
  }
202
- function je(e, t) {
203
- let n = Ae(t), r = [], i = [], a = !1;
204
- for (let t of n) try {
205
- let n = s.readFileSync(t, "utf-8"), i = JSON.parse(n);
206
- if (!i.profiles || typeof i.profiles != "object") continue;
207
- let o = !1;
208
- for (let [t, n] of Object.entries(i.profiles)) {
209
- let t = n, r = t.provider, i = e[r];
210
- i && r !== i && (t.provider = i, o = !0);
211
- }
212
- if (i.order && typeof i.order == "object") {
213
- let t = {};
214
- for (let [n, r] of Object.entries(i.order)) {
215
- let i = e[n], a = i || n;
216
- t[a] = r, i && n !== i && (o = !0);
193
+ function Ee(t, n) {
194
+ let r = Te(n), i = [], a = [], o = !1;
195
+ for (let n of r) try {
196
+ let r = e.readFileSync(n, "utf-8"), a = JSON.parse(r);
197
+ if (!a.profiles || typeof a.profiles != "object") continue;
198
+ let s = !1;
199
+ for (let [e, n] of Object.entries(a.profiles)) {
200
+ let e = n, r = e.provider, i = t[r];
201
+ i && r !== i && (e.provider = i, s = !0);
202
+ }
203
+ if (a.order && typeof a.order == "object") {
204
+ let e = {};
205
+ for (let [n, r] of Object.entries(a.order)) {
206
+ let i = t[n], a = i || n;
207
+ e[a] = r, i && n !== i && (s = !0);
217
208
  }
218
- o && (i.order = t);
209
+ s && (a.order = e);
219
210
  }
220
- if (i.lastGood && typeof i.lastGood == "object") {
221
- let t = {};
222
- for (let [n, r] of Object.entries(i.lastGood)) {
223
- let i = e[n], a = i || n;
224
- t[a] = r, i && n !== i && (o = !0);
211
+ if (a.lastGood && typeof a.lastGood == "object") {
212
+ let e = {};
213
+ for (let [n, r] of Object.entries(a.lastGood)) {
214
+ let i = t[n], a = i || n;
215
+ e[a] = r, i && n !== i && (s = !0);
225
216
  }
226
- o && (i.lastGood = t);
217
+ s && (a.lastGood = e);
227
218
  }
228
- o && (s.writeFileSync(t, JSON.stringify(i, null, 2) + "\n", "utf-8"), r.push(t), a = !0);
219
+ s && (e.writeFileSync(n, JSON.stringify(a, null, 2) + "\n", "utf-8"), i.push(n), o = !0);
229
220
  } catch (e) {
230
- let n = e instanceof Error ? e.message : String(e);
231
- i.push(`${t}: ${n}`);
221
+ let t = e instanceof Error ? e.message : String(e);
222
+ a.push(`${n}: ${t}`);
232
223
  }
233
224
  return {
234
- updated: a,
235
- files: r,
236
- errors: i
225
+ updated: o,
226
+ files: i,
227
+ errors: a
237
228
  };
238
229
  }
239
230
  //#endregion
240
231
  //#region src/modules/configs/config-manager.ts
241
- var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create,alarm.delete,alarm.disable,alarm.enable,alarm.query,alarm.update,app.close,app.open,call.phone,call.search,capture-screenshot,contact.search,file-upload,hotspot,local-search,message.search,message.send,mobile-data,no-disturb,quiet-mode,ringing-mode,schedule.create,schedule.delete,schedule.search,schedule.update,screen-record,vibration-mode,volume.operate,wlan,bluetooth,location-service,nfc,usb-shared-network,eyecomfort,status-bar-show,brightness,autoscreen-onnotice,dark-mode,device-operation,camera,app.uninstall,audio-record,battery,gui.create,gui.pause,gui.terminate,mcp.tool.call".split(","), Fe = class {
232
+ var j = "yoyo", De = { watch: !0 }, Oe = 250, ke = /* @__PURE__ */ "alarm.create,alarm.delete,alarm.disable,alarm.enable,alarm.query,alarm.update,app.close,app.open,call.phone,call.search,capture-screenshot,contact.search,file-upload,hotspot,local-search,message.search,message.send,mobile-data,no-disturb,quiet-mode,ringing-mode,schedule.create,schedule.delete,schedule.search,schedule.update,screen-record,vibration-mode,volume.operate,wlan,bluetooth,location-service,nfc,usb-shared-network,eyecomfort,status-bar-show,brightness,autoscreen-onnotice,dark-mode,device-operation,camera,app.uninstall,audio-record,battery,gui.create,gui.pause,gui.terminate,mcp.tool.call".split(","), Ae = class {
242
233
  loadConfig() {
243
234
  try {
244
- return me().config.loadConfig();
235
+ return le().config.loadConfig();
245
236
  } catch (e) {
246
- throw E(e, "Failed to load config");
237
+ throw D(e, "Failed to load config");
247
238
  }
248
239
  }
249
240
  async saveConfig(e) {
250
241
  try {
251
- await me().config.writeConfigFile(e);
242
+ await le().config.writeConfigFile(e);
252
243
  } catch (e) {
253
- throw E(e, "Failed to save config");
244
+ throw D(e, "Failed to save config");
254
245
  }
255
246
  }
256
247
  getGatewayAuthConfig() {
@@ -276,7 +267,7 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
276
267
  }
277
268
  getUserConfig() {
278
269
  try {
279
- return this.loadConfig().plugins?.entries?.[A]?.config?.user;
270
+ return this.loadConfig().plugins?.entries?.[j]?.config?.user;
280
271
  } catch (e) {
281
272
  console.error(`[claw-configs] Failed to read user config: ${e}`);
282
273
  return;
@@ -284,14 +275,14 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
284
275
  }
285
276
  getEnvInfo() {
286
277
  try {
287
- let e = this.loadConfig().plugins?.entries?.[A]?.config, t = e?.envInfo;
278
+ let e = this.loadConfig().plugins?.entries?.[j]?.config, t = e?.envInfo;
288
279
  if (t?.env) return t;
289
280
  let n = e?.env;
290
281
  if (n) return {
291
282
  env: n,
292
283
  source: "manual"
293
284
  };
294
- let r = be();
285
+ let r = he();
295
286
  return r ? {
296
287
  env: r,
297
288
  source: "env"
@@ -308,7 +299,7 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
308
299
  }
309
300
  getGrayTag() {
310
301
  try {
311
- return this.loadConfig().plugins?.entries?.[A]?.config?.gray;
302
+ return this.loadConfig().plugins?.entries?.[j]?.config?.gray;
312
303
  } catch (e) {
313
304
  console.error(`[claw-configs] Failed to read gray tag config: ${e}`);
314
305
  return;
@@ -316,7 +307,7 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
316
307
  }
317
308
  getDeviceConfig() {
318
309
  try {
319
- return this.loadConfig().plugins?.entries?.[A]?.config?.device;
310
+ return this.loadConfig().plugins?.entries?.[j]?.config?.device;
320
311
  } catch (e) {
321
312
  console.error(`[claw-configs] Failed to read device config: ${e}`);
322
313
  return;
@@ -324,17 +315,17 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
324
315
  }
325
316
  async updateDeviceConfig(e) {
326
317
  try {
327
- let t = this.loadConfig(), n = t.plugins?.entries?.[A]?.config?.device || {}, r = {
318
+ let t = this.loadConfig(), n = t.plugins?.entries?.[j]?.config?.device || {}, r = {
328
319
  ...t,
329
320
  plugins: {
330
321
  ...t.plugins,
331
322
  entries: {
332
323
  ...t.plugins?.entries,
333
- [A]: {
334
- ...t.plugins?.entries?.[A],
324
+ [j]: {
325
+ ...t.plugins?.entries?.[j],
335
326
  enabled: !0,
336
327
  config: {
337
- ...t.plugins?.entries?.[A]?.config,
328
+ ...t.plugins?.entries?.[j]?.config,
338
329
  device: {
339
330
  ...n,
340
331
  ...e
@@ -346,7 +337,7 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
346
337
  };
347
338
  await this.saveConfig(r);
348
339
  } catch (e) {
349
- throw E(e, "Failed to update device config");
340
+ throw D(e, "Failed to update device config");
350
341
  }
351
342
  }
352
343
  async updateEnv(e) {
@@ -357,11 +348,11 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
357
348
  ...t.plugins,
358
349
  entries: {
359
350
  ...t.plugins?.entries,
360
- [A]: {
361
- ...t.plugins?.entries?.[A],
351
+ [j]: {
352
+ ...t.plugins?.entries?.[j],
362
353
  enabled: !0,
363
354
  config: {
364
- ...t.plugins?.entries?.[A]?.config,
355
+ ...t.plugins?.entries?.[j]?.config,
365
356
  envInfo: {
366
357
  env: e,
367
358
  source: "manual"
@@ -374,12 +365,12 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
374
365
  };
375
366
  await this.saveConfig(n);
376
367
  } catch (e) {
377
- throw E(e, "Failed to update env config");
368
+ throw D(e, "Failed to update env config");
378
369
  }
379
370
  }
380
371
  async resetEnv() {
381
372
  try {
382
- let e = this.loadConfig(), t = e.plugins?.entries?.[A]?.config?.envInfo;
373
+ let e = this.loadConfig(), t = e.plugins?.entries?.[j]?.config?.envInfo;
383
374
  if (!t?.env) return;
384
375
  let n = {
385
376
  ...e,
@@ -387,11 +378,11 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
387
378
  ...e.plugins,
388
379
  entries: {
389
380
  ...e.plugins?.entries,
390
- [A]: {
391
- ...e.plugins?.entries?.[A],
381
+ [j]: {
382
+ ...e.plugins?.entries?.[j],
392
383
  enabled: !0,
393
384
  config: {
394
- ...e.plugins?.entries?.[A]?.config,
385
+ ...e.plugins?.entries?.[j]?.config,
395
386
  envInfo: {
396
387
  env: t.env,
397
388
  source: "env"
@@ -403,7 +394,7 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
403
394
  };
404
395
  await this.saveConfig(n);
405
396
  } catch (e) {
406
- throw E(e, "Failed to reset env config");
397
+ throw D(e, "Failed to reset env config");
407
398
  }
408
399
  }
409
400
  async updateGrayTag(e) {
@@ -414,11 +405,11 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
414
405
  ...t.plugins,
415
406
  entries: {
416
407
  ...t.plugins?.entries,
417
- [A]: {
418
- ...t.plugins?.entries?.[A],
408
+ [j]: {
409
+ ...t.plugins?.entries?.[j],
419
410
  enabled: !0,
420
411
  config: {
421
- ...t.plugins?.entries?.[A]?.config,
412
+ ...t.plugins?.entries?.[j]?.config,
422
413
  ...e && { gray: e }
423
414
  }
424
415
  }
@@ -427,7 +418,7 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
427
418
  };
428
419
  await this.saveConfig(n);
429
420
  } catch (e) {
430
- throw E(e, "Failed to update gray tag config");
421
+ throw D(e, "Failed to update gray tag config");
431
422
  }
432
423
  }
433
424
  async updateUserConfig(e) {
@@ -438,11 +429,11 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
438
429
  ...t.plugins,
439
430
  entries: {
440
431
  ...t.plugins?.entries,
441
- [A]: {
442
- ...t.plugins?.entries?.[A],
432
+ [j]: {
433
+ ...t.plugins?.entries?.[j],
443
434
  enabled: !0,
444
435
  config: {
445
- ...t.plugins?.entries?.[A]?.config,
436
+ ...t.plugins?.entries?.[j]?.config,
446
437
  user: e
447
438
  }
448
439
  }
@@ -451,7 +442,7 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
451
442
  };
452
443
  await this.saveConfig(n);
453
444
  } catch (e) {
454
- throw E(e, "Failed to update user config");
445
+ throw D(e, "Failed to update user config");
455
446
  }
456
447
  }
457
448
  async clearUserConfig() {
@@ -462,10 +453,10 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
462
453
  ...e.plugins,
463
454
  entries: {
464
455
  ...e.plugins?.entries,
465
- [A]: {
466
- ...e.plugins?.entries?.[A],
456
+ [j]: {
457
+ ...e.plugins?.entries?.[j],
467
458
  config: {
468
- ...e.plugins?.entries?.[A]?.config,
459
+ ...e.plugins?.entries?.[j]?.config,
469
460
  user: void 0
470
461
  }
471
462
  }
@@ -474,25 +465,25 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
474
465
  };
475
466
  await this.saveConfig(t);
476
467
  } catch (e) {
477
- throw E(e, "Failed to clear user config");
468
+ throw D(e, "Failed to clear user config");
478
469
  }
479
470
  }
480
471
  async initializePluginConfig(e) {
481
472
  try {
482
- let t = this.loadConfig(), n = t.plugins?.allow || [], r = n.includes(e) ? n : [...n, e], i = t.gateway?.nodes?.allowCommands || [], a = Array.from(new Set([...i, ...Pe])), o = t.skills || {}, s = o.load || {}, c = s.watch === Me.watch && s.watchDebounceMs !== void 0 ? s : {
473
+ let t = this.loadConfig(), n = t.plugins?.allow || [], r = n.includes(e) ? n : [...n, e], i = t.gateway?.nodes?.allowCommands || [], a = Array.from(new Set([...i, ...ke])), o = t.skills || {}, s = o.load || {}, c = s.watch === De.watch && s.watchDebounceMs !== void 0 ? s : {
483
474
  ...s,
484
- ...Me,
485
- watchDebounceMs: s.watchDebounceMs ?? Ne
486
- }, l = t.plugins?.entries?.[e]?.config?.envInfo, u = t.plugins?.entries?.[e]?.config?.env, d = !!(l?.env || u), f = be(), p = !!l?.env && l.source === "env", m = !l?.env && !!u || p && f && l.env !== f, ee = !d || m, te = {
487
- env: f || u || (de() ? "test" : "production"),
475
+ ...De,
476
+ watchDebounceMs: s.watchDebounceMs ?? Oe
477
+ }, l = t.plugins?.entries?.[e]?.config?.envInfo, u = t.plugins?.entries?.[e]?.config?.env, d = !!(l?.env || u), f = he(), p = !!l?.env && l.source === "env", m = !l?.env && !!u || p && f && l.env !== f, h = !d || m, g = {
478
+ env: f || u || (oe() ? "test" : "production"),
488
479
  source: "env"
489
- }, ne = t.plugins?.entries?.[e]?.config || {}, re = ee ? {
490
- ...ne,
491
- envInfo: te,
480
+ }, _ = t.plugins?.entries?.[e]?.config || {}, v = h ? {
481
+ ..._,
482
+ envInfo: g,
492
483
  env: void 0
493
- } : ne, h = Ce(t);
494
- Object.keys(h).length > 0 && D().info(`[claw-configs] Found ${Object.keys(h).length} providers to rename: ${Object.entries(h).map(([e, t]) => `${e} -> ${t}`).join(", ")}`);
495
- let g = {
484
+ } : _, y = ve(t);
485
+ Object.keys(y).length > 0 && O().info(`[claw-configs] Found ${Object.keys(y).length} providers to rename: ${Object.entries(y).map(([e, t]) => `${e} -> ${t}`).join(", ")}`);
486
+ let b = {
496
487
  ...t,
497
488
  plugins: {
498
489
  ...t.plugins,
@@ -502,7 +493,7 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
502
493
  [e]: {
503
494
  ...t.plugins?.entries?.[e],
504
495
  enabled: !0,
505
- config: re
496
+ config: v
506
497
  }
507
498
  }
508
499
  },
@@ -518,26 +509,26 @@ var A = "yoyo", Me = { watch: !0 }, Ne = 250, Pe = /* @__PURE__ */ "alarm.create
518
509
  load: c
519
510
  }
520
511
  };
521
- Object.keys(h).length > 0 && (g = we(g, h), D().info("[claw-configs] Provider renaming completed")), await this.saveConfig(g);
512
+ Object.keys(y).length > 0 && (b = ye(b, y), O().info("[claw-configs] Provider renaming completed")), await this.saveConfig(b);
522
513
  } catch (e) {
523
- throw E(e, "failed to initialize plugin config");
514
+ throw D(e, "failed to initialize plugin config");
524
515
  }
525
516
  }
526
- }, Ie = null;
527
- function j() {
528
- return Ie ||= new Fe(), Ie;
517
+ }, je = null;
518
+ function M() {
519
+ return je ||= new Ae(), je;
529
520
  }
530
521
  //#endregion
531
522
  //#region src/commands/env/impl.ts
532
- var Le = {
523
+ var Me = {
533
524
  env: "environment variable",
534
525
  manual: "manual config"
535
526
  };
536
- function Re(e, t) {
527
+ function Ne(e, t) {
537
528
  return t.command("env").description("Manage runtime environment (dev/test/production)").option("--set <env>", "Set environment: dev, test or production").option("--gray <tag>", "Set gray header").option("--reset", "Reset env source to environment variable").action(async (e) => {
538
- let { set: t, gray: n, reset: r } = e, i = D();
529
+ let { set: t, gray: n, reset: r } = e, i = O();
539
530
  try {
540
- let e = j();
531
+ let e = M();
541
532
  if (r && (await e.resetEnv(), i.info("✅ Environment source reset to environment variable")), t) {
542
533
  if (t !== "test" && t !== "dev" && t !== "production") {
543
534
  i.error("❌ Invalid environment. Use 'test' or 'production'.");
@@ -547,7 +538,7 @@ function Re(e, t) {
547
538
  }
548
539
  if (n ? (await e.updateGrayTag(n), i.info(`✅ Gray tag set to: ${n}`)) : n === "" && (await e.updateGrayTag(void 0), i.info("✅ Gray tag cleared")), !t && n === void 0) {
549
540
  let t = e.getEnvInfo(), n = e.getGrayTag();
550
- i.info(`📋 Current environment: ${t.env} (source: ${Le[t.source]})`), n ? i.info(`📋 Current gray tag: ${n}`) : i.info("📋 Gray tag: not set");
541
+ i.info(`📋 Current environment: ${t.env} (source: ${Me[t.source]})`), n ? i.info(`📋 Current gray tag: ${n}`) : i.info("📋 Gray tag: not set");
551
542
  }
552
543
  } catch (e) {
553
544
  let t = e instanceof Error ? e.message : String(e);
@@ -557,19 +548,19 @@ function Re(e, t) {
557
548
  }
558
549
  //#endregion
559
550
  //#region src/utils/id.ts
560
- var ze = f("0123456789abcdefghijklmnopqrstuvwxyz", 32);
561
- function M(e) {
562
- return ze(e);
551
+ var Pe = a("0123456789abcdefghijklmnopqrstuvwxyz", 32);
552
+ function N(e) {
553
+ return Pe(e);
563
554
  }
564
555
  //#endregion
565
556
  //#region src/apis/helpers.ts
566
- function Be(e) {
557
+ function Fe(e) {
567
558
  return e.status >= 200 && e.status < 300 && e.data.code === "1";
568
559
  }
569
560
  //#endregion
570
561
  //#region src/apis/hosts.ts
571
- function Ve() {
572
- let e = he(), t;
562
+ function Ie() {
563
+ let e = ue(), t;
573
564
  switch (e.env) {
574
565
  case "dev":
575
566
  t = {
@@ -594,34 +585,34 @@ function Ve() {
594
585
  }
595
586
  //#endregion
596
587
  //#region src/utils/proxy.ts
597
- function He(e) {
588
+ function Le(e) {
598
589
  return e || process.env.HTTP_PROXY || process.env.http_proxy || process.env.HTTPS_PROXY || process.env.https_proxy;
599
590
  }
600
- function Ue(e, t) {
591
+ function Re(e, t) {
601
592
  return !t && !!e;
602
593
  }
603
- function We(e, t) {
604
- let n = He(t);
594
+ function ze(e, t) {
595
+ let n = Le(t);
605
596
  if (n) {
606
- if (e.startsWith("wss://")) return new te(n);
607
- if (e.startsWith("ws://")) return new ee(n);
597
+ if (e.startsWith("wss://")) return new l(n);
598
+ if (e.startsWith("ws://")) return new c(n);
608
599
  }
609
600
  }
610
601
  //#endregion
611
602
  //#region src/apis/http-client.ts
612
- var Ge = class extends Error {
603
+ var Be = class extends Error {
613
604
  constructor(e, t, n) {
614
605
  super(n), this.status = e, this.data = t, this.name = "HttpError";
615
606
  }
616
- }, Ke = class {
607
+ }, Ve = class {
617
608
  baseUrl;
618
609
  defaultHeaders;
619
610
  defaultTimeout;
620
611
  proxyAgent;
621
612
  constructor(e, t) {
622
613
  this.baseUrl = e.replace(/\/$/, ""), this.defaultHeaders = t?.defaultHeaders || {}, this.defaultTimeout = t?.defaultTimeout || 3e4;
623
- let n = He(t?.proxy);
624
- n && (this.proxyAgent = new p(n));
614
+ let n = Le(t?.proxy);
615
+ n && (this.proxyAgent = new o(n));
625
616
  }
626
617
  async request(e) {
627
618
  let { method: t = "GET", headers: n = {}, body: r, timeout: i = this.defaultTimeout, query: a } = e, o = e.url;
@@ -633,35 +624,35 @@ var Ge = class extends Error {
633
624
  let t = e.toString();
634
625
  t && (o += (o.includes("?") ? "&" : "?") + t);
635
626
  }
636
- let s = {
627
+ let c = {
637
628
  ...this.defaultHeaders,
638
629
  ...n
639
630
  };
640
- r && !s["Content-Type"] && (s["Content-Type"] = "application/json");
641
- let c;
642
- r != null && (c = typeof r == "string" ? r : JSON.stringify(r));
631
+ r && !c["Content-Type"] && (c["Content-Type"] = "application/json");
632
+ let l;
633
+ r != null && (l = typeof r == "string" ? r : JSON.stringify(r));
643
634
  try {
644
- let n = Ue(He(), e.disableProxy) && this.proxyAgent ? this.proxyAgent : void 0, r = await m(o, {
635
+ let n = Re(Le(), e.disableProxy) && this.proxyAgent ? this.proxyAgent : void 0, r = await s(o, {
645
636
  method: t,
646
- headers: s,
647
- body: c,
637
+ headers: c,
638
+ body: l,
648
639
  headersTimeout: i,
649
640
  bodyTimeout: i,
650
641
  dispatcher: n
651
- }), a = await r.body.text(), l;
642
+ }), a = await r.body.text(), u;
652
643
  try {
653
- l = a ? JSON.parse(a) : {};
644
+ u = a ? JSON.parse(a) : {};
654
645
  } catch {
655
- l = a;
646
+ u = a;
656
647
  }
657
648
  if (r.statusCode >= 200 && r.statusCode < 300) return {
658
- data: l,
649
+ data: u,
659
650
  status: r.statusCode,
660
651
  headers: r.headers
661
652
  };
662
- throw new Ge(r.statusCode, l, `HTTP request failed with status ${r.statusCode}`);
653
+ throw new Be(r.statusCode, u, `HTTP request failed with status ${r.statusCode}`);
663
654
  } catch (e) {
664
- throw e instanceof Ge ? e : E(e, "HTTP request failed");
655
+ throw e instanceof Be ? e : D(e, "HTTP request failed");
665
656
  }
666
657
  }
667
658
  async get(e, t) {
@@ -699,14 +690,14 @@ var Ge = class extends Error {
699
690
  method: "PATCH"
700
691
  });
701
692
  }
702
- }, qe = class {
693
+ }, He = class {
703
694
  httpClient;
704
695
  constructor(e, t) {
705
- this.httpClient = new Ke(e, t);
696
+ this.httpClient = new Ve(e, t);
706
697
  }
707
698
  async registerDevice(e, t, n) {
708
699
  let r = {
709
- "x-trace-id": M(),
700
+ "x-trace-id": N(),
710
701
  "x-jwt-token": t.token,
711
702
  "x-device-id": e.deviceId
712
703
  }, i = {
@@ -726,7 +717,7 @@ var Ge = class extends Error {
726
717
  }
727
718
  async logoutDevice(e, t) {
728
719
  let n = {
729
- "x-trace-id": M(),
720
+ "x-trace-id": N(),
730
721
  "x-jwt-token": t.token,
731
722
  "x-device-id": e.deviceId
732
723
  }, r = {
@@ -743,7 +734,7 @@ var Ge = class extends Error {
743
734
  });
744
735
  }
745
736
  async exchangeToken(e, t) {
746
- let n = M(), r = {
737
+ let n = N(), r = {
747
738
  "Content-Type": "application/json",
748
739
  "x-device-id": e.deviceId,
749
740
  "x-trace-id": n
@@ -758,32 +749,32 @@ var Ge = class extends Error {
758
749
  headers: r,
759
750
  timeout: 15e3
760
751
  });
761
- if (Be(a) && a.data.data) return a.data.data;
752
+ if (Fe(a) && a.data.data) return a.data.data;
762
753
  throw Error(`failed to get token: ${JSON.stringify(a.data)}, traceId: ${n}`);
763
754
  }
764
755
  };
765
- function N() {
766
- let e = Ve();
767
- return new qe(`https://${e.clawCloud}/aicloud/yoyo-claw-service`, e.grayTag ? { defaultHeaders: { "x-gray": e.grayTag } } : void 0);
756
+ function P() {
757
+ let e = Ie();
758
+ return new He(`https://${e.clawCloud}/aicloud/yoyo-claw-service`, e.grayTag ? { defaultHeaders: { "x-gray": e.grayTag } } : void 0);
768
759
  }
769
760
  //#endregion
770
761
  //#region src/honor-auth/assets/favicon.png
771
- var Je = "data:image/png;base64,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", Ye = "<svg aria-hidden=\"true\" viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"32\" cy=\"32\" r=\"30\" fill=\"currentColor\" opacity=\"0.12\"/><circle cx=\"32\" cy=\"32\" r=\"21\" fill=\"currentColor\"/><path d=\"M22.5 32.5L29 39L42.5 25.5\" stroke=\"white\" stroke-width=\"4.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>", Xe = "<svg aria-hidden=\"true\" viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"32\" cy=\"32\" r=\"30\" fill=\"currentColor\" opacity=\"0.12\"/><circle cx=\"32\" cy=\"32\" r=\"21\" fill=\"currentColor\"/><path d=\"M24.5 24.5L39.5 39.5M39.5 24.5L24.5 39.5\" stroke=\"white\" stroke-width=\"4.5\" stroke-linecap=\"round\"/></svg>", Ze = { favicon: "/favicon.png" };
772
- function P(e) {
762
+ var Ue = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADoAAAA6CAYAAAGWvHq+AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAOqADAAQAAAABAAAAOgAAAACjq6v0AAAfGElEQVRoBX2bCbzdVXXv1384/zPcOeNNQhIgBHyRqQJKQIJALYND5X362trX1rb6UD8+i0wqavsCfopWigjFKk7FKlKJCFSFBMIMIhIUA0IMGCBkvje5N/fce8/wn973t//nXC/V9oR993/Ye6/9W2vttdZe+49nnd+bbs7Pm3PQ1gzut0rPuD3xtWu8W/TK058z7p7ObbJkpX1mg7s9WzTlWX8jsU9/uex5l93/6nn1tPSjfzqlx3qCplkjtVazal/8VGxzvIr5x3oH11x/bNN64r2Wt2OzqaL8ycd6bU4yYuGqZKQcplWzvXXzssQacb+NUvKBxBYkr1h4WLbrifGnn7VswRpLJ2u2P59rrahuPVdfZwuDpcUk8x9cksf1l23cO8wSf6n1bLjT0ukF1i4dstChEJJ83ercDuw125OajfTa1P7e4d5bnthbNMhz74yb7PLBMVvYP2b7e5r2lX+52tvjnXPvRN5oRhaNBbbggGc9DDBYz60PNOFRQd1G8sC+/ceheWkOvMzuuKNiO38Sm39MOmo3ndqyS/7335iNTdjaC//a3nx6YIcvnjDvp3dvyI87colFlaplI6klQ8vspZHAdn7xHguPDHba/i3brNb/FjuYDNvoRADWF21J45cWDiTbbaC1w6afu8384/7eDv3GxVaaGrYoG+4w49ZzHrXmzlNt5CBsLVs60v9i+K9PrZzB+ca72pnX9i1o+Ra1PKs2PKtNmZUbFIRYUR3nFiWZlZLkwn/4SuV674Ib81L9iAPtVhJYnPjWnjS7/Q8jK1lmoZdbBvxWO7Abb8xt7GVjOpmVU95l6WPeNQ++cHmcBVdNJWaXnTzXekOkbfArQy5t/rSZHIOmSWSI1m7+1IjVwsBqPjp0dLZ/eHV0wK44sm61+k7zJibslNOvtfpI22x/i86RnfnuL9tUu2b1g6G988pF9rbPLLZ5yS7zXrnvB//P0tbadmva5h15kg1MTZuXhJbkVZS1atMeipD1UnsW2EEbu/pbVi4PWDkYMC9ff+OiJJ/elad1S9sTVq8cYq25Z1ijPWSNvN8SZl22cRvyD5j3xWtR4D4G7rXYel5w3M7/4yMftrx+vcXjZvFByxt1y6amLJ+MecwKm4p4FlnWrFnS7oFif9rz3VvDQlRSWn6n/Ht+dCm2UxDNsmrL+sqIqtSwZjW23aVpe+pL13qPFC07S/bke+LJrJn3+Mi4hIwryLeKTCt0rEi+FMlZ8q1lvn36XzzPe/vGic81M++yOA7hqG9hg850iug0wAA+02VRGFRRjozOKUu+bOH8sl021YqtHWQW+76tPa1kR8/L4SByRSlSuBTnoV15eWqVDK3KM/PbLfPnxBM232vZXGvat88K7Ph501bxplhIiCiesrBdt8p03T7xd55VkgZTbVktZWENW8uGrWEn9rWsChvDnDlmzLVFaaIQzMZrtZh+097zyR6rMmAth+J8Gr5vVY/9xaqqRTEK7Id20Z/9H9fBWol9/aab7ZkXX7ZY6sjvHWuH6Txp/kI6LvCb5kPBazZscmTSNu0+BnsHxkZuX7v9Zfvqd5+wRiuyBowbnxCT9pv31L0b8wWLF9rAwID1NfYzZgAL+8wOtC1Oy5ZU+m0SNZyQElRa1j8U2JbL7rdwHusg2T5qY4MLLOyZa9V2avnYtLWks4buNspWzyIkldhQZdJevfQO6/WqFvbnWBe4mozstKn+s92aTOOKtbIaHaXokcVh2/ryEZu64gYbCPqRUo/5g/609WRj1mdjVn7mS9bqN5sIExtHpvUwtSzYb4P+K1a54VIbDMcYahSujlpo8diOMK8fQnML/XErb/q4leuTVn79hyzzBixa/wUrj7Lgo5rlcWJJ2rLIR0RicX7Xh7AbWh2U5kHLpictn2paPoF1mPbNJmFMq2pps4eOPdb/3f/weIqmn/dFz9Kp8y2rj1s0bT5LISg1LcSKhZHqlgXedB76kzeqk+ujP7N/J/yofU2elS4u6SHWxKeE6GyIzpawVQHKrhp+Wcg17LAA76HnsMQ9k5qXmGxIQRjbmfbqz93Qs6tLZ2Ytn3Ffqx4naW+W+pZnHnpOgZDPvQb2ue4SCWMmwGrr3ouorrEDxSRYSJpokFNUY21LXmB+nJz7d1+vrHdE//iBiTzGBCc5lhViaY7NTQMKfGegHFT9tPzISb6dtAS9jIDAf65QjR707Pt3e/bzTTkax+QgVtJEIO5rAqzkgPaB7s073/u/D+05JsuDze0O0QTjgo3BN3iWYDO+8dZefAW2w0st8DEDjkfMwBFlZAYyOKH2cYaRRrkefiCzn25MYDEToKHY7VBDnJ5j4QJrrU54mWLB6WsxdcxM33f8gB3Wn2NSsBBe8ht/I2IM4krCDezTtQ/RMr48xFatOTmyU95ctn+74oAzhtIPH5EFNKyE1aFwYd5crn4phFoMcuqh/XbssAx4g0EwFHDAWeOorK4YCYSJxXTEkLchEvOwtFEv6t5AJKAh/Mlwx3/2iSE4YPbIl/bZ9J4Yotg/iIULs6neRNaTB+86aTEd91sTUxWlU+b79PA9DFJo7zjzgxaVSvadW66ywQAmCaXmU67amre/z+b1D9jhrzvMrrzkEsxliDUFF+9z2h77l4tsYI5vj1y82SoRIc58DJGQJszeyyGqhu02BUMLW43lWO3BjfW/zZq86w8jFq3QQpiJpvT7/XP+xn68qWVr1hxpU80Kkw5YbQoA0NoKg/u4iekmFn4cE8Sbrffd89ksSz6WwYc4ia1vaMjmLltpwfQEDgj2wnZD5qgCyGAjipah2QnXzBnaZfSAYhg7nrUoCYqXe7GVo5b19GNmP3kHShVhJEoWhbKcWX1PoULIgRWeH9hvY7s3W99xb7M2kyi3ZRigi5LkDJjmJQioQCQviLVQnjbrkOULKk0F1+NPWrzhcdv3s5dsHpMy+uWUCuYsrKUTT4Va3W5BQhTTnZUw37+4yeK5qyweer1TBqHL0pKlGU4jr6DpEBVSZJ6xnHIPs0epyMiXM2t+7mqr+mWrYe4JxGA1gRpELT2IHvPLN16X5+1pLrACOMcc75qnTeRFwXk22ljqY95HcLXEFBO0PUIUBqIxS6GJG29aGXYED9xi/tNPMJUKFg09gKUq2Uxh1eblLxdE71y7GAHutDaeGoIEPsyoKDmE8wT0MYXgWiVnEpm0CtYjOgq630beMXInijMRJGYUZxxB7oUyteiF+ev+9UhHVGj1y+987zkI8G5rES7gg2aIJ3AAopgoakoLdmKtrCn7TD+I5misB9EMTuQQzhMIUgI4kmSlX1VvWf+6gop0/r/4nXBbvihoJ0eEWbgkSm0Y/RjAnlbRtQqG3XMGHoJ4kQbPsjCzOm0O8PxVPMyr8wbsl2vXosa/4/caosf9YHpJ4FV+DLOWMZhzawFGQG5NGtz1Kl3XFnSfoYd651ycnkHKmT6uvTz73NU3BB+bTbuw3zx5413TH65WqoQByTKfEE2mzGeimGIKa1XT65bOCLrVAHqtH/5AdsDVORbHwyT5af7RT30A81Ys9qKd/v7+vc2zK+Xg+gDlCempHUhA8WdKQVj3jq4G7gyOAjvCcl3umavpj1GRYQlkYvO49un3p2ygip9DWi0H6ytp28qstxIDl+itIpemgpd1RQ62RaBTwiazuWVppWwfMJ/UcgwiUPjO7jXjdZ75WbvvqvdOXiOy4f+6b/T8rI1xd65NLg6LiXXJWPRddsqpnL3cs/e+wbf5PUChjRDqfYO4/dmtnn339txi4ndfPlQIJVeHVhMAgJy5719Mr0u8v7pv32NI75RYUYP8Ku7K1TLoKMcRPZ595nQtatBDTA5GMva4zxnIOXv6iB/bXvbsG1+OsUKEOLxXpNAlKFaX/cj2L6mUvA89uPcAS25IoUqCgVJJVUPwDw8t2btWhI6dYqlTGmmWUModKWqArbkmSmllrE0/sH/6RAMjidPmtTRZBN0kmAyjHOMPRMEQUSX7zZjYuahr2OE/WIJ/XUEAhi2OKAHPPNlnZO8MhzMYXGOhPCxWyH2Z2uf+oivJZcRt4iSCF/pEuWoKfWtpY5nfA+1eFEilJsKUIeLOdx9VwoayaYGg72wyBPCFrrCkHCsSFuKsEjBoCIs8zOQfXVCDvUwYJYtYfiWIlgAX5MkhYS8zKVFi5MkQNg27PnLyAtaaQnEhRIvcD17JPziWiq08JC5y0YNqx25CVtojKFuwJLJDj/Js3/NwQaymiQcN1v68UGwV9JROAZuIvz5lkC6wBKOPhyzkx3Or1Eic4Im68ZFmiEMnHiFk6YGdssdaRiiY/mEY1vzFkO1+rmlP3jSCXvhuhUC2BnvhM2wcxHC+/4QhfDDIQRkgH3wbA2f2yIOb7Mo/f499f936AqGMfScSTIOSXXrBu+3Siz5oHvGSQtiMzARcdUzpXVy1c69Yho0GMeIppe3Q74VADY/y9tfPh7fs/UDsoxSeFEYqDCe/+e377Ondg/bVm+7lHnQi6IiavfTKbts6OmhPbsUVBhGMgD94m5h9uMStPW2M1s49FKVkt4yOVEMpjofjHizjB+sQYS05YhKa7BoK1kzn2sF0yKpV2OtQCinEWT5Rqca7w6zhTRNjYSBSYifFT5IfUbuTMM2HDmOXuX0CHSE2riluQ1sP1KdtDrtnJxOUCR5J8gzu2R+csdq+c3vdzj8P2TWZGM5bSiSRDhPIBeWVNqcHTQBhW5kk1mwsU8r69DGXpZJnE7/YTRyNyUTNvGcefiRvEUA3WVennnqiNbnOCFEqMds+qSYzJo40q7H26rC8xTMIpi7qIxpQmqIXzQDh5KTHOBgJmRE53j52trT1R8bs1//8cwuRP0byC4X2em3C/cQ2PfSgHfum1daCUACMsjRVRFvIa1JKpU0VVoU6hk2KClMs0GQLtgK+xXPFu46pxDFYcJt8dIvtX7+V8Ulx0cP3Si2IKhYnEGOh1PDOv/7xBhs+4a2kyIh5iSllqD0IMSbaKLtMBAjKtosGtdyRFcTbPNc+KKGlx3gRUWH9/udt6r7nXNKG3owg8YUN6MMySg7aHDMYEZNMvfILq81f4TQ1kmhFlEFT0CUEWLItRMQQgpiI867FOswUnXhNF4Zq+1Df8LBVUTSEwVSIJZgsLuCgI5qjyjkGQqFdjhVqj/7SsoUrGIgdHFPykVcOuxNCSYe0g1IBdxs+JSgc+wMG1xQmrRq2bPKmW62nJGZjKACjSbPhZLTSnjBtkjJx4RwEMYc5MWyANree/pZ5x7+HZdBGlCiEkEqHYJEIS2KK6BO8T86y8kAY5aRLIOj99FGr7H1F8mO8CkX9FTURP2f+zjDMWtvwHke4QNvJltCOAUI6N5/8guXHX+BMbgIXEraEMQMkKmIng7BwYRwEyXjVqshz420WbH4GggTjZIDEgwwwbKXYBVbl5l4Ig7x5H0w8QnIVYXapaBmFLUIA4famf7Tm3N8zO/ydqCcKhzbnRBaApD12m3RambAwOrDNvG/eYCXWsM9WQpYtc0Exdl2EmaASH4es++weIojk75Hl+40dmojKOknGPiWVUhBblkYfsfjVDdYK5li69CxLBo9kQJZAfY+FWx+zYAtbCdanjxMnp4OxkeJACAOcyftAUsqUZOlOzbWY8A8/+QJO8IjCX0JcWwptLbSlwC5nbQyGZNvSvpWByPXlGAmvk3ZWopT8Je0xpUT1ubYV2lLA3sxtKbRNJIcWlxbP//5XOAXp/PK7L8SONQIXFaBMXaImbwPBXHsZrBZ2DsLMnseSiNMmUFpTexiMR3dLIWLaWkCYvC3dgguHbrv1epGjdfHzzr2OXvEWF9YrUlCUoNqNjEZKX52VwfvjBt01MnM19z5y9Xk/U+jns/Z7MThJOn1el6CozSAtSEPnO+9ciAdfS771LNh8BI4VeiAnJeC8j7wMaDtzYZ7MW7s1sVc1G6i0FY6xgfolrP18+eZHb++O3a1/i2j3xez66DsnFwZ55RTSMmezT3s9hmeYpTuXzoNh6HnygNrHsFydN9T2QveqZaTcvWo96xTXnn6uj95xrXZ6L+fmdgydvmpDWJbz/iDtRoC5j/oZ7jegdo9f9zWPk6L//vdfAj3xrua5nh9c6wXhUYr9FAVoIpo465TJ4LGI05y17U6IOtA7JqYA301c9ex7BOOedwFRd8edaa8+/4kJjmFiBoXlCB3MAb5IYZ1ivjzJtuRpfNFnb6ys/12QfwvomzdM/20eRp9nExFkxHasameDNLjAiSA0qDtAO88EuisNJzX3nol1gAiEk/IsoJp0970DIoC0n82kmecCpvbUkrhjRPdaG1LQBdhJNCFN09ZFV3619s+zAc8APXv91KLMTx8iLlmZYgFktTIm6wwttfup7oAUAwrgBXgnldnSUYzCvSbqigAIZAeoAw2TuirelabLzQqwY5SYWQB0gDtgtXNzoAGomQm8JCwGyI+WiCzJzrzI0j597TeKzLZDcP5j9QU2nfwMSS5JUFEFG4xPKeqcEMUB5pnzcTyXDZeKagLQAFRH2gBREFnm2ULiuFULPDt8yGwBe9q+iNQsNk8TwoTbJNmjMfbmr+4x27bdbJwsrYygdns0cyrtGMCMXC06YkIHqANMO0/MUBuB1T3tQqSbZ8kOv52fcNm3+vZpPKs14yu8crQkxp5jWxxQ2hZSdbU2Jp3n2prqmRuRP/yn+LoH47dmuW/nHu7boYNSI9poQurJtavpx6X7aX/Nf46BCEbLnnf4Pi52Y1p+8tPcnn4qM+VhAwYrJMi1wDKCG68DrBhbtAomFKpNeBNEh6RR80oef8D7qwf2DeN0H8borIxZk05lIYawnEQLSXYky4TccYImKcnR6KxDQvuTo0IbUFzCc5ePEXeh5oqmDwixSv85PlGzLnQ7oxEONNzT+BnhX4oWCWB92rP7N6T2iyfwZYylDaeYJXDFOu0AR6p6XkhZ72So8OpZ/GIaRmu8izbuOg0xPoiakmBSErqjtq4uCEtNlfbWZIr9TW7vOKxi7ziCmISHym4psiyOMSRBERXZWT+h0k+DqGhtuFrPus/pA1gtGS2XhABbOy+X5mHL9/j9bXtiI9Eu3App44DStZBkAV7SlO4V7xyTCZWSt4S9Ub4kKEV+s8EJA02cJF1TCPLEAWcwsLI5yu3QvtDee1wvcS2DZUSBLNRuYstxlHYOgGYvAO7Hm+614xgPHdBZtd6LCLUPQP086gDAiq0Vea4+LbTj31iyu/9t0vZtgy6H4AVIsRUJ8tcBhYHduVSCqt/M2kvC3rQ5HNChRFhTgCo4Kpq6L6SM8WBfe+bSmp29okeLnAmwkemA9Nx2kw4ODH9ERdevKdwghRkpdkB1wc201eKXpBlEUtGmAJhccEYOijKbw/Mv6LNN90za5ns56o5Qcfo4wK5XIWFNQT+dSREVDrP/TgbY+PBAYXHBaAeSmwTuJ3D+qLllO2sFnzCU4DTRr3ZrOgAr8ppq/Z9+DhDP3CsGcqA69YwkNTW16Uyp28dNonimvIymTabYNRVDxUQF4294a82OOa1qz95Tt22PK/8OqIC2roeaFeCVpGLPPMBOOK8GBLWhC2wLoDEA59RKduaRc2x+hc00LkeRuw9I5egCgWQSnmy95iALwxriLNh+tfl5+/Vzz9rw0uX2e286CReE1VJupQtQa0NgOlJz/A/YjUFz0xOP2fjYqK069o22fBm7jEbcMU5dLSuWlkSdsaXwcVf/48x+O/ocDvJwms9+b9T2bJ5EpQVY/5gSkRP+rgrQdtklhImYRZsTYlt96Dw7ZgnfkjT1qci05RHn84royTOFqK3IuQC3CzJwOmGXX3iV7dz6oi2eP2jj9fs5RbiZ73Gust4Kdr0LVn260uOS7b7t2jdmH/zQpbZkqGa1csm+/s077MTVp9nHP/pRax+cLvbC5DBkiRMxlDHEK1llZXWmxth8Vn0OD4dt+bYp2/y17dCDhR2jxe6kTA6y6Yfs5CMkmiClvlpkq/D0eYOD+xiPzn4pKXGESu3pDIERXHZHEnJ6AiWIt8mG7R2P7KXxebavXWXjUeEAkolIghBl8EKqTlXpy6SdFjBTPgyxfVP9NhH3OJdwkGzQIeOwU/ku1pjyOsr4KZGTMPlchX9s0dzpqM6ZM2UC+CZucGWvLTmxZrsf3c+WmtyYGMuunaNEJSgQMRJV7rOsTrx0dq+rbjxwDh6KLgUilsq86ec4jJpAtcQXR+W+RVau9bG3nLI581gSAua2WAJKe42p0SVVsGqc3kqvlXtXWini8xHUv2wHUMt5dGO3xhdcqlOAKt+uIZxC0F2nRB3yzsU5xvMgJz8bkRMIYFIFNW3jHbyf3P/QdVEp/NuWEghMIubMY+78ObZq5XImSMaRr2VaMlnML2RPFCBVGS7PxX5Q1eg6yuDIOOEAdf2je+yZ5yftdSt67W1rFsFExMF2HS4yQ82SiahIL8iU5FhRiyKbIM125wPbbPe+hp103CJ70/HL3XmeA0niyuVw6U6kCT28K4dpIWeksg9tjkjKfPdQ6w9t9JGXbfu6FzFMIdMizUfeMM7S673NGzd+thyVPtYi3+ekhvRS9E1qvGTpUlu0aIGzvk3pPJth5eWVf+fbN80aCUFZACBo+LqOmHjGvZOg3hdFUZYkw3cUPJodDChrSMgBaDkTl/6Tmjp1pY8kieTl6pSj8tkJhCVSXxhKH/sQoqLTW3bZjnWbLR1HECGBDCBldyPSca00+ceQU5AkYhCpbi51xJIqaZkjsfqOrTb662dtYN4Cm3PY61hqTETAYGtO0dGKIiMHVKAkPYdOqoleOsmxFABYpBJ1rfAOMALKZIinnGS1FnWtSKhIOQog/RhGjk/aprNZpTp8nbSwFQqR9OgPn7TxR18AXMQpHXSdi2HR01FgI81Rme5KOjVdJlun1CGzpxTxkIBq0jXOZ9MD223f2E4bOOpkzDX5TdqJy/Ic3b0jnHEcFE6nltxJRR0QqWn3GpCpkybAdC1gAiuQtJGpU7Y7Q0PcTJwPVegiNutUiBQn0vQOTNjub27A5CbsipSqphfjSaOkLaItsMqlJ3k8GZb8eFQwdcQvYFKNQirwEenqbNKlPEHVfO4eq6xYbX55EGvKB2oM6rZMgPNQM59SrL9C/QROutIF3AUkNdW0Bc59e+Qk66YKEwRSWsKg0HcShFLI/CJAlvGdtmuHHfz3DXz0h7SkphISY7llo3XPPHQvhpc1TpLsD6OsvUPizVyOTeKgwJ2cWqRdMhjwqlPqdMvdfGCxwsKlJ9GO1KtU17kMujqGFesxY40p+lRxUpW6ah3OgERyHYCiKHeRibGAVOLSU1ACAB0Gupy5TjiIr5sb7rXk58/ymWuZNkS3LtABnKQIMJ1+FXQLgyeKbS/ZEVby9va02Rir+DaUSRc7QAuwSBeJFll1JAvxnAOM9MBma+/9meWL3mBGUS5SkYk+2s1cll1S4R6JammJZUp2FEXvOusOQE56nWWinXwRwkuCxNKkF8k9Y1AY9/GHrP3Yo1hxPpLgayQXXztwkmTBzEKKAHVgtUbJDibtsXKevBpG0Y4tSXPuc8SJp6ZOfaXrUl+tV2UbimvVrhAhheRDSuQx070Pk2a+19LqIvOWn25e73Iy05gyl2uir86IYZz8s3przWnty+EzGwefqUCPqAtaOtPRVq9EOiDU7mjXi5Y/dJd5O161iBO7Ci5Dp0DSJAdKaxKwkqK0pgBYSFbXEZ/mNLLs+dFtI1ugSLsN174Lbt7uzpglUYgWQAuwMlI6FVKOxElXNSXDp/KlFK9Rac46lWtK/JplgystnX+8pQPUpX7OXTh4JoGv9VqksRxVtzQCcidBi89cWxPm7/mV+VufNO+l58yfJjJTDh5r7MJzrbsiFHLApJ5OTSU9ldcALe59JNrO8v+5dN21tzugjuzdV14DCy5252cOqAB3gRYgHQP0jEhDoDNJXOquyAnQAi/Q7mCA8C0HfEbRF6Y6v9FpkzMUqLgnqZMn8XRgDwM0aV+gXO4JUAI2UwAlSdKmkKiWhADK+MnYdcB2a6RcRgMaSXb1wnU3flT4ZoA6sD/6+Dno0K0A6lPGeAYoAAqQs+ruM4A5Sete61mBBM8EWNf6XBDnS0FtsZL6XkbKUawIt4C5Zj3RzQHTma/CH57p3hMYGTYHWnUBWOkWAZyRKhIV+EBWN/cn49T/o7m3fQv/U/xeA1SP3NL54Qc+DIXPYN45LhbgWQC7112gri7AOqCA8hSFz4AGJBInzGGSEOgCFVjuFXhIisU1wARAIN0zAZ4NUr65ACvgDnRHZUNO7whmpgB4ef/37riBnnDxN7/fAvqbV7S8808XYxYvZOZ/CsVlRSaLGTp1xXepdpa6ACZwkqar3XUHpMC5ZFMhUYy3AyipOkkCzDFBUkOiBXA9A5h7VzDArVdJUW6E5+4LHvO3c9r7vSzJP19bd787O5uNoXv93wLtNppd52uhsuot/L822XwLmkQOHluV9gDqi9XJ+HKbL9YzmdukAjjYzz/O3dEKZs1IHUm6zxMELGMXTSwiiTIWR1KY9ZSTw4wz7CSc5n8nwErZBOdzdQzxmLVK++3bT/Hl5mslNnuOv+v6/wOf3U+K5UdQfwAAAABJRU5ErkJggg==", We = "<svg aria-hidden=\"true\" viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"32\" cy=\"32\" r=\"30\" fill=\"currentColor\" opacity=\"0.12\"/><circle cx=\"32\" cy=\"32\" r=\"21\" fill=\"currentColor\"/><path d=\"M22.5 32.5L29 39L42.5 25.5\" stroke=\"white\" stroke-width=\"4.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/></svg>", Ge = "<svg aria-hidden=\"true\" viewBox=\"0 0 64 64\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"32\" cy=\"32\" r=\"30\" fill=\"currentColor\" opacity=\"0.12\"/><circle cx=\"32\" cy=\"32\" r=\"21\" fill=\"currentColor\"/><path d=\"M24.5 24.5L39.5 39.5M39.5 24.5L24.5 39.5\" stroke=\"white\" stroke-width=\"4.5\" stroke-linecap=\"round\"/></svg>", Ke = { favicon: "/favicon.png" };
763
+ function F(e) {
773
764
  return e.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;").replaceAll("'", "&#39;");
774
765
  }
775
- function Qe(e) {
776
- return !e || e.length === 0 ? "" : `<div class="details">${e.map((e) => `<div class="detail-item"><span class="detail-key">${P(e.key)}</span><span class="detail-value">${P(e.value)}</span></div>`).join("")}</div>`;
766
+ function qe(e) {
767
+ return !e || e.length === 0 ? "" : `<div class="details">${e.map((e) => `<div class="detail-item"><span class="detail-key">${F(e.key)}</span><span class="detail-value">${F(e.value)}</span></div>`).join("")}</div>`;
777
768
  }
778
- function F(e) {
779
- let t = e.statusClass === "success" ? Ye : Xe;
769
+ function I(e) {
770
+ let t = e.statusClass === "success" ? We : Ge;
780
771
  return `<!doctype html>
781
772
  <html lang="zh-CN">
782
773
  <head>
783
774
  <meta charset="UTF-8" />
784
775
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
785
776
  <link rel="icon" type="image/png" href="data:image/png;base64,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" />
786
- <title>${P(e.pageTitle)}</title>
777
+ <title>${F(e.pageTitle)}</title>
787
778
  <style>
788
779
  :root {
789
780
  color-scheme: light;
@@ -967,10 +958,10 @@ function F(e) {
967
958
  <span>YOYOClaw</span>
968
959
  </div>
969
960
  <div class="icon-wrap ${e.statusClass}">${t}</div>
970
- <h1>${P(e.title)}</h1>
971
- ${Qe(e.details)}
961
+ <h1>${F(e.title)}</h1>
962
+ ${qe(e.details)}
972
963
  <div class="footer">
973
- <p class="hint">${P(e.hintText)}</p>
964
+ <p class="hint">${F(e.hintText)}</p>
974
965
  <p class="caption">浏览器不会自动关闭当前页面,保留或稍后关闭都不影响登录结果。</p>
975
966
  </div>
976
967
  </main>
@@ -979,9 +970,9 @@ function F(e) {
979
970
  }
980
971
  //#endregion
981
972
  //#region src/honor-auth/callback-server.ts
982
- var $e = { "favicon.png": Je };
983
- function et(e, t) {
984
- let n = $e[t];
973
+ var Je = { "favicon.png": Ue };
974
+ function Ye(e, t) {
975
+ let n = Je[t];
985
976
  if (!n) {
986
977
  e.writeHead(404), e.end();
987
978
  return;
@@ -992,21 +983,21 @@ function et(e, t) {
992
983
  "Cache-Control": "public, max-age=3600"
993
984
  }), e.end(i);
994
985
  }
995
- function tt(e) {
986
+ function Xe(e) {
996
987
  return new Promise((t, n) => {
997
- let { port: r, timeout: i = 6e5, onCodeReceived: a, onError: o } = e, s = null, c = !1, l = !1, u = !1, d = () => {
998
- c || (c = !0, s && clearTimeout(s), m.close());
999
- }, f = (e) => {
1000
- d(), o?.(e), u || (u = !0, n(e));
1001
- }, p = (e = 120) => {
988
+ let { port: r, timeout: i = 6e5, onCodeReceived: a, onError: o } = e, s = null, c = !1, l = !1, f = !1, p = () => {
989
+ c || (c = !0, s && clearTimeout(s), g.close());
990
+ }, m = (e) => {
991
+ p(), o?.(e), f || (f = !0, n(e));
992
+ }, h = (e = 120) => {
1002
993
  setTimeout(() => {
1003
- d();
994
+ p();
1004
995
  }, e);
1005
- }, m = ne((e, t) => {
996
+ }, g = u((e, t) => {
1006
997
  try {
1007
- let n = new re(e.url || "", `http://localhost:${r}`);
998
+ let n = new d(e.url || "", `http://localhost:${r}`);
1008
999
  if (e.method !== "GET") {
1009
- t.writeHead(405, { "Content-Type": "text/html; charset=utf-8" }), t.end(F({
1000
+ t.writeHead(405, { "Content-Type": "text/html; charset=utf-8" }), t.end(I({
1010
1001
  pageTitle: "请求方式不支持",
1011
1002
  statusClass: "error",
1012
1003
  title: "不支持的请求方式",
@@ -1014,17 +1005,17 @@ function tt(e) {
1014
1005
  }));
1015
1006
  return;
1016
1007
  }
1017
- if (n.pathname === "/favicon.ico" || n.pathname === Ze.favicon) {
1018
- et(t, "favicon.png");
1008
+ if (n.pathname === "/favicon.ico" || n.pathname === Ke.favicon) {
1009
+ Ye(t, "favicon.png");
1019
1010
  return;
1020
1011
  }
1021
1012
  let i = n.searchParams.get("code") || "", o = n.searchParams.get("error") || "", s = n.searchParams.get("error_description") || n.searchParams.get("error_message") || "";
1022
- i && !l ? (l = !0, t.writeHead(200, { "Content-Type": "text/html; charset=utf-8" }), t.end(F({
1013
+ i && !l ? (l = !0, t.writeHead(200, { "Content-Type": "text/html; charset=utf-8" }), t.end(I({
1023
1014
  pageTitle: "授权成功",
1024
1015
  statusClass: "success",
1025
1016
  title: "登录已完成",
1026
1017
  hintText: "请返回 OpenClaw,登录流程会继续完成。"
1027
- })), p(), a(i)) : o && !l ? (t.writeHead(400, { "Content-Type": "text/html; charset=utf-8" }), t.end(F({
1018
+ })), h(), a(i)) : o && !l ? (t.writeHead(400, { "Content-Type": "text/html; charset=utf-8" }), t.end(I({
1028
1019
  pageTitle: "授权失败",
1029
1020
  statusClass: "error",
1030
1021
  title: "未能完成授权",
@@ -1037,45 +1028,45 @@ function tt(e) {
1037
1028
  value: s
1038
1029
  }] : []]
1039
1030
  })), setTimeout(() => {
1040
- f(/* @__PURE__ */ Error(s ? `authorization failed: ${o} (${s})` : `authorization failed: ${o}`));
1041
- }, 120)) : l ? (t.writeHead(200, { "Content-Type": "text/html; charset=utf-8" }), t.end(F({
1031
+ m(/* @__PURE__ */ Error(s ? `authorization failed: ${o} (${s})` : `authorization failed: ${o}`));
1032
+ }, 120)) : l ? (t.writeHead(200, { "Content-Type": "text/html; charset=utf-8" }), t.end(I({
1042
1033
  pageTitle: "登录已完成",
1043
1034
  statusClass: "success",
1044
1035
  title: "授权已经处理完成",
1045
1036
  hintText: "请返回 OpenClaw,登录流程会继续完成。"
1046
- }))) : (t.writeHead(400, { "Content-Type": "text/html; charset=utf-8" }), t.end(F({
1037
+ }))) : (t.writeHead(400, { "Content-Type": "text/html; charset=utf-8" }), t.end(I({
1047
1038
  pageTitle: "授权失败",
1048
1039
  statusClass: "error",
1049
1040
  title: "回调参数不完整",
1050
1041
  hintText: "请返回 OpenClaw 重新发起登录。"
1051
1042
  })), setTimeout(() => {
1052
- f(/* @__PURE__ */ Error("authorization failed: no code in callback"));
1043
+ m(/* @__PURE__ */ Error("authorization failed: no code in callback"));
1053
1044
  }, 120));
1054
1045
  } catch (e) {
1055
- console.error("authorize callback error:", e), t.writeHead(500, { "Content-Type": "text/html; charset=utf-8" }), t.end(F({
1046
+ console.error("authorize callback error:", e), t.writeHead(500, { "Content-Type": "text/html; charset=utf-8" }), t.end(I({
1056
1047
  pageTitle: "服务异常",
1057
1048
  statusClass: "error",
1058
1049
  title: "回调服务出现异常",
1059
1050
  hintText: "请返回 OpenClaw 后重新发起登录。"
1060
1051
  })), setTimeout(() => {
1061
- f(/* @__PURE__ */ Error("authorization failed: callback server internal error"));
1052
+ m(/* @__PURE__ */ Error("authorization failed: callback server internal error"));
1062
1053
  }, 120);
1063
1054
  }
1064
1055
  });
1065
- m.on("error", (e) => {
1066
- f(e);
1067
- }), m.listen(r, () => {
1056
+ g.on("error", (e) => {
1057
+ m(e);
1058
+ }), g.listen(r, () => {
1068
1059
  s = setTimeout(() => {
1069
- f(/* @__PURE__ */ Error("authorize timeout"));
1060
+ m(/* @__PURE__ */ Error("authorize timeout"));
1070
1061
  }, i);
1071
- }), m.on("close", () => {
1072
- s && clearTimeout(s), u || (u = !0, t());
1062
+ }), g.on("close", () => {
1063
+ s && clearTimeout(s), f || (f = !0, t());
1073
1064
  });
1074
1065
  });
1075
1066
  }
1076
1067
  //#endregion
1077
1068
  //#region src/honor-auth/config.ts
1078
- var nt = {
1069
+ var Ze = {
1079
1070
  authHost: "https://hnoauth-login-test-drcn.cloud.honor.com",
1080
1071
  clientId: "221641491",
1081
1072
  redirectUri: "http://127.0.0.1:8081/deepLink",
@@ -1083,7 +1074,7 @@ var nt = {
1083
1074
  scope: "openid profile",
1084
1075
  reqClientType: "110",
1085
1076
  loginChannel: "99011000"
1086
- }, rt = {
1077
+ }, Qe = {
1087
1078
  authHost: "https://hnoauth-login-drcn.cloud.honor.com",
1088
1079
  clientId: "221000597",
1089
1080
  redirectUri: "http://127.0.0.1:8081/deepLink",
@@ -1092,31 +1083,31 @@ var nt = {
1092
1083
  reqClientType: "110",
1093
1084
  loginChannel: "99011000"
1094
1085
  };
1095
- function it(e) {
1086
+ function $e(e) {
1096
1087
  return {
1097
- ...he()?.env === "production" ? rt : nt,
1088
+ ...ue()?.env === "production" ? Qe : Ze,
1098
1089
  ...e
1099
1090
  };
1100
1091
  }
1101
1092
  //#endregion
1102
1093
  //#region src/honor-auth/honor-auth-client.ts
1103
- var at = class {
1094
+ var et = class {
1104
1095
  config;
1105
1096
  constructor(e) {
1106
1097
  this.config = e;
1107
1098
  }
1108
1099
  generateRandomString(e) {
1109
- let t = ie(e), n = "";
1100
+ let t = m(e), n = "";
1110
1101
  for (let r = 0; r < e; r++) n += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"[t[r] % 62];
1111
1102
  return n;
1112
1103
  }
1113
1104
  generateCodeVerifier(e = 128) {
1114
- let t = ie(e), n = "";
1105
+ let t = m(e), n = "";
1115
1106
  for (let r = 0; r < e; r++) n += "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~"[t[r] % 66];
1116
1107
  return n;
1117
1108
  }
1118
1109
  generateCodeChallenge(e) {
1119
- return g("sha256").update(e).digest().toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
1110
+ return p("sha256").update(e).digest().toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
1120
1111
  }
1121
1112
  generatePKCEParams() {
1122
1113
  let e = this.generateCodeVerifier();
@@ -1144,105 +1135,105 @@ var at = class {
1144
1135
  return { ...this.config };
1145
1136
  }
1146
1137
  };
1147
- function ot(e) {
1148
- return new at(e);
1138
+ function tt(e) {
1139
+ return new et(e);
1149
1140
  }
1150
1141
  //#endregion
1151
1142
  //#region src/utils/fs-safe.ts
1152
- var I = class extends Error {
1143
+ var L = class extends Error {
1153
1144
  code;
1154
1145
  constructor(e, t, n) {
1155
1146
  super(t, n), this.code = e, this.name = "SafeFsError";
1156
1147
  }
1157
- }, st = new Set(["ENOENT", "ENOTDIR"]), ct = new Set([
1148
+ }, nt = new Set(["ENOENT", "ENOTDIR"]), rt = new Set([
1158
1149
  "ELOOP",
1159
1150
  "EINVAL",
1160
1151
  "ENOTSUP"
1161
1152
  ]);
1162
- function lt(e) {
1153
+ function it(e) {
1163
1154
  return !!(e && typeof e == "object" && "code" in e);
1164
1155
  }
1165
- function L(e) {
1166
- return lt(e) && typeof e.code == "string" && st.has(e.code);
1156
+ function R(e) {
1157
+ return it(e) && typeof e.code == "string" && nt.has(e.code);
1167
1158
  }
1168
- function ut(e) {
1169
- return lt(e) && typeof e.code == "string" && ct.has(e.code);
1159
+ function at(e) {
1160
+ return it(e) && typeof e.code == "string" && rt.has(e.code);
1170
1161
  }
1171
- function dt(e) {
1172
- let t = u.win32.normalize(e);
1162
+ function ot(e) {
1163
+ let t = r.win32.normalize(e);
1173
1164
  return t.startsWith("\\\\?\\") && (t = t.slice(4), t.toUpperCase().startsWith("UNC\\") && (t = `\\\\${t.slice(4)}`)), t.replaceAll("/", "\\").toLowerCase();
1174
1165
  }
1175
- function R(e, t) {
1176
- let n = u.resolve(e), r = u.resolve(t);
1166
+ function z(e, t) {
1167
+ let n = r.resolve(e), i = r.resolve(t);
1177
1168
  if (process.platform === "win32") {
1178
- let e = dt(n), t = dt(r), i = u.win32.relative(e, t);
1179
- return i === "" || !i.startsWith("..") && !u.win32.isAbsolute(i);
1169
+ let e = ot(n), t = ot(i), a = r.win32.relative(e, t);
1170
+ return a === "" || !a.startsWith("..") && !r.win32.isAbsolute(a);
1180
1171
  }
1181
- let i = u.relative(n, r);
1182
- return i === "" || !i.startsWith("..") && !u.isAbsolute(i);
1172
+ let a = r.relative(n, i);
1173
+ return a === "" || !a.startsWith("..") && !r.isAbsolute(a);
1183
1174
  }
1184
- function ft(e) {
1175
+ function st(e) {
1185
1176
  return e === 0 || e === 0n;
1186
1177
  }
1187
- function z(e, t, n = process.platform) {
1188
- return e.ino === t.ino ? e.dev === t.dev ? !0 : n === "win32" && (ft(e.dev) || ft(t.dev)) : !1;
1178
+ function ct(e, t, n = process.platform) {
1179
+ return e.ino === t.ino ? e.dev === t.dev ? !0 : n === "win32" && (st(e.dev) || st(t.dev)) : !1;
1189
1180
  }
1190
- var pt = process.platform !== "win32" && "O_NOFOLLOW" in c, mt = c.O_RDONLY | (pt ? c.O_NOFOLLOW : 0), ht = c.O_WRONLY | c.O_CREAT | c.O_EXCL | (pt ? c.O_NOFOLLOW : 0), gt = c.O_WRONLY | c.O_APPEND | (pt ? c.O_NOFOLLOW : 0), _t = (e) => e.endsWith(u.sep) ? e : e + u.sep;
1191
- function vt(e, t) {
1181
+ var lt = process.platform !== "win32" && "O_NOFOLLOW" in t, ut = t.O_RDONLY | (lt ? t.O_NOFOLLOW : 0), dt = t.O_WRONLY | t.O_CREAT | t.O_EXCL | (lt ? t.O_NOFOLLOW : 0), ft = t.O_WRONLY | t.O_APPEND | (lt ? t.O_NOFOLLOW : 0), pt = (e) => e.endsWith(r.sep) ? e : e + r.sep;
1182
+ function mt(e, t) {
1192
1183
  if (!e.startsWith("~")) return e;
1193
- let n = t ?? process.env.HOME ?? process.env.USERPROFILE ?? se.homedir();
1184
+ let n = t ?? process.env.HOME ?? process.env.USERPROFILE ?? y.homedir();
1194
1185
  return n ? e.replace(/^~(?=$|[\\/])/, n) : e;
1195
1186
  }
1196
- async function yt(e) {
1187
+ async function ht(e) {
1197
1188
  let t;
1198
1189
  try {
1199
1190
  t = await v.realpath(e.rootDir);
1200
1191
  } catch (e) {
1201
- throw L(e) ? new I("not-found", "root dir not found") : e;
1192
+ throw R(e) ? new L("not-found", "root dir not found") : e;
1202
1193
  }
1203
- let n = _t(t), r = vt(e.relativePath), i = u.resolve(n, r);
1204
- if (!R(n, i)) throw new I("outside-root", "file is outside workspace root");
1194
+ let n = pt(t), i = mt(e.relativePath), a = r.resolve(n, i);
1195
+ if (!z(n, a)) throw new L("outside-root", "file is outside workspace root");
1205
1196
  return {
1206
1197
  rootReal: t,
1207
1198
  rootWithSep: n,
1208
- resolved: i
1199
+ resolved: a
1209
1200
  };
1210
1201
  }
1211
- async function bt(e, t) {
1202
+ async function gt(e, t) {
1212
1203
  try {
1213
- if ((await v.lstat(e)).isDirectory()) throw new I("not-file", "not a file");
1204
+ if ((await v.lstat(e)).isDirectory()) throw new L("not-file", "not a file");
1214
1205
  } catch (e) {
1215
- if (e instanceof I) throw e;
1206
+ if (e instanceof L) throw e;
1216
1207
  }
1217
1208
  let n;
1218
1209
  try {
1219
- n = await v.open(e, mt);
1210
+ n = await v.open(e, ut);
1220
1211
  } catch (e) {
1221
- throw L(e) ? new I("not-found", "file not found") : ut(e) ? new I("symlink", "symlink open blocked", { cause: e }) : lt(e) && e.code === "EISDIR" ? new I("not-file", "not a file") : e;
1212
+ throw R(e) ? new L("not-found", "file not found") : at(e) ? new L("symlink", "symlink open blocked", { cause: e }) : it(e) && e.code === "EISDIR" ? new L("not-file", "not a file") : e;
1222
1213
  }
1223
1214
  try {
1224
1215
  let [r, i] = await Promise.all([n.stat(), v.lstat(e)]);
1225
- if (i.isSymbolicLink()) throw new I("symlink", "symlink not allowed");
1226
- if (!r.isFile()) throw new I("not-file", "not a file");
1227
- if (t?.rejectHardlinks && r.nlink > 1) throw new I("invalid-path", "hardlinked path not allowed");
1228
- if (process.platform !== "win32" && !z(r, i)) throw new I("path-mismatch", "path changed during read");
1216
+ if (i.isSymbolicLink()) throw new L("symlink", "symlink not allowed");
1217
+ if (!r.isFile()) throw new L("not-file", "not a file");
1218
+ if (t?.rejectHardlinks && r.nlink > 1) throw new L("invalid-path", "hardlinked path not allowed");
1219
+ if (process.platform !== "win32" && !ct(r, i)) throw new L("path-mismatch", "path changed during read");
1229
1220
  let a = await v.realpath(e), o = await v.stat(a);
1230
- if (t?.rejectHardlinks && o.nlink > 1) throw new I("invalid-path", "hardlinked path not allowed");
1231
- if (process.platform !== "win32" && !z(r, o)) throw new I("path-mismatch", "path mismatch");
1221
+ if (t?.rejectHardlinks && o.nlink > 1) throw new L("invalid-path", "hardlinked path not allowed");
1222
+ if (process.platform !== "win32" && !ct(r, o)) throw new L("path-mismatch", "path mismatch");
1232
1223
  return {
1233
1224
  handle: n,
1234
1225
  realPath: a,
1235
1226
  stat: r
1236
1227
  };
1237
1228
  } catch (e) {
1238
- throw await n.close().catch(() => {}), e instanceof I ? e : L(e) ? new I("not-found", "file not found") : e;
1229
+ throw await n.close().catch(() => {}), e instanceof L ? e : R(e) ? new L("not-found", "file not found") : e;
1239
1230
  }
1240
1231
  }
1241
- async function xt(e) {
1242
- let { rootWithSep: t, resolved: n } = await yt(e), r = await bt(n);
1243
- if (!R(t, r.realPath)) throw await r.handle.close().catch(() => {}), new I("outside-root", "file is outside workspace root");
1232
+ async function _t(e) {
1233
+ let { rootWithSep: t, resolved: n } = await ht(e), r = await gt(n);
1234
+ if (!z(t, r.realPath)) throw await r.handle.close().catch(() => {}), new L("outside-root", "file is outside workspace root");
1244
1235
  try {
1245
- if (e.maxBytes !== void 0 && r.stat.size > e.maxBytes) throw new I("too-large", `file exceeds limit of ${e.maxBytes} bytes (got ${r.stat.size})`);
1236
+ if (e.maxBytes !== void 0 && r.stat.size > e.maxBytes) throw new L("too-large", `file exceeds limit of ${e.maxBytes} bytes (got ${r.stat.size})`);
1246
1237
  return {
1247
1238
  buffer: await r.handle.readFile(),
1248
1239
  realPath: r.realPath,
@@ -1252,73 +1243,73 @@ async function xt(e) {
1252
1243
  await r.handle.close().catch(() => {});
1253
1244
  }
1254
1245
  }
1255
- function St(e) {
1256
- let t = u.dirname(e), n = u.basename(e);
1257
- return u.join(t, `.${n}.${process.pid}.${oe()}.tmp`);
1246
+ function vt(e) {
1247
+ let t = r.dirname(e), n = r.basename(e);
1248
+ return r.join(t, `.${n}.${process.pid}.${_()}.tmp`);
1258
1249
  }
1259
- async function Ct(e) {
1260
- let t = await v.open(e.tempPath, ht, e.mode);
1250
+ async function yt(e) {
1251
+ let t = await v.open(e.tempPath, dt, e.mode);
1261
1252
  try {
1262
1253
  return typeof e.data == "string" ? await t.writeFile(e.data, e.encoding ?? "utf8") : await t.writeFile(e.data), await t.stat();
1263
1254
  } finally {
1264
1255
  await t.close().catch(() => {});
1265
1256
  }
1266
1257
  }
1267
- async function wt(e) {
1268
- let t = _t(await v.realpath(e.rootDir)), n = await bt(e.targetPath, { rejectHardlinks: !0 });
1258
+ async function bt(e) {
1259
+ let t = pt(await v.realpath(e.rootDir)), n = await gt(e.targetPath, { rejectHardlinks: !0 });
1269
1260
  try {
1270
- if (process.platform !== "win32" && !z(n.stat, e.expectedStat)) throw new I("path-mismatch", "path changed during write");
1271
- if (!R(t, n.realPath)) throw new I("outside-root", "file is outside workspace root");
1261
+ if (process.platform !== "win32" && !ct(n.stat, e.expectedStat)) throw new L("path-mismatch", "path changed during write");
1262
+ if (!z(t, n.realPath)) throw new L("outside-root", "file is outside workspace root");
1272
1263
  } finally {
1273
1264
  await n.handle.close().catch(() => {});
1274
1265
  }
1275
1266
  }
1276
1267
  async function B(e) {
1277
- let { rootWithSep: t, resolved: n } = await yt(e);
1278
- e.mkdir !== !1 && await v.mkdir(u.dirname(n), { recursive: !0 });
1279
- let r = n, i = !1;
1268
+ let { rootWithSep: t, resolved: n } = await ht(e);
1269
+ e.mkdir !== !1 && await v.mkdir(r.dirname(n), { recursive: !0 });
1270
+ let i = n, a = !1;
1280
1271
  try {
1281
1272
  let e = await v.realpath(n);
1282
- if (!R(t, e)) throw new I("outside-root", "file is outside workspace root");
1283
- r = e, i = !0;
1273
+ if (!z(t, e)) throw new L("outside-root", "file is outside workspace root");
1274
+ i = e, a = !0;
1284
1275
  } catch (e) {
1285
- if (e instanceof I || !L(e)) throw e;
1276
+ if (e instanceof L || !R(e)) throw e;
1286
1277
  }
1287
- let a = e.mode === "append";
1288
- if (a && !i) throw new I("not-found", "cannot append to non-existent file");
1289
- return a ? await Tt({
1290
- ioPath: r,
1278
+ let o = e.mode === "append";
1279
+ if (o && !a) throw new L("not-found", "cannot append to non-existent file");
1280
+ return o ? await xt({
1281
+ ioPath: i,
1291
1282
  rootWithSep: t,
1292
1283
  data: e.data,
1293
1284
  encoding: e.encoding,
1294
1285
  maxBytes: e.maxBytes
1295
- }) : await Et({
1296
- ioPath: r,
1286
+ }) : await St({
1287
+ ioPath: i,
1297
1288
  rootWithSep: t,
1298
1289
  rootDir: e.rootDir,
1299
1290
  data: e.data,
1300
1291
  encoding: e.encoding,
1301
- existingFile: i,
1292
+ existingFile: a,
1302
1293
  fileMode: 384
1303
1294
  });
1304
1295
  }
1305
- async function Tt(e) {
1296
+ async function xt(e) {
1306
1297
  let t;
1307
1298
  try {
1308
- t = await v.open(e.ioPath, gt);
1299
+ t = await v.open(e.ioPath, ft);
1309
1300
  } catch (e) {
1310
- throw L(e) ? new I("not-found", "file not found") : ut(e) ? new I("symlink", "symlink open blocked", { cause: e }) : e;
1301
+ throw R(e) ? new L("not-found", "file not found") : at(e) ? new L("symlink", "symlink open blocked", { cause: e }) : e;
1311
1302
  }
1312
1303
  try {
1313
1304
  let n = await t.stat();
1314
- if (!n.isFile()) throw new I("not-file", "path is not a regular file");
1305
+ if (!n.isFile()) throw new L("not-file", "path is not a regular file");
1315
1306
  let r = await v.lstat(e.ioPath);
1316
- if (r.isSymbolicLink()) throw new I("symlink", "path is a symlink");
1317
- if (!z(n, r)) throw new I("path-mismatch", "path changed during write");
1307
+ if (r.isSymbolicLink()) throw new L("symlink", "path is a symlink");
1308
+ if (!ct(n, r)) throw new L("path-mismatch", "path changed during write");
1318
1309
  let i = await v.realpath(e.ioPath);
1319
- if (!R(e.rootWithSep, i)) throw new I("outside-root", "file is outside workspace root");
1310
+ if (!z(e.rootWithSep, i)) throw new L("outside-root", "file is outside workspace root");
1320
1311
  let a = typeof e.data == "string" ? Buffer.byteLength(e.data, e.encoding ?? "utf8") : e.data.length;
1321
- if (e.maxBytes !== void 0 && n.size + a > e.maxBytes) throw new I("too-large", `file would exceed limit of ${e.maxBytes} bytes`);
1312
+ if (e.maxBytes !== void 0 && n.size + a > e.maxBytes) throw new L("too-large", `file would exceed limit of ${e.maxBytes} bytes`);
1322
1313
  return typeof e.data == "string" ? await t.writeFile(e.data, e.encoding ?? "utf8") : await t.writeFile(e.data), {
1323
1314
  realPath: i,
1324
1315
  bytesWritten: a,
@@ -1328,11 +1319,11 @@ async function Tt(e) {
1328
1319
  await t.close().catch(() => {});
1329
1320
  }
1330
1321
  }
1331
- async function Et(e) {
1322
+ async function St(e) {
1332
1323
  let t = null, n = e.ioPath;
1333
1324
  try {
1334
- t = St(n);
1335
- let r = await Ct({
1325
+ t = vt(n);
1326
+ let r = await yt({
1336
1327
  tempPath: t,
1337
1328
  data: e.data,
1338
1329
  encoding: e.encoding,
@@ -1340,13 +1331,13 @@ async function Et(e) {
1340
1331
  });
1341
1332
  await v.rename(t, n), t = null;
1342
1333
  try {
1343
- await wt({
1334
+ await bt({
1344
1335
  rootDir: e.rootDir,
1345
1336
  targetPath: n,
1346
1337
  expectedStat: r
1347
1338
  });
1348
1339
  } catch (e) {
1349
- throw e instanceof I ? e : new I("write-failed", "atomic write verification failed", { cause: e });
1340
+ throw e instanceof L ? e : new L("write-failed", "atomic write verification failed", { cause: e });
1350
1341
  }
1351
1342
  return {
1352
1343
  realPath: n,
@@ -1362,30 +1353,30 @@ async function Et(e) {
1362
1353
  function V(e) {
1363
1354
  return e?.trim() || void 0;
1364
1355
  }
1365
- function Dt(e = import.meta.url) {
1366
- let t = u.dirname(h(e));
1367
- for (; t !== u.dirname(t);) {
1368
- if (l(u.join(t, "package.json"))) return t;
1369
- t = u.dirname(t);
1356
+ function Ct(e = import.meta.url) {
1357
+ let t = r.dirname(f(e));
1358
+ for (; t !== r.dirname(t);) {
1359
+ if (n(r.join(t, "package.json"))) return t;
1360
+ t = r.dirname(t);
1370
1361
  }
1371
1362
  return t;
1372
1363
  }
1373
- function Ot(e = process.env, t = se.homedir) {
1374
- let n = kt(e, t);
1375
- return n ? u.resolve(n) : void 0;
1364
+ function wt(e = process.env, t = y.homedir) {
1365
+ let n = Tt(e, t);
1366
+ return n ? r.resolve(n) : void 0;
1376
1367
  }
1377
- function kt(e, t) {
1368
+ function Tt(e, t) {
1378
1369
  let n = V(e.OPENCLAW_HOME);
1379
1370
  if (n) {
1380
1371
  if (n === "~" || n.startsWith("~/") || n.startsWith("~\\")) {
1381
- let r = V(e.HOME) ?? V(e.USERPROFILE) ?? At(t);
1372
+ let r = V(e.HOME) ?? V(e.USERPROFILE) ?? Et(t);
1382
1373
  return r ? n.replace(/^~(?=$|[\\/])/, r) : void 0;
1383
1374
  }
1384
1375
  return n;
1385
1376
  }
1386
- return V(e.HOME) || V(e.USERPROFILE) || At(t);
1377
+ return V(e.HOME) || V(e.USERPROFILE) || Et(t);
1387
1378
  }
1388
- function At(e) {
1379
+ function Et(e) {
1389
1380
  try {
1390
1381
  return V(e());
1391
1382
  } catch {
@@ -1394,76 +1385,76 @@ function At(e) {
1394
1385
  }
1395
1386
  //#endregion
1396
1387
  //#region src/modules/configs/identity-persist.ts
1397
- var jt = /* @__PURE__ */ function(e) {
1388
+ var Dt = /* @__PURE__ */ function(e) {
1398
1389
  return e[e.LEGACY = 1] = "LEGACY", e[e.NEW = 2] = "NEW", e;
1399
- }({}), Mt = ".openclaw", Nt = "yoyo", Pt = "identity.json";
1400
- function Ft() {
1401
- return u.join(Mt, Nt, Pt);
1390
+ }({}), Ot = ".openclaw", kt = "yoyo", At = "identity.json";
1391
+ function jt() {
1392
+ return r.join(Ot, kt, At);
1402
1393
  }
1403
- async function It(e) {
1404
- let t = Ft();
1394
+ async function Mt(e) {
1395
+ let t = jt();
1405
1396
  try {
1406
- let n = (await xt({
1397
+ let n = (await _t({
1407
1398
  rootDir: e,
1408
1399
  relativePath: t,
1409
1400
  maxBytes: 10 * 1024
1410
1401
  })).buffer.toString("utf8"), r = JSON.parse(n);
1411
- return typeof r != "object" || !r ? zt() : {
1412
- ...zt(),
1402
+ return typeof r != "object" || !r ? Ft() : {
1403
+ ...Ft(),
1413
1404
  ...r
1414
1405
  };
1415
1406
  } catch (e) {
1416
- return D().warn(`[yoyo-identity] failed to read identity: ${e.message}`), null;
1407
+ return O().warn(`[yoyo-identity] failed to read identity: ${e.message}`), null;
1417
1408
  }
1418
1409
  }
1419
- async function Lt() {
1420
- let e = Ot();
1421
- return e ? await It(e) || null : (D().warn("[yoyo-identity] failed to find home dir"), null);
1410
+ async function Nt() {
1411
+ let e = wt();
1412
+ return e ? await Mt(e) || null : (O().warn("[yoyo-identity] failed to find home dir"), null);
1422
1413
  }
1423
- async function Rt(e) {
1424
- let t = Ot();
1425
- if (!t) return D().warn("[yoyo-identity] failed to find home dir"), null;
1426
- let n = await It(t), r = {
1414
+ async function Pt(e) {
1415
+ let t = wt();
1416
+ if (!t) return O().warn("[yoyo-identity] failed to find home dir"), null;
1417
+ let n = await Mt(t), r = {
1427
1418
  ...n,
1428
- version: n?.version || jt.NEW
1419
+ version: n?.version || Dt.NEW
1429
1420
  };
1430
1421
  return e.legacyDeviceId && (r.legacyDeviceId = e.legacyDeviceId), e.deviceId && (r.deviceId = e.deviceId, r.publicKeyPem = e.publicKeyPem, r.privateKeyPem = e.privateKeyPem, r.createdAtMs = e.createdAtMs), e.version && (r.version = e.version), await B({
1431
1422
  rootDir: t,
1432
- relativePath: Ft(),
1423
+ relativePath: jt(),
1433
1424
  data: JSON.stringify(r, null, 2),
1434
1425
  encoding: "utf8",
1435
1426
  mkdir: !0
1436
1427
  }), r;
1437
1428
  }
1438
- function zt() {
1439
- return { version: jt.NEW };
1429
+ function Ft() {
1430
+ return { version: Dt.NEW };
1440
1431
  }
1441
1432
  //#endregion
1442
1433
  //#region src/modules/device/registry.ts
1443
- async function Bt(e, t) {
1434
+ async function It(e, t) {
1444
1435
  if (!e || !t) throw Error("设备信息或用户信息缺失");
1445
- let n = j().getGatewayAuthConfig(), r = await N().registerDevice(e, t, n);
1446
- if (!Be(r)) throw Error(`注册失败:${r.data?.cnMessage}`);
1436
+ let n = M().getGatewayAuthConfig(), r = await P().registerDevice(e, t, n);
1437
+ if (!Fe(r)) throw Error(`注册失败:${r.data?.cnMessage}`);
1447
1438
  }
1448
1439
  //#endregion
1449
1440
  //#region src/modules/device/identity.ts
1450
1441
  var H = Buffer.from("302a300506032b6570032100", "hex");
1451
- function Vt(e) {
1442
+ function Lt(e) {
1452
1443
  return e.toString("base64").replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/g, "");
1453
1444
  }
1454
- function Ht(e) {
1455
- let t = _.createPublicKey(e).export({
1445
+ function Rt(e) {
1446
+ let t = h.createPublicKey(e).export({
1456
1447
  type: "spki",
1457
1448
  format: "der"
1458
1449
  });
1459
1450
  return t.length === H.length + 32 && t.subarray(0, H.length).equals(H) ? t.subarray(H.length) : t;
1460
1451
  }
1461
- function Ut(e) {
1462
- let t = Ht(e);
1463
- return _.createHash("sha256").update(t).digest("hex");
1452
+ function zt(e) {
1453
+ let t = Rt(e);
1454
+ return h.createHash("sha256").update(t).digest("hex");
1464
1455
  }
1465
- async function Wt() {
1466
- let { publicKey: e, privateKey: t } = _.generateKeyPairSync("ed25519"), n = e.export({
1456
+ async function Bt() {
1457
+ let { publicKey: e, privateKey: t } = h.generateKeyPairSync("ed25519"), n = e.export({
1467
1458
  type: "spki",
1468
1459
  format: "pem"
1469
1460
  }).toString(), r = t.export({
@@ -1471,17 +1462,17 @@ async function Wt() {
1471
1462
  format: "pem"
1472
1463
  }).toString();
1473
1464
  return {
1474
- deviceId: Ut(n),
1465
+ deviceId: zt(n),
1475
1466
  publicKeyPem: n,
1476
1467
  privateKeyPem: r,
1477
1468
  createdAtMs: Date.now()
1478
1469
  };
1479
1470
  }
1480
- async function Gt() {
1481
- let e = await Lt();
1471
+ async function Vt() {
1472
+ let e = await Nt();
1482
1473
  if (e && e.deviceId && e.publicKeyPem && e.privateKeyPem && e.createdAtMs) {
1483
- let t = e.deviceId, n = Ut(e.publicKeyPem);
1484
- return n && n !== e.deviceId && (await Rt({
1474
+ let t = e.deviceId, n = zt(e.publicKeyPem);
1475
+ return n && n !== e.deviceId && (await Pt({
1485
1476
  ...e,
1486
1477
  deviceId: n
1487
1478
  }), t = n), {
@@ -1492,32 +1483,32 @@ async function Gt() {
1492
1483
  createdAtMs: e.createdAtMs
1493
1484
  };
1494
1485
  }
1495
- let t = await Wt();
1496
- return await Rt(t), t;
1486
+ let t = await Bt();
1487
+ return await Pt(t), t;
1497
1488
  }
1498
- function Kt(e, t) {
1499
- let n = _.createPrivateKey(e);
1500
- return Vt(_.sign(null, Buffer.from(t, "utf8"), n));
1489
+ function Ht(e, t) {
1490
+ let n = h.createPrivateKey(e);
1491
+ return Lt(h.sign(null, Buffer.from(t, "utf8"), n));
1501
1492
  }
1502
- function qt(e) {
1503
- return Vt(Ht(e));
1493
+ function Ut(e) {
1494
+ return Lt(Rt(e));
1504
1495
  }
1505
1496
  //#endregion
1506
1497
  //#region src/modules/device/providers/linux.ts
1507
- function Jt(t) {
1498
+ function Wt(e) {
1508
1499
  try {
1509
- return e.existsSync(t) ? e.readFileSync(t, "utf-8").trim() : "";
1500
+ return b.existsSync(e) ? b.readFileSync(e, "utf-8").trim() : "";
1510
1501
  } catch {
1511
1502
  return "";
1512
1503
  }
1513
1504
  }
1514
- var Yt = class {
1505
+ var Gt = class {
1515
1506
  async ensureInitialized() {}
1516
1507
  getLinuxDeviceModel() {
1517
- return Jt("/sys/class/dmi/id/product_name") || Jt("/sys/class/dmi/id/board_name") || `${y.cpus()[0]?.model || "Linux PC"} (${y.arch()})`;
1508
+ return Wt("/sys/class/dmi/id/product_name") || Wt("/sys/class/dmi/id/board_name") || `${S.cpus()[0]?.model || "Linux PC"} (${S.arch()})`;
1518
1509
  }
1519
1510
  getLinuxDeviceName() {
1520
- return `${y.hostname()} (${this.getLinuxDeviceModel()})`;
1511
+ return `${S.hostname()} (${this.getLinuxDeviceModel()})`;
1521
1512
  }
1522
1513
  getDeviceName() {
1523
1514
  return this.getLinuxDeviceName();
@@ -1531,13 +1522,13 @@ var Yt = class {
1531
1522
  getDeviceType() {
1532
1523
  return "pc";
1533
1524
  }
1534
- }, Xt = class {
1525
+ }, Kt = class {
1535
1526
  async ensureInitialized() {}
1536
1527
  getMacOSDeviceModel() {
1537
- return `${y.cpus()[0]?.model || "Mac"} (${y.machine?.() || y.arch()})`;
1528
+ return `${S.cpus()[0]?.model || "Mac"} (${S.machine?.() || S.arch()})`;
1538
1529
  }
1539
1530
  getMacOSDeviceName() {
1540
- return `${y.hostname()} (${this.getMacOSDeviceModel()})`;
1531
+ return `${S.hostname()} (${this.getMacOSDeviceModel()})`;
1541
1532
  }
1542
1533
  getDeviceName() {
1543
1534
  return this.getMacOSDeviceName();
@@ -1551,7 +1542,7 @@ var Yt = class {
1551
1542
  getDeviceType() {
1552
1543
  return "pc";
1553
1544
  }
1554
- }, Zt = le(ce), Qt = class {
1545
+ }, qt = te(ee), Jt = class {
1555
1546
  cache = {
1556
1547
  brand: "",
1557
1548
  model: "",
@@ -1566,7 +1557,7 @@ var Yt = class {
1566
1557
  }
1567
1558
  async execAndroidCmd(e, t = 5e3) {
1568
1559
  try {
1569
- let { stdout: n } = await Zt("/system/bin/sh", ["-c", e], {
1560
+ let { stdout: n } = await qt("/system/bin/sh", ["-c", e], {
1570
1561
  timeout: t,
1571
1562
  encoding: "utf-8"
1572
1563
  });
@@ -1588,13 +1579,13 @@ var Yt = class {
1588
1579
  getAndroidDeviceModel() {
1589
1580
  if (this.cache.model) return this.cache.model;
1590
1581
  try {
1591
- let t = "/system/build.prop";
1592
- if (e.existsSync(t)) {
1593
- let n = e.readFileSync(t, "utf8").match(/ro\.product\.model=(.*)/);
1594
- if (n && n[1]) return n[1].trim();
1582
+ let e = "/system/build.prop";
1583
+ if (b.existsSync(e)) {
1584
+ let t = b.readFileSync(e, "utf8").match(/ro\.product\.model=(.*)/);
1585
+ if (t && t[1]) return t[1].trim();
1595
1586
  }
1596
1587
  } catch {}
1597
- return `Android(${y.arch()})`;
1588
+ return `Android(${S.arch()})`;
1598
1589
  }
1599
1590
  getAndroidDeviceName() {
1600
1591
  return this.getAndroidDeviceModel();
@@ -1617,7 +1608,7 @@ var Yt = class {
1617
1608
  function U(e, t, n) {
1618
1609
  return new Promise((r) => {
1619
1610
  try {
1620
- new b({
1611
+ new C({
1621
1612
  hive: e,
1622
1613
  key: t
1623
1614
  }).get(n, (e, t) => {
@@ -1628,10 +1619,10 @@ function U(e, t, n) {
1628
1619
  }
1629
1620
  });
1630
1621
  }
1631
- function $t(e, t) {
1622
+ function Yt(e, t) {
1632
1623
  return new Promise((n) => {
1633
1624
  try {
1634
- new b({
1625
+ new C({
1635
1626
  hive: e,
1636
1627
  key: t
1637
1628
  }).values((e) => {
@@ -1642,7 +1633,7 @@ function $t(e, t) {
1642
1633
  }
1643
1634
  });
1644
1635
  }
1645
- var en = class {
1636
+ var Xt = class {
1646
1637
  cache = { deviceBrand: "" };
1647
1638
  initPromise;
1648
1639
  constructor() {
@@ -1654,26 +1645,26 @@ var en = class {
1654
1645
  async _initializeCache() {
1655
1646
  try {
1656
1647
  let [e, t, n, r] = await Promise.all([
1657
- U(b.HKLM, "\\HARDWARE\\DESCRIPTION\\System", "SystemManufacturer"),
1658
- U(b.HKLM, "\\HARDWARE\\DESCRIPTION\\System", "SystemBiosVendor"),
1659
- U(b.HKLM, "\\HARDWARE\\DESCRIPTION\\System\\BIOS", "Vendor"),
1660
- U(b.HKLM, "\\HARDWARE\\DESCRIPTION\\System\\BIOS", "SystemManufacturer")
1648
+ U(C.HKLM, "\\HARDWARE\\DESCRIPTION\\System", "SystemManufacturer"),
1649
+ U(C.HKLM, "\\HARDWARE\\DESCRIPTION\\System", "SystemBiosVendor"),
1650
+ U(C.HKLM, "\\HARDWARE\\DESCRIPTION\\System\\BIOS", "Vendor"),
1651
+ U(C.HKLM, "\\HARDWARE\\DESCRIPTION\\System\\BIOS", "SystemManufacturer")
1661
1652
  ]);
1662
1653
  [
1663
1654
  e,
1664
1655
  t,
1665
1656
  n,
1666
1657
  r
1667
- ].find((e) => e && e.toLowerCase().includes("honor")) || await $t(b.HKLM, "\\SOFTWARE\\HONOR\\PCManager") ? this.cache.deviceBrand = "HONOR" : this.cache.deviceBrand = "";
1658
+ ].find((e) => e && e.toLowerCase().includes("honor")) || await Yt(C.HKLM, "\\SOFTWARE\\HONOR\\PCManager") ? this.cache.deviceBrand = "HONOR" : this.cache.deviceBrand = "";
1668
1659
  } catch {
1669
1660
  this.cache.deviceBrand = "";
1670
1661
  }
1671
1662
  }
1672
1663
  getWindowsDeviceModel() {
1673
- return `Windows ${y.release()}`;
1664
+ return `Windows ${S.release()}`;
1674
1665
  }
1675
1666
  getWindowsDeviceName() {
1676
- return `${y.hostname()} (${this.getWindowsDeviceModel()})`;
1667
+ return `${S.hostname()} (${this.getWindowsDeviceModel()})`;
1677
1668
  }
1678
1669
  getDeviceName() {
1679
1670
  return this.getWindowsDeviceName();
@@ -1690,33 +1681,33 @@ var en = class {
1690
1681
  };
1691
1682
  //#endregion
1692
1683
  //#region src/modules/device/providers/index.ts
1693
- function tn() {
1694
- let e = process.platform;
1695
- if (e === "win32") return "windows";
1696
- if (e === "linux") {
1684
+ function Zt() {
1685
+ let t = process.platform;
1686
+ if (t === "win32") return "windows";
1687
+ if (t === "linux") {
1697
1688
  try {
1698
- if (s.existsSync("/system/bin/getprop")) return "pad";
1689
+ if (e.existsSync("/system/bin/getprop")) return "pad";
1699
1690
  } catch {}
1700
1691
  return "linux";
1701
1692
  }
1702
- return e === "darwin" ? "macos" : "linux";
1693
+ return t === "darwin" ? "macos" : "linux";
1703
1694
  }
1704
- function nn() {
1705
- switch (tn()) {
1706
- case "pad": return new Qt();
1707
- case "windows": return new en();
1708
- case "linux": return new Yt();
1709
- case "macos": return new Xt();
1710
- default: return new Yt();
1695
+ function Qt() {
1696
+ switch (Zt()) {
1697
+ case "pad": return new Jt();
1698
+ case "windows": return new Xt();
1699
+ case "linux": return new Gt();
1700
+ case "macos": return new Kt();
1701
+ default: return new Gt();
1711
1702
  }
1712
1703
  }
1713
1704
  //#endregion
1714
1705
  //#region src/modules/device/device-info.ts
1715
1706
  async function W() {
1716
- let e = nn(), t = j();
1707
+ let e = Qt(), t = M();
1717
1708
  await e.ensureInitialized();
1718
- let n = await Gt(), r = n.legacyDeviceId ?? n.deviceId, i = ve(), a = t.getDeviceConfig();
1719
- D().debug?.(`[yoyoclaw-device] env: ${JSON.stringify(i)}, config: ${JSON.stringify(a)}`);
1709
+ let n = await Vt(), r = n.legacyDeviceId ?? n.deviceId, i = pe(), a = t.getDeviceConfig();
1710
+ O().debug?.(`[yoyoclaw-device] env: ${JSON.stringify(i)}, config: ${JSON.stringify(a)}`);
1720
1711
  let o = i.brand || a?.brand || e.getDeviceBrand() || "unknown", s = i.deviceType || a?.type || e.getDeviceType(), c = (i.manufacture || a?.manufacture || o).slice(0, 128), l = (a?.name || e.getDeviceName()).slice(0, 128), u = (a?.model || e.getDeviceModel()).slice(0, 128), d = {
1721
1712
  deviceId: r,
1722
1713
  deviceName: l,
@@ -1726,7 +1717,7 @@ async function W() {
1726
1717
  manufacture: c,
1727
1718
  port: t.getGatewayPort()
1728
1719
  }, f = i.brand || i.deviceType || i.manufacture ? "env" : "config";
1729
- D().info(`[yoyoclaw-device] device info: ${JSON.stringify(d)} (source: ${f})`);
1720
+ O().info(`[yoyoclaw-device] device info: ${JSON.stringify(d)} (source: ${f})`);
1730
1721
  let p = !!(i.brand && i.brand !== a?.brand || i.manufacture && i.manufacture !== a?.manufacture || i.deviceType && i.deviceType !== a?.type);
1731
1722
  if (!a || p) {
1732
1723
  let e = {
@@ -1737,27 +1728,27 @@ async function W() {
1737
1728
  model: u
1738
1729
  };
1739
1730
  t.updateDeviceConfig(e).catch((e) => {
1740
- D().warn(`[yoyoclaw-device] failed to persist device config: ${String(e)}`);
1731
+ O().warn(`[yoyoclaw-device] failed to persist device config: ${String(e)}`);
1741
1732
  });
1742
1733
  }
1743
1734
  return d;
1744
1735
  }
1745
1736
  //#endregion
1746
1737
  //#region src/modules/device/helpers.ts
1747
- function rn(e) {
1738
+ function $t(e) {
1748
1739
  return typeof e == "string" && e.trim() || "";
1749
1740
  }
1750
- function an(e) {
1741
+ function en(e) {
1751
1742
  return e.replace(/[A-Z]/g, (e) => String.fromCharCode(e.charCodeAt(0) + 32));
1752
1743
  }
1753
- function on(e) {
1754
- let t = rn(e);
1755
- return t ? an(t) : "";
1744
+ function tn(e) {
1745
+ let t = $t(e);
1746
+ return t ? en(t) : "";
1756
1747
  }
1757
1748
  //#endregion
1758
1749
  //#region src/modules/device/auth.ts
1759
- function sn(e) {
1760
- let t = e.scopes.join(","), n = e.token ?? "", r = on(e.platform), i = on(e.deviceFamily);
1750
+ function nn(e) {
1751
+ let t = e.scopes.join(","), n = e.token ?? "", r = tn(e.platform), i = tn(e.deviceFamily);
1761
1752
  return [
1762
1753
  "v3",
1763
1754
  e.deviceId,
@@ -1774,10 +1765,10 @@ function sn(e) {
1774
1765
  }
1775
1766
  //#endregion
1776
1767
  //#region src/modules/device/credential-builder.ts
1777
- function cn(e) {
1768
+ function rn(e) {
1778
1769
  let { deviceIdentity: t, clientName: n = "", clientMode: r = "cli", role: i = "operator", scopes: a = ["operator.admin"], platform: o = process.platform, deviceFamily: s, authToken: c = null, nonce: l, signedAtMs: u = Date.now() } = e;
1779
1770
  if (!t) return;
1780
- let d = sn({
1771
+ let d = nn({
1781
1772
  deviceId: t.deviceId,
1782
1773
  clientId: n,
1783
1774
  clientMode: r,
@@ -1788,10 +1779,10 @@ function cn(e) {
1788
1779
  nonce: l,
1789
1780
  platform: o,
1790
1781
  deviceFamily: s
1791
- }), f = Kt(t.privateKeyPem, d);
1782
+ }), f = Ht(t.privateKeyPem, d);
1792
1783
  return {
1793
1784
  id: t.deviceId,
1794
- publicKey: qt(t.publicKeyPem),
1785
+ publicKey: Ut(t.publicKeyPem),
1795
1786
  signature: f,
1796
1787
  signedAt: u,
1797
1788
  nonce: l
@@ -1799,15 +1790,15 @@ function cn(e) {
1799
1790
  }
1800
1791
  //#endregion
1801
1792
  //#region src/honor-auth/token-manager.ts
1802
- async function ln(e, t = !0) {
1793
+ async function an(e, t = !0) {
1803
1794
  try {
1804
- let n = j(), r = e.jwtToken;
1795
+ let n = M(), r = e.jwtToken;
1805
1796
  if (!r && e.userId) {
1806
1797
  let t = e.deviceInfo || await W();
1807
- r = (await N().exchangeToken(t, { userId: e.userId })).jwtToken;
1798
+ r = (await P().exchangeToken(t, { userId: e.userId })).jwtToken;
1808
1799
  }
1809
1800
  if (!r) throw Error("no token available");
1810
- if (!t) return D().info("💾 token got, but not to save"), { token: r };
1801
+ if (!t) return O().info("💾 token got, but not to save"), { token: r };
1811
1802
  let i = Math.floor(Date.now() / 1e3) + 720 * 60 * 60;
1812
1803
  return await n.updateUserConfig({
1813
1804
  token: r,
@@ -1815,53 +1806,53 @@ async function ln(e, t = !0) {
1815
1806
  expired: i
1816
1807
  }), { token: r };
1817
1808
  } catch (e) {
1818
- throw E(e, "保存Token失败");
1809
+ throw D(e, "保存Token失败");
1819
1810
  }
1820
1811
  }
1821
- async function un(e) {
1822
- let t = await W(), n = await N().exchangeToken(t, { userId: e });
1812
+ async function on(e) {
1813
+ let t = await W(), n = await P().exchangeToken(t, { userId: e });
1823
1814
  if (n.jwtToken) {
1824
1815
  let e = Math.floor(Date.now() / 1e3) + 720 * 60 * 60;
1825
- return await j().updateUserConfig({
1816
+ return await M().updateUserConfig({
1826
1817
  token: n.jwtToken,
1827
1818
  userId: void 0,
1828
1819
  userName: void 0,
1829
1820
  expired: e
1830
1821
  }), { token: n.jwtToken };
1831
1822
  }
1832
- return await j().clearUserConfig(), null;
1823
+ return await M().clearUserConfig(), null;
1833
1824
  }
1834
- async function dn() {
1835
- let e = D();
1825
+ async function sn() {
1826
+ let e = O();
1836
1827
  try {
1837
- let t = j(), n = t.getUserConfig(), r = ye();
1838
- if (e.debug?.(`[yoyoclaw-auth] env userId: ${r ? "present" : "absent"}, config userId: ${n?.userId ? "present" : "absent"}, config token: ${n?.token ? "present" : "absent"}`), n?.userId) return await un(r || n.userId);
1828
+ let t = M(), n = t.getUserConfig(), r = me();
1829
+ if (e.debug?.(`[yoyoclaw-auth] env userId: ${r ? "present" : "absent"}, config userId: ${n?.userId ? "present" : "absent"}, config token: ${n?.token ? "present" : "absent"}`), n?.userId) return await on(r || n.userId);
1839
1830
  if (n?.token) {
1840
1831
  if (!n.expired || n.expired >= Math.floor(Date.now() / 1e3)) return { token: n.token };
1841
1832
  e.debug?.("[yoyoclaw-auth] cached token expired");
1842
1833
  }
1843
- return r ? (e.debug?.("[yoyoclaw-auth] token expired, using env userId to exchange token"), await un(r)) : (n?.token && (e.debug?.("[yoyoclaw-auth] clearing expired token"), await t.clearUserConfig()), null);
1834
+ return r ? (e.debug?.("[yoyoclaw-auth] token expired, using env userId to exchange token"), await on(r)) : (n?.token && (e.debug?.("[yoyoclaw-auth] clearing expired token"), await t.clearUserConfig()), null);
1844
1835
  } catch (e) {
1845
- throw E(e, "加载Token失败");
1836
+ throw D(e, "加载Token失败");
1846
1837
  }
1847
1838
  }
1848
- async function fn() {
1839
+ async function cn() {
1849
1840
  try {
1850
- await j().clearUserConfig(), D().info("[yoyoclaw-auth] token cleared");
1841
+ await M().clearUserConfig(), O().info("[yoyoclaw-auth] token cleared");
1851
1842
  } catch (e) {
1852
- throw E(e, "清除Token失败");
1843
+ throw D(e, "清除Token失败");
1853
1844
  }
1854
1845
  }
1855
1846
  //#endregion
1856
1847
  //#region src/honor-auth/browser.ts
1857
- async function pn(e, t) {
1858
- let n = it(t);
1859
- D().debug?.("Starting Honor login flow...");
1860
- let r = ot(n), i = r.generatePKCEParams(), a = r.buildAuthUrl(i), o = null, s = tt({
1848
+ async function ln(e, t) {
1849
+ let n = $e(t);
1850
+ O().debug?.("Starting Honor login flow...");
1851
+ let r = tt(n), a = r.generatePKCEParams(), o = r.buildAuthUrl(a), s = null, c = Xe({
1861
1852
  port: n.localPort,
1862
1853
  timeout: 6e5,
1863
1854
  onCodeReceived: (e) => {
1864
- o = e;
1855
+ s = e;
1865
1856
  },
1866
1857
  onError: (e) => {
1867
1858
  console.error("callback server error:", e);
@@ -1869,47 +1860,47 @@ async function pn(e, t) {
1869
1860
  });
1870
1861
  console.log("🌐 open browser...");
1871
1862
  try {
1872
- await d(a);
1863
+ await i(o);
1873
1864
  } catch (e) {
1874
- throw E(e, "failed to open browser, check your permissions");
1865
+ throw D(e, "failed to open browser, check your permissions");
1875
1866
  }
1876
1867
  try {
1877
- await s;
1868
+ await c;
1878
1869
  } catch (e) {
1879
- throw E(e, "authorization timeout");
1870
+ throw D(e, "authorization timeout");
1880
1871
  }
1881
- if (!o) throw Error("no auth code");
1872
+ if (!s) throw Error("no auth code");
1882
1873
  try {
1883
- let t = await N().exchangeToken(e, {
1884
- code: o,
1874
+ let t = await P().exchangeToken(e, {
1875
+ code: s,
1885
1876
  authConfig: n
1886
1877
  });
1887
1878
  if (!t?.jwtToken) throw Error("failed to get jwt token");
1888
- return await ln({ jwtToken: t.jwtToken }, n.saveToFile !== !1), { token: t.jwtToken };
1879
+ return await an({ jwtToken: t.jwtToken }, n.saveToFile !== !1), { token: t.jwtToken };
1889
1880
  } catch (e) {
1890
- throw E(e, "get token failed");
1881
+ throw D(e, "get token failed");
1891
1882
  }
1892
1883
  }
1893
1884
  //#endregion
1894
1885
  //#region src/honor-auth/cloud.ts
1895
- async function mn() {
1896
- let e = j().getUserConfig();
1886
+ async function un() {
1887
+ let e = M().getUserConfig();
1897
1888
  if (!e?.token) throw Error("⚠️ Not logged in");
1898
- let t = await W(), n = N(), r = { token: e.token }, i = await n.logoutDevice(t, r);
1899
- if (!Be(i)) throw Error(i.data?.cnMessage || "Unknown error");
1900
- await fn();
1889
+ let t = await W(), n = P(), r = { token: e.token }, i = await n.logoutDevice(t, r);
1890
+ if (!Fe(i)) throw Error(i.data?.cnMessage || "Unknown error");
1891
+ await cn();
1901
1892
  }
1902
1893
  //#endregion
1903
1894
  //#region src/modules/login/impl.ts
1904
- async function hn(e = {}) {
1905
- let { userId: t } = e, n = D();
1895
+ async function dn(e = {}) {
1896
+ let { userId: t } = e, n = O();
1906
1897
  try {
1907
1898
  n.debug?.("Starting login process...");
1908
1899
  let e = await W(), r;
1909
- t ? (r = await ln({
1900
+ t ? (r = await an({
1910
1901
  userId: t,
1911
1902
  deviceInfo: e
1912
- }), n.debug?.("Using provided user info"), n.debug?.(`User: ${t}`), n.debug?.(`Device ID: ${e?.deviceId}`)) : (n.debug?.("Starting OAuth2 authentication..."), r = await pn(e), n.debug?.("OAuth2 authentication successful"), n.debug?.(`Device ID: ${e?.deviceId}`)), console.log("📡 Registering device to Claw Cloud..."), await Bt(e, r), console.log("✅ Device registered successfully"), console.log("🔗 Channel connection in progress, use 'openclaw honor status' to check device status");
1903
+ }), n.debug?.("Using provided user info"), n.debug?.(`User: ${t}`), n.debug?.(`Device ID: ${e?.deviceId}`)) : (n.debug?.("Starting OAuth2 authentication..."), r = await ln(e), n.debug?.("OAuth2 authentication successful"), n.debug?.(`Device ID: ${e?.deviceId}`)), console.log("📡 Registering device to Claw Cloud..."), await It(e, r), console.log("✅ Device registered successfully"), console.log("🔗 Channel connection in progress, use 'openclaw honor status' to check device status");
1913
1904
  } catch (e) {
1914
1905
  let t = e instanceof Error ? e.message : String(e);
1915
1906
  console.error("❌ Login process failed:", t);
@@ -1917,11 +1908,11 @@ async function hn(e = {}) {
1917
1908
  }
1918
1909
  //#endregion
1919
1910
  //#region src/commands/login/impl.ts
1920
- function gn(e, t) {
1911
+ function fn(e, t) {
1921
1912
  let n = t.command("login").description("login to yoyoclaw and register devices");
1922
1913
  return n = n.option("-u, --uid <userId>", "user ID for direct login").option("--token <token>", "token for direct login").action(async (t) => {
1923
1914
  let { uid: n, token: r } = t;
1924
- e.logger.debug?.("honor login CLI command called"), await hn({
1915
+ e.logger.debug?.("honor login CLI command called"), await dn({
1925
1916
  userId: n,
1926
1917
  token: r
1927
1918
  });
@@ -1929,11 +1920,11 @@ function gn(e, t) {
1929
1920
  }
1930
1921
  //#endregion
1931
1922
  //#region src/commands/logout/impl.ts
1932
- function _n(e, t) {
1923
+ function pn(e, t) {
1933
1924
  return t.command("logout").description("Logout and clear user configuration").action(async () => {
1934
1925
  e.logger.info("logout CLI command called");
1935
1926
  try {
1936
- await mn(), console.log("✅ Logout successful, gateway will automatically restart to handle new configuration");
1927
+ await un(), console.log("✅ Logout successful, gateway will automatically restart to handle new configuration");
1937
1928
  } catch (e) {
1938
1929
  let t = e instanceof Error ? e.message : String(e);
1939
1930
  console.error("❌ Logout failed:", t);
@@ -1944,26 +1935,26 @@ function _n(e, t) {
1944
1935
  //#region src/services/connection/status-tracker/events.ts
1945
1936
  var G = /* @__PURE__ */ function(e) {
1946
1937
  return e.CLOUD_SOCKET_CONNECTING = "cloud_socket_connecting", e.CLOUD_SOCKET_CONNECTED = "cloud_socket_connected", e.CLOUD_SOCKET_DISCONNECTED = "cloud_socket_disconnected", e.CLOUD_SOCKET_ERROR = "cloud_socket_error", e.CLOUD_SOCKET_RETRY = "cloud_socket_retry", e.GATEWAY_CLIENT_CONNECTED = "gateway_client_connected", e.GATEWAY_CLIENT_DISCONNECTED = "gateway_client_disconnected", e.ADMIN_CLIENT_RECONNECT_FAILED = "admin_client_reconnect_failed", e.DEVICE_PAIRING = "device_pairing", e.DEVICE_UNPAIRING = "device_unpairing", e.CONNECTION_STATUS_CHANGED = "connection_status_changed", e;
1947
- }({}), vn = class {
1938
+ }({}), mn = class {
1948
1939
  statusFilePath;
1949
1940
  statusDir;
1950
1941
  constructor() {
1951
- let e = Dt();
1952
- this.statusDir = r.join(e, ".yoyo-cache"), this.statusFilePath = r.join(this.statusDir, "yoyo-status.json");
1942
+ let e = Ct();
1943
+ this.statusDir = ne.join(e, ".yoyo-cache"), this.statusFilePath = ne.join(this.statusDir, "yoyo-status.json");
1953
1944
  }
1954
1945
  async save(e) {
1955
1946
  try {
1956
- await t.mkdir(this.statusDir, { recursive: !0 });
1957
- let n = JSON.stringify(e, null, 2);
1958
- await t.writeFile(this.statusFilePath, n, "utf-8");
1947
+ await x.mkdir(this.statusDir, { recursive: !0 });
1948
+ let t = JSON.stringify(e, null, 2);
1949
+ await x.writeFile(this.statusFilePath, t, "utf-8");
1959
1950
  } catch (e) {
1960
1951
  throw console.error(`[StatusStorage] Failed to save status: ${e instanceof Error ? e.message : String(e)}`), e;
1961
1952
  }
1962
1953
  }
1963
1954
  async load() {
1964
1955
  try {
1965
- await t.access(this.statusFilePath);
1966
- let e = await t.readFile(this.statusFilePath, "utf-8");
1956
+ await x.access(this.statusFilePath);
1957
+ let e = await x.readFile(this.statusFilePath, "utf-8");
1967
1958
  return JSON.parse(e);
1968
1959
  } catch (e) {
1969
1960
  return e.code === "ENOENT" || console.error(`[StatusStorage] Failed to load status: ${e instanceof Error ? e.message : String(e)}`), null;
@@ -1971,7 +1962,7 @@ var G = /* @__PURE__ */ function(e) {
1971
1962
  }
1972
1963
  async clear() {
1973
1964
  try {
1974
- await t.unlink(this.statusFilePath);
1965
+ await x.unlink(this.statusFilePath);
1975
1966
  } catch (e) {
1976
1967
  if (e.code !== "ENOENT") throw console.error(`[StatusStorage] Failed to clear status: ${e instanceof Error ? e.message : String(e)}`), e;
1977
1968
  }
@@ -1981,7 +1972,7 @@ var G = /* @__PURE__ */ function(e) {
1981
1972
  }
1982
1973
  async exists() {
1983
1974
  try {
1984
- return await t.access(this.statusFilePath), !0;
1975
+ return await x.access(this.statusFilePath), !0;
1985
1976
  } catch {
1986
1977
  return !1;
1987
1978
  }
@@ -1989,7 +1980,7 @@ var G = /* @__PURE__ */ function(e) {
1989
1980
  };
1990
1981
  //#endregion
1991
1982
  //#region src/services/connection/status-tracker/types.ts
1992
- function yn() {
1983
+ function hn() {
1993
1984
  return {
1994
1985
  status: "idle",
1995
1986
  updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
@@ -2024,13 +2015,13 @@ function yn() {
2024
2015
  }
2025
2016
  //#endregion
2026
2017
  //#region src/services/connection/status-tracker/tracker.ts
2027
- var bn = class {
2018
+ var gn = class {
2028
2019
  currentStatus;
2029
2020
  storage;
2030
2021
  autoSave;
2031
2022
  saveTimer;
2032
2023
  constructor(e = !0) {
2033
- this.currentStatus = yn(), this.storage = new vn(), this.autoSave = e, this.saveTimer = null;
2024
+ this.currentStatus = hn(), this.storage = new mn(), this.autoSave = e, this.saveTimer = null;
2034
2025
  }
2035
2026
  async handleEvent(e) {
2036
2027
  let { type: t, timestamp: n, data: r } = e;
@@ -2081,7 +2072,7 @@ var bn = class {
2081
2072
  let e = await this.storage.load();
2082
2073
  if (e) {
2083
2074
  let t = e.cloudSocket, n = e.history;
2084
- this.currentStatus = yn(), this.currentStatus.cloudSocket = t, this.currentStatus.history = n, this.currentStatus.cloudSocket.connected = !1, this.currentStatus.cloudSocket.readyState = 3, await this.saveStatus();
2075
+ this.currentStatus = hn(), this.currentStatus.cloudSocket = t, this.currentStatus.history = n, this.currentStatus.cloudSocket.connected = !1, this.currentStatus.cloudSocket.readyState = 3, await this.saveStatus();
2085
2076
  }
2086
2077
  return this.getStatus();
2087
2078
  }
@@ -2089,7 +2080,7 @@ var bn = class {
2089
2080
  await this.storage.save(this.currentStatus);
2090
2081
  }
2091
2082
  async clearStatus() {
2092
- this.currentStatus = yn(), await this.storage.clear();
2083
+ this.currentStatus = hn(), await this.storage.clear();
2093
2084
  }
2094
2085
  handleCloudSocketConnecting(e, t) {
2095
2086
  this.currentStatus.cloudSocket.url = e.url || "", this.currentStatus.cloudSocket.connected = !1;
@@ -2162,21 +2153,21 @@ var bn = class {
2162
2153
  };
2163
2154
  //#endregion
2164
2155
  //#region src/commands/status/index.ts
2165
- function xn(e, t) {
2156
+ function _n(e, t) {
2166
2157
  return t.command("status").description("Show YOYOClaw connection status").action(async () => {
2167
- if (e.logger.debug?.("YOYOClaw status CLI command called"), !await dn()) {
2158
+ if (e.logger.debug?.("YOYOClaw status CLI command called"), !await sn()) {
2168
2159
  console.log("❌ You need to login first. Please run: openclaw honor login");
2169
2160
  return;
2170
2161
  }
2171
- let t = await new vn().load(), n = null;
2162
+ let t = await new mn().load(), n = null;
2172
2163
  try {
2173
2164
  n = await W();
2174
2165
  } catch {}
2175
- let r = j().getEnvInfo();
2176
- Sn(t, n, r);
2166
+ let r = M().getEnvInfo();
2167
+ vn(t, n, r);
2177
2168
  });
2178
2169
  }
2179
- function Sn(e, t, n) {
2170
+ function vn(e, t, n) {
2180
2171
  if (!e) {
2181
2172
  console.log("\n❌ No status data available");
2182
2173
  return;
@@ -2186,7 +2177,7 @@ function Sn(e, t, n) {
2186
2177
  if (console.log(` Status: ${i} ${r.connected ? "Connected" : "Disconnected"}`), r.connectedAt && console.log(` Connected at: ${K(r.connectedAt)}`), r.lastDisconnectedAt && console.log(` Last disconnected: ${K(r.lastDisconnectedAt)}`), console.log(` Retry count: ${r.retryCount}`), console.log(` Last error: ${r.lastError || "None"}`), console.log("\n🌐 Gateway Connections:"), console.log(` Total connections: ${e.gateway.totalConnections}`), console.log(` Active connections: ${e.gateway.activeConnections}`), e.gateway.connections.length > 0) {
2187
2178
  console.log(" ┌────────────────────────────┬────────────────────────────┬────────────┐"), console.log(" │ Session ID │ Hardware Device ID │ Connected │"), console.log(" ├────────────────────────────┼────────────────────────────┼────────────┤");
2188
2179
  for (let t of e.gateway.connections) {
2189
- let e = wn(t.sessionId, 26), n = wn(t.hardwareDeviceId, 26), r = Cn(t.connectedAt);
2180
+ let e = bn(t.sessionId, 26), n = bn(t.hardwareDeviceId, 26), r = yn(t.connectedAt);
2190
2181
  console.log(` │ ${e.padEnd(28)}│ ${n.padEnd(28)}│ ${r.padEnd(12)}│`);
2191
2182
  }
2192
2183
  console.log(" └────────────────────────────┴────────────────────────────┴────────────┘");
@@ -2194,7 +2185,7 @@ function Sn(e, t, n) {
2194
2185
  if (console.log("\n📱 Physical Devices:"), console.log(` Unique devices: ${e.devices.uniqueHardwareDevices}`), e.devices.devices.length > 0) {
2195
2186
  console.log(" ┌────────────────────────────┬─────────┬────────────┐"), console.log(" │ Hardware Device ID │ Sessions │ Last Active│"), console.log(" ├────────────────────────────┼─────────┼────────────┤");
2196
2187
  for (let t of e.devices.devices) {
2197
- let e = wn(t.hardwareDeviceId, 26), n = String(t.sessions).padEnd(9), r = Cn(t.lastActiveAt);
2188
+ let e = bn(t.hardwareDeviceId, 26), n = String(t.sessions).padEnd(9), r = yn(t.lastActiveAt);
2198
2189
  console.log(` │ ${e.padEnd(28)}│ ${n}│ ${r.padEnd(12)}│`);
2199
2190
  }
2200
2191
  console.log(" └────────────────────────────┴─────────┴────────────┘");
@@ -2205,60 +2196,60 @@ function K(e) {
2205
2196
  let t = new Date(e);
2206
2197
  return `${t.getFullYear()}-${String(t.getMonth() + 1).padStart(2, "0")}-${String(t.getDate()).padStart(2, "0")} ${String(t.getHours()).padStart(2, "0")}:${String(t.getMinutes()).padStart(2, "0")}:${String(t.getSeconds()).padStart(2, "0")}`;
2207
2198
  }
2208
- function Cn(e) {
2199
+ function yn(e) {
2209
2200
  let t = new Date(e);
2210
2201
  return `${String(t.getHours()).padStart(2, "0")}:${String(t.getMinutes()).padStart(2, "0")}:${String(t.getSeconds()).padStart(2, "0")}`;
2211
2202
  }
2212
- function wn(e, t) {
2203
+ function bn(e, t) {
2213
2204
  return e.length <= t ? e : e.substring(0, t - 3) + "...";
2214
2205
  }
2215
2206
  //#endregion
2216
2207
  //#region src/commands/index.ts
2217
- function Tn(e) {
2208
+ function xn(e) {
2218
2209
  e.registerCli((t) => {
2219
2210
  let n = t.program.command("honor").description("Commands for honor yoyoclaw");
2220
- gn(e, n), xn(e, n), _n(e, n), de() && Re(e, n);
2211
+ fn(e, n), _n(e, n), pn(e, n), oe() && Ne(e, n);
2221
2212
  }, { commands: ["honor"] });
2222
2213
  }
2223
2214
  //#endregion
2224
2215
  //#region src/modules/prompt/index.ts
2225
- var En = " ## 手机控制规则\n\n - 涉及手机控制的任务时,必须强制调用 yoyo_phone_control 技能完成任务。\n - 手机是可直接操控的设备,你的职责是执行操作,而不是向用户解释如何操作。 \n - 多步骤任务需**按顺序多次调用**,不得合并。 \n", Dn = x.object({
2226
- token: x.string().optional(),
2227
- expired: x.number().optional(),
2228
- userId: x.string().optional(),
2229
- userName: x.string().optional()
2230
- }), On = x.object({
2231
- type: x.string().optional(),
2232
- manufacture: x.string().optional(),
2233
- brand: x.string().optional(),
2234
- name: x.string().optional(),
2235
- model: x.string().optional()
2236
- }), kn = x.object({
2237
- user: Dn.optional(),
2238
- device: On.optional(),
2239
- envInfo: x.object({
2240
- env: x.enum([
2216
+ var Sn = " ## 手机控制规则\n\n - 涉及手机控制的任务时,必须强制调用 yoyo_phone_control 技能完成任务。\n - 手机是可直接操控的设备,你的职责是执行操作,而不是向用户解释如何操作。 \n - 多步骤任务需**按顺序多次调用**,不得合并。 \n", Cn = w.object({
2217
+ token: w.string().optional(),
2218
+ expired: w.number().optional(),
2219
+ userId: w.string().optional(),
2220
+ userName: w.string().optional()
2221
+ }), wn = w.object({
2222
+ type: w.string().optional(),
2223
+ manufacture: w.string().optional(),
2224
+ brand: w.string().optional(),
2225
+ name: w.string().optional(),
2226
+ model: w.string().optional()
2227
+ }), Tn = w.object({
2228
+ user: Cn.optional(),
2229
+ device: wn.optional(),
2230
+ envInfo: w.object({
2231
+ env: w.enum([
2241
2232
  "dev",
2242
2233
  "test",
2243
2234
  "production"
2244
2235
  ]),
2245
- source: x.enum(["env", "manual"])
2236
+ source: w.enum(["env", "manual"])
2246
2237
  }).optional(),
2247
- env: x.enum([
2238
+ env: w.enum([
2248
2239
  "dev",
2249
2240
  "test",
2250
2241
  "production"
2251
2242
  ]).optional(),
2252
- gray: x.string().optional()
2243
+ gray: w.string().optional()
2253
2244
  });
2254
2245
  //#endregion
2255
2246
  //#region src/utils/ws.ts
2256
- function An(e, t = "utf8") {
2257
- return typeof e == "string" ? e : C.isBuffer(e) ? e.toString(t) : Array.isArray(e) ? C.concat(e).toString(t) : e instanceof ArrayBuffer ? C.from(e).toString(t) : C.from(String(e)).toString(t);
2247
+ function En(e, t = "utf8") {
2248
+ return typeof e == "string" ? e : ie.isBuffer(e) ? e.toString(t) : Array.isArray(e) ? ie.concat(e).toString(t) : e instanceof ArrayBuffer ? ie.from(e).toString(t) : ie.from(String(e)).toString(t);
2258
2249
  }
2259
2250
  //#endregion
2260
2251
  //#region src/gateway-client/client.ts
2261
- var jn = class {
2252
+ var Dn = class {
2262
2253
  ws = null;
2263
2254
  opts;
2264
2255
  closed = !1;
@@ -2266,21 +2257,21 @@ var jn = class {
2266
2257
  this.opts = e;
2267
2258
  }
2268
2259
  getUrl() {
2269
- return `ws://127.0.0.1:${j().getGatewayPort()}`;
2260
+ return `ws://127.0.0.1:${M().getGatewayPort()}`;
2270
2261
  }
2271
2262
  isConnected() {
2272
- return this.ws !== null && this.ws.readyState === ue.OPEN;
2263
+ return this.ws !== null && this.ws.readyState === re.OPEN;
2273
2264
  }
2274
2265
  connect() {
2275
2266
  if (this.closed) return;
2276
2267
  let e = this.getUrl();
2277
- this.ws = new ue(e, { maxPayload: 25 * 1024 * 1024 }), this.ws.on("open", () => {
2268
+ this.ws = new re(e, { maxPayload: 25 * 1024 * 1024 }), this.ws.on("open", () => {
2278
2269
  this.opts.onOpen?.(), this.onOpen();
2279
2270
  }), this.ws.on("message", async (e) => {
2280
- let t = An(e);
2271
+ let t = En(e);
2281
2272
  await this.opts.onMessage?.(t), await this.onMessage(t);
2282
2273
  }), this.ws.on("close", (e, t) => {
2283
- let n = An(t);
2274
+ let n = En(t);
2284
2275
  this.ws = null, this.onClose(e, n), this.opts.onClose?.(`code: ${e}, reason: ${n ?? ""}`);
2285
2276
  }), this.ws.on("error", (e) => {
2286
2277
  this.onError(e), this.opts.onClose?.(`socket error: ${e.message}`);
@@ -2290,14 +2281,14 @@ var jn = class {
2290
2281
  this.closed = !0, this.ws?.close(), this.ws = null;
2291
2282
  }
2292
2283
  send(e) {
2293
- if (!this.ws || this.ws.readyState !== ue.OPEN) throw Error("gateway not connected");
2284
+ if (!this.ws || this.ws.readyState !== re.OPEN) throw Error("gateway not connected");
2294
2285
  this.ws.send(e);
2295
2286
  }
2296
2287
  onOpen() {}
2297
2288
  onMessage(e) {}
2298
2289
  onClose(e, t) {}
2299
2290
  onError(e) {}
2300
- }, Mn = {
2291
+ }, On = {
2301
2292
  WEBCHAT_UI: "webchat-ui",
2302
2293
  CONTROL_UI: "openclaw-control-ui",
2303
2294
  WEBCHAT: "webchat",
@@ -2309,7 +2300,7 @@ var jn = class {
2309
2300
  NODE_HOST: "node-host",
2310
2301
  FINGERPRINT: "fingerprint",
2311
2302
  PROBE: "openclaw-probe"
2312
- }, Nn = {
2303
+ }, kn = {
2313
2304
  WEBCHAT: "webchat",
2314
2305
  CLI: "cli",
2315
2306
  UI: "ui",
@@ -2325,13 +2316,13 @@ var jn = class {
2325
2316
  constructor(e, t, n, r) {
2326
2317
  super(t), this.name = "WebSocketClientError", this.code = e, this.details = n, this.retryable = r;
2327
2318
  }
2328
- }, Pn = {
2319
+ }, An = {
2329
2320
  role: "operator",
2330
2321
  scopes: [],
2331
- clientId: Mn.CLI,
2322
+ clientId: On.CLI,
2332
2323
  displayName: "Protocol Client",
2333
- clientMode: Nn.CLI
2334
- }, Fn = 3e4, In = "1.0.0", Ln = "server", Rn = 2, zn = 1e3, Bn = class extends jn {
2324
+ clientMode: kn.CLI
2325
+ }, jn = 3e4, Mn = "1.0.0", Nn = "server", Pn = 2, Fn = 1e3, In = class extends Dn {
2335
2326
  protocolOpts;
2336
2327
  config;
2337
2328
  pendingRequests = /* @__PURE__ */ new Map();
@@ -2347,7 +2338,7 @@ var jn = class {
2347
2338
  isReconnecting = !1;
2348
2339
  constructor(e = {}, t = {}) {
2349
2340
  super(e), this.protocolOpts = e, this.config = {
2350
- ...Pn,
2341
+ ...An,
2351
2342
  ...t
2352
2343
  }, this.debug = process.env.DEBUG_GATEWAY === "true";
2353
2344
  }
@@ -2373,7 +2364,7 @@ var jn = class {
2373
2364
  handleEvent(e) {
2374
2365
  if (e.event === "connect.challenge") {
2375
2366
  let t = e.payload;
2376
- t?.nonce ? (this.connectNonce = t.nonce, this.clearConnectNonceTimer(), this.sendConnect()) : D().error("[protocol-gateway] connect challenge missing nonce");
2367
+ t?.nonce ? (this.connectNonce = t.nonce, this.clearConnectNonceTimer(), this.sendConnect()) : O().error("[protocol-gateway] connect challenge missing nonce");
2377
2368
  }
2378
2369
  }
2379
2370
  clearConnectNonceTimer() {
@@ -2394,7 +2385,7 @@ var jn = class {
2394
2385
  }
2395
2386
  }
2396
2387
  async sendConnect() {
2397
- let e = this.config.clientMode ?? Nn.CLI, t = await Gt(), n = this.connectNonce ? cn({
2388
+ let e = this.config.clientMode ?? kn.CLI, t = await Vt(), n = this.connectNonce ? rn({
2398
2389
  deviceIdentity: t,
2399
2390
  clientName: this.config.clientId,
2400
2391
  clientMode: e,
@@ -2403,16 +2394,16 @@ var jn = class {
2403
2394
  authToken: this.protocolOpts.token,
2404
2395
  nonce: this.connectNonce,
2405
2396
  platform: process.platform,
2406
- deviceFamily: Ln
2397
+ deviceFamily: Nn
2407
2398
  }) : void 0, r = {
2408
2399
  minProtocol: 3,
2409
2400
  maxProtocol: 3,
2410
2401
  client: {
2411
2402
  id: this.config.clientId,
2412
2403
  displayName: this.config.displayName,
2413
- version: In,
2404
+ version: Mn,
2414
2405
  platform: process.platform,
2415
- deviceFamily: Ln,
2406
+ deviceFamily: Nn,
2416
2407
  mode: e
2417
2408
  },
2418
2409
  role: this.config.role,
@@ -2427,7 +2418,7 @@ var jn = class {
2427
2418
  });
2428
2419
  }
2429
2420
  async sendRequest(e, t) {
2430
- let n = oe();
2421
+ let n = _();
2431
2422
  return this.logDebug("request", {
2432
2423
  id: n,
2433
2424
  method: e,
@@ -2455,7 +2446,7 @@ var jn = class {
2455
2446
  let t = this.pendingTimers.get(n);
2456
2447
  t && clearTimeout(t), this.pendingTimers.delete(n), i(new J(q.TIMEOUT, `Request timeout: ${e}`));
2457
2448
  }
2458
- }, Fn);
2449
+ }, jn);
2459
2450
  this.pendingTimers.set(n, o);
2460
2451
  });
2461
2452
  }
@@ -2477,7 +2468,7 @@ var jn = class {
2477
2468
  this.pendingTimers.clear(), this.pendingRequests.clear();
2478
2469
  }
2479
2470
  logDebug(e, t) {
2480
- this.debug && D().info(`[yoyoclaw-protocolGatewayClient:${e}] ${JSON.stringify(t)}`);
2471
+ this.debug && O().info(`[yoyoclaw-protocolGatewayClient:${e}] ${JSON.stringify(t)}`);
2481
2472
  }
2482
2473
  connect() {
2483
2474
  this.closed || (this.isReconnecting = !1, super.connect());
@@ -2487,16 +2478,16 @@ var jn = class {
2487
2478
  }
2488
2479
  scheduleReconnect() {
2489
2480
  if (!(this.closed || this.isReconnecting)) {
2490
- if (this.reconnectAttempts >= Rn) {
2491
- D().error(`[protocol-gateway] max reconnect attempts (${Rn}) reached, giving up`), this.protocolOpts.onReconnectFailed?.();
2481
+ if (this.reconnectAttempts >= Pn) {
2482
+ O().error(`[protocol-gateway] max reconnect attempts (${Pn}) reached, giving up`), this.protocolOpts.onReconnectFailed?.();
2492
2483
  return;
2493
2484
  }
2494
- this.reconnectAttempts++, this.isReconnecting = !0, D().info(`[protocol-gateway] attempting to reconnect (attempt ${this.reconnectAttempts}/${Rn})`), this.reconnectTimer = setTimeout(() => {
2485
+ this.reconnectAttempts++, this.isReconnecting = !0, O().info(`[protocol-gateway] attempting to reconnect (attempt ${this.reconnectAttempts}/${Pn})`), this.reconnectTimer = setTimeout(() => {
2495
2486
  this.isReconnecting = !1, this.closed || super.connect();
2496
- }, zn);
2487
+ }, Fn);
2497
2488
  }
2498
2489
  }
2499
- }, Vn = {
2490
+ }, Ln = {
2500
2491
  role: "operator",
2501
2492
  scopes: [
2502
2493
  "operator.admin",
@@ -2506,12 +2497,12 @@ var jn = class {
2506
2497
  "operator.approvals",
2507
2498
  "operator.pairing"
2508
2499
  ],
2509
- clientId: Mn.CLI,
2500
+ clientId: On.CLI,
2510
2501
  displayName: "YOYO-Control",
2511
- clientMode: Nn.BACKEND
2512
- }, Hn = class extends Bn {
2502
+ clientMode: kn.BACKEND
2503
+ }, Rn = class extends In {
2513
2504
  constructor(e = {}) {
2514
- super(e, Vn);
2505
+ super(e, Ln);
2515
2506
  }
2516
2507
  async setAgentFile(e, t, n = "main") {
2517
2508
  return this.sendRequest("agents.files.set", {
@@ -2544,7 +2535,7 @@ var jn = class {
2544
2535
  async devicePairApprove(e) {
2545
2536
  return this.sendRequest("device.pair.approve", { requestId: e });
2546
2537
  }
2547
- }, Un = class {
2538
+ }, zn = class {
2548
2539
  client = null;
2549
2540
  ready = !1;
2550
2541
  options;
@@ -2555,17 +2546,17 @@ var jn = class {
2555
2546
  }
2556
2547
  init() {
2557
2548
  if (this.client !== null) return;
2558
- let e = j().getGatewayAuthConfig()?.token || "";
2559
- this.client = new Hn({
2549
+ let e = M().getGatewayAuthConfig()?.token || "";
2550
+ this.client = new Rn({
2560
2551
  token: e,
2561
2552
  onAuthenticated: () => {
2562
- D().info("[yoyoclaw-channel] admin gateway client authenticated"), this.ready = !0, this.resolveAllPending(!0);
2553
+ O().info("[yoyoclaw-channel] admin gateway client authenticated"), this.ready = !0, this.resolveAllPending(!0);
2563
2554
  },
2564
2555
  onClose: (e) => {
2565
- D().info(`[yoyoclaw-channel] admin gateway client closed: ${e}`), this.ready = !1;
2556
+ O().info(`[yoyoclaw-channel] admin gateway client closed: ${e}`), this.ready = !1;
2566
2557
  },
2567
2558
  onReconnectFailed: () => {
2568
- D().error("[yoyoclaw-channel] admin gateway client reconnect failed, notifying status tracker"), this.options.onStatusEvent?.({
2559
+ O().error("[yoyoclaw-channel] admin gateway client reconnect failed, notifying status tracker"), this.options.onStatusEvent?.({
2569
2560
  type: G.ADMIN_CLIENT_RECONNECT_FAILED,
2570
2561
  timestamp: Date.now(),
2571
2562
  data: {}
@@ -2577,7 +2568,7 @@ var jn = class {
2577
2568
  this.client?.connect();
2578
2569
  }
2579
2570
  destroy() {
2580
- this.client &&= (this.client.stop(), null), this.ready = !1, this.cancelAllPending(), D().info("[yoyoclaw-channel] admin gateway client closed");
2571
+ this.client &&= (this.client.stop(), null), this.ready = !1, this.cancelAllPending(), O().info("[yoyoclaw-channel] admin gateway client closed");
2581
2572
  }
2582
2573
  cancelAllPending() {
2583
2574
  for (let [e, t] of this.pendingReadyRequests) clearTimeout(t.timeout), t.resolve(!1);
@@ -2593,12 +2584,12 @@ var jn = class {
2593
2584
  return this.client !== null && this.ready;
2594
2585
  }
2595
2586
  ensureConnected() {
2596
- return this.client === null && (D().info("[yoyoclaw-channel] admin gateway client is null, initializing"), this.init()), this.ready || (D().info("[yoyoclaw-channel] admin gateway client not ready, connecting"), this.connect()), this.canOperate();
2587
+ return this.client === null && (O().info("[yoyoclaw-channel] admin gateway client is null, initializing"), this.init()), this.ready || (O().info("[yoyoclaw-channel] admin gateway client not ready, connecting"), this.connect()), this.canOperate();
2597
2588
  }
2598
2589
  waitForReady(e = 5e3) {
2599
2590
  return this.canOperate() ? Promise.resolve(!0) : new Promise((t) => {
2600
2591
  let n = `req_${++this.requestIdCounter}`, r = setTimeout(() => {
2601
- this.pendingReadyRequests.delete(n), this.pendingReadyRequests.size === 0 && D().warn("[yoyoclaw-channel] admin gateway client waitForReady timeout, all requests rejected"), t(!1);
2592
+ this.pendingReadyRequests.delete(n), this.pendingReadyRequests.size === 0 && O().warn("[yoyoclaw-channel] admin gateway client waitForReady timeout, all requests rejected"), t(!1);
2602
2593
  }, e);
2603
2594
  this.pendingReadyRequests.set(n, {
2604
2595
  resolve: t,
@@ -2610,11 +2601,11 @@ var jn = class {
2610
2601
  for (let [t, n] of this.pendingReadyRequests) clearTimeout(n.timeout), n.resolve(e);
2611
2602
  this.pendingReadyRequests.clear();
2612
2603
  }
2613
- }, Wn = "/aicloud/yoyo-claw-service/v1/yoyoclaw/fullduplex", Gn = 25 * 1024 * 1024;
2614
- function Kn(e, t) {
2615
- let n = Ve(), r = n.grayTag ? { "x-gray": n.grayTag } : void 0, i = M(), a = `wss://${n.clawCloud}${Wn}`, o = qn(e, t, i, r), s = We(a), c = {
2604
+ }, Bn = "/aicloud/yoyo-claw-service/v1/yoyoclaw/fullduplex", Vn = 25 * 1024 * 1024;
2605
+ function Hn(e, t) {
2606
+ let n = Ie(), r = n.grayTag ? { "x-gray": n.grayTag } : void 0, i = N(), a = `wss://${n.clawCloud}${Bn}`, o = Un(e, t, i, r), s = ze(a), c = {
2616
2607
  headers: o,
2617
- maxPayload: Gn
2608
+ maxPayload: Vn
2618
2609
  };
2619
2610
  return s && (c.agent = s), {
2620
2611
  url: a,
@@ -2622,7 +2613,7 @@ function Kn(e, t) {
2622
2613
  wsOptions: c
2623
2614
  };
2624
2615
  }
2625
- function qn(e, t, n, r) {
2616
+ function Un(e, t, n, r) {
2626
2617
  let i = {
2627
2618
  "x-role": "yoyoclaw",
2628
2619
  "x-trace-id": n,
@@ -2633,7 +2624,7 @@ function qn(e, t, n, r) {
2633
2624
  }
2634
2625
  //#endregion
2635
2626
  //#region src/cloud-channel/client.ts
2636
- var Jn = 3e4, Yn = 4e3, Xn = 1e3, Zn = 2, Qn = 999, $n = class {
2627
+ var Wn = 3e4, Gn = 4e3, Kn = 1e3, qn = 2, Jn = 999, Yn = class {
2637
2628
  ws = null;
2638
2629
  options;
2639
2630
  retryCount = 0;
@@ -2646,18 +2637,18 @@ var Jn = 3e4, Yn = 4e3, Xn = 1e3, Zn = 2, Qn = 999, $n = class {
2646
2637
  this.options = e;
2647
2638
  }
2648
2639
  connect(e = !1) {
2649
- if (this.ws?.readyState === S.OPEN) return;
2640
+ if (this.ws?.readyState === T.OPEN) return;
2650
2641
  this.clearRetryTimer();
2651
- let { deviceInfo: t, userInfo: n } = this.options, { url: r, traceId: i, wsOptions: a } = Kn(t, n);
2642
+ let { deviceInfo: t, userInfo: n } = this.options, { url: r, traceId: i, wsOptions: a } = Hn(t, n);
2652
2643
  this.currentTraceId = i, this.options.onStatusEvent?.({
2653
2644
  type: G.CLOUD_SOCKET_CONNECTING,
2654
2645
  timestamp: Date.now(),
2655
2646
  data: { url: r }
2656
- }), this.ws = new S(r, a), this.ws.on("open", this.handleOpen.bind(this, r, e)), this.ws.on("message", this.onMessage), this.ws.on("pong", this.handlePong), this.ws.on("close", this.handleClose), this.ws.on("error", this.handleError);
2647
+ }), this.ws = new T(r, a), this.ws.on("open", this.handleOpen.bind(this, r, e)), this.ws.on("message", this.onMessage), this.ws.on("pong", this.handlePong), this.ws.on("close", this.handleClose), this.ws.on("error", this.handleError);
2657
2648
  }
2658
2649
  handleOpen = (e, t) => {
2659
2650
  let n = t ? "reconnected" : "connected";
2660
- D().info(`[claw-cloud-socket][${this.currentTraceId}] ${n} to ${e.slice(0, 15)}`), this.clearRetryTimer(), this.isManualClose = !1, this.retryCount = 0, this.isRetryPaused = !1, this.startPingTimer(), this.options.onStatusEvent?.({
2651
+ O().info(`[claw-cloud-socket][${this.currentTraceId}] ${n} to ${e.slice(0, 15)}`), this.clearRetryTimer(), this.isManualClose = !1, this.retryCount = 0, this.isRetryPaused = !1, this.startPingTimer(), this.options.onStatusEvent?.({
2661
2652
  type: G.CLOUD_SOCKET_CONNECTED,
2662
2653
  timestamp: Date.now(),
2663
2654
  data: {
@@ -2667,11 +2658,11 @@ var Jn = 3e4, Yn = 4e3, Xn = 1e3, Zn = 2, Qn = 999, $n = class {
2667
2658
  }), this.options.onOpen?.();
2668
2659
  };
2669
2660
  handlePong = () => {
2670
- D().debug?.("[claw-cloud-socket] received pong from server");
2661
+ O().debug?.("[claw-cloud-socket] received pong from server");
2671
2662
  };
2672
2663
  handleClose = (e, t) => {
2673
2664
  let n = t.toString();
2674
- D().info(`[claw-cloud-socket][${this.currentTraceId}] connection closed: ${e} - ${n}`), this.options.onStatusEvent?.({
2665
+ O().info(`[claw-cloud-socket][${this.currentTraceId}] connection closed: ${e} - ${n}`), this.options.onStatusEvent?.({
2675
2666
  type: G.CLOUD_SOCKET_DISCONNECTED,
2676
2667
  timestamp: Date.now(),
2677
2668
  data: {
@@ -2682,7 +2673,7 @@ var Jn = 3e4, Yn = 4e3, Xn = 1e3, Zn = 2, Qn = 999, $n = class {
2682
2673
  }), this.isManualClose ? (this.stopPingTimer(), this.options.onClose?.()) : this.scheduleReconnect();
2683
2674
  };
2684
2675
  handleError = (e) => {
2685
- D().error(`[claw-cloud-socket][${this.currentTraceId}] connect errorred: ${e.message}`), e.message.includes("401") && (D().warn(`[claw-cloud-socket][${this.currentTraceId}] unauthorized connection (401), pausing retry and notifying client`), this.pauseRetry(), this.options.onUnauthorized?.()), this.options.onStatusEvent?.({
2676
+ O().error(`[claw-cloud-socket][${this.currentTraceId}] connect errorred: ${e.message}`), e.message.includes("401") && (O().warn(`[claw-cloud-socket][${this.currentTraceId}] unauthorized connection (401), pausing retry and notifying client`), this.pauseRetry(), this.options.onUnauthorized?.()), this.options.onStatusEvent?.({
2686
2677
  type: G.CLOUD_SOCKET_ERROR,
2687
2678
  timestamp: Date.now(),
2688
2679
  data: {
@@ -2692,12 +2683,12 @@ var Jn = 3e4, Yn = 4e3, Xn = 1e3, Zn = 2, Qn = 999, $n = class {
2692
2683
  });
2693
2684
  };
2694
2685
  send(e) {
2695
- if (!this.ws || this.ws.readyState !== S.OPEN) return D().error("[claw-cloud-socket] cannot send message: connection not open"), !1;
2686
+ if (!this.ws || this.ws.readyState !== T.OPEN) return O().error("[claw-cloud-socket] cannot send message: connection not open"), !1;
2696
2687
  try {
2697
2688
  let t = JSON.stringify(e);
2698
2689
  return this.ws.send(t), !0;
2699
2690
  } catch (t) {
2700
- return D().error(`[claw-cloud-socket] failed to send message to cloud session ${e.targetDeviceId},
2691
+ return O().error(`[claw-cloud-socket] failed to send message to cloud session ${e.targetDeviceId},
2701
2692
  ${t instanceof Error ? t.message : String(t)}`), !1;
2702
2693
  }
2703
2694
  }
@@ -2709,34 +2700,34 @@ var Jn = 3e4, Yn = 4e3, Xn = 1e3, Zn = 2, Qn = 999, $n = class {
2709
2700
  }
2710
2701
  onMessage = async (e) => {
2711
2702
  try {
2712
- let t = An(e), n = JSON.parse(t);
2713
- if (D().debug?.(`[yoyoclaw-channel] received cloud message from session ${n.wsOutputEvent?.sourceDeviceId}, deviceId ${n.wsOutputEvent?.sourceDeviceInfo?.deviceId || "nil"}, ${t.slice(0, 1e3)}`), n.code === "YOYO_CLAW_100000") {
2703
+ let t = En(e), n = JSON.parse(t);
2704
+ if (O().debug?.(`[yoyoclaw-channel] received cloud message from session ${n.wsOutputEvent?.sourceDeviceId}, deviceId ${n.wsOutputEvent?.sourceDeviceInfo?.deviceId || "nil"}, ${t.slice(0, 1e3)}`), n.code === "YOYO_CLAW_100000") {
2714
2705
  if (n.wsOutputEvent) {
2715
2706
  n.sessionInfo && (n.wsOutputEvent.sessionInfo = n.sessionInfo), this.options.onMessage?.(n.wsOutputEvent);
2716
2707
  return;
2717
2708
  }
2718
2709
  } else if (n.code === "YOYO_CLAW_100002") {
2719
2710
  if (n.extData?.offlineSocketId) {
2720
- D().info(`[claw-cloud-socket] remote device offline, session: ${n.extData.offlineSocketId}`), this.options.onRemoteDeviceOffline?.(n.extData.offlineSocketId);
2711
+ O().info(`[claw-cloud-socket] remote device offline, session: ${n.extData.offlineSocketId}`), this.options.onRemoteDeviceOffline?.(n.extData.offlineSocketId);
2721
2712
  return;
2722
2713
  }
2723
2714
  } else if (n.code === "YOYO_CLAW_100001") {
2724
- this.pauseRetry(), D().info("[claw-cloud-socket] device not registered, closing connection"), this.options.onDeviceNotRegistered?.();
2715
+ this.pauseRetry(), O().info("[claw-cloud-socket] device not registered, closing connection"), this.options.onDeviceNotRegistered?.();
2725
2716
  return;
2726
2717
  }
2727
- D().warn(`[claw-cloud-socket] unexpected message: ${n.cnMessage}, code: ${n.code}`);
2718
+ O().warn(`[claw-cloud-socket] unexpected message: ${n.cnMessage}, code: ${n.code}`);
2728
2719
  } catch (e) {
2729
- D().error(`[claw-cloud-socket] failed to parse message: ${e instanceof Error ? e.message : String(e)}`);
2720
+ O().error(`[claw-cloud-socket] failed to parse message: ${e instanceof Error ? e.message : String(e)}`);
2730
2721
  }
2731
2722
  };
2732
2723
  scheduleReconnect() {
2733
2724
  if (this.isRetryPaused) {
2734
- D().info("[claw-cloud-socket] retry paused, skipping reconnect"), this.reset(), this.options.onClose?.();
2725
+ O().info("[claw-cloud-socket] retry paused, skipping reconnect"), this.reset(), this.options.onClose?.();
2735
2726
  return;
2736
2727
  }
2737
2728
  this.clearRetryTimer();
2738
2729
  let e = this.calculateRetryDelay();
2739
- this.retryCount = Math.min(this.retryCount + 1, Qn), D().info(`[claw-cloud-socket] scheduling reconnect attempt ${this.retryCount} in ${e}ms`), this.options.onStatusEvent?.({
2730
+ this.retryCount = Math.min(this.retryCount + 1, Jn), O().info(`[claw-cloud-socket] scheduling reconnect attempt ${this.retryCount} in ${e}ms`), this.options.onStatusEvent?.({
2740
2731
  type: G.CLOUD_SOCKET_RETRY,
2741
2732
  timestamp: Date.now(),
2742
2733
  data: {
@@ -2751,16 +2742,16 @@ var Jn = 3e4, Yn = 4e3, Xn = 1e3, Zn = 2, Qn = 999, $n = class {
2751
2742
  this.retryTimer &&= (clearTimeout(this.retryTimer), null);
2752
2743
  }
2753
2744
  calculateRetryDelay() {
2754
- let e = Xn * Zn ** +Math.min(this.retryCount, 2);
2755
- return Math.min(e, Yn);
2745
+ let e = Kn * qn ** +Math.min(this.retryCount, 2);
2746
+ return Math.min(e, Gn);
2756
2747
  }
2757
2748
  startPingTimer() {
2758
2749
  this.pingTimer = setInterval(() => {
2759
- if (!this.ws || this.ws.readyState !== S.OPEN) {
2750
+ if (!this.ws || this.ws.readyState !== T.OPEN) {
2760
2751
  this.stopPingTimer();
2761
2752
  return;
2762
2753
  }
2763
- this.ws.ping(), D().debug?.("[claw-cloud-socket] sent ping to server");
2754
+ this.ws.ping(), O().debug?.("[claw-cloud-socket] sent ping to server");
2764
2755
  let { deviceInfo: e } = this.options, t = {
2765
2756
  msgType: "pingMessage",
2766
2757
  sourceRole: "yoyoclaw",
@@ -2769,115 +2760,115 @@ var Jn = 3e4, Yn = 4e3, Xn = 1e3, Zn = 2, Qn = 999, $n = class {
2769
2760
  port: e.port
2770
2761
  };
2771
2762
  try {
2772
- this.ws.send(JSON.stringify(t)), D().debug?.("[claw-cloud-socket] sent pingMessage to server");
2763
+ this.ws.send(JSON.stringify(t)), O().debug?.("[claw-cloud-socket] sent pingMessage to server");
2773
2764
  } catch {
2774
- D().error("[claw-cloud-socket] failed to send pingMessage");
2765
+ O().error("[claw-cloud-socket] failed to send pingMessage");
2775
2766
  }
2776
- }, Jn);
2767
+ }, Wn);
2777
2768
  }
2778
2769
  stopPingTimer() {
2779
2770
  this.pingTimer &&= (clearInterval(this.pingTimer), null);
2780
2771
  }
2781
2772
  pauseRetry() {
2782
- this.isRetryPaused || (this.isRetryPaused = !0, this.clearRetryTimer(), D().info("[claw-cloud-socket] retry paused"));
2773
+ this.isRetryPaused || (this.isRetryPaused = !0, this.clearRetryTimer(), O().info("[claw-cloud-socket] retry paused"));
2783
2774
  }
2784
2775
  resumeRetry() {
2785
- this.isRetryPaused && (this.isRetryPaused = !1, D().info("[claw-cloud-socket] retry resumed"), (!this.ws || this.ws.readyState !== S.OPEN) && (this.retryCount = 0, this.connect(!0)));
2776
+ this.isRetryPaused && (this.isRetryPaused = !1, O().info("[claw-cloud-socket] retry resumed"), (!this.ws || this.ws.readyState !== T.OPEN) && (this.retryCount = 0, this.connect(!0)));
2786
2777
  }
2787
- }, er = ".openclaw/yoyo/tools", tr = /[<>:"/\\|?*]/;
2788
- async function nr(e, t) {
2789
- let n = 0, r = 0;
2790
- for (let i of t) {
2791
- let t = rr(i.name);
2778
+ }, Xn = ".openclaw/yoyo/tools", Zn = /[<>:"/\\|?*]/;
2779
+ async function Qn(e, t) {
2780
+ let n = 0, i = 0;
2781
+ for (let a of t) {
2782
+ let t = $n(a.name);
2792
2783
  if (!t) {
2793
- r += 1;
2784
+ i += 1;
2794
2785
  continue;
2795
2786
  }
2796
2787
  await B({
2797
2788
  rootDir: e,
2798
- relativePath: u.join(er, t),
2799
- data: JSON.stringify(i, null, 2),
2789
+ relativePath: r.join(Xn, t),
2790
+ data: JSON.stringify(a, null, 2),
2800
2791
  encoding: "utf8",
2801
2792
  mkdir: !0
2802
2793
  }), n += 1;
2803
2794
  }
2804
2795
  return {
2805
- archiveDir: u.join(e, ".openclaw", "yoyo", "tools"),
2796
+ archiveDir: r.join(e, ".openclaw", "yoyo", "tools"),
2806
2797
  writtenCount: n,
2807
- skippedCount: r
2798
+ skippedCount: i
2808
2799
  };
2809
2800
  }
2810
- function rr(e) {
2801
+ function $n(e) {
2811
2802
  let t = e.trim();
2812
- if (!(!t || tr.test(t) || ir(t))) return `${t}.json`;
2803
+ if (!(!t || Zn.test(t) || er(t))) return `${t}.json`;
2813
2804
  }
2814
- function ir(e) {
2805
+ function er(e) {
2815
2806
  for (let t of e) if (t.codePointAt(0) < 32) return !0;
2816
2807
  return !1;
2817
2808
  }
2818
2809
  //#endregion
2819
2810
  //#region src/modules/device-toolset/copy-fallback.ts
2820
- var ar = ".yoyo-device-toolset-copy-fallback";
2821
- async function or(e, t) {
2822
- await cr(t), await v.rm(t, {
2811
+ var tr = ".yoyo-device-toolset-copy-fallback";
2812
+ async function nr(e, t) {
2813
+ await ir(t), await v.rm(t, {
2823
2814
  recursive: !0,
2824
2815
  force: !0
2825
- }), await v.mkdir(t, { recursive: !0 }), await lr(e, t), await v.writeFile(u.join(t, ar), "Managed copy fallback for DeviceToolSet MCP tools.\n", "utf8");
2816
+ }), await v.mkdir(t, { recursive: !0 }), await ar(e, t), await v.writeFile(r.join(t, tr), "Managed copy fallback for DeviceToolSet MCP tools.\n", "utf8");
2826
2817
  }
2827
- async function sr(e) {
2818
+ async function rr(e) {
2828
2819
  try {
2829
- return (await v.stat(u.join(e, ar))).isFile();
2820
+ return (await v.stat(r.join(e, tr))).isFile();
2830
2821
  } catch {
2831
2822
  return !1;
2832
2823
  }
2833
2824
  }
2834
- async function cr(e) {
2825
+ async function ir(e) {
2835
2826
  let t;
2836
2827
  try {
2837
2828
  t = await v.lstat(e);
2838
2829
  } catch (e) {
2839
- if (ur(e)) return;
2830
+ if (or(e)) return;
2840
2831
  throw e;
2841
2832
  }
2842
2833
  if (!t.isSymbolicLink()) {
2843
2834
  if (!t.isDirectory()) throw Error(`Cannot replace unmanaged mcptools path: ${e}`);
2844
- if (!((await v.readdir(e)).length === 0 || await sr(e))) throw Error(`Cannot replace unmanaged mcptools directory: ${e}`);
2835
+ if (!((await v.readdir(e)).length === 0 || await rr(e))) throw Error(`Cannot replace unmanaged mcptools directory: ${e}`);
2845
2836
  }
2846
2837
  }
2847
- async function lr(e, t) {
2838
+ async function ar(e, t) {
2848
2839
  let n = await v.readdir(e, { withFileTypes: !0 });
2849
- for (let r of n) {
2850
- let n = u.join(e, r.name), i = u.join(t, r.name);
2851
- r.isDirectory() ? (await v.mkdir(i, { recursive: !0 }), await lr(n, i)) : r.isFile() && await v.copyFile(n, i);
2840
+ for (let i of n) {
2841
+ let n = r.join(e, i.name), a = r.join(t, i.name);
2842
+ i.isDirectory() ? (await v.mkdir(a, { recursive: !0 }), await ar(n, a)) : i.isFile() && await v.copyFile(n, a);
2852
2843
  }
2853
2844
  }
2854
- function ur(e) {
2845
+ function or(e) {
2855
2846
  return !!(e && typeof e == "object" && "code" in e && e.code === "ENOENT");
2856
2847
  }
2857
2848
  //#endregion
2858
2849
  //#region src/modules/device-toolset/link.ts
2859
- async function dr(e, t, n = {}) {
2850
+ async function sr(e, t, n = {}) {
2860
2851
  await v.mkdir(e, { recursive: !0 });
2861
- let r = await v.realpath(e), i = await fr(t);
2862
- if (i.exists) {
2863
- if (i.isLink) {
2864
- if (await pr(t, r)) return { mode: "already-linked" };
2852
+ let i = await v.realpath(e), a = await cr(t);
2853
+ if (a.exists) {
2854
+ if (a.isLink) {
2855
+ if (await lr(t, i)) return { mode: "already-linked" };
2865
2856
  throw Error(`Cannot replace unmanaged mcptools link: ${t}`);
2866
2857
  }
2867
- if (!await mr(t, i.isDirectory)) throw Error(`Cannot replace unmanaged mcptools directory: ${t}`);
2858
+ if (!await ur(t, a.isDirectory)) throw Error(`Cannot replace unmanaged mcptools directory: ${t}`);
2868
2859
  await v.rm(t, {
2869
2860
  recursive: !0,
2870
2861
  force: !0
2871
2862
  });
2872
2863
  }
2873
- await v.mkdir(u.dirname(t), { recursive: !0 });
2864
+ await v.mkdir(r.dirname(t), { recursive: !0 });
2874
2865
  try {
2875
- return await (n.symlink ?? v.symlink)(r, t, process.platform === "win32" ? "junction" : "dir"), { mode: "linked" };
2866
+ return await (n.symlink ?? v.symlink)(i, t, process.platform === "win32" ? "junction" : "dir"), { mode: "linked" };
2876
2867
  } catch {
2877
- return await (n.copyFallback ?? or)(r, t), { mode: "copy-fallback" };
2868
+ return await (n.copyFallback ?? nr)(i, t), { mode: "copy-fallback" };
2878
2869
  }
2879
2870
  }
2880
- async function fr(e) {
2871
+ async function cr(e) {
2881
2872
  try {
2882
2873
  let t = await v.lstat(e);
2883
2874
  return {
@@ -2886,7 +2877,7 @@ async function fr(e) {
2886
2877
  isDirectory: t.isDirectory()
2887
2878
  };
2888
2879
  } catch (e) {
2889
- if (gr(e)) return {
2880
+ if (fr(e)) return {
2890
2881
  exists: !1,
2891
2882
  isLink: !1,
2892
2883
  isDirectory: !1
@@ -2894,66 +2885,66 @@ async function fr(e) {
2894
2885
  throw e;
2895
2886
  }
2896
2887
  }
2897
- async function pr(e, t) {
2888
+ async function lr(e, t) {
2898
2889
  try {
2899
- return hr(await v.realpath(e), t);
2890
+ return dr(await v.realpath(e), t);
2900
2891
  } catch {
2901
2892
  return !1;
2902
2893
  }
2903
2894
  }
2904
- async function mr(e, t) {
2905
- return t ? (await v.readdir(e)).length === 0 || await sr(e) : !1;
2895
+ async function ur(e, t) {
2896
+ return t ? (await v.readdir(e)).length === 0 || await rr(e) : !1;
2906
2897
  }
2907
- function hr(e, t) {
2898
+ function dr(e, t) {
2908
2899
  return process.platform === "win32" ? e.toLowerCase() === t.toLowerCase() : e === t;
2909
2900
  }
2910
- function gr(e) {
2901
+ function fr(e) {
2911
2902
  return !!(e && typeof e == "object" && "code" in e && e.code === "ENOENT");
2912
2903
  }
2913
2904
  //#endregion
2914
2905
  //#region src/modules/device-toolset/md5-index.ts
2915
- var _r = ".openclaw/yoyo/toolset-md5.json", vr = 1024 * 1024;
2916
- function yr() {
2906
+ var pr = ".openclaw/yoyo/toolset-md5.json", mr = 1024 * 1024;
2907
+ function hr() {
2917
2908
  return {
2918
2909
  version: 1,
2919
2910
  nodes: {}
2920
2911
  };
2921
2912
  }
2922
- function br(e) {
2923
- return JSON.stringify(Tr(e));
2913
+ function gr(e) {
2914
+ return JSON.stringify(xr(e));
2924
2915
  }
2925
- function xr(e) {
2926
- return ae("md5").update(br(e)).digest("hex");
2916
+ function _r(e) {
2917
+ return g("md5").update(gr(e)).digest("hex");
2927
2918
  }
2928
- async function Sr(e) {
2919
+ async function vr(e) {
2929
2920
  try {
2930
- let t = await xt({
2921
+ let t = await _t({
2931
2922
  rootDir: e,
2932
- relativePath: _r,
2933
- maxBytes: vr
2923
+ relativePath: pr,
2924
+ maxBytes: mr
2934
2925
  }), n = JSON.parse(t.buffer.toString("utf8"));
2935
2926
  return {
2936
2927
  version: 1,
2937
2928
  nodes: n && typeof n.nodes == "object" && n.nodes ? n.nodes : {}
2938
2929
  };
2939
2930
  } catch (e) {
2940
- if (e instanceof I && e.code === "not-found") return yr();
2931
+ if (e instanceof L && e.code === "not-found") return hr();
2941
2932
  throw e;
2942
2933
  }
2943
2934
  }
2944
- async function Cr(e, t, n) {
2945
- let r = (await Sr(e)).nodes[t]?.md5;
2935
+ async function yr(e, t, n) {
2936
+ let r = (await vr(e)).nodes[t]?.md5;
2946
2937
  return {
2947
2938
  changed: r !== n,
2948
2939
  md5: n,
2949
2940
  previousMd5: r
2950
2941
  };
2951
2942
  }
2952
- async function wr(e, t, n, r = Date.now()) {
2943
+ async function br(e, t, n, r = Date.now()) {
2953
2944
  let i = {
2954
2945
  version: 1,
2955
2946
  nodes: {
2956
- ...(await Sr(e)).nodes,
2947
+ ...(await vr(e)).nodes,
2957
2948
  [t]: {
2958
2949
  md5: n,
2959
2950
  updatedAtMs: r
@@ -2962,19 +2953,19 @@ async function wr(e, t, n, r = Date.now()) {
2962
2953
  };
2963
2954
  return await B({
2964
2955
  rootDir: e,
2965
- relativePath: _r,
2956
+ relativePath: pr,
2966
2957
  data: JSON.stringify(i, null, 2),
2967
2958
  encoding: "utf8",
2968
2959
  mkdir: !0
2969
2960
  }), i;
2970
2961
  }
2971
- function Tr(e) {
2972
- if (Array.isArray(e)) return e.map(Tr);
2962
+ function xr(e) {
2963
+ if (Array.isArray(e)) return e.map(xr);
2973
2964
  if (!e || typeof e != "object") return e;
2974
2965
  let t = {};
2975
2966
  for (let n of Object.keys(e).toSorted()) {
2976
2967
  let r = e[n];
2977
- r !== void 0 && (t[n] = Tr(r));
2968
+ r !== void 0 && (t[n] = xr(r));
2978
2969
  }
2979
2970
  return t;
2980
2971
  }
@@ -2983,17 +2974,17 @@ function Tr(e) {
2983
2974
  function Y(e) {
2984
2975
  return typeof e == "string" && e.trim() ? e : void 0;
2985
2976
  }
2986
- function Er(e) {
2977
+ function Sr(e) {
2987
2978
  if (!e || typeof e != "object") throw Error("DeviceToolSet payload must be an object");
2988
2979
  let t = e;
2989
2980
  if (!Y(t.nodeId)) throw Error("DeviceToolSet payload missing nodeId");
2990
2981
  if (!Array.isArray(t.toolSet)) throw Error("DeviceToolSet payload toolSet must be an array");
2991
2982
  return e;
2992
2983
  }
2993
- function Dr(e) {
2984
+ function Cr(e) {
2994
2985
  let t = e.nodeId, n = [], r = 0;
2995
2986
  for (let t of e.toolSet) {
2996
- let e = Or(t);
2987
+ let e = wr(t);
2997
2988
  e ? n.push(e) : r += 1;
2998
2989
  }
2999
2990
  return {
@@ -3002,7 +2993,7 @@ function Dr(e) {
3002
2993
  skippedCount: r
3003
2994
  };
3004
2995
  }
3005
- function Or(e) {
2996
+ function wr(e) {
3006
2997
  let t = Y(e.tool?.id), n = Y(e.tool?.function?.name), r = Y(e.tool?.function?.description);
3007
2998
  if (!t || e.tool?.type !== "function" || !n || !r) return;
3008
2999
  let i = {
@@ -3017,48 +3008,48 @@ function Or(e) {
3017
3008
  }
3018
3009
  //#endregion
3019
3010
  //#region src/modules/device-toolset/persist.ts
3020
- var kr = ".openclaw/yoyo/device-toolsets.json", Ar = 10 * 1024 * 1024;
3021
- function jr() {
3011
+ var Tr = ".openclaw/yoyo/device-toolsets.json", Er = 10 * 1024 * 1024;
3012
+ function Dr() {
3022
3013
  return {
3023
3014
  version: 1,
3024
3015
  tools: {}
3025
3016
  };
3026
3017
  }
3027
- async function Mr(e) {
3018
+ async function Or(e) {
3028
3019
  try {
3029
- let t = await xt({
3020
+ let t = await _t({
3030
3021
  rootDir: e,
3031
- relativePath: kr,
3032
- maxBytes: Ar
3022
+ relativePath: Tr,
3023
+ maxBytes: Er
3033
3024
  }), n = JSON.parse(t.buffer.toString("utf8"));
3034
3025
  return {
3035
3026
  version: 1,
3036
3027
  tools: n && typeof n.tools == "object" && n.tools ? n.tools : {}
3037
3028
  };
3038
3029
  } catch (e) {
3039
- if (e instanceof I && e.code === "not-found") return jr();
3030
+ if (e instanceof L && e.code === "not-found") return Dr();
3040
3031
  throw e;
3041
3032
  }
3042
3033
  }
3043
- async function Nr(e, t, n) {
3034
+ async function kr(e, t, n) {
3044
3035
  let r = {
3045
3036
  version: 1,
3046
- tools: Pr((await Mr(e)).tools, t, n)
3037
+ tools: Ar((await Or(e)).tools, t, n)
3047
3038
  };
3048
3039
  return await B({
3049
3040
  rootDir: e,
3050
- relativePath: kr,
3041
+ relativePath: Tr,
3051
3042
  data: JSON.stringify(r, null, 2),
3052
3043
  encoding: "utf8",
3053
3044
  mkdir: !0
3054
3045
  }), {
3055
3046
  changed: !0,
3056
- nodeCount: Ir(r.tools),
3047
+ nodeCount: Mr(r.tools),
3057
3048
  toolCount: Object.keys(r.tools).length,
3058
3049
  cache: r
3059
3050
  };
3060
3051
  }
3061
- function Pr(e, t, n) {
3052
+ function Ar(e, t, n) {
3062
3053
  let r = { ...e };
3063
3054
  for (let e of n) {
3064
3055
  let n = r[e.id];
@@ -3066,98 +3057,98 @@ function Pr(e, t, n) {
3066
3057
  id: e.id,
3067
3058
  name: e.name,
3068
3059
  description: e.description,
3069
- supportedNodeIds: Fr(n?.supportedNodeIds ?? [], t)
3060
+ supportedNodeIds: jr(n?.supportedNodeIds ?? [], t)
3070
3061
  };
3071
3062
  }
3072
3063
  return r;
3073
3064
  }
3074
- function Fr(e, t) {
3065
+ function jr(e, t) {
3075
3066
  return [...new Set([...e, t])];
3076
3067
  }
3077
- function Ir(e) {
3068
+ function Mr(e) {
3078
3069
  let t = /* @__PURE__ */ new Set();
3079
3070
  for (let n of Object.values(e)) for (let e of n.supportedNodeIds) t.add(e);
3080
3071
  return t.size;
3081
3072
  }
3082
3073
  //#endregion
3083
3074
  //#region src/modules/device-toolset/skill-inject.ts
3084
- var Lr = u.join("skills", "yoyo-control", "SKILL.md"), Rr = u.join("skills", "yoyo-control", "configs", "sub-skills.json"), zr = "{{full-mcp-tool-list}}", Br = "<!-- yoyo-mcp-tools:start -->", Vr = "<!-- yoyo-mcp-tools:end -->";
3085
- async function Hr(e, t) {
3086
- let n = u.join(e, Lr), r = await v.readFile(n, "utf8"), i = Wr(t, await Ur(e)), a = Kr(r, Gr(i));
3087
- return a !== r && await v.writeFile(n, a, "utf8"), {
3075
+ var Nr = r.join("skills", "yoyo-control", "SKILL.md"), Pr = r.join("skills", "yoyo-control", "configs", "sub-skills.json"), Fr = "{{full-mcp-tool-list}}", Ir = "<!-- yoyo-mcp-tools:start -->", Lr = "<!-- yoyo-mcp-tools:end -->";
3076
+ async function Rr(e, t) {
3077
+ let n = r.join(e, Nr), i = await v.readFile(n, "utf8"), a = Br(t, await zr(e)), o = Hr(i, Vr(a));
3078
+ return o !== i && await v.writeFile(n, o, "utf8"), {
3088
3079
  skillPath: n,
3089
- rowCount: Object.keys(i).length
3080
+ rowCount: Object.keys(a).length
3090
3081
  };
3091
3082
  }
3092
- async function Ur(e) {
3093
- let t = u.join(e, Rr), n;
3083
+ async function zr(e) {
3084
+ let t = r.join(e, Pr), n;
3094
3085
  try {
3095
3086
  n = await v.readFile(t, "utf8");
3096
3087
  } catch (e) {
3097
- if (Yr(e) && e.code === "ENOENT") return /* @__PURE__ */ new Set();
3088
+ if (Gr(e) && e.code === "ENOENT") return /* @__PURE__ */ new Set();
3098
3089
  throw e;
3099
3090
  }
3100
- let r = JSON.parse(n);
3101
- if (!Array.isArray(r) || r.some((e) => typeof e != "string")) throw Error("sub-skills config must be a JSON array of tool names");
3102
- return new Set(r.map((e) => e.trim()).filter(Boolean));
3091
+ let i = JSON.parse(n);
3092
+ if (!Array.isArray(i) || i.some((e) => typeof e != "string")) throw Error("sub-skills config must be a JSON array of tool names");
3093
+ return new Set(i.map((e) => e.trim()).filter(Boolean));
3103
3094
  }
3104
- function Wr(e, t) {
3095
+ function Br(e, t) {
3105
3096
  return t.size === 0 ? e : Object.fromEntries(Object.entries(e).filter(([e, n]) => !t.has(e) && !t.has(n.name)));
3106
3097
  }
3107
- function Gr(e) {
3098
+ function Vr(e) {
3108
3099
  return [
3109
- Br,
3110
- ...Object.values(e).toSorted((e, t) => e.name.localeCompare(t.name)).map((e) => `| ${qr(e.name)} | ${qr(e.description)} | ${qr(e.supportedNodeIds.join(", "))} |`),
3111
- Vr
3100
+ Ir,
3101
+ ...Object.values(e).toSorted((e, t) => e.name.localeCompare(t.name)).map((e) => `| ${Ur(e.name)} | ${Ur(e.description)} | ${Ur(e.supportedNodeIds.join(", "))} |`),
3102
+ Lr
3112
3103
  ].join("\n");
3113
3104
  }
3114
- function Kr(e, t) {
3115
- let n = RegExp(`${Jr(Br)}[\\s\\S]*?${Jr(Vr)}`);
3105
+ function Hr(e, t) {
3106
+ let n = RegExp(`${Wr(Ir)}[\\s\\S]*?${Wr(Lr)}`);
3116
3107
  if (n.test(e)) return e.replace(n, t);
3117
- if (e.includes(zr)) return e.replace(zr, t);
3108
+ if (e.includes(Fr)) return e.replace(Fr, t);
3118
3109
  throw Error("Unable to find MCP tools placeholder or generated block in yoyo-control skill");
3119
3110
  }
3120
- function qr(e) {
3111
+ function Ur(e) {
3121
3112
  return e.replaceAll("|", "\\|").replace(/\r?\n/g, " ");
3122
3113
  }
3123
- function Jr(e) {
3114
+ function Wr(e) {
3124
3115
  return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3125
3116
  }
3126
- function Yr(e) {
3117
+ function Gr(e) {
3127
3118
  return e instanceof Error && "code" in e;
3128
3119
  }
3129
3120
  //#endregion
3130
3121
  //#region src/modules/device-toolset/processor.ts
3131
- var Xr = Dt();
3132
- async function Zr(e) {
3133
- let t = Er(e), n = Ot();
3122
+ var Kr = Ct();
3123
+ async function qr(e) {
3124
+ let t = Sr(e), n = wt();
3134
3125
  if (!n) throw Error("Unable to resolve home directory for DeviceToolSet persistence");
3135
- let r = Dr(t);
3136
- D().info(`[yoyoclaw-device-toolset] process start, nodeId: ${r.nodeId}, tools: ${r.tools.length}, skipped: ${r.skippedCount}`);
3137
- let i = xr(r.tools);
3138
- if (D().debug?.(`[yoyoclaw-device-toolset] computed md5, nodeId: ${r.nodeId}, md5: ${i}`), !(await Cr(n, r.nodeId, i)).changed) return D().info(`[yoyoclaw-device-toolset] unchanged, skip refresh, nodeId: ${r.nodeId}`), {
3126
+ let i = Cr(t);
3127
+ O().info(`[yoyoclaw-device-toolset] process start, nodeId: ${i.nodeId}, tools: ${i.tools.length}, skipped: ${i.skippedCount}`);
3128
+ let a = _r(i.tools);
3129
+ if (O().debug?.(`[yoyoclaw-device-toolset] computed md5, nodeId: ${i.nodeId}, md5: ${a}`), !(await yr(n, i.nodeId, a)).changed) return O().info(`[yoyoclaw-device-toolset] unchanged, skip refresh, nodeId: ${i.nodeId}`), {
3139
3130
  changed: !1,
3140
- nodeId: r.nodeId,
3141
- skippedCount: r.skippedCount
3131
+ nodeId: i.nodeId,
3132
+ skippedCount: i.skippedCount
3142
3133
  };
3143
- let a = await Nr(n, r.nodeId, r.tools);
3144
- D().info(`[yoyoclaw-device-toolset] cache merged, nodeId: ${r.nodeId}, supportedNodes: ${a.nodeCount}, tools: ${a.toolCount}`);
3145
- let o = a.cache.tools, s = await nr(n, r.tools);
3146
- D().info(`[yoyoclaw-device-toolset] archive refreshed, nodeId: ${r.nodeId}, written: ${s.writtenCount}, skipped: ${s.skippedCount}`);
3147
- let c = await Hr(Xr, o);
3148
- D().info(`[yoyoclaw-device-toolset] skill refreshed, nodeId: ${r.nodeId}, rows: ${c.rowCount}`);
3149
- let l = await dr(s.archiveDir, u.join(Xr, "skills", "yoyo-control", "mcptools"));
3150
- return D().info(`[yoyoclaw-device-toolset] mapping ready, nodeId: ${r.nodeId}, mode: ${l.mode}`), await wr(n, r.nodeId, i, Date.now()), D().info(`[yoyoclaw-device-toolset] process complete, nodeId: ${r.nodeId}`), {
3134
+ let o = await kr(n, i.nodeId, i.tools);
3135
+ O().info(`[yoyoclaw-device-toolset] cache merged, nodeId: ${i.nodeId}, supportedNodes: ${o.nodeCount}, tools: ${o.toolCount}`);
3136
+ let s = o.cache.tools, c = await Qn(n, i.tools);
3137
+ O().info(`[yoyoclaw-device-toolset] archive refreshed, nodeId: ${i.nodeId}, written: ${c.writtenCount}, skipped: ${c.skippedCount}`);
3138
+ let l = await Rr(Kr, s);
3139
+ O().info(`[yoyoclaw-device-toolset] skill refreshed, nodeId: ${i.nodeId}, rows: ${l.rowCount}`);
3140
+ let u = await sr(c.archiveDir, r.join(Kr, "skills", "yoyo-control", "mcptools"));
3141
+ return O().info(`[yoyoclaw-device-toolset] mapping ready, nodeId: ${i.nodeId}, mode: ${u.mode}`), await br(n, i.nodeId, a, Date.now()), O().info(`[yoyoclaw-device-toolset] process complete, nodeId: ${i.nodeId}`), {
3151
3142
  changed: !0,
3152
- nodeId: r.nodeId,
3153
- nodeCount: a.nodeCount,
3154
- toolCount: a.toolCount,
3155
- skippedCount: r.skippedCount
3143
+ nodeId: i.nodeId,
3144
+ nodeCount: o.nodeCount,
3145
+ toolCount: o.toolCount,
3146
+ skippedCount: i.skippedCount
3156
3147
  };
3157
3148
  }
3158
3149
  //#endregion
3159
3150
  //#region src/cloud-channel/message-handler.ts
3160
- var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3151
+ var Jr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", Yr = class {
3161
3152
  sessionManager;
3162
3153
  adminClientManager;
3163
3154
  config;
@@ -3197,7 +3188,7 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3197
3188
  let { sourceDeviceId: t, sourceDeviceInfo: n, targetDeviceId: r, port: i, sessionInfo: a, traceInfo: o } = e;
3198
3189
  if (!t || !r || !i || !n?.deviceId) return;
3199
3190
  let s = n.deviceId, c = a?.nodeConnectTimestamp;
3200
- c ? (this.sessionManager.closePreviousNodeGatewayClients(s, c), this.flushPendingMessage(s), this.initializedDeviceIds.delete(s)) : D().warn(`${X} pair message missing timestamp for device: ${t}`), D().info(`${X} received pair message, creating gateway client for device: ${t}, hardware device: ${s}, timestamp: ${c}`);
3191
+ c ? (this.sessionManager.closePreviousNodeGatewayClients(s, c), this.flushPendingMessage(s), this.initializedDeviceIds.delete(s)) : O().warn(`${X} pair message missing timestamp for device: ${t}`), O().info(`${X} received pair message, creating gateway client for device: ${t}, hardware device: ${s}, timestamp: ${c}`);
3201
3192
  let l = {
3202
3193
  sessionId: t,
3203
3194
  timestamp: c || 0,
@@ -3229,11 +3220,11 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3229
3220
  handleUnPairMessage(e) {
3230
3221
  let { sourceDeviceId: t } = e;
3231
3222
  if (!t) {
3232
- D().warn(`${X} unpair message missing sourceDeviceId`);
3223
+ O().warn(`${X} unpair message missing sourceDeviceId`);
3233
3224
  return;
3234
3225
  }
3235
3226
  let n = this.sessionManager.getHardwareDeviceId(t);
3236
- D().info(`${X} received unpair message, session: ${t}, hardware device: ${n}`), this.config.onStatusEvent?.({
3227
+ O().info(`${X} received unpair message, session: ${t}, hardware device: ${n}`), this.config.onStatusEvent?.({
3237
3228
  type: G.DEVICE_UNPAIRING,
3238
3229
  timestamp: Date.now(),
3239
3230
  data: {
@@ -3247,27 +3238,27 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3247
3238
  handleUserMessage(e) {
3248
3239
  let { sourceDeviceId: t } = e || {};
3249
3240
  if (!t) {
3250
- D().warn(`${X} user message missing sourceDeviceId`);
3241
+ O().warn(`${X} user message missing sourceDeviceId`);
3251
3242
  return;
3252
3243
  }
3253
3244
  let n = this.sessionManager.getHardwareDeviceId(t);
3254
3245
  if (!n) {
3255
- D().warn(`${X} user message missing hardwareDeviceId, session: ${t}`);
3246
+ O().warn(`${X} user message missing hardwareDeviceId, session: ${t}`);
3256
3247
  return;
3257
3248
  }
3258
3249
  try {
3259
3250
  let r = this.sessionManager.getNodeGatewayClient(t);
3260
3251
  if (!r) {
3261
- D().warn(`${X} no node gateway client found for source device: ${n}, session: ${t}`);
3252
+ O().warn(`${X} no node gateway client found for source device: ${n}, session: ${t}`);
3262
3253
  return;
3263
3254
  }
3264
3255
  e.data && (this.initializedDeviceIds.has(n) || this.processMessageBuffer(t, n, e.data, r)) && this.forwardToNodeGateway(t, n, r, e.data);
3265
3256
  } catch (e) {
3266
- D().error(`${X} failed to send gateway message to device: ${n}, session: ${t}, ${String(e)}`);
3257
+ O().error(`${X} failed to send gateway message to device: ${n}, session: ${t}, ${String(e)}`);
3267
3258
  }
3268
3259
  }
3269
3260
  forwardToNodeGateway(e, t, n, r) {
3270
- D().info(`${X} forwarding user message to node gateway from ${t}, session: ${e}`), n.send(r);
3261
+ O().info(`${X} forwarding user message to node gateway from ${t}, session: ${e}`), n.send(r);
3271
3262
  }
3272
3263
  processMessageBuffer(e, t, n, r) {
3273
3264
  let i = this.pendingFirstMessages.get(t);
@@ -3295,22 +3286,22 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3295
3286
  handleNodeGatewayMessage = async (e, t, n) => {
3296
3287
  let r = this.sessionManager.getHardwareDeviceId(e), i = this.sessionManager.getSession(e), a = i?.sourceInfo.sourceDeviceInfo?.deviceId;
3297
3288
  if (!r || !i) {
3298
- D().warn(`${X} gateway source offline, session: ${e}`);
3289
+ O().warn(`${X} gateway source offline, session: ${e}`);
3299
3290
  return;
3300
3291
  }
3301
- D().info(`${X} received gateway message from ${a}`);
3292
+ O().info(`${X} received gateway message from ${a}`);
3302
3293
  try {
3303
3294
  let e = i.sourceInfo.sourceDeviceId, r;
3304
3295
  try {
3305
3296
  r = JSON.parse(n);
3306
3297
  } catch {
3307
- D().warn(`${X} gateway message is not valid JSON`);
3298
+ O().warn(`${X} gateway message is not valid JSON`);
3308
3299
  return;
3309
3300
  }
3310
3301
  if (!r.ok && r.error?.code === "NOT_PAIRED") {
3311
3302
  let n = r.error?.details?.requestId;
3312
3303
  if (!n) {
3313
- D().warn(`${X} NOT_PAIRED without requestId, ignoring...`);
3304
+ O().warn(`${X} NOT_PAIRED without requestId, ignoring...`);
3314
3305
  return;
3315
3306
  }
3316
3307
  await this.handleAutoPair(n);
@@ -3318,30 +3309,30 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3318
3309
  id: r.id,
3319
3310
  type: "reconnect-required"
3320
3311
  };
3321
- this.sendMessage("deviceControl", e, t, "", void 0, i), D().info(`${X} auto pair is completed, requestId: ${n}`);
3312
+ this.sendMessage("deviceControl", e, t, "", void 0, i), O().info(`${X} auto pair is completed, requestId: ${n}`);
3322
3313
  return;
3323
3314
  }
3324
- D().debug?.(`${X} trans gateway msg to cloud, session: ${e}, data: ${n.slice(0, 1e3)}`), this.sendMessage("userMessage", e, t, n) || (D().error(`${X} failed to send message, cloud socket closed, session ${e}, device ${a}`), this.sessionManager.closeNodeGatewayClient(e));
3315
+ O().debug?.(`${X} trans gateway msg to cloud, session: ${e}, data: ${n.slice(0, 1e3)}`), this.sendMessage("userMessage", e, t, n) || (O().error(`${X} failed to send message, cloud socket closed, session ${e}, device ${a}`), this.sessionManager.closeNodeGatewayClient(e));
3325
3316
  } catch (e) {
3326
- D().error(`${X} failed to handle gateway message: ${String(e)}`);
3317
+ O().error(`${X} failed to handle gateway message: ${String(e)}`);
3327
3318
  }
3328
3319
  };
3329
3320
  async handleAutoPair(e) {
3330
3321
  let t = this.adminClientManager.getClient();
3331
- if (!t) return D().warn(`${X} admin client not available for auto pair`), !1;
3322
+ if (!t) return O().warn(`${X} admin client not available for auto pair`), !1;
3332
3323
  try {
3333
- D().info(`${X} auto pair approve, requestId: ${e}`), await t.devicePairApprove(e);
3324
+ O().info(`${X} auto pair approve, requestId: ${e}`), await t.devicePairApprove(e);
3334
3325
  } catch (t) {
3335
- D().error(`${X} auto pair approve failed, requestId: ${e}, error: ${String(t)}, ignore...`);
3326
+ O().error(`${X} auto pair approve failed, requestId: ${e}, error: ${String(t)}, ignore...`);
3336
3327
  }
3337
3328
  }
3338
3329
  async handleContextRequest(e) {
3339
3330
  let { sourceDeviceId: t, traceInfo: n } = e, r = e.msgType, i = r === "updateContexts";
3340
3331
  if (!t) {
3341
- D().warn(`${X} context request missing sourceDeviceId`);
3332
+ O().warn(`${X} context request missing sourceDeviceId`);
3342
3333
  return;
3343
3334
  }
3344
- D().info(`${X} handling ${r} from ${t} traceInfo: ${JSON.stringify(n)}`);
3335
+ O().info(`${X} handling ${r} from ${t} traceInfo: ${JSON.stringify(n)}`);
3345
3336
  let a = e.contexts?.[0], o = this.validateContext(a);
3346
3337
  if (!o.valid) {
3347
3338
  this.replyContextError(r, t, n, a, o.error);
@@ -3357,13 +3348,13 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3357
3348
  if (this.contextHandlerRequiresAdminClient(i, c) && !await this.ensureAdminClientReady(r, t, n, s)) return;
3358
3349
  let o = this.adminClientManager.getClient(), l = i ? await e(o ?? void 0, s.payload, s) : await e(o);
3359
3350
  if (l.noReply) {
3360
- D().info(`${X} ${i ? "update" : "fetch"} context '${c}' processed (no reply)`);
3351
+ O().info(`${X} ${i ? "update" : "fetch"} context '${c}' processed (no reply)`);
3361
3352
  return;
3362
3353
  }
3363
- l.ok ? (D().info(`${X} ${i ? "update" : "fetch"} context successfully`), this.sendContextResponse(r, t, n, a, {
3354
+ l.ok ? (O().info(`${X} ${i ? "update" : "fetch"} context successfully`), this.sendContextResponse(r, t, n, a, {
3364
3355
  ok: !0,
3365
3356
  ...l.data
3366
- })) : (D().error(`${X} failed to ${i ? "update" : "fetch"} context: ${l.error}`), this.sendContextResponse(r, t, n, a, {
3357
+ })) : (O().error(`${X} failed to ${i ? "update" : "fetch"} context: ${l.error}`), this.sendContextResponse(r, t, n, a, {
3367
3358
  ok: !1,
3368
3359
  error: l.error,
3369
3360
  ...l?.data,
@@ -3371,7 +3362,7 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3371
3362
  }));
3372
3363
  } catch (e) {
3373
3364
  let o = e instanceof Error ? e.message : String(e);
3374
- D().error(`${X} error ${i ? "updating" : "fetching"} context '${c}': ${o}`), this.replyContextError(r, t, n, a, o);
3365
+ O().error(`${X} error ${i ? "updating" : "fetching"} context '${c}': ${o}`), this.replyContextError(r, t, n, a, o);
3375
3366
  }
3376
3367
  }
3377
3368
  sendMessage(e, t, n, r, i, a) {
@@ -3408,7 +3399,7 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3408
3399
  }];
3409
3400
  }
3410
3401
  replyContextError(e, t, n, r, i) {
3411
- D().error(`${X} ${i}`), this.sendContextResponse(e, t, n, r, {
3402
+ O().error(`${X} ${i}`), this.sendContextResponse(e, t, n, r, {
3412
3403
  ok: !1,
3413
3404
  error: i
3414
3405
  });
@@ -3434,7 +3425,7 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3434
3425
  ok: !1,
3435
3426
  error: "Missing content in context payload"
3436
3427
  };
3437
- let r = Qr.style, i = await e.setAgentFile(r, n);
3428
+ let r = Jr.style, i = await e.setAgentFile(r, n);
3438
3429
  return i.ok ? {
3439
3430
  ok: !0,
3440
3431
  data: { name: "style" }
@@ -3454,21 +3445,21 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3454
3445
  error: "Missing provider or id in context payload"
3455
3446
  };
3456
3447
  try {
3457
- return (await e.switchPrimaryModel(n, r)).ok ? (D().info(`[yoyoclaw-channel] switchPrimaryModel success: ${n}/${r}`), {
3448
+ return (await e.switchPrimaryModel(n, r)).ok ? (O().info(`[yoyoclaw-channel] switchPrimaryModel success: ${n}/${r}`), {
3458
3449
  ok: !0,
3459
3450
  data: { resolved: {
3460
3451
  provider: n,
3461
3452
  id: r
3462
3453
  } }
3463
- }) : (D().error("[yoyoclaw-channel] switchPrimaryModel failed, try to fallback main session model"), this.getMainSessionModel(e));
3454
+ }) : (O().error("[yoyoclaw-channel] switchPrimaryModel failed, try to fallback main session model"), this.getMainSessionModel(e));
3464
3455
  } catch (t) {
3465
- return D().error(`[yoyoclaw-channel] updatePrimaryModel error: ${t}, try to fallback main session model`), this.getMainSessionModel(e);
3456
+ return O().error(`[yoyoclaw-channel] updatePrimaryModel error: ${t}, try to fallback main session model`), this.getMainSessionModel(e);
3466
3457
  }
3467
3458
  }
3468
3459
  async getMainSessionModel(e) {
3469
3460
  try {
3470
3461
  let t = await e.getMainSession(), { modelProvider: n = "", model: r = "" } = t;
3471
- return D().warn(`[yoyoclaw-channel] switchPrimaryModel failed, fallback to current: ${n}/${r}`), !n || !r ? {
3462
+ return O().warn(`[yoyoclaw-channel] switchPrimaryModel failed, fallback to current: ${n}/${r}`), !n || !r ? {
3472
3463
  ok: !1,
3473
3464
  error: `Missing primary model: mainSession-${JSON.stringify(t)}`
3474
3465
  } : {
@@ -3499,7 +3490,7 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3499
3490
  async fetchModelsList(e) {
3500
3491
  try {
3501
3492
  let t = await e.getModelList(), { modelProvider: n = "", model: r = "" } = await e.getMainSession();
3502
- return D().info(`[yoyoclaw-channel] current primary model: ${n}/${r}`), {
3493
+ return O().info(`[yoyoclaw-channel] current primary model: ${n}/${r}`), {
3503
3494
  ok: !0,
3504
3495
  data: { models: t?.models?.map((e) => {
3505
3496
  let t = e.provider === n && e.id === r;
@@ -3511,7 +3502,7 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3511
3502
  };
3512
3503
  } catch (e) {
3513
3504
  let t = e instanceof Error ? e.message : String(e);
3514
- return D().error(`[yoyoclaw-channel] fetchModelsList failed: ${t}`), {
3505
+ return O().error(`[yoyoclaw-channel] fetchModelsList failed: ${t}`), {
3515
3506
  ok: !1,
3516
3507
  error: `fetchModelsList error: ${t}`
3517
3508
  };
@@ -3523,14 +3514,14 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3523
3514
  async updateDeviceToolSetContext(e, t, n) {
3524
3515
  return n?.header.namespace === "yoyoclaw" ? {
3525
3516
  ok: !0,
3526
- data: await Zr(t),
3517
+ data: await qr(t),
3527
3518
  noReply: !0
3528
3519
  } : {
3529
3520
  ok: !1,
3530
3521
  error: `Unsupported DeviceToolSet namespace: ${n?.header.namespace ?? "unknown"}`
3531
3522
  };
3532
3523
  }
3533
- }, ei = class extends jn {
3524
+ }, Xr = class extends Dn {
3534
3525
  nodeOpts;
3535
3526
  sessionId;
3536
3527
  hardwareDeviceId;
@@ -3546,7 +3537,7 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3546
3537
  return this.hardwareDeviceId;
3547
3538
  }
3548
3539
  onOpen() {
3549
- this.connectedAt = (/* @__PURE__ */ new Date()).toISOString(), D().info(`[yoyoclaw-nodeGatewayClient] connected for session: ${this.sessionId}, device: ${this.hardwareDeviceId}`), this.nodeOpts.onStatusEvent?.({
3540
+ this.connectedAt = (/* @__PURE__ */ new Date()).toISOString(), O().info(`[yoyoclaw-nodeGatewayClient] connected for session: ${this.sessionId}, device: ${this.hardwareDeviceId}`), this.nodeOpts.onStatusEvent?.({
3550
3541
  type: G.GATEWAY_CLIENT_CONNECTED,
3551
3542
  timestamp: Date.now(),
3552
3543
  data: {
@@ -3558,7 +3549,7 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3558
3549
  });
3559
3550
  }
3560
3551
  onClose(e, t) {
3561
- D().info(`[yoyoclaw-nodeGatewayClient] disconnected for session: ${this.sessionId}, device: ${this.hardwareDeviceId}, reason: ${t}`), this.nodeOpts.onStatusEvent?.({
3552
+ O().info(`[yoyoclaw-nodeGatewayClient] disconnected for session: ${this.sessionId}, device: ${this.hardwareDeviceId}, reason: ${t}`), this.nodeOpts.onStatusEvent?.({
3562
3553
  type: G.GATEWAY_CLIENT_DISCONNECTED,
3563
3554
  timestamp: Date.now(),
3564
3555
  data: {
@@ -3570,9 +3561,9 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3570
3561
  });
3571
3562
  }
3572
3563
  onError(e) {
3573
- D().error(`[yoyoclaw-nodeGatewayClient] error for session: ${this.sessionId}, device: ${this.hardwareDeviceId}: ${e.message}`);
3564
+ O().error(`[yoyoclaw-nodeGatewayClient] error for session: ${this.sessionId}, device: ${this.hardwareDeviceId}: ${e.message}`);
3574
3565
  }
3575
- }, ti = class {
3566
+ }, Zr = class {
3576
3567
  nodeGatewayClientsMap = /* @__PURE__ */ new Map();
3577
3568
  deviceSessionsMap = /* @__PURE__ */ new Map();
3578
3569
  sessionIdToHardwareDeviceMap = /* @__PURE__ */ new Map();
@@ -3605,7 +3596,7 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3605
3596
  this.nodeGatewayClientsMap.set(e, t);
3606
3597
  }
3607
3598
  createNodeGatewayClient(e) {
3608
- let t = new ei({
3599
+ let t = new Xr({
3609
3600
  sessionId: e.sessionId,
3610
3601
  hardwareDeviceId: e.hardwareDeviceId,
3611
3602
  deviceInfo: e.deviceInfo,
@@ -3616,19 +3607,19 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3616
3607
  }
3617
3608
  closeNodeGatewayClient(e) {
3618
3609
  let t = this.nodeGatewayClientsMap.get(e);
3619
- t && (t.stop(), this.nodeGatewayClientsMap.delete(e), this.removeSession(e), D().info(`[yoyoclaw-channel] closed node gateway client for session: ${e}`));
3610
+ t && (t.stop(), this.nodeGatewayClientsMap.delete(e), this.removeSession(e), O().info(`[yoyoclaw-channel] closed node gateway client for session: ${e}`));
3620
3611
  }
3621
3612
  closePreviousNodeGatewayClients(e, t) {
3622
3613
  let n = this.deviceSessionsMap.get(e);
3623
3614
  if (!n || n.length === 0) return;
3624
3615
  let r = n.filter((e) => e.timestamp < t);
3625
3616
  if (r.length > 0) {
3626
- D().info(`[yoyoclaw-channel] closing ${r.length} previous node gateway client(s) for hardware device: ${e}, new timestamp: ${t}`);
3617
+ O().info(`[yoyoclaw-channel] closing ${r.length} previous node gateway client(s) for hardware device: ${e}, new timestamp: ${t}`);
3627
3618
  for (let e of r) this.closeNodeGatewayClient(e.sessionId);
3628
3619
  }
3629
3620
  }
3630
3621
  closeAllNodeGatewayClients() {
3631
- for (let [e, t] of this.nodeGatewayClientsMap.entries()) t.stop(), D().info(`[yoyoclaw-channel] closed node gateway client for session: ${e}`);
3622
+ for (let [e, t] of this.nodeGatewayClientsMap.entries()) t.stop(), O().info(`[yoyoclaw-channel] closed node gateway client for session: ${e}`);
3632
3623
  this.nodeGatewayClientsMap.clear(), this.deviceSessionsMap.clear(), this.sessionIdToHardwareDeviceMap.clear();
3633
3624
  }
3634
3625
  hasSession(e) {
@@ -3637,14 +3628,14 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3637
3628
  getSessionCount() {
3638
3629
  return this.sessionIdToHardwareDeviceMap.size;
3639
3630
  }
3640
- }, ni = class {
3631
+ }, Qr = class {
3641
3632
  cloudClient;
3642
3633
  sessionManager;
3643
3634
  adminClientManager;
3644
3635
  messageHandler;
3645
3636
  config;
3646
3637
  constructor(e) {
3647
- this.config = e, this.sessionManager = new ti(), this.adminClientManager = new Un({ onStatusEvent: this.handleStatusEvent }), this.messageHandler = new $r({
3638
+ this.config = e, this.sessionManager = new Zr(), this.adminClientManager = new zn({ onStatusEvent: this.handleStatusEvent }), this.messageHandler = new Yr({
3648
3639
  sessionManager: this.sessionManager,
3649
3640
  adminClientManager: this.adminClientManager,
3650
3641
  config: {
@@ -3652,7 +3643,7 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3652
3643
  onStatusEvent: this.handleStatusEvent,
3653
3644
  onReply: (e) => this.cloudClient.send(e)
3654
3645
  }
3655
- }), this.cloudClient = new $n({
3646
+ }), this.cloudClient = new Yn({
3656
3647
  deviceInfo: e.deviceInfo,
3657
3648
  userInfo: e.userInfo,
3658
3649
  onMessage: this.messageHandler.handleCloudMessage,
@@ -3665,60 +3656,60 @@ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3665
3656
  }), this.adminClientManager.init();
3666
3657
  }
3667
3658
  start() {
3668
- D().info("[yoyoclaw-channel] starting connection"), this.adminClientManager.ensureConnected(), this.cloudClient.connect();
3659
+ O().info("[yoyoclaw-channel] starting connection"), this.adminClientManager.ensureConnected(), this.cloudClient.connect();
3669
3660
  }
3670
3661
  destroy() {
3671
- D().info("[yoyoclaw-channel] closing connection"), this.sessionManager.closeAllNodeGatewayClients(), this.adminClientManager.destroy(), this.cloudClient.close();
3662
+ O().info("[yoyoclaw-channel] closing connection"), this.sessionManager.closeAllNodeGatewayClients(), this.adminClientManager.destroy(), this.cloudClient.close();
3672
3663
  }
3673
3664
  handleCloudOpen = () => {
3674
- D().info("[yoyoclaw-channel] cloud connection established"), this.config.onOpen?.();
3665
+ O().info("[yoyoclaw-channel] cloud connection established"), this.config.onOpen?.();
3675
3666
  };
3676
3667
  handleStatusEvent = (e) => {
3677
3668
  this.config.onStatusEvent?.(e);
3678
3669
  };
3679
3670
  handleCloudClose = () => {
3680
- D().info("[yoyoclaw-channel] cloud connection closed"), this.config.onClose?.();
3671
+ O().info("[yoyoclaw-channel] cloud connection closed"), this.config.onClose?.();
3681
3672
  };
3682
3673
  handleRemoteDeviceOffline = (e) => {
3683
3674
  this.sessionManager.closeNodeGatewayClient(e);
3684
3675
  };
3685
3676
  handleDeviceNotRegistered = () => {
3686
- D().info("[yoyoclaw-channel] device not registered, notifying connection layer"), this.config.onDeviceNotRegistered?.();
3677
+ O().info("[yoyoclaw-channel] device not registered, notifying connection layer"), this.config.onDeviceNotRegistered?.();
3687
3678
  };
3688
3679
  handleUnauthorized = () => {
3689
- D().info("[yoyoclaw-channel] unauthorized connection, notifying connection layer"), this.config.onUnauthorized?.();
3680
+ O().info("[yoyoclaw-channel] unauthorized connection, notifying connection layer"), this.config.onUnauthorized?.();
3690
3681
  };
3691
3682
  }, Z = {
3692
3683
  channel: null,
3693
3684
  status: "idle"
3694
- }, Q = null, ri = (e) => ({
3685
+ }, Q = null, $r = (e) => ({
3695
3686
  id: "yoyoclaw-connection",
3696
3687
  async start() {
3697
- D().info("[yoyoclaw] plugin service enabled"), Q = new bn(!0);
3688
+ O().info("[yoyoclaw] plugin service enabled"), Q = new gn(!0);
3698
3689
  try {
3699
- await Q.loadAndCleanStatus(), D().info("[yoyoclaw-conn] status tracker initialized and cleaned");
3690
+ await Q.loadAndCleanStatus(), O().info("[yoyoclaw-conn] status tracker initialized and cleaned");
3700
3691
  } catch (e) {
3701
- D().warn(`[yoyoclaw-conn] failed to load saved status: ${String(e)}`);
3692
+ O().warn(`[yoyoclaw-conn] failed to load saved status: ${String(e)}`);
3702
3693
  }
3703
- D().debug?.(`[yoyoclaw] agents: ${JSON.stringify(e.config.agents?.defaults)}`);
3694
+ O().debug?.(`[yoyoclaw] agents: ${JSON.stringify(e.config.agents?.defaults)}`);
3704
3695
  try {
3705
- await j().initializePluginConfig("yoyo"), D().info("[yoyoclaw] plugin config initialized");
3696
+ await M().initializePluginConfig("yoyo"), O().info("[yoyoclaw] plugin config initialized");
3706
3697
  } catch (e) {
3707
- D().error(`[yoyoclaw] failed to initialize plugin config: ${String(e)}`);
3698
+ O().error(`[yoyoclaw] failed to initialize plugin config: ${String(e)}`);
3708
3699
  }
3709
3700
  try {
3710
- let e = await dn();
3711
- e?.token ? (D().info("[yoyoclaw-conn] token found, creating channel"), await ii(await W(), e)) : D().info("[yoyoclaw-conn] no token found, skipping channel creation");
3701
+ let e = await sn();
3702
+ e?.token ? (O().info("[yoyoclaw-conn] token found, creating channel"), await ei(await W(), e)) : O().info("[yoyoclaw-conn] no token found, skipping channel creation");
3712
3703
  } catch (e) {
3713
- D().error(`[yoyoclaw-conn] failed to initialize connection: ${String(e)}`);
3704
+ O().error(`[yoyoclaw-conn] failed to initialize connection: ${String(e)}`);
3714
3705
  }
3715
3706
  },
3716
3707
  async stop(e) {
3717
- $(), D().info("[yoyoclaw-conn] stopping connection service"), Q &&= (await Q.destroy(), null);
3708
+ $(), O().info("[yoyoclaw-conn] stopping connection service"), Q &&= (await Q.destroy(), null);
3718
3709
  }
3719
3710
  });
3720
- async function ii(e, t) {
3721
- return Z.status = "connecting", D().info(`[yoyoclaw-conn] creating new channel for device: ${e.deviceId}`), Q && await Q.handleEvent({
3711
+ async function ei(e, t) {
3712
+ return Z.status = "connecting", O().info(`[yoyoclaw-conn] creating new channel for device: ${e.deviceId}`), Q && await Q.handleEvent({
3722
3713
  type: G.CONNECTION_STATUS_CHANGED,
3723
3714
  timestamp: Date.now(),
3724
3715
  data: {
@@ -3726,11 +3717,11 @@ async function ii(e, t) {
3726
3717
  previousStatus: Z.status
3727
3718
  }
3728
3719
  }), new Promise((n, r) => {
3729
- Z.channel = new ni({
3720
+ Z.channel = new Qr({
3730
3721
  deviceInfo: e,
3731
3722
  userInfo: t,
3732
3723
  onOpen: () => {
3733
- Z.status = "connected", D().info("[yoyoclaw-conn] channel connected successfully"), Q && Q.handleEvent({
3724
+ Z.status = "connected", O().info("[yoyoclaw-conn] channel connected successfully"), Q && Q.handleEvent({
3734
3725
  type: G.CONNECTION_STATUS_CHANGED,
3735
3726
  timestamp: Date.now(),
3736
3727
  data: {
@@ -3740,7 +3731,7 @@ async function ii(e, t) {
3740
3731
  }), n(void 0);
3741
3732
  },
3742
3733
  onClose: () => {
3743
- Z.status = "idle", Z.channel = null, D().info("[yoyoclaw-conn] channel closed"), Q && Q.handleEvent({
3734
+ Z.status = "idle", Z.channel = null, O().info("[yoyoclaw-conn] channel closed"), Q && Q.handleEvent({
3744
3735
  type: G.CONNECTION_STATUS_CHANGED,
3745
3736
  timestamp: Date.now(),
3746
3737
  data: {
@@ -3750,30 +3741,30 @@ async function ii(e, t) {
3750
3741
  }), n(void 0);
3751
3742
  },
3752
3743
  onDeviceNotRegistered: async () => {
3753
- D().info("[yoyoclaw-conn] device not registered, handling...");
3754
- let t = await dn();
3744
+ O().info("[yoyoclaw-conn] device not registered, handling...");
3745
+ let t = await sn();
3755
3746
  if (!t?.token) {
3756
- D().info("[yoyoclaw-conn] no token available, treating as logout"), $();
3747
+ O().info("[yoyoclaw-conn] no token available, treating as logout"), $();
3757
3748
  return;
3758
3749
  }
3759
3750
  try {
3760
- D().info("[yoyoclaw-conn] attempting to register device"), await Bt(e, t), D().info("[yoyoclaw-conn] device registered successfully, reconnecting..."), $(), await ii(e, t);
3751
+ O().info("[yoyoclaw-conn] attempting to register device"), await It(e, t), O().info("[yoyoclaw-conn] device registered successfully, reconnecting..."), $(), await ei(e, t);
3761
3752
  } catch (e) {
3762
- D().error(`[yoyoclaw-conn] device registration failed: ${String(e)}`), D().info("[yoyoclaw-conn] clearing token and destroying channel");
3753
+ O().error(`[yoyoclaw-conn] device registration failed: ${String(e)}`), O().info("[yoyoclaw-conn] clearing token and destroying channel");
3763
3754
  try {
3764
- await fn();
3755
+ await cn();
3765
3756
  } catch (e) {
3766
- D().error(`[yoyoclaw-conn] failed to clear token: ${String(e)}`);
3757
+ O().error(`[yoyoclaw-conn] failed to clear token: ${String(e)}`);
3767
3758
  }
3768
3759
  $();
3769
3760
  }
3770
3761
  },
3771
3762
  onUnauthorized: async () => {
3772
- D().warn("[yoyoclaw-conn] connection unauthorized (401), clearing token and destroying channel");
3763
+ O().warn("[yoyoclaw-conn] connection unauthorized (401), clearing token and destroying channel");
3773
3764
  try {
3774
- await fn();
3765
+ await cn();
3775
3766
  } catch (e) {
3776
- D().error(`[yoyoclaw-conn] failed to clear token: ${String(e)}`);
3767
+ O().error(`[yoyoclaw-conn] failed to clear token: ${String(e)}`);
3777
3768
  }
3778
3769
  $();
3779
3770
  },
@@ -3784,31 +3775,31 @@ async function ii(e, t) {
3784
3775
  try {
3785
3776
  Z.channel.start();
3786
3777
  } catch (e) {
3787
- Z.status = "idle", Z.channel = null, D().error(`[yoyoclaw-conn] failed to launch channel: ${String(e)}`), r(e);
3778
+ Z.status = "idle", Z.channel = null, O().error(`[yoyoclaw-conn] failed to launch channel: ${String(e)}`), r(e);
3788
3779
  }
3789
3780
  });
3790
3781
  }
3791
3782
  function $() {
3792
3783
  try {
3793
3784
  if (!Z.channel) {
3794
- D().warn("[yoyoclaw-conn] no channel to destroy");
3785
+ O().warn("[yoyoclaw-conn] no channel to destroy");
3795
3786
  return;
3796
3787
  }
3797
- D().info("[yoyoclaw-conn] destroying channel"), Z.channel.destroy(), Z.channel = null, Z.status = "idle", D().info("[yoyoclaw-conn] channel destroyed successfully");
3788
+ O().info("[yoyoclaw-conn] destroying channel"), Z.channel.destroy(), Z.channel = null, Z.status = "idle", O().info("[yoyoclaw-conn] channel destroyed successfully");
3798
3789
  } catch (e) {
3799
- D().error(`[yoyoclaw-conn] failed to destroy channel: ${String(e)}`);
3790
+ O().error(`[yoyoclaw-conn] failed to destroy channel: ${String(e)}`);
3800
3791
  }
3801
3792
  }
3802
3793
  //#endregion
3803
3794
  //#region index.ts
3804
- var ai = {
3795
+ var ti = {
3805
3796
  id: "yoyo",
3806
3797
  name: "YOYOClaw",
3807
3798
  description: "OpenClaw Honor Yoyo connection plugin",
3808
- configSchema: kn,
3799
+ configSchema: Tn,
3809
3800
  register(e) {
3810
- pe(e.runtime), Se(e.logger), e.registerService(ri(e)), e.on("before_prompt_build", async () => ({ prependSystemContext: En })), Tn(e);
3801
+ ce(e.runtime), _e(e.logger), e.registerService($r(e)), e.on("before_prompt_build", async () => ({ prependSystemContext: Sn })), xn(e);
3811
3802
  }
3812
3803
  };
3813
3804
  //#endregion
3814
- export { ai as default };
3805
+ export { ti as default };