page-agent-sdk 4.16.0 → 4.17.0

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.
@@ -562,19 +562,19 @@ var G, Ee = /* @__PURE__ */ new WeakSet(), De = class {
562
562
  }
563
563
  run() {
564
564
  if (!(this.flags & 1)) return this.fn();
565
- this.flags |= 2, We(this), Pe(this);
566
- let e = G, t = Be;
567
- G = this, Be = !0;
565
+ this.flags |= 2, Ue(this), Pe(this);
566
+ let e = G, t = K;
567
+ G = this, K = !0;
568
568
  try {
569
569
  return this.fn();
570
570
  } finally {
571
- process.env.NODE_ENV !== "production" && G !== this && Ce("Active effect was not restored correctly - this is likely a Vue internal bug."), Fe(this), G = e, Be = t, this.flags &= -3;
571
+ process.env.NODE_ENV !== "production" && G !== this && Ce("Active effect was not restored correctly - this is likely a Vue internal bug."), Fe(this), G = e, K = t, this.flags &= -3;
572
572
  }
573
573
  }
574
574
  stop() {
575
575
  if (this.flags & 1) {
576
576
  for (let e = this.deps; e; e = e.nextDep) Re(e);
577
- this.deps = this.depsTail = void 0, We(this), this.onStop && this.onStop(), this.flags &= -2;
577
+ this.deps = this.depsTail = void 0, Ue(this), this.onStop && this.onStop(), this.flags &= -2;
578
578
  }
579
579
  }
580
580
  trigger() {
@@ -637,10 +637,10 @@ function Ie(e) {
637
637
  return !!e._dirty;
638
638
  }
639
639
  function Le(e) {
640
- if (e.flags & 4 && !(e.flags & 16) || (e.flags &= -17, e.globalVersion === Ge) || (e.globalVersion = Ge, !e.isSSR && e.flags & 128 && (!e.deps && !e._dirty || !Ie(e)))) return;
640
+ if (e.flags & 4 && !(e.flags & 16) || (e.flags &= -17, e.globalVersion === We) || (e.globalVersion = We, !e.isSSR && e.flags & 128 && (!e.deps && !e._dirty || !Ie(e)))) return;
641
641
  e.flags |= 2;
642
- let t = e.dep, n = G, r = Be;
643
- G = e, Be = !0;
642
+ let t = e.dep, n = G, r = K;
643
+ G = e, K = !0;
644
644
  try {
645
645
  Pe(e);
646
646
  let n = e.fn(e._value);
@@ -648,7 +648,7 @@ function Le(e) {
648
648
  } catch (e) {
649
649
  throw t.version++, e;
650
650
  } finally {
651
- G = n, Be = r, Fe(e), e.flags &= -3;
651
+ G = n, K = r, Fe(e), e.flags &= -3;
652
652
  }
653
653
  }
654
654
  function Re(e, t = !1) {
@@ -663,15 +663,15 @@ function ze(e) {
663
663
  let { prevDep: t, nextDep: n } = e;
664
664
  t && (t.nextDep = n, e.prevDep = void 0), n && (n.prevDep = t, e.nextDep = void 0);
665
665
  }
666
- var Be = !0, Ve = [];
667
- function He() {
668
- Ve.push(Be), Be = !1;
666
+ var K = !0, Be = [];
667
+ function Ve() {
668
+ Be.push(K), K = !1;
669
669
  }
670
- function Ue() {
671
- let e = Ve.pop();
672
- Be = e === void 0 || e;
670
+ function He() {
671
+ let e = Be.pop();
672
+ K = e === void 0 || e;
673
673
  }
674
- function We(e) {
674
+ function Ue(e) {
675
675
  let { cleanup: t } = e;
676
676
  if (e.cleanup = void 0, t) {
677
677
  let e = G;
@@ -683,18 +683,18 @@ function We(e) {
683
683
  }
684
684
  }
685
685
  }
686
- var Ge = 0, Ke = class {
686
+ var We = 0, Ge = class {
687
687
  constructor(e, t) {
688
688
  this.sub = e, this.dep = t, this.version = t.version, this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0;
689
689
  }
690
- }, qe = class {
690
+ }, Ke = class {
691
691
  constructor(e) {
692
692
  this.computed = e, this.version = 0, this.activeLink = void 0, this.subs = void 0, this.map = void 0, this.key = void 0, this.sc = 0, this.__v_skip = !0, process.env.NODE_ENV !== "production" && (this.subsHead = void 0);
693
693
  }
694
694
  track(e) {
695
- if (!G || !Be || G === this.computed) return;
695
+ if (!G || !K || G === this.computed) return;
696
696
  let t = this.activeLink;
697
- if (t === void 0 || t.sub !== G) t = this.activeLink = new Ke(G, this), G.deps ? (t.prevDep = G.depsTail, G.depsTail.nextDep = t, G.depsTail = t) : G.deps = G.depsTail = t, K(t);
697
+ if (t === void 0 || t.sub !== G) t = this.activeLink = new Ge(G, this), G.deps ? (t.prevDep = G.depsTail, G.depsTail.nextDep = t, G.depsTail = t) : G.deps = G.depsTail = t, qe(t);
698
698
  else if (t.version === -1 && (t.version = this.version, t.nextDep)) {
699
699
  let e = t.nextDep;
700
700
  e.prevDep = t.prevDep, t.prevDep && (t.prevDep.nextDep = e), t.prevDep = G.depsTail, t.nextDep = void 0, G.depsTail.nextDep = t, G.depsTail = t, G.deps === t && (G.deps = e);
@@ -702,7 +702,7 @@ var Ge = 0, Ke = class {
702
702
  return process.env.NODE_ENV !== "production" && G.onTrack && G.onTrack(M({ effect: G }, e)), t;
703
703
  }
704
704
  trigger(e) {
705
- this.version++, Ge++, this.notify(e);
705
+ this.version++, We++, this.notify(e);
706
706
  }
707
707
  notify(e) {
708
708
  Me();
@@ -714,24 +714,24 @@ var Ge = 0, Ke = class {
714
714
  }
715
715
  }
716
716
  };
717
- function K(e) {
717
+ function qe(e) {
718
718
  if (e.dep.sc++, e.sub.flags & 4) {
719
719
  let t = e.dep.computed;
720
720
  if (t && !e.dep.subs) {
721
721
  t.flags |= 20;
722
- for (let e = t.deps; e; e = e.nextDep) K(e);
722
+ for (let e = t.deps; e; e = e.nextDep) qe(e);
723
723
  }
724
724
  let n = e.dep.subs;
725
725
  n !== e && (e.prevSub = n, n && (n.nextSub = e)), process.env.NODE_ENV !== "production" && e.dep.subsHead === void 0 && (e.dep.subsHead = e), e.dep.subs = e;
726
726
  }
727
727
  }
728
- var Je = /* @__PURE__ */ new WeakMap(), Ye = /* @__PURE__ */ Symbol(process.env.NODE_ENV === "production" ? "" : "Object iterate"), Xe = /* @__PURE__ */ Symbol(process.env.NODE_ENV === "production" ? "" : "Map keys iterate"), Ze = /* @__PURE__ */ Symbol(process.env.NODE_ENV === "production" ? "" : "Array iterate");
729
- function q(e, t, n) {
730
- if (Be && G) {
731
- let r = Je.get(e);
732
- r || Je.set(e, r = /* @__PURE__ */ new Map());
728
+ var q = /* @__PURE__ */ new WeakMap(), Je = /* @__PURE__ */ Symbol(process.env.NODE_ENV === "production" ? "" : "Object iterate"), Ye = /* @__PURE__ */ Symbol(process.env.NODE_ENV === "production" ? "" : "Map keys iterate"), Xe = /* @__PURE__ */ Symbol(process.env.NODE_ENV === "production" ? "" : "Array iterate");
729
+ function Ze(e, t, n) {
730
+ if (K && G) {
731
+ let r = q.get(e);
732
+ r || q.set(e, r = /* @__PURE__ */ new Map());
733
733
  let i = r.get(n);
734
- i || (r.set(n, i = new qe()), i.map = r, i.key = n), process.env.NODE_ENV === "production" ? i.track() : i.track({
734
+ i || (r.set(n, i = new Ke()), i.map = r, i.key = n), process.env.NODE_ENV === "production" ? i.track() : i.track({
735
735
  target: e,
736
736
  type: t,
737
737
  key: n
@@ -739,9 +739,9 @@ function q(e, t, n) {
739
739
  }
740
740
  }
741
741
  function Qe(e, t, n, r, i, a) {
742
- let o = Je.get(e);
742
+ let o = q.get(e);
743
743
  if (!o) {
744
- Ge++;
744
+ We++;
745
745
  return;
746
746
  }
747
747
  let s = (o) => {
@@ -760,17 +760,17 @@ function Qe(e, t, n, r, i, a) {
760
760
  if (i && n === "length") {
761
761
  let e = Number(r);
762
762
  o.forEach((t, n) => {
763
- (n === "length" || n === Ze || !de(n) && n >= e) && s(t);
763
+ (n === "length" || n === Xe || !de(n) && n >= e) && s(t);
764
764
  });
765
- } else switch ((n !== void 0 || o.has(void 0)) && s(o.get(n)), a && s(o.get(Ze)), t) {
765
+ } else switch ((n !== void 0 || o.has(void 0)) && s(o.get(n)), a && s(o.get(Xe)), t) {
766
766
  case "add":
767
- i ? a && s(o.get("length")) : (s(o.get(Ye)), le(e) && s(o.get(Xe)));
767
+ i ? a && s(o.get("length")) : (s(o.get(Je)), le(e) && s(o.get(Ye)));
768
768
  break;
769
769
  case "delete":
770
- i || (s(o.get(Ye)), le(e) && s(o.get(Xe)));
770
+ i || (s(o.get(Je)), le(e) && s(o.get(Ye)));
771
771
  break;
772
772
  case "set":
773
- le(e) && s(o.get(Ye));
773
+ le(e) && s(o.get(Je));
774
774
  break;
775
775
  }
776
776
  }
@@ -778,10 +778,10 @@ function Qe(e, t, n, r, i, a) {
778
778
  }
779
779
  function $e(e) {
780
780
  let t = /* @__PURE__ */ Y(e);
781
- return t === e ? t : (q(t, "iterate", Ze), /* @__PURE__ */ Rt(e) ? t : t.map(Vt));
781
+ return t === e ? t : (Ze(t, "iterate", Xe), /* @__PURE__ */ Rt(e) ? t : t.map(Vt));
782
782
  }
783
783
  function et(e) {
784
- return q(e = /* @__PURE__ */ Y(e), "iterate", Ze), e;
784
+ return Ze(e = /* @__PURE__ */ Y(e), "iterate", Xe), e;
785
785
  }
786
786
  function tt(e, t) {
787
787
  return /* @__PURE__ */ Lt(e) ? Ht(/* @__PURE__ */ It(e) ? Vt(t) : t) : Vt(t);
@@ -905,20 +905,20 @@ function ot(e, t, n, r) {
905
905
  }
906
906
  function st(e, t, n) {
907
907
  let r = /* @__PURE__ */ Y(e);
908
- q(r, "iterate", Ze);
908
+ Ze(r, "iterate", Xe);
909
909
  let i = r[t](...n);
910
910
  return (i === -1 || i === !1) && /* @__PURE__ */ zt(n[0]) ? (n[0] = /* @__PURE__ */ Y(n[0]), r[t](...n)) : i;
911
911
  }
912
912
  function ct(e, t, n = []) {
913
- He(), Me();
913
+ Ve(), Me();
914
914
  let r = (/* @__PURE__ */ Y(e))[t].apply(e, n);
915
- return Ne(), Ue(), r;
915
+ return Ne(), He(), r;
916
916
  }
917
917
  var lt = /* @__PURE__ */ ae("__proto__,__v_isRef,__isVue"), ut = new Set(/* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((e) => e !== "arguments" && e !== "caller").map((e) => Symbol[e]).filter(de));
918
918
  function dt(e) {
919
919
  de(e) || (e = String(e));
920
920
  let t = /* @__PURE__ */ Y(this);
921
- return q(t, "has", e), t.hasOwnProperty(e);
921
+ return Ze(t, "has", e), t.hasOwnProperty(e);
922
922
  }
923
923
  var ft = class {
924
924
  constructor(e = !1, t = !1) {
@@ -930,7 +930,7 @@ var ft = class {
930
930
  if (t === "__v_isReactive") return !r;
931
931
  if (t === "__v_isReadonly") return r;
932
932
  if (t === "__v_isShallow") return i;
933
- if (t === "__v_raw") return n === (r ? i ? At : J : i ? kt : Ot).get(e) || Object.getPrototypeOf(e) === Object.getPrototypeOf(n) ? e : void 0;
933
+ if (t === "__v_raw") return n === (r ? i ? J : At : i ? kt : Ot).get(e) || Object.getPrototypeOf(e) === Object.getPrototypeOf(n) ? e : void 0;
934
934
  let a = F(e);
935
935
  if (!r) {
936
936
  let e;
@@ -938,7 +938,7 @@ var ft = class {
938
938
  if (t === "hasOwnProperty") return dt;
939
939
  }
940
940
  let o = Reflect.get(e, t, /* @__PURE__ */ Ut(e) ? e : n);
941
- if ((de(t) ? ut.has(t) : lt(t)) || (r || q(e, "get", t), i)) return o;
941
+ if ((de(t) ? ut.has(t) : lt(t)) || (r || Ze(e, "get", t), i)) return o;
942
942
  if (/* @__PURE__ */ Ut(o)) {
943
943
  let e = a && me(t) ? o : o.value;
944
944
  return r && R(e) ? /* @__PURE__ */ Nt(e) : e;
@@ -964,10 +964,10 @@ var ft = class {
964
964
  }
965
965
  has(e, t) {
966
966
  let n = Reflect.has(e, t);
967
- return (!de(t) || !ut.has(t)) && q(e, "has", t), n;
967
+ return (!de(t) || !ut.has(t)) && Ze(e, "has", t), n;
968
968
  }
969
969
  ownKeys(e) {
970
- return q(e, "iterate", F(e) ? "length" : Ye), Reflect.ownKeys(e);
970
+ return Ze(e, "iterate", F(e) ? "length" : Je), Reflect.ownKeys(e);
971
971
  }
972
972
  }, mt = class extends ft {
973
973
  constructor(e = !1) {
@@ -983,7 +983,7 @@ var ft = class {
983
983
  function bt(e, t, n) {
984
984
  return function(...r) {
985
985
  let i = this.__v_raw, a = /* @__PURE__ */ Y(i), o = le(a), s = e === "entries" || e === Symbol.iterator && o, c = e === "keys" && o, l = i[e](...r), u = n ? vt : t ? Ht : Vt;
986
- return !t && q(a, "iterate", c ? Xe : Ye), M(Object.create(l), { next() {
986
+ return !t && Ze(a, "iterate", c ? Ye : Je), M(Object.create(l), { next() {
987
987
  let { value: e, done: t } = l.next();
988
988
  return t ? {
989
989
  value: e,
@@ -1008,7 +1008,7 @@ function St(e, t) {
1008
1008
  let n = {
1009
1009
  get(n) {
1010
1010
  let r = this.__v_raw, i = /* @__PURE__ */ Y(r), a = /* @__PURE__ */ Y(n);
1011
- e || (H(n, a) && q(i, "get", n), q(i, "get", a));
1011
+ e || (H(n, a) && Ze(i, "get", n), Ze(i, "get", a));
1012
1012
  let { has: o } = yt(i), s = t ? vt : e ? Ht : Vt;
1013
1013
  if (o.call(i, n)) return s(r.get(n));
1014
1014
  if (o.call(i, a)) return s(r.get(a));
@@ -1016,15 +1016,15 @@ function St(e, t) {
1016
1016
  },
1017
1017
  get size() {
1018
1018
  let t = this.__v_raw;
1019
- return !e && q(/* @__PURE__ */ Y(t), "iterate", Ye), t.size;
1019
+ return !e && Ze(/* @__PURE__ */ Y(t), "iterate", Je), t.size;
1020
1020
  },
1021
1021
  has(t) {
1022
1022
  let n = this.__v_raw, r = /* @__PURE__ */ Y(n), i = /* @__PURE__ */ Y(t);
1023
- return e || (H(t, i) && q(r, "has", t), q(r, "has", i)), t === i ? n.has(t) : n.has(t) || n.has(i);
1023
+ return e || (H(t, i) && Ze(r, "has", t), Ze(r, "has", i)), t === i ? n.has(t) : n.has(t) || n.has(i);
1024
1024
  },
1025
1025
  forEach(n, r) {
1026
1026
  let i = this, a = i.__v_raw, o = /* @__PURE__ */ Y(a), s = t ? vt : e ? Ht : Vt;
1027
- return !e && q(o, "iterate", Ye), a.forEach((e, t) => n.call(r, s(e), s(t), i));
1027
+ return !e && Ze(o, "iterate", Je), a.forEach((e, t) => n.call(r, s(e), s(t), i));
1028
1028
  }
1029
1029
  };
1030
1030
  return M(n, e ? {
@@ -1075,7 +1075,7 @@ function Dt(e, t, n) {
1075
1075
  Ce(`Reactive ${t} contains both the raw and reactive versions of the same object${t === "Map" ? " as keys" : ""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`);
1076
1076
  }
1077
1077
  }
1078
- var Ot = /* @__PURE__ */ new WeakMap(), kt = /* @__PURE__ */ new WeakMap(), J = /* @__PURE__ */ new WeakMap(), At = /* @__PURE__ */ new WeakMap();
1078
+ var Ot = /* @__PURE__ */ new WeakMap(), kt = /* @__PURE__ */ new WeakMap(), At = /* @__PURE__ */ new WeakMap(), J = /* @__PURE__ */ new WeakMap();
1079
1079
  function jt(e) {
1080
1080
  switch (e) {
1081
1081
  case "Object":
@@ -1093,11 +1093,11 @@ function Mt(e) {
1093
1093
  }
1094
1094
  // @__NO_SIDE_EFFECTS__
1095
1095
  function Nt(e) {
1096
- return Ft(e, !0, gt, Tt, J);
1096
+ return Ft(e, !0, gt, Tt, At);
1097
1097
  }
1098
1098
  // @__NO_SIDE_EFFECTS__
1099
1099
  function Pt(e) {
1100
- return Ft(e, !0, _t, Et, At);
1100
+ return Ft(e, !0, _t, Et, J);
1101
1101
  }
1102
1102
  function Ft(e, t, n, r, i) {
1103
1103
  if (!R(e)) return process.env.NODE_ENV !== "production" && Ce(`value cannot be made ${t ? "readonly" : "reactive"}: ${String(e)}`), e;
@@ -1151,7 +1151,7 @@ function Kt(e, t) {
1151
1151
  }
1152
1152
  var qt = class {
1153
1153
  constructor(e, t) {
1154
- this.dep = new qe(), this.__v_isRef = !0, this.__v_isShallow = !1, this._rawValue = t ? e : /* @__PURE__ */ Y(e), this._value = t ? e : Vt(e), this.__v_isShallow = t;
1154
+ this.dep = new Ke(), this.__v_isRef = !0, this.__v_isShallow = !1, this._rawValue = t ? e : /* @__PURE__ */ Y(e), this._value = t ? e : Vt(e), this.__v_isShallow = t;
1155
1155
  }
1156
1156
  get value() {
1157
1157
  return process.env.NODE_ENV === "production" ? this.dep.track() : this.dep.track({
@@ -1182,19 +1182,19 @@ function Jt(e) {
1182
1182
  function Yt(e) {
1183
1183
  return /* @__PURE__ */ Ut(e) ? e.value : e;
1184
1184
  }
1185
- var X = {
1185
+ var Xt = {
1186
1186
  get: (e, t, n) => t === "__v_raw" ? e : Yt(Reflect.get(e, t, n)),
1187
1187
  set: (e, t, n, r) => {
1188
1188
  let i = e[t];
1189
1189
  return /* @__PURE__ */ Ut(i) && !/* @__PURE__ */ Ut(n) ? (i.value = n, !0) : Reflect.set(e, t, n, r);
1190
1190
  }
1191
1191
  };
1192
- function Xt(e) {
1193
- return /* @__PURE__ */ It(e) ? e : new Proxy(e, X);
1192
+ function X(e) {
1193
+ return /* @__PURE__ */ It(e) ? e : new Proxy(e, Xt);
1194
1194
  }
1195
1195
  var Zt = class {
1196
1196
  constructor(e, t, n) {
1197
- this.fn = e, this.setter = t, this._value = void 0, this.dep = new qe(this), this.__v_isRef = !0, this.deps = void 0, this.depsTail = void 0, this.flags = 16, this.globalVersion = Ge - 1, this.next = void 0, this.effect = this, this.__v_isReadonly = !t, this.isSSR = n;
1197
+ this.fn = e, this.setter = t, this._value = void 0, this.dep = new Ke(this), this.__v_isRef = !0, this.deps = void 0, this.depsTail = void 0, this.flags = 16, this.globalVersion = We - 1, this.next = void 0, this.effect = this, this.__v_isReadonly = !t, this.isSSR = n;
1198
1198
  }
1199
1199
  notify() {
1200
1200
  if (this.flags |= 16, !(this.flags & 8) && G !== this) return je(this, !0), !0;
@@ -1237,11 +1237,11 @@ function rn(e, t, n = A) {
1237
1237
  process.env.NODE_ENV !== "production" && l(e);
1238
1238
  })) : L(e) ? f = t ? c ? () => c(e, 2) : e : () => {
1239
1239
  if (p) {
1240
- He();
1240
+ Ve();
1241
1241
  try {
1242
1242
  p();
1243
1243
  } finally {
1244
- Ue();
1244
+ He();
1245
1245
  }
1246
1246
  }
1247
1247
  let t = tn;
@@ -1319,7 +1319,7 @@ function cn() {
1319
1319
  var ln = !1;
1320
1320
  function un(e, ...t) {
1321
1321
  if (ln) return;
1322
- ln = !0, He();
1322
+ ln = !0, Ve();
1323
1323
  let n = on.length ? on[on.length - 1].component : null, r = n && n.appContext.config.warnHandler, i = dn();
1324
1324
  if (r) _n(r, n, 11, [
1325
1325
  e + t.map((e) => e.toString?.call(e) ?? JSON.stringify(e)).join(""),
@@ -1331,7 +1331,7 @@ function un(e, ...t) {
1331
1331
  let n = [`[Vue warn]: ${e}`, ...t];
1332
1332
  i.length && n.push("\n", ...fn(i)), console.warn(...n);
1333
1333
  }
1334
- Ue(), ln = !1;
1334
+ He(), ln = !1;
1335
1335
  }
1336
1336
  function dn() {
1337
1337
  let e = on[on.length - 1];
@@ -1440,11 +1440,11 @@ function yn(e, t, n, r = !0) {
1440
1440
  r = r.parent;
1441
1441
  }
1442
1442
  if (a) {
1443
- He(), _n(a, null, 10, [
1443
+ Ve(), _n(a, null, 10, [
1444
1444
  e,
1445
1445
  i,
1446
1446
  o
1447
- ]), Ue();
1447
+ ]), He();
1448
1448
  return;
1449
1449
  }
1450
1450
  }
@@ -1684,7 +1684,7 @@ var ar = /* @__PURE__ */ Symbol.for("v-ndc"), or = (e) => e ? Yr(e) ? Zr(e) : or
1684
1684
  else dr && (o[t] = 0);
1685
1685
  }
1686
1686
  let l = sr[t], u, d;
1687
- if (l) return t === "$attrs" ? (q(e.attrs, "get", ""), process.env.NODE_ENV) : process.env.NODE_ENV !== "production" && t === "$slots" && q(e, "get", t), l(e);
1687
+ if (l) return t === "$attrs" ? (Ze(e.attrs, "get", ""), process.env.NODE_ENV) : process.env.NODE_ENV !== "production" && t === "$slots" && Ze(e, "get", t), l(e);
1688
1688
  if ((u = s.__cssModules) && (u = u[t])) return u;
1689
1689
  if (n !== A && P(n, t)) return o[t] = 4, n[t];
1690
1690
  if (d = c.config.globalProperties, P(d, t)) return d[t];
@@ -1943,7 +1943,7 @@ function Yr(e) {
1943
1943
  var Xr = !1;
1944
1944
  process.env.NODE_ENV;
1945
1945
  function Zr(e) {
1946
- return e.exposed ? e.exposeProxy ||= new Proxy(Xt(Bt(e.exposed)), {
1946
+ return e.exposed ? e.exposeProxy ||= new Proxy(X(Bt(e.exposed)), {
1947
1947
  get(t, n) {
1948
1948
  if (n in t) return t[n];
1949
1949
  if (n in sr) return sr[n](e);
@@ -1994,9 +1994,9 @@ function ii() {
1994
1994
  "VueInstance"
1995
1995
  ];
1996
1996
  if (/* @__PURE__ */ Ut(t)) {
1997
- He();
1997
+ Ve();
1998
1998
  let n = t.value;
1999
- return Ue(), [
1999
+ return He(), [
2000
2000
  "div",
2001
2001
  {},
2002
2002
  [
@@ -12401,6 +12401,11 @@ var em = [
12401
12401
  {
12402
12402
  name: "pageContext",
12403
12403
  defaultOn: !1
12404
+ },
12405
+ {
12406
+ name: "domEdit",
12407
+ defaultOn: !1,
12408
+ requires: ["domInspect"]
12404
12409
  }
12405
12410
  ];
12406
12411
  function tm(e) {
@@ -13307,9 +13312,298 @@ function Rh(e) {
13307
13312
  });
13308
13313
  }
13309
13314
  //#endregion
13315
+ //#region src/core/tools/domEdit.ts
13316
+ var zh = "data-pg-snap", Bh = 20, Vh = 256 * 1024, Hh = t.enum([
13317
+ "before",
13318
+ "after",
13319
+ "prepend",
13320
+ "append",
13321
+ "replace"
13322
+ ]), Uh = /* @__PURE__ */ new Set([
13323
+ "script",
13324
+ "iframe",
13325
+ "object",
13326
+ "embed",
13327
+ "link",
13328
+ "meta",
13329
+ "base"
13330
+ ]), Wh = /^on\w+$/i, Gh = /* @__PURE__ */ new Set([
13331
+ "href",
13332
+ "src",
13333
+ "action",
13334
+ "formaction",
13335
+ "xlink:href",
13336
+ "data"
13337
+ ]);
13338
+ function Kh(e) {
13339
+ return /^\s*(javascript|vbscript)\s*:/i.test(e);
13340
+ }
13341
+ function qh(e) {
13342
+ return !e || !/^[a-zA-Z_:][-a-zA-Z0-9_:.]*$/.test(e) ? `非法属性名 "${e}"` : Wh.test(e) ? `事件属性 ${e} 被拒(on* 内联脚本防误执行)` : null;
13343
+ }
13344
+ function Jh(e, t) {
13345
+ let n = [];
13346
+ Uh.has(e.toLowerCase()) && n.push(`标签 <${e}> 被拒(可执行/页面行为面;文档标注场景请用常规内容标签)`);
13347
+ for (let [e, r] of Object.entries(t ?? {})) {
13348
+ let t = qh(e);
13349
+ t ? n.push(t) : Gh.has(e.toLowerCase()) && Kh(String(r)) && n.push(`${e} 的 javascript:/vbscript: 协议被拒`);
13350
+ }
13351
+ return n;
13352
+ }
13353
+ var Yh = t.discriminatedUnion("op", [
13354
+ t.object({
13355
+ op: t.literal("set_text"),
13356
+ selector: t.string().min(1),
13357
+ text: t.string()
13358
+ }),
13359
+ t.object({
13360
+ op: t.literal("set_html"),
13361
+ selector: t.string().min(1),
13362
+ html: t.string()
13363
+ }),
13364
+ t.object({
13365
+ op: t.literal("set_attr"),
13366
+ selector: t.string().min(1),
13367
+ name: t.string().min(1),
13368
+ value: t.string()
13369
+ }),
13370
+ t.object({
13371
+ op: t.literal("remove_attr"),
13372
+ selector: t.string().min(1),
13373
+ name: t.string().min(1)
13374
+ }),
13375
+ t.object({
13376
+ op: t.literal("add_class"),
13377
+ selector: t.string().min(1),
13378
+ classes: t.string().min(1).describe("空格分隔")
13379
+ }),
13380
+ t.object({
13381
+ op: t.literal("remove_class"),
13382
+ selector: t.string().min(1),
13383
+ classes: t.string().min(1).describe("空格分隔")
13384
+ }),
13385
+ t.object({
13386
+ op: t.literal("set_style"),
13387
+ selector: t.string().min(1),
13388
+ style: t.record(t.string(), t.string()).describe("CSS 属性 → 值")
13389
+ }),
13390
+ t.object({
13391
+ op: t.literal("insert"),
13392
+ anchor: t.string().min(1).describe("锚元素 selector"),
13393
+ position: Hh.describe("before/after = 锚前后兄弟;prepend/append = 锚首尾子;replace = 换掉锚本身"),
13394
+ tag: t.string().min(1).describe("新元素标签名,如 div/span/mark"),
13395
+ attrs: t.record(t.string(), t.string()).optional(),
13396
+ text: t.string().optional(),
13397
+ html: t.string().optional()
13398
+ }),
13399
+ t.object({
13400
+ op: t.literal("remove"),
13401
+ selector: t.string().min(1)
13402
+ }),
13403
+ t.object({
13404
+ op: t.literal("move"),
13405
+ selector: t.string().min(1).describe("要移动的元素"),
13406
+ to: t.string().min(1).describe("目标父容器 selector"),
13407
+ position: t.enum([
13408
+ "prepend",
13409
+ "append",
13410
+ "before",
13411
+ "after"
13412
+ ]).describe("并入 to 的方式")
13413
+ }),
13414
+ t.object({
13415
+ op: t.literal("highlight"),
13416
+ selector: t.string().min(1),
13417
+ color: t.string().optional().describe("高亮色(默认黄 #fef08a)"),
13418
+ scroll: t.boolean().optional().describe("滚动到可视区(默认 true)"),
13419
+ note: t.string().optional().describe("可选浮注文案")
13420
+ })
13421
+ ]);
13422
+ function Xh(e) {
13423
+ let t = [];
13424
+ for (let n = 0; n < e.length; n++) {
13425
+ let r = e[n], i = `patches[${n}](${r.op})`;
13426
+ if (r.op === "set_attr") {
13427
+ let e = qh(r.name);
13428
+ e ? t.push(`${i}: ${e}`) : Gh.has(r.name.toLowerCase()) && Kh(r.value) && t.push(`${i}: ${r.name} 的 javascript:/vbscript: 协议被拒`);
13429
+ }
13430
+ r.op === "insert" && (t.push(...Jh(r.tag, r.attrs).map((e) => `${i}: ${e}`)), r.text !== void 0 && r.html !== void 0 && t.push(`${i}: text 与 html 二选一`)), r.op === "highlight" && r.color && !/^#[0-9a-fA-F]{3,8}$|^[a-zA-Z]+$/.test(r.color) && t.push(`${i}: color 仅接受 hex 或颜色名`);
13431
+ }
13432
+ return t;
13433
+ }
13434
+ function Zh(e = {}) {
13435
+ let n = [], r = 0, i = () => e.getDocument?.() ?? (typeof document < "u" ? document : null), a = (e, t, n) => {
13436
+ let r = [];
13437
+ try {
13438
+ r = Array.from(e.querySelectorAll(t));
13439
+ } catch {
13440
+ return { err: `${n}: selector 语法错误 "${t}"` };
13441
+ }
13442
+ return r.length ? r.length > 1 ? { err: `${n}: selector 命中 ${r.length} 个元素,写操作要求唯一匹配。加层级/属性约束收窄(如 "${t}:first-child" 不行就用索引路径或唯一 class)` } : { el: r[0] } : { err: `${n}: 未命中任何元素(selector="${t}")。先用 get_dom/dom_search 定位,再写更精确的 selector` };
13443
+ }, o = (e) => ji(e) ? "目标元素位于 SDK 对话框自身 DOM 内,写操作被拒(防 agent 改坏自己的 UI)。请操作宿主页面内容区域" : null, c = (e, t) => {
13444
+ if (!e) return null;
13445
+ let n = e.outerHTML;
13446
+ if (n.length > Vh) return `快照超限:受影响子树 ${(n.length / 1024).toFixed(0)}KB > ${Vh / 1024}KB。缩小 selector 到更深的子树再改(快照是回滚安全网,巨树快照爆内存)`;
13447
+ let i = e.getAttribute?.(zh) ?? "";
13448
+ return i || (i = `pg${++r}`, e.setAttribute?.(zh, i)), t.some((e) => e.id === i) || t.push({
13449
+ id: i,
13450
+ html: n
13451
+ }), null;
13452
+ }, l = (e, t, n) => {
13453
+ switch (t.op) {
13454
+ case "set_text":
13455
+ case "set_html":
13456
+ case "set_attr":
13457
+ case "remove_attr":
13458
+ case "add_class":
13459
+ case "remove_class":
13460
+ case "set_style":
13461
+ case "highlight": {
13462
+ let r = a(e, t.selector, `${t.op} selector`);
13463
+ if ("err" in r) return r.err;
13464
+ let i = o(r.el);
13465
+ if (i) return i;
13466
+ let s = c(r.el, n);
13467
+ if (s) return s;
13468
+ switch (t.op) {
13469
+ case "set_text":
13470
+ r.el.textContent = t.text;
13471
+ break;
13472
+ case "set_html":
13473
+ r.el.innerHTML = t.html;
13474
+ break;
13475
+ case "set_attr":
13476
+ r.el.setAttribute(t.name, t.value);
13477
+ break;
13478
+ case "remove_attr":
13479
+ r.el.removeAttribute(t.name);
13480
+ break;
13481
+ case "add_class":
13482
+ r.el.classList?.add(...t.classes.split(/\s+/).filter(Boolean));
13483
+ break;
13484
+ case "remove_class":
13485
+ r.el.classList?.remove(...t.classes.split(/\s+/).filter(Boolean));
13486
+ break;
13487
+ case "set_style": {
13488
+ let e = r.el.style;
13489
+ for (let [n, r] of Object.entries(t.style)) e[n] = r;
13490
+ break;
13491
+ }
13492
+ case "highlight": {
13493
+ let e = t.color ?? "#fef08a", n = r.el.style;
13494
+ n.backgroundColor = e, n.outline = "2px solid rgba(59,130,246,.85)", t.note && r.el.setAttribute("title", t.note), t.scroll !== !1 && r.el.scrollIntoView?.({
13495
+ behavior: "smooth",
13496
+ block: "center"
13497
+ });
13498
+ break;
13499
+ }
13500
+ }
13501
+ return null;
13502
+ }
13503
+ case "insert": {
13504
+ let r = a(e, t.anchor, "insert anchor");
13505
+ if ("err" in r) return r.err;
13506
+ let i = r.el, s = o(i) ?? (t.position === "replace" ? null : o(i.parentElement ?? i));
13507
+ if (s) return s;
13508
+ let l = t.position === "prepend" || t.position === "append" ? i : i.parentElement, u = c(l ?? i, n);
13509
+ if (u) return u;
13510
+ let d = e.createElement(t.tag);
13511
+ for (let [e, n] of Object.entries(t.attrs ?? {})) d.setAttribute(e, n);
13512
+ return t.html === void 0 ? t.text !== void 0 && (d.textContent = t.text) : d.innerHTML = t.html, t.position === "prepend" ? i.prepend(d) : t.position === "append" ? i.appendChild(d) : t.position === "before" ? (i.parentElement ?? i).insertBefore(d, i) : t.position === "after" ? (i.parentElement ?? i).insertBefore(d, i.nextSibling) : i.replaceWith(d), null;
13513
+ }
13514
+ case "remove": {
13515
+ let r = a(e, t.selector, "remove selector");
13516
+ return "err" in r ? r.err : o(r.el) || (r.el.parentElement ? c(r.el.parentElement, n) || (r.el.remove(), null) : "remove: 目标无父容器(根元素不可删)");
13517
+ }
13518
+ case "move": {
13519
+ let r = a(e, t.selector, "move selector");
13520
+ if ("err" in r) return r.err;
13521
+ let i = a(e, t.to, "move to");
13522
+ if ("err" in i) return i.err;
13523
+ let s = o(r.el) ?? o(i.el);
13524
+ if (s) return s;
13525
+ if (r.el.contains(i.el)) return "move: 不能把元素移进它自己的子孙(循环结构)";
13526
+ let l = r.el.parentElement;
13527
+ return l ? c(l, n) || c(t.position === "prepend" || t.position === "append" ? i.el : i.el.parentElement ?? i.el, n) || (t.position === "prepend" ? i.el.prepend(r.el) : t.position === "append" ? i.el.appendChild(r.el) : t.position === "before" ? (i.el.parentElement ?? i.el).insertBefore(r.el, i.el) : (i.el.parentElement ?? i.el).insertBefore(r.el, i.el.nextSibling), null) : "move: 目标无父容器";
13528
+ }
13529
+ }
13530
+ };
13531
+ return [s(async ({ patches: t, dryRun: r }) => {
13532
+ let s = i();
13533
+ if (!s) return "ERROR: dom_edit 仅在浏览器环境可用(当前运行在 node/服务端,无 DOM)。改数据请用 write 工具。";
13534
+ if (!t?.length) return "ERROR: patches 不能为空。支持 op:set_text/set_html/set_attr/remove_attr/add_class/remove_class/set_style/insert/remove/move/highlight";
13535
+ let c = Xh(t);
13536
+ if (c.length) return `ERROR: 校验失败(整批拒绝,零改动):\n- ${c.join("\n- ")}`;
13537
+ let u = (e, t) => {
13538
+ let n = a(s, e, t);
13539
+ return "err" in n ? n.err : o(n.el);
13540
+ };
13541
+ for (let e = 0; e < t.length; e++) {
13542
+ let n = t[e], r = n.op === "insert" ? u(n.anchor, `patches[${e}](insert) anchor`) : u(n.selector, `patches[${e}](${n.op}) selector`);
13543
+ if (r) return `ERROR: ${r}\n(整批拒绝,零改动)`;
13544
+ if (n.op === "move") {
13545
+ let t = u(n.to, `patches[${e}](move) to`);
13546
+ if (t) return `ERROR: ${t}\n(整批拒绝,零改动)`;
13547
+ }
13548
+ }
13549
+ let d = t.map((e) => e.op === "insert" ? `insert<${e.tag}>` : e.op);
13550
+ if (r) return e.onEdit?.({
13551
+ ops: d,
13552
+ applied: 0,
13553
+ dryRun: !0
13554
+ }), `dryRun 通过:${t.length} 个操作可应用,未落地。\n${d.map((e, t) => `${t + 1}. ${e}`).join("\n")}\n确认后去掉 dryRun 重发。`;
13555
+ let f = [];
13556
+ for (let e = 0; e < t.length; e++) {
13557
+ let n = l(s, t[e], f);
13558
+ if (n) return `ERROR: patches[${e}] 应用失败:${n}\n本条未应用;此前的操作已生效,可用 dom_restore 回滚到本批之前。`;
13559
+ }
13560
+ return f.length && (n.push({
13561
+ snips: f,
13562
+ ops: d
13563
+ }), n.length > Bh && n.shift()), e.onEdit?.({
13564
+ ops: d,
13565
+ applied: t.length,
13566
+ dryRun: !1
13567
+ }), `已应用 ${t.length} 个操作(${d.join(", ")})。页面为临时态(刷新即失);不满意可 dom_restore 回滚到本批之前;视觉验证可 take_screenshot。`;
13568
+ }, {
13569
+ name: "dom_edit",
13570
+ description: "修改宿主页面元素(标注/内容/结构):patches 批量原子操作(任一失败整批拒绝)。op 集:set_text/set_html(内容)、set_attr/remove_attr、add_class/remove_class、set_style(样式)、insert(新建元素,before/after/prepend/append/replace)、remove、move(层级调整)、highlight(高亮+滚动定位)。纪律:selector 必须唯一命中(先 get_dom/dom_search 定位);改前自动快照,dom_restore 回滚;数据驱动页面请改数据而非 DOM。",
13571
+ schema: t.object({
13572
+ patches: t.array(Yh).min(1).max(20).describe("批量操作(原子;顺序应用)"),
13573
+ dryRun: t.boolean().optional().describe("只校验不落地(预检)")
13574
+ })
13575
+ }), s(async () => {
13576
+ let e = i();
13577
+ if (!e) return "ERROR: dom_restore 仅在浏览器环境可用。";
13578
+ let t = n.pop();
13579
+ if (!t) return "无可用快照(栈空)。";
13580
+ let r = 0, a = [];
13581
+ for (let n = t.snips.length - 1; n >= 0; n--) {
13582
+ let { id: i, html: o } = t.snips[n], s = e.querySelector(`[${zh}="${i}"]`);
13583
+ if (!s) {
13584
+ a.push(i);
13585
+ continue;
13586
+ }
13587
+ let c = e.createElement("template");
13588
+ c.innerHTML = o;
13589
+ let l = c.content.firstElementChild;
13590
+ if (!l) {
13591
+ a.push(i);
13592
+ continue;
13593
+ }
13594
+ s.replaceWith(l), r++;
13595
+ }
13596
+ return a.length ? `已回滚 ${r}/${t.snips.length} 处;${a.length} 处快照点已被后续结构变更覆盖(元素被整体替换),未能复原 —— 刷新页面可回宿主初始态。` : `已回滚最近一批 ${t.ops.join(", ")}(共 ${r} 处)。`;
13597
+ }, {
13598
+ name: "dom_restore",
13599
+ description: "回滚最近一次 dom_edit 批操作(自动快照;可连续调用逐批回退,栈上限 20 批)。快照点被后续结构变更覆盖时如实报告未复原数。",
13600
+ schema: t.object({}).optional()
13601
+ })];
13602
+ }
13603
+ //#endregion
13310
13604
  //#region src/core/tools/fetchDoc.ts
13311
- var zh = 3e4, Bh = [s(async ({ url: e, as: t }) => {
13312
- let n = new AbortController(), r = setTimeout(() => n.abort(), zh);
13605
+ var Qh = 3e4, $h = [s(async ({ url: e, as: t }) => {
13606
+ let n = new AbortController(), r = setTimeout(() => n.abort(), Qh);
13313
13607
  try {
13314
13608
  let r = await fetch(e, {
13315
13609
  method: "GET",
@@ -13326,7 +13620,7 @@ var zh = 3e4, Bh = [s(async ({ url: e, as: t }) => {
13326
13620
  ].join("\n");
13327
13621
  } catch (t) {
13328
13622
  let r = t?.message || String(t);
13329
- return n.signal.aborted ? `获取失败:请求超时(${zh}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
13623
+ return n.signal.aborted ? `获取失败:请求超时(${Qh}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
13330
13624
  } finally {
13331
13625
  clearTimeout(r);
13332
13626
  }
@@ -13337,7 +13631,7 @@ var zh = 3e4, Bh = [s(async ({ url: e, as: t }) => {
13337
13631
  url: t.string().describe("要抓取的 URL(同源或已配 CORS)"),
13338
13632
  as: t.enum(["text", "markdown"]).optional().describe("返回格式标签,默认 text")
13339
13633
  })
13340
- })], Vh = [
13634
+ })], eg = [
13341
13635
  "id",
13342
13636
  "class",
13343
13637
  "href",
@@ -13349,12 +13643,12 @@ var zh = 3e4, Bh = [s(async ({ url: e, as: t }) => {
13349
13643
  "aria-label",
13350
13644
  "name",
13351
13645
  "type"
13352
- ], Hh = /^(value|srcdoc|formaction|on\w+)$/i, Uh = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session/i;
13353
- function Wh(e, t) {
13646
+ ], tg = /^(value|srcdoc|formaction|on\w+)$/i, ng = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session/i;
13647
+ function rg(e, t) {
13354
13648
  if (!e) return null;
13355
- let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ?? Vh, s = (e) => {
13649
+ let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ?? eg, s = (e) => {
13356
13650
  let t = {};
13357
- for (let n of Array.from(e.attributes)) (a ? o.includes(n.name) : o.includes(n.name) || n.name.startsWith("data-")) && (Hh.test(n.name) || Uh.test(n.name) || (t[n.name] = n.value));
13651
+ for (let n of Array.from(e.attributes)) (a ? o.includes(n.name) : o.includes(n.name) || n.name.startsWith("data-")) && (tg.test(n.name) || ng.test(n.name) || (t[n.name] = n.value));
13358
13652
  return t;
13359
13653
  }, c = (e, t) => {
13360
13654
  let n = {
@@ -13370,11 +13664,11 @@ function Wh(e, t) {
13370
13664
  };
13371
13665
  return c(e, n);
13372
13666
  }
13373
- var Gh = s(({ selector: e, depth: t, attrs: n, includeText: r }) => {
13667
+ var ig = s(({ selector: e, depth: t, attrs: n, includeText: r }) => {
13374
13668
  if (typeof document > "u") return "ERROR: get_dom 仅在浏览器环境可用(当前运行在 node/服务端,无 DOM)。请改用数据工具(read/schema_data)排查结构。";
13375
13669
  let i = e ? document.querySelector(e) : document.body;
13376
13670
  if (!i) return `未找到匹配元素:selector="${e}"`;
13377
- let a = Wh(i, {
13671
+ let a = rg(i, {
13378
13672
  depth: t ?? 3,
13379
13673
  attrs: n,
13380
13674
  includeText: r ?? !0
@@ -13389,7 +13683,7 @@ var Gh = s(({ selector: e, depth: t, attrs: n, includeText: r }) => {
13389
13683
  attrs: t.array(t.string()).optional().describe("属性白名单(传了 = 严格白名单;不传 = 默认常用 + data-*)"),
13390
13684
  includeText: t.boolean().optional().describe("是否包含直接文本(默认 true)")
13391
13685
  })
13392
- }), Kh = [
13686
+ }), ag = [
13393
13687
  "article",
13394
13688
  "main",
13395
13689
  "[role=\"main\"]",
@@ -13398,7 +13692,7 @@ var Gh = s(({ selector: e, depth: t, attrs: n, includeText: r }) => {
13398
13692
  ".post-content",
13399
13693
  ".markdown-body",
13400
13694
  "#content"
13401
- ], qh = /* @__PURE__ */ new Set([
13695
+ ], og = /* @__PURE__ */ new Set([
13402
13696
  "script",
13403
13697
  "style",
13404
13698
  "noscript",
@@ -13406,15 +13700,15 @@ var Gh = s(({ selector: e, depth: t, attrs: n, includeText: r }) => {
13406
13700
  "svg",
13407
13701
  "iframe",
13408
13702
  "canvas"
13409
- ]), Jh = "script,style,noscript,template,svg,iframe,canvas";
13410
- function Yh(e) {
13411
- for (let t of Kh) try {
13703
+ ]), sg = "script,style,noscript,template,svg,iframe,canvas";
13704
+ function cg(e) {
13705
+ for (let t of ag) try {
13412
13706
  let n = e.querySelector?.(t);
13413
13707
  if (n) return n;
13414
13708
  } catch {}
13415
13709
  return e.body ?? null;
13416
13710
  }
13417
- function Xh(e, t, n) {
13711
+ function lg(e, t, n) {
13418
13712
  if (!e) return "";
13419
13713
  let r = [], i = (e) => {
13420
13714
  let t = (e.innerText ?? e.textContent ?? "").replace(/\r\n/g, "\n").replace(/\n{3,}/g, "\n\n").trim();
@@ -13422,7 +13716,7 @@ function Xh(e, t, n) {
13422
13716
  }, a = (e) => {
13423
13717
  for (let r of Array.from(e.children ?? [])) {
13424
13718
  let e = r, o = String(e.tagName ?? "").toLowerCase();
13425
- if (!(t(e) || qh.has(o))) {
13719
+ if (!(t(e) || og.has(o))) {
13426
13720
  if (!n(e)) {
13427
13721
  i(e);
13428
13722
  continue;
@@ -13433,21 +13727,21 @@ function Xh(e, t, n) {
13433
13727
  };
13434
13728
  return a(e), r.join("\n\n").trim();
13435
13729
  }
13436
- function Zh(e) {
13730
+ function ug(e) {
13437
13731
  try {
13438
- return e.querySelector?.(Jh) != null || e.querySelector?.(".chat-dialog, .chat-mask, .debug-drawer, .skill-mask, .skill-panel, .chat-selection-menu") != null;
13732
+ return e.querySelector?.(sg) != null || e.querySelector?.(".chat-dialog, .chat-mask, .debug-drawer, .skill-mask, .skill-panel, .chat-selection-menu") != null;
13439
13733
  } catch {
13440
13734
  return !0;
13441
13735
  }
13442
13736
  }
13443
- var Qh = [Gh, s(({ selector: e, offset: t, limit: n }) => {
13737
+ var dg = [ig, s(({ selector: e, offset: t, limit: n }) => {
13444
13738
  if (typeof document > "u") return "ERROR: read_page 仅在浏览器环境可用(当前运行在 node/服务端,无 DOM)。请基于用户消息中的引用原文回答。";
13445
13739
  let r, i;
13446
13740
  if (e) {
13447
13741
  if (r = document.querySelector(e), !r) return `未找到匹配元素:selector="${e}"`;
13448
13742
  i = e;
13449
- } else r = Yh(document), i = r ? r.tagName.toLowerCase() : "body";
13450
- let a = Xh(r, ji, Zh), o = t ?? 0, s = n ?? 4e3;
13743
+ } else r = cg(document), i = r ? r.tagName.toLowerCase() : "body";
13744
+ let a = lg(r, ji, ug), o = t ?? 0, s = n ?? 4e3;
13451
13745
  if (o > a.length) return `offset=${o} 超出正文长度 ${a.length}(先从 offset=0 读,按 hasMore 续读)`;
13452
13746
  let c = a.slice(o, o + s);
13453
13747
  return JSON.stringify({
@@ -13466,22 +13760,22 @@ var Qh = [Gh, s(({ selector: e, offset: t, limit: n }) => {
13466
13760
  offset: t.number().int().min(0).optional().describe("起始字符偏移(默认 0;续读传上次 offset + 返回 text 长度)"),
13467
13761
  limit: t.number().int().min(200).max(2e4).optional().describe("本次返回字符上限(默认 4000,上限 20000)")
13468
13762
  })
13469
- })], $h = /* @__PURE__ */ "display.position.visibility.opacity.color.background-color.background-image.font-size.font-weight.line-height.text-align.z-index.overflow.width.height.margin.padding.border.border-radius.box-shadow.transform.transition.animation.cursor.pointer-events.flex-direction.gap.max-width.min-height".split("."), eg = /* @__PURE__ */ new WeakMap(), tg = !1;
13470
- function ng() {
13471
- if (tg) return;
13763
+ })], fg = /* @__PURE__ */ "display.position.visibility.opacity.color.background-color.background-image.font-size.font-weight.line-height.text-align.z-index.overflow.width.height.margin.padding.border.border-radius.box-shadow.transform.transition.animation.cursor.pointer-events.flex-direction.gap.max-width.min-height".split("."), pg = /* @__PURE__ */ new WeakMap(), mg = !1;
13764
+ function hg() {
13765
+ if (mg) return;
13472
13766
  let e = globalThis.EventTarget;
13473
13767
  if (!e?.prototype?.addEventListener) return;
13474
- tg = !0;
13768
+ mg = !0;
13475
13769
  let t = e.prototype.addEventListener, n = e.prototype.removeEventListener;
13476
13770
  e.prototype.addEventListener = function(e, ...n) {
13477
13771
  try {
13478
- let t = eg.get(this);
13479
- t || (t = /* @__PURE__ */ new Map(), eg.set(this, t)), t.set(String(e), (t.get(String(e)) ?? 0) + 1);
13772
+ let t = pg.get(this);
13773
+ t || (t = /* @__PURE__ */ new Map(), pg.set(this, t)), t.set(String(e), (t.get(String(e)) ?? 0) + 1);
13480
13774
  } catch {}
13481
13775
  return t.call(this, e, ...n);
13482
13776
  }, e.prototype.removeEventListener = function(e, ...t) {
13483
13777
  try {
13484
- let t = eg.get(this);
13778
+ let t = pg.get(this);
13485
13779
  if (t) {
13486
13780
  let n = (t.get(String(e)) ?? 1) - 1;
13487
13781
  n <= 0 ? t.delete(String(e)) : t.set(String(e), n);
@@ -13490,10 +13784,10 @@ function ng() {
13490
13784
  return n.call(this, e, ...t);
13491
13785
  };
13492
13786
  }
13493
- function rg(e) {
13494
- return [...eg.get(e)?.entries() ?? []].filter(([, e]) => e > 0).map(([e]) => e);
13787
+ function gg(e) {
13788
+ return [...pg.get(e)?.entries() ?? []].filter(([, e]) => e > 0).map(([e]) => e);
13495
13789
  }
13496
- function ig(e, t = 12) {
13790
+ function _g(e, t = 12) {
13497
13791
  let n = [], r = e, i = 0;
13498
13792
  for (; r && r.tagName && i < t;) {
13499
13793
  let e = r.tagName.toLowerCase(), t = r.id;
@@ -13514,7 +13808,7 @@ function ig(e, t = 12) {
13514
13808
  }
13515
13809
  return n.join(" > ");
13516
13810
  }
13517
- function ag(e, t, n = {}) {
13811
+ function vg(e, t, n = {}) {
13518
13812
  if (!e) return {
13519
13813
  hits: [],
13520
13814
  total: 0,
@@ -13552,7 +13846,7 @@ function ag(e, t, n = {}) {
13552
13846
  n = r.slice(Math.max(0, i - 20), i + t.length + 40);
13553
13847
  }
13554
13848
  return {
13555
- selector: ig(e),
13849
+ selector: _g(e),
13556
13850
  tag: e.tagName.toLowerCase(),
13557
13851
  text: n.slice(0, 120)
13558
13852
  };
@@ -13561,7 +13855,7 @@ function ag(e, t, n = {}) {
13561
13855
  truncated: a.length > o
13562
13856
  };
13563
13857
  }
13564
- var og = [
13858
+ var yg = [
13565
13859
  "content",
13566
13860
  "display",
13567
13861
  "width",
@@ -13569,14 +13863,14 @@ var og = [
13569
13863
  "background-color",
13570
13864
  "position"
13571
13865
  ];
13572
- function sg(e, t = {}) {
13866
+ function bg(e, t = {}) {
13573
13867
  if (!e) return null;
13574
13868
  let n = {
13575
- selector: ig(e),
13869
+ selector: _g(e),
13576
13870
  tag: e.tagName.toLowerCase(),
13577
13871
  attrs: {}
13578
13872
  };
13579
- for (let t of Array.from(e.attributes)) !(Vh.includes(t.name) || t.name.startsWith("data-")) || Hh.test(t.name) || Uh.test(t.name) || (n.attrs[t.name] = t.value);
13873
+ for (let t of Array.from(e.attributes)) !(eg.includes(t.name) || t.name.startsWith("data-")) || tg.test(t.name) || ng.test(t.name) || (n.attrs[t.name] = t.value);
13580
13874
  let r = Array.from(e.childNodes).filter((e) => e.nodeType === 3).map((e) => e.textContent || "").join("").trim();
13581
13875
  r && (n.text = r.slice(0, 400));
13582
13876
  let i = String(e.innerText ?? e.textContent ?? "").trim();
@@ -13598,7 +13892,7 @@ function sg(e, t = {}) {
13598
13892
  if (typeof a != "function") return r;
13599
13893
  try {
13600
13894
  let i = a(e, n ?? null);
13601
- for (let e of n ? og : t.styles ?? $h) {
13895
+ for (let e of n ? yg : t.styles ?? fg) {
13602
13896
  let t = typeof i.getPropertyValue == "function" ? i.getPropertyValue(e) : i[e];
13603
13897
  t && (r[e] = String(t).slice(0, 200));
13604
13898
  }
@@ -13616,16 +13910,16 @@ function sg(e, t = {}) {
13616
13910
  n.events = {
13617
13911
  inline: t,
13618
13912
  vue: r ? Object.keys(r).filter((e) => /^on[A-Z]/.test(e)).map((e) => e.slice(2).toLowerCase()) : [],
13619
- captured: rg(e)
13913
+ captured: gg(e)
13620
13914
  };
13621
13915
  }
13622
13916
  return n;
13623
13917
  }
13624
- var cg = s(({ query: e, mode: t, limit: n, root: r }) => {
13625
- ng();
13918
+ var xg = s(({ query: e, mode: t, limit: n, root: r }) => {
13919
+ hg();
13626
13920
  let i = r ? document.querySelector(r) : document;
13627
13921
  if (r && !i) return `未找到 root 元素:selector="${r}"`;
13628
- let a = ag(i, e, {
13922
+ let a = vg(i, e, {
13629
13923
  mode: t,
13630
13924
  limit: n
13631
13925
  });
@@ -13642,11 +13936,11 @@ var cg = s(({ query: e, mode: t, limit: n, root: r }) => {
13642
13936
  limit: t.number().int().min(1).max(20).optional().describe("返回上限(默认 10)"),
13643
13937
  root: t.string().optional().describe("限定搜索范围的容器选择器(默认整页)")
13644
13938
  })
13645
- }), lg = s(({ selector: e, styles: t, includeHtml: n, htmlLimit: r, includeEvents: i, includeRect: a, pseudo: o }) => {
13646
- ng();
13939
+ }), Sg = s(({ selector: e, styles: t, includeHtml: n, htmlLimit: r, includeEvents: i, includeRect: a, pseudo: o }) => {
13940
+ hg();
13647
13941
  let s = document.querySelector(e);
13648
13942
  if (!s) return `未找到匹配元素:selector="${e}"(可先用 dom_search 定位)`;
13649
- let c = sg(s, {
13943
+ let c = bg(s, {
13650
13944
  styles: t,
13651
13945
  includeHtml: n,
13652
13946
  htmlLimit: r,
@@ -13667,10 +13961,10 @@ var cg = s(({ query: e, mode: t, limit: n, root: r }) => {
13667
13961
  includeRect: t.boolean().optional().describe("是否含几何位置(默认 true)"),
13668
13962
  pseudo: t.boolean().optional().describe("是否含 ::before/::after 伪元素摘要(默认 false)")
13669
13963
  })
13670
- }), ug = "dom-inspect";
13671
- function dg(e = {}) {
13964
+ }), Cg = "dom-inspect";
13965
+ function wg(e = {}) {
13672
13966
  return {
13673
- name: ug,
13967
+ name: Cg,
13674
13968
  description: "页面 DOM 深度检视工具(dom_search 搜索元素 / dom_info 读内容·计算样式·事件绑定·几何)。定位元素、验证样式落地、排查交互绑定时加载",
13675
13969
  getContent: () => [
13676
13970
  "# DOM 检视工具用法",
@@ -13692,17 +13986,23 @@ function dg(e = {}) {
13692
13986
  "- 截图「看」页面:selector 截指定元素区域 / fullPage 截整页 / 都不传截当前视口;截图经压缩投递(多模态直看图,纯文本模型自动走识图转述)",
13693
13987
  "- 布局/样式/渲染效果类问题优先截图(视觉真值),结构/属性类用 dom_info;截图失败(CSP/跨域图)会回灌原因与替代建议"
13694
13988
  ] : [],
13989
+ ...e.withDomEdit ? [
13990
+ "## dom_edit({ patches, dryRun? })—— 修改页面元素(宿主开启才有)",
13991
+ "- patches 批量原子(任一失败整批拒绝):set_text/set_html(内容)、set_attr/remove_attr、add_class/remove_class、set_style、insert(新建元素 anchor+position: before/after/prepend/append/replace)、remove、move(层级调整)、highlight(高亮+滚动)",
13992
+ "- 写纪律:selector 必须唯一命中(多匹配被拒,用 dom_search 拿精确路径);先读后写(get_dom/dom_info 看现状);拿不准先 dryRun 预检",
13993
+ "- 改前自动快照:dom_restore 回滚最近一批(可连续回退);改动为会话临时态(刷新即失);数据驱动页面改数据(write)不要改 DOM"
13994
+ ] : [],
13695
13995
  "## 排障套路",
13696
13996
  ...e.withScreenshot ? ["1. dom_search(mode:\"text\", query:按钮文案) 定位 → 2. 视觉验证 take_screenshot / 结构验证 dom_info(styles) → 3. 不符则改数据(get_dom 看结构对照)"] : ["1. dom_search(mode:\"text\", query:按钮文案) 定位 → 2. dom_info(styles:[\"display\",\"background-color\",\"pointer-events\"]) 验证样式/点击性 → 3. 不符则改数据(get_dom 看结构对照)"]
13697
13997
  ].join("\n"),
13698
- tools: [() => [cg, lg]]
13998
+ tools: [() => [xg, Sg]]
13699
13999
  };
13700
14000
  }
13701
- var fg = "page-analysis";
13702
- function pg(e = {}) {
14001
+ var Tg = "page-analysis";
14002
+ function Eg(e = {}) {
13703
14003
  return {
13704
- name: fg,
13705
- description: "页面内容分析策略:按问题类型选工具(引用原文/整页理解/定位/结构/视觉),含分页探索纪律与基于页面实料的回答纪律。回答用户关于当前页面的问题时加载",
14004
+ name: Tg,
14005
+ description: "页面内容分析策略:按问题类型选工具(引用原文/整页理解/定位/结构/视觉/页面操作),含分页探索纪律与基于页面实料的回答纪律。回答用户关于当前页面的问题时加载",
13706
14006
  getContent: () => [
13707
14007
  "# 页面内容分析策略",
13708
14008
  "## 第一步:问题分型(按类型选主力工具,不要一上来读整页)",
@@ -13711,6 +14011,7 @@ function pg(e = {}) {
13711
14011
  "- **定位类**(「某概念在本页哪里/那个按钮在哪」):dom_search mode:\"text\" 按关键词定位 → 需要细节再 read_page 带 selector 读该区域",
13712
14012
  "- **结构/属性类**(「这个区块是什么组件/有哪些属性」):dom_info(selector) 读单元素;层级关系用 get_dom",
13713
14013
  ...e.withScreenshot ? ["- **视觉类**(「看起来对不对/布局乱不乱/渲染效果」):take_screenshot 截图看视觉真值;selector 截局部、fullPage 截整页;截图是唯一能看到实际渲染效果的手段,结构推断不能代替"] : [],
14014
+ ...e.withDomEdit ? ["- **操作类**(「把这段高亮/隐藏广告/调大字体/把这个块挪过去」):dom_edit patches 批量操作;纪律 = 先 get_dom/dom_search 定位唯一 selector → 拿不准先 dryRun → 改后 dom_info/截图验证 → 不满意 dom_restore 回滚;页面是临时态,持久修改要走宿主自己的机制"] : [],
13714
14015
  "## 探索纪律",
13715
14016
  "1. **先窄后宽**:引用/焦点 → 所在小节 → 整页;每一步只取够回答当前问题的量",
13716
14017
  "2. **翻页不重复**:read_page 续读传 offset = 上次 offset + 返回 text 长度;不要回头重读已读区",
@@ -13723,14 +14024,14 @@ function pg(e = {}) {
13723
14024
  ].join("\n")
13724
14025
  };
13725
14026
  }
13726
- var mg = dg();
14027
+ var Dg = wg();
13727
14028
  //#endregion
13728
14029
  //#region src/core/tools/envTool.ts
13729
- function hg(e) {
14030
+ function Og(e) {
13730
14031
  let t = e;
13731
14032
  return typeof t.tagName == "string" || typeof t.nodeType == "number" && typeof t.nodeName == "string";
13732
14033
  }
13733
- function gg(e, t = 3, n = 2e3, r, i) {
14034
+ function kg(e, t = 3, n = 2e3, r, i) {
13734
14035
  if (e == null) return e;
13735
14036
  if (typeof e == "string") return e.length > n ? e.slice(0, n) + "…(已截断)" : e;
13736
14037
  if (typeof e == "number" || typeof e == "boolean") return e;
@@ -13739,14 +14040,14 @@ function gg(e, t = 3, n = 2e3, r, i) {
13739
14040
  if (typeof e == "bigint") return `${e.toString()}n`;
13740
14041
  if (typeof e != "object") return String(e);
13741
14042
  let a = e;
13742
- if (hg(a)) {
14043
+ if (Og(a)) {
13743
14044
  let e = a;
13744
14045
  return e.tagName ? `[Element: <${e.tagName.toLowerCase()}>]` : `[Node: ${e.nodeName}]`;
13745
14046
  }
13746
14047
  if (r?.has(a)) return "[Circular]";
13747
14048
  let o = r ?? /* @__PURE__ */ new WeakSet();
13748
14049
  if (o.add(a), Array.isArray(e)) {
13749
- let r = e.slice(0, 100).map((e) => gg(e, t - 1, n, o, i));
14050
+ let r = e.slice(0, 100).map((e) => kg(e, t - 1, n, o, i));
13750
14051
  return e.length > 100 && r.push(`…(共 ${e.length} 项,已截断)`), r;
13751
14052
  }
13752
14053
  if (t < 0) return "(对象,已截断)";
@@ -13759,14 +14060,14 @@ function gg(e, t = 3, n = 2e3, r, i) {
13759
14060
  }
13760
14061
  try {
13761
14062
  let e = a[r];
13762
- i?.test(r) ? s[r] = "[REDACTED]" : s[r] = gg(e, t - 1, n, o, i);
14063
+ i?.test(r) ? s[r] = "[REDACTED]" : s[r] = kg(e, t - 1, n, o, i);
13763
14064
  } catch {
13764
14065
  s[r] = "(getter 抛错)";
13765
14066
  }
13766
14067
  }
13767
14068
  return s;
13768
14069
  }
13769
- function _g(e) {
14070
+ function Ag(e) {
13770
14071
  let t = e ?? (typeof window < "u" ? window : {}), n = t.navigator, r = t.location, i = t.document;
13771
14072
  return {
13772
14073
  location: {
@@ -13799,9 +14100,9 @@ function _g(e) {
13799
14100
  } : "(无 document)"
13800
14101
  };
13801
14102
  }
13802
- var vg = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|opener|parent|top|self|window|globalThis|closed|history|navigation|trustedTypes|origin|crossOriginIsolated)$/, yg = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session|ticket/i, bg = s(({ key: e }) => {
14103
+ var jg = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|opener|parent|top|self|window|globalThis|closed|history|navigation|trustedTypes|origin|crossOriginIsolated)$/, Mg = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session|ticket/i, Ng = s(({ key: e }) => {
13803
14104
  if (e) {
13804
- if (vg.test(e) || yg.test(e)) return JSON.stringify({
14105
+ if (jg.test(e) || Mg.test(e)) return JSON.stringify({
13805
14106
  key: e,
13806
14107
  denied: !0,
13807
14108
  reason: "安全:该 key 在 denylist(localStorage/sessionStorage/cookie/document 或敏感命名 token/secret/key/auth),不读取防泄漏"
@@ -13811,18 +14112,18 @@ var vg = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|open
13811
14112
  key: e,
13812
14113
  exists: t !== void 0,
13813
14114
  type: typeof t,
13814
- value: gg(t, 3, 2e3, void 0, yg)
14115
+ value: kg(t, 3, 2e3, void 0, Mg)
13815
14116
  }, null, 2);
13816
14117
  }
13817
- return JSON.stringify(_g(), null, 2);
14118
+ return JSON.stringify(Ag(), null, 2);
13818
14119
  }, {
13819
14120
  name: "inspect_env",
13820
14121
  description: "读宿主页面环境信息(排查调试)。不传参返回摘要(URL/origin、浏览器/语言、viewport、title/readyState);传 key 读指定 window 属性值(如 key:\"appConfig\")。只读,大结果自动外存 vfs。",
13821
14122
  schema: t.object({ key: t.string().optional().describe("要读取的 window 属性名(如 \"appConfig\"/\"__DEBUG__\");不传 = 返回环境摘要") })
13822
- }), xg = [bg];
14123
+ }), Pg = [Ng];
13823
14124
  //#endregion
13824
14125
  //#region src/core/harness/budget.ts
13825
- function Sg(e, t, n) {
14126
+ function Fg(e, t, n) {
13826
14127
  let i = 0;
13827
14128
  return {
13828
14129
  name: "budget",
@@ -13847,12 +14148,12 @@ function Sg(e, t, n) {
13847
14148
  }
13848
14149
  //#endregion
13849
14150
  //#region src/core/sdk/actions.ts
13850
- var Cg = /^[a-zA-Z][a-zA-Z0-9_]*$/;
13851
- function wg(e) {
14151
+ var Ig = /^[a-zA-Z][a-zA-Z0-9_]*$/;
14152
+ function Lg(e) {
13852
14153
  let n = [];
13853
14154
  for (let [r, i] of Object.entries(e)) {
13854
- if (!Cg.test(r)) {
13855
- console.warn(`[page-agent-sdk][actions] 动作名 "${r}" 非法(须匹配 ${Cg}),已跳过`);
14155
+ if (!Ig.test(r)) {
14156
+ console.warn(`[page-agent-sdk][actions] 动作名 "${r}" 非法(须匹配 ${Ig}),已跳过`);
13856
14157
  continue;
13857
14158
  }
13858
14159
  let e = i.description || `宿主动作 ${r}`;
@@ -13872,9 +14173,9 @@ function wg(e) {
13872
14173
  }
13873
14174
  return n;
13874
14175
  }
13875
- function Tg(e) {
14176
+ function Rg(e) {
13876
14177
  let t = {};
13877
- for (let [n, r] of Object.entries(e)) Cg.test(n) && (t[n] = {
14178
+ for (let [n, r] of Object.entries(e)) Ig.test(n) && (t[n] = {
13878
14179
  description: r.description,
13879
14180
  hasParams: !!r.params
13880
14181
  });
@@ -13882,11 +14183,11 @@ function Tg(e) {
13882
14183
  }
13883
14184
  //#endregion
13884
14185
  //#region src/core/toolsets.ts
13885
- var Eg = Bh, Dg = Qh;
13886
- function Og(e, t) {
14186
+ var zg = $h, Bg = dg;
14187
+ function Vg(e, t) {
13887
14188
  return Yd(e, t);
13888
14189
  }
13889
- function kg(e, t, n, r, i) {
14190
+ function Hg(e, t, n, r, i) {
13890
14191
  let a = tm(e);
13891
14192
  return [
13892
14193
  ...a.dataOps ? t : [],
@@ -13897,15 +14198,15 @@ function kg(e, t, n, r, i) {
13897
14198
  }
13898
14199
  //#endregion
13899
14200
  //#region src/core/harness/usageHints.ts
13900
- var Ag = .7;
13901
- function jg(e, t, n) {
14201
+ var Ug = .7;
14202
+ function Wg(e, t, n) {
13902
14203
  let r = tm(e);
13903
14204
  return {
13904
14205
  name: "usageHints",
13905
14206
  augmentPrompt: (i) => {
13906
14207
  let a = [];
13907
- if (r.planning && (a.push("【自适应规划】按任务复杂度决定是否先规划,不要对简单任务过度编排:"), a.push(" · 简单/明确任务(改单字段、调样式、查值)→ 直接 read/write 执行,不必 write_todos。"), a.push(" · 复杂任务(多步、大改、有歧义、不可逆)→ 先 write_todos 拆解,首个任务标 in_progress,逐项推进。"), a.push(" · 执行中发现步骤要改/补/细分 → 用 update_todo({id, content?, status?}) 按 id 增量改单项,不必重传整个清单。"), a.push(" · update_todo 标 completed 时附 evidence: 本次实际写入的 jsonPath(如 \"components.2\"),供收口对账;工作经委派子 agent 完成等无主写路径时,如实写明完成方式(勿编造路径)。"), e?.humanConfirm ? a.push(" · 规划出多步方案若需用户拍板 → 先 request_human_confirmation 给方案选项,确认后再执行。") : a.push(" · 规划出多步方案若需用户拍板 → 以文字列出方案选项等用户回复,勿自行拍板。"), a.push(" · 计划修订有次数上限(maxPlanRevisions,默认 5,只计 write_todos 调用、调研轮不计):勿反复改计划而不执行,规划充分后即开始 write 落地。")), t && (a.push("改主数据前先 read({jsonPath}) 读其当前真实值(返回末尾 hash=xxx 为乐观锁标识),基于真实值改,不要凭记忆。写入是否被自动校验由集成方 conflictWatchFields 声明决定:若已声明且主数据在你 read 之后被外部改过,会触发冲突——集成方若开启人工介入,工具会挂起等用户决定(保留外部/强制覆盖/回退),你应等待工具返回后按结果继续(保留外部→重新 read 再改;强制覆盖→已写入,继续;回退→已回退到历史快照,基于回退值重写);未开启人工介入时返回 VERSION_CONFLICT 不写入,重新 read 拿最新值再改。"), a.push("读类分流:取值/结构 → read(多路径用 jsonPaths);字段约束 → schema_data;条件筛选定位 → query_data(多条一次用 queries);名字模糊找 → search_data;整体说明 → read 不传路径。"), a.push("修改大对象/数组优先用 write 增量改({patch:{op,jsonPath,value}} 只发改动部分),避免 write({value}) 整体重传被 max_tokens 截断导致 JSON 不完整、校验失败。"), a.push("修改主数据出错时可用 restore_data 回退最近一次。"), a.push("在大数组里按条件筛选元素用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素的 path/index;定位后再 write({patch}) 改。"), a.push("找名字记不清的元素用 search_data(支持 substring/regex/fuzzy 模糊搜索)。"), a.push("需要过滤/映射/聚合/批量重写大数组时用 eval_script(沙箱脚本,入参 data);只读探查用 mode=query,批量重写用 mode=transform(返回值经校验后落地)。"), a.push("读大数组用 read({jsonPath,offset,limit}) 分页(返回 hasMore=true 时 offset+=limit 续读);一次读多个不相关子路径用 read({jsonPaths});复杂改动先 write({...,dryRun:true}) 预检不落盘。"), a.push("【省轮次·批量】≥2 个路径一律 read({jsonPaths:[...]}) 一次取回(路径互不相关也合批,禁止连续单路径 read);多条件筛选用 query_data({queries:[expr1,expr2,…]}) 一次取回(2-10 条);改多处用 write({patches:[{op:\"set\",jsonPath,value},...]}) 一次提交多改动(原子任一失败回滚),勿逐个 write 烧轮次预算。"), a.push("读到 <subtree Nkb keys:[…] #指纹> 或 <code Nkb> 占位 = 该子树键名/体积可见但内容未见:写入前先窄读全文(read({jsonPath:\"该子树路径\"}),结果根豁免返全文)或 set_focus 聚焦该区域;勿凭键名印象猜路径/猜值直写(直接写占位子树会被拦下要求先窄读)。"), a.push("对比当前与历史快照(或一段 JSON against)的差异用 diff_data({snapshotId?,against?})(返回结构化 path→from/to,verify 自纠/操作审计/\"刚才改了啥\");只读查历史快照值用 history_data({id?,jsonPath?})。")), r.subagent && a.push("独立子任务可 spawn_agent 委派(过程隔离,不占主上下文):默认只读,需要子 agent 写数据时传 writablePaths(路径前缀白名单,越界 PATH_OUT_OF_SCOPE)。多个独立子任务可 spawn_agents 并行委派(各子互不通信,结论由你汇总;并行委派不可授写权限,写操作由你收尾执行)。"), r.inspectEnv && a.push("排查页面环境(当前 URL/浏览器/视口/集成方调试变量)用 inspect_env——不传参返回环境摘要(location/navigator/viewport/document),传 key 读特定 window 属性(如 inspect_env({key:\"appConfig\"}) 读 window.appConfig)。改完数据看渲染、定位\"为何没生效\"时用它(只读,不改数据)。"), r.domInspect && a.push("回答用户关于当前页面/文档的问题时优先用 read_page({selector?,offset?,limit?}) 读页面正文纯文本(长文按 hasMore 分页续读;自动排除本对话框自身);需要页面结构(检查渲染是否生效/定位元素/辅助 UI 设计问答)再用 get_dom({selector?,depth?}) 读渲染后 DOM(结构化返回 tag/attrs/text/children,depth 控制深度防爆炸,只读)。配合宿主 actions(save_draft/publish 等)形成\"改数据→截图/get_dom 看渲染→触发动作\"闭环。"), e?.screenshot && a.push("视觉验证(看布局/样式/渲染效果像不像、对不对)用 take_screenshot({selector?, fullPage?}) 截图查看:selector 截指定元素、fullPage 截整页、默认当前视口;截图自动压缩投递(多模态直看图/纯文本模型走识图转述)。优先级:视觉问题先截图,结构/属性问题用 dom_info。"), r.draftWrite && (a.push("生成超大 JSON(如 50+ 组件页面,单次 write 受 max_tokens 限制装不下)用 draft_write 分块构建 → draft_commit 原子提交:draft_write({draftId, chunk, mode}) mode:\"start\" 新建/\"append\" 追加(拼 JSON 片段到 drafts 池);累积完 draft_commit({draftId}) 合并 + schema 校验 + 写主数据(失败草稿保留可修后重试,成功自动清草稿)。小改仍用 write patch,只在大 JSON 从零生成时用 draft。"), a.push("⚠️ 大 JSON 分块构建是典型多轮工具调用(draft_write×N + draft_commit + read 确认 + 调研 read/query),默认 maxToolRounds=30(3.43 起;轮次预算吃紧时 system 会注入预算提示段,按提示优先收口);目标组件数很大时集成方仍可在 createChatSdk 显式上调 maxToolRounds(按 N+10 估算)。draft_commit 提交同样走乐观锁(改前 read 拿 hash,bind 被改过会触发冲突介入,不静默覆盖)。")), r.focus && (a.push("【上下文聚焦】判断任务范围,用 set_focus/add_focus/remove_focus/clear_focus 自动收敛工作范围:"), a.push(" · 局部任务(只改某一组件/区域,如「调导航栏」「改 components.3 样式」)→ 先 read 定位 jsonPath,再 set_focus({path:\"该子树路径\"}) 聚焦;聚焦后每轮只看该子树结构,写其他位置会被 PATH_DENIED 拒绝。"), a.push(" · 多个相关组件(如「同时改导航栏和页脚」)→ set_focus 聚焦首个后用 add_focus({path}) 追加其余;聚焦后可写任一焦点子树,越界仍被拒;移除单个用 remove_focus({path})。"), a.push(" · 全局任务(多处/整体结构,如「重排所有组件」「换主题」)→ 不要聚焦,保持全量视野直接写。"), a.push(" · 完成局部精修、要转向其他区域或做整体改动 → 调 clear_focus 退出聚焦(清空全部焦点),恢复全部读写权限。"), a.push(" · set_focus/add_focus 的 path 必须在 schema 内(类型校验);不确定路径先 read 查。")), e?.subagents?.length) {
13908
- let t = e.subagents.filter((e) => (e.temperature ?? 0) >= Ag || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), n = e.subagents.filter((e) => (e.temperature ?? 0) < Ag && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
14208
+ if (r.planning && (a.push("【自适应规划】按任务复杂度决定是否先规划,不要对简单任务过度编排:"), a.push(" · 简单/明确任务(改单字段、调样式、查值)→ 直接 read/write 执行,不必 write_todos。"), a.push(" · 复杂任务(多步、大改、有歧义、不可逆)→ 先 write_todos 拆解,首个任务标 in_progress,逐项推进。"), a.push(" · 执行中发现步骤要改/补/细分 → 用 update_todo({id, content?, status?}) 按 id 增量改单项,不必重传整个清单。"), a.push(" · update_todo 标 completed 时附 evidence: 本次实际写入的 jsonPath(如 \"components.2\"),供收口对账;工作经委派子 agent 完成等无主写路径时,如实写明完成方式(勿编造路径)。"), e?.humanConfirm ? a.push(" · 规划出多步方案若需用户拍板 → 先 request_human_confirmation 给方案选项,确认后再执行。") : a.push(" · 规划出多步方案若需用户拍板 → 以文字列出方案选项等用户回复,勿自行拍板。"), a.push(" · 计划修订有次数上限(maxPlanRevisions,默认 5,只计 write_todos 调用、调研轮不计):勿反复改计划而不执行,规划充分后即开始 write 落地。")), t && (a.push("改主数据前先 read({jsonPath}) 读其当前真实值(返回末尾 hash=xxx 为乐观锁标识),基于真实值改,不要凭记忆。写入是否被自动校验由集成方 conflictWatchFields 声明决定:若已声明且主数据在你 read 之后被外部改过,会触发冲突——集成方若开启人工介入,工具会挂起等用户决定(保留外部/强制覆盖/回退),你应等待工具返回后按结果继续(保留外部→重新 read 再改;强制覆盖→已写入,继续;回退→已回退到历史快照,基于回退值重写);未开启人工介入时返回 VERSION_CONFLICT 不写入,重新 read 拿最新值再改。"), a.push("读类分流:取值/结构 → read(多路径用 jsonPaths);字段约束 → schema_data;条件筛选定位 → query_data(多条一次用 queries);名字模糊找 → search_data;整体说明 → read 不传路径。"), a.push("修改大对象/数组优先用 write 增量改({patch:{op,jsonPath,value}} 只发改动部分),避免 write({value}) 整体重传被 max_tokens 截断导致 JSON 不完整、校验失败。"), a.push("修改主数据出错时可用 restore_data 回退最近一次。"), a.push("在大数组里按条件筛选元素用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素的 path/index;定位后再 write({patch}) 改。"), a.push("找名字记不清的元素用 search_data(支持 substring/regex/fuzzy 模糊搜索)。"), a.push("需要过滤/映射/聚合/批量重写大数组时用 eval_script(沙箱脚本,入参 data);只读探查用 mode=query,批量重写用 mode=transform(返回值经校验后落地)。"), a.push("读大数组用 read({jsonPath,offset,limit}) 分页(返回 hasMore=true 时 offset+=limit 续读);一次读多个不相关子路径用 read({jsonPaths});复杂改动先 write({...,dryRun:true}) 预检不落盘。"), a.push("【省轮次·批量】≥2 个路径一律 read({jsonPaths:[...]}) 一次取回(路径互不相关也合批,禁止连续单路径 read);多条件筛选用 query_data({queries:[expr1,expr2,…]}) 一次取回(2-10 条);改多处用 write({patches:[{op:\"set\",jsonPath,value},...]}) 一次提交多改动(原子任一失败回滚),勿逐个 write 烧轮次预算。"), a.push("读到 <subtree Nkb keys:[…] #指纹> 或 <code Nkb> 占位 = 该子树键名/体积可见但内容未见:写入前先窄读全文(read({jsonPath:\"该子树路径\"}),结果根豁免返全文)或 set_focus 聚焦该区域;勿凭键名印象猜路径/猜值直写(直接写占位子树会被拦下要求先窄读)。"), a.push("对比当前与历史快照(或一段 JSON against)的差异用 diff_data({snapshotId?,against?})(返回结构化 path→from/to,verify 自纠/操作审计/\"刚才改了啥\");只读查历史快照值用 history_data({id?,jsonPath?})。")), r.subagent && a.push("独立子任务可 spawn_agent 委派(过程隔离,不占主上下文):默认只读,需要子 agent 写数据时传 writablePaths(路径前缀白名单,越界 PATH_OUT_OF_SCOPE)。多个独立子任务可 spawn_agents 并行委派(各子互不通信,结论由你汇总;并行委派不可授写权限,写操作由你收尾执行)。"), r.inspectEnv && a.push("排查页面环境(当前 URL/浏览器/视口/集成方调试变量)用 inspect_env——不传参返回环境摘要(location/navigator/viewport/document),传 key 读特定 window 属性(如 inspect_env({key:\"appConfig\"}) 读 window.appConfig)。改完数据看渲染、定位\"为何没生效\"时用它(只读,不改数据)。"), r.domInspect && a.push("回答用户关于当前页面/文档的问题时优先用 read_page({selector?,offset?,limit?}) 读页面正文纯文本(长文按 hasMore 分页续读;自动排除本对话框自身);需要页面结构(检查渲染是否生效/定位元素/辅助 UI 设计问答)再用 get_dom({selector?,depth?}) 读渲染后 DOM(结构化返回 tag/attrs/text/children,depth 控制深度防爆炸,只读)。配合宿主 actions(save_draft/publish 等)形成\"改数据→截图/get_dom 看渲染→触发动作\"闭环。"), e?.screenshot && a.push("视觉验证(看布局/样式/渲染效果像不像、对不对)用 take_screenshot({selector?, fullPage?}) 截图查看:selector 截指定元素、fullPage 截整页、默认当前视口;截图自动压缩投递(多模态直看图/纯文本模型走识图转述)。优先级:视觉问题先截图,结构/属性问题用 dom_info。"), e?.domEdit && a.push("修改宿主页面元素(高亮/改文案/调样式/插删移元素)用 dom_edit({patches:[{op,selector,...}],dryRun?}) 批量原子操作(op:set_text/set_html/set_attr/add_class/remove_class/set_style/insert/remove/move/highlight);selector 必须唯一命中(先 get_dom/dom_search 定位);改前自动快照,dom_restore 回滚最近一批;改动为会话临时态(刷新即失)——数据驱动页面改数据(write)不要改 DOM。"), r.draftWrite && (a.push("生成超大 JSON(如 50+ 组件页面,单次 write 受 max_tokens 限制装不下)用 draft_write 分块构建 → draft_commit 原子提交:draft_write({draftId, chunk, mode}) mode:\"start\" 新建/\"append\" 追加(拼 JSON 片段到 drafts 池);累积完 draft_commit({draftId}) 合并 + schema 校验 + 写主数据(失败草稿保留可修后重试,成功自动清草稿)。小改仍用 write patch,只在大 JSON 从零生成时用 draft。"), a.push("⚠️ 大 JSON 分块构建是典型多轮工具调用(draft_write×N + draft_commit + read 确认 + 调研 read/query),默认 maxToolRounds=30(3.43 起;轮次预算吃紧时 system 会注入预算提示段,按提示优先收口);目标组件数很大时集成方仍可在 createChatSdk 显式上调 maxToolRounds(按 N+10 估算)。draft_commit 提交同样走乐观锁(改前 read 拿 hash,bind 被改过会触发冲突介入,不静默覆盖)。")), r.focus && (a.push("【上下文聚焦】判断任务范围,用 set_focus/add_focus/remove_focus/clear_focus 自动收敛工作范围:"), a.push(" · 局部任务(只改某一组件/区域,如「调导航栏」「改 components.3 样式」)→ 先 read 定位 jsonPath,再 set_focus({path:\"该子树路径\"}) 聚焦;聚焦后每轮只看该子树结构,写其他位置会被 PATH_DENIED 拒绝。"), a.push(" · 多个相关组件(如「同时改导航栏和页脚」)→ set_focus 聚焦首个后用 add_focus({path}) 追加其余;聚焦后可写任一焦点子树,越界仍被拒;移除单个用 remove_focus({path})。"), a.push(" · 全局任务(多处/整体结构,如「重排所有组件」「换主题」)→ 不要聚焦,保持全量视野直接写。"), a.push(" · 完成局部精修、要转向其他区域或做整体改动 → 调 clear_focus 退出聚焦(清空全部焦点),恢复全部读写权限。"), a.push(" · set_focus/add_focus 的 path 必须在 schema 内(类型校验);不确定路径先 read 查。")), e?.subagents?.length) {
14209
+ let t = e.subagents.filter((e) => (e.temperature ?? 0) >= Ug || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), n = e.subagents.filter((e) => (e.temperature ?? 0) < Ug && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
13909
14210
  a.push("【规划-反思-执行·路由】按任务性质选模式,不要对简单任务过度编排:"), t.length && (a.push(` · 创作/设计/开放性需求(如"设计主题风格""换个感觉")→ 先调 ${t.map((e) => "use_" + e.id).join("/")} 出 2-3 套方案(高温创意),`), a.push(e?.humanConfirm ? " 不要自己拍板;拿到方案后,若需用户拍板用 request_human_confirmation 弹选项。" : " 不要自己拍板;拿到方案后以文字列出选项等用户回复(humanConfirm 未开,勿调不存在工具)。")), n.length && a.push(` · 严谨/易错/校验类 → 可先调 ${n.map((e) => "use_" + e.id).join("/")} 反思挑刺(低温审查),据反馈修订。`), a.push(" · 方案定稿后,由你(主 agent)用 write 落地成 JSON(低温度执行 + schema 校验 + 写前确认)。"), a.push(" · 简单/明确任务(如\"标题改红色\")直接执行,不必走规划-反思。");
13910
14211
  }
13911
14212
  e?.humanConfirm && (a.push("【人工确认·必读】以下情形必须先调 request_human_confirmation 征询用户、拿到答复后再继续,不要自行拍板:"), a.push(" 1) 用户让你「给方案/列选项/我来选/挑一个」时:把每个方案作为一个 option,调 request_human_confirmation(question=简述, options=[方案A,方案B,...], recommendation=你推荐的)。不要只回文字罗列方案让用户自己回复——要用工具把选项做成可点选按钮。"), a.push(" 2) 需求有歧义/不确定时:调工具问清楚(options 不传则用户答同意或拒绝)。"), a.push(" 3) 即将执行高风险不可逆操作(删除/覆盖/批量改动)前:调工具确认。"), a.push(" 4) 规划出多步方案需用户确认时:把整个方案(或关键分步)作为 option 调 request_human_confirmation,确认后再执行。"), a.push("用户在选项里选了哪个,就按那个方案继续;选「拒绝」则停止并询问如何调整。"));
@@ -13925,7 +14226,7 @@ function jg(e, t, n) {
13925
14226
  }
13926
14227
  //#endregion
13927
14228
  //#region src/core/harness/pageContext.ts
13928
- function Mg(e, t) {
14229
+ function Gg(e, t) {
13929
14230
  let n = [
13930
14231
  "[当前页面] 用户正在浏览:",
13931
14232
  `- 标题:${e.title}`,
@@ -13934,18 +14235,18 @@ function Mg(e, t) {
13934
14235
  ];
13935
14236
  return t && n.push("需要页面正文时用 read_page 读取纯文本(长文按 hasMore 分页续读);读结构用 get_dom。"), n.join("\n");
13936
14237
  }
13937
- function Ng(e) {
14238
+ function Kg(e) {
13938
14239
  return {
13939
14240
  name: "pageContext",
13940
14241
  augmentPrompt: () => {
13941
14242
  let t = e.getPageInfo();
13942
- if (t) return Mg(t, e.canReadPage);
14243
+ if (t) return Gg(t, e.canReadPage);
13943
14244
  }
13944
14245
  };
13945
14246
  }
13946
14247
  //#endregion
13947
14248
  //#region src/core/harness/resourcesPin.ts
13948
- function Pg(e) {
14249
+ function qg(e) {
13949
14250
  return {
13950
14251
  name: "resourcesPin",
13951
14252
  augmentPrompt: () => {
@@ -13959,15 +14260,15 @@ function Pg(e) {
13959
14260
  }
13960
14261
  //#endregion
13961
14262
  //#region src/core/backends/skillStore.ts
13962
- var Fg = "v:1::skill-store", Ig = "chat-sdk";
13963
- function Lg(e, t, n) {
13964
- return `${Fg}::${e}::${t}::${n}`;
14263
+ var Jg = "v:1::skill-store", Yg = "chat-sdk";
14264
+ function Xg(e, t, n) {
14265
+ return `${Jg}::${e}::${t}::${n}`;
13965
14266
  }
13966
- function Rg(e, t) {
13967
- return `${Fg}::${e}::${t}::`;
14267
+ function Zg(e, t) {
14268
+ return `${Jg}::${e}::${t}::`;
13968
14269
  }
13969
- function zg(e = {}) {
13970
- let t = e.dbName ?? Ig, n = e.backend ?? "indexed", r = e.id ?? "", i, a, o = new Promise((e) => {
14270
+ function Qg(e = {}) {
14271
+ let t = e.dbName ?? Yg, n = e.backend ?? "indexed", r = e.id ?? "", i, a, o = new Promise((e) => {
13971
14272
  a = e;
13972
14273
  });
13973
14274
  return (async () => {
@@ -13989,36 +14290,36 @@ function zg(e = {}) {
13989
14290
  ready: o,
13990
14291
  async list() {
13991
14292
  let e = [];
13992
- return await i.scan(Rg(t, r), (t, n) => {
14293
+ return await i.scan(Zg(t, r), (t, n) => {
13993
14294
  e.push(n);
13994
14295
  }), e;
13995
14296
  },
13996
14297
  async get(e) {
13997
- return await i.get(Lg(t, r, e));
14298
+ return await i.get(Xg(t, r, e));
13998
14299
  },
13999
14300
  async put(e) {
14000
14301
  try {
14001
- await i.set(Lg(t, r, e.name), e);
14302
+ await i.set(Xg(t, r, e.name), e);
14002
14303
  } catch (e) {
14003
14304
  Lp(e) && (i = Gp());
14004
14305
  }
14005
14306
  },
14006
14307
  async remove(e) {
14007
- let n = Lg(t, r, e);
14308
+ let n = Xg(t, r, e);
14008
14309
  return await i.get(n) == null ? !1 : (await i.del(n), !0);
14009
14310
  },
14010
14311
  async clear() {
14011
- await i.clearPrefix(Rg(t, r));
14312
+ await i.clearPrefix(Zg(t, r));
14012
14313
  },
14013
14314
  dispose() {}
14014
14315
  };
14015
14316
  }
14016
- var Bg = /large_results\/[^\s"'`),]+\.txt/g;
14017
- function Vg(e) {
14317
+ var $g = /large_results\/[^\s"'`),]+\.txt/g;
14318
+ function e_(e) {
14018
14319
  let t = /* @__PURE__ */ new Set(), n = (e) => {
14019
14320
  if (typeof e != "string" || !e) return;
14020
14321
  let n;
14021
- for (Bg.lastIndex = 0; (n = Bg.exec(e)) !== null;) t.add(n[0]);
14322
+ for ($g.lastIndex = 0; (n = $g.exec(e)) !== null;) t.add(n[0]);
14022
14323
  };
14023
14324
  for (let r of e) {
14024
14325
  if (n(r.content), r.steps) for (let e of r.steps) n(e.result);
@@ -14026,14 +14327,14 @@ function Vg(e) {
14026
14327
  }
14027
14328
  return t;
14028
14329
  }
14029
- function Hg(e, t) {
14330
+ function t_(e, t) {
14030
14331
  let n = [];
14031
14332
  for (let r of Object.keys(e)) r.startsWith("large_results/") && !t.has(r) && n.push(r);
14032
14333
  return n;
14033
14334
  }
14034
14335
  //#endregion
14035
14336
  //#region src/core/utils/serialRunner.ts
14036
- function Ug() {
14337
+ function n_() {
14037
14338
  let e = Promise.resolve();
14038
14339
  return function(t) {
14039
14340
  let n = e.then(t, t);
@@ -14042,24 +14343,24 @@ function Ug() {
14042
14343
  }
14043
14344
  //#endregion
14044
14345
  //#region src/core/sdk/createChatSdk.ts
14045
- var Wg = 30, Gg = /* @__PURE__ */ new Map();
14046
- function Kg(e, t) {
14346
+ var r_ = 30, i_ = /* @__PURE__ */ new Map();
14347
+ function a_(e, t) {
14047
14348
  return e === "restore_data" ? "restore" : e === "write" ? t?.dryRun ? null : t?.del ? "delete" : t?.patch || t?.patches ? "edit" : "set" : e === "eval_script" ? t?.mode === "transform" ? "edit" : null : e === "draft_commit" || e === "resource_update" ? "edit" : null;
14048
14349
  }
14049
- function qg(e) {
14350
+ function o_(e) {
14050
14351
  return e === "spawn_agent" || e === "spawn_agents" || e.startsWith("use_");
14051
14352
  }
14052
- function Jg(e, t, n, r) {
14353
+ function s_(e, t, n, r) {
14053
14354
  let i = 0;
14054
14355
  return {
14055
14356
  name: "sdk-events",
14056
14357
  wrapToolCall: async (t, r) => {
14057
- let i = await r(t), a = Kg(t.name, t.args), o = typeof i.content == "string" && i.content.startsWith("ERROR:");
14358
+ let i = await r(t), a = a_(t.name, t.args), o = typeof i.content == "string" && i.content.startsWith("ERROR:");
14058
14359
  return a && !o ? e({
14059
14360
  type: "data_change",
14060
14361
  operation: a,
14061
14362
  value: n()?.bind
14062
- }) : i.status === "done" && !o && qg(t.name) && e({
14363
+ }) : i.status === "done" && !o && o_(t.name) && e({
14063
14364
  type: "data_change",
14064
14365
  operation: "edit",
14065
14366
  value: n()?.bind
@@ -14087,7 +14388,7 @@ function Jg(e, t, n, r) {
14087
14388
  }
14088
14389
  };
14089
14390
  }
14090
- function Yg(e, t, n, r, i) {
14391
+ function c_(e, t, n, r, i) {
14091
14392
  if (!n) return i && console.warn(`[page-agent-sdk][focus] capabilities.focus 关闭,${t} 忽略`), {
14092
14393
  ok: !1,
14093
14394
  error: "capabilities.focus 关闭"
@@ -14105,7 +14406,7 @@ function Yg(e, t, n, r, i) {
14105
14406
  error: "当前无主数据 schema,无法聚焦"
14106
14407
  });
14107
14408
  }
14108
- function Xg(e, n) {
14409
+ function l_(e, n) {
14109
14410
  let r = {
14110
14411
  prompt_tokens: 0,
14111
14412
  completion_tokens: 0,
@@ -14132,7 +14433,7 @@ function Xg(e, n) {
14132
14433
  e.debug && !u && console.warn("[page-agent-sdk][summarization] 未构造 llmInvoke(apiKey 缺失?),摘要回退零成本索引摘要");
14133
14434
  let C = /* @__PURE__ */ Mt([]), w = nd(e.vfs?.initialFiles, {
14134
14435
  persist: c ? { save: (e) => {
14135
- nn.persistSave({ vfs: e });
14436
+ rn.persistSave({ vfs: e });
14136
14437
  } } : void 0,
14137
14438
  maxBytes: e.vfs?.maxBytes,
14138
14439
  poolBytes: e.vfs?.poolBytes
@@ -14160,7 +14461,7 @@ function Xg(e, n) {
14160
14461
  context: e
14161
14462
  });
14162
14463
  }, ae = au((e) => {
14163
- te.lastPlanConfirmation = e, nn.persistSave({ planConfirmation: e }), X.agent?.debugLogs?.value?.push({
14464
+ te.lastPlanConfirmation = e, rn.persistSave({ planConfirmation: e }), X.agent?.debugLogs?.value?.push({
14164
14465
  timestamp: Date.now(),
14165
14466
  type: "middleware",
14166
14467
  data: {
@@ -14227,7 +14528,7 @@ function Xg(e, n) {
14227
14528
  vfsStore: he || N?.resources?.length ? w : void 0,
14228
14529
  ...de.length ? { pgIdPaths: de } : {},
14229
14530
  ...R.length ? { largeTextPaths: R } : {}
14230
- }) : [], ye = me ? ve : [], U = me && N ? ve.controller ?? null : null, be = me && N ? ve.previewWrite : void 0, xe = me && N?.resources?.length && U?.getResourcesSnapshot ? Pg({ getResourcesSnapshot: () => U?.getResourcesSnapshot?.() ?? [] }) : void 0, W = () => U?.get() ?? N, Se = new Set(ve.map((e) => e.name)), Ce = e.conflictWatchFields ?? [], we = !Ce.includes("*") && Ce.length ? new Set(Ce) : void 0, Te = U ? kf({
14531
+ }) : [], ye = me ? ve : [], U = me && N ? ve.controller ?? null : null, be = me && N ? ve.previewWrite : void 0, xe = me && N?.resources?.length && U?.getResourcesSnapshot ? qg({ getResourcesSnapshot: () => U?.getResourcesSnapshot?.() ?? [] }) : void 0, W = () => U?.get() ?? N, Se = new Set(ve.map((e) => e.name)), Ce = e.conflictWatchFields ?? [], we = !Ce.includes("*") && Ce.length ? new Set(Ce) : void 0, Te = U ? kf({
14231
14532
  getBind: () => W()?.bind,
14232
14533
  recomputeAll: () => U.recomputeAllBaselines?.(),
14233
14534
  hasBaselines: () => U.hasBaselines?.() ?? !1,
@@ -14285,19 +14586,31 @@ function Xg(e, n) {
14285
14586
  }
14286
14587
  return t(e);
14287
14588
  }
14288
- } : null, je = kg(V, ye, Bh, V.domInspect ? [
14289
- ...Qh,
14589
+ } : null, je = V.domEdit ? Zh({ onEdit: (e) => {
14590
+ X.agent?.debugLogs?.value?.push({
14591
+ timestamp: Date.now(),
14592
+ type: "middleware",
14593
+ data: {
14594
+ stage: "dom_edit",
14595
+ ops: e.ops.join(","),
14596
+ applied: e.applied,
14597
+ dryRun: e.dryRun
14598
+ }
14599
+ });
14600
+ } }) : [], Me = Hg(V, ye, $h, V.domInspect ? [
14601
+ ...dg,
14602
+ ...je,
14290
14603
  ...Oe ? [Oe] : [],
14291
- ...V.skills ? [] : [cg, lg]
14292
- ] : [], xg);
14293
- je.forEach((e) => G.set(e.name, "builtin"));
14294
- let Me = [...e.tools || []];
14295
- Me.forEach((e) => G.set(e.name, "user"));
14296
- let Ne = wg(e.actions ?? {});
14297
- Ne.forEach((e) => G.set(e.name, "action"));
14298
- let Pe = [], Fe = !1, Ie = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), Le = Ie ? iu() : null;
14299
- Le && G.set(nu, "builtin");
14300
- let Re = fe && B ? [s(async () => {
14604
+ ...V.skills ? [] : [xg, Sg]
14605
+ ] : [], Pg);
14606
+ Me.forEach((e) => G.set(e.name, "builtin"));
14607
+ let Ne = [...e.tools || []];
14608
+ Ne.forEach((e) => G.set(e.name, "user"));
14609
+ let Pe = Lg(e.actions ?? {});
14610
+ Pe.forEach((e) => G.set(e.name, "action"));
14611
+ let Fe = [], Ie = !1, Le = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), Re = Le ? iu() : null;
14612
+ Re && G.set(nu, "builtin");
14613
+ let ze = fe && B ? [s(async () => {
14301
14614
  let e = B.list();
14302
14615
  return e.length ? B.restore() ? `已回退到最近一次正常状态(checkpoint #${e[e.length - 1].id})。对话历史、主数据、vfs、todos 已整体还原。请基于回退后的状态重新判断并继续。` : "回退失败:无可用 checkpoint。" : "无可用 checkpoint,无法回退。";
14303
14616
  }, {
@@ -14312,8 +14625,8 @@ function Xg(e, n) {
14312
14625
  description: "列出可用会话 checkpoint(回退点)。",
14313
14626
  schema: t.object({}).optional()
14314
14627
  })] : [];
14315
- Re.forEach((e) => G.set(e.name, "builtin"));
14316
- let ze = V.focus, Be = s(async ({ path: e, label: t }) => {
14628
+ ze.forEach((e) => G.set(e.name, "builtin"));
14629
+ let K = V.focus, Be = s(async ({ path: e, label: t }) => {
14317
14630
  let n = W()?.schema;
14318
14631
  return n ? _s(n, e) ? (A.setFocus(oe({
14319
14632
  path: e,
@@ -14356,7 +14669,7 @@ function Xg(e, n) {
14356
14669
  name: "remove_focus",
14357
14670
  description: "移除单个聚焦焦点(by path),保留其他焦点。移除最后一个等价退出精修。全部退出用 clear_focus。",
14358
14671
  schema: t.object({ path: t.string().describe("要移除的焦点 jsonPath") })
14359
- }), We = ze ? [
14672
+ }), We = K ? [
14360
14673
  Be,
14361
14674
  Ve,
14362
14675
  He,
@@ -14364,55 +14677,55 @@ function Xg(e, n) {
14364
14677
  ] : [];
14365
14678
  We.forEach((e) => G.set(e.name, "builtin"));
14366
14679
  let Ge = [], Ke = /* @__PURE__ */ new Map(), qe = fm({
14367
- builtinTools: () => je,
14368
- userTools: () => Me,
14369
- actionTools: () => Ne,
14370
- humanConfirmTool: () => Le,
14371
- checkpointTools: () => Re,
14680
+ builtinTools: () => Me,
14681
+ userTools: () => Ne,
14682
+ actionTools: () => Pe,
14683
+ humanConfirmTool: () => Re,
14684
+ checkpointTools: () => ze,
14372
14685
  focusTools: () => We,
14373
- mcpTools: () => Pe,
14686
+ mcpTools: () => Fe,
14374
14687
  loadedSkillTools: () => Ge
14375
- }), K = qe(), Je = V.planning, Ye = V.missionAnchor, Xe = V.workingMemory, Ze = V.skills, q = V.vfs || ue;
14376
- if (q) for (let e of cd) G.set(e, "builtin");
14688
+ }), q = qe(), Je = V.planning, Ye = V.missionAnchor, Xe = V.workingMemory, Ze = V.skills, Qe = V.vfs || ue;
14689
+ if (Qe) for (let e of cd) G.set(e, "builtin");
14377
14690
  if (Je) for (let e of T.tools ?? []) G.set(e.name, "builtin");
14378
- let Qe = V.summarization, $e = V.agentCompression && !!f;
14691
+ let $e = V.summarization, et = V.agentCompression && !!f;
14379
14692
  e.debug && V.agentCompression && !f && console.warn("[page-agent-sdk][agentCompression] agentCompression 开启但 summaryLlm 不可用(或缺 apiKey / 模型不支持工具),压缩决策不启用,回退静态压缩");
14380
- let et = V.memory, tt = V.subagent, nt = tt ? yl() : void 0, rt = e.verify?.maxAttempts ?? 2, it = !!(e.verify?.check || e.verify?.maxAttempts || e.verify?.adversarial), at = e.capabilities?.verify === !1, ot = (V.verify || it && !at) && e.verify?.enabled !== !1 && rt > 0, st = V.contextInspector;
14381
- it && !ot && e.verify?.enabled !== !1 && console.warn("[page-agent-sdk][verify] 检测到 verify 配置(check/maxAttempts/adversarial)但未装载(capabilities.verify:false 显式关闭 或 maxAttempts≤0)");
14382
- let ct = e.subagent, lt = ct?.allowedTools ?? [], ut = e.permissions?.length ? eu(e.permissions) : void 0, dt = e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? tu({
14693
+ let tt = V.memory, nt = V.subagent, rt = nt ? yl() : void 0, it = e.verify?.maxAttempts ?? 2, at = !!(e.verify?.check || e.verify?.maxAttempts || e.verify?.adversarial), ot = e.capabilities?.verify === !1, st = (V.verify || at && !ot) && e.verify?.enabled !== !1 && it > 0, ct = V.contextInspector;
14694
+ at && !st && e.verify?.enabled !== !1 && console.warn("[page-agent-sdk][verify] 检测到 verify 配置(check/maxAttempts/adversarial)但未装载(capabilities.verify:false 显式关闭 或 maxAttempts≤0)");
14695
+ let lt = e.subagent, ut = lt?.allowedTools ?? [], dt = e.permissions?.length ? eu(e.permissions) : void 0, ft = e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? tu({
14383
14696
  ...e.approval,
14384
14697
  timeoutMs: e.approval.timeoutMs ?? re,
14385
14698
  onAutoReject: ie,
14386
14699
  previewWrite: e.approval.preview === !0 && be ? (e, t) => e === "write" ? be(t) : null : void 0
14387
- }) : void 0, ft = [
14388
- ...ut ? [ut] : [],
14700
+ }) : void 0, pt = [
14389
14701
  ...dt ? [dt] : [],
14702
+ ...ft ? [ft] : [],
14390
14703
  ...Te ? [Te] : []
14391
- ], pt = !tt || ct?.enabled === !1 ? void 0 : zl({
14392
- llm: ct?.llm ?? e.llm,
14393
- allTools: () => X.agent?.allTools ?? K,
14394
- allowedTools: lt.length ? lt : void 0,
14704
+ ], mt = !nt || lt?.enabled === !1 ? void 0 : zl({
14705
+ llm: lt?.llm ?? e.llm,
14706
+ allTools: () => X.agent?.allTools ?? q,
14707
+ allowedTools: ut.length ? ut : void 0,
14395
14708
  ...e.staleReadInvalidation === void 0 ? {} : { staleReadInvalidation: e.staleReadInvalidation },
14396
- systemPrompt: ct?.systemPrompt,
14397
- temperature: ct?.temperature,
14398
- maxTokens: ct?.maxTokens,
14399
- skills: ct?.skills,
14400
- maxDepth: ct?.maxDepth,
14401
- maxParallel: ct?.maxParallel,
14402
- thinkingMode: ct?.thinkingMode,
14709
+ systemPrompt: lt?.systemPrompt,
14710
+ temperature: lt?.temperature,
14711
+ maxTokens: lt?.maxTokens,
14712
+ skills: lt?.skills,
14713
+ maxDepth: lt?.maxDepth,
14714
+ maxParallel: lt?.maxParallel,
14715
+ thinkingMode: lt?.thinkingMode,
14403
14716
  debug: e.debug,
14404
14717
  getFocuses: () => A.getActiveFocuses(),
14405
14718
  getSchema: () => W()?.schema ?? null,
14406
- tracker: nt,
14407
- guardMiddleware: ft.length ? ft : void 0,
14408
- getVfsFiles: q ? () => w.files : void 0,
14719
+ tracker: rt,
14720
+ guardMiddleware: pt.length ? pt : void 0,
14721
+ getVfsFiles: Qe ? () => w.files : void 0,
14409
14722
  enterDataScope: U?.enterScope ? (e) => U.enterScope(e) : void 0,
14410
14723
  exitDataScope: U?.exitScope ? (e) => U.exitScope(e) : void 0,
14411
14724
  onUsage: (e) => {
14412
14725
  r.prompt_tokens = (r.prompt_tokens ?? 0) + (e.prompt_tokens ?? 0), r.completion_tokens = (r.completion_tokens ?? 0) + (e.completion_tokens ?? 0), r.total_tokens = (r.total_tokens ?? 0) + (e.total_tokens ?? 0), e.reasoning_tokens && (r.reasoning_tokens = (r.reasoning_tokens ?? 0) + e.reasoning_tokens);
14413
14726
  },
14414
- timeoutMs: ct?.timeoutMs
14415
- }), mt = L?.map((e) => {
14727
+ timeoutMs: lt?.timeoutMs
14728
+ }), ht = L?.map((e) => {
14416
14729
  if (!e._codeAsset) return e;
14417
14730
  let t = e._codeAsset, n = mf({
14418
14731
  writablePaths: t.writablePaths,
@@ -14429,74 +14742,75 @@ function Xg(e, n) {
14429
14742
  ...e,
14430
14743
  middleware: r
14431
14744
  };
14432
- }), ht = ue && tt ? hf() : void 0, gt = ht ? Sf({
14745
+ }), gt = ue && nt ? hf() : void 0, _t = gt ? Sf({
14433
14746
  getBind: () => W()?.bind,
14434
14747
  writablePaths: de,
14435
- getLocked: () => ht.locked(),
14436
- tools: K,
14748
+ getLocked: () => gt.locked(),
14749
+ tools: q,
14437
14750
  getCodeFieldPaths: () => bf(W()?.bind, I.map((e) => ({
14438
14751
  writablePaths: e._codeAsset.writablePaths,
14439
14752
  codeField: e._codeAsset.codeField
14440
14753
  })))
14441
- }) : void 0, _t = U?.getSummarizedPaths && U.clearSummarizedPaths ? Tf({
14754
+ }) : void 0, vt = U?.getSummarizedPaths && U.clearSummarizedPaths ? Tf({
14442
14755
  getSummarizedPaths: () => U.getSummarizedPaths(),
14443
14756
  clearSummarizedPaths: () => U.clearSummarizedPaths()
14444
- }) : void 0, vt = tt && mt !== void 0 ? Hl(mt, {
14757
+ }) : void 0, yt = nt && ht !== void 0 ? Hl(ht, {
14445
14758
  llm: e.llm,
14446
14759
  thinkingModeDefault: e.subagent?.thinkingMode,
14447
14760
  staleReadInvalidation: e.staleReadInvalidation,
14448
- allTools: () => X.agent?.allTools ?? K,
14761
+ allTools: () => X.agent?.allTools ?? q,
14449
14762
  debug: e.debug,
14450
14763
  getFocuses: () => A.getActiveFocuses(),
14451
14764
  getSchema: () => W()?.schema ?? null,
14452
14765
  getBind: () => W()?.bind,
14453
- tracker: nt,
14454
- guardMiddleware: ft.length ? ft : void 0,
14455
- getVfsFiles: q ? () => w.files : void 0,
14766
+ tracker: rt,
14767
+ guardMiddleware: pt.length ? pt : void 0,
14768
+ getVfsFiles: Qe ? () => w.files : void 0,
14456
14769
  enterDataScope: U?.enterScope ? (e) => U.enterScope(e) : void 0,
14457
14770
  exitDataScope: U?.exitScope ? (e) => U.exitScope(e) : void 0,
14458
14771
  onUsage: (e) => {
14459
14772
  r.prompt_tokens = (r.prompt_tokens ?? 0) + (e.prompt_tokens ?? 0), r.completion_tokens = (r.completion_tokens ?? 0) + (e.completion_tokens ?? 0), r.total_tokens = (r.total_tokens ?? 0) + (e.total_tokens ?? 0), e.reasoning_tokens && (r.reasoning_tokens = (r.reasoning_tokens ?? 0) + e.reasoning_tokens);
14460
14773
  },
14461
14774
  timeoutMs: e.subagent?.timeoutMs,
14462
- ...ht ? {
14463
- componentLock: ht,
14775
+ ...gt ? {
14776
+ componentLock: gt,
14464
14777
  resolveComponents: (e) => gf(e, uf(W()?.bind, de))
14465
14778
  } : {}
14466
- }) : void 0, yt = vt ? vt.controller : null, bt = (t) => {
14779
+ }) : void 0, bt = yt ? yt.controller : null, xt = (t) => {
14467
14780
  let n = t.thinkingMode ?? e.subagent?.thinkingMode, r = n ? dp(t.llm ?? e.llm) ? "instance-noop" : "applied" : "inherited";
14468
14781
  return {
14469
14782
  ...t,
14470
14783
  ...n ? { thinkingMode: n } : {},
14471
14784
  thinkingApplied: r
14472
14785
  };
14473
- }, xt = ["read", "fetch_document"], St = K.filter((e) => xt.includes(e.name)), Ct = ot ? gu({
14786
+ }, St = ["read", "fetch_document"], Ct = q.filter((e) => St.includes(e.name)), wt = st ? gu({
14474
14787
  check: e.verify.check ?? Su({
14475
14788
  schemas: () => W() ? { "": W().schema } : {},
14476
14789
  root: () => W()?.bind
14477
14790
  }),
14478
14791
  adversarial: e.verify?.adversarial ? {
14479
14792
  llm: e.llm,
14480
- tools: St
14793
+ tools: Ct
14481
14794
  } : void 0
14482
- }) : void 0, wt = st ? Iu({
14795
+ }) : void 0, Tt = ct ? Iu({
14483
14796
  contextWindow: m.contextWindow,
14484
14797
  thresholdRatio: am(e, m.contextWindow).summaryThresholdRatio
14485
- }) : void 0, Tt = jg({
14798
+ }) : void 0, Et = Wg({
14486
14799
  ...V,
14487
- humanConfirm: Ie,
14800
+ humanConfirm: Le,
14488
14801
  screenshot: !!Oe,
14489
- subagents: L?.map(bt)
14490
- }, me && !!N, { promptSoftCap: ml(m.contextWindow, g.promptSoftCapTokens) }), Et = V.pageContext ? Ng({
14802
+ domEdit: V.domEdit,
14803
+ subagents: L?.map(xt)
14804
+ }, me && !!N, { promptSoftCap: ml(m.contextWindow, g.promptSoftCapTokens) }), Dt = V.pageContext ? Kg({
14491
14805
  getPageInfo: () => typeof document < "u" && typeof location < "u" ? {
14492
14806
  title: document.title || "",
14493
14807
  url: location.href
14494
14808
  } : null,
14495
14809
  canReadPage: V.domInspect === !0
14496
- }) : void 0, Dt = N ? {
14810
+ }) : void 0, Ot = N ? {
14497
14811
  name: "dataHint",
14498
14812
  augmentPrompt: () => Zu(W(), e.schemaHint) || void 0
14499
- } : null, Ot = e.augmentSystem ? {
14813
+ } : null, kt = e.augmentSystem ? {
14500
14814
  name: "augmentSystem",
14501
14815
  augmentPrompt: (t) => {
14502
14816
  try {
@@ -14509,125 +14823,131 @@ function Xg(e, n) {
14509
14823
  return;
14510
14824
  }
14511
14825
  }
14512
- } : null, kt = nm(e.onEvent), J = kt.emit, At, jt = [], Nt = (e) => ({
14826
+ } : null, At = nm(e.onEvent), J = At.emit, jt, Nt = [], Pt = (e) => ({
14513
14827
  name: e.name,
14514
14828
  description: e.description,
14515
14829
  content: typeof e.getContent == "function" ? e.getContent() : ""
14516
- }), Pt = (e) => ({
14830
+ }), Ft = (e) => ({
14517
14831
  name: e.name,
14518
14832
  description: e.description,
14519
14833
  getContent: () => e.content
14520
- }), Ft = e.skillStorage === !1 ? null : zg({
14834
+ }), It = e.skillStorage === !1 ? null : Qg({
14521
14835
  ...typeof e.skillStorage == "object" ? e.skillStorage : {},
14522
14836
  id: e.skillStorage && typeof e.skillStorage == "object" && e.skillStorage.id ? e.skillStorage.id : `agent::${n}`
14523
- }), It = () => {
14524
- let t = At ? At.controller : null;
14837
+ }), Lt = () => {
14838
+ let t = jt ? jt.controller : null;
14525
14839
  if (t) {
14526
- let n = (e.skills || []).filter((e) => !jt.some((t) => t.name === e.name));
14527
- t.set([...n, ...jt]);
14840
+ let n = (e.skills || []).filter((e) => !Nt.some((t) => t.name === e.name));
14841
+ t.set([...n, ...Nt]);
14528
14842
  }
14529
14843
  X.infoTick.value++;
14530
- }, Lt = async () => {
14531
- if (Ft) try {
14532
- let t = await Ft.list();
14844
+ }, Rt = async () => {
14845
+ if (It) try {
14846
+ let t = await It.list();
14533
14847
  if (t.length) {
14534
- jt = t.map(Pt);
14535
- let n = At ? At.controller : null;
14848
+ Nt = t.map(Ft);
14849
+ let n = jt ? jt.controller : null;
14536
14850
  if (n) {
14537
- let t = (e.skills || []).filter((e) => !jt.some((t) => t.name === e.name));
14538
- n.set([...t, ...jt]);
14851
+ let t = (e.skills || []).filter((e) => !Nt.some((t) => t.name === e.name));
14852
+ n.set([...t, ...Nt]);
14539
14853
  }
14540
14854
  X.infoTick.value++;
14541
14855
  }
14542
14856
  } catch {}
14543
- }, Rt = Qe ? vl({
14857
+ }, zt = $e ? vl({
14544
14858
  ...g,
14545
14859
  llmInvoke: u,
14546
14860
  getRegisteredData: () => W() ? [{ description: W().description ?? "主数据对象" }] : [],
14547
14861
  preserveLastToolResults: b,
14548
- ...$e ? {
14862
+ ...et ? {
14549
14863
  decideInvoke: f,
14550
- getSnapshot: () => wt?.getSnapshot()
14864
+ getSnapshot: () => Tt?.getSnapshot()
14551
14865
  } : {}
14552
- }) : void 0, zt = Ze ? qc([
14553
- ...V.domInspect && !(e.skills || []).some((e) => e.name === "dom-inspect") ? [dg({ withScreenshot: !!Oe })] : [],
14554
- ...V.domInspect && !(e.skills || []).some((e) => e.name === "page-analysis") ? [pg({ withScreenshot: !!Oe })] : [],
14866
+ }) : void 0, Y = Ze ? qc([
14867
+ ...V.domInspect && !(e.skills || []).some((e) => e.name === "dom-inspect") ? [wg({
14868
+ withScreenshot: !!Oe,
14869
+ withDomEdit: V.domEdit
14870
+ })] : [],
14871
+ ...V.domInspect && !(e.skills || []).some((e) => e.name === "page-analysis") ? [Eg({
14872
+ withScreenshot: !!Oe,
14873
+ withDomEdit: V.domEdit
14874
+ })] : [],
14555
14875
  ...e.skills || []
14556
14876
  ], {
14557
- readVfs: q ? (e) => w.files[e]?.content : void 0,
14877
+ readVfs: Qe ? (e) => w.files[e]?.content : void 0,
14558
14878
  onToolsReady: (e, t) => {
14559
14879
  for (let n of t) {
14560
14880
  let t = Ge.findIndex((e) => e.name === n.name);
14561
14881
  t >= 0 && Ge.splice(t, 1), Ge.push(n), Ke.set(n.name, e), G.set(n.name, `skill:${e}`);
14562
14882
  }
14563
- K = qe(), X.agent && X.agent.setTools(K), X.infoTick.value++;
14883
+ q = qe(), X.agent && X.agent.setTools(q), X.infoTick.value++;
14564
14884
  }
14565
14885
  }) : void 0;
14566
- At = zt;
14567
- let Y = sm([
14886
+ jt = Y;
14887
+ let Bt = sm([
14888
+ ...Ot ? [Ot] : [],
14889
+ Et,
14568
14890
  ...Dt ? [Dt] : [],
14569
- Tt,
14570
- ...Et ? [Et] : [],
14571
14891
  ...Ye ? [D] : [],
14572
14892
  O,
14573
14893
  ee,
14574
14894
  ...Je ? [T] : [],
14895
+ ...Y ? [Y] : [],
14896
+ ...Qe ? [ud(w)] : [],
14575
14897
  ...zt ? [zt] : [],
14576
- ...q ? [ud(w)] : [],
14577
- ...Rt ? [Rt] : [],
14578
14898
  ...Xe ? [j] : [],
14579
- ...ze ? [A] : [],
14899
+ ...K ? [A] : [],
14580
14900
  ...xe ? [xe] : [],
14581
- ...et ? [se] : [],
14582
- ...ut ? [ut] : [],
14583
- ...fe && pe && B ? [mu(B)] : [],
14584
- ...Ie ? [ae] : [],
14901
+ ...tt ? [se] : [],
14585
14902
  ...dt ? [dt] : [],
14903
+ ...fe && pe && B ? [mu(B)] : [],
14904
+ ...Le ? [ae] : [],
14905
+ ...ft ? [ft] : [],
14586
14906
  ...Te ? [Te] : [],
14587
- ...Ct ? [Ct] : [],
14588
- ...pt ? [pt] : [],
14589
- ...vt ? [vt] : [],
14590
- ...gt ? [gt] : [],
14907
+ ...wt ? [wt] : [],
14908
+ ...mt ? [mt] : [],
14909
+ ...yt ? [yt] : [],
14591
14910
  ..._t ? [_t] : [],
14592
- ...U && tt ? [Of({
14911
+ ...vt ? [vt] : [],
14912
+ ...U && nt ? [Of({
14593
14913
  getBind: () => W()?.bind,
14594
- getTools: () => X.agent?.allTools ?? K
14914
+ getTools: () => X.agent?.allTools ?? q
14595
14915
  })] : [],
14596
- ...Ot ? [Ot] : [],
14597
- ...wt ? [wt] : [],
14916
+ ...kt ? [kt] : [],
14917
+ ...Tt ? [Tt] : [],
14598
14918
  ...Ae ? [Ae] : [],
14599
14919
  ...e.middleware || [],
14600
- ...H ? [Sg(r, {
14920
+ ...H ? [Fg(r, {
14601
14921
  tokenBudget: e.tokenBudget,
14602
14922
  timeBudgetMs: e.timeBudgetMs
14603
14923
  }, J)] : [],
14604
- Jg(J, C, W, r)
14605
- ]), Bt = e.maxMemoryRounds ?? Wg;
14606
- function Vt(e) {
14924
+ s_(J, C, W, r)
14925
+ ]), Vt = e.maxMemoryRounds ?? r_;
14926
+ function Ht(e) {
14607
14927
  return (e) => {
14608
14928
  e.type !== "approval_request" && J(De(e));
14609
14929
  };
14610
14930
  }
14611
- let Ht = /* @__PURE__ */ Wt([]), Ut = Ug(), Gt = /* @__PURE__ */ new Set();
14612
- function Kt(e) {
14931
+ let Ut = /* @__PURE__ */ Wt([]), Gt = n_(), Kt = /* @__PURE__ */ new Set();
14932
+ function qt(e) {
14613
14933
  let t = new AbortController(), n = () => t.abort();
14614
- return e && (e.aborted ? t.abort() : e.addEventListener("abort", n, { once: !0 })), Gt.add(t), {
14934
+ return e && (e.aborted ? t.abort() : e.addEventListener("abort", n, { once: !0 })), Kt.add(t), {
14615
14935
  controller: t,
14616
14936
  untrack: () => {
14617
- Gt.delete(t), e?.removeEventListener("abort", n);
14937
+ Kt.delete(t), e?.removeEventListener("abort", n);
14618
14938
  }
14619
14939
  };
14620
14940
  }
14621
- function qt() {
14622
- for (let e of Gt) e.abort();
14623
- Gt.clear();
14941
+ function Yt() {
14942
+ for (let e of Kt) e.abort();
14943
+ Kt.clear();
14624
14944
  }
14625
- let Yt = /* @__PURE__ */ Wt(null), X = {
14945
+ let Xt = /* @__PURE__ */ Wt(null), X = {
14626
14946
  agentId: n,
14627
14947
  store: c,
14628
14948
  messages: C,
14629
14949
  vfsStore: w,
14630
- listeners: kt.listeners,
14950
+ listeners: At.listeners,
14631
14951
  todosMw: T,
14632
14952
  memoryMw: se,
14633
14953
  missionMw: D,
@@ -14642,18 +14962,18 @@ function Xg(e, n) {
14642
14962
  mcpFailed: [],
14643
14963
  checkpoint: B,
14644
14964
  dataOpsController: U,
14645
- skillsController: At ? At.controller : null,
14965
+ skillsController: jt ? jt.controller : null,
14646
14966
  infoTick: o,
14647
14967
  pendingConflict: a.pendingConflict,
14648
- pendingQuote: Yt,
14649
- sessions: Ht,
14650
- refreshSessions: () => nn.refreshSessions(),
14968
+ pendingQuote: Xt,
14969
+ sessions: Ut,
14970
+ refreshSessions: () => rn.refreshSessions(),
14651
14971
  liveData: W,
14652
14972
  usage: r,
14653
14973
  emit: J,
14654
- runSerial: Ut,
14655
- trackActive: Kt,
14656
- abortAllActive: qt,
14974
+ runSerial: Gt,
14975
+ trackActive: qt,
14976
+ abortAllActive: Yt,
14657
14977
  unloadSkillTools(e) {
14658
14978
  if (e) {
14659
14979
  let t = Ge.length;
@@ -14663,10 +14983,10 @@ function Xg(e, n) {
14663
14983
  for (let e of Ge) G.delete(e.name), Ke.delete(e.name);
14664
14984
  Ge = [];
14665
14985
  }
14666
- K = qe(), X.agent && X.agent.setTools(K);
14986
+ q = qe(), X.agent && X.agent.setTools(q);
14667
14987
  },
14668
14988
  applySnapshot(t) {
14669
- if (t.vfs && w.hydrate && w.hydrate(t.vfs), t.messages?.length && (C.push(...Ci(t.messages, (e) => (e ? X.vfsStore?.files?.[e]?.content : void 0) || void 0)), ee.markResumed()), t.todos?.length && T.reset(t.todos), t.memory && !e.memory && se.reset(t.memory), t.checkpoints?.length && B && B.importStack(t.checkpoints), t.usage && Object.assign(r, t.usage), t.mission && Ye && D.setMission(t.mission), t.workingMemory && Xe && j.restore(t.workingMemory), t.planConfirmation && (te.lastPlanConfirmation = t.planConfirmation), ze) {
14989
+ if (t.vfs && w.hydrate && w.hydrate(t.vfs), t.messages?.length && (C.push(...Ci(t.messages, (e) => (e ? X.vfsStore?.files?.[e]?.content : void 0) || void 0)), ee.markResumed()), t.todos?.length && T.reset(t.todos), t.memory && !e.memory && se.reset(t.memory), t.checkpoints?.length && B && B.importStack(t.checkpoints), t.usage && Object.assign(r, t.usage), t.mission && Ye && D.setMission(t.mission), t.workingMemory && Xe && j.restore(t.workingMemory), t.planConfirmation && (te.lastPlanConfirmation = t.planConfirmation), K) {
14670
14990
  let n = t.focus, r = n ? Array.isArray(n) ? n : [n] : [];
14671
14991
  if (r.length) {
14672
14992
  let t = W()?.schema, n = t ? r.filter((e) => _s(t, e.path)) : [];
@@ -14676,21 +14996,21 @@ function Xg(e, n) {
14676
14996
  }
14677
14997
  }
14678
14998
  }
14679
- $t();
14999
+ en();
14680
15000
  },
14681
15001
  addSkill(e) {
14682
- let t = jt.findIndex((t) => t.name === e.name);
14683
- t >= 0 ? jt[t] = e : jt.push(e), It(), Ft && Ft.put(Nt(e));
15002
+ let t = Nt.findIndex((t) => t.name === e.name);
15003
+ t >= 0 ? Nt[t] = e : Nt.push(e), Lt(), It && It.put(Pt(e));
14684
15004
  },
14685
15005
  removeSkill(e) {
14686
- let t = jt.findIndex((t) => t.name === e);
14687
- return t < 0 ? !1 : (jt.splice(t, 1), It(), Ft && Ft.remove(e), !0);
15006
+ let t = Nt.findIndex((t) => t.name === e);
15007
+ return t < 0 ? !1 : (Nt.splice(t, 1), Lt(), It && It.remove(e), !0);
14688
15008
  },
14689
15009
  listUserSkills() {
14690
- return jt.map((e) => e.name);
15010
+ return Nt.map((e) => e.name);
14691
15011
  },
14692
15012
  getUserSkill(e) {
14693
- let t = jt.find((t) => t.name === e);
15013
+ let t = Nt.find((t) => t.name === e);
14694
15014
  if (t) return {
14695
15015
  name: t.name,
14696
15016
  description: t.description,
@@ -14698,7 +15018,7 @@ function Xg(e, n) {
14698
15018
  };
14699
15019
  },
14700
15020
  afterRound() {
14701
- en(), nn.persistRuntime();
15021
+ tn(), rn.persistRuntime();
14702
15022
  },
14703
15023
  clearCodeReuse() {
14704
15024
  let e = w;
@@ -14709,7 +15029,7 @@ function Xg(e, n) {
14709
15029
  t ??= {}, t?.mission && Ye && D.setMission(t.mission);
14710
15030
  let n = e, r = (t.images ?? []).filter((e) => e && (e.dataUri || e.vfsRef || e.url));
14711
15031
  if (r.length > 4) throw Error(`[page-agent-sdk] 单轮最多 4 张图片(收到 ${r.length})`);
14712
- if (r.length && (await tn.stowImages(r), await tn.describeIfNeeded(r, n)), r.length && !m.vision && !r.every((e) => e.description)) {
15032
+ if (r.length && (await nn.stowImages(r), await nn.describeIfNeeded(r, n)), r.length && !m.vision && !r.every((e) => e.description)) {
14713
15033
  let e = "当前主模型不支持图片输入(modelCaps.vision=false)。请换多模态模型(gpt-4o/claude/qwen-vl)或 LLMConfig 声明 vision:true;或配置 images.describe 绑定识图转述(集成方识图子 agent / 自有 vision API)";
14714
15034
  throw J({
14715
15035
  type: "error",
@@ -14718,8 +15038,8 @@ function Xg(e, n) {
14718
15038
  code: "IMAGE_UNSUPPORTED_MODEL"
14719
15039
  }), Error(`[page-agent-sdk] ${e}`);
14720
15040
  }
14721
- w?.setProtectedRefs?.(Vg(C));
14722
- let i = H ? t.maxAutoRetries ?? 1 : 0, o = 0, s = !1, l = Vt(t.signal);
15041
+ w?.setProtectedRefs?.(e_(C));
15042
+ let i = H ? t.maxAutoRetries ?? 1 : 0, o = 0, s = !1, l = Ht(t.signal);
14723
15043
  if (t.signal) {
14724
15044
  let e = () => a.resolve("keep_external");
14725
15045
  t.signal.aborted ? e() : t.signal.addEventListener("abort", e, { once: !0 });
@@ -14730,14 +15050,14 @@ function Xg(e, n) {
14730
15050
  let e = t.quote && t.quote.text ? {
14731
15051
  text: Ni(t.quote.text),
14732
15052
  ...t.quote.source ? { source: t.quote.source } : {}
14733
- } : void 0, i = e ?? Yt.value ?? void 0;
15053
+ } : void 0, i = e ?? Xt.value ?? void 0;
14734
15054
  C.push({
14735
15055
  role: "user",
14736
15056
  content: n,
14737
15057
  timestamp: Date.now(),
14738
15058
  ...r.length ? { images: r } : {},
14739
15059
  ...i ? { quote: i } : {}
14740
- }), s = !0, !e && Yt.value && (Yt.value = null);
15060
+ }), s = !0, !e && Xt.value && (Xt.value = null);
14741
15061
  }
14742
15062
  try {
14743
15063
  let e = await X.agent.invoke(C, t.signal, l);
@@ -14799,8 +15119,8 @@ function Xg(e, n) {
14799
15119
  async batch(e, t, n) {
14800
15120
  if (await X.initDone, !e.length) return [];
14801
15121
  if (X.refCount <= 0) throw Error("page-agent-sdk: agent 已释放(unmount),拒绝排队中的 batch");
14802
- let r = [], i = Vt(n);
14803
- if (w?.setProtectedRefs?.(Vg(C)), n) {
15122
+ let r = [], i = Ht(n);
15123
+ if (w?.setProtectedRefs?.(e_(C)), n) {
14804
15124
  let e = () => a.resolve("keep_external");
14805
15125
  n.aborted ? e() : n.addEventListener("abort", e, { once: !0 });
14806
15126
  }
@@ -14891,14 +15211,14 @@ function Xg(e, n) {
14891
15211
  }
14892
15212
  return r;
14893
15213
  },
14894
- switchSession: (e) => nn.switchSession(e),
14895
- exportSession: (e) => nn.exportSession(e),
14896
- importSession: (e) => nn.importSession(e),
14897
- resetSession: () => nn.resetSession(),
15214
+ switchSession: (e) => rn.switchSession(e),
15215
+ exportSession: (e) => rn.exportSession(e),
15216
+ importSession: (e) => rn.importSession(e),
15217
+ resetSession: () => rn.resetSession(),
14898
15218
  stream: async (e, t, n) => {
14899
15219
  if (!X.agent) throw Error("page-agent-sdk: agent 尚未初始化完成,请先 await mount()");
14900
15220
  let r = [...e].reverse().find((e) => e.role === "user" && e.images?.length);
14901
- if (r?.images?.length && (await tn.stowImages(r.images), await tn.describeIfNeeded(r.images, r.content), !m.vision && !r.images.every((e) => e.description))) {
15221
+ if (r?.images?.length && (await nn.stowImages(r.images), await nn.describeIfNeeded(r.images, r.content), !m.vision && !r.images.every((e) => e.description))) {
14902
15222
  let e = "当前主模型不支持图片输入(modelCaps.vision=false)。请换多模态模型(gpt-4o/claude/qwen-vl)或 LLMConfig 声明 vision:true;或配置 images.describe 绑定识图转述";
14903
15223
  throw J({
14904
15224
  type: "error",
@@ -14907,7 +15227,7 @@ function Xg(e, n) {
14907
15227
  code: "IMAGE_UNSUPPORTED_MODEL"
14908
15228
  }), Error(`[page-agent-sdk] ${e}`);
14909
15229
  }
14910
- w?.setProtectedRefs?.(Vg(e));
15230
+ w?.setProtectedRefs?.(e_(e));
14911
15231
  let i = (e) => {
14912
15232
  t?.(De(e)), J(De(e)), e.type === "subagent" && (e.kind === "tool_call" || e.kind === "tool_result") && X.infoTick.value++;
14913
15233
  };
@@ -14915,30 +15235,30 @@ function Xg(e, n) {
14915
15235
  let e = () => a.resolve("keep_external");
14916
15236
  n.aborted ? e() : n.addEventListener("abort", e, { once: !0 });
14917
15237
  }
14918
- let { controller: o, untrack: s } = Kt(n);
15238
+ let { controller: o, untrack: s } = qt(n);
14919
15239
  return X.agent.stream(e, i, o.signal).finally(s);
14920
15240
  },
14921
15241
  release() {
14922
15242
  if (X.refCount--, X.refCount <= 0) {
14923
- qt(), Fe = !0, c && (w.flush?.(), c.flush(), c.dispose()), Ft && Ft.dispose();
15243
+ Yt(), Ie = !0, c && (w.flush?.(), c.flush(), c.dispose()), It && It.dispose();
14924
15244
  let e = X.mcpClosers.splice(0);
14925
- e.length && Promise.allSettled(e.map((e) => e())), Gg.delete(n);
15245
+ e.length && Promise.allSettled(e.map((e) => e())), i_.delete(n);
14926
15246
  }
14927
15247
  },
14928
15248
  resolveConflict: a.resolve,
14929
15249
  setTools(e) {
14930
- Me.length = 0, e.forEach((e) => {
14931
- Me.push(e), G.set(e.name, "user");
14932
- }), K = qe(), X.agent && X.agent.setTools(K), X.infoTick.value++;
15250
+ Ne.length = 0, e.forEach((e) => {
15251
+ Ne.push(e), G.set(e.name, "user");
15252
+ }), q = qe(), X.agent && X.agent.setTools(q), X.infoTick.value++;
14933
15253
  },
14934
15254
  addTool(e) {
14935
- K.some((t) => t.name === e.name) && console.warn(`[page-agent-sdk] 工具 "${e.name}" 已存在,新工具覆盖(后注册覆盖先注册)`);
14936
- for (let t = Me.length - 1; t >= 0; t--) Me[t].name === e.name && Me.splice(t, 1);
14937
- Me.push(e), G.set(e.name, "user"), K = qe(), X.agent && X.agent.setTools(K), X.infoTick.value++;
15255
+ q.some((t) => t.name === e.name) && console.warn(`[page-agent-sdk] 工具 "${e.name}" 已存在,新工具覆盖(后注册覆盖先注册)`);
15256
+ for (let t = Ne.length - 1; t >= 0; t--) Ne[t].name === e.name && Ne.splice(t, 1);
15257
+ Ne.push(e), G.set(e.name, "user"), q = qe(), X.agent && X.agent.setTools(q), X.infoTick.value++;
14938
15258
  },
14939
15259
  removeTool(e) {
14940
- let t = Me.findIndex((t) => t.name === e);
14941
- return t < 0 ? !1 : (Me.splice(t, 1), G.delete(e), K = qe(), X.agent && X.agent.setTools(K), X.infoTick.value++, !0);
15260
+ let t = Ne.findIndex((t) => t.name === e);
15261
+ return t < 0 ? !1 : (Ne.splice(t, 1), G.delete(e), q = qe(), X.agent && X.agent.setTools(q), X.infoTick.value++, !0);
14942
15262
  },
14943
15263
  setLlm(t) {
14944
15264
  let n;
@@ -14956,7 +15276,7 @@ function Xg(e, n) {
14956
15276
  maxOutputTokens: e.maxOutputTokens ?? r?.maxOutputTokens,
14957
15277
  vision: r?.vision ?? t.vision
14958
15278
  }), m.contextWindow < 2e5) throw Error(`[page-agent-sdk][setLlm] 新模型上下文窗口 ${m.contextWindow} 小于最小支持 ${p}(需 ≥200K 窗口模型)`);
14959
- X.agent && (X.agent.setLlm(n), X.agent.setModelCaps?.(m)), Rt?.setContextWindow?.(m.contextWindow), wt?.setContextWindow?.(m.contextWindow), X.infoTick.value++, e.debug && console.log("[page-agent-sdk][setLlm] 重解析 modelCaps + 回灌:", m);
15279
+ X.agent && (X.agent.setLlm(n), X.agent.setModelCaps?.(m)), zt?.setContextWindow?.(m.contextWindow), Tt?.setContextWindow?.(m.contextWindow), X.infoTick.value++, e.debug && console.log("[page-agent-sdk][setLlm] 重解析 modelCaps + 回灌:", m);
14960
15280
  },
14961
15281
  setMemory(e) {
14962
15282
  se.reset(e), typeof e == "function" && se.refresh(), X.infoTick.value++;
@@ -14965,29 +15285,29 @@ function Xg(e, n) {
14965
15285
  return se.refresh();
14966
15286
  },
14967
15287
  setSubagents(t) {
14968
- if (!yt) {
15288
+ if (!bt) {
14969
15289
  e.debug && console.warn("[page-agent-sdk][setSubagents] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略");
14970
15290
  return;
14971
15291
  }
14972
- yt.set(t), X.infoTick.value++;
15292
+ bt.set(t), X.infoTick.value++;
14973
15293
  },
14974
15294
  addSubagent(t) {
14975
- if (!yt) {
15295
+ if (!bt) {
14976
15296
  e.debug && console.warn("[page-agent-sdk][addSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略");
14977
15297
  return;
14978
15298
  }
14979
- yt.add(t), X.infoTick.value++;
15299
+ bt.add(t), X.infoTick.value++;
14980
15300
  },
14981
15301
  removeSubagent(t) {
14982
- if (!yt) return e.debug && console.warn("[page-agent-sdk][removeSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略"), !1;
14983
- let n = yt.remove(t);
15302
+ if (!bt) return e.debug && console.warn("[page-agent-sdk][removeSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略"), !1;
15303
+ let n = bt.remove(t);
14984
15304
  return n && X.infoTick.value++, n;
14985
15305
  },
14986
15306
  getActiveSubagents() {
14987
- return nt?.getActive() ?? [];
15307
+ return rt?.getActive() ?? [];
14988
15308
  },
14989
15309
  get subagentHistory() {
14990
- return nt?.getHistory() ?? [];
15310
+ return rt?.getHistory() ?? [];
14991
15311
  },
14992
15312
  getInfo() {
14993
15313
  return {
@@ -14995,13 +15315,13 @@ function Xg(e, n) {
14995
15315
  sessionId: X.sessionId,
14996
15316
  model: dp(S) ? S.model ?? S.modelName : S.model,
14997
15317
  systemPrompt: X.agent?.getEffectiveSystemPrompt?.() ?? _e + Zu(W(), e.schemaHint),
14998
- tools: (X.agent?.allTools ?? K).map((e) => ({
15318
+ tools: (X.agent?.allTools ?? q).map((e) => ({
14999
15319
  name: e.name,
15000
15320
  description: e.description,
15001
15321
  schema: e.schema,
15002
15322
  source: G.get(e.name) || "user"
15003
15323
  })),
15004
- skills: (At ? At.controller.get() : e.skills ?? []).map((e) => ({
15324
+ skills: (jt ? jt.controller.get() : e.skills ?? []).map((e) => ({
15005
15325
  name: e.name,
15006
15326
  description: e.description
15007
15327
  })),
@@ -15019,7 +15339,7 @@ function Xg(e, n) {
15019
15339
  staleReadsInvalidated: X.agent?.getStaleReadsInvalidated?.() ?? 0,
15020
15340
  llmRetries: X.agent?.getLlmRetries?.() ?? 0,
15021
15341
  llmCallFailures: X.agent?.getLlmCallFailures?.() ?? 0,
15022
- middleware: Y.map((e) => e.name),
15342
+ middleware: Bt.map((e) => e.name),
15023
15343
  todos: (X.agent?.getState?.()?.todos ?? []).map((e) => ({
15024
15344
  id: e.id,
15025
15345
  content: e.content,
@@ -15033,27 +15353,27 @@ function Xg(e, n) {
15033
15353
  mission: Ye ? D.getMission() : void 0,
15034
15354
  planConfirmation: te.lastPlanConfirmation,
15035
15355
  workingMemory: Xe ? j.getWorkingMemory() : void 0,
15036
- focus: ze ? A.getFocus() : void 0,
15037
- focuses: ze ? A.getFocuses() : [],
15038
- actions: Tg(e.actions ?? {}),
15356
+ focus: K ? A.getFocus() : void 0,
15357
+ focuses: K ? A.getFocuses() : [],
15358
+ actions: Rg(e.actions ?? {}),
15039
15359
  subagent: {
15040
- enabled: !!pt,
15360
+ enabled: !!mt,
15041
15361
  maxDepth: e.subagent?.maxDepth ?? 1,
15042
15362
  maxParallel: e.subagent?.maxParallel ?? 4,
15043
15363
  timeoutMs: e.subagent?.timeoutMs === void 0 ? 18e5 : e.subagent.timeoutMs > 0 ? e.subagent.timeoutMs : 0,
15044
15364
  allowedTools: e.subagent?.allowedTools ?? [],
15045
- subagents: (yt?.get() ?? []).map(bt),
15046
- active: nt?.getActive() ?? [],
15047
- history: nt?.getHistory() ?? [],
15048
- lockedComponents: ht?.locked() ?? {}
15365
+ subagents: (bt?.get() ?? []).map(xt),
15366
+ active: rt?.getActive() ?? [],
15367
+ history: rt?.getHistory() ?? [],
15368
+ lockedComponents: gt?.locked() ?? {}
15049
15369
  },
15050
15370
  verify: {
15051
- enabled: !!Ct,
15052
- maxAttempts: ot ? rt : 0,
15053
- adversarial: ot && !!e.verify?.adversarial
15371
+ enabled: !!wt,
15372
+ maxAttempts: st ? it : 0,
15373
+ adversarial: st && !!e.verify?.adversarial
15054
15374
  },
15055
15375
  context: (() => {
15056
- let e = wt?.getSnapshot();
15376
+ let e = Tt?.getSnapshot();
15057
15377
  if (e) {
15058
15378
  let t = X.agent?.getState?.()?.lastCompression;
15059
15379
  t && (e.compression = t);
@@ -15116,40 +15436,40 @@ function Xg(e, n) {
15116
15436
  D.setMission(t), X.infoTick.value++;
15117
15437
  },
15118
15438
  getFocus() {
15119
- return ze ? A.getFocus() : void 0;
15439
+ return K ? A.getFocus() : void 0;
15120
15440
  },
15121
15441
  getFocuses() {
15122
- return ze ? A.getFocuses() : [];
15442
+ return K ? A.getFocuses() : [];
15123
15443
  },
15124
15444
  setFocus(t) {
15125
- let n = Yg(t, "setFocus", ze, () => W()?.schema, e.debug);
15445
+ let n = c_(t, "setFocus", K, () => W()?.schema, e.debug);
15126
15446
  return n.ok ? (A.setFocus(oe(t)), e.debug && A.isInvokeActive() && console.info("[page-agent-sdk][focus] 在途流程进行中,聚焦将在下一次输入生效(当前流程不受影响)"), X.infoTick.value++, { ok: !0 }) : n;
15127
15447
  },
15128
15448
  addFocus(t) {
15129
- let n = Yg(t, "addFocus", ze, () => W()?.schema, e.debug);
15449
+ let n = c_(t, "addFocus", K, () => W()?.schema, e.debug);
15130
15450
  return n.ok ? A.getFocuses().length >= 8 ? (e.debug && console.warn("[page-agent-sdk][focus] addFocus 拒绝:焦点数已达上限 8(augmentPrompt 注入每焦点子树 schema,过多致 system prompt 超预算)"), {
15131
15451
  ok: !1,
15132
15452
  error: "焦点数上限 8(避免 system prompt 撑爆)"
15133
15453
  }) : (A.addFocus(oe(t)), e.debug && A.isInvokeActive() && console.info("[page-agent-sdk][focus] 在途流程进行中,聚焦将在下一次输入生效(当前流程不受影响)"), X.infoTick.value++, { ok: !0 }) : n;
15134
15454
  },
15135
15455
  removeFocus(e) {
15136
- ze && (A.removeFocus(e), X.infoTick.value++);
15456
+ K && (A.removeFocus(e), X.infoTick.value++);
15137
15457
  },
15138
15458
  clearFocus() {
15139
- ze && (A.clearFocus(), X.infoTick.value++);
15459
+ K && (A.clearFocus(), X.infoTick.value++);
15140
15460
  },
15141
15461
  setQuote(e, t) {
15142
15462
  let n = Ni(e ?? "");
15143
- Yt.value = n ? {
15463
+ Xt.value = n ? {
15144
15464
  text: n,
15145
15465
  ...t ? { source: t } : {}
15146
15466
  } : null;
15147
15467
  },
15148
15468
  clearQuote() {
15149
- Yt.value = null;
15469
+ Xt.value = null;
15150
15470
  }
15151
15471
  };
15152
- async function Xt() {
15472
+ async function Zt() {
15153
15473
  if (!c) return;
15154
15474
  let t = async (e) => {
15155
15475
  try {
@@ -15203,25 +15523,25 @@ function Xg(e, n) {
15203
15523
  }), e.debug && console.log("[page-agent-sdk][restore] 恢复会话", X.sessionId, `${n.messages?.length ?? 0} msgs`)) : e.debug && console.log("[page-agent-sdk][restore] 会话 meta 存在但快照为空", X.sessionId);
15204
15524
  } else X.sessionId = await c.createSession(n, a.title), e.debug && console.log("[page-agent-sdk][restore] 新建会话(无历史)", X.sessionId);
15205
15525
  } else X.sessionId = await c.createSession(n, a.title);
15206
- e.memory && nn.persistSave({ memory: se.get() || (typeof e.memory == "string" ? e.memory : "") }), nn.refreshSessions();
15526
+ e.memory && rn.persistSave({ memory: se.get() || (typeof e.memory == "string" ? e.memory : "") }), rn.refreshSessions();
15207
15527
  }
15208
- async function Zt() {
15209
- await Lt();
15528
+ async function Qt() {
15529
+ await Rt();
15210
15530
  }
15211
- function Qt(e) {
15531
+ function $t(e) {
15212
15532
  let t = {};
15213
- for (let n of Vg(e)) {
15533
+ for (let n of e_(e)) {
15214
15534
  let e = w.files[n];
15215
15535
  e && (t[n] = e.content);
15216
15536
  }
15217
15537
  return t;
15218
15538
  }
15219
- function $t() {
15220
- let e = Hg(w.files, Vg(C));
15539
+ function en() {
15540
+ let e = t_(w.files, e_(C));
15221
15541
  for (let t of e) delete w.files[t];
15222
15542
  }
15223
- function en() {
15224
- let e = nl(C, Bt);
15543
+ function tn() {
15544
+ let e = nl(C, Vt);
15225
15545
  if (!e.trimmed) return;
15226
15546
  let { older: t, summary: n } = e;
15227
15547
  if (J({
@@ -15232,33 +15552,33 @@ function Xg(e, n) {
15232
15552
  assistant: e.assistantMsgs.map((e) => e.content),
15233
15553
  steps: e.assistantMsgs.flatMap((e) => e.steps ?? [])
15234
15554
  })),
15235
- vfsResults: Qt(t.flatMap((e) => [e.userMsg, ...e.assistantMsgs])),
15555
+ vfsResults: $t(t.flatMap((e) => [e.userMsg, ...e.assistantMsgs])),
15236
15556
  summary: n.content,
15237
15557
  reason: "max_memory_rounds"
15238
- }), C.splice(e.deleteFrom, e.deleteCount, n), $t(), y && u) {
15558
+ }), C.splice(e.deleteFrom, e.deleteCount, n), en(), y && u) {
15239
15559
  let n = e.summary, { prevSeg: r } = e;
15240
15560
  (async () => {
15241
15561
  try {
15242
15562
  let e = await u(ll(t, x)), i = C.indexOf(n);
15243
15563
  if (i < 0) return;
15244
- C[i].content = tl(t, r, e), nn.persistRuntime();
15564
+ C[i].content = tl(t, r, e), rn.persistRuntime();
15245
15565
  } catch {}
15246
15566
  })();
15247
15567
  }
15248
15568
  }
15249
- let tn = ki({
15569
+ let nn = ki({
15250
15570
  getConfig: () => e.images,
15251
15571
  getVision: () => m.vision === !0,
15252
15572
  emit: J,
15253
15573
  getVfsStore: () => X.vfsStore,
15254
- noteFailure: (e, t) => nn.notePersistFailure(e, t)
15255
- }), nn = um({
15574
+ noteFailure: (e, t) => rn.notePersistFailure(e, t)
15575
+ }), rn = um({
15256
15576
  agentId: n,
15257
15577
  options: e,
15258
15578
  emit: J,
15259
15579
  getStore: () => c,
15260
15580
  core: X,
15261
- sessionsRef: Ht,
15581
+ sessionsRef: Ut,
15262
15582
  sessionVars: te,
15263
15583
  messages: C,
15264
15584
  getUsage: () => r,
@@ -15268,24 +15588,24 @@ function Xg(e, n) {
15268
15588
  missionMw: D,
15269
15589
  workingMemoryMw: j,
15270
15590
  focusMw: A,
15271
- summarizationMw: Rt,
15591
+ summarizationMw: zt,
15272
15592
  resumeNoticeMw: ee,
15273
15593
  useMission: Ye,
15274
15594
  useWorkingMemory: Xe,
15275
- useFocus: ze,
15595
+ useFocus: K,
15276
15596
  useAutomation: H
15277
15597
  },
15278
15598
  vfsStore: w,
15279
15599
  checkpointMgr: B,
15280
15600
  conflictResolve: (e) => a.resolve(e),
15281
- abortAllActive: qt,
15601
+ abortAllActive: Yt,
15282
15602
  titleLlmInvoke: d
15283
15603
  });
15284
15604
  return X.initDone = (async () => {
15285
- await Xt(), await Zt(), e.mcp?.length && Hu({
15605
+ await Zt(), await Qt(), e.mcp?.length && Hu({
15286
15606
  servers: e.mcp,
15287
15607
  emit: J,
15288
- isReleased: () => Fe,
15608
+ isReleased: () => Ie,
15289
15609
  core: {
15290
15610
  mcpClosers: X.mcpClosers,
15291
15611
  mcpServers: X.mcpServers,
@@ -15294,15 +15614,15 @@ function Xg(e, n) {
15294
15614
  },
15295
15615
  reservedNames: () => {
15296
15616
  let e = /* @__PURE__ */ new Set();
15297
- for (let t of K) {
15617
+ for (let t of q) {
15298
15618
  let n = G.get(t.name);
15299
15619
  n && !n.startsWith("mcp:") && e.add(t.name);
15300
15620
  }
15301
15621
  return e;
15302
15622
  },
15303
- pushTool: (e, t) => (G.set(e.name, `mcp:${t}`), Pe.push(e), !0),
15623
+ pushTool: (e, t) => (G.set(e.name, `mcp:${t}`), Fe.push(e), !0),
15304
15624
  rebind: () => {
15305
- K = qe(), X.agent && X.agent.setTools(K), X.infoTick.value++;
15625
+ q = qe(), X.agent && X.agent.setTools(q), X.infoTick.value++;
15306
15626
  },
15307
15627
  debug: e.debug
15308
15628
  });
@@ -15310,10 +15630,10 @@ function Xg(e, n) {
15310
15630
  pp(t, { emit: J }), X.agent = ps({
15311
15631
  llm: t,
15312
15632
  systemPrompt: _e,
15313
- tools: K,
15314
- middleware: Y,
15633
+ tools: q,
15634
+ middleware: Bt,
15315
15635
  maxToolRounds: e.maxToolRounds,
15316
- hasSubagent: tt,
15636
+ hasSubagent: nt,
15317
15637
  maxRetries: e.maxRetries,
15318
15638
  stallMs: e.streamStallMs ?? 9e4,
15319
15639
  streamMaxMs: e.streamMaxDurationMs ?? 18e5,
@@ -15323,23 +15643,23 @@ function Xg(e, n) {
15323
15643
  maxOutputTokens: m.maxOutputTokens,
15324
15644
  vision: m.vision,
15325
15645
  imageContentFormat: ke,
15326
- maxVerifyAttempts: ot ? rt : 0,
15646
+ maxVerifyAttempts: st ? it : 0,
15327
15647
  roundTokenBudget: e.roundTokenBudget ?? 0,
15328
15648
  staleReadInvalidation: e.staleReadInvalidation,
15329
15649
  onLlmChange: (e) => {
15330
15650
  S = e;
15331
15651
  },
15332
15652
  debug: e.debug
15333
- }), M.current = X.agent, vt && vt.setReconfigureHook(() => {
15653
+ }), M.current = X.agent, yt && yt.setReconfigureHook(() => {
15334
15654
  X.agent && X.agent.setTools(qe());
15335
15655
  });
15336
15656
  })(), X;
15337
15657
  }
15338
- function Zg(e, t) {
15658
+ function u_(e, t) {
15339
15659
  let n = e.id ?? wp();
15340
15660
  e.id || console.warn(`[page-agent-sdk] 未传 options.id,已生成随机 id "${n}"。刷新后持久化数据无法恢复,请传稳定 id。`);
15341
- let r = e.streaming ?? !0, i = e.ui ?? "default", a, o = e.shareContext ? Gg.get(n) : void 0;
15342
- o ? a = o : (a = Xg(e, n), e.shareContext && Gg.set(n, a)), a.refCount++;
15661
+ let r = e.streaming ?? !0, i = e.ui ?? "default", a, o = e.shareContext ? i_.get(n) : void 0;
15662
+ o ? a = o : (a = l_(e, n), e.shareContext && i_.set(n, a)), a.refCount++;
15343
15663
  let s = null, c = $p(e), l = null, u = null;
15344
15664
  async function d(n) {
15345
15665
  if (await a.initDone, s) {
@@ -15571,7 +15891,7 @@ function Zg(e, t) {
15571
15891
  }
15572
15892
  //#endregion
15573
15893
  //#region src/core/sdk/ragSubagent.ts
15574
- function Qg(e, t, n, r, i) {
15894
+ function d_(e, t, n, r, i) {
15575
15895
  let a = [];
15576
15896
  e && a.push("vfs_grep + vfs_read(搜预注入文档)"), t && a.push(`${r}(语义检索)`), n && a.push(`${i}(按 source 加载)`), a.push("fetch_document(公网 URL)");
15577
15897
  let o = [];
@@ -15586,7 +15906,7 @@ function Qg(e, t, n, r, i) {
15586
15906
 
15587
15907
  你是只读检索角色,不要尝试修改任何数据。不要尝试上面未列出的工具。`;
15588
15908
  }
15589
- function $g(e, t, n, r, i) {
15909
+ function f_(e, t, n, r, i) {
15590
15910
  let a = [], o = [];
15591
15911
  return e && (a.push("- vfs_grep / vfs_read:搜集成方预注入 vfs 的文档(组件文档 / UI 规范)—— 快、静态,先查"), o.push("- 静态文档(组件库文档 / UI 规范):vfs_grep")), t && (a.push(`- ${r}:语义检索(retriever 向量库)—— 模糊匹配,关键词不确定 / 语义相似时用`), o.push(`- 语义相似(「瀑布流组件」「倒计时」「拼团」):${r}`)), n && (a.push(`- ${i}:按 source 精确加载(已知文档 id / URL / key)—— 精确取特定文档`), o.push(`- 已知文档 id / URL:${i}`)), a.push("- fetch_document:公网 URL —— 查公开资料"), o.push("- 公开 URL(设计规范网站 / 第三方文档):fetch_document"), `# 知识检索策略(RAG)
15592
15912
 
@@ -15603,12 +15923,12 @@ ${a.join("\n")}
15603
15923
  ## 何时用何源
15604
15924
  ${o.join("\n")}`;
15605
15925
  }
15606
- var e_ = {
15926
+ var p_ = {
15607
15927
  name: "rag-search",
15608
15928
  description: "多源知识检索策略:vfs 预注入文档 → 语义检索 → 指定文档加载 → 公网;综合结构化结论 + 溯源",
15609
- getContent: () => $g(!0, !0, !0, "search_docs", "load_doc")
15929
+ getContent: () => f_(!0, !0, !0, "search_docs", "load_doc")
15610
15930
  };
15611
- function t_(e, n, r) {
15931
+ function m_(e, n, r) {
15612
15932
  let i = s(async ({ query: e, topK: t }) => {
15613
15933
  try {
15614
15934
  let i = await n(e, { topK: t ?? r });
@@ -15626,7 +15946,7 @@ function t_(e, n, r) {
15626
15946
  });
15627
15947
  return qi([i]), i;
15628
15948
  }
15629
- function n_(e, n) {
15949
+ function h_(e, n) {
15630
15950
  let r = s(async ({ source: e }) => {
15631
15951
  try {
15632
15952
  let t = await n(e), r = Array.isArray(t) ? t : [t];
@@ -15641,19 +15961,19 @@ function n_(e, n) {
15641
15961
  });
15642
15962
  return qi([r]), r;
15643
15963
  }
15644
- function r_(e) {
15964
+ function g_(e) {
15645
15965
  let { retriever: t, loader: n, useVfs: r = !0, id: i = "rag", description: a, topK: o = 5, searchToolName: s = "search_docs", loadToolName: c = "load_doc", maxToolRounds: l = 8, summarization: u, skills: d, extraTools: f } = e;
15646
15966
  if (!t && !n && r === !1) throw Error("[page-agent-sdk][createRagSubagent] 至少配一种知识源:retriever / loader / useVfs(true)");
15647
15967
  let p = [];
15648
- t && p.push(t_(s, t, o)), n && p.push(n_(c, n)), f && p.push(...f);
15968
+ t && p.push(m_(s, t, o)), n && p.push(h_(c, n)), f && p.push(...f);
15649
15969
  let m = r ? [
15650
15970
  "vfs_grep",
15651
15971
  "vfs_read",
15652
15972
  "vfs_json_read"
15653
- ] : void 0, h = Qg(r, !!t, !!n, s, c), g = {
15973
+ ] : void 0, h = d_(r, !!t, !!n, s, c), g = {
15654
15974
  name: "rag-search",
15655
- description: e_.description,
15656
- getContent: () => $g(r, !!t, !!n, s, c)
15975
+ description: p_.description,
15976
+ getContent: () => f_(r, !!t, !!n, s, c)
15657
15977
  };
15658
15978
  return {
15659
15979
  id: i,
@@ -15668,7 +15988,7 @@ function r_(e) {
15668
15988
  }
15669
15989
  //#endregion
15670
15990
  //#region src/core/sdk/evalToolkit.ts
15671
- function i_(e = {}) {
15991
+ function __(e = {}) {
15672
15992
  let t = e.quietMs ?? 9e4, n = e.confirmSamples ?? 3, r = e.baselineMessageCount ?? 0, i = 0;
15673
15993
  return {
15674
15994
  push(e) {
@@ -15679,12 +15999,12 @@ function i_(e = {}) {
15679
15999
  }
15680
16000
  };
15681
16001
  }
15682
- var a_ = /* @__PURE__ */ new Set(["elapsedSec"]);
15683
- function o_(e, t, n = {}) {
16002
+ var v_ = /* @__PURE__ */ new Set(["elapsedSec"]);
16003
+ function y_(e, t, n = {}) {
15684
16004
  let r = n.tokenAbs ?? 2e3, i = n.tokenPct ?? 15, a = n.toolCountAbs ?? 3, o = [], s = 0, c = 0, l = 0, u = /* @__PURE__ */ new Set([...Object.keys(e ?? {}), ...Object.keys(t ?? {})]);
15685
16005
  for (let n of u) {
15686
16006
  let u = Number(e?.[n] ?? 0), d = Number(t?.[n] ?? 0), f = u - d, p = d > 0 ? Math.round(f / d * 100) : 0, m = "";
15687
- a_.has(n) || (n === "toolCount" ? Math.abs(f) > a : Math.abs(f) > r && Math.abs(p) >= i) && (m = f > 0 ? "up" : "down", m === "up" ? (s++, c++) : l++), o.push({
16007
+ v_.has(n) || (n === "toolCount" ? Math.abs(f) > a : Math.abs(f) > r && Math.abs(p) >= i) && (m = f > 0 ? "up" : "down", m === "up" ? (s++, c++) : l++), o.push({
15688
16008
  key: n,
15689
16009
  prev: d,
15690
16010
  cur: u,
@@ -15699,7 +16019,7 @@ function o_(e, t, n = {}) {
15699
16019
  fields: o
15700
16020
  };
15701
16021
  }
15702
- function s_(e) {
16022
+ function b_(e) {
15703
16023
  let { sdk: t } = e, n = () => {
15704
16024
  let e = t.debugLogs.value ?? [], n = e.length ? e[e.length - 1].timestamp : 0;
15705
16025
  return {
@@ -15712,7 +16032,7 @@ function s_(e) {
15712
16032
  };
15713
16033
  return {
15714
16034
  async waitForIdle(e = {}) {
15715
- let { timeoutMs: r = 6e5, sampleMs: i = 2500, onSample: a, ...o } = e, s = i_(o), c = Date.now();
16035
+ let { timeoutMs: r = 6e5, sampleMs: i = 2500, onSample: a, ...o } = e, s = __(o), c = Date.now();
15716
16036
  for (;;) {
15717
16037
  let e = n(), o = s.push(e);
15718
16038
  if (a?.(e), o === "done") return e;
@@ -15742,7 +16062,7 @@ function s_(e) {
15742
16062
  }
15743
16063
  //#endregion
15744
16064
  //#region src/core/utils/clipboard.ts
15745
- async function c_(e) {
16065
+ async function x_(e) {
15746
16066
  try {
15747
16067
  let t = globalThis.navigator?.clipboard;
15748
16068
  if (t && typeof t.writeText == "function") return await t.writeText(e), !0;
@@ -15760,8 +16080,8 @@ async function c_(e) {
15760
16080
  }
15761
16081
  //#endregion
15762
16082
  //#region src/core/composables/useChat.ts
15763
- var l_ = 4e3;
15764
- function u_(e = {}) {
16083
+ var S_ = 4e3;
16084
+ function C_(e = {}) {
15765
16085
  let { fetchResponse: t, fetchStream: n, onPersist: r, onClear: i, onQueuedCleared: a, onBeforeRegenerate: o } = e, s = /* @__PURE__ */ Mt({
15766
16086
  messages: e.messages ?? [],
15767
16087
  loading: !1,
@@ -15842,7 +16162,7 @@ function u_(e = {}) {
15842
16162
  let t = e.delta || "";
15843
16163
  n.subReasonFull = (n.subReasonFull || "") + t;
15844
16164
  let r = (n.subReason || "") + t;
15845
- n.subReason = r.length > l_ ? r.slice(-4e3) : r;
16165
+ n.subReason = r.length > S_ ? r.slice(-4e3) : r;
15846
16166
  break;
15847
16167
  }
15848
16168
  n.children ||= [];
@@ -15973,7 +16293,7 @@ function u_(e = {}) {
15973
16293
  }
15974
16294
  //#endregion
15975
16295
  //#region src/core/components/icons.ts
15976
- var d_ = {
16296
+ var w_ = {
15977
16297
  header: "🤖",
15978
16298
  subagent: "🤖",
15979
16299
  subagentProgress: "🧬",
@@ -15984,10 +16304,10 @@ var d_ = {
15984
16304
  recommend: "💡",
15985
16305
  conflict: "⚠️"
15986
16306
  };
15987
- function f_(e) {
15988
- let t = { ...d_ };
16307
+ function T_(e) {
16308
+ let t = { ...w_ };
15989
16309
  if (!e) return t;
15990
- let n = Object.keys(d_);
16310
+ let n = Object.keys(w_);
15991
16311
  for (let r of n) {
15992
16312
  let n = e[r];
15993
16313
  typeof n == "string" && (t[r] = n);
@@ -15996,7 +16316,7 @@ function f_(e) {
15996
16316
  }
15997
16317
  //#endregion
15998
16318
  //#region src/core/components/messages.ts
15999
- var p_ = {
16319
+ var E_ = {
16000
16320
  defaultTitle: "AI 助手",
16001
16321
  inputPlaceholder: "输入消息,Enter 发送...",
16002
16322
  newSession: "新建会话",
@@ -16228,8 +16548,8 @@ var p_ = {
16228
16548
  codeDemoText: "这是一段示例文字,用于展示 CSS 效果。",
16229
16549
  codeDemoButton: "按钮",
16230
16550
  codeDemoInput: "输入框"
16231
- }, m_ = {
16232
- "zh-CN": p_,
16551
+ }, D_ = {
16552
+ "zh-CN": E_,
16233
16553
  "en-US": {
16234
16554
  defaultTitle: "AI Assistant",
16235
16555
  inputPlaceholder: "Type a message, Enter to send...",
@@ -16464,10 +16784,10 @@ var p_ = {
16464
16784
  codeDemoInput: "Input"
16465
16785
  }
16466
16786
  };
16467
- function h_(e = "zh-CN", t) {
16787
+ function O_(e = "zh-CN", t) {
16468
16788
  let n = {
16469
- ...p_,
16470
- ...m_[e]
16789
+ ...E_,
16790
+ ...D_[e]
16471
16791
  };
16472
16792
  if (!t) return n;
16473
16793
  let r = { ...n };
@@ -16479,9 +16799,9 @@ function h_(e = "zh-CN", t) {
16479
16799
  }
16480
16800
  //#endregion
16481
16801
  //#region src/core/composables/chatContext.ts
16482
- var g_ = Symbol("chatContext");
16483
- function __(e = {}) {
16484
- let t = u_({
16802
+ var k_ = Symbol("chatContext");
16803
+ function A_(e = {}) {
16804
+ let t = C_({
16485
16805
  fetchResponse: e.fetchResponse,
16486
16806
  fetchStream: e.fetchStream,
16487
16807
  messages: e.messages,
@@ -16503,7 +16823,7 @@ function __(e = {}) {
16503
16823
  }, h = /* @__PURE__ */ Wt({}), g = (e) => h.value[e] === !0, _ = (e) => {
16504
16824
  h.value[e] = !g(e);
16505
16825
  }, v = /* @__PURE__ */ Wt(!1), y = (e) => {
16506
- c_(e).then((e) => {
16826
+ x_(e).then((e) => {
16507
16827
  e && (v.value = !0, setTimeout(() => {
16508
16828
  v.value = !1;
16509
16829
  }, 1500));
@@ -16569,7 +16889,7 @@ function __(e = {}) {
16569
16889
  e.onClearFocus?.();
16570
16890
  }, P = (t) => {
16571
16891
  e.onFocusChipClick?.(t);
16572
- }, F = f_(e.icons), le = e.locale ?? "zh-CN", I = h_(le, e.dialogMessages);
16892
+ }, F = T_(e.icons), le = e.locale ?? "zh-CN", I = O_(le, e.dialogMessages);
16573
16893
  return {
16574
16894
  chat: t,
16575
16895
  inputText: o,
@@ -16614,15 +16934,15 @@ function __(e = {}) {
16614
16934
  toolStepView: e.toolStepView
16615
16935
  };
16616
16936
  }
16617
- function v_() {
16618
- let e = Zn(g_);
16937
+ function j_() {
16938
+ let e = Zn(k_);
16619
16939
  if (!e) throw Error("useChatContext 必须在 provide(chatContextKey) 的组件子树内调用");
16620
16940
  return e;
16621
16941
  }
16622
16942
  //#endregion
16623
16943
  //#region src/core/index.headless.ts
16624
- function y_(e) {
16625
- return Zg(e);
16944
+ function M_(e) {
16945
+ return u_(e);
16626
16946
  }
16627
16947
  //#endregion
16628
- export { em as CAPABILITIES, rm as CONTEXT_PRESETS, cp as CompressDecisionSchema, $h as DEFAULT_COMPUTED_STYLES, fl as DEFAULT_PROMPT_SOFT_CAP, Uu as DEFAULT_SYSTEM_PROMPT, Wu as DEFAULT_SYSTEM_PROMPT_EN, Xd as HTML_VOID_TAGS, nu as HUMAN_CONFIRM_TOOL_NAME, hi as ImageInputError, g as LOW_CAPS_HINT_BASELINE, p as MIN_CONTEXT_WINDOW, ua as MODEL_UNAVAILABLE_GUIDANCE, dl as SOFT_CAP_MIN_WINDOW, rl as STOP_WORDS, ic as UNSAFE_KEYS, Tg as actionsToInspectInfo, wg as actionsToTools, di as agentError, Fu as analyzeContext, _c as applyPatchToClone, bc as applyPatchToLive, Rd as applyPatchesToBind, Cs as arrayMinLength, ui as asAgentError, Hf as buildCollectorJs, ig as buildCssPath, Zu as buildDataPrompt, Pf as buildDiagnosticsReport, Qf as buildHtmlFragmentSkill, Uf as buildSandboxSrcdoc, Qu as buildSystemPrompt, Bi as captureSelectionQuote, g_ as chatContextKey, Ld as commitSetToBind, Yf as composeStructureThenRender, Ei as compressImage, Vu as connectMcp, k as constructLlmFromConfig, E as constructOpenLlmSync, c_ as copyText, ps as createAgent, tu as createApprovalMiddleware, __ as createChatContext, y_ as createChatSdk, pu as createCheckpointManager, mu as createCheckpointMiddleware, Cp as createConflictManager, Iu as createContextInspectorMiddleware, np as createCraftNoteCheck, Yd as createDataOps, s_ as createEvalHarness, ep as createHtmlFormatCheck, Jf as createHtmlRenderCheck, ip as createHtmlSubagent, au as createHumanConfirmMiddleware, iu as createHumanConfirmTool, i_ as createIdleDetector, Gp as createMemoryBackend, Jl as createMemoryMiddleware, u as createProxyLlm, r_ as createRagSubagent, ga as createSandboxRunner, nm as createSdkEvents, Ug as createSerialRunner, Yp as createSessionStore, Xp as createSessionStoreWithBackend, zg as createSkillStore, zl as createSubagentMiddleware, yl as createSubagentTracker, Hl as createSubagentsMiddleware, jg as createUsageHintsMiddleware, gu as createVerifyMiddleware, nd as createVfs, qp as createWebStorageBackend, Su as createWriteBackCheck, da as decorateModelUnavailable, lc as deepClone, Og as defineDataToolset, Nc as defineSkill, ap as defineTool, cc as deleteByPath, lp as deriveTitle, Ls as describeSchemaNode, Xo as detectGarbledToolCall, mo as detectTransitionalReply, wc as diffObjects, o_ as diffReport, lg as domInfoTool, mg as domInspectSkill, cg as domSearchTool, Wh as domToStructure, Qh as domTools, Dg as domToolsStatic, ws as elementSchemaCandidates, ng as ensureDomListenerRecorder, al as estimateMessageTokens, cl as estimateRoundTokens, y as estimateTokens, te as extractReasoningDelta, Xs as extractSchemaHint, Lu as extractText, ee as extractTextDelta, ne as extractUsage, Bh as fetchDocTools, Eg as fetchTools, Cc as findStrippedKeys, Rs as formatConstraints, oi as formatZodIssues, Q as getByPath, Gh as getDomTool, sg as getElementInfo, _g as getEnvSummary, rg as getRecordedListeners, Kf as getSandboxLifecycle, _s as getSchemaAtPath, ms as getSchemaTopKeys, hc as hashValue, $f as htmlFragmentSkill, Gs as htmlOrchestratorPrompt, ll as indexSummarize, bg as inspectEnvTool, xg as inspectTools, dp as isChatModel, ca as isContextLengthError, la as isModelUnavailableError, hs as isPathAllowed, Lp as isQuotaError, ac as isUnsafePath, Ea as jpEval, ci as jsonParseError, pc as limitDepth, _ as lowCapsHint, Mf as maskUrlCredentials, dc as maybeParseValue, Ef as measureWriteScale, yc as moveByPath, T as normalizeBaseUrl, Vf as normalizeRenderResult, ie as normalizeUsage, x as offloadPassThroughChars, b as offloadThresholdChars, Ws as presets, js as projectBySchema, As as projectBySchemaDeep, fc as projectFields, ul as recallRounds, qf as renderInSandbox, zs as renderSchemaHint, Bs as renderSchemaOverview, Us as renderSchemaShallow, tm as resolveCapabilities, am as resolveContextOptions, $p as resolveDialogConfig, Sp as resolveLlm, v as resolveModelCaps, ml as resolvePromptSoftCap, bs as resolveSchemaPath, Qp as resolveStorage, Sc as restoreInPlace, xc as restoreLive, li as routeError, Aa as runSandboxedScript, oc as safeMerge, gg as safeSerialize, $ as safeStringify, Zo as sanitizeGarbledContent, Ss as schemaHasRefinement, ag as searchDom, Oa as searchJson, kg as selectBuiltinTools, sc as setByPath, hl as shouldTriggerCompression, Ff as stringifyDiagnosticsReport, w as stripStainlessFetch, Ks as systemPromptHelpers, h as tableMaxOutputTokens, il as tokenize, Z as toolError, gs as unwrapSchema, u_ as useChat, v_ as useChatContext, xs as validateAtPath, Qd as validateHtmlFormat, Fd as validateRootValueLocally, Id as validateWriteLocally, gc as watchFieldsHash, e as z, si as zodError };
16948
+ export { em as CAPABILITIES, rm as CONTEXT_PRESETS, cp as CompressDecisionSchema, fg as DEFAULT_COMPUTED_STYLES, fl as DEFAULT_PROMPT_SOFT_CAP, Uu as DEFAULT_SYSTEM_PROMPT, Wu as DEFAULT_SYSTEM_PROMPT_EN, Xd as HTML_VOID_TAGS, nu as HUMAN_CONFIRM_TOOL_NAME, hi as ImageInputError, g as LOW_CAPS_HINT_BASELINE, p as MIN_CONTEXT_WINDOW, ua as MODEL_UNAVAILABLE_GUIDANCE, dl as SOFT_CAP_MIN_WINDOW, rl as STOP_WORDS, ic as UNSAFE_KEYS, Rg as actionsToInspectInfo, Lg as actionsToTools, di as agentError, Fu as analyzeContext, _c as applyPatchToClone, bc as applyPatchToLive, Rd as applyPatchesToBind, Cs as arrayMinLength, ui as asAgentError, Hf as buildCollectorJs, _g as buildCssPath, Zu as buildDataPrompt, Pf as buildDiagnosticsReport, Qf as buildHtmlFragmentSkill, Uf as buildSandboxSrcdoc, Qu as buildSystemPrompt, Bi as captureSelectionQuote, k_ as chatContextKey, Ld as commitSetToBind, Yf as composeStructureThenRender, Ei as compressImage, Vu as connectMcp, k as constructLlmFromConfig, E as constructOpenLlmSync, x_ as copyText, ps as createAgent, tu as createApprovalMiddleware, A_ as createChatContext, M_ as createChatSdk, pu as createCheckpointManager, mu as createCheckpointMiddleware, Cp as createConflictManager, Iu as createContextInspectorMiddleware, np as createCraftNoteCheck, Yd as createDataOps, b_ as createEvalHarness, ep as createHtmlFormatCheck, Jf as createHtmlRenderCheck, ip as createHtmlSubagent, au as createHumanConfirmMiddleware, iu as createHumanConfirmTool, __ as createIdleDetector, Gp as createMemoryBackend, Jl as createMemoryMiddleware, u as createProxyLlm, g_ as createRagSubagent, ga as createSandboxRunner, nm as createSdkEvents, n_ as createSerialRunner, Yp as createSessionStore, Xp as createSessionStoreWithBackend, Qg as createSkillStore, zl as createSubagentMiddleware, yl as createSubagentTracker, Hl as createSubagentsMiddleware, Wg as createUsageHintsMiddleware, gu as createVerifyMiddleware, nd as createVfs, qp as createWebStorageBackend, Su as createWriteBackCheck, da as decorateModelUnavailable, lc as deepClone, Vg as defineDataToolset, Nc as defineSkill, ap as defineTool, cc as deleteByPath, lp as deriveTitle, Ls as describeSchemaNode, Xo as detectGarbledToolCall, mo as detectTransitionalReply, wc as diffObjects, y_ as diffReport, Sg as domInfoTool, Dg as domInspectSkill, xg as domSearchTool, rg as domToStructure, dg as domTools, Bg as domToolsStatic, ws as elementSchemaCandidates, hg as ensureDomListenerRecorder, al as estimateMessageTokens, cl as estimateRoundTokens, y as estimateTokens, te as extractReasoningDelta, Xs as extractSchemaHint, Lu as extractText, ee as extractTextDelta, ne as extractUsage, $h as fetchDocTools, zg as fetchTools, Cc as findStrippedKeys, Rs as formatConstraints, oi as formatZodIssues, Q as getByPath, ig as getDomTool, bg as getElementInfo, Ag as getEnvSummary, gg as getRecordedListeners, Kf as getSandboxLifecycle, _s as getSchemaAtPath, ms as getSchemaTopKeys, hc as hashValue, $f as htmlFragmentSkill, Gs as htmlOrchestratorPrompt, ll as indexSummarize, Ng as inspectEnvTool, Pg as inspectTools, dp as isChatModel, ca as isContextLengthError, la as isModelUnavailableError, hs as isPathAllowed, Lp as isQuotaError, ac as isUnsafePath, Ea as jpEval, ci as jsonParseError, pc as limitDepth, _ as lowCapsHint, Mf as maskUrlCredentials, dc as maybeParseValue, Ef as measureWriteScale, yc as moveByPath, T as normalizeBaseUrl, Vf as normalizeRenderResult, ie as normalizeUsage, x as offloadPassThroughChars, b as offloadThresholdChars, Ws as presets, js as projectBySchema, As as projectBySchemaDeep, fc as projectFields, ul as recallRounds, qf as renderInSandbox, zs as renderSchemaHint, Bs as renderSchemaOverview, Us as renderSchemaShallow, tm as resolveCapabilities, am as resolveContextOptions, $p as resolveDialogConfig, Sp as resolveLlm, v as resolveModelCaps, ml as resolvePromptSoftCap, bs as resolveSchemaPath, Qp as resolveStorage, Sc as restoreInPlace, xc as restoreLive, li as routeError, Aa as runSandboxedScript, oc as safeMerge, kg as safeSerialize, $ as safeStringify, Zo as sanitizeGarbledContent, Ss as schemaHasRefinement, vg as searchDom, Oa as searchJson, Hg as selectBuiltinTools, sc as setByPath, hl as shouldTriggerCompression, Ff as stringifyDiagnosticsReport, w as stripStainlessFetch, Ks as systemPromptHelpers, h as tableMaxOutputTokens, il as tokenize, Z as toolError, gs as unwrapSchema, C_ as useChat, j_ as useChatContext, xs as validateAtPath, Qd as validateHtmlFormat, Fd as validateRootValueLocally, Id as validateWriteLocally, gc as watchFieldsHash, e as z, si as zodError };