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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -8,10 +8,10 @@ import d from "open";
8
8
  import { customAlphabet as f } from "nanoid";
9
9
  import { ProxyAgent as p, request as m } from "undici";
10
10
  import { HttpProxyAgent as ee } from "http-proxy-agent";
11
- import { HttpsProxyAgent as h } from "https-proxy-agent";
12
- import { createServer as g } from "http";
13
- import { URL as te, fileURLToPath as ne } from "node:url";
14
- import { createHash as re, randomBytes as ie } from "crypto";
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
15
  import _, { createHash as ae, randomUUID as oe } from "node:crypto";
16
16
  import v from "node:fs/promises";
17
17
  import se from "node:os";
@@ -238,7 +238,7 @@ function je(e, t) {
238
238
  }
239
239
  //#endregion
240
240
  //#region src/modules/configs/config-manager.ts
241
- var A = "yoyo", Me = /* @__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(","), Ne = class {
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 {
242
242
  loadConfig() {
243
243
  try {
244
244
  return me().config.loadConfig();
@@ -479,14 +479,18 @@ var A = "yoyo", Me = /* @__PURE__ */ "alarm.create,alarm.delete,alarm.disable,al
479
479
  }
480
480
  async initializePluginConfig(e) {
481
481
  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, ...Me])), o = t.plugins?.entries?.[e]?.config?.envInfo, s = t.plugins?.entries?.[e]?.config?.env, c = !!(o?.env || s), l = be(), u = !!o?.env && o.source === "env", d = !o?.env && !!s || u && l && o.env !== l, f = !c || d, p = {
483
- env: l || s || (de() ? "test" : "production"),
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 : {
483
+ ...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"),
484
488
  source: "env"
485
- }, m = t.plugins?.entries?.[e]?.config || {}, ee = f ? {
486
- ...m,
487
- envInfo: p,
489
+ }, ne = t.plugins?.entries?.[e]?.config || {}, re = ee ? {
490
+ ...ne,
491
+ envInfo: te,
488
492
  env: void 0
489
- } : m, h = Ce(t);
493
+ } : ne, h = Ce(t);
490
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(", ")}`);
491
495
  let g = {
492
496
  ...t,
@@ -498,7 +502,7 @@ var A = "yoyo", Me = /* @__PURE__ */ "alarm.create,alarm.delete,alarm.disable,al
498
502
  [e]: {
499
503
  ...t.plugins?.entries?.[e],
500
504
  enabled: !0,
501
- config: ee
505
+ config: re
502
506
  }
503
507
  }
504
508
  },
@@ -508,6 +512,10 @@ var A = "yoyo", Me = /* @__PURE__ */ "alarm.create,alarm.delete,alarm.disable,al
508
512
  ...t.gateway?.nodes,
509
513
  allowCommands: a
510
514
  }
515
+ },
516
+ skills: {
517
+ ...o,
518
+ load: c
511
519
  }
512
520
  };
513
521
  Object.keys(h).length > 0 && (g = we(g, h), D().info("[claw-configs] Provider renaming completed")), await this.saveConfig(g);
@@ -515,17 +523,17 @@ var A = "yoyo", Me = /* @__PURE__ */ "alarm.create,alarm.delete,alarm.disable,al
515
523
  throw E(e, "failed to initialize plugin config");
516
524
  }
517
525
  }
518
- }, Pe = null;
526
+ }, Ie = null;
519
527
  function j() {
520
- return Pe ||= new Ne(), Pe;
528
+ return Ie ||= new Fe(), Ie;
521
529
  }
522
530
  //#endregion
523
531
  //#region src/commands/env/impl.ts
524
- var Fe = {
532
+ var Le = {
525
533
  env: "environment variable",
526
534
  manual: "manual config"
527
535
  };
528
- function Ie(e, t) {
536
+ function Re(e, t) {
529
537
  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) => {
530
538
  let { set: t, gray: n, reset: r } = e, i = D();
531
539
  try {
@@ -539,7 +547,7 @@ function Ie(e, t) {
539
547
  }
540
548
  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) {
541
549
  let t = e.getEnvInfo(), n = e.getGrayTag();
542
- i.info(`📋 Current environment: ${t.env} (source: ${Fe[t.source]})`), n ? i.info(`📋 Current gray tag: ${n}`) : i.info("📋 Gray tag: not set");
550
+ i.info(`📋 Current environment: ${t.env} (source: ${Le[t.source]})`), n ? i.info(`📋 Current gray tag: ${n}`) : i.info("📋 Gray tag: not set");
543
551
  }
544
552
  } catch (e) {
545
553
  let t = e instanceof Error ? e.message : String(e);
@@ -549,18 +557,18 @@ function Ie(e, t) {
549
557
  }
550
558
  //#endregion
551
559
  //#region src/utils/id.ts
552
- var Le = f("0123456789abcdefghijklmnopqrstuvwxyz", 32);
560
+ var ze = f("0123456789abcdefghijklmnopqrstuvwxyz", 32);
553
561
  function M(e) {
554
- return Le(e);
562
+ return ze(e);
555
563
  }
556
564
  //#endregion
557
565
  //#region src/apis/helpers.ts
558
- function Re(e) {
566
+ function Be(e) {
559
567
  return e.status >= 200 && e.status < 300 && e.data.code === "1";
560
568
  }
561
569
  //#endregion
562
570
  //#region src/apis/hosts.ts
563
- function ze() {
571
+ function Ve() {
564
572
  let e = he(), t;
565
573
  switch (e.env) {
566
574
  case "dev":
@@ -586,33 +594,33 @@ function ze() {
586
594
  }
587
595
  //#endregion
588
596
  //#region src/utils/proxy.ts
589
- function Be(e) {
597
+ function He(e) {
590
598
  return e || process.env.HTTP_PROXY || process.env.http_proxy || process.env.HTTPS_PROXY || process.env.https_proxy;
591
599
  }
592
- function Ve(e, t) {
600
+ function Ue(e, t) {
593
601
  return !t && !!e;
594
602
  }
595
- function He(e, t) {
596
- let n = Be(t);
603
+ function We(e, t) {
604
+ let n = He(t);
597
605
  if (n) {
598
- if (e.startsWith("wss://")) return new h(n);
606
+ if (e.startsWith("wss://")) return new te(n);
599
607
  if (e.startsWith("ws://")) return new ee(n);
600
608
  }
601
609
  }
602
610
  //#endregion
603
611
  //#region src/apis/http-client.ts
604
- var Ue = class extends Error {
612
+ var Ge = class extends Error {
605
613
  constructor(e, t, n) {
606
614
  super(n), this.status = e, this.data = t, this.name = "HttpError";
607
615
  }
608
- }, We = class {
616
+ }, Ke = class {
609
617
  baseUrl;
610
618
  defaultHeaders;
611
619
  defaultTimeout;
612
620
  proxyAgent;
613
621
  constructor(e, t) {
614
622
  this.baseUrl = e.replace(/\/$/, ""), this.defaultHeaders = t?.defaultHeaders || {}, this.defaultTimeout = t?.defaultTimeout || 3e4;
615
- let n = Be(t?.proxy);
623
+ let n = He(t?.proxy);
616
624
  n && (this.proxyAgent = new p(n));
617
625
  }
618
626
  async request(e) {
@@ -633,7 +641,7 @@ var Ue = class extends Error {
633
641
  let c;
634
642
  r != null && (c = typeof r == "string" ? r : JSON.stringify(r));
635
643
  try {
636
- let n = Ve(Be(), e.disableProxy) && this.proxyAgent ? this.proxyAgent : void 0, r = await m(o, {
644
+ let n = Ue(He(), e.disableProxy) && this.proxyAgent ? this.proxyAgent : void 0, r = await m(o, {
637
645
  method: t,
638
646
  headers: s,
639
647
  body: c,
@@ -651,9 +659,9 @@ var Ue = class extends Error {
651
659
  status: r.statusCode,
652
660
  headers: r.headers
653
661
  };
654
- throw new Ue(r.statusCode, l, `HTTP request failed with status ${r.statusCode}`);
662
+ throw new Ge(r.statusCode, l, `HTTP request failed with status ${r.statusCode}`);
655
663
  } catch (e) {
656
- throw e instanceof Ue ? e : E(e, "HTTP request failed");
664
+ throw e instanceof Ge ? e : E(e, "HTTP request failed");
657
665
  }
658
666
  }
659
667
  async get(e, t) {
@@ -691,10 +699,10 @@ var Ue = class extends Error {
691
699
  method: "PATCH"
692
700
  });
693
701
  }
694
- }, Ge = class {
702
+ }, qe = class {
695
703
  httpClient;
696
704
  constructor(e, t) {
697
- this.httpClient = new We(e, t);
705
+ this.httpClient = new Ke(e, t);
698
706
  }
699
707
  async registerDevice(e, t, n) {
700
708
  let r = {
@@ -750,28 +758,25 @@ var Ue = class extends Error {
750
758
  headers: r,
751
759
  timeout: 15e3
752
760
  });
753
- if (Re(a) && a.data.data) return a.data.data;
761
+ if (Be(a) && a.data.data) return a.data.data;
754
762
  throw Error(`failed to get token: ${JSON.stringify(a.data)}, traceId: ${n}`);
755
763
  }
756
764
  };
757
765
  function N() {
758
- let e = ze();
759
- return new Ge(`https://${e.clawCloud}/aicloud/yoyo-claw-service`, e.grayTag ? { defaultHeaders: { "x-gray": e.grayTag } } : void 0);
766
+ let e = Ve();
767
+ return new qe(`https://${e.clawCloud}/aicloud/yoyo-claw-service`, e.grayTag ? { defaultHeaders: { "x-gray": e.grayTag } } : void 0);
760
768
  }
761
769
  //#endregion
762
770
  //#region src/honor-auth/assets/favicon.png
763
- var Ke = "data:image/png;base64,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", qe = "data:image/png;base64,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", Je = "<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>", 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=\"M24.5 24.5L39.5 39.5M39.5 24.5L24.5 39.5\" stroke=\"white\" stroke-width=\"4.5\" stroke-linecap=\"round\"/></svg>", Xe = {
764
- favicon: "/favicon.png",
765
- yoyoLogo: "/yoyo-logo.png"
766
- };
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" };
767
772
  function P(e) {
768
773
  return e.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;").replaceAll("'", "&#39;");
769
774
  }
770
- function Ze(e) {
775
+ function Qe(e) {
771
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>`;
772
777
  }
773
778
  function F(e) {
774
- let t = e.statusClass === "success" ? Je : Ye;
779
+ let t = e.statusClass === "success" ? Ye : Xe;
775
780
  return `<!doctype html>
776
781
  <html lang="zh-CN">
777
782
  <head>
@@ -959,12 +964,11 @@ function F(e) {
959
964
  <body>
960
965
  <main class="card">
961
966
  <div class="brand">
962
- <img class="brand-logo" src="data:image/png;base64,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" alt="" />
963
967
  <span>YOYOClaw</span>
964
968
  </div>
965
969
  <div class="icon-wrap ${e.statusClass}">${t}</div>
966
970
  <h1>${P(e.title)}</h1>
967
- ${Ze(e.details)}
971
+ ${Qe(e.details)}
968
972
  <div class="footer">
969
973
  <p class="hint">${P(e.hintText)}</p>
970
974
  <p class="caption">浏览器不会自动关闭当前页面,保留或稍后关闭都不影响登录结果。</p>
@@ -975,12 +979,9 @@ function F(e) {
975
979
  }
976
980
  //#endregion
977
981
  //#region src/honor-auth/callback-server.ts
978
- var Qe = {
979
- "favicon.png": Ke,
980
- "yoyo-logo.png": qe
981
- };
982
- function $e(e, t) {
983
- let n = Qe[t];
982
+ var $e = { "favicon.png": Je };
983
+ function et(e, t) {
984
+ let n = $e[t];
984
985
  if (!n) {
985
986
  e.writeHead(404), e.end();
986
987
  return;
@@ -991,7 +992,7 @@ function $e(e, t) {
991
992
  "Cache-Control": "public, max-age=3600"
992
993
  }), e.end(i);
993
994
  }
994
- function et(e) {
995
+ function tt(e) {
995
996
  return new Promise((t, n) => {
996
997
  let { port: r, timeout: i = 6e5, onCodeReceived: a, onError: o } = e, s = null, c = !1, l = !1, u = !1, d = () => {
997
998
  c || (c = !0, s && clearTimeout(s), m.close());
@@ -1001,9 +1002,9 @@ function et(e) {
1001
1002
  setTimeout(() => {
1002
1003
  d();
1003
1004
  }, e);
1004
- }, m = g((e, t) => {
1005
+ }, m = ne((e, t) => {
1005
1006
  try {
1006
- let n = new te(e.url || "", `http://localhost:${r}`);
1007
+ let n = new re(e.url || "", `http://localhost:${r}`);
1007
1008
  if (e.method !== "GET") {
1008
1009
  t.writeHead(405, { "Content-Type": "text/html; charset=utf-8" }), t.end(F({
1009
1010
  pageTitle: "请求方式不支持",
@@ -1013,12 +1014,8 @@ function et(e) {
1013
1014
  }));
1014
1015
  return;
1015
1016
  }
1016
- if (n.pathname === "/favicon.ico" || n.pathname === Xe.favicon) {
1017
- $e(t, "favicon.png");
1018
- return;
1019
- }
1020
- if (n.pathname === Xe.yoyoLogo) {
1021
- $e(t, "yoyo-logo.png");
1017
+ if (n.pathname === "/favicon.ico" || n.pathname === Ze.favicon) {
1018
+ et(t, "favicon.png");
1022
1019
  return;
1023
1020
  }
1024
1021
  let i = n.searchParams.get("code") || "", o = n.searchParams.get("error") || "", s = n.searchParams.get("error_description") || n.searchParams.get("error_message") || "";
@@ -1078,7 +1075,7 @@ function et(e) {
1078
1075
  }
1079
1076
  //#endregion
1080
1077
  //#region src/honor-auth/config.ts
1081
- var tt = {
1078
+ var nt = {
1082
1079
  authHost: "https://hnoauth-login-test-drcn.cloud.honor.com",
1083
1080
  clientId: "221641491",
1084
1081
  redirectUri: "http://127.0.0.1:8081/deepLink",
@@ -1086,7 +1083,7 @@ var tt = {
1086
1083
  scope: "openid profile",
1087
1084
  reqClientType: "110",
1088
1085
  loginChannel: "99011000"
1089
- }, nt = {
1086
+ }, rt = {
1090
1087
  authHost: "https://hnoauth-login-drcn.cloud.honor.com",
1091
1088
  clientId: "221000597",
1092
1089
  redirectUri: "http://127.0.0.1:8081/deepLink",
@@ -1095,15 +1092,15 @@ var tt = {
1095
1092
  reqClientType: "110",
1096
1093
  loginChannel: "99011000"
1097
1094
  };
1098
- function rt(e) {
1095
+ function it(e) {
1099
1096
  return {
1100
- ...he()?.env === "production" ? nt : tt,
1097
+ ...he()?.env === "production" ? rt : nt,
1101
1098
  ...e
1102
1099
  };
1103
1100
  }
1104
1101
  //#endregion
1105
1102
  //#region src/honor-auth/honor-auth-client.ts
1106
- var it = class {
1103
+ var at = class {
1107
1104
  config;
1108
1105
  constructor(e) {
1109
1106
  this.config = e;
@@ -1119,7 +1116,7 @@ var it = class {
1119
1116
  return n;
1120
1117
  }
1121
1118
  generateCodeChallenge(e) {
1122
- return re("sha256").update(e).digest().toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
1119
+ return g("sha256").update(e).digest().toString("base64").replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
1123
1120
  }
1124
1121
  generatePKCEParams() {
1125
1122
  let e = this.generateCodeVerifier();
@@ -1147,8 +1144,8 @@ var it = class {
1147
1144
  return { ...this.config };
1148
1145
  }
1149
1146
  };
1150
- function at(e) {
1151
- return new it(e);
1147
+ function ot(e) {
1148
+ return new at(e);
1152
1149
  }
1153
1150
  //#endregion
1154
1151
  //#region src/utils/fs-safe.ts
@@ -1157,53 +1154,53 @@ var I = class extends Error {
1157
1154
  constructor(e, t, n) {
1158
1155
  super(t, n), this.code = e, this.name = "SafeFsError";
1159
1156
  }
1160
- }, ot = new Set(["ENOENT", "ENOTDIR"]), st = new Set([
1157
+ }, st = new Set(["ENOENT", "ENOTDIR"]), ct = new Set([
1161
1158
  "ELOOP",
1162
1159
  "EINVAL",
1163
1160
  "ENOTSUP"
1164
1161
  ]);
1165
- function ct(e) {
1162
+ function lt(e) {
1166
1163
  return !!(e && typeof e == "object" && "code" in e);
1167
1164
  }
1168
1165
  function L(e) {
1169
- return ct(e) && typeof e.code == "string" && ot.has(e.code);
1170
- }
1171
- function lt(e) {
1172
- return ct(e) && typeof e.code == "string" && st.has(e.code);
1166
+ return lt(e) && typeof e.code == "string" && st.has(e.code);
1173
1167
  }
1174
1168
  function ut(e) {
1169
+ return lt(e) && typeof e.code == "string" && ct.has(e.code);
1170
+ }
1171
+ function dt(e) {
1175
1172
  let t = u.win32.normalize(e);
1176
1173
  return t.startsWith("\\\\?\\") && (t = t.slice(4), t.toUpperCase().startsWith("UNC\\") && (t = `\\\\${t.slice(4)}`)), t.replaceAll("/", "\\").toLowerCase();
1177
1174
  }
1178
1175
  function R(e, t) {
1179
1176
  let n = u.resolve(e), r = u.resolve(t);
1180
1177
  if (process.platform === "win32") {
1181
- let e = ut(n), t = ut(r), i = u.win32.relative(e, t);
1178
+ let e = dt(n), t = dt(r), i = u.win32.relative(e, t);
1182
1179
  return i === "" || !i.startsWith("..") && !u.win32.isAbsolute(i);
1183
1180
  }
1184
1181
  let i = u.relative(n, r);
1185
1182
  return i === "" || !i.startsWith("..") && !u.isAbsolute(i);
1186
1183
  }
1187
- function dt(e) {
1184
+ function ft(e) {
1188
1185
  return e === 0 || e === 0n;
1189
1186
  }
1190
1187
  function z(e, t, n = process.platform) {
1191
- return e.ino === t.ino ? e.dev === t.dev ? !0 : n === "win32" && (dt(e.dev) || dt(t.dev)) : !1;
1188
+ return e.ino === t.ino ? e.dev === t.dev ? !0 : n === "win32" && (ft(e.dev) || ft(t.dev)) : !1;
1192
1189
  }
1193
- var ft = process.platform !== "win32" && "O_NOFOLLOW" in c, pt = c.O_RDONLY | (ft ? c.O_NOFOLLOW : 0), mt = c.O_WRONLY | c.O_CREAT | c.O_EXCL | (ft ? c.O_NOFOLLOW : 0), ht = c.O_WRONLY | c.O_APPEND | (ft ? c.O_NOFOLLOW : 0), gt = (e) => e.endsWith(u.sep) ? e : e + u.sep;
1194
- function _t(e, t) {
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) {
1195
1192
  if (!e.startsWith("~")) return e;
1196
1193
  let n = t ?? process.env.HOME ?? process.env.USERPROFILE ?? se.homedir();
1197
1194
  return n ? e.replace(/^~(?=$|[\\/])/, n) : e;
1198
1195
  }
1199
- async function vt(e) {
1196
+ async function yt(e) {
1200
1197
  let t;
1201
1198
  try {
1202
1199
  t = await v.realpath(e.rootDir);
1203
1200
  } catch (e) {
1204
1201
  throw L(e) ? new I("not-found", "root dir not found") : e;
1205
1202
  }
1206
- let n = gt(t), r = _t(e.relativePath), i = u.resolve(n, r);
1203
+ let n = _t(t), r = vt(e.relativePath), i = u.resolve(n, r);
1207
1204
  if (!R(n, i)) throw new I("outside-root", "file is outside workspace root");
1208
1205
  return {
1209
1206
  rootReal: t,
@@ -1211,7 +1208,7 @@ async function vt(e) {
1211
1208
  resolved: i
1212
1209
  };
1213
1210
  }
1214
- async function yt(e, t) {
1211
+ async function bt(e, t) {
1215
1212
  try {
1216
1213
  if ((await v.lstat(e)).isDirectory()) throw new I("not-file", "not a file");
1217
1214
  } catch (e) {
@@ -1219,19 +1216,19 @@ async function yt(e, t) {
1219
1216
  }
1220
1217
  let n;
1221
1218
  try {
1222
- n = await v.open(e, pt);
1219
+ n = await v.open(e, mt);
1223
1220
  } catch (e) {
1224
- throw L(e) ? new I("not-found", "file not found") : lt(e) ? new I("symlink", "symlink open blocked", { cause: e }) : ct(e) && e.code === "EISDIR" ? new I("not-file", "not a file") : 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;
1225
1222
  }
1226
1223
  try {
1227
1224
  let [r, i] = await Promise.all([n.stat(), v.lstat(e)]);
1228
1225
  if (i.isSymbolicLink()) throw new I("symlink", "symlink not allowed");
1229
1226
  if (!r.isFile()) throw new I("not-file", "not a file");
1230
1227
  if (t?.rejectHardlinks && r.nlink > 1) throw new I("invalid-path", "hardlinked path not allowed");
1231
- if (!z(r, i)) throw new I("path-mismatch", "path changed during read");
1228
+ if (process.platform !== "win32" && !z(r, i)) throw new I("path-mismatch", "path changed during read");
1232
1229
  let a = await v.realpath(e), o = await v.stat(a);
1233
1230
  if (t?.rejectHardlinks && o.nlink > 1) throw new I("invalid-path", "hardlinked path not allowed");
1234
- if (!z(r, o)) throw new I("path-mismatch", "path mismatch");
1231
+ if (process.platform !== "win32" && !z(r, o)) throw new I("path-mismatch", "path mismatch");
1235
1232
  return {
1236
1233
  handle: n,
1237
1234
  realPath: a,
@@ -1241,8 +1238,8 @@ async function yt(e, t) {
1241
1238
  throw await n.close().catch(() => {}), e instanceof I ? e : L(e) ? new I("not-found", "file not found") : e;
1242
1239
  }
1243
1240
  }
1244
- async function bt(e) {
1245
- let { rootWithSep: t, resolved: n } = await vt(e), r = await yt(n);
1241
+ async function xt(e) {
1242
+ let { rootWithSep: t, resolved: n } = await yt(e), r = await bt(n);
1246
1243
  if (!R(t, r.realPath)) throw await r.handle.close().catch(() => {}), new I("outside-root", "file is outside workspace root");
1247
1244
  try {
1248
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})`);
@@ -1255,29 +1252,29 @@ async function bt(e) {
1255
1252
  await r.handle.close().catch(() => {});
1256
1253
  }
1257
1254
  }
1258
- function xt(e) {
1255
+ function St(e) {
1259
1256
  let t = u.dirname(e), n = u.basename(e);
1260
1257
  return u.join(t, `.${n}.${process.pid}.${oe()}.tmp`);
1261
1258
  }
1262
- async function St(e) {
1263
- let t = await v.open(e.tempPath, mt, e.mode);
1259
+ async function Ct(e) {
1260
+ let t = await v.open(e.tempPath, ht, e.mode);
1264
1261
  try {
1265
1262
  return typeof e.data == "string" ? await t.writeFile(e.data, e.encoding ?? "utf8") : await t.writeFile(e.data), await t.stat();
1266
1263
  } finally {
1267
1264
  await t.close().catch(() => {});
1268
1265
  }
1269
1266
  }
1270
- async function Ct(e) {
1271
- let t = gt(await v.realpath(e.rootDir)), n = await yt(e.targetPath, { rejectHardlinks: !0 });
1267
+ async function wt(e) {
1268
+ let t = _t(await v.realpath(e.rootDir)), n = await bt(e.targetPath, { rejectHardlinks: !0 });
1272
1269
  try {
1273
- if (!z(n.stat, e.expectedStat)) throw new I("path-mismatch", "path changed during write");
1270
+ if (process.platform !== "win32" && !z(n.stat, e.expectedStat)) throw new I("path-mismatch", "path changed during write");
1274
1271
  if (!R(t, n.realPath)) throw new I("outside-root", "file is outside workspace root");
1275
1272
  } finally {
1276
1273
  await n.handle.close().catch(() => {});
1277
1274
  }
1278
1275
  }
1279
1276
  async function B(e) {
1280
- let { rootWithSep: t, resolved: n } = await vt(e);
1277
+ let { rootWithSep: t, resolved: n } = await yt(e);
1281
1278
  e.mkdir !== !1 && await v.mkdir(u.dirname(n), { recursive: !0 });
1282
1279
  let r = n, i = !1;
1283
1280
  try {
@@ -1289,13 +1286,13 @@ async function B(e) {
1289
1286
  }
1290
1287
  let a = e.mode === "append";
1291
1288
  if (a && !i) throw new I("not-found", "cannot append to non-existent file");
1292
- return a ? await wt({
1289
+ return a ? await Tt({
1293
1290
  ioPath: r,
1294
1291
  rootWithSep: t,
1295
1292
  data: e.data,
1296
1293
  encoding: e.encoding,
1297
1294
  maxBytes: e.maxBytes
1298
- }) : await Tt({
1295
+ }) : await Et({
1299
1296
  ioPath: r,
1300
1297
  rootWithSep: t,
1301
1298
  rootDir: e.rootDir,
@@ -1305,12 +1302,12 @@ async function B(e) {
1305
1302
  fileMode: 384
1306
1303
  });
1307
1304
  }
1308
- async function wt(e) {
1305
+ async function Tt(e) {
1309
1306
  let t;
1310
1307
  try {
1311
- t = await v.open(e.ioPath, ht);
1308
+ t = await v.open(e.ioPath, gt);
1312
1309
  } catch (e) {
1313
- throw L(e) ? new I("not-found", "file not found") : lt(e) ? new I("symlink", "symlink open blocked", { cause: e }) : e;
1310
+ throw L(e) ? new I("not-found", "file not found") : ut(e) ? new I("symlink", "symlink open blocked", { cause: e }) : e;
1314
1311
  }
1315
1312
  try {
1316
1313
  let n = await t.stat();
@@ -1331,11 +1328,11 @@ async function wt(e) {
1331
1328
  await t.close().catch(() => {});
1332
1329
  }
1333
1330
  }
1334
- async function Tt(e) {
1331
+ async function Et(e) {
1335
1332
  let t = null, n = e.ioPath;
1336
1333
  try {
1337
- t = xt(n);
1338
- let r = await St({
1334
+ t = St(n);
1335
+ let r = await Ct({
1339
1336
  tempPath: t,
1340
1337
  data: e.data,
1341
1338
  encoding: e.encoding,
@@ -1343,13 +1340,13 @@ async function Tt(e) {
1343
1340
  });
1344
1341
  await v.rename(t, n), t = null;
1345
1342
  try {
1346
- await Ct({
1343
+ await wt({
1347
1344
  rootDir: e.rootDir,
1348
1345
  targetPath: n,
1349
1346
  expectedStat: r
1350
1347
  });
1351
1348
  } catch (e) {
1352
- throw new I("write-failed", `${JSON.stringify(e)}`);
1349
+ throw e instanceof I ? e : new I("write-failed", "atomic write verification failed", { cause: e });
1353
1350
  }
1354
1351
  return {
1355
1352
  realPath: n,
@@ -1365,30 +1362,30 @@ async function Tt(e) {
1365
1362
  function V(e) {
1366
1363
  return e?.trim() || void 0;
1367
1364
  }
1368
- function Et(e = import.meta.url) {
1369
- let t = u.dirname(ne(e));
1365
+ function Dt(e = import.meta.url) {
1366
+ let t = u.dirname(h(e));
1370
1367
  for (; t !== u.dirname(t);) {
1371
1368
  if (l(u.join(t, "package.json"))) return t;
1372
1369
  t = u.dirname(t);
1373
1370
  }
1374
1371
  return t;
1375
1372
  }
1376
- function Dt(e = process.env, t = se.homedir) {
1377
- let n = Ot(e, t);
1373
+ function Ot(e = process.env, t = se.homedir) {
1374
+ let n = kt(e, t);
1378
1375
  return n ? u.resolve(n) : void 0;
1379
1376
  }
1380
- function Ot(e, t) {
1377
+ function kt(e, t) {
1381
1378
  let n = V(e.OPENCLAW_HOME);
1382
1379
  if (n) {
1383
1380
  if (n === "~" || n.startsWith("~/") || n.startsWith("~\\")) {
1384
- let r = V(e.HOME) ?? V(e.USERPROFILE) ?? kt(t);
1381
+ let r = V(e.HOME) ?? V(e.USERPROFILE) ?? At(t);
1385
1382
  return r ? n.replace(/^~(?=$|[\\/])/, r) : void 0;
1386
1383
  }
1387
1384
  return n;
1388
1385
  }
1389
- return V(e.HOME) || V(e.USERPROFILE) || kt(t);
1386
+ return V(e.HOME) || V(e.USERPROFILE) || At(t);
1390
1387
  }
1391
- function kt(e) {
1388
+ function At(e) {
1392
1389
  try {
1393
1390
  return V(e());
1394
1391
  } catch {
@@ -1397,75 +1394,75 @@ function kt(e) {
1397
1394
  }
1398
1395
  //#endregion
1399
1396
  //#region src/modules/configs/identity-persist.ts
1400
- var At = /* @__PURE__ */ function(e) {
1397
+ var jt = /* @__PURE__ */ function(e) {
1401
1398
  return e[e.LEGACY = 1] = "LEGACY", e[e.NEW = 2] = "NEW", e;
1402
- }({}), jt = ".openclaw", Mt = "yoyo", Nt = "identity.json";
1403
- function Pt() {
1404
- return u.join(jt, Mt, Nt);
1399
+ }({}), Mt = ".openclaw", Nt = "yoyo", Pt = "identity.json";
1400
+ function Ft() {
1401
+ return u.join(Mt, Nt, Pt);
1405
1402
  }
1406
- async function Ft(e) {
1407
- let t = Pt();
1403
+ async function It(e) {
1404
+ let t = Ft();
1408
1405
  try {
1409
- let n = (await bt({
1406
+ let n = (await xt({
1410
1407
  rootDir: e,
1411
1408
  relativePath: t,
1412
1409
  maxBytes: 10 * 1024
1413
1410
  })).buffer.toString("utf8"), r = JSON.parse(n);
1414
- return typeof r != "object" || !r ? Rt() : {
1415
- ...Rt(),
1411
+ return typeof r != "object" || !r ? zt() : {
1412
+ ...zt(),
1416
1413
  ...r
1417
1414
  };
1418
1415
  } catch (e) {
1419
1416
  return D().warn(`[yoyo-identity] failed to read identity: ${e.message}`), null;
1420
1417
  }
1421
1418
  }
1422
- async function It() {
1423
- let e = Dt();
1424
- return e ? await Ft(e) || null : (D().warn("[yoyo-identity] failed to find home dir"), null);
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);
1425
1422
  }
1426
- async function Lt(e) {
1427
- let t = Dt();
1423
+ async function Rt(e) {
1424
+ let t = Ot();
1428
1425
  if (!t) return D().warn("[yoyo-identity] failed to find home dir"), null;
1429
- let n = await Ft(t), r = {
1426
+ let n = await It(t), r = {
1430
1427
  ...n,
1431
- version: n?.version || At.NEW
1428
+ version: n?.version || jt.NEW
1432
1429
  };
1433
1430
  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({
1434
1431
  rootDir: t,
1435
- relativePath: Pt(),
1432
+ relativePath: Ft(),
1436
1433
  data: JSON.stringify(r, null, 2),
1437
1434
  encoding: "utf8",
1438
1435
  mkdir: !0
1439
1436
  }), r;
1440
1437
  }
1441
- function Rt() {
1442
- return { version: At.NEW };
1438
+ function zt() {
1439
+ return { version: jt.NEW };
1443
1440
  }
1444
1441
  //#endregion
1445
1442
  //#region src/modules/device/registry.ts
1446
- async function zt(e, t) {
1443
+ async function Bt(e, t) {
1447
1444
  if (!e || !t) throw Error("设备信息或用户信息缺失");
1448
1445
  let n = j().getGatewayAuthConfig(), r = await N().registerDevice(e, t, n);
1449
- if (!Re(r)) throw Error(`注册失败:${r.data?.cnMessage}`);
1446
+ if (!Be(r)) throw Error(`注册失败:${r.data?.cnMessage}`);
1450
1447
  }
1451
1448
  //#endregion
1452
1449
  //#region src/modules/device/identity.ts
1453
1450
  var H = Buffer.from("302a300506032b6570032100", "hex");
1454
- function Bt(e) {
1451
+ function Vt(e) {
1455
1452
  return e.toString("base64").replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/g, "");
1456
1453
  }
1457
- function Vt(e) {
1454
+ function Ht(e) {
1458
1455
  let t = _.createPublicKey(e).export({
1459
1456
  type: "spki",
1460
1457
  format: "der"
1461
1458
  });
1462
1459
  return t.length === H.length + 32 && t.subarray(0, H.length).equals(H) ? t.subarray(H.length) : t;
1463
1460
  }
1464
- function Ht(e) {
1465
- let t = Vt(e);
1461
+ function Ut(e) {
1462
+ let t = Ht(e);
1466
1463
  return _.createHash("sha256").update(t).digest("hex");
1467
1464
  }
1468
- async function Ut() {
1465
+ async function Wt() {
1469
1466
  let { publicKey: e, privateKey: t } = _.generateKeyPairSync("ed25519"), n = e.export({
1470
1467
  type: "spki",
1471
1468
  format: "pem"
@@ -1474,17 +1471,17 @@ async function Ut() {
1474
1471
  format: "pem"
1475
1472
  }).toString();
1476
1473
  return {
1477
- deviceId: Ht(n),
1474
+ deviceId: Ut(n),
1478
1475
  publicKeyPem: n,
1479
1476
  privateKeyPem: r,
1480
1477
  createdAtMs: Date.now()
1481
1478
  };
1482
1479
  }
1483
- async function Wt() {
1484
- let e = await It();
1480
+ async function Gt() {
1481
+ let e = await Lt();
1485
1482
  if (e && e.deviceId && e.publicKeyPem && e.privateKeyPem && e.createdAtMs) {
1486
- let t = e.deviceId, n = Ht(e.publicKeyPem);
1487
- return n && n !== e.deviceId && (await Lt({
1483
+ let t = e.deviceId, n = Ut(e.publicKeyPem);
1484
+ return n && n !== e.deviceId && (await Rt({
1488
1485
  ...e,
1489
1486
  deviceId: n
1490
1487
  }), t = n), {
@@ -1495,29 +1492,29 @@ async function Wt() {
1495
1492
  createdAtMs: e.createdAtMs
1496
1493
  };
1497
1494
  }
1498
- let t = await Ut();
1499
- return await Lt(t), t;
1495
+ let t = await Wt();
1496
+ return await Rt(t), t;
1500
1497
  }
1501
- function Gt(e, t) {
1498
+ function Kt(e, t) {
1502
1499
  let n = _.createPrivateKey(e);
1503
- return Bt(_.sign(null, Buffer.from(t, "utf8"), n));
1500
+ return Vt(_.sign(null, Buffer.from(t, "utf8"), n));
1504
1501
  }
1505
- function Kt(e) {
1506
- return Bt(Vt(e));
1502
+ function qt(e) {
1503
+ return Vt(Ht(e));
1507
1504
  }
1508
1505
  //#endregion
1509
1506
  //#region src/modules/device/providers/linux.ts
1510
- function qt(t) {
1507
+ function Jt(t) {
1511
1508
  try {
1512
1509
  return e.existsSync(t) ? e.readFileSync(t, "utf-8").trim() : "";
1513
1510
  } catch {
1514
1511
  return "";
1515
1512
  }
1516
1513
  }
1517
- var Jt = class {
1514
+ var Yt = class {
1518
1515
  async ensureInitialized() {}
1519
1516
  getLinuxDeviceModel() {
1520
- return qt("/sys/class/dmi/id/product_name") || qt("/sys/class/dmi/id/board_name") || `${y.cpus()[0]?.model || "Linux PC"} (${y.arch()})`;
1517
+ return Jt("/sys/class/dmi/id/product_name") || Jt("/sys/class/dmi/id/board_name") || `${y.cpus()[0]?.model || "Linux PC"} (${y.arch()})`;
1521
1518
  }
1522
1519
  getLinuxDeviceName() {
1523
1520
  return `${y.hostname()} (${this.getLinuxDeviceModel()})`;
@@ -1534,7 +1531,7 @@ var Jt = class {
1534
1531
  getDeviceType() {
1535
1532
  return "pc";
1536
1533
  }
1537
- }, Yt = class {
1534
+ }, Xt = class {
1538
1535
  async ensureInitialized() {}
1539
1536
  getMacOSDeviceModel() {
1540
1537
  return `${y.cpus()[0]?.model || "Mac"} (${y.machine?.() || y.arch()})`;
@@ -1554,7 +1551,7 @@ var Jt = class {
1554
1551
  getDeviceType() {
1555
1552
  return "pc";
1556
1553
  }
1557
- }, Xt = le(ce), Zt = class {
1554
+ }, Zt = le(ce), Qt = class {
1558
1555
  cache = {
1559
1556
  brand: "",
1560
1557
  model: "",
@@ -1569,7 +1566,7 @@ var Jt = class {
1569
1566
  }
1570
1567
  async execAndroidCmd(e, t = 5e3) {
1571
1568
  try {
1572
- let { stdout: n } = await Xt("/system/bin/sh", ["-c", e], {
1569
+ let { stdout: n } = await Zt("/system/bin/sh", ["-c", e], {
1573
1570
  timeout: t,
1574
1571
  encoding: "utf-8"
1575
1572
  });
@@ -1631,7 +1628,7 @@ function U(e, t, n) {
1631
1628
  }
1632
1629
  });
1633
1630
  }
1634
- function Qt(e, t) {
1631
+ function $t(e, t) {
1635
1632
  return new Promise((n) => {
1636
1633
  try {
1637
1634
  new b({
@@ -1645,7 +1642,7 @@ function Qt(e, t) {
1645
1642
  }
1646
1643
  });
1647
1644
  }
1648
- var $t = class {
1645
+ var en = class {
1649
1646
  cache = { deviceBrand: "" };
1650
1647
  initPromise;
1651
1648
  constructor() {
@@ -1667,7 +1664,7 @@ var $t = class {
1667
1664
  t,
1668
1665
  n,
1669
1666
  r
1670
- ].find((e) => e && e.toLowerCase().includes("honor")) || await Qt(b.HKLM, "\\SOFTWARE\\HONOR\\PCManager") ? this.cache.deviceBrand = "HONOR" : this.cache.deviceBrand = "";
1667
+ ].find((e) => e && e.toLowerCase().includes("honor")) || await $t(b.HKLM, "\\SOFTWARE\\HONOR\\PCManager") ? this.cache.deviceBrand = "HONOR" : this.cache.deviceBrand = "";
1671
1668
  } catch {
1672
1669
  this.cache.deviceBrand = "";
1673
1670
  }
@@ -1693,7 +1690,7 @@ var $t = class {
1693
1690
  };
1694
1691
  //#endregion
1695
1692
  //#region src/modules/device/providers/index.ts
1696
- function en() {
1693
+ function tn() {
1697
1694
  let e = process.platform;
1698
1695
  if (e === "win32") return "windows";
1699
1696
  if (e === "linux") {
@@ -1704,21 +1701,21 @@ function en() {
1704
1701
  }
1705
1702
  return e === "darwin" ? "macos" : "linux";
1706
1703
  }
1707
- function tn() {
1708
- switch (en()) {
1709
- case "pad": return new Zt();
1710
- case "windows": return new $t();
1711
- case "linux": return new Jt();
1712
- case "macos": return new Yt();
1713
- default: return new Jt();
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();
1714
1711
  }
1715
1712
  }
1716
1713
  //#endregion
1717
1714
  //#region src/modules/device/device-info.ts
1718
1715
  async function W() {
1719
- let e = tn(), t = j();
1716
+ let e = nn(), t = j();
1720
1717
  await e.ensureInitialized();
1721
- let n = await Wt(), r = n.legacyDeviceId ?? n.deviceId, i = ve(), a = t.getDeviceConfig();
1718
+ let n = await Gt(), r = n.legacyDeviceId ?? n.deviceId, i = ve(), a = t.getDeviceConfig();
1722
1719
  D().debug?.(`[yoyoclaw-device] env: ${JSON.stringify(i)}, config: ${JSON.stringify(a)}`);
1723
1720
  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 = {
1724
1721
  deviceId: r,
@@ -1747,20 +1744,20 @@ async function W() {
1747
1744
  }
1748
1745
  //#endregion
1749
1746
  //#region src/modules/device/helpers.ts
1750
- function nn(e) {
1747
+ function rn(e) {
1751
1748
  return typeof e == "string" && e.trim() || "";
1752
1749
  }
1753
- function rn(e) {
1750
+ function an(e) {
1754
1751
  return e.replace(/[A-Z]/g, (e) => String.fromCharCode(e.charCodeAt(0) + 32));
1755
1752
  }
1756
- function an(e) {
1757
- let t = nn(e);
1758
- return t ? rn(t) : "";
1753
+ function on(e) {
1754
+ let t = rn(e);
1755
+ return t ? an(t) : "";
1759
1756
  }
1760
1757
  //#endregion
1761
1758
  //#region src/modules/device/auth.ts
1762
- function on(e) {
1763
- let t = e.scopes.join(","), n = e.token ?? "", r = an(e.platform), i = an(e.deviceFamily);
1759
+ function sn(e) {
1760
+ let t = e.scopes.join(","), n = e.token ?? "", r = on(e.platform), i = on(e.deviceFamily);
1764
1761
  return [
1765
1762
  "v3",
1766
1763
  e.deviceId,
@@ -1777,10 +1774,10 @@ function on(e) {
1777
1774
  }
1778
1775
  //#endregion
1779
1776
  //#region src/modules/device/credential-builder.ts
1780
- function sn(e) {
1777
+ function cn(e) {
1781
1778
  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;
1782
1779
  if (!t) return;
1783
- let d = on({
1780
+ let d = sn({
1784
1781
  deviceId: t.deviceId,
1785
1782
  clientId: n,
1786
1783
  clientMode: r,
@@ -1791,10 +1788,10 @@ function sn(e) {
1791
1788
  nonce: l,
1792
1789
  platform: o,
1793
1790
  deviceFamily: s
1794
- }), f = Gt(t.privateKeyPem, d);
1791
+ }), f = Kt(t.privateKeyPem, d);
1795
1792
  return {
1796
1793
  id: t.deviceId,
1797
- publicKey: Kt(t.publicKeyPem),
1794
+ publicKey: qt(t.publicKeyPem),
1798
1795
  signature: f,
1799
1796
  signedAt: u,
1800
1797
  nonce: l
@@ -1802,7 +1799,7 @@ function sn(e) {
1802
1799
  }
1803
1800
  //#endregion
1804
1801
  //#region src/honor-auth/token-manager.ts
1805
- async function cn(e, t = !0) {
1802
+ async function ln(e, t = !0) {
1806
1803
  try {
1807
1804
  let n = j(), r = e.jwtToken;
1808
1805
  if (!r && e.userId) {
@@ -1821,7 +1818,7 @@ async function cn(e, t = !0) {
1821
1818
  throw E(e, "保存Token失败");
1822
1819
  }
1823
1820
  }
1824
- async function ln(e) {
1821
+ async function un(e) {
1825
1822
  let t = await W(), n = await N().exchangeToken(t, { userId: e });
1826
1823
  if (n.jwtToken) {
1827
1824
  let e = Math.floor(Date.now() / 1e3) + 720 * 60 * 60;
@@ -1834,21 +1831,21 @@ async function ln(e) {
1834
1831
  }
1835
1832
  return await j().clearUserConfig(), null;
1836
1833
  }
1837
- async function un() {
1834
+ async function dn() {
1838
1835
  let e = D();
1839
1836
  try {
1840
1837
  let t = j(), n = t.getUserConfig(), r = ye();
1841
- 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 ln(r || n.userId);
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);
1842
1839
  if (n?.token) {
1843
1840
  if (!n.expired || n.expired >= Math.floor(Date.now() / 1e3)) return { token: n.token };
1844
1841
  e.debug?.("[yoyoclaw-auth] cached token expired");
1845
1842
  }
1846
- return r ? (e.debug?.("[yoyoclaw-auth] token expired, using env userId to exchange token"), await ln(r)) : (n?.token && (e.debug?.("[yoyoclaw-auth] clearing expired token"), await t.clearUserConfig()), null);
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);
1847
1844
  } catch (e) {
1848
1845
  throw E(e, "加载Token失败");
1849
1846
  }
1850
1847
  }
1851
- async function dn() {
1848
+ async function fn() {
1852
1849
  try {
1853
1850
  await j().clearUserConfig(), D().info("[yoyoclaw-auth] token cleared");
1854
1851
  } catch (e) {
@@ -1857,10 +1854,10 @@ async function dn() {
1857
1854
  }
1858
1855
  //#endregion
1859
1856
  //#region src/honor-auth/browser.ts
1860
- async function fn(e, t) {
1861
- let n = rt(t);
1857
+ async function pn(e, t) {
1858
+ let n = it(t);
1862
1859
  D().debug?.("Starting Honor login flow...");
1863
- let r = at(n), i = r.generatePKCEParams(), a = r.buildAuthUrl(i), o = null, s = et({
1860
+ let r = ot(n), i = r.generatePKCEParams(), a = r.buildAuthUrl(i), o = null, s = tt({
1864
1861
  port: n.localPort,
1865
1862
  timeout: 6e5,
1866
1863
  onCodeReceived: (e) => {
@@ -1888,31 +1885,31 @@ async function fn(e, t) {
1888
1885
  authConfig: n
1889
1886
  });
1890
1887
  if (!t?.jwtToken) throw Error("failed to get jwt token");
1891
- return await cn({ jwtToken: t.jwtToken }, n.saveToFile !== !1), { token: t.jwtToken };
1888
+ return await ln({ jwtToken: t.jwtToken }, n.saveToFile !== !1), { token: t.jwtToken };
1892
1889
  } catch (e) {
1893
1890
  throw E(e, "get token failed");
1894
1891
  }
1895
1892
  }
1896
1893
  //#endregion
1897
1894
  //#region src/honor-auth/cloud.ts
1898
- async function pn() {
1895
+ async function mn() {
1899
1896
  let e = j().getUserConfig();
1900
1897
  if (!e?.token) throw Error("⚠️ Not logged in");
1901
1898
  let t = await W(), n = N(), r = { token: e.token }, i = await n.logoutDevice(t, r);
1902
- if (!Re(i)) throw Error(i.data?.cnMessage || "Unknown error");
1903
- await dn();
1899
+ if (!Be(i)) throw Error(i.data?.cnMessage || "Unknown error");
1900
+ await fn();
1904
1901
  }
1905
1902
  //#endregion
1906
1903
  //#region src/modules/login/impl.ts
1907
- async function mn(e = {}) {
1904
+ async function hn(e = {}) {
1908
1905
  let { userId: t } = e, n = D();
1909
1906
  try {
1910
1907
  n.debug?.("Starting login process...");
1911
1908
  let e = await W(), r;
1912
- t ? (r = await cn({
1909
+ t ? (r = await ln({
1913
1910
  userId: t,
1914
1911
  deviceInfo: e
1915
- }), n.debug?.("Using provided user info"), n.debug?.(`User: ${t}`), n.debug?.(`Device ID: ${e?.deviceId}`)) : (n.debug?.("Starting OAuth2 authentication..."), r = await fn(e), n.debug?.("OAuth2 authentication successful"), n.debug?.(`Device ID: ${e?.deviceId}`)), console.log("📡 Registering device to Claw Cloud..."), await zt(e, r), console.log("✅ Device registered successfully"), console.log("🔗 Channel connection in progress, use 'openclaw honor status' to check device status");
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");
1916
1913
  } catch (e) {
1917
1914
  let t = e instanceof Error ? e.message : String(e);
1918
1915
  console.error("❌ Login process failed:", t);
@@ -1920,11 +1917,11 @@ async function mn(e = {}) {
1920
1917
  }
1921
1918
  //#endregion
1922
1919
  //#region src/commands/login/impl.ts
1923
- function hn(e, t) {
1920
+ function gn(e, t) {
1924
1921
  let n = t.command("login").description("login to yoyoclaw and register devices");
1925
1922
  return n = n.option("-u, --uid <userId>", "user ID for direct login").option("--token <token>", "token for direct login").action(async (t) => {
1926
1923
  let { uid: n, token: r } = t;
1927
- e.logger.debug?.("honor login CLI command called"), await mn({
1924
+ e.logger.debug?.("honor login CLI command called"), await hn({
1928
1925
  userId: n,
1929
1926
  token: r
1930
1927
  });
@@ -1932,11 +1929,11 @@ function hn(e, t) {
1932
1929
  }
1933
1930
  //#endregion
1934
1931
  //#region src/commands/logout/impl.ts
1935
- function gn(e, t) {
1932
+ function _n(e, t) {
1936
1933
  return t.command("logout").description("Logout and clear user configuration").action(async () => {
1937
1934
  e.logger.info("logout CLI command called");
1938
1935
  try {
1939
- await pn(), console.log("✅ Logout successful, gateway will automatically restart to handle new configuration");
1936
+ await mn(), console.log("✅ Logout successful, gateway will automatically restart to handle new configuration");
1940
1937
  } catch (e) {
1941
1938
  let t = e instanceof Error ? e.message : String(e);
1942
1939
  console.error("❌ Logout failed:", t);
@@ -1947,11 +1944,11 @@ function gn(e, t) {
1947
1944
  //#region src/services/connection/status-tracker/events.ts
1948
1945
  var G = /* @__PURE__ */ function(e) {
1949
1946
  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;
1950
- }({}), _n = class {
1947
+ }({}), vn = class {
1951
1948
  statusFilePath;
1952
1949
  statusDir;
1953
1950
  constructor() {
1954
- let e = Et();
1951
+ let e = Dt();
1955
1952
  this.statusDir = r.join(e, ".yoyo-cache"), this.statusFilePath = r.join(this.statusDir, "yoyo-status.json");
1956
1953
  }
1957
1954
  async save(e) {
@@ -1992,7 +1989,7 @@ var G = /* @__PURE__ */ function(e) {
1992
1989
  };
1993
1990
  //#endregion
1994
1991
  //#region src/services/connection/status-tracker/types.ts
1995
- function vn() {
1992
+ function yn() {
1996
1993
  return {
1997
1994
  status: "idle",
1998
1995
  updatedAt: (/* @__PURE__ */ new Date()).toISOString(),
@@ -2027,13 +2024,13 @@ function vn() {
2027
2024
  }
2028
2025
  //#endregion
2029
2026
  //#region src/services/connection/status-tracker/tracker.ts
2030
- var yn = class {
2027
+ var bn = class {
2031
2028
  currentStatus;
2032
2029
  storage;
2033
2030
  autoSave;
2034
2031
  saveTimer;
2035
2032
  constructor(e = !0) {
2036
- this.currentStatus = vn(), this.storage = new _n(), this.autoSave = e, this.saveTimer = null;
2033
+ this.currentStatus = yn(), this.storage = new vn(), this.autoSave = e, this.saveTimer = null;
2037
2034
  }
2038
2035
  async handleEvent(e) {
2039
2036
  let { type: t, timestamp: n, data: r } = e;
@@ -2084,7 +2081,7 @@ var yn = class {
2084
2081
  let e = await this.storage.load();
2085
2082
  if (e) {
2086
2083
  let t = e.cloudSocket, n = e.history;
2087
- this.currentStatus = vn(), this.currentStatus.cloudSocket = t, this.currentStatus.history = n, this.currentStatus.cloudSocket.connected = !1, this.currentStatus.cloudSocket.readyState = 3, await this.saveStatus();
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();
2088
2085
  }
2089
2086
  return this.getStatus();
2090
2087
  }
@@ -2092,7 +2089,7 @@ var yn = class {
2092
2089
  await this.storage.save(this.currentStatus);
2093
2090
  }
2094
2091
  async clearStatus() {
2095
- this.currentStatus = vn(), await this.storage.clear();
2092
+ this.currentStatus = yn(), await this.storage.clear();
2096
2093
  }
2097
2094
  handleCloudSocketConnecting(e, t) {
2098
2095
  this.currentStatus.cloudSocket.url = e.url || "", this.currentStatus.cloudSocket.connected = !1;
@@ -2165,21 +2162,21 @@ var yn = class {
2165
2162
  };
2166
2163
  //#endregion
2167
2164
  //#region src/commands/status/index.ts
2168
- function bn(e, t) {
2165
+ function xn(e, t) {
2169
2166
  return t.command("status").description("Show YOYOClaw connection status").action(async () => {
2170
- if (e.logger.debug?.("YOYOClaw status CLI command called"), !await un()) {
2167
+ if (e.logger.debug?.("YOYOClaw status CLI command called"), !await dn()) {
2171
2168
  console.log("❌ You need to login first. Please run: openclaw honor login");
2172
2169
  return;
2173
2170
  }
2174
- let t = await new _n().load(), n = null;
2171
+ let t = await new vn().load(), n = null;
2175
2172
  try {
2176
2173
  n = await W();
2177
2174
  } catch {}
2178
2175
  let r = j().getEnvInfo();
2179
- xn(t, n, r);
2176
+ Sn(t, n, r);
2180
2177
  });
2181
2178
  }
2182
- function xn(e, t, n) {
2179
+ function Sn(e, t, n) {
2183
2180
  if (!e) {
2184
2181
  console.log("\n❌ No status data available");
2185
2182
  return;
@@ -2189,7 +2186,7 @@ function xn(e, t, n) {
2189
2186
  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) {
2190
2187
  console.log(" ┌────────────────────────────┬────────────────────────────┬────────────┐"), console.log(" │ Session ID │ Hardware Device ID │ Connected │"), console.log(" ├────────────────────────────┼────────────────────────────┼────────────┤");
2191
2188
  for (let t of e.gateway.connections) {
2192
- let e = Cn(t.sessionId, 26), n = Cn(t.hardwareDeviceId, 26), r = Sn(t.connectedAt);
2189
+ let e = wn(t.sessionId, 26), n = wn(t.hardwareDeviceId, 26), r = Cn(t.connectedAt);
2193
2190
  console.log(` │ ${e.padEnd(28)}│ ${n.padEnd(28)}│ ${r.padEnd(12)}│`);
2194
2191
  }
2195
2192
  console.log(" └────────────────────────────┴────────────────────────────┴────────────┘");
@@ -2197,7 +2194,7 @@ function xn(e, t, n) {
2197
2194
  if (console.log("\n📱 Physical Devices:"), console.log(` Unique devices: ${e.devices.uniqueHardwareDevices}`), e.devices.devices.length > 0) {
2198
2195
  console.log(" ┌────────────────────────────┬─────────┬────────────┐"), console.log(" │ Hardware Device ID │ Sessions │ Last Active│"), console.log(" ├────────────────────────────┼─────────┼────────────┤");
2199
2196
  for (let t of e.devices.devices) {
2200
- let e = Cn(t.hardwareDeviceId, 26), n = String(t.sessions).padEnd(9), r = Sn(t.lastActiveAt);
2197
+ let e = wn(t.hardwareDeviceId, 26), n = String(t.sessions).padEnd(9), r = Cn(t.lastActiveAt);
2201
2198
  console.log(` │ ${e.padEnd(28)}│ ${n}│ ${r.padEnd(12)}│`);
2202
2199
  }
2203
2200
  console.log(" └────────────────────────────┴─────────┴────────────┘");
@@ -2208,37 +2205,37 @@ function K(e) {
2208
2205
  let t = new Date(e);
2209
2206
  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")}`;
2210
2207
  }
2211
- function Sn(e) {
2208
+ function Cn(e) {
2212
2209
  let t = new Date(e);
2213
2210
  return `${String(t.getHours()).padStart(2, "0")}:${String(t.getMinutes()).padStart(2, "0")}:${String(t.getSeconds()).padStart(2, "0")}`;
2214
2211
  }
2215
- function Cn(e, t) {
2212
+ function wn(e, t) {
2216
2213
  return e.length <= t ? e : e.substring(0, t - 3) + "...";
2217
2214
  }
2218
2215
  //#endregion
2219
2216
  //#region src/commands/index.ts
2220
- function wn(e) {
2217
+ function Tn(e) {
2221
2218
  e.registerCli((t) => {
2222
2219
  let n = t.program.command("honor").description("Commands for honor yoyoclaw");
2223
- hn(e, n), bn(e, n), gn(e, n), de() && Ie(e, n);
2220
+ gn(e, n), xn(e, n), _n(e, n), de() && Re(e, n);
2224
2221
  }, { commands: ["honor"] });
2225
2222
  }
2226
2223
  //#endregion
2227
2224
  //#region src/modules/prompt/index.ts
2228
- var Tn = " ## 手机控制规则\n\n - 涉及手机控制的任务时,必须强制调用 yoyo_phone_control 技能完成任务。\n - 手机是可直接操控的设备,你的职责是执行操作,而不是向用户解释如何操作。 \n - 多步骤任务需**按顺序多次调用**,不得合并。 \n", En = x.object({
2225
+ var En = " ## 手机控制规则\n\n - 涉及手机控制的任务时,必须强制调用 yoyo_phone_control 技能完成任务。\n - 手机是可直接操控的设备,你的职责是执行操作,而不是向用户解释如何操作。 \n - 多步骤任务需**按顺序多次调用**,不得合并。 \n", Dn = x.object({
2229
2226
  token: x.string().optional(),
2230
2227
  expired: x.number().optional(),
2231
2228
  userId: x.string().optional(),
2232
2229
  userName: x.string().optional()
2233
- }), Dn = x.object({
2230
+ }), On = x.object({
2234
2231
  type: x.string().optional(),
2235
2232
  manufacture: x.string().optional(),
2236
2233
  brand: x.string().optional(),
2237
2234
  name: x.string().optional(),
2238
2235
  model: x.string().optional()
2239
- }), On = x.object({
2240
- user: En.optional(),
2241
- device: Dn.optional(),
2236
+ }), kn = x.object({
2237
+ user: Dn.optional(),
2238
+ device: On.optional(),
2242
2239
  envInfo: x.object({
2243
2240
  env: x.enum([
2244
2241
  "dev",
@@ -2256,12 +2253,12 @@ var Tn = " ## 手机控制规则\n\n - 涉及手机控制的任务时,必须
2256
2253
  });
2257
2254
  //#endregion
2258
2255
  //#region src/utils/ws.ts
2259
- function kn(e, t = "utf8") {
2256
+ function An(e, t = "utf8") {
2260
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);
2261
2258
  }
2262
2259
  //#endregion
2263
2260
  //#region src/gateway-client/client.ts
2264
- var An = class {
2261
+ var jn = class {
2265
2262
  ws = null;
2266
2263
  opts;
2267
2264
  closed = !1;
@@ -2280,10 +2277,10 @@ var An = class {
2280
2277
  this.ws = new ue(e, { maxPayload: 25 * 1024 * 1024 }), this.ws.on("open", () => {
2281
2278
  this.opts.onOpen?.(), this.onOpen();
2282
2279
  }), this.ws.on("message", async (e) => {
2283
- let t = kn(e);
2280
+ let t = An(e);
2284
2281
  await this.opts.onMessage?.(t), await this.onMessage(t);
2285
2282
  }), this.ws.on("close", (e, t) => {
2286
- let n = kn(t);
2283
+ let n = An(t);
2287
2284
  this.ws = null, this.onClose(e, n), this.opts.onClose?.(`code: ${e}, reason: ${n ?? ""}`);
2288
2285
  }), this.ws.on("error", (e) => {
2289
2286
  this.onError(e), this.opts.onClose?.(`socket error: ${e.message}`);
@@ -2300,7 +2297,7 @@ var An = class {
2300
2297
  onMessage(e) {}
2301
2298
  onClose(e, t) {}
2302
2299
  onError(e) {}
2303
- }, jn = {
2300
+ }, Mn = {
2304
2301
  WEBCHAT_UI: "webchat-ui",
2305
2302
  CONTROL_UI: "openclaw-control-ui",
2306
2303
  WEBCHAT: "webchat",
@@ -2312,7 +2309,7 @@ var An = class {
2312
2309
  NODE_HOST: "node-host",
2313
2310
  FINGERPRINT: "fingerprint",
2314
2311
  PROBE: "openclaw-probe"
2315
- }, Mn = {
2312
+ }, Nn = {
2316
2313
  WEBCHAT: "webchat",
2317
2314
  CLI: "cli",
2318
2315
  UI: "ui",
@@ -2328,13 +2325,13 @@ var An = class {
2328
2325
  constructor(e, t, n, r) {
2329
2326
  super(t), this.name = "WebSocketClientError", this.code = e, this.details = n, this.retryable = r;
2330
2327
  }
2331
- }, Nn = {
2328
+ }, Pn = {
2332
2329
  role: "operator",
2333
2330
  scopes: [],
2334
- clientId: jn.CLI,
2331
+ clientId: Mn.CLI,
2335
2332
  displayName: "Protocol Client",
2336
- clientMode: Mn.CLI
2337
- }, Pn = 3e4, Fn = "1.0.0", In = "server", Ln = 2, Rn = 1e3, zn = class extends An {
2333
+ clientMode: Nn.CLI
2334
+ }, Fn = 3e4, In = "1.0.0", Ln = "server", Rn = 2, zn = 1e3, Bn = class extends jn {
2338
2335
  protocolOpts;
2339
2336
  config;
2340
2337
  pendingRequests = /* @__PURE__ */ new Map();
@@ -2350,7 +2347,7 @@ var An = class {
2350
2347
  isReconnecting = !1;
2351
2348
  constructor(e = {}, t = {}) {
2352
2349
  super(e), this.protocolOpts = e, this.config = {
2353
- ...Nn,
2350
+ ...Pn,
2354
2351
  ...t
2355
2352
  }, this.debug = process.env.DEBUG_GATEWAY === "true";
2356
2353
  }
@@ -2397,7 +2394,7 @@ var An = class {
2397
2394
  }
2398
2395
  }
2399
2396
  async sendConnect() {
2400
- let e = this.config.clientMode ?? Mn.CLI, t = await Wt(), n = this.connectNonce ? sn({
2397
+ let e = this.config.clientMode ?? Nn.CLI, t = await Gt(), n = this.connectNonce ? cn({
2401
2398
  deviceIdentity: t,
2402
2399
  clientName: this.config.clientId,
2403
2400
  clientMode: e,
@@ -2406,16 +2403,16 @@ var An = class {
2406
2403
  authToken: this.protocolOpts.token,
2407
2404
  nonce: this.connectNonce,
2408
2405
  platform: process.platform,
2409
- deviceFamily: In
2406
+ deviceFamily: Ln
2410
2407
  }) : void 0, r = {
2411
2408
  minProtocol: 3,
2412
2409
  maxProtocol: 3,
2413
2410
  client: {
2414
2411
  id: this.config.clientId,
2415
2412
  displayName: this.config.displayName,
2416
- version: Fn,
2413
+ version: In,
2417
2414
  platform: process.platform,
2418
- deviceFamily: In,
2415
+ deviceFamily: Ln,
2419
2416
  mode: e
2420
2417
  },
2421
2418
  role: this.config.role,
@@ -2458,7 +2455,7 @@ var An = class {
2458
2455
  let t = this.pendingTimers.get(n);
2459
2456
  t && clearTimeout(t), this.pendingTimers.delete(n), i(new J(q.TIMEOUT, `Request timeout: ${e}`));
2460
2457
  }
2461
- }, Pn);
2458
+ }, Fn);
2462
2459
  this.pendingTimers.set(n, o);
2463
2460
  });
2464
2461
  }
@@ -2490,16 +2487,16 @@ var An = class {
2490
2487
  }
2491
2488
  scheduleReconnect() {
2492
2489
  if (!(this.closed || this.isReconnecting)) {
2493
- if (this.reconnectAttempts >= Ln) {
2494
- D().error(`[protocol-gateway] max reconnect attempts (${Ln}) reached, giving up`), this.protocolOpts.onReconnectFailed?.();
2490
+ if (this.reconnectAttempts >= Rn) {
2491
+ D().error(`[protocol-gateway] max reconnect attempts (${Rn}) reached, giving up`), this.protocolOpts.onReconnectFailed?.();
2495
2492
  return;
2496
2493
  }
2497
- this.reconnectAttempts++, this.isReconnecting = !0, D().info(`[protocol-gateway] attempting to reconnect (attempt ${this.reconnectAttempts}/${Ln})`), this.reconnectTimer = setTimeout(() => {
2494
+ this.reconnectAttempts++, this.isReconnecting = !0, D().info(`[protocol-gateway] attempting to reconnect (attempt ${this.reconnectAttempts}/${Rn})`), this.reconnectTimer = setTimeout(() => {
2498
2495
  this.isReconnecting = !1, this.closed || super.connect();
2499
- }, Rn);
2496
+ }, zn);
2500
2497
  }
2501
2498
  }
2502
- }, Bn = {
2499
+ }, Vn = {
2503
2500
  role: "operator",
2504
2501
  scopes: [
2505
2502
  "operator.admin",
@@ -2509,12 +2506,12 @@ var An = class {
2509
2506
  "operator.approvals",
2510
2507
  "operator.pairing"
2511
2508
  ],
2512
- clientId: jn.CLI,
2509
+ clientId: Mn.CLI,
2513
2510
  displayName: "YOYO-Control",
2514
- clientMode: Mn.BACKEND
2515
- }, Vn = class extends zn {
2511
+ clientMode: Nn.BACKEND
2512
+ }, Hn = class extends Bn {
2516
2513
  constructor(e = {}) {
2517
- super(e, Bn);
2514
+ super(e, Vn);
2518
2515
  }
2519
2516
  async setAgentFile(e, t, n = "main") {
2520
2517
  return this.sendRequest("agents.files.set", {
@@ -2547,7 +2544,7 @@ var An = class {
2547
2544
  async devicePairApprove(e) {
2548
2545
  return this.sendRequest("device.pair.approve", { requestId: e });
2549
2546
  }
2550
- }, Hn = class {
2547
+ }, Un = class {
2551
2548
  client = null;
2552
2549
  ready = !1;
2553
2550
  options;
@@ -2559,7 +2556,7 @@ var An = class {
2559
2556
  init() {
2560
2557
  if (this.client !== null) return;
2561
2558
  let e = j().getGatewayAuthConfig()?.token || "";
2562
- this.client = new Vn({
2559
+ this.client = new Hn({
2563
2560
  token: e,
2564
2561
  onAuthenticated: () => {
2565
2562
  D().info("[yoyoclaw-channel] admin gateway client authenticated"), this.ready = !0, this.resolveAllPending(!0);
@@ -2613,11 +2610,11 @@ var An = class {
2613
2610
  for (let [t, n] of this.pendingReadyRequests) clearTimeout(n.timeout), n.resolve(e);
2614
2611
  this.pendingReadyRequests.clear();
2615
2612
  }
2616
- }, Un = "/aicloud/yoyo-claw-service/v1/yoyoclaw/fullduplex", Wn = 25 * 1024 * 1024;
2617
- function Gn(e, t) {
2618
- let n = ze(), r = n.grayTag ? { "x-gray": n.grayTag } : void 0, i = M(), a = `wss://${n.clawCloud}${Un}`, o = Kn(e, t, i, r), s = He(a), c = {
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 = {
2619
2616
  headers: o,
2620
- maxPayload: Wn
2617
+ maxPayload: Gn
2621
2618
  };
2622
2619
  return s && (c.agent = s), {
2623
2620
  url: a,
@@ -2625,7 +2622,7 @@ function Gn(e, t) {
2625
2622
  wsOptions: c
2626
2623
  };
2627
2624
  }
2628
- function Kn(e, t, n, r) {
2625
+ function qn(e, t, n, r) {
2629
2626
  let i = {
2630
2627
  "x-role": "yoyoclaw",
2631
2628
  "x-trace-id": n,
@@ -2636,7 +2633,7 @@ function Kn(e, t, n, r) {
2636
2633
  }
2637
2634
  //#endregion
2638
2635
  //#region src/cloud-channel/client.ts
2639
- var qn = 3e4, Jn = 4e3, Yn = 1e3, Xn = 2, Zn = 999, Qn = class {
2636
+ var Jn = 3e4, Yn = 4e3, Xn = 1e3, Zn = 2, Qn = 999, $n = class {
2640
2637
  ws = null;
2641
2638
  options;
2642
2639
  retryCount = 0;
@@ -2651,7 +2648,7 @@ var qn = 3e4, Jn = 4e3, Yn = 1e3, Xn = 2, Zn = 999, Qn = class {
2651
2648
  connect(e = !1) {
2652
2649
  if (this.ws?.readyState === S.OPEN) return;
2653
2650
  this.clearRetryTimer();
2654
- let { deviceInfo: t, userInfo: n } = this.options, { url: r, traceId: i, wsOptions: a } = Gn(t, n);
2651
+ let { deviceInfo: t, userInfo: n } = this.options, { url: r, traceId: i, wsOptions: a } = Kn(t, n);
2655
2652
  this.currentTraceId = i, this.options.onStatusEvent?.({
2656
2653
  type: G.CLOUD_SOCKET_CONNECTING,
2657
2654
  timestamp: Date.now(),
@@ -2712,7 +2709,7 @@ var qn = 3e4, Jn = 4e3, Yn = 1e3, Xn = 2, Zn = 999, Qn = class {
2712
2709
  }
2713
2710
  onMessage = async (e) => {
2714
2711
  try {
2715
- let t = kn(e), n = JSON.parse(t);
2712
+ let t = An(e), n = JSON.parse(t);
2716
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") {
2717
2714
  if (n.wsOutputEvent) {
2718
2715
  n.sessionInfo && (n.wsOutputEvent.sessionInfo = n.sessionInfo), this.options.onMessage?.(n.wsOutputEvent);
@@ -2739,7 +2736,7 @@ var qn = 3e4, Jn = 4e3, Yn = 1e3, Xn = 2, Zn = 999, Qn = class {
2739
2736
  }
2740
2737
  this.clearRetryTimer();
2741
2738
  let e = this.calculateRetryDelay();
2742
- this.retryCount = Math.min(this.retryCount + 1, Zn), D().info(`[claw-cloud-socket] scheduling reconnect attempt ${this.retryCount} in ${e}ms`), this.options.onStatusEvent?.({
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?.({
2743
2740
  type: G.CLOUD_SOCKET_RETRY,
2744
2741
  timestamp: Date.now(),
2745
2742
  data: {
@@ -2754,8 +2751,8 @@ var qn = 3e4, Jn = 4e3, Yn = 1e3, Xn = 2, Zn = 999, Qn = class {
2754
2751
  this.retryTimer &&= (clearTimeout(this.retryTimer), null);
2755
2752
  }
2756
2753
  calculateRetryDelay() {
2757
- let e = Yn * Xn ** +Math.min(this.retryCount, 2);
2758
- return Math.min(e, Jn);
2754
+ let e = Xn * Zn ** +Math.min(this.retryCount, 2);
2755
+ return Math.min(e, Yn);
2759
2756
  }
2760
2757
  startPingTimer() {
2761
2758
  this.pingTimer = setInterval(() => {
@@ -2776,7 +2773,7 @@ var qn = 3e4, Jn = 4e3, Yn = 1e3, Xn = 2, Zn = 999, Qn = class {
2776
2773
  } catch {
2777
2774
  D().error("[claw-cloud-socket] failed to send pingMessage");
2778
2775
  }
2779
- }, qn);
2776
+ }, Jn);
2780
2777
  }
2781
2778
  stopPingTimer() {
2782
2779
  this.pingTimer &&= (clearInterval(this.pingTimer), null);
@@ -2787,18 +2784,18 @@ var qn = 3e4, Jn = 4e3, Yn = 1e3, Xn = 2, Zn = 999, Qn = class {
2787
2784
  resumeRetry() {
2788
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)));
2789
2786
  }
2790
- }, $n = ".openclaw/yoyo/tools", er = /[<>:"/\\|?*]/;
2791
- async function tr(e, t) {
2787
+ }, er = ".openclaw/yoyo/tools", tr = /[<>:"/\\|?*]/;
2788
+ async function nr(e, t) {
2792
2789
  let n = 0, r = 0;
2793
2790
  for (let i of t) {
2794
- let t = nr(i.name);
2791
+ let t = rr(i.name);
2795
2792
  if (!t) {
2796
2793
  r += 1;
2797
2794
  continue;
2798
2795
  }
2799
2796
  await B({
2800
2797
  rootDir: e,
2801
- relativePath: u.join($n, t),
2798
+ relativePath: u.join(er, t),
2802
2799
  data: JSON.stringify(i, null, 2),
2803
2800
  encoding: "utf8",
2804
2801
  mkdir: !0
@@ -2810,63 +2807,64 @@ async function tr(e, t) {
2810
2807
  skippedCount: r
2811
2808
  };
2812
2809
  }
2813
- function nr(e) {
2810
+ function rr(e) {
2814
2811
  let t = e.trim();
2815
- if (!(!t || er.test(t) || rr(t))) return `${t}.json`;
2812
+ if (!(!t || tr.test(t) || ir(t))) return `${t}.json`;
2816
2813
  }
2817
- function rr(e) {
2814
+ function ir(e) {
2818
2815
  for (let t of e) if (t.codePointAt(0) < 32) return !0;
2819
2816
  return !1;
2820
2817
  }
2821
2818
  //#endregion
2822
2819
  //#region src/modules/device-toolset/copy-fallback.ts
2823
- var ir = ".yoyo-device-toolset-copy-fallback";
2824
- async function ar(e, t) {
2825
- await sr(t), await v.rm(t, {
2820
+ var ar = ".yoyo-device-toolset-copy-fallback";
2821
+ async function or(e, t) {
2822
+ await cr(t), await v.rm(t, {
2826
2823
  recursive: !0,
2827
2824
  force: !0
2828
- }), await v.mkdir(t, { recursive: !0 }), await cr(e, t), await v.writeFile(u.join(t, ir), "Managed copy fallback for DeviceToolSet MCP tools.\n", "utf8");
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");
2829
2826
  }
2830
- async function or(e) {
2827
+ async function sr(e) {
2831
2828
  try {
2832
- return (await v.stat(u.join(e, ir))).isFile();
2829
+ return (await v.stat(u.join(e, ar))).isFile();
2833
2830
  } catch {
2834
2831
  return !1;
2835
2832
  }
2836
2833
  }
2837
- async function sr(e) {
2834
+ async function cr(e) {
2838
2835
  let t;
2839
2836
  try {
2840
2837
  t = await v.lstat(e);
2841
2838
  } catch (e) {
2842
- if (lr(e)) return;
2839
+ if (ur(e)) return;
2843
2840
  throw e;
2844
2841
  }
2845
2842
  if (!t.isSymbolicLink()) {
2846
2843
  if (!t.isDirectory()) throw Error(`Cannot replace unmanaged mcptools path: ${e}`);
2847
- if (!((await v.readdir(e)).length === 0 || await or(e))) throw Error(`Cannot replace unmanaged mcptools directory: ${e}`);
2844
+ if (!((await v.readdir(e)).length === 0 || await sr(e))) throw Error(`Cannot replace unmanaged mcptools directory: ${e}`);
2848
2845
  }
2849
2846
  }
2850
- async function cr(e, t) {
2847
+ async function lr(e, t) {
2851
2848
  let n = await v.readdir(e, { withFileTypes: !0 });
2852
2849
  for (let r of n) {
2853
2850
  let n = u.join(e, r.name), i = u.join(t, r.name);
2854
- r.isDirectory() ? (await v.mkdir(i, { recursive: !0 }), await cr(n, i)) : r.isFile() && await v.copyFile(n, i);
2851
+ r.isDirectory() ? (await v.mkdir(i, { recursive: !0 }), await lr(n, i)) : r.isFile() && await v.copyFile(n, i);
2855
2852
  }
2856
2853
  }
2857
- function lr(e) {
2854
+ function ur(e) {
2858
2855
  return !!(e && typeof e == "object" && "code" in e && e.code === "ENOENT");
2859
2856
  }
2860
2857
  //#endregion
2861
2858
  //#region src/modules/device-toolset/link.ts
2862
- async function ur(e, t, n = {}) {
2863
- let r = await v.realpath(e), i = await dr(t);
2859
+ async function dr(e, t, n = {}) {
2860
+ await v.mkdir(e, { recursive: !0 });
2861
+ let r = await v.realpath(e), i = await fr(t);
2864
2862
  if (i.exists) {
2865
2863
  if (i.isLink) {
2866
- if (await fr(t, r)) return { mode: "already-linked" };
2864
+ if (await pr(t, r)) return { mode: "already-linked" };
2867
2865
  throw Error(`Cannot replace unmanaged mcptools link: ${t}`);
2868
2866
  }
2869
- if (!await pr(t, i.isDirectory)) throw Error(`Cannot replace unmanaged mcptools directory: ${t}`);
2867
+ if (!await mr(t, i.isDirectory)) throw Error(`Cannot replace unmanaged mcptools directory: ${t}`);
2870
2868
  await v.rm(t, {
2871
2869
  recursive: !0,
2872
2870
  force: !0
@@ -2876,10 +2874,10 @@ async function ur(e, t, n = {}) {
2876
2874
  try {
2877
2875
  return await (n.symlink ?? v.symlink)(r, t, process.platform === "win32" ? "junction" : "dir"), { mode: "linked" };
2878
2876
  } catch {
2879
- return await (n.copyFallback ?? ar)(r, t), { mode: "copy-fallback" };
2877
+ return await (n.copyFallback ?? or)(r, t), { mode: "copy-fallback" };
2880
2878
  }
2881
2879
  }
2882
- async function dr(e) {
2880
+ async function fr(e) {
2883
2881
  try {
2884
2882
  let t = await v.lstat(e);
2885
2883
  return {
@@ -2888,7 +2886,7 @@ async function dr(e) {
2888
2886
  isDirectory: t.isDirectory()
2889
2887
  };
2890
2888
  } catch (e) {
2891
- if (hr(e)) return {
2889
+ if (gr(e)) return {
2892
2890
  exists: !1,
2893
2891
  isLink: !1,
2894
2892
  isDirectory: !1
@@ -2896,66 +2894,66 @@ async function dr(e) {
2896
2894
  throw e;
2897
2895
  }
2898
2896
  }
2899
- async function fr(e, t) {
2897
+ async function pr(e, t) {
2900
2898
  try {
2901
- return mr(await v.realpath(e), t);
2899
+ return hr(await v.realpath(e), t);
2902
2900
  } catch {
2903
2901
  return !1;
2904
2902
  }
2905
2903
  }
2906
- async function pr(e, t) {
2907
- return t ? (await v.readdir(e)).length === 0 || await or(e) : !1;
2904
+ async function mr(e, t) {
2905
+ return t ? (await v.readdir(e)).length === 0 || await sr(e) : !1;
2908
2906
  }
2909
- function mr(e, t) {
2907
+ function hr(e, t) {
2910
2908
  return process.platform === "win32" ? e.toLowerCase() === t.toLowerCase() : e === t;
2911
2909
  }
2912
- function hr(e) {
2910
+ function gr(e) {
2913
2911
  return !!(e && typeof e == "object" && "code" in e && e.code === "ENOENT");
2914
2912
  }
2915
2913
  //#endregion
2916
2914
  //#region src/modules/device-toolset/md5-index.ts
2917
- var gr = ".openclaw/yoyo/toolset-md5.json", _r = 1024 * 1024;
2918
- function vr() {
2915
+ var _r = ".openclaw/yoyo/toolset-md5.json", vr = 1024 * 1024;
2916
+ function yr() {
2919
2917
  return {
2920
2918
  version: 1,
2921
2919
  nodes: {}
2922
2920
  };
2923
2921
  }
2924
- function yr(e) {
2925
- return JSON.stringify(wr(e));
2926
- }
2927
2922
  function br(e) {
2928
- return ae("md5").update(yr(e)).digest("hex");
2923
+ return JSON.stringify(Tr(e));
2929
2924
  }
2930
- async function xr(e) {
2925
+ function xr(e) {
2926
+ return ae("md5").update(br(e)).digest("hex");
2927
+ }
2928
+ async function Sr(e) {
2931
2929
  try {
2932
- let t = await bt({
2930
+ let t = await xt({
2933
2931
  rootDir: e,
2934
- relativePath: gr,
2935
- maxBytes: _r
2932
+ relativePath: _r,
2933
+ maxBytes: vr
2936
2934
  }), n = JSON.parse(t.buffer.toString("utf8"));
2937
2935
  return {
2938
2936
  version: 1,
2939
2937
  nodes: n && typeof n.nodes == "object" && n.nodes ? n.nodes : {}
2940
2938
  };
2941
2939
  } catch (e) {
2942
- if (e instanceof I && e.code === "not-found") return vr();
2940
+ if (e instanceof I && e.code === "not-found") return yr();
2943
2941
  throw e;
2944
2942
  }
2945
2943
  }
2946
- async function Sr(e, t, n) {
2947
- let r = (await xr(e)).nodes[t]?.md5;
2944
+ async function Cr(e, t, n) {
2945
+ let r = (await Sr(e)).nodes[t]?.md5;
2948
2946
  return {
2949
2947
  changed: r !== n,
2950
2948
  md5: n,
2951
2949
  previousMd5: r
2952
2950
  };
2953
2951
  }
2954
- async function Cr(e, t, n, r = Date.now()) {
2952
+ async function wr(e, t, n, r = Date.now()) {
2955
2953
  let i = {
2956
2954
  version: 1,
2957
2955
  nodes: {
2958
- ...(await xr(e)).nodes,
2956
+ ...(await Sr(e)).nodes,
2959
2957
  [t]: {
2960
2958
  md5: n,
2961
2959
  updatedAtMs: r
@@ -2964,19 +2962,19 @@ async function Cr(e, t, n, r = Date.now()) {
2964
2962
  };
2965
2963
  return await B({
2966
2964
  rootDir: e,
2967
- relativePath: gr,
2965
+ relativePath: _r,
2968
2966
  data: JSON.stringify(i, null, 2),
2969
2967
  encoding: "utf8",
2970
2968
  mkdir: !0
2971
2969
  }), i;
2972
2970
  }
2973
- function wr(e) {
2974
- if (Array.isArray(e)) return e.map(wr);
2971
+ function Tr(e) {
2972
+ if (Array.isArray(e)) return e.map(Tr);
2975
2973
  if (!e || typeof e != "object") return e;
2976
2974
  let t = {};
2977
2975
  for (let n of Object.keys(e).toSorted()) {
2978
2976
  let r = e[n];
2979
- r !== void 0 && (t[n] = wr(r));
2977
+ r !== void 0 && (t[n] = Tr(r));
2980
2978
  }
2981
2979
  return t;
2982
2980
  }
@@ -2985,17 +2983,17 @@ function wr(e) {
2985
2983
  function Y(e) {
2986
2984
  return typeof e == "string" && e.trim() ? e : void 0;
2987
2985
  }
2988
- function Tr(e) {
2986
+ function Er(e) {
2989
2987
  if (!e || typeof e != "object") throw Error("DeviceToolSet payload must be an object");
2990
2988
  let t = e;
2991
2989
  if (!Y(t.nodeId)) throw Error("DeviceToolSet payload missing nodeId");
2992
2990
  if (!Array.isArray(t.toolSet)) throw Error("DeviceToolSet payload toolSet must be an array");
2993
2991
  return e;
2994
2992
  }
2995
- function Er(e) {
2993
+ function Dr(e) {
2996
2994
  let t = e.nodeId, n = [], r = 0;
2997
2995
  for (let t of e.toolSet) {
2998
- let e = Dr(t);
2996
+ let e = Or(t);
2999
2997
  e ? n.push(e) : r += 1;
3000
2998
  }
3001
2999
  return {
@@ -3004,7 +3002,7 @@ function Er(e) {
3004
3002
  skippedCount: r
3005
3003
  };
3006
3004
  }
3007
- function Dr(e) {
3005
+ function Or(e) {
3008
3006
  let t = Y(e.tool?.id), n = Y(e.tool?.function?.name), r = Y(e.tool?.function?.description);
3009
3007
  if (!t || e.tool?.type !== "function" || !n || !r) return;
3010
3008
  let i = {
@@ -3019,48 +3017,48 @@ function Dr(e) {
3019
3017
  }
3020
3018
  //#endregion
3021
3019
  //#region src/modules/device-toolset/persist.ts
3022
- var Or = ".openclaw/yoyo/device-toolsets.json", kr = 10 * 1024 * 1024;
3023
- function Ar() {
3020
+ var kr = ".openclaw/yoyo/device-toolsets.json", Ar = 10 * 1024 * 1024;
3021
+ function jr() {
3024
3022
  return {
3025
3023
  version: 1,
3026
3024
  tools: {}
3027
3025
  };
3028
3026
  }
3029
- async function jr(e) {
3027
+ async function Mr(e) {
3030
3028
  try {
3031
- let t = await bt({
3029
+ let t = await xt({
3032
3030
  rootDir: e,
3033
- relativePath: Or,
3034
- maxBytes: kr
3031
+ relativePath: kr,
3032
+ maxBytes: Ar
3035
3033
  }), n = JSON.parse(t.buffer.toString("utf8"));
3036
3034
  return {
3037
3035
  version: 1,
3038
3036
  tools: n && typeof n.tools == "object" && n.tools ? n.tools : {}
3039
3037
  };
3040
3038
  } catch (e) {
3041
- if (e instanceof I && e.code === "not-found") return Ar();
3039
+ if (e instanceof I && e.code === "not-found") return jr();
3042
3040
  throw e;
3043
3041
  }
3044
3042
  }
3045
- async function Mr(e, t, n) {
3043
+ async function Nr(e, t, n) {
3046
3044
  let r = {
3047
3045
  version: 1,
3048
- tools: Nr((await jr(e)).tools, t, n)
3046
+ tools: Pr((await Mr(e)).tools, t, n)
3049
3047
  };
3050
3048
  return await B({
3051
3049
  rootDir: e,
3052
- relativePath: Or,
3050
+ relativePath: kr,
3053
3051
  data: JSON.stringify(r, null, 2),
3054
3052
  encoding: "utf8",
3055
3053
  mkdir: !0
3056
3054
  }), {
3057
3055
  changed: !0,
3058
- nodeCount: Fr(r.tools),
3056
+ nodeCount: Ir(r.tools),
3059
3057
  toolCount: Object.keys(r.tools).length,
3060
3058
  cache: r
3061
3059
  };
3062
3060
  }
3063
- function Nr(e, t, n) {
3061
+ function Pr(e, t, n) {
3064
3062
  let r = { ...e };
3065
3063
  for (let e of n) {
3066
3064
  let n = r[e.id];
@@ -3068,70 +3066,88 @@ function Nr(e, t, n) {
3068
3066
  id: e.id,
3069
3067
  name: e.name,
3070
3068
  description: e.description,
3071
- supportedNodeIds: Pr(n?.supportedNodeIds ?? [], t)
3069
+ supportedNodeIds: Fr(n?.supportedNodeIds ?? [], t)
3072
3070
  };
3073
3071
  }
3074
3072
  return r;
3075
3073
  }
3076
- function Pr(e, t) {
3074
+ function Fr(e, t) {
3077
3075
  return [...new Set([...e, t])];
3078
3076
  }
3079
- function Fr(e) {
3077
+ function Ir(e) {
3080
3078
  let t = /* @__PURE__ */ new Set();
3081
3079
  for (let n of Object.values(e)) for (let e of n.supportedNodeIds) t.add(e);
3082
3080
  return t.size;
3083
3081
  }
3084
3082
  //#endregion
3085
3083
  //#region src/modules/device-toolset/skill-inject.ts
3086
- var Ir = u.join("skills", "yoyo-control", "SKILL.md"), Lr = "{{full-mcp-tool-list}}", Rr = "<!-- yoyo-mcp-tools:start -->", zr = "<!-- yoyo-mcp-tools:end -->";
3087
- async function Br(e, t) {
3088
- let n = u.join(e, Ir), r = await v.readFile(n, "utf8"), i = Hr(r, Vr(t));
3089
- return i !== r && await v.writeFile(n, i, "utf8"), {
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"), {
3090
3088
  skillPath: n,
3091
- rowCount: Object.keys(t).length
3089
+ rowCount: Object.keys(i).length
3092
3090
  };
3093
3091
  }
3094
- function Vr(e) {
3092
+ async function Ur(e) {
3093
+ let t = u.join(e, Rr), n;
3094
+ try {
3095
+ n = await v.readFile(t, "utf8");
3096
+ } catch (e) {
3097
+ if (Yr(e) && e.code === "ENOENT") return /* @__PURE__ */ new Set();
3098
+ throw e;
3099
+ }
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));
3103
+ }
3104
+ function Wr(e, t) {
3105
+ return t.size === 0 ? e : Object.fromEntries(Object.entries(e).filter(([e, n]) => !t.has(e) && !t.has(n.name)));
3106
+ }
3107
+ function Gr(e) {
3095
3108
  return [
3096
- Rr,
3097
- ...Object.values(e).toSorted((e, t) => e.name.localeCompare(t.name)).map((e) => `| ${Ur(e.name)} | ${Ur(e.description)} | ${Ur(e.supportedNodeIds.join(", "))} |`),
3098
- zr
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
3099
3112
  ].join("\n");
3100
3113
  }
3101
- function Hr(e, t) {
3102
- let n = RegExp(`${Wr(Rr)}[\\s\\S]*?${Wr(zr)}`);
3114
+ function Kr(e, t) {
3115
+ let n = RegExp(`${Jr(Br)}[\\s\\S]*?${Jr(Vr)}`);
3103
3116
  if (n.test(e)) return e.replace(n, t);
3104
- if (e.includes(Lr)) return e.replace(Lr, t);
3117
+ if (e.includes(zr)) return e.replace(zr, t);
3105
3118
  throw Error("Unable to find MCP tools placeholder or generated block in yoyo-control skill");
3106
3119
  }
3107
- function Ur(e) {
3120
+ function qr(e) {
3108
3121
  return e.replaceAll("|", "\\|").replace(/\r?\n/g, " ");
3109
3122
  }
3110
- function Wr(e) {
3123
+ function Jr(e) {
3111
3124
  return e.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
3112
3125
  }
3126
+ function Yr(e) {
3127
+ return e instanceof Error && "code" in e;
3128
+ }
3113
3129
  //#endregion
3114
3130
  //#region src/modules/device-toolset/processor.ts
3115
- var Gr = Et();
3116
- async function Kr(e) {
3117
- let t = Tr(e), n = Dt();
3131
+ var Xr = Dt();
3132
+ async function Zr(e) {
3133
+ let t = Er(e), n = Ot();
3118
3134
  if (!n) throw Error("Unable to resolve home directory for DeviceToolSet persistence");
3119
- let r = Er(t);
3135
+ let r = Dr(t);
3120
3136
  D().info(`[yoyoclaw-device-toolset] process start, nodeId: ${r.nodeId}, tools: ${r.tools.length}, skipped: ${r.skippedCount}`);
3121
- let i = br(r.tools);
3122
- if (D().debug?.(`[yoyoclaw-device-toolset] computed md5, nodeId: ${r.nodeId}, md5: ${i}`), !(await Sr(n, r.nodeId, i)).changed) return D().info(`[yoyoclaw-device-toolset] unchanged, skip refresh, nodeId: ${r.nodeId}`), {
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}`), {
3123
3139
  changed: !1,
3124
3140
  nodeId: r.nodeId,
3125
3141
  skippedCount: r.skippedCount
3126
3142
  };
3127
- let a = await Mr(n, r.nodeId, r.tools);
3143
+ let a = await Nr(n, r.nodeId, r.tools);
3128
3144
  D().info(`[yoyoclaw-device-toolset] cache merged, nodeId: ${r.nodeId}, supportedNodes: ${a.nodeCount}, tools: ${a.toolCount}`);
3129
- let o = a.cache.tools, s = await tr(n, r.tools);
3145
+ let o = a.cache.tools, s = await nr(n, r.tools);
3130
3146
  D().info(`[yoyoclaw-device-toolset] archive refreshed, nodeId: ${r.nodeId}, written: ${s.writtenCount}, skipped: ${s.skippedCount}`);
3131
- let c = await Br(Gr, o);
3147
+ let c = await Hr(Xr, o);
3132
3148
  D().info(`[yoyoclaw-device-toolset] skill refreshed, nodeId: ${r.nodeId}, rows: ${c.rowCount}`);
3133
- let l = await ur(s.archiveDir, u.join(Gr, "skills", "yoyo-control", "mcptools"));
3134
- return D().info(`[yoyoclaw-device-toolset] mapping ready, nodeId: ${r.nodeId}, mode: ${l.mode}`), await Cr(n, r.nodeId, i, Date.now()), D().info(`[yoyoclaw-device-toolset] process complete, nodeId: ${r.nodeId}`), {
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}`), {
3135
3151
  changed: !0,
3136
3152
  nodeId: r.nodeId,
3137
3153
  nodeCount: a.nodeCount,
@@ -3141,7 +3157,7 @@ async function Kr(e) {
3141
3157
  }
3142
3158
  //#endregion
3143
3159
  //#region src/cloud-channel/message-handler.ts
3144
- var qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", Jr = class {
3160
+ var Qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", $r = class {
3145
3161
  sessionManager;
3146
3162
  adminClientManager;
3147
3163
  config;
@@ -3150,7 +3166,8 @@ var qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", Jr = class {
3150
3166
  contextUpdateHandlers = {
3151
3167
  style: this.updateStyleContext.bind(this),
3152
3168
  "model.primary": this.updatePrimaryModel.bind(this),
3153
- DeviceToolSet: this.updateDeviceToolSetContext.bind(this)
3169
+ DeviceToolSet: this.updateDeviceToolSetContext.bind(this),
3170
+ UniversalToolSet: this.updateDeviceToolSetContext.bind(this)
3154
3171
  };
3155
3172
  contextFetchHandlers = {
3156
3173
  skills: this.fetchSkillsStatus.bind(this),
@@ -3417,7 +3434,7 @@ var qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", Jr = class {
3417
3434
  ok: !1,
3418
3435
  error: "Missing content in context payload"
3419
3436
  };
3420
- let r = qr.style, i = await e.setAgentFile(r, n);
3437
+ let r = Qr.style, i = await e.setAgentFile(r, n);
3421
3438
  return i.ok ? {
3422
3439
  ok: !0,
3423
3440
  data: { name: "style" }
@@ -3501,19 +3518,19 @@ var qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", Jr = class {
3501
3518
  }
3502
3519
  }
3503
3520
  contextHandlerRequiresAdminClient(e, t) {
3504
- return !e || t !== "DeviceToolSet";
3521
+ return !e || t !== "DeviceToolSet" && t !== "UniversalToolSet";
3505
3522
  }
3506
3523
  async updateDeviceToolSetContext(e, t, n) {
3507
3524
  return n?.header.namespace === "yoyoclaw" ? {
3508
3525
  ok: !0,
3509
- data: await Kr(t),
3526
+ data: await Zr(t),
3510
3527
  noReply: !0
3511
3528
  } : {
3512
3529
  ok: !1,
3513
3530
  error: `Unsupported DeviceToolSet namespace: ${n?.header.namespace ?? "unknown"}`
3514
3531
  };
3515
3532
  }
3516
- }, Yr = class extends An {
3533
+ }, ei = class extends jn {
3517
3534
  nodeOpts;
3518
3535
  sessionId;
3519
3536
  hardwareDeviceId;
@@ -3555,7 +3572,7 @@ var qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", Jr = class {
3555
3572
  onError(e) {
3556
3573
  D().error(`[yoyoclaw-nodeGatewayClient] error for session: ${this.sessionId}, device: ${this.hardwareDeviceId}: ${e.message}`);
3557
3574
  }
3558
- }, Xr = class {
3575
+ }, ti = class {
3559
3576
  nodeGatewayClientsMap = /* @__PURE__ */ new Map();
3560
3577
  deviceSessionsMap = /* @__PURE__ */ new Map();
3561
3578
  sessionIdToHardwareDeviceMap = /* @__PURE__ */ new Map();
@@ -3588,7 +3605,7 @@ var qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", Jr = class {
3588
3605
  this.nodeGatewayClientsMap.set(e, t);
3589
3606
  }
3590
3607
  createNodeGatewayClient(e) {
3591
- let t = new Yr({
3608
+ let t = new ei({
3592
3609
  sessionId: e.sessionId,
3593
3610
  hardwareDeviceId: e.hardwareDeviceId,
3594
3611
  deviceInfo: e.deviceInfo,
@@ -3620,14 +3637,14 @@ var qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", Jr = class {
3620
3637
  getSessionCount() {
3621
3638
  return this.sessionIdToHardwareDeviceMap.size;
3622
3639
  }
3623
- }, Zr = class {
3640
+ }, ni = class {
3624
3641
  cloudClient;
3625
3642
  sessionManager;
3626
3643
  adminClientManager;
3627
3644
  messageHandler;
3628
3645
  config;
3629
3646
  constructor(e) {
3630
- this.config = e, this.sessionManager = new Xr(), this.adminClientManager = new Hn({ onStatusEvent: this.handleStatusEvent }), this.messageHandler = new Jr({
3647
+ this.config = e, this.sessionManager = new ti(), this.adminClientManager = new Un({ onStatusEvent: this.handleStatusEvent }), this.messageHandler = new $r({
3631
3648
  sessionManager: this.sessionManager,
3632
3649
  adminClientManager: this.adminClientManager,
3633
3650
  config: {
@@ -3635,7 +3652,7 @@ var qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", Jr = class {
3635
3652
  onStatusEvent: this.handleStatusEvent,
3636
3653
  onReply: (e) => this.cloudClient.send(e)
3637
3654
  }
3638
- }), this.cloudClient = new Qn({
3655
+ }), this.cloudClient = new $n({
3639
3656
  deviceInfo: e.deviceInfo,
3640
3657
  userInfo: e.userInfo,
3641
3658
  onMessage: this.messageHandler.handleCloudMessage,
@@ -3674,10 +3691,10 @@ var qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", Jr = class {
3674
3691
  }, Z = {
3675
3692
  channel: null,
3676
3693
  status: "idle"
3677
- }, Q = null, Qr = (e) => ({
3694
+ }, Q = null, ri = (e) => ({
3678
3695
  id: "yoyoclaw-connection",
3679
3696
  async start() {
3680
- D().info("[yoyoclaw] plugin service enabled"), Q = new yn(!0);
3697
+ D().info("[yoyoclaw] plugin service enabled"), Q = new bn(!0);
3681
3698
  try {
3682
3699
  await Q.loadAndCleanStatus(), D().info("[yoyoclaw-conn] status tracker initialized and cleaned");
3683
3700
  } catch (e) {
@@ -3690,8 +3707,8 @@ var qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", Jr = class {
3690
3707
  D().error(`[yoyoclaw] failed to initialize plugin config: ${String(e)}`);
3691
3708
  }
3692
3709
  try {
3693
- let e = await un();
3694
- e?.token ? (D().info("[yoyoclaw-conn] token found, creating channel"), await $r(await W(), e)) : D().info("[yoyoclaw-conn] no token found, skipping channel creation");
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");
3695
3712
  } catch (e) {
3696
3713
  D().error(`[yoyoclaw-conn] failed to initialize connection: ${String(e)}`);
3697
3714
  }
@@ -3700,7 +3717,7 @@ var qr = { style: "SOUL.md" }, X = "[yoyoclaw-channel]", Jr = class {
3700
3717
  $(), D().info("[yoyoclaw-conn] stopping connection service"), Q &&= (await Q.destroy(), null);
3701
3718
  }
3702
3719
  });
3703
- async function $r(e, t) {
3720
+ async function ii(e, t) {
3704
3721
  return Z.status = "connecting", D().info(`[yoyoclaw-conn] creating new channel for device: ${e.deviceId}`), Q && await Q.handleEvent({
3705
3722
  type: G.CONNECTION_STATUS_CHANGED,
3706
3723
  timestamp: Date.now(),
@@ -3709,7 +3726,7 @@ async function $r(e, t) {
3709
3726
  previousStatus: Z.status
3710
3727
  }
3711
3728
  }), new Promise((n, r) => {
3712
- Z.channel = new Zr({
3729
+ Z.channel = new ni({
3713
3730
  deviceInfo: e,
3714
3731
  userInfo: t,
3715
3732
  onOpen: () => {
@@ -3734,17 +3751,17 @@ async function $r(e, t) {
3734
3751
  },
3735
3752
  onDeviceNotRegistered: async () => {
3736
3753
  D().info("[yoyoclaw-conn] device not registered, handling...");
3737
- let t = await un();
3754
+ let t = await dn();
3738
3755
  if (!t?.token) {
3739
3756
  D().info("[yoyoclaw-conn] no token available, treating as logout"), $();
3740
3757
  return;
3741
3758
  }
3742
3759
  try {
3743
- D().info("[yoyoclaw-conn] attempting to register device"), await zt(e, t), D().info("[yoyoclaw-conn] device registered successfully, reconnecting..."), $(), await $r(e, t);
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);
3744
3761
  } catch (e) {
3745
3762
  D().error(`[yoyoclaw-conn] device registration failed: ${String(e)}`), D().info("[yoyoclaw-conn] clearing token and destroying channel");
3746
3763
  try {
3747
- await dn();
3764
+ await fn();
3748
3765
  } catch (e) {
3749
3766
  D().error(`[yoyoclaw-conn] failed to clear token: ${String(e)}`);
3750
3767
  }
@@ -3754,7 +3771,7 @@ async function $r(e, t) {
3754
3771
  onUnauthorized: async () => {
3755
3772
  D().warn("[yoyoclaw-conn] connection unauthorized (401), clearing token and destroying channel");
3756
3773
  try {
3757
- await dn();
3774
+ await fn();
3758
3775
  } catch (e) {
3759
3776
  D().error(`[yoyoclaw-conn] failed to clear token: ${String(e)}`);
3760
3777
  }
@@ -3784,14 +3801,14 @@ function $() {
3784
3801
  }
3785
3802
  //#endregion
3786
3803
  //#region index.ts
3787
- var ei = {
3804
+ var ai = {
3788
3805
  id: "yoyo",
3789
3806
  name: "YOYOClaw",
3790
3807
  description: "OpenClaw Honor Yoyo connection plugin",
3791
- configSchema: On,
3808
+ configSchema: kn,
3792
3809
  register(e) {
3793
- pe(e.runtime), Se(e.logger), e.registerService(Qr(e)), e.on("before_prompt_build", async () => ({ prependSystemContext: Tn })), wn(e);
3810
+ pe(e.runtime), Se(e.logger), e.registerService(ri(e)), e.on("before_prompt_build", async () => ({ prependSystemContext: En })), Tn(e);
3794
3811
  }
3795
3812
  };
3796
3813
  //#endregion
3797
- export { ei as default };
3814
+ export { ai as default };