page-agent-sdk 4.22.0 → 4.23.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -80,7 +80,8 @@ var d = [
80
80
  caps: {
81
81
  contextWindow: 1048576,
82
82
  maxOutputTokens: 393216,
83
- thinking: !0
83
+ thinking: !0,
84
+ vision: !0
84
85
  }
85
86
  },
86
87
  {
@@ -734,7 +735,7 @@ function Ye(e) {
734
735
  }
735
736
  }
736
737
  var Xe = /* @__PURE__ */ new WeakMap(), Ze = /* @__PURE__ */ Symbol(process.env.NODE_ENV === "production" ? "" : "Object iterate"), Qe = /* @__PURE__ */ Symbol(process.env.NODE_ENV === "production" ? "" : "Map keys iterate"), $e = /* @__PURE__ */ Symbol(process.env.NODE_ENV === "production" ? "" : "Array iterate");
737
- function G(e, t, n) {
738
+ function et(e, t, n) {
738
739
  if (Ve && W) {
739
740
  let r = Xe.get(e);
740
741
  r || Xe.set(e, r = /* @__PURE__ */ new Map());
@@ -746,7 +747,7 @@ function G(e, t, n) {
746
747
  });
747
748
  }
748
749
  }
749
- function et(e, t, n, r, i, a) {
750
+ function tt(e, t, n, r, i, a) {
750
751
  let o = Xe.get(e);
751
752
  if (!o) {
752
753
  Ke++;
@@ -784,151 +785,151 @@ function et(e, t, n, r, i, a) {
784
785
  }
785
786
  Pe();
786
787
  }
787
- function tt(e) {
788
+ function nt(e) {
788
789
  let t = /* @__PURE__ */ q(e);
789
- return t === e ? t : (G(t, "iterate", $e), /* @__PURE__ */ Bt(e) ? t : t.map(J));
790
+ return t === e ? t : (et(t, "iterate", $e), /* @__PURE__ */ Bt(e) ? t : t.map(Ut));
790
791
  }
791
- function K(e) {
792
- return G(e = /* @__PURE__ */ q(e), "iterate", $e), e;
792
+ function rt(e) {
793
+ return et(e = /* @__PURE__ */ q(e), "iterate", $e), e;
793
794
  }
794
- function nt(e, t) {
795
- return /* @__PURE__ */ zt(e) ? Ut(/* @__PURE__ */ Rt(e) ? J(t) : t) : J(t);
795
+ function G(e, t) {
796
+ return /* @__PURE__ */ zt(e) ? J(/* @__PURE__ */ K(e) ? Ut(t) : t) : Ut(t);
796
797
  }
797
- var rt = {
798
+ var it = {
798
799
  __proto__: null,
799
800
  [Symbol.iterator]() {
800
- return it(this, Symbol.iterator, (e) => nt(this, e));
801
+ return at(this, Symbol.iterator, (e) => G(this, e));
801
802
  },
802
803
  concat(...e) {
803
- return tt(this).concat(...e.map((e) => I(e) ? tt(e) : e));
804
+ return nt(this).concat(...e.map((e) => I(e) ? nt(e) : e));
804
805
  },
805
806
  entries() {
806
- return it(this, "entries", (e) => (e[1] = nt(this, e[1]), e));
807
+ return at(this, "entries", (e) => (e[1] = G(this, e[1]), e));
807
808
  },
808
809
  every(e, t) {
809
- return ot(this, "every", e, t, void 0, arguments);
810
+ return st(this, "every", e, t, void 0, arguments);
810
811
  },
811
812
  filter(e, t) {
812
- return ot(this, "filter", e, t, (e) => e.map((e) => nt(this, e)), arguments);
813
+ return st(this, "filter", e, t, (e) => e.map((e) => G(this, e)), arguments);
813
814
  },
814
815
  find(e, t) {
815
- return ot(this, "find", e, t, (e) => nt(this, e), arguments);
816
+ return st(this, "find", e, t, (e) => G(this, e), arguments);
816
817
  },
817
818
  findIndex(e, t) {
818
- return ot(this, "findIndex", e, t, void 0, arguments);
819
+ return st(this, "findIndex", e, t, void 0, arguments);
819
820
  },
820
821
  findLast(e, t) {
821
- return ot(this, "findLast", e, t, (e) => nt(this, e), arguments);
822
+ return st(this, "findLast", e, t, (e) => G(this, e), arguments);
822
823
  },
823
824
  findLastIndex(e, t) {
824
- return ot(this, "findLastIndex", e, t, void 0, arguments);
825
+ return st(this, "findLastIndex", e, t, void 0, arguments);
825
826
  },
826
827
  forEach(e, t) {
827
- return ot(this, "forEach", e, t, void 0, arguments);
828
+ return st(this, "forEach", e, t, void 0, arguments);
828
829
  },
829
830
  includes(...e) {
830
- return ct(this, "includes", e);
831
+ return lt(this, "includes", e);
831
832
  },
832
833
  indexOf(...e) {
833
- return ct(this, "indexOf", e);
834
+ return lt(this, "indexOf", e);
834
835
  },
835
836
  join(e) {
836
- return tt(this).join(e);
837
+ return nt(this).join(e);
837
838
  },
838
839
  lastIndexOf(...e) {
839
- return ct(this, "lastIndexOf", e);
840
+ return lt(this, "lastIndexOf", e);
840
841
  },
841
842
  map(e, t) {
842
- return ot(this, "map", e, t, void 0, arguments);
843
+ return st(this, "map", e, t, void 0, arguments);
843
844
  },
844
845
  pop() {
845
- return lt(this, "pop");
846
+ return ut(this, "pop");
846
847
  },
847
848
  push(...e) {
848
- return lt(this, "push", e);
849
+ return ut(this, "push", e);
849
850
  },
850
851
  reduce(e, ...t) {
851
- return st(this, "reduce", e, t);
852
+ return ct(this, "reduce", e, t);
852
853
  },
853
854
  reduceRight(e, ...t) {
854
- return st(this, "reduceRight", e, t);
855
+ return ct(this, "reduceRight", e, t);
855
856
  },
856
857
  shift() {
857
- return lt(this, "shift");
858
+ return ut(this, "shift");
858
859
  },
859
860
  some(e, t) {
860
- return ot(this, "some", e, t, void 0, arguments);
861
+ return st(this, "some", e, t, void 0, arguments);
861
862
  },
862
863
  splice(...e) {
863
- return lt(this, "splice", e);
864
+ return ut(this, "splice", e);
864
865
  },
865
866
  toReversed() {
866
- return tt(this).toReversed();
867
+ return nt(this).toReversed();
867
868
  },
868
869
  toSorted(e) {
869
- return tt(this).toSorted(e);
870
+ return nt(this).toSorted(e);
870
871
  },
871
872
  toSpliced(...e) {
872
- return tt(this).toSpliced(...e);
873
+ return nt(this).toSpliced(...e);
873
874
  },
874
875
  unshift(...e) {
875
- return lt(this, "unshift", e);
876
+ return ut(this, "unshift", e);
876
877
  },
877
878
  values() {
878
- return it(this, "values", (e) => nt(this, e));
879
+ return at(this, "values", (e) => G(this, e));
879
880
  }
880
881
  };
881
- function it(e, t, n) {
882
- let r = K(e), i = r[t]();
882
+ function at(e, t, n) {
883
+ let r = rt(e), i = r[t]();
883
884
  return r !== e && !/* @__PURE__ */ Bt(e) && (i._next = i.next, i.next = () => {
884
885
  let e = i._next();
885
886
  return e.done || (e.value = n(e.value)), e;
886
887
  }), i;
887
888
  }
888
- var at = Array.prototype;
889
- function ot(e, t, n, r, i, a) {
890
- let o = K(e), s = o !== e && !/* @__PURE__ */ Bt(e), c = o[t];
891
- if (c !== at[t]) {
889
+ var ot = Array.prototype;
890
+ function st(e, t, n, r, i, a) {
891
+ let o = rt(e), s = o !== e && !/* @__PURE__ */ Bt(e), c = o[t];
892
+ if (c !== ot[t]) {
892
893
  let t = c.apply(e, a);
893
- return s ? J(t) : t;
894
+ return s ? Ut(t) : t;
894
895
  }
895
896
  let l = n;
896
897
  o !== e && (s ? l = function(t, r) {
897
- return n.call(this, nt(e, t), r, e);
898
+ return n.call(this, G(e, t), r, e);
898
899
  } : n.length > 2 && (l = function(t, r) {
899
900
  return n.call(this, t, r, e);
900
901
  }));
901
902
  let u = c.call(o, l, r);
902
903
  return s && i ? i(u) : u;
903
904
  }
904
- function st(e, t, n, r) {
905
- let i = K(e), a = i !== e && !/* @__PURE__ */ Bt(e), o = n, s = !1;
905
+ function ct(e, t, n, r) {
906
+ let i = rt(e), a = i !== e && !/* @__PURE__ */ Bt(e), o = n, s = !1;
906
907
  i !== e && (a ? (s = r.length === 0, o = function(t, r, i) {
907
- return s && (s = !1, t = nt(e, t)), n.call(this, t, nt(e, r), i, e);
908
+ return s && (s = !1, t = G(e, t)), n.call(this, t, G(e, r), i, e);
908
909
  }) : n.length > 3 && (o = function(t, r, i) {
909
910
  return n.call(this, t, r, i, e);
910
911
  }));
911
912
  let c = i[t](o, ...r);
912
- return s ? nt(e, c) : c;
913
+ return s ? G(e, c) : c;
913
914
  }
914
- function ct(e, t, n) {
915
+ function lt(e, t, n) {
915
916
  let r = /* @__PURE__ */ q(e);
916
- G(r, "iterate", $e);
917
+ et(r, "iterate", $e);
917
918
  let i = r[t](...n);
918
919
  return (i === -1 || i === !1) && /* @__PURE__ */ Vt(n[0]) ? (n[0] = /* @__PURE__ */ q(n[0]), r[t](...n)) : i;
919
920
  }
920
- function lt(e, t, n = []) {
921
+ function ut(e, t, n = []) {
921
922
  Ue(), Ne();
922
923
  let r = (/* @__PURE__ */ q(e))[t].apply(e, n);
923
924
  return Pe(), We(), r;
924
925
  }
925
- var ut = /* @__PURE__ */ ae("__proto__,__v_isRef,__isVue"), dt = new Set(/* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((e) => e !== "arguments" && e !== "caller").map((e) => Symbol[e]).filter(ue));
926
- function ft(e) {
926
+ var dt = /* @__PURE__ */ ae("__proto__,__v_isRef,__isVue"), ft = new Set(/* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((e) => e !== "arguments" && e !== "caller").map((e) => Symbol[e]).filter(ue));
927
+ function pt(e) {
927
928
  ue(e) || (e = String(e));
928
929
  let t = /* @__PURE__ */ q(this);
929
- return G(t, "has", e), t.hasOwnProperty(e);
930
+ return et(t, "has", e), t.hasOwnProperty(e);
930
931
  }
931
- var pt = class {
932
+ var mt = class {
932
933
  constructor(e = !1, t = !1) {
933
934
  this._isReadonly = e, this._isShallow = t;
934
935
  }
@@ -938,22 +939,22 @@ var pt = class {
938
939
  if (t === "__v_isReactive") return !r;
939
940
  if (t === "__v_isReadonly") return r;
940
941
  if (t === "__v_isShallow") return i;
941
- if (t === "__v_raw") return n === (r ? i ? Mt : jt : i ? At : kt).get(e) || Object.getPrototypeOf(e) === Object.getPrototypeOf(n) ? e : void 0;
942
+ if (t === "__v_raw") return n === (r ? i ? Nt : Mt : i ? jt : At).get(e) || Object.getPrototypeOf(e) === Object.getPrototypeOf(n) ? e : void 0;
942
943
  let a = I(e);
943
944
  if (!r) {
944
945
  let e;
945
- if (a && (e = rt[t])) return e;
946
- if (t === "hasOwnProperty") return ft;
946
+ if (a && (e = it[t])) return e;
947
+ if (t === "hasOwnProperty") return pt;
947
948
  }
948
949
  let o = Reflect.get(e, t, /* @__PURE__ */ Y(e) ? e : n);
949
- if ((ue(t) ? dt.has(t) : ut(t)) || (r || G(e, "get", t), i)) return o;
950
+ if ((ue(t) ? ft.has(t) : dt(t)) || (r || et(e, "get", t), i)) return o;
950
951
  if (/* @__PURE__ */ Y(o)) {
951
952
  let e = a && B(t) ? o : o.value;
952
- return r && de(e) ? /* @__PURE__ */ Ft(e) : e;
953
+ return r && de(e) ? /* @__PURE__ */ It(e) : e;
953
954
  }
954
- return de(o) ? r ? /* @__PURE__ */ Ft(o) : /* @__PURE__ */ Pt(o) : o;
955
+ return de(o) ? r ? /* @__PURE__ */ It(o) : /* @__PURE__ */ Ft(o) : o;
955
956
  }
956
- }, mt = class extends pt {
957
+ }, ht = class extends mt {
957
958
  constructor(e = !1) {
958
959
  super(!1, e);
959
960
  }
@@ -964,20 +965,20 @@ var pt = class {
964
965
  if (!/* @__PURE__ */ Bt(n) && !/* @__PURE__ */ zt(n) && (i = /* @__PURE__ */ q(i), n = /* @__PURE__ */ q(n)), !a && /* @__PURE__ */ Y(i) && !/* @__PURE__ */ Y(n)) return r ? (process.env.NODE_ENV !== "production" && we(`Set operation on key "${String(t)}" failed: target is readonly.`, e[t]), !0) : (i.value = n, !0);
965
966
  }
966
967
  let o = a ? Number(t) < e.length : F(e, t), s = Reflect.set(e, t, n, /* @__PURE__ */ Y(e) ? e : r);
967
- return e === /* @__PURE__ */ q(r) && s && (o ? _e(n, i) && et(e, "set", t, n, i) : et(e, "add", t, n)), s;
968
+ return e === /* @__PURE__ */ q(r) && s && (o ? _e(n, i) && tt(e, "set", t, n, i) : tt(e, "add", t, n)), s;
968
969
  }
969
970
  deleteProperty(e, t) {
970
971
  let n = F(e, t), r = e[t], i = Reflect.deleteProperty(e, t);
971
- return i && n && et(e, "delete", t, void 0, r), i;
972
+ return i && n && tt(e, "delete", t, void 0, r), i;
972
973
  }
973
974
  has(e, t) {
974
975
  let n = Reflect.has(e, t);
975
- return (!ue(t) || !dt.has(t)) && G(e, "has", t), n;
976
+ return (!ue(t) || !ft.has(t)) && et(e, "has", t), n;
976
977
  }
977
978
  ownKeys(e) {
978
- return G(e, "iterate", I(e) ? "length" : Ze), Reflect.ownKeys(e);
979
+ return et(e, "iterate", I(e) ? "length" : Ze), Reflect.ownKeys(e);
979
980
  }
980
- }, ht = class extends pt {
981
+ }, gt = class extends mt {
981
982
  constructor(e = !1) {
982
983
  super(!0, e);
983
984
  }
@@ -987,11 +988,11 @@ var pt = class {
987
988
  deleteProperty(e, t) {
988
989
  return process.env.NODE_ENV !== "production" && we(`Delete operation on key "${String(t)}" failed: target is readonly.`, e), !0;
989
990
  }
990
- }, gt = /* @__PURE__ */ new mt(), _t = /* @__PURE__ */ new ht(), vt = /* @__PURE__ */ new ht(!0), yt = (e) => e, bt = (e) => Reflect.getPrototypeOf(e);
991
- function xt(e, t, n) {
991
+ }, _t = /* @__PURE__ */ new ht(), vt = /* @__PURE__ */ new gt(), yt = /* @__PURE__ */ new gt(!0), bt = (e) => e, xt = (e) => Reflect.getPrototypeOf(e);
992
+ function St(e, t, n) {
992
993
  return function(...r) {
993
- let i = this.__v_raw, a = /* @__PURE__ */ q(i), o = ce(a), s = e === "entries" || e === Symbol.iterator && o, c = e === "keys" && o, l = i[e](...r), u = n ? yt : t ? Ut : J;
994
- return !t && G(a, "iterate", c ? Qe : Ze), M(Object.create(l), { next() {
994
+ let i = this.__v_raw, a = /* @__PURE__ */ q(i), o = ce(a), s = e === "entries" || e === Symbol.iterator && o, c = e === "keys" && o, l = i[e](...r), u = n ? bt : t ? J : Ut;
995
+ return !t && et(a, "iterate", c ? Qe : Ze), M(Object.create(l), { next() {
995
996
  let { value: e, done: t } = l.next();
996
997
  return t ? {
997
998
  value: e,
@@ -1003,7 +1004,7 @@ function xt(e, t, n) {
1003
1004
  } });
1004
1005
  };
1005
1006
  }
1006
- function St(e) {
1007
+ function Ct(e) {
1007
1008
  return function(...t) {
1008
1009
  if (process.env.NODE_ENV !== "production") {
1009
1010
  let n = t[0] ? `on key "${t[0]}" ` : "";
@@ -1012,55 +1013,55 @@ function St(e) {
1012
1013
  return e === "delete" ? !1 : e === "clear" ? void 0 : this;
1013
1014
  };
1014
1015
  }
1015
- function Ct(e, t) {
1016
+ function wt(e, t) {
1016
1017
  let n = {
1017
1018
  get(n) {
1018
1019
  let r = this.__v_raw, i = /* @__PURE__ */ q(r), a = /* @__PURE__ */ q(n);
1019
- e || (_e(n, a) && G(i, "get", n), G(i, "get", a));
1020
- let { has: o } = bt(i), s = t ? yt : e ? Ut : J;
1020
+ e || (_e(n, a) && et(i, "get", n), et(i, "get", a));
1021
+ let { has: o } = xt(i), s = t ? bt : e ? J : Ut;
1021
1022
  if (o.call(i, n)) return s(r.get(n));
1022
1023
  if (o.call(i, a)) return s(r.get(a));
1023
1024
  r !== i && r.get(n);
1024
1025
  },
1025
1026
  get size() {
1026
1027
  let t = this.__v_raw;
1027
- return !e && G(/* @__PURE__ */ q(t), "iterate", Ze), t.size;
1028
+ return !e && et(/* @__PURE__ */ q(t), "iterate", Ze), t.size;
1028
1029
  },
1029
1030
  has(t) {
1030
1031
  let n = this.__v_raw, r = /* @__PURE__ */ q(n), i = /* @__PURE__ */ q(t);
1031
- return e || (_e(t, i) && G(r, "has", t), G(r, "has", i)), t === i ? n.has(t) : n.has(t) || n.has(i);
1032
+ return e || (_e(t, i) && et(r, "has", t), et(r, "has", i)), t === i ? n.has(t) : n.has(t) || n.has(i);
1032
1033
  },
1033
1034
  forEach(n, r) {
1034
- let i = this, a = i.__v_raw, o = /* @__PURE__ */ q(a), s = t ? yt : e ? Ut : J;
1035
- return !e && G(o, "iterate", Ze), a.forEach((e, t) => n.call(r, s(e), s(t), i));
1035
+ let i = this, a = i.__v_raw, o = /* @__PURE__ */ q(a), s = t ? bt : e ? J : Ut;
1036
+ return !e && et(o, "iterate", Ze), a.forEach((e, t) => n.call(r, s(e), s(t), i));
1036
1037
  }
1037
1038
  };
1038
1039
  return M(n, e ? {
1039
- add: St("add"),
1040
- set: St("set"),
1041
- delete: St("delete"),
1042
- clear: St("clear")
1040
+ add: Ct("add"),
1041
+ set: Ct("set"),
1042
+ delete: Ct("delete"),
1043
+ clear: Ct("clear")
1043
1044
  } : {
1044
1045
  add(e) {
1045
- let n = /* @__PURE__ */ q(this), r = bt(n), i = /* @__PURE__ */ q(e), a = !t && !/* @__PURE__ */ Bt(e) && !/* @__PURE__ */ zt(e) ? i : e;
1046
- return r.has.call(n, a) || _e(e, a) && r.has.call(n, e) || _e(i, a) && r.has.call(n, i) || (n.add(a), et(n, "add", a, a)), this;
1046
+ let n = /* @__PURE__ */ q(this), r = xt(n), i = /* @__PURE__ */ q(e), a = !t && !/* @__PURE__ */ Bt(e) && !/* @__PURE__ */ zt(e) ? i : e;
1047
+ return r.has.call(n, a) || _e(e, a) && r.has.call(n, e) || _e(i, a) && r.has.call(n, i) || (n.add(a), tt(n, "add", a, a)), this;
1047
1048
  },
1048
1049
  set(e, n) {
1049
1050
  !t && !/* @__PURE__ */ Bt(n) && !/* @__PURE__ */ zt(n) && (n = /* @__PURE__ */ q(n));
1050
- let r = /* @__PURE__ */ q(this), { has: i, get: a } = bt(r), o = i.call(r, e);
1051
- o ? process.env.NODE_ENV !== "production" && Ot(r, i, e) : (e = /* @__PURE__ */ q(e), o = i.call(r, e));
1051
+ let r = /* @__PURE__ */ q(this), { has: i, get: a } = xt(r), o = i.call(r, e);
1052
+ o ? process.env.NODE_ENV !== "production" && kt(r, i, e) : (e = /* @__PURE__ */ q(e), o = i.call(r, e));
1052
1053
  let s = a.call(r, e);
1053
- return r.set(e, n), o ? _e(n, s) && et(r, "set", e, n, s) : et(r, "add", e, n), this;
1054
+ return r.set(e, n), o ? _e(n, s) && tt(r, "set", e, n, s) : tt(r, "add", e, n), this;
1054
1055
  },
1055
1056
  delete(e) {
1056
- let t = /* @__PURE__ */ q(this), { has: n, get: r } = bt(t), i = n.call(t, e);
1057
- i ? process.env.NODE_ENV !== "production" && Ot(t, n, e) : (e = /* @__PURE__ */ q(e), i = n.call(t, e));
1057
+ let t = /* @__PURE__ */ q(this), { has: n, get: r } = xt(t), i = n.call(t, e);
1058
+ i ? process.env.NODE_ENV !== "production" && kt(t, n, e) : (e = /* @__PURE__ */ q(e), i = n.call(t, e));
1058
1059
  let a = r ? r.call(t, e) : void 0, o = t.delete(e);
1059
- return i && et(t, "delete", e, void 0, a), o;
1060
+ return i && tt(t, "delete", e, void 0, a), o;
1060
1061
  },
1061
1062
  clear() {
1062
1063
  let e = /* @__PURE__ */ q(this), t = e.size !== 0, n = process.env.NODE_ENV === "production" ? void 0 : ce(e) ? new Map(e) : new Set(e), r = e.clear();
1063
- return t && et(e, "clear", void 0, void 0, n), r;
1064
+ return t && tt(e, "clear", void 0, void 0, n), r;
1064
1065
  }
1065
1066
  }), [
1066
1067
  "keys",
@@ -1068,23 +1069,23 @@ function Ct(e, t) {
1068
1069
  "entries",
1069
1070
  Symbol.iterator
1070
1071
  ].forEach((r) => {
1071
- n[r] = xt(r, e, t);
1072
+ n[r] = St(r, e, t);
1072
1073
  }), n;
1073
1074
  }
1074
- function wt(e, t) {
1075
- let n = Ct(e, t);
1075
+ function Tt(e, t) {
1076
+ let n = wt(e, t);
1076
1077
  return (t, r, i) => r === "__v_isReactive" ? !e : r === "__v_isReadonly" ? e : r === "__v_raw" ? t : Reflect.get(F(n, r) && r in t ? n : t, r, i);
1077
1078
  }
1078
- var Tt = { get: /* @__PURE__ */ wt(!1, !1) }, Et = { get: /* @__PURE__ */ wt(!0, !1) }, Dt = { get: /* @__PURE__ */ wt(!0, !0) };
1079
- function Ot(e, t, n) {
1079
+ var Et = { get: /* @__PURE__ */ Tt(!1, !1) }, Dt = { get: /* @__PURE__ */ Tt(!0, !1) }, Ot = { get: /* @__PURE__ */ Tt(!0, !0) };
1080
+ function kt(e, t, n) {
1080
1081
  let r = /* @__PURE__ */ q(n);
1081
1082
  if (r !== n && t.call(e, r)) {
1082
1083
  let t = he(e);
1083
1084
  we(`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.`);
1084
1085
  }
1085
1086
  }
1086
- var kt = /* @__PURE__ */ new WeakMap(), At = /* @__PURE__ */ new WeakMap(), jt = /* @__PURE__ */ new WeakMap(), Mt = /* @__PURE__ */ new WeakMap();
1087
- function Nt(e) {
1087
+ var At = /* @__PURE__ */ new WeakMap(), jt = /* @__PURE__ */ new WeakMap(), Mt = /* @__PURE__ */ new WeakMap(), Nt = /* @__PURE__ */ new WeakMap();
1088
+ function Pt(e) {
1088
1089
  switch (e) {
1089
1090
  case "Object":
1090
1091
  case "Array": return 1;
@@ -1096,30 +1097,30 @@ function Nt(e) {
1096
1097
  }
1097
1098
  }
1098
1099
  // @__NO_SIDE_EFFECTS__
1099
- function Pt(e) {
1100
- return /* @__PURE__ */ zt(e) ? e : Lt(e, !1, gt, Tt, kt);
1101
- }
1102
- // @__NO_SIDE_EFFECTS__
1103
1100
  function Ft(e) {
1104
- return Lt(e, !0, _t, Et, jt);
1101
+ return /* @__PURE__ */ zt(e) ? e : Rt(e, !1, _t, Et, At);
1105
1102
  }
1106
1103
  // @__NO_SIDE_EFFECTS__
1107
1104
  function It(e) {
1108
- return Lt(e, !0, vt, Dt, Mt);
1105
+ return Rt(e, !0, vt, Dt, Mt);
1109
1106
  }
1110
- function Lt(e, t, n, r, i) {
1107
+ // @__NO_SIDE_EFFECTS__
1108
+ function Lt(e) {
1109
+ return Rt(e, !0, yt, Ot, Nt);
1110
+ }
1111
+ function Rt(e, t, n, r, i) {
1111
1112
  if (!de(e)) return process.env.NODE_ENV !== "production" && we(`value cannot be made ${t ? "readonly" : "reactive"}: ${String(e)}`), e;
1112
1113
  if (e.__v_raw && !(t && e.__v_isReactive) || e.__v_skip || !Object.isExtensible(e)) return e;
1113
1114
  let a = i.get(e);
1114
1115
  if (a) return a;
1115
- let o = Nt(he(e));
1116
+ let o = Pt(he(e));
1116
1117
  if (o === 0) return e;
1117
1118
  let s = new Proxy(e, o === 2 ? r : n);
1118
1119
  return i.set(e, s), s;
1119
1120
  }
1120
1121
  // @__NO_SIDE_EFFECTS__
1121
- function Rt(e) {
1122
- return /* @__PURE__ */ zt(e) ? /* @__PURE__ */ Rt(e.__v_raw) : !!(e && e.__v_isReactive);
1122
+ function K(e) {
1123
+ return /* @__PURE__ */ zt(e) ? /* @__PURE__ */ K(e.__v_raw) : !!(e && e.__v_isReactive);
1123
1124
  }
1124
1125
  // @__NO_SIDE_EFFECTS__
1125
1126
  function zt(e) {
@@ -1141,7 +1142,7 @@ function q(e) {
1141
1142
  function Ht(e) {
1142
1143
  return !F(e, "__v_skip") && Object.isExtensible(e) && ve(e, "__v_skip", !0), e;
1143
1144
  }
1144
- var J = (e) => de(e) ? /* @__PURE__ */ Pt(e) : e, Ut = (e) => de(e) ? /* @__PURE__ */ Ft(e) : e;
1145
+ var Ut = (e) => de(e) ? /* @__PURE__ */ Ft(e) : e, J = (e) => de(e) ? /* @__PURE__ */ It(e) : e;
1145
1146
  // @__NO_SIDE_EFFECTS__
1146
1147
  function Y(e) {
1147
1148
  return e ? e.__v_isRef === !0 : !1;
@@ -1159,7 +1160,7 @@ function Kt(e, t) {
1159
1160
  }
1160
1161
  var qt = class {
1161
1162
  constructor(e, t) {
1162
- this.dep = new Je(), this.__v_isRef = !0, this.__v_isShallow = !1, this._rawValue = t ? e : /* @__PURE__ */ q(e), this._value = t ? e : J(e), this.__v_isShallow = t;
1163
+ this.dep = new Je(), this.__v_isRef = !0, this.__v_isShallow = !1, this._rawValue = t ? e : /* @__PURE__ */ q(e), this._value = t ? e : Ut(e), this.__v_isShallow = t;
1163
1164
  }
1164
1165
  get value() {
1165
1166
  return process.env.NODE_ENV === "production" ? this.dep.track() : this.dep.track({
@@ -1170,7 +1171,7 @@ var qt = class {
1170
1171
  }
1171
1172
  set value(e) {
1172
1173
  let t = this._rawValue, n = this.__v_isShallow || /* @__PURE__ */ Bt(e) || /* @__PURE__ */ zt(e);
1173
- e = n ? e : /* @__PURE__ */ q(e), _e(e, t) && (this._rawValue = e, this._value = n ? e : J(e), process.env.NODE_ENV === "production" ? this.dep.trigger() : this.dep.trigger({
1174
+ e = n ? e : /* @__PURE__ */ q(e), _e(e, t) && (this._rawValue = e, this._value = n ? e : Ut(e), process.env.NODE_ENV === "production" ? this.dep.trigger() : this.dep.trigger({
1174
1175
  target: this,
1175
1176
  type: "set",
1176
1177
  key: "value",
@@ -1198,7 +1199,7 @@ var Xt = {
1198
1199
  }
1199
1200
  };
1200
1201
  function Zt(e) {
1201
- return /* @__PURE__ */ Rt(e) ? e : new Proxy(e, Xt);
1202
+ return /* @__PURE__ */ K(e) ? e : new Proxy(e, Xt);
1202
1203
  }
1203
1204
  var Qt = class {
1204
1205
  constructor(e, t, n) {
@@ -1238,9 +1239,9 @@ function an(e, t, n = oe) {
1238
1239
  let { immediate: r, deep: i, once: a, scheduler: o, augmentJob: s, call: c } = n, l = (e) => {
1239
1240
  (n.onWarn || we)("Invalid watch source: ", e, "A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.");
1240
1241
  }, u = (e) => i ? e : /* @__PURE__ */ Bt(e) || i === !1 || i === 0 ? on(e, 1) : on(e), d, f, p, m, h = !1, g = !1;
1241
- if (/* @__PURE__ */ Y(e) ? (f = () => e.value, h = /* @__PURE__ */ Bt(e)) : /* @__PURE__ */ Rt(e) ? (f = () => u(e), h = !0) : I(e) ? (g = !0, h = e.some((e) => /* @__PURE__ */ Rt(e) || /* @__PURE__ */ Bt(e)), f = () => e.map((e) => {
1242
+ if (/* @__PURE__ */ Y(e) ? (f = () => e.value, h = /* @__PURE__ */ Bt(e)) : /* @__PURE__ */ K(e) ? (f = () => u(e), h = !0) : I(e) ? (g = !0, h = e.some((e) => /* @__PURE__ */ K(e) || /* @__PURE__ */ Bt(e)), f = () => e.map((e) => {
1242
1243
  if (/* @__PURE__ */ Y(e)) return e.value;
1243
- if (/* @__PURE__ */ Rt(e)) return u(e);
1244
+ if (/* @__PURE__ */ K(e)) return u(e);
1244
1245
  if (R(e)) return c ? c(e, 2) : e();
1245
1246
  process.env.NODE_ENV !== "production" && l(e);
1246
1247
  })) : R(e) ? f = t ? c ? () => c(e, 2) : e : () => {
@@ -1321,13 +1322,13 @@ var sn = [];
1321
1322
  function cn(e) {
1322
1323
  sn.push(e);
1323
1324
  }
1324
- function X() {
1325
+ function ln() {
1325
1326
  sn.pop();
1326
1327
  }
1327
- var ln = !1;
1328
+ var X = !1;
1328
1329
  function un(e, ...t) {
1329
- if (ln) return;
1330
- ln = !0, Ue();
1330
+ if (X) return;
1331
+ X = !0, Ue();
1331
1332
  let n = sn.length ? sn[sn.length - 1].component : null, r = n && n.appContext.config.warnHandler, i = dn();
1332
1333
  if (r) _n(r, n, 11, [
1333
1334
  e + t.map((e) => e.toString?.call(e) ?? JSON.stringify(e)).join(""),
@@ -1339,7 +1340,7 @@ function un(e, ...t) {
1339
1340
  let n = [`[Vue warn]: ${e}`, ...t];
1340
1341
  i.length && n.push("\n", ...fn(i)), console.warn(...n);
1341
1342
  }
1342
- We(), ln = !1;
1343
+ We(), X = !1;
1343
1344
  }
1344
1345
  function dn() {
1345
1346
  let e = sn[sn.length - 1];
@@ -1461,7 +1462,7 @@ function yn(e, t, n, r = !0) {
1461
1462
  function bn(e, t, n, r = !0, i = !1) {
1462
1463
  if (process.env.NODE_ENV !== "production") {
1463
1464
  let i = gn[t];
1464
- if (n && cn(n), un(`Unhandled error${i ? ` during execution of ${i}` : ""}`), n && X(), r) throw e;
1465
+ if (n && cn(n), un(`Unhandled error${i ? ` during execution of ${i}` : ""}`), n && ln(), r) throw e;
1465
1466
  console.error(e);
1466
1467
  } else if (i) throw e;
1467
1468
  else console.error(e);
@@ -1658,10 +1659,10 @@ var ar = /* @__PURE__ */ Symbol.for("v-ndc"), or = (e) => e ? Yr(e) ? Zr(e) : or
1658
1659
  $: (e) => e,
1659
1660
  $el: (e) => e.vnode.el,
1660
1661
  $data: (e) => e.data,
1661
- $props: (e) => process.env.NODE_ENV === "production" ? e.props : /* @__PURE__ */ It(e.props),
1662
- $attrs: (e) => process.env.NODE_ENV === "production" ? e.attrs : /* @__PURE__ */ It(e.attrs),
1663
- $slots: (e) => process.env.NODE_ENV === "production" ? e.slots : /* @__PURE__ */ It(e.slots),
1664
- $refs: (e) => process.env.NODE_ENV === "production" ? e.refs : /* @__PURE__ */ It(e.refs),
1662
+ $props: (e) => process.env.NODE_ENV === "production" ? e.props : /* @__PURE__ */ Lt(e.props),
1663
+ $attrs: (e) => process.env.NODE_ENV === "production" ? e.attrs : /* @__PURE__ */ Lt(e.attrs),
1664
+ $slots: (e) => process.env.NODE_ENV === "production" ? e.slots : /* @__PURE__ */ Lt(e.slots),
1665
+ $refs: (e) => process.env.NODE_ENV === "production" ? e.refs : /* @__PURE__ */ Lt(e.refs),
1665
1666
  $parent: (e) => or(e.parent),
1666
1667
  $root: (e) => or(e.root),
1667
1668
  $host: (e) => e.ce,
@@ -1692,7 +1693,7 @@ var ar = /* @__PURE__ */ Symbol.for("v-ndc"), or = (e) => e ? Yr(e) ? Zr(e) : or
1692
1693
  else dr && (o[t] = 0);
1693
1694
  }
1694
1695
  let l = sr[t], u, d;
1695
- if (l) return t === "$attrs" ? (G(e.attrs, "get", ""), process.env.NODE_ENV) : process.env.NODE_ENV !== "production" && t === "$slots" && G(e, "get", t), l(e);
1696
+ if (l) return t === "$attrs" ? (et(e.attrs, "get", ""), process.env.NODE_ENV) : process.env.NODE_ENV !== "production" && t === "$slots" && et(e, "get", t), l(e);
1696
1697
  if ((u = s.__cssModules) && (u = u[t])) return u;
1697
1698
  if (n !== oe && F(n, t)) return o[t] = 4, n[t];
1698
1699
  if (d = c.config.globalProperties, F(d, t)) return d[t];
@@ -2016,7 +2017,7 @@ function ii() {
2016
2017
  s(n),
2017
2018
  ">"
2018
2019
  ];
2019
- } else if (/* @__PURE__ */ Rt(t)) return [
2020
+ } else if (/* @__PURE__ */ K(t)) return [
2020
2021
  "div",
2021
2022
  {},
2022
2023
  [
@@ -5772,6 +5773,7 @@ function Zc(e) {
5772
5773
  `仅操作上述 ${t.length} 个聚焦子树${t.length > 1 ? "之一" : ""},用户未指明目标的指令默认作用于聚焦组件(「增加/修改/删除 X」类指令优先理解为对聚焦组件本身的改动 —— 如为其加页签/子项,写焦点路径的子路径;仅用户明确要求新建独立组件时才需解除焦点);不要改动其他组件;${l}`,
5773
5774
  ...n.length ? [`⚠️ 焦点失联:${n.map((e) => e.path).join("、")} 对应元素(按稳定 id 锚定)已不存在(可能已被删除)。请先 read 确认当前结构;若元素确已删除,用 clear_focus 解焦或换焦点,勿按旧路径写入。`] : [],
5774
5775
  "用户用指示代词提问(「这是啥/这个/它是干什么的」等)时,所指默认是聚焦目标 —— 先 read 聚焦子树,再围绕聚焦组件回答,勿泛答整页",
5776
+ "取景与答述同样锚定:要看画面时 take_screenshot 不传 selector 即默认截聚焦组件(宿主 data-path 锚定);回答以聚焦组件为主体,整页/整屏概况仅在用户明确问整页时给(用户问能力演示如「你能看到啥」也不例外)",
5775
5777
  "read 不带路径时默认只返回聚焦子树;需要全量主数据时显式列顶层键(read({jsonPaths:[...]}) )"
5776
5778
  ], a = e.getSchema();
5777
5779
  if (a) {
@@ -13463,16 +13465,18 @@ async function eg(e, t) {
13463
13465
  return Qh(e, {
13464
13466
  width: t.width,
13465
13467
  height: t.height,
13466
- pixelRatio: 1,
13467
- cacheBust: !0
13468
+ pixelRatio: 1
13468
13469
  });
13469
13470
  }
13470
13471
  function tg(e) {
13472
+ return `[data-path="${String(e ?? "").replace(/\\/g, "\\\\").replace(/"/g, "\\\"")}"]`;
13473
+ }
13474
+ function ng(e) {
13471
13475
  let [t, n] = e.split(",", 2), r = /:(.*?);/.exec(t)?.[1] ?? "image/png", i = atob(n ?? ""), a = new Uint8Array(i.length);
13472
13476
  for (let e = 0; e < i.length; e++) a[e] = i.charCodeAt(e);
13473
13477
  return new Blob([a], { type: r });
13474
13478
  }
13475
- function ng(e, t, n) {
13479
+ function rg(e, t, n) {
13476
13480
  if (n.selector) {
13477
13481
  let t = null;
13478
13482
  try {
@@ -13498,74 +13502,137 @@ function ng(e, t, n) {
13498
13502
  height: i
13499
13503
  };
13500
13504
  }
13501
- function rg(e) {
13505
+ function ig(e) {
13502
13506
  let n = e.render ?? eg;
13503
13507
  return s(async (t) => {
13504
13508
  if (typeof document > "u") return "ERROR: take_screenshot 仅在浏览器环境可用(当前运行在 node/服务端,无 DOM)。";
13505
- let r = ng(document, typeof window < "u" ? window : {}, t);
13506
- if (!r.ok) return `ERROR: ${r.error}`;
13507
- let i = r.el ?? e.getRootEl?.() ?? document.documentElement, a = {
13508
- width: r.width,
13509
- height: r.height
13509
+ let r = "", i = t;
13510
+ if (!t.selector && !t.fullPage) {
13511
+ let n = e.getActiveFocus?.();
13512
+ if (n?.path) {
13513
+ let a = e.focusSelector ? e.focusSelector(n.path) : tg(n.path), o = !1;
13514
+ if (a) try {
13515
+ o = !!document.querySelector(a);
13516
+ } catch {
13517
+ o = !1;
13518
+ }
13519
+ o ? (i = {
13520
+ ...t,
13521
+ selector: a
13522
+ }, r = `(取景=聚焦组件 ${n.path},data-path 锚定)`) : r = `(当前聚焦 ${n.path},但未在 DOM 找到对应锚点,已回退视口;要精确截取可传 selector)`;
13523
+ }
13524
+ }
13525
+ let a = rg(document, typeof window < "u" ? window : {}, i);
13526
+ if (!a.ok) return `ERROR: ${a.error}`;
13527
+ let o = a.el ?? e.getRootEl?.() ?? document.documentElement, s = {
13528
+ width: a.width,
13529
+ height: a.height
13510
13530
  };
13511
- if (r.mode === "fullPage") {
13531
+ if (a.mode === "fullPage") {
13512
13532
  let e = Math.max(document.documentElement?.scrollHeight ?? 0, document.body?.scrollHeight ?? 0);
13513
13533
  if (e > 32768) return `ERROR: 整页高度 ${e}px 超上限 ${$h}(超长文档渲染会卡死页面)。请改用 selector 分段截取关键区域。`;
13514
- a = {
13515
- width: r.width,
13534
+ s = {
13535
+ width: a.width,
13516
13536
  height: e
13517
13537
  };
13518
13538
  }
13519
- let o;
13539
+ let c;
13520
13540
  try {
13521
- o = await n(i, a);
13541
+ c = await n(o, s);
13522
13542
  } catch (e) {
13523
- return `ERROR: 截图渲染失败(${e instanceof Error ? e.message : String(e)}).常见原因:宿主页面 CSP 禁止 SVG data URL / 跨域图片污染画布 / 元素含无法克隆的内容。建议:① 改用 selector 缩小到目标区域;② 结构验证可改用 get_dom / dom_info(rect+styles);③ 宿主可配 screenshot.renderer 自定义渲染器绕过。`;
13543
+ return `ERROR: 截图渲染失败(${e instanceof Error ? e.message : String(e)})${r}.常见原因:宿主页面 CSP 禁止 SVG data URL / 跨域图片污染画布 / 元素含无法克隆的内容。建议:① 改用 selector 缩小到目标区域;② 结构验证可改用 get_dom / dom_info(rect+styles);③ 宿主可配 screenshot.renderer 自定义渲染器绕过。`;
13524
13544
  }
13525
- let s;
13545
+ let l;
13526
13546
  try {
13527
- s = await Ei(tg(o), { name: `screenshot-${r.mode}.png` });
13547
+ l = await Ei(ng(c), { name: `screenshot-${a.mode}.png` });
13528
13548
  } catch (e) {
13529
13549
  return `ERROR: 截图压缩失败(${e instanceof Error ? e.message : String(e)}),未投递。`;
13530
13550
  }
13531
- let c = e.stow?.(s), l = {
13532
- mode: r.mode,
13533
- ...t.selector ? { selector: t.selector } : {}
13534
- }, u = e.getVision();
13535
- u && e.onShot?.(s, l);
13536
- let d;
13537
- if (!u) {
13551
+ let u = e.stow?.(l), d = {
13552
+ mode: a.mode,
13553
+ ...i.selector ? { selector: i.selector } : {}
13554
+ }, f = e.getVision();
13555
+ f && e.onShot?.(l, d);
13556
+ let p;
13557
+ if (!f) {
13538
13558
  if (!e.describe) return "ERROR: 截图已生成但主模型不支持图片(vision=false)且未配置 images.describe,无处投递。请换多模态模型 / LLMConfig.vision:true / 配置 images.describe(集成方识图旁路)。";
13539
13559
  try {
13540
- d = await e.describe(s, { text: `页面截图(${r.mode}${t.selector ? ` ${t.selector}` : ""})` });
13560
+ p = await e.describe(l, { text: `页面截图(${a.mode}${t.selector ? ` ${t.selector}` : ""})` });
13541
13561
  } catch {
13542
- d = void 0;
13562
+ p = void 0;
13543
13563
  }
13544
13564
  }
13545
- let f = u ? "vision-image(随后的图片消息)" : d ? "describe-text(转述如下)" : "none", p = [
13546
- `截图完成(${r.mode}${t.selector ? ` selector="${t.selector}"` : ""}):${s.width}x${s.height},${Math.round((s.bytes ?? 0) / 1024)}KB(jpeg 压缩后)`,
13547
- c ? `原图已存 vfs:${c}` : "vfs 未开启,原图仅本轮内存",
13548
- `投递形态:${f}`
13565
+ let m = f ? "vision-image(随后的图片消息)" : p ? "describe-text(转述如下)" : "none", h = [
13566
+ `截图完成(${a.mode}${i.selector ? ` selector="${i.selector}"` : ""}):${l.width}x${l.height},${Math.round((l.bytes ?? 0) / 1024)}KB(jpeg 压缩后)${r}`,
13567
+ u ? `原图已存 vfs:${u}` : "vfs 未开启,原图仅本轮内存",
13568
+ `投递形态:${m}`
13549
13569
  ];
13550
- return d && p.push(`识图转述:${d}`), p.join("\n");
13570
+ return p && h.push(`识图转述:${p}`), h.join("\n");
13551
13571
  }, {
13552
13572
  name: "take_screenshot",
13553
- description: "截取当前页面图像查看(视觉验证:布局/样式/渲染效果)。selector 截取指定元素区域;fullPage 截整页(超长文档会被拒,改用 selector 分段);都不传截当前视口。只读;截图经压缩后投递(多模态主模型直看图,纯文本模型自动走识图转述)。",
13573
+ description: "截取当前页面图像查看(视觉验证:布局/样式/渲染效果)。聚焦态下**不传 selector 默认截取聚焦组件**(宿主 data-path 锚定 —— 指代问句「这是啥/这里画的是啥」优先此取景,整页截图仅在用户明确要求时用)。selector 截取指定元素区域;fullPage 截整页(超长文档会被拒,改用 selector 分段);都不传且无聚焦截当前视口。只读;截图经压缩后投递(多模态主模型直看图,纯文本模型自动走识图转述)。",
13554
13574
  schema: t.object({
13555
13575
  selector: t.string().optional().describe("CSS 选择器:截取该元素区域(先用 dom_search 定位更稳)"),
13556
13576
  fullPage: t.boolean().optional().describe("截取整个页面(默认 false = 当前视口)")
13557
13577
  })
13558
13578
  });
13559
13579
  }
13580
+ async function ag(e) {
13581
+ if (typeof FileReader < "u") return new Promise((t, n) => {
13582
+ let r = new FileReader();
13583
+ r.onload = () => t(String(r.result)), r.onerror = () => n(/* @__PURE__ */ Error("FileReader 读取失败")), r.readAsDataURL(e);
13584
+ });
13585
+ let t = new Uint8Array(await e.arrayBuffer()), n = "";
13586
+ for (let e = 0; e < t.length; e += 8192) n += String.fromCharCode(...t.subarray(e, e + 8192));
13587
+ return `data:${e.type || "image/png"};base64,${btoa(n)}`;
13588
+ }
13589
+ function og(e) {
13590
+ let n = e.clientFetch ?? (async (e) => {
13591
+ try {
13592
+ return await fetch(e, { mode: "cors" });
13593
+ } catch {
13594
+ return null;
13595
+ }
13596
+ });
13597
+ return s(async (t) => {
13598
+ let r = String(t?.url ?? "").trim();
13599
+ if (!/^https?:\/\//i.test(r)) return "ERROR: view_image 只接受 http(s) 图片 URL(如 read 到的 props.image / slides[n].image)。本地文件/base64 不收(用户贴图走输入通道);要看渲染后的组件用 take_screenshot。";
13600
+ let i;
13601
+ try {
13602
+ let e = await n(r);
13603
+ if (e?.ok) {
13604
+ let t = await e.blob();
13605
+ t.size > 0 && t.size <= 20 * 1024 * 1024 && String(t.type).startsWith("image/") && (i = await ag(t));
13606
+ }
13607
+ } catch {}
13608
+ let a = {
13609
+ id: `viewimg-${Date.now().toString(36)}`,
13610
+ url: r,
13611
+ name: "view_image",
13612
+ ...i ? { dataUri: i } : {}
13613
+ }, o = i ? "已客户端物化为 dataUri(供应商无需下载)" : "URL 直投(客户端物化不可用,由模型服务端拉图;若供应商下载失败会报错,届时改用 take_screenshot)";
13614
+ if (e.getVision()) return e.onShot?.(a, { mode: "url" }), `已请求查看图片(${o}):${r}。注意:看到的是图片本身(全分辨率),不是页面渲染态;若要对比页面叠加文案/布局,另用 take_screenshot。`;
13615
+ if (!e.describe) return "ERROR: 主模型不支持图片(vision=false)且未配置 images.describe,无法查看图片。请换多模态模型 / llm.vision:true / 配置 images.describe。";
13616
+ try {
13617
+ return `图片转述(${r}):${await e.describe(a, { text: `查看图片:${r}` })}`;
13618
+ } catch (e) {
13619
+ return `ERROR: 图片转述失败(${e instanceof Error ? e.message : String(e)});可换 take_screenshot 看渲染区域。`;
13620
+ }
13621
+ }, {
13622
+ name: "view_image",
13623
+ description: "查看一张图片 URL 的内容(页面数据里读到的图:轮播某一帧/商品图/封面等)。优先客户端物化直投(全分辨率原图,非截图渲染);问「第 N 张图/这张图画的是啥」且手里有该图 URL 时优先用它,不要截当前渲染帧(自动轮播可能已切到别的帧)。若供应商下载 URL 失败(报 Failed to download image),改用 take_screenshot 看渲染区域。参数 url 须为 http(s)。",
13624
+ schema: t.object({ url: t.string().min(8).describe("图片的 http(s) URL(来自 read 结果,如 slides[0].image)") })
13625
+ });
13626
+ }
13560
13627
  //#endregion
13561
13628
  //#region src/core/tools/domEdit.ts
13562
- var ig = "data-pg-snap", ag = 20, og = 256 * 1024, sg = t.enum([
13629
+ var sg = "data-pg-snap", cg = 20, lg = 256 * 1024, ug = t.enum([
13563
13630
  "before",
13564
13631
  "after",
13565
13632
  "prepend",
13566
13633
  "append",
13567
13634
  "replace"
13568
- ]), cg = /* @__PURE__ */ new Set([
13635
+ ]), dg = /* @__PURE__ */ new Set([
13569
13636
  "script",
13570
13637
  "iframe",
13571
13638
  "object",
@@ -13573,7 +13640,7 @@ var ig = "data-pg-snap", ag = 20, og = 256 * 1024, sg = t.enum([
13573
13640
  "link",
13574
13641
  "meta",
13575
13642
  "base"
13576
- ]), lg = /^on\w+$/i, ug = /* @__PURE__ */ new Set([
13643
+ ]), fg = /^on\w+$/i, pg = /* @__PURE__ */ new Set([
13577
13644
  "href",
13578
13645
  "src",
13579
13646
  "action",
@@ -13581,22 +13648,22 @@ var ig = "data-pg-snap", ag = 20, og = 256 * 1024, sg = t.enum([
13581
13648
  "xlink:href",
13582
13649
  "data"
13583
13650
  ]);
13584
- function dg(e) {
13651
+ function mg(e) {
13585
13652
  return /^\s*(javascript|vbscript)\s*:/i.test(e);
13586
13653
  }
13587
- function fg(e) {
13588
- return !e || !/^[a-zA-Z_:][-a-zA-Z0-9_:.]*$/.test(e) ? `非法属性名 "${e}"` : lg.test(e) ? `事件属性 ${e} 被拒(on* 内联脚本防误执行)` : null;
13654
+ function hg(e) {
13655
+ return !e || !/^[a-zA-Z_:][-a-zA-Z0-9_:.]*$/.test(e) ? `非法属性名 "${e}"` : fg.test(e) ? `事件属性 ${e} 被拒(on* 内联脚本防误执行)` : null;
13589
13656
  }
13590
- function pg(e, t) {
13657
+ function gg(e, t) {
13591
13658
  let n = [];
13592
- cg.has(e.toLowerCase()) && n.push(`标签 <${e}> 被拒(可执行/页面行为面;文档标注场景请用常规内容标签)`);
13659
+ dg.has(e.toLowerCase()) && n.push(`标签 <${e}> 被拒(可执行/页面行为面;文档标注场景请用常规内容标签)`);
13593
13660
  for (let [e, r] of Object.entries(t ?? {})) {
13594
- let t = fg(e);
13595
- t ? n.push(t) : ug.has(e.toLowerCase()) && dg(String(r)) && n.push(`${e} 的 javascript:/vbscript: 协议被拒`);
13661
+ let t = hg(e);
13662
+ t ? n.push(t) : pg.has(e.toLowerCase()) && mg(String(r)) && n.push(`${e} 的 javascript:/vbscript: 协议被拒`);
13596
13663
  }
13597
13664
  return n;
13598
13665
  }
13599
- var mg = t.discriminatedUnion("op", [
13666
+ var _g = t.discriminatedUnion("op", [
13600
13667
  t.object({
13601
13668
  op: t.literal("set_text"),
13602
13669
  selector: t.string().min(1),
@@ -13636,7 +13703,7 @@ var mg = t.discriminatedUnion("op", [
13636
13703
  t.object({
13637
13704
  op: t.literal("insert"),
13638
13705
  anchor: t.string().min(1).describe("锚元素 selector"),
13639
- position: sg.describe("before/after = 锚前后兄弟;prepend/append = 锚首尾子;replace = 换掉锚本身"),
13706
+ position: ug.describe("before/after = 锚前后兄弟;prepend/append = 锚首尾子;replace = 换掉锚本身"),
13640
13707
  tag: t.string().min(1).describe("新元素标签名,如 div/span/mark"),
13641
13708
  attrs: t.record(t.string(), t.string()).optional(),
13642
13709
  text: t.string().optional(),
@@ -13665,19 +13732,19 @@ var mg = t.discriminatedUnion("op", [
13665
13732
  note: t.string().optional().describe("可选浮注文案")
13666
13733
  })
13667
13734
  ]);
13668
- function hg(e) {
13735
+ function vg(e) {
13669
13736
  let t = [];
13670
13737
  for (let n = 0; n < e.length; n++) {
13671
13738
  let r = e[n], i = `patches[${n}](${r.op})`;
13672
13739
  if (r.op === "set_attr") {
13673
- let e = fg(r.name);
13674
- e ? t.push(`${i}: ${e}`) : ug.has(r.name.toLowerCase()) && dg(r.value) && t.push(`${i}: ${r.name} 的 javascript:/vbscript: 协议被拒`);
13740
+ let e = hg(r.name);
13741
+ e ? t.push(`${i}: ${e}`) : pg.has(r.name.toLowerCase()) && mg(r.value) && t.push(`${i}: ${r.name} 的 javascript:/vbscript: 协议被拒`);
13675
13742
  }
13676
- r.op === "insert" && (t.push(...pg(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 或颜色名`);
13743
+ r.op === "insert" && (t.push(...gg(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 或颜色名`);
13677
13744
  }
13678
13745
  return t;
13679
13746
  }
13680
- function gg(e = {}) {
13747
+ function yg(e = {}) {
13681
13748
  let n = [], r = 0, i = () => e.getDocument?.() ?? (typeof document < "u" ? document : null), a = (e, t, n) => {
13682
13749
  let r = [];
13683
13750
  try {
@@ -13689,9 +13756,9 @@ function gg(e = {}) {
13689
13756
  }, o = (e) => ji(e) ? "目标元素位于 SDK 对话框自身 DOM 内,写操作被拒(防 agent 改坏自己的 UI)。请操作宿主页面内容区域" : null, c = (e, t) => {
13690
13757
  if (!e) return null;
13691
13758
  let n = e.outerHTML;
13692
- if (n.length > og) return `快照超限:受影响子树 ${(n.length / 1024).toFixed(0)}KB > ${og / 1024}KB。缩小 selector 到更深的子树再改(快照是回滚安全网,巨树快照爆内存)`;
13693
- let i = e.getAttribute?.(ig) ?? "";
13694
- return i || (i = `pg${++r}`, e.setAttribute?.(ig, i)), t.some((e) => e.id === i) || t.push({
13759
+ if (n.length > lg) return `快照超限:受影响子树 ${(n.length / 1024).toFixed(0)}KB > ${lg / 1024}KB。缩小 selector 到更深的子树再改(快照是回滚安全网,巨树快照爆内存)`;
13760
+ let i = e.getAttribute?.(sg) ?? "";
13761
+ return i || (i = `pg${++r}`, e.setAttribute?.(sg, i)), t.some((e) => e.id === i) || t.push({
13695
13762
  id: i,
13696
13763
  html: n
13697
13764
  }), null;
@@ -13777,7 +13844,7 @@ function gg(e = {}) {
13777
13844
  let s = i();
13778
13845
  if (!s) return "ERROR: dom_edit 仅在浏览器环境可用(当前运行在 node/服务端,无 DOM)。改数据请用 write 工具。";
13779
13846
  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";
13780
- let c = hg(t);
13847
+ let c = vg(t);
13781
13848
  if (c.length) return `ERROR: 校验失败(整批拒绝,零改动):\n- ${c.join("\n- ")}`;
13782
13849
  let u = (e, t) => {
13783
13850
  let n = a(s, e, t);
@@ -13805,7 +13872,7 @@ function gg(e = {}) {
13805
13872
  return f.length && (n.push({
13806
13873
  snips: f,
13807
13874
  ops: d
13808
- }), n.length > ag && n.shift()), e.onEdit?.({
13875
+ }), n.length > cg && n.shift()), e.onEdit?.({
13809
13876
  ops: d,
13810
13877
  applied: t.length,
13811
13878
  dryRun: !1
@@ -13814,7 +13881,7 @@ function gg(e = {}) {
13814
13881
  name: "dom_edit",
13815
13882
  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。",
13816
13883
  schema: t.object({
13817
- patches: t.array(mg).min(1).max(20).describe("批量操作(原子;顺序应用)"),
13884
+ patches: t.array(_g).min(1).max(20).describe("批量操作(原子;顺序应用)"),
13818
13885
  dryRun: t.boolean().optional().describe("只校验不落地(预检)")
13819
13886
  })
13820
13887
  }), d = s(async () => {
@@ -13824,7 +13891,7 @@ function gg(e = {}) {
13824
13891
  if (!r) return "无可用快照(栈空)。";
13825
13892
  let a = 0, o = [];
13826
13893
  for (let e = r.snips.length - 1; e >= 0; e--) {
13827
- let { id: n, html: i } = r.snips[e], s = t.querySelector(`[${ig}="${n}"]`);
13894
+ let { id: n, html: i } = r.snips[e], s = t.querySelector(`[${sg}="${n}"]`);
13828
13895
  if (!s) {
13829
13896
  o.push(n);
13830
13897
  continue;
@@ -13851,14 +13918,14 @@ function gg(e = {}) {
13851
13918
  }
13852
13919
  //#endregion
13853
13920
  //#region src/core/sdk/hostWatcher.ts
13854
- var _g = (e, t) => e.length > t ? `${e.slice(0, t)}…` : e;
13855
- function vg(e) {
13856
- return e.kind === "title" ? `页面标题已变更:${_g(e.to, 60)}` : `页面导航:${_g(e.from, 80)} → ${_g(e.to, 80)}`;
13921
+ var bg = (e, t) => e.length > t ? `${e.slice(0, t)}…` : e;
13922
+ function xg(e) {
13923
+ return e.kind === "title" ? `页面标题已变更:${bg(e.to, 60)}` : `页面导航:${bg(e.from, 80)} → ${bg(e.to, 80)}`;
13857
13924
  }
13858
- function yg(e) {
13925
+ function Sg(e) {
13859
13926
  return e.kind === "title" ? 0 : 1;
13860
13927
  }
13861
- function bg(e) {
13928
+ function Cg(e) {
13862
13929
  let { target: t, history: n, document: r, MutationObserver: i, onReport: a } = e, o = e.options ?? {}, s = Math.max(0, o.debounceMs ?? 300), c = () => String(t?.location?.href ?? ""), l = () => String(r?.title ?? ""), u = !1, d = null, f = null, p = [], m = c(), h = l(), g = (e) => {
13863
13930
  if (u) return;
13864
13931
  let t = c();
@@ -13880,7 +13947,7 @@ function bg(e) {
13880
13947
  };
13881
13948
  h = e, v(t);
13882
13949
  }, v = (e) => {
13883
- f = f && yg(f) >= yg(e) ? f : e, d === null && (d = setTimeout(() => {
13950
+ f = f && Sg(f) >= Sg(e) ? f : e, d === null && (d = setTimeout(() => {
13884
13951
  d = null;
13885
13952
  let e = f;
13886
13953
  f = null, !(u || !e) && o.ignore?.(e) !== !0 && a(e);
@@ -13932,22 +13999,22 @@ function bg(e) {
13932
13999
  }
13933
14000
  //#endregion
13934
14001
  //#region src/core/tools/proposalOps.ts
13935
- var xg = 4e6;
13936
- function Sg(e, t) {
14002
+ var wg = 4e6;
14003
+ function Tg(e, t) {
13937
14004
  return t.map((t) => ({
13938
14005
  type: e,
13939
14006
  text: t
13940
14007
  }));
13941
14008
  }
13942
- function Cg(e, t) {
14009
+ function Eg(e, t) {
13943
14010
  let n = e ? String(e).split("\n") : [], r = t ? String(t).split("\n") : [], i = 0;
13944
14011
  for (; i < n.length && i < r.length && n[i] === r[i];) i += 1;
13945
14012
  let a = n.length, o = r.length;
13946
14013
  for (; a > i && o > i && n[a - 1] === r[o - 1];) --a, --o;
13947
- let s = n.slice(i, a), c = r.slice(i, o), l = s.length * c.length > xg ? [...Sg("del", s), ...Sg("add", c)] : wg(s, c), u = [
13948
- ...Sg("same", n.slice(0, i)),
14014
+ let s = n.slice(i, a), c = r.slice(i, o), l = s.length * c.length > wg ? [...Tg("del", s), ...Tg("add", c)] : Dg(s, c), u = [
14015
+ ...Tg("same", n.slice(0, i)),
13949
14016
  ...l,
13950
- ...Sg("same", n.slice(a))
14017
+ ...Tg("same", n.slice(a))
13951
14018
  ];
13952
14019
  return {
13953
14020
  rows: u,
@@ -13957,7 +14024,7 @@ function Cg(e, t) {
13957
14024
  }
13958
14025
  };
13959
14026
  }
13960
- function wg(e, t) {
14027
+ function Dg(e, t) {
13961
14028
  let n = e.length, r = t.length, i = new Uint32Array((n + 1) * (r + 1)), a = (e, t) => e * (r + 1) + t;
13962
14029
  for (let o = n - 1; o >= 0; --o) for (let n = r - 1; n >= 0; --n) i[a(o, n)] = e[o] === t[n] ? i[a(o + 1, n + 1)] + 1 : Math.max(i[a(o + 1, n)], i[a(o, n + 1)]);
13963
14030
  let o = [], s = 0, c = 0;
@@ -13981,13 +14048,13 @@ function wg(e, t) {
13981
14048
  }), c += 1;
13982
14049
  return o;
13983
14050
  }
13984
- function Tg(e, t) {
14051
+ function Og(e, t) {
13985
14052
  if (!t) return 0;
13986
14053
  let n = 0, r = e.indexOf(t);
13987
14054
  for (; r !== -1;) n += 1, r = e.indexOf(t, r + t.length);
13988
14055
  return n;
13989
14056
  }
13990
- function Eg(e, t) {
14057
+ function kg(e, t) {
13991
14058
  let n = String(e ?? "");
13992
14059
  for (let e = 0; e < t.length; e += 1) {
13993
14060
  let r = t[e];
@@ -13996,7 +14063,7 @@ function Eg(e, t) {
13996
14063
  error: `第 ${e + 1} 个 op 格式无效`
13997
14064
  };
13998
14065
  if (r.op === "replace") {
13999
- let t = Tg(n, r.find);
14066
+ let t = Og(n, r.find);
14000
14067
  if (t === 0) return {
14001
14068
  ok: !1,
14002
14069
  error: `第 ${e + 1} 个 op(replace)锚点未命中 —— 锚文本在当前内容中不存在(可能锚写错或基底已变),请核对 read_content 的原文后重试`
@@ -14007,7 +14074,7 @@ function Eg(e, t) {
14007
14074
  };
14008
14075
  n = n.replace(r.find, r.with);
14009
14076
  } else if (r.op === "insertAfter" || r.op === "insertBefore") {
14010
- let t = Tg(n, r.anchor);
14077
+ let t = Og(n, r.anchor);
14011
14078
  if (t === 0) return {
14012
14079
  ok: !1,
14013
14080
  error: `第 ${e + 1} 个 op(${r.op})锚点未命中 —— 请核对 read_content 的原文后重试`
@@ -14029,14 +14096,14 @@ function Eg(e, t) {
14029
14096
  content: n
14030
14097
  };
14031
14098
  }
14032
- function Dg(e) {
14099
+ function Ag(e) {
14033
14100
  let t = String(e ?? ""), n = 2166136261;
14034
14101
  for (let e = 0; e < t.length; e += 1) n ^= t.charCodeAt(e), n = Math.imul(n, 16777619);
14035
14102
  return (n >>> 0).toString(36);
14036
14103
  }
14037
14104
  //#endregion
14038
14105
  //#region src/core/sdk/proposals.ts
14039
- function Og(e) {
14106
+ function jg(e) {
14040
14107
  return {
14041
14108
  read: e.read,
14042
14109
  onProposal: e.onProposal,
@@ -14046,14 +14113,14 @@ function Og(e) {
14046
14113
  maxPending: Math.max(1, e.maxPending ?? 1)
14047
14114
  };
14048
14115
  }
14049
- async function kg(e) {
14116
+ async function Mg(e) {
14050
14117
  try {
14051
14118
  return await e.read();
14052
14119
  } catch (e) {
14053
14120
  return { __err: e };
14054
14121
  }
14055
14122
  }
14056
- var Ag = t.discriminatedUnion("op", [
14123
+ var Ng = t.discriminatedUnion("op", [
14057
14124
  t.object({
14058
14125
  op: t.literal("replace"),
14059
14126
  find: t.string().min(1).describe("要替换的原文片段(字面匹配,须在全文唯一 —— 多带上下文保唯一)"),
@@ -14074,8 +14141,8 @@ var Ag = t.discriminatedUnion("op", [
14074
14141
  text: t.string().describe("追加到全文末尾的文本")
14075
14142
  })
14076
14143
  ]);
14077
- function jg(e, n) {
14078
- let r = Og(e), i = {
14144
+ function Pg(e, n) {
14145
+ let r = jg(e), i = {
14079
14146
  pending: [],
14080
14147
  applied: 0,
14081
14148
  discarded: 0,
@@ -14116,11 +14183,11 @@ function jg(e, n) {
14116
14183
  summary: o.summary
14117
14184
  }), !0;
14118
14185
  }, c = s(async () => {
14119
- let e = await kg(r);
14186
+ let e = await Mg(r);
14120
14187
  if (e && typeof e == "object" && "__err" in e) return `读取失败:${String(e.__err ?? "未知错误")}。请如实告知用户,不要编造内容。`;
14121
14188
  let t = e;
14122
14189
  if (!t || typeof t.content != "string") return "当前没有可编辑的内容对象(宿主 read 返回空)。请如实告知用户,不要编造内容。";
14123
- let i = Dg(t.content);
14190
+ let i = Ag(t.content);
14124
14191
  return n.log("read", {
14125
14192
  hash: i,
14126
14193
  chars: t.content.length
@@ -14132,7 +14199,7 @@ function jg(e, n) {
14132
14199
  }), l = t.object({
14133
14200
  summary: t.string().describe("一句话修改说明(展示在评审面板):改了什么、为什么"),
14134
14201
  baseHash: t.string().describe("read_content 返回的 hash(基底锚定;基底已变会被拒,须重读)"),
14135
- ops: t.array(Ag).min(1).max(50).optional().describe("增量操作(顺序应用,原子;推荐 —— token 只花在改动上,勿全量重发)"),
14202
+ ops: t.array(Ng).min(1).max(50).optional().describe("增量操作(顺序应用,原子;推荐 —— token 只花在改动上,勿全量重发)"),
14136
14203
  content: t.string().optional().describe(`修改后的完整${r.contentKind}(小改动可直发;与 ops 二选一)`)
14137
14204
  }).superRefine((e, n) => {
14138
14205
  (Array.isArray(e.ops) && e.ops.length > 0) === (typeof e.content == "string" && e.content.length > 0) && n.addIssue({
@@ -14140,13 +14207,13 @@ function jg(e, n) {
14140
14207
  message: "ops 与 content 必须二选一(且只给一个)"
14141
14208
  });
14142
14209
  }), u = [c, s(async (e) => {
14143
- let t = await kg(r);
14210
+ let t = await Mg(r);
14144
14211
  if (t && typeof t == "object" && "__err" in t) return `提案被拒:读取当前内容失败(${String(t.__err ?? "未知错误")})。`;
14145
14212
  let a = t;
14146
14213
  if (!a || typeof a.content != "string") return "提案被拒:当前没有可编辑的内容对象。";
14147
- let o = a.content, s = typeof a.label == "string" ? a.label : void 0, c = Dg(o);
14214
+ let o = a.content, s = typeof a.label == "string" ? a.label : void 0, c = Ag(o);
14148
14215
  if (e.baseHash !== c) return n.log("rejected", { reason: "base_hash_mismatch" }), `提案被拒:基底已变(read_content 之后内容被修改,hash 不匹配)。请重新 ${r.readToolName} 取当前原文与 hash 后基于新基底重提 —— 不要在旧印象上猜测改动。`;
14149
- let l = Array.isArray(e.ops) && e.ops.length > 0 ? Eg(o, e.ops) : {
14216
+ let l = Array.isArray(e.ops) && e.ops.length > 0 ? kg(o, e.ops) : {
14150
14217
  ok: !0,
14151
14218
  content: String(e.content ?? "")
14152
14219
  };
@@ -14169,7 +14236,7 @@ function jg(e, n) {
14169
14236
  baseHash: c,
14170
14237
  baseContent: o,
14171
14238
  content: u,
14172
- diff: Cg(o, u),
14239
+ diff: Eg(o, u),
14173
14240
  createdAt: Date.now()
14174
14241
  };
14175
14242
  i.pending.push(d), n.log("pending", {
@@ -14206,8 +14273,8 @@ function jg(e, n) {
14206
14273
  }
14207
14274
  //#endregion
14208
14275
  //#region src/core/tools/fetchDoc.ts
14209
- var Mg = 3e4, Ng = [s(async ({ url: e, as: t }) => {
14210
- let n = new AbortController(), r = setTimeout(() => n.abort(), Mg);
14276
+ var Fg = 3e4, Ig = [s(async ({ url: e, as: t }) => {
14277
+ let n = new AbortController(), r = setTimeout(() => n.abort(), Fg);
14211
14278
  try {
14212
14279
  let r = await fetch(e, {
14213
14280
  method: "GET",
@@ -14224,7 +14291,7 @@ var Mg = 3e4, Ng = [s(async ({ url: e, as: t }) => {
14224
14291
  ].join("\n");
14225
14292
  } catch (t) {
14226
14293
  let r = t?.message || String(t);
14227
- return n.signal.aborted ? `获取失败:请求超时(${Mg}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
14294
+ return n.signal.aborted ? `获取失败:请求超时(${Fg}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
14228
14295
  } finally {
14229
14296
  clearTimeout(r);
14230
14297
  }
@@ -14235,7 +14302,7 @@ var Mg = 3e4, Ng = [s(async ({ url: e, as: t }) => {
14235
14302
  url: t.string().describe("要抓取的 URL(同源或已配 CORS)"),
14236
14303
  as: t.enum(["text", "markdown"]).optional().describe("返回格式标签,默认 text")
14237
14304
  })
14238
- })], Pg = [
14305
+ })], Lg = [
14239
14306
  "id",
14240
14307
  "class",
14241
14308
  "href",
@@ -14247,12 +14314,12 @@ var Mg = 3e4, Ng = [s(async ({ url: e, as: t }) => {
14247
14314
  "aria-label",
14248
14315
  "name",
14249
14316
  "type"
14250
- ], Fg = /^(value|srcdoc|formaction|on\w+)$/i, Ig = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session/i;
14251
- function Lg(e, t) {
14317
+ ], Rg = /^(value|srcdoc|formaction|on\w+)$/i, zg = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session/i;
14318
+ function Bg(e, t) {
14252
14319
  if (!e) return null;
14253
- let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ?? Pg, s = (e) => {
14320
+ let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ?? Lg, s = (e) => {
14254
14321
  let t = {};
14255
- for (let n of Array.from(e.attributes)) (a ? o.includes(n.name) : o.includes(n.name) || n.name.startsWith("data-")) && (Fg.test(n.name) || Ig.test(n.name) || (t[n.name] = n.value));
14322
+ for (let n of Array.from(e.attributes)) (a ? o.includes(n.name) : o.includes(n.name) || n.name.startsWith("data-")) && (Rg.test(n.name) || zg.test(n.name) || (t[n.name] = n.value));
14256
14323
  return t;
14257
14324
  }, c = (e, t) => {
14258
14325
  let n = {
@@ -14268,11 +14335,11 @@ function Lg(e, t) {
14268
14335
  };
14269
14336
  return c(e, n);
14270
14337
  }
14271
- var Rg = s(({ selector: e, depth: t, attrs: n, includeText: r }) => {
14338
+ var Vg = s(({ selector: e, depth: t, attrs: n, includeText: r }) => {
14272
14339
  if (typeof document > "u") return "ERROR: get_dom 仅在浏览器环境可用(当前运行在 node/服务端,无 DOM)。请改用数据工具(read/schema_data)排查结构。";
14273
14340
  let i = e ? document.querySelector(e) : document.body;
14274
14341
  if (!i) return `未找到匹配元素:selector="${e}"`;
14275
- let a = Lg(i, {
14342
+ let a = Bg(i, {
14276
14343
  depth: t ?? 3,
14277
14344
  attrs: n,
14278
14345
  includeText: r ?? !0
@@ -14287,7 +14354,7 @@ var Rg = s(({ selector: e, depth: t, attrs: n, includeText: r }) => {
14287
14354
  attrs: t.array(t.string()).optional().describe("属性白名单(传了 = 严格白名单;不传 = 默认常用 + data-*)"),
14288
14355
  includeText: t.boolean().optional().describe("是否包含直接文本(默认 true)")
14289
14356
  })
14290
- }), zg = [
14357
+ }), Hg = [
14291
14358
  "article",
14292
14359
  "main",
14293
14360
  "[role=\"main\"]",
@@ -14296,7 +14363,7 @@ var Rg = s(({ selector: e, depth: t, attrs: n, includeText: r }) => {
14296
14363
  ".post-content",
14297
14364
  ".markdown-body",
14298
14365
  "#content"
14299
- ], Bg = /* @__PURE__ */ new Set([
14366
+ ], Ug = /* @__PURE__ */ new Set([
14300
14367
  "script",
14301
14368
  "style",
14302
14369
  "noscript",
@@ -14304,15 +14371,15 @@ var Rg = s(({ selector: e, depth: t, attrs: n, includeText: r }) => {
14304
14371
  "svg",
14305
14372
  "iframe",
14306
14373
  "canvas"
14307
- ]), Vg = "script,style,noscript,template,svg,iframe,canvas";
14308
- function Hg(e) {
14309
- for (let t of zg) try {
14374
+ ]), Wg = "script,style,noscript,template,svg,iframe,canvas";
14375
+ function Gg(e) {
14376
+ for (let t of Hg) try {
14310
14377
  let n = e.querySelector?.(t);
14311
14378
  if (n) return n;
14312
14379
  } catch {}
14313
14380
  return e.body ?? null;
14314
14381
  }
14315
- function Ug(e, t, n) {
14382
+ function Kg(e, t, n) {
14316
14383
  if (!e) return "";
14317
14384
  let r = [], i = (e) => {
14318
14385
  let t = (e.innerText ?? e.textContent ?? "").replace(/\r\n/g, "\n").replace(/\n{3,}/g, "\n\n").trim();
@@ -14320,7 +14387,7 @@ function Ug(e, t, n) {
14320
14387
  }, a = (e) => {
14321
14388
  for (let r of Array.from(e.children ?? [])) {
14322
14389
  let e = r, o = String(e.tagName ?? "").toLowerCase();
14323
- if (!(t(e) || Bg.has(o))) {
14390
+ if (!(t(e) || Ug.has(o))) {
14324
14391
  if (!n(e)) {
14325
14392
  i(e);
14326
14393
  continue;
@@ -14331,21 +14398,21 @@ function Ug(e, t, n) {
14331
14398
  };
14332
14399
  return a(e), r.join("\n\n").trim();
14333
14400
  }
14334
- function Wg(e) {
14401
+ function qg(e) {
14335
14402
  try {
14336
- return e.querySelector?.(Vg) != null || e.querySelector?.(".chat-dialog, .chat-mask, .debug-drawer, .skill-mask, .skill-panel, .chat-selection-menu") != null;
14403
+ return e.querySelector?.(Wg) != null || e.querySelector?.(".chat-dialog, .chat-mask, .debug-drawer, .skill-mask, .skill-panel, .chat-selection-menu") != null;
14337
14404
  } catch {
14338
14405
  return !0;
14339
14406
  }
14340
14407
  }
14341
- var Gg = [Rg, s(({ selector: e, offset: t, limit: n }) => {
14408
+ var Jg = [Vg, s(({ selector: e, offset: t, limit: n }) => {
14342
14409
  if (typeof document > "u") return "ERROR: read_page 仅在浏览器环境可用(当前运行在 node/服务端,无 DOM)。请基于用户消息中的引用原文回答。";
14343
14410
  let r, i;
14344
14411
  if (e) {
14345
14412
  if (r = document.querySelector(e), !r) return `未找到匹配元素:selector="${e}"`;
14346
14413
  i = e;
14347
- } else r = Hg(document), i = r ? r.tagName.toLowerCase() : "body";
14348
- let a = Ug(r, ji, Wg), o = t ?? 0, s = n ?? 4e3;
14414
+ } else r = Gg(document), i = r ? r.tagName.toLowerCase() : "body";
14415
+ let a = Kg(r, ji, qg), o = t ?? 0, s = n ?? 4e3;
14349
14416
  if (o > a.length) return `offset=${o} 超出正文长度 ${a.length}(先从 offset=0 读,按 hasMore 续读)`;
14350
14417
  let c = a.slice(o, o + s);
14351
14418
  return JSON.stringify({
@@ -14364,22 +14431,22 @@ var Gg = [Rg, s(({ selector: e, offset: t, limit: n }) => {
14364
14431
  offset: t.number().int().min(0).optional().describe("起始字符偏移(默认 0;续读传上次 offset + 返回 text 长度)"),
14365
14432
  limit: t.number().int().min(200).max(2e4).optional().describe("本次返回字符上限(默认 4000,上限 20000)")
14366
14433
  })
14367
- })], Kg = /* @__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("."), qg = /* @__PURE__ */ new WeakMap(), Jg = !1;
14368
- function Yg() {
14369
- if (Jg) return;
14434
+ })], Yg = /* @__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("."), Xg = /* @__PURE__ */ new WeakMap(), Zg = !1;
14435
+ function Qg() {
14436
+ if (Zg) return;
14370
14437
  let e = globalThis.EventTarget;
14371
14438
  if (!e?.prototype?.addEventListener) return;
14372
- Jg = !0;
14439
+ Zg = !0;
14373
14440
  let t = e.prototype.addEventListener, n = e.prototype.removeEventListener;
14374
14441
  e.prototype.addEventListener = function(e, ...n) {
14375
14442
  try {
14376
- let t = qg.get(this);
14377
- t || (t = /* @__PURE__ */ new Map(), qg.set(this, t)), t.set(String(e), (t.get(String(e)) ?? 0) + 1);
14443
+ let t = Xg.get(this);
14444
+ t || (t = /* @__PURE__ */ new Map(), Xg.set(this, t)), t.set(String(e), (t.get(String(e)) ?? 0) + 1);
14378
14445
  } catch {}
14379
14446
  return t.call(this, e, ...n);
14380
14447
  }, e.prototype.removeEventListener = function(e, ...t) {
14381
14448
  try {
14382
- let t = qg.get(this);
14449
+ let t = Xg.get(this);
14383
14450
  if (t) {
14384
14451
  let n = (t.get(String(e)) ?? 1) - 1;
14385
14452
  n <= 0 ? t.delete(String(e)) : t.set(String(e), n);
@@ -14388,10 +14455,10 @@ function Yg() {
14388
14455
  return n.call(this, e, ...t);
14389
14456
  };
14390
14457
  }
14391
- function Xg(e) {
14392
- return [...qg.get(e)?.entries() ?? []].filter(([, e]) => e > 0).map(([e]) => e);
14458
+ function $g(e) {
14459
+ return [...Xg.get(e)?.entries() ?? []].filter(([, e]) => e > 0).map(([e]) => e);
14393
14460
  }
14394
- function Zg(e, t = 12) {
14461
+ function e_(e, t = 12) {
14395
14462
  let n = [], r = e, i = 0;
14396
14463
  for (; r && r.tagName && i < t;) {
14397
14464
  let e = r.tagName.toLowerCase(), t = r.id;
@@ -14412,7 +14479,7 @@ function Zg(e, t = 12) {
14412
14479
  }
14413
14480
  return n.join(" > ");
14414
14481
  }
14415
- function Qg(e, t, n = {}) {
14482
+ function t_(e, t, n = {}) {
14416
14483
  if (!e) return {
14417
14484
  hits: [],
14418
14485
  total: 0,
@@ -14450,7 +14517,7 @@ function Qg(e, t, n = {}) {
14450
14517
  n = r.slice(Math.max(0, i - 20), i + t.length + 40);
14451
14518
  }
14452
14519
  return {
14453
- selector: Zg(e),
14520
+ selector: e_(e),
14454
14521
  tag: e.tagName.toLowerCase(),
14455
14522
  text: n.slice(0, 120)
14456
14523
  };
@@ -14459,7 +14526,7 @@ function Qg(e, t, n = {}) {
14459
14526
  truncated: a.length > o
14460
14527
  };
14461
14528
  }
14462
- var $g = [
14529
+ var n_ = [
14463
14530
  "content",
14464
14531
  "display",
14465
14532
  "width",
@@ -14467,14 +14534,14 @@ var $g = [
14467
14534
  "background-color",
14468
14535
  "position"
14469
14536
  ];
14470
- function e_(e, t = {}) {
14537
+ function r_(e, t = {}) {
14471
14538
  if (!e) return null;
14472
14539
  let n = {
14473
- selector: Zg(e),
14540
+ selector: e_(e),
14474
14541
  tag: e.tagName.toLowerCase(),
14475
14542
  attrs: {}
14476
14543
  };
14477
- for (let t of Array.from(e.attributes)) !(Pg.includes(t.name) || t.name.startsWith("data-")) || Fg.test(t.name) || Ig.test(t.name) || (n.attrs[t.name] = t.value);
14544
+ for (let t of Array.from(e.attributes)) !(Lg.includes(t.name) || t.name.startsWith("data-")) || Rg.test(t.name) || zg.test(t.name) || (n.attrs[t.name] = t.value);
14478
14545
  let r = Array.from(e.childNodes).filter((e) => e.nodeType === 3).map((e) => e.textContent || "").join("").trim();
14479
14546
  r && (n.text = r.slice(0, 400));
14480
14547
  let i = String(e.innerText ?? e.textContent ?? "").trim();
@@ -14496,7 +14563,7 @@ function e_(e, t = {}) {
14496
14563
  if (typeof a != "function") return r;
14497
14564
  try {
14498
14565
  let i = a(e, n ?? null);
14499
- for (let e of n ? $g : t.styles ?? Kg) {
14566
+ for (let e of n ? n_ : t.styles ?? Yg) {
14500
14567
  let t = typeof i.getPropertyValue == "function" ? i.getPropertyValue(e) : i[e];
14501
14568
  t && (r[e] = String(t).slice(0, 200));
14502
14569
  }
@@ -14514,16 +14581,16 @@ function e_(e, t = {}) {
14514
14581
  n.events = {
14515
14582
  inline: t,
14516
14583
  vue: r ? Object.keys(r).filter((e) => /^on[A-Z]/.test(e)).map((e) => e.slice(2).toLowerCase()) : [],
14517
- captured: Xg(e)
14584
+ captured: $g(e)
14518
14585
  };
14519
14586
  }
14520
14587
  return n;
14521
14588
  }
14522
- var t_ = s(({ query: e, mode: t, limit: n, root: r }) => {
14523
- Yg();
14589
+ var i_ = s(({ query: e, mode: t, limit: n, root: r }) => {
14590
+ Qg();
14524
14591
  let i = r ? document.querySelector(r) : document;
14525
14592
  if (r && !i) return `未找到 root 元素:selector="${r}"`;
14526
- let a = Qg(i, e, {
14593
+ let a = t_(i, e, {
14527
14594
  mode: t,
14528
14595
  limit: n
14529
14596
  });
@@ -14540,11 +14607,11 @@ var t_ = s(({ query: e, mode: t, limit: n, root: r }) => {
14540
14607
  limit: t.number().int().min(1).max(20).optional().describe("返回上限(默认 10)"),
14541
14608
  root: t.string().optional().describe("限定搜索范围的容器选择器(默认整页)")
14542
14609
  })
14543
- }), n_ = s(({ selector: e, styles: t, includeHtml: n, htmlLimit: r, includeEvents: i, includeRect: a, pseudo: o }) => {
14544
- Yg();
14610
+ }), a_ = s(({ selector: e, styles: t, includeHtml: n, htmlLimit: r, includeEvents: i, includeRect: a, pseudo: o }) => {
14611
+ Qg();
14545
14612
  let s = document.querySelector(e);
14546
14613
  if (!s) return `未找到匹配元素:selector="${e}"(可先用 dom_search 定位)`;
14547
- let c = e_(s, {
14614
+ let c = r_(s, {
14548
14615
  styles: t,
14549
14616
  includeHtml: n,
14550
14617
  htmlLimit: r,
@@ -14565,10 +14632,10 @@ var t_ = s(({ query: e, mode: t, limit: n, root: r }) => {
14565
14632
  includeRect: t.boolean().optional().describe("是否含几何位置(默认 true)"),
14566
14633
  pseudo: t.boolean().optional().describe("是否含 ::before/::after 伪元素摘要(默认 false)")
14567
14634
  })
14568
- }), r_ = "dom-inspect";
14569
- function i_(e = {}) {
14635
+ }), o_ = "dom-inspect";
14636
+ function s_(e = {}) {
14570
14637
  return {
14571
- name: r_,
14638
+ name: o_,
14572
14639
  description: "页面 DOM 深度检视工具(dom_search 搜索元素 / dom_info 读内容·计算样式·事件绑定·几何)。定位元素、验证样式落地、排查交互绑定时加载",
14573
14640
  getContent: () => [
14574
14641
  "# DOM 检视工具用法",
@@ -14599,13 +14666,13 @@ function i_(e = {}) {
14599
14666
  "## 排障套路",
14600
14667
  ...e.withScreenshot ? ["1. dom_search(mode:\"text\", query:按钮文案) 定位 → 2. 视觉验证 take_screenshot / 结构验证 dom_info(styles) → 3. " + (e.withDataOps ? "不符则改数据(write 修正后再验证)" : "不符则如实报告差异(页面为真值;本页面无数据写通道,调整预期或告知用户)")] : ["1. dom_search(mode:\"text\", query:按钮文案) 定位 → 2. dom_info(styles:[\"display\",\"background-color\",\"pointer-events\"]) 验证样式/点击性 → 3. " + (e.withDataOps ? "不符则改数据(write 修正后再验证)" : "不符则如实报告差异(页面为真值;本页面无数据写通道,调整预期或告知用户)")]
14601
14668
  ].join("\n"),
14602
- tools: [() => [t_, n_]]
14669
+ tools: [() => [i_, a_]]
14603
14670
  };
14604
14671
  }
14605
- var a_ = "page-analysis";
14606
- function o_(e = {}) {
14672
+ var c_ = "page-analysis";
14673
+ function l_(e = {}) {
14607
14674
  return {
14608
- name: a_,
14675
+ name: c_,
14609
14676
  description: "页面内容分析策略:按问题类型选工具(引用原文/整页理解/定位/结构/视觉/页面操作),含分页探索纪律与基于页面实料的回答纪律。回答用户关于当前页面的问题时加载",
14610
14677
  getContent: () => [
14611
14678
  "# 页面内容分析策略",
@@ -14634,14 +14701,14 @@ function o_(e = {}) {
14634
14701
  ].join("\n")
14635
14702
  };
14636
14703
  }
14637
- var s_ = i_();
14704
+ var u_ = s_();
14638
14705
  //#endregion
14639
14706
  //#region src/core/tools/envTool.ts
14640
- function c_(e) {
14707
+ function d_(e) {
14641
14708
  let t = e;
14642
14709
  return typeof t.tagName == "string" || typeof t.nodeType == "number" && typeof t.nodeName == "string";
14643
14710
  }
14644
- function l_(e, t = 3, n = 2e3, r, i) {
14711
+ function f_(e, t = 3, n = 2e3, r, i) {
14645
14712
  if (e == null) return e;
14646
14713
  if (typeof e == "string") return e.length > n ? e.slice(0, n) + "…(已截断)" : e;
14647
14714
  if (typeof e == "number" || typeof e == "boolean") return e;
@@ -14650,14 +14717,14 @@ function l_(e, t = 3, n = 2e3, r, i) {
14650
14717
  if (typeof e == "bigint") return `${e.toString()}n`;
14651
14718
  if (typeof e != "object") return String(e);
14652
14719
  let a = e;
14653
- if (c_(a)) {
14720
+ if (d_(a)) {
14654
14721
  let e = a;
14655
14722
  return e.tagName ? `[Element: <${e.tagName.toLowerCase()}>]` : `[Node: ${e.nodeName}]`;
14656
14723
  }
14657
14724
  if (r?.has(a)) return "[Circular]";
14658
14725
  let o = r ?? /* @__PURE__ */ new WeakSet();
14659
14726
  if (o.add(a), Array.isArray(e)) {
14660
- let r = e.slice(0, 100).map((e) => l_(e, t - 1, n, o, i));
14727
+ let r = e.slice(0, 100).map((e) => f_(e, t - 1, n, o, i));
14661
14728
  return e.length > 100 && r.push(`…(共 ${e.length} 项,已截断)`), r;
14662
14729
  }
14663
14730
  if (t < 0) return "(对象,已截断)";
@@ -14670,14 +14737,14 @@ function l_(e, t = 3, n = 2e3, r, i) {
14670
14737
  }
14671
14738
  try {
14672
14739
  let e = a[r];
14673
- i?.test(r) ? s[r] = "[REDACTED]" : s[r] = l_(e, t - 1, n, o, i);
14740
+ i?.test(r) ? s[r] = "[REDACTED]" : s[r] = f_(e, t - 1, n, o, i);
14674
14741
  } catch {
14675
14742
  s[r] = "(getter 抛错)";
14676
14743
  }
14677
14744
  }
14678
14745
  return s;
14679
14746
  }
14680
- function u_(e) {
14747
+ function p_(e) {
14681
14748
  let t = e ?? (typeof window < "u" ? window : {}), n = t.navigator, r = t.location, i = t.document;
14682
14749
  return {
14683
14750
  location: {
@@ -14710,9 +14777,9 @@ function u_(e) {
14710
14777
  } : "(无 document)"
14711
14778
  };
14712
14779
  }
14713
- var d_ = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|opener|parent|top|self|window|globalThis|closed|history|navigation|trustedTypes|origin|crossOriginIsolated)$/, f_ = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session|ticket/i, p_ = s(({ key: e }) => {
14780
+ var m_ = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|opener|parent|top|self|window|globalThis|closed|history|navigation|trustedTypes|origin|crossOriginIsolated)$/, h_ = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session|ticket/i, g_ = s(({ key: e }) => {
14714
14781
  if (e) {
14715
- if (d_.test(e) || f_.test(e)) return JSON.stringify({
14782
+ if (m_.test(e) || h_.test(e)) return JSON.stringify({
14716
14783
  key: e,
14717
14784
  denied: !0,
14718
14785
  reason: "安全:该 key 在 denylist(localStorage/sessionStorage/cookie/document 或敏感命名 token/secret/key/auth),不读取防泄漏"
@@ -14722,18 +14789,18 @@ var d_ = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|open
14722
14789
  key: e,
14723
14790
  exists: t !== void 0,
14724
14791
  type: typeof t,
14725
- value: l_(t, 3, 2e3, void 0, f_)
14792
+ value: f_(t, 3, 2e3, void 0, h_)
14726
14793
  }, null, 2);
14727
14794
  }
14728
- return JSON.stringify(u_(), null, 2);
14795
+ return JSON.stringify(p_(), null, 2);
14729
14796
  }, {
14730
14797
  name: "inspect_env",
14731
14798
  description: "读宿主页面环境信息(排查调试)。不传参返回摘要(URL/origin、浏览器/语言、viewport、title/readyState);传 key 读指定 window 属性值(如 key:\"appConfig\")。只读,大结果自动外存 vfs。",
14732
14799
  schema: t.object({ key: t.string().optional().describe("要读取的 window 属性名(如 \"appConfig\"/\"__DEBUG__\");不传 = 返回环境摘要") })
14733
- }), m_ = [p_];
14800
+ }), __ = [g_];
14734
14801
  //#endregion
14735
14802
  //#region src/core/harness/budget.ts
14736
- function h_(e, t, n) {
14803
+ function v_(e, t, n) {
14737
14804
  let i = 0;
14738
14805
  return {
14739
14806
  name: "budget",
@@ -14758,12 +14825,12 @@ function h_(e, t, n) {
14758
14825
  }
14759
14826
  //#endregion
14760
14827
  //#region src/core/sdk/actions.ts
14761
- var g_ = /^[a-zA-Z][a-zA-Z0-9_]*$/;
14762
- function __(e) {
14828
+ var y_ = /^[a-zA-Z][a-zA-Z0-9_]*$/;
14829
+ function b_(e) {
14763
14830
  let n = [];
14764
14831
  for (let [r, i] of Object.entries(e)) {
14765
- if (!g_.test(r)) {
14766
- console.warn(`[page-agent-sdk][actions] 动作名 "${r}" 非法(须匹配 ${g_}),已跳过`);
14832
+ if (!y_.test(r)) {
14833
+ console.warn(`[page-agent-sdk][actions] 动作名 "${r}" 非法(须匹配 ${y_}),已跳过`);
14767
14834
  continue;
14768
14835
  }
14769
14836
  let e = i.description || `宿主动作 ${r}`;
@@ -14783,9 +14850,9 @@ function __(e) {
14783
14850
  }
14784
14851
  return n;
14785
14852
  }
14786
- function v_(e) {
14853
+ function x_(e) {
14787
14854
  let t = {};
14788
- for (let [n, r] of Object.entries(e)) g_.test(n) && (t[n] = {
14855
+ for (let [n, r] of Object.entries(e)) y_.test(n) && (t[n] = {
14789
14856
  description: r.description,
14790
14857
  hasParams: !!r.params,
14791
14858
  readsHostState: r.readsHostState === !0,
@@ -14795,11 +14862,11 @@ function v_(e) {
14795
14862
  }
14796
14863
  //#endregion
14797
14864
  //#region src/core/toolsets.ts
14798
- var y_ = Ng, b_ = Gg;
14799
- function x_(e, t) {
14865
+ var S_ = Ig, C_ = Jg;
14866
+ function w_(e, t) {
14800
14867
  return hf(e, t);
14801
14868
  }
14802
- function S_(e, t, n, r, i) {
14869
+ function T_(e, t, n, r, i) {
14803
14870
  let a = bm(e);
14804
14871
  return [
14805
14872
  ...a.dataOps ? t : [],
@@ -14810,13 +14877,13 @@ function S_(e, t, n, r, i) {
14810
14877
  }
14811
14878
  //#endregion
14812
14879
  //#region src/core/harness/usageHints.ts
14813
- var C_ = .7, w_ = .5, T_ = .85;
14814
- function E_(e, t) {
14815
- if (!Number.isFinite(t) || t <= 0 || e <= 0 || e < t * w_) return "";
14880
+ var E_ = .7, D_ = .5, O_ = .85;
14881
+ function k_(e, t) {
14882
+ if (!Number.isFinite(t) || t <= 0 || e <= 0 || e < t * D_) return "";
14816
14883
  let n = Math.max(1, Math.round(e / 1e3));
14817
- return e >= t * T_ ? `⏳ 预算告急:本任务累计约 ${n}K prompt tokens(已达 softCap 上限的 ${Math.round(T_ * 100)}%)。立即停止扩展性操作(新查询/重读/优化),完成手头最关键一步后基于已有工具结果给出结论,并如实汇报剩余未完成项。轮次预算吃紧时系统会另行注入轮次提示段。` : `⏳ 预算提示:本任务累计约 ${n}K prompt tokens(已过 softCap 半程)。若已接近目标请收敛并给出总结;尚未接近请向用户汇报进度与剩余计划,勿默默继续。轮次预算吃紧时系统会另行注入轮次提示段。`;
14884
+ return e >= t * O_ ? `⏳ 预算告急:本任务累计约 ${n}K prompt tokens(已达 softCap 上限的 ${Math.round(O_ * 100)}%)。立即停止扩展性操作(新查询/重读/优化),完成手头最关键一步后基于已有工具结果给出结论,并如实汇报剩余未完成项。轮次预算吃紧时系统会另行注入轮次提示段。` : `⏳ 预算提示:本任务累计约 ${n}K prompt tokens(已过 softCap 半程)。若已接近目标请收敛并给出总结;尚未接近请向用户汇报进度与剩余计划,勿默默继续。轮次预算吃紧时系统会另行注入轮次提示段。`;
14818
14885
  }
14819
- function D_(e, t, n) {
14886
+ function A_(e, t, n) {
14820
14887
  let r = bm(e);
14821
14888
  return {
14822
14889
  name: "usageHints",
@@ -14826,14 +14893,14 @@ function D_(e, t, n) {
14826
14893
  let n = t && e?.hasActions ? "配合宿主 actions(save_draft/publish 等)形成\"改数据→截图/get_dom 看渲染→触发动作\"闭环。" : t ? "改完数据可用截图/get_dom 查看渲染效果(本集成未注册宿主动作)。" : "";
14827
14894
  a.push(`回答用户关于当前页面/文档的问题时优先用 read_page({selector?,offset?,limit?}) 读页面正文纯文本(长文按 hasMore 分页续读;自动排除本对话框自身);需要页面结构(检查渲染是否生效/定位元素/辅助 UI 设计问答)再用 get_dom({selector?,depth?}) 读渲染后 DOM(结构化返回 tag/attrs/text/children,depth 控制深度防爆炸,只读)。${n}`);
14828
14895
  }
14829
- if (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。"), e?.hasProposals && a.push("【内容修改(提案制)】修改当前内容(文章/笔记/文档)只有一条通道:①先 read_content 取真实原文与 hash;②propose_content 带 baseHash 提案 —— 优先 ops 增量操作(replace/insertAfter/insertBefore/append,find/anchor 用原文字面片段且须唯一命中,多带上下文保唯一),勿全量重发整篇(token 只花在改动上);③提案仅送达:评审面板打开、用户点「应用」才会写回 —— 提案后如实告知用户待确认,勿声称已修改;用户裁决结果会在下一轮告知你,以裁决为准作答。"), 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) {
14830
- let t = e.subagents.filter((e) => (e.temperature ?? 0) >= C_ || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), n = e.subagents.filter((e) => (e.temperature ?? 0) < C_ && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
14896
+ if (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。"), e?.viewImage && a.push("看「页面数据里的某张图」(轮播第 N 帧/商品图/封面,read 结果里有其 URL)用 view_image({url}) 原图直投 —— 问特定帧时勿截当前渲染帧(自动轮播可能已切帧);要看渲染后的组件(布局/叠加文案)才用 take_screenshot。"), e?.hasProposals && a.push("【内容修改(提案制)】修改当前内容(文章/笔记/文档)只有一条通道:①先 read_content 取真实原文与 hash;②propose_content 带 baseHash 提案 —— 优先 ops 增量操作(replace/insertAfter/insertBefore/append,find/anchor 用原文字面片段且须唯一命中,多带上下文保唯一),勿全量重发整篇(token 只花在改动上);③提案仅送达:评审面板打开、用户点「应用」才会写回 —— 提案后如实告知用户待确认,勿声称已修改;用户裁决结果会在下一轮告知你,以裁决为准作答。"), 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) {
14897
+ let t = e.subagents.filter((e) => (e.temperature ?? 0) >= E_ || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), n = e.subagents.filter((e) => (e.temperature ?? 0) < E_ && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
14831
14898
  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(" · 简单/明确任务(如\"标题改红色\")直接执行,不必走规划-反思。");
14832
14899
  }
14833
14900
  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("用户在选项里选了哪个,就按那个方案继续;选「拒绝」则停止并询问如何调整。"));
14834
14901
  let o = i?.loopProgress;
14835
14902
  if (o) {
14836
- let e = E_(o.invokeUsage.prompt_tokens || o.invokeUsage.total_tokens, n?.promptSoftCap ?? Infinity);
14903
+ let e = k_(o.invokeUsage.prompt_tokens || o.invokeUsage.total_tokens, n?.promptSoftCap ?? Infinity);
14837
14904
  e && a.push(e);
14838
14905
  let t = Object.entries(o.writeFailures).filter(([, e]) => e >= 2);
14839
14906
  if (t.length) {
@@ -14847,7 +14914,7 @@ function D_(e, t, n) {
14847
14914
  }
14848
14915
  //#endregion
14849
14916
  //#region src/core/harness/pageContext.ts
14850
- function O_(e, t) {
14917
+ function j_(e, t) {
14851
14918
  let n = [
14852
14919
  "[当前页面] 用户正在浏览:",
14853
14920
  `- 标题:${e.title}`,
@@ -14856,18 +14923,18 @@ function O_(e, t) {
14856
14923
  ];
14857
14924
  return t && n.push("需要页面正文时用 read_page 读取纯文本(长文按 hasMore 分页续读);读结构用 get_dom。"), n.join("\n");
14858
14925
  }
14859
- function k_(e) {
14926
+ function M_(e) {
14860
14927
  return {
14861
14928
  name: "pageContext",
14862
14929
  augmentPrompt: () => {
14863
14930
  let t = e.getPageInfo();
14864
- if (t) return O_(t, e.canReadPage);
14931
+ if (t) return j_(t, e.canReadPage);
14865
14932
  }
14866
14933
  };
14867
14934
  }
14868
14935
  //#endregion
14869
14936
  //#region src/core/harness/resourcesPin.ts
14870
- function A_(e) {
14937
+ function N_(e) {
14871
14938
  return {
14872
14939
  name: "resourcesPin",
14873
14940
  augmentPrompt: () => {
@@ -14881,15 +14948,15 @@ function A_(e) {
14881
14948
  }
14882
14949
  //#endregion
14883
14950
  //#region src/core/backends/skillStore.ts
14884
- var j_ = "v:1::skill-store", M_ = "chat-sdk";
14885
- function N_(e, t, n) {
14886
- return `${j_}::${e}::${t}::${n}`;
14951
+ var P_ = "v:1::skill-store", F_ = "chat-sdk";
14952
+ function I_(e, t, n) {
14953
+ return `${P_}::${e}::${t}::${n}`;
14887
14954
  }
14888
- function P_(e, t) {
14889
- return `${j_}::${e}::${t}::`;
14955
+ function L_(e, t) {
14956
+ return `${P_}::${e}::${t}::`;
14890
14957
  }
14891
- function F_(e = {}) {
14892
- let t = e.dbName ?? M_, n = e.backend ?? "indexed", r = e.id ?? "", i, a, o = new Promise((e) => {
14958
+ function R_(e = {}) {
14959
+ let t = e.dbName ?? F_, n = e.backend ?? "indexed", r = e.id ?? "", i, a, o = new Promise((e) => {
14893
14960
  a = e;
14894
14961
  });
14895
14962
  return (async () => {
@@ -14911,36 +14978,36 @@ function F_(e = {}) {
14911
14978
  ready: o,
14912
14979
  async list() {
14913
14980
  let e = [];
14914
- return await i.scan(P_(t, r), (t, n) => {
14981
+ return await i.scan(L_(t, r), (t, n) => {
14915
14982
  e.push(n);
14916
14983
  }), e;
14917
14984
  },
14918
14985
  async get(e) {
14919
- return await i.get(N_(t, r, e));
14986
+ return await i.get(I_(t, r, e));
14920
14987
  },
14921
14988
  async put(e) {
14922
14989
  try {
14923
- await i.set(N_(t, r, e.name), e);
14990
+ await i.set(I_(t, r, e.name), e);
14924
14991
  } catch (e) {
14925
14992
  nm(e) && (i = um());
14926
14993
  }
14927
14994
  },
14928
14995
  async remove(e) {
14929
- let n = N_(t, r, e);
14996
+ let n = I_(t, r, e);
14930
14997
  return await i.get(n) == null ? !1 : (await i.del(n), !0);
14931
14998
  },
14932
14999
  async clear() {
14933
- await i.clearPrefix(P_(t, r));
15000
+ await i.clearPrefix(L_(t, r));
14934
15001
  },
14935
15002
  dispose() {}
14936
15003
  };
14937
15004
  }
14938
- var I_ = /large_results\/[^\s"'`),]+\.txt/g;
14939
- function L_(e) {
15005
+ var z_ = /large_results\/[^\s"'`),]+\.txt/g;
15006
+ function B_(e) {
14940
15007
  let t = /* @__PURE__ */ new Set(), n = (e) => {
14941
15008
  if (typeof e != "string" || !e) return;
14942
15009
  let n;
14943
- for (I_.lastIndex = 0; (n = I_.exec(e)) !== null;) t.add(n[0]);
15010
+ for (z_.lastIndex = 0; (n = z_.exec(e)) !== null;) t.add(n[0]);
14944
15011
  };
14945
15012
  for (let r of e) {
14946
15013
  if (n(r.content), r.steps) for (let e of r.steps) n(e.result);
@@ -14948,14 +15015,14 @@ function L_(e) {
14948
15015
  }
14949
15016
  return t;
14950
15017
  }
14951
- function R_(e, t) {
15018
+ function V_(e, t) {
14952
15019
  let n = [];
14953
15020
  for (let r of Object.keys(e)) r.startsWith("large_results/") && !t.has(r) && n.push(r);
14954
15021
  return n;
14955
15022
  }
14956
15023
  //#endregion
14957
15024
  //#region src/core/utils/serialRunner.ts
14958
- function z_() {
15025
+ function H_() {
14959
15026
  let e = Promise.resolve();
14960
15027
  return function(t) {
14961
15028
  let n = e.then(t, t);
@@ -14964,24 +15031,24 @@ function z_() {
14964
15031
  }
14965
15032
  //#endregion
14966
15033
  //#region src/core/sdk/createChatSdk.ts
14967
- var B_ = 30, V_ = /* @__PURE__ */ new Map();
14968
- function H_(e, t) {
15034
+ var U_ = 30, W_ = /* @__PURE__ */ new Map();
15035
+ function G_(e, t) {
14969
15036
  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;
14970
15037
  }
14971
- function U_(e) {
15038
+ function K_(e) {
14972
15039
  return e === "spawn_agent" || e === "spawn_agents" || e.startsWith("use_");
14973
15040
  }
14974
- function W_(e, t, n, r) {
15041
+ function q_(e, t, n, r) {
14975
15042
  let i = 0;
14976
15043
  return {
14977
15044
  name: "sdk-events",
14978
15045
  wrapToolCall: async (t, r) => {
14979
- let i = await r(t), a = H_(t.name, t.args), o = typeof i.content == "string" && i.content.startsWith("ERROR:");
15046
+ let i = await r(t), a = G_(t.name, t.args), o = typeof i.content == "string" && i.content.startsWith("ERROR:");
14980
15047
  return a && !o ? e({
14981
15048
  type: "data_change",
14982
15049
  operation: a,
14983
15050
  value: n()?.bind
14984
- }) : i.status === "done" && !o && U_(t.name) && e({
15051
+ }) : i.status === "done" && !o && K_(t.name) && e({
14985
15052
  type: "data_change",
14986
15053
  operation: "edit",
14987
15054
  value: n()?.bind
@@ -15009,7 +15076,7 @@ function W_(e, t, n, r) {
15009
15076
  }
15010
15077
  };
15011
15078
  }
15012
- function G_(e, t, n, r, i) {
15079
+ function J_(e, t, n, r, i) {
15013
15080
  if (!n) return i && console.warn(`[page-agent-sdk][focus] capabilities.focus 关闭,${t} 忽略`), {
15014
15081
  ok: !1,
15015
15082
  error: "capabilities.focus 关闭"
@@ -15027,7 +15094,7 @@ function G_(e, t, n, r, i) {
15027
15094
  error: "当前无主数据 schema,无法聚焦"
15028
15095
  });
15029
15096
  }
15030
- function K_(e, n, r) {
15097
+ function Y_(e, n, r) {
15031
15098
  let a = {
15032
15099
  prompt_tokens: 0,
15033
15100
  completion_tokens: 0,
@@ -15052,9 +15119,9 @@ function K_(e, n, r) {
15052
15119
  }
15053
15120
  let y = wm(e, g.contextWindow), b = y.enableLLMSummary !== !1, x = (e.contextOptions && e.contextOptions.preserveLastToolResults) ?? Cm[e.contextPreset ?? "auto"], S = new Set(x), C = e.llm;
15054
15121
  e.debug && !d && console.warn("[page-agent-sdk][summarization] 未构造 llmInvoke(apiKey 缺失?),摘要回退零成本索引摘要");
15055
- let w = /* @__PURE__ */ Pt([]), T = xd(e.vfs?.initialFiles, {
15122
+ let w = /* @__PURE__ */ Ft([]), T = xd(e.vfs?.initialFiles, {
15056
15123
  persist: l ? { save: (e) => {
15057
- hn.persistSave({ vfs: e });
15124
+ gn.persistSave({ vfs: e });
15058
15125
  } } : void 0,
15059
15126
  maxBytes: e.vfs?.maxBytes,
15060
15127
  poolBytes: e.vfs?.poolBytes
@@ -15082,7 +15149,7 @@ function K_(e, n, r) {
15082
15149
  context: e
15083
15150
  });
15084
15151
  }, oe = wu((e) => {
15085
- ne.lastPlanConfirmation = e, hn.persistSave({ planConfirmation: e }), X.agent?.debugLogs?.value?.push({
15152
+ ne.lastPlanConfirmation = e, gn.persistSave({ planConfirmation: e }), X.agent?.debugLogs?.value?.push({
15086
15153
  timestamp: Date.now(),
15087
15154
  type: "middleware",
15088
15155
  data: {
@@ -15149,7 +15216,7 @@ function K_(e, n, r) {
15149
15216
  vfsStore: _e || P?.resources?.length ? T : void 0,
15150
15217
  ...de.length ? { pgIdPaths: de } : {},
15151
15218
  ...fe.length ? { largeTextPaths: fe } : {}
15152
- }) : [], xe = ge ? V : [], H = ge && P ? V.controller ?? null : null, Se = ge && P ? V.previewWrite : void 0, Ce = ge && P?.resources?.length && H?.getResourcesSnapshot ? A_({ getResourcesSnapshot: () => H?.getResourcesSnapshot?.() ?? [] }) : void 0, U = () => H?.get() ?? P, we = new Set(V.map((e) => e.name)), Te = e.conflictWatchFields ?? [], Ee = !Te.includes("*") && Te.length ? new Set(Te) : void 0, W = H ? Jf({
15219
+ }) : [], xe = ge ? V : [], H = ge && P ? V.controller ?? null : null, Se = ge && P ? V.previewWrite : void 0, Ce = ge && P?.resources?.length && H?.getResourcesSnapshot ? N_({ getResourcesSnapshot: () => H?.getResourcesSnapshot?.() ?? [] }) : void 0, U = () => H?.get() ?? P, we = new Set(V.map((e) => e.name)), Te = e.conflictWatchFields ?? [], Ee = !Te.includes("*") && Te.length ? new Set(Te) : void 0, W = H ? Jf({
15153
15220
  getBind: () => U()?.bind,
15154
15221
  recomputeAll: () => H.recomputeAllBaselines?.(),
15155
15222
  hasBaselines: () => H.hasBaselines?.() ?? !1,
@@ -15177,8 +15244,19 @@ function K_(e, n, r) {
15177
15244
  } });
15178
15245
  }
15179
15246
  return e;
15180
- }, Ae = ye ? rg({
15247
+ }, Ae = g.vision === !0 || typeof e.images?.describe == "function" ? og({
15248
+ getVision: () => g.vision === !0,
15249
+ describe: e.images?.describe,
15250
+ onShot: (e, t) => {
15251
+ Oe.push({
15252
+ image: e,
15253
+ meta: t
15254
+ });
15255
+ }
15256
+ }) : void 0, je = ye ? ig({
15181
15257
  render: e.screenshot?.renderer,
15258
+ getActiveFocus: () => X.getFocus(),
15259
+ focusSelector: e.screenshot?.focusSelector,
15182
15260
  stow: (e) => {
15183
15261
  if (e.dataUri) try {
15184
15262
  let t = `userImages/${e.id}`;
@@ -15198,16 +15276,19 @@ function K_(e, n, r) {
15198
15276
  meta: t
15199
15277
  });
15200
15278
  }
15201
- }) : void 0, je = !Ap(e.llm) && (e.llm.provider ?? "openai") === "anthropic" ? "anthropic" : "openai", Me = Ae ? {
15279
+ }) : void 0, Me = !Ap(e.llm) && (e.llm.provider ?? "openai") === "anthropic" ? "anthropic" : "openai", Ne = je || Ae ? {
15202
15280
  name: "screenshotChannel",
15203
15281
  wrapModelCall: async (e, t) => {
15204
15282
  if (Oe.length) {
15205
- let t = Oe.splice(0), n = yi(t.map((e, t) => `[截图 ${t + 1}] ${e.meta.mode}${e.meta.selector ? ` selector="${e.meta.selector}"` : ""}${e.meta.vfsRef ? `(原图 vfs:${e.meta.vfsRef})` : ""}`).join("\n") + "\n(take_screenshot 结果如上,请结合图片回答/继续)", t.map((e) => ({ dataUri: e.image.dataUri })), je);
15283
+ let t = Oe.splice(0), n = yi(t.map((e, t) => e.meta.mode === "url" ? `[图片 ${t + 1}] 原图直投 ${e.image.url ?? ""}(view_image,全分辨率非渲染态)` : `[截图 ${t + 1}] ${e.meta.mode}${e.meta.selector ? ` selector="${e.meta.selector}"` : ""}${e.meta.vfsRef ? `(原图 vfs:${e.meta.vfsRef})` : ""}`).join("\n") + "\n(视觉内容如上,请结合图片回答/继续)", t.map((e) => ({
15284
+ dataUri: e.image.dataUri,
15285
+ url: e.image.url
15286
+ })), Me);
15206
15287
  n && e.messages.push(new i({ content: n }));
15207
15288
  }
15208
15289
  return t(e);
15209
15290
  }
15210
- } : null, Ne = !1, Pe = B.domEdit ? gg({
15291
+ } : null, Pe = !1, Fe = B.domEdit ? yg({
15211
15292
  onEdit: (e) => {
15212
15293
  X.agent?.debugLogs?.value?.push({
15213
15294
  timestamp: Date.now(),
@@ -15218,19 +15299,19 @@ function K_(e, n, r) {
15218
15299
  applied: e.applied,
15219
15300
  dryRun: e.dryRun
15220
15301
  }
15221
- }), !e.dryRun && e.applied > 0 && (Ne = !0);
15302
+ }), !e.dryRun && e.applied > 0 && (Pe = !0);
15222
15303
  },
15223
15304
  onRestore: (e) => {
15224
- e.restored > 0 && (Ne = !0);
15225
- }
15226
- }) : [], Fe = S_(B, xe, Ng, B.domInspect ? [
15227
- ...Gg,
15228
- ...Pe,
15229
- ...Ae ? [Ae] : [],
15230
- ...B.skills ? [] : [t_, n_]
15231
- ] : [], m_);
15232
- Fe.forEach((e) => De.set(e.name, "builtin"));
15233
- let Ie = e.proposals ? jg(e.proposals, {
15305
+ e.restored > 0 && (Pe = !0);
15306
+ }
15307
+ }) : [], Ie = [...T_(B, xe, Ig, B.domInspect ? [
15308
+ ...Jg,
15309
+ ...Fe,
15310
+ ...je ? [je] : [],
15311
+ ...B.skills ? [] : [i_, a_]
15312
+ ] : [], __), ...Ae ? [Ae] : []];
15313
+ Ae && De.set("view_image", "builtin"), Ie.forEach((e) => De.set(e.name, "builtin"));
15314
+ let Le = e.proposals ? Pg(e.proposals, {
15234
15315
  emit: (e) => {
15235
15316
  try {
15236
15317
  J(e);
@@ -15247,13 +15328,13 @@ function K_(e, n, r) {
15247
15328
  }
15248
15329
  });
15249
15330
  }
15250
- }) : null, Le = [...e.tools || [], ...Ie?.tools ?? []];
15251
- Le.forEach((e) => De.set(e.name, "user"));
15252
- let Re = __(e.actions ?? {});
15253
- Re.forEach((e) => De.set(e.name, "action"));
15254
- let ze = Ie ? e.proposals?.readToolName || "read_content" : null, Be = Ie ? e.proposals?.toolName || "propose_content" : null, Ve = /* @__PURE__ */ new Set([...Object.entries(e.actions ?? {}).filter(([, e]) => e?.readsHostState === !0).map(([e]) => e), ...ze ? [ze] : []]), He = /* @__PURE__ */ new Set([...Object.entries(e.actions ?? {}).filter(([, e]) => e?.deferredWrite === !0).map(([e]) => e), ...Be ? [Be] : []]), Ue = [], We = !1, Ge = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), Ke = Ge ? Cu() : null;
15255
- Ke && De.set(xu, "builtin");
15256
- let qe = me && he ? [s(async () => {
15331
+ }) : null, Re = [...e.tools || [], ...Le?.tools ?? []];
15332
+ Re.forEach((e) => De.set(e.name, "user"));
15333
+ let ze = b_(e.actions ?? {});
15334
+ ze.forEach((e) => De.set(e.name, "action"));
15335
+ let Be = Le ? e.proposals?.readToolName || "read_content" : null, Ve = Le ? e.proposals?.toolName || "propose_content" : null, He = /* @__PURE__ */ new Set([...Object.entries(e.actions ?? {}).filter(([, e]) => e?.readsHostState === !0).map(([e]) => e), ...Be ? [Be] : []]), Ue = /* @__PURE__ */ new Set([...Object.entries(e.actions ?? {}).filter(([, e]) => e?.deferredWrite === !0).map(([e]) => e), ...Ve ? [Ve] : []]), We = [], Ge = !1, Ke = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), qe = Ke ? Cu() : null;
15336
+ qe && De.set(xu, "builtin");
15337
+ let Je = me && he ? [s(async () => {
15257
15338
  let e = he.list();
15258
15339
  return e.length ? he.restore() ? `已回退到最近一次正常状态(checkpoint #${e[e.length - 1].id})。对话历史、主数据、vfs、todos 已整体还原。请基于回退后的状态重新判断并继续。` : "回退失败:无可用 checkpoint。" : "无可用 checkpoint,无法回退。";
15259
15340
  }, {
@@ -15268,8 +15349,8 @@ function K_(e, n, r) {
15268
15349
  description: "列出可用会话 checkpoint(回退点)。",
15269
15350
  schema: t.object({}).optional()
15270
15351
  })] : [];
15271
- qe.forEach((e) => De.set(e.name, "builtin"));
15272
- let Je = B.focus, Ye = s(async ({ path: e, label: t }) => {
15352
+ Je.forEach((e) => De.set(e.name, "builtin"));
15353
+ let Ye = B.focus, Xe = s(async ({ path: e, label: t }) => {
15273
15354
  let n = U()?.schema;
15274
15355
  return n ? Is(n, e) ? (A.setFocus(j({
15275
15356
  path: e,
@@ -15282,11 +15363,11 @@ function K_(e, n, r) {
15282
15363
  path: t.string().describe("要聚焦的组件 jsonPath,如 components.3"),
15283
15364
  label: t.string().optional().describe("人类可读标签,如「导航栏」")
15284
15365
  })
15285
- }), Xe = s(async () => (A.clearFocus("agent"), "已清除聚焦,恢复全量可操作范围(可读写所有组件)。"), {
15366
+ }), Ze = s(async () => (A.clearFocus("agent"), "已清除聚焦,恢复全量可操作范围(可读写所有组件)。"), {
15286
15367
  name: "clear_focus",
15287
15368
  description: "清除当前聚焦,退出精修模式,恢复对全部组件的读写权限。",
15288
15369
  schema: t.object({}).optional()
15289
- }), Ze = s(async ({ path: e, label: t }) => {
15370
+ }), Qe = s(async ({ path: e, label: t }) => {
15290
15371
  let n = U()?.schema;
15291
15372
  if (!n) return "聚焦失败:当前无主数据 schema,无法聚焦。";
15292
15373
  if (!Is(n, e)) return `PATH_DENIED · 聚焦失败:path "${e}" 不在 schema 内。请先用 read 查看可操作路径再聚焦。`;
@@ -15303,7 +15384,7 @@ function K_(e, n, r) {
15303
15384
  path: t.string().describe("要追加聚焦的组件 jsonPath,如 components.3"),
15304
15385
  label: t.string().optional().describe("人类可读标签")
15305
15386
  })
15306
- }), Qe = s(async ({ path: e }) => {
15387
+ }), $e = s(async ({ path: e }) => {
15307
15388
  let t = A.getFocuses().length;
15308
15389
  A.removeFocus(e, "agent");
15309
15390
  let n = A.getFocuses();
@@ -15312,63 +15393,63 @@ function K_(e, n, r) {
15312
15393
  name: "remove_focus",
15313
15394
  description: "移除单个聚焦焦点(by path),保留其他焦点。移除最后一个等价退出精修。全部退出用 clear_focus。",
15314
15395
  schema: t.object({ path: t.string().describe("要移除的焦点 jsonPath") })
15315
- }), $e = Je ? [
15316
- Ye,
15396
+ }), et = Ye ? [
15317
15397
  Xe,
15318
15398
  Ze,
15319
- Qe
15399
+ Qe,
15400
+ $e
15320
15401
  ] : [];
15321
- $e.forEach((e) => De.set(e.name, "builtin"));
15322
- let G = [], et = /* @__PURE__ */ new Map(), tt = jm({
15323
- builtinTools: () => Fe,
15324
- userTools: () => Le,
15325
- actionTools: () => Re,
15326
- humanConfirmTool: () => Ke,
15327
- checkpointTools: () => qe,
15328
- focusTools: () => $e,
15329
- mcpTools: () => Ue,
15330
- loadedSkillTools: () => G
15331
- }), K = tt(), nt = B.planning, rt = B.missionAnchor, it = B.workingMemory, at = B.skills, ot = B.vfs || ue;
15332
- if (ot) for (let e of Dd) De.set(e, "builtin");
15333
- if (nt) for (let e of D.tools ?? []) De.set(e.name, "builtin");
15334
- let st = B.summarization, ct = B.agentCompression && !!m;
15402
+ et.forEach((e) => De.set(e.name, "builtin"));
15403
+ let tt = [], nt = /* @__PURE__ */ new Map(), rt = jm({
15404
+ builtinTools: () => Ie,
15405
+ userTools: () => Re,
15406
+ actionTools: () => ze,
15407
+ humanConfirmTool: () => qe,
15408
+ checkpointTools: () => Je,
15409
+ focusTools: () => et,
15410
+ mcpTools: () => We,
15411
+ loadedSkillTools: () => tt
15412
+ }), G = rt(), it = B.planning, at = B.missionAnchor, ot = B.workingMemory, st = B.skills, ct = B.vfs || ue;
15413
+ if (ct) for (let e of Dd) De.set(e, "builtin");
15414
+ if (it) for (let e of D.tools ?? []) De.set(e.name, "builtin");
15415
+ let lt = B.summarization, ut = B.agentCompression && !!m;
15335
15416
  e.debug && B.agentCompression && !m && console.warn("[page-agent-sdk][agentCompression] agentCompression 开启但 summaryLlm 不可用(或缺 apiKey / 模型不支持工具),压缩决策不启用,回退静态压缩");
15336
- let lt = B.memory, ut = B.subagent, dt = ut ? Rl() : void 0, ft = e.verify?.maxAttempts ?? 2, pt = !!(e.verify?.check || e.verify?.maxAttempts || e.verify?.adversarial), mt = e.capabilities?.verify === !1, ht = (B.verify || pt && !mt) && e.verify?.enabled !== !1 && ft > 0, gt = B.contextInspector;
15337
- pt && !ht && e.verify?.enabled !== !1 && console.warn("[page-agent-sdk][verify] 检测到 verify 配置(check/maxAttempts/adversarial)但未装载(capabilities.verify:false 显式关闭 或 maxAttempts≤0)");
15338
- let _t = e.subagent, vt = _t?.allowedTools ?? [], yt = e.permissions?.length ? yu(e.permissions) : void 0, bt = e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? bu({
15417
+ let dt = B.memory, ft = B.subagent, pt = ft ? Rl() : void 0, mt = e.verify?.maxAttempts ?? 2, ht = !!(e.verify?.check || e.verify?.maxAttempts || e.verify?.adversarial), gt = e.capabilities?.verify === !1, _t = (B.verify || ht && !gt) && e.verify?.enabled !== !1 && mt > 0, vt = B.contextInspector;
15418
+ ht && !_t && e.verify?.enabled !== !1 && console.warn("[page-agent-sdk][verify] 检测到 verify 配置(check/maxAttempts/adversarial)但未装载(capabilities.verify:false 显式关闭 或 maxAttempts≤0)");
15419
+ let yt = e.subagent, bt = yt?.allowedTools ?? [], xt = e.permissions?.length ? yu(e.permissions) : void 0, St = e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? bu({
15339
15420
  ...e.approval,
15340
15421
  timeoutMs: e.approval.timeoutMs ?? ie,
15341
15422
  onAutoReject: ae,
15342
15423
  previewWrite: e.approval.preview === !0 && Se ? (e, t) => e === "write" ? Se(t) : null : void 0
15343
- }) : void 0, xt = [
15344
- ...yt ? [yt] : [],
15345
- ...bt ? [bt] : [],
15424
+ }) : void 0, Ct = [
15425
+ ...xt ? [xt] : [],
15426
+ ...St ? [St] : [],
15346
15427
  ...W ? [W] : []
15347
- ], St = !ut || _t?.enabled === !1 ? void 0 : iu({
15348
- llm: _t?.llm ?? e.llm,
15349
- allTools: () => X.agent?.allTools ?? K,
15350
- allowedTools: vt.length ? vt : void 0,
15428
+ ], wt = !ft || yt?.enabled === !1 ? void 0 : iu({
15429
+ llm: yt?.llm ?? e.llm,
15430
+ allTools: () => X.agent?.allTools ?? G,
15431
+ allowedTools: bt.length ? bt : void 0,
15351
15432
  ...e.staleReadInvalidation === void 0 ? {} : { staleReadInvalidation: e.staleReadInvalidation },
15352
- systemPrompt: _t?.systemPrompt,
15353
- temperature: _t?.temperature,
15354
- maxTokens: _t?.maxTokens,
15355
- skills: _t?.skills,
15356
- maxDepth: _t?.maxDepth,
15357
- maxParallel: _t?.maxParallel,
15358
- thinkingMode: _t?.thinkingMode,
15433
+ systemPrompt: yt?.systemPrompt,
15434
+ temperature: yt?.temperature,
15435
+ maxTokens: yt?.maxTokens,
15436
+ skills: yt?.skills,
15437
+ maxDepth: yt?.maxDepth,
15438
+ maxParallel: yt?.maxParallel,
15439
+ thinkingMode: yt?.thinkingMode,
15359
15440
  debug: e.debug,
15360
15441
  getFocuses: () => A.getActiveFocuses(),
15361
15442
  getSchema: () => U()?.schema ?? null,
15362
- tracker: dt,
15363
- guardMiddleware: xt.length ? xt : void 0,
15364
- getVfsFiles: ot ? () => T.files : void 0,
15443
+ tracker: pt,
15444
+ guardMiddleware: Ct.length ? Ct : void 0,
15445
+ getVfsFiles: ct ? () => T.files : void 0,
15365
15446
  enterDataScope: H?.enterScope ? (e) => H.enterScope(e) : void 0,
15366
15447
  exitDataScope: H?.exitScope ? (e) => H.exitScope(e) : void 0,
15367
15448
  onUsage: (e) => {
15368
15449
  a.prompt_tokens = (a.prompt_tokens ?? 0) + (e.prompt_tokens ?? 0), a.completion_tokens = (a.completion_tokens ?? 0) + (e.completion_tokens ?? 0), a.total_tokens = (a.total_tokens ?? 0) + (e.total_tokens ?? 0), e.reasoning_tokens && (a.reasoning_tokens = (a.reasoning_tokens ?? 0) + e.reasoning_tokens);
15369
15450
  },
15370
- timeoutMs: _t?.timeoutMs
15371
- }), Ct = le?.map((e) => {
15451
+ timeoutMs: yt?.timeoutMs
15452
+ }), Tt = le?.map((e) => {
15372
15453
  if (!e._codeAsset) return e;
15373
15454
  let t = e._codeAsset, n = Nf({
15374
15455
  writablePaths: t.writablePaths,
@@ -15385,86 +15466,87 @@ function K_(e, n, r) {
15385
15466
  ...e,
15386
15467
  middleware: r
15387
15468
  };
15388
- }), wt = ue && ut ? Pf() : void 0, Tt = wt ? Vf({
15469
+ }), Et = ue && ft ? Pf() : void 0, Dt = Et ? Vf({
15389
15470
  getBind: () => U()?.bind,
15390
15471
  writablePaths: de,
15391
- getLocked: () => wt.locked(),
15392
- tools: K,
15472
+ getLocked: () => Et.locked(),
15473
+ tools: G,
15393
15474
  getCodeFieldPaths: () => zf(U()?.bind, R.map((e) => ({
15394
15475
  writablePaths: e._codeAsset.writablePaths,
15395
15476
  codeField: e._codeAsset.codeField
15396
15477
  })))
15397
- }) : void 0, Et = H?.getSummarizedPaths && H.clearSummarizedPaths ? Wf({
15478
+ }) : void 0, Ot = H?.getSummarizedPaths && H.clearSummarizedPaths ? Wf({
15398
15479
  getSummarizedPaths: () => H.getSummarizedPaths(),
15399
15480
  clearSummarizedPaths: () => H.clearSummarizedPaths()
15400
- }) : void 0, Dt = ut && Ct !== void 0 ? su(Ct, {
15481
+ }) : void 0, kt = ft && Tt !== void 0 ? su(Tt, {
15401
15482
  llm: e.llm,
15402
15483
  thinkingModeDefault: e.subagent?.thinkingMode,
15403
15484
  staleReadInvalidation: e.staleReadInvalidation,
15404
- allTools: () => X.agent?.allTools ?? K,
15485
+ allTools: () => X.agent?.allTools ?? G,
15405
15486
  debug: e.debug,
15406
15487
  getFocuses: () => A.getActiveFocuses(),
15407
15488
  getSchema: () => U()?.schema ?? null,
15408
15489
  getBind: () => U()?.bind,
15409
- tracker: dt,
15410
- guardMiddleware: xt.length ? xt : void 0,
15411
- getVfsFiles: ot ? () => T.files : void 0,
15490
+ tracker: pt,
15491
+ guardMiddleware: Ct.length ? Ct : void 0,
15492
+ getVfsFiles: ct ? () => T.files : void 0,
15412
15493
  enterDataScope: H?.enterScope ? (e) => H.enterScope(e) : void 0,
15413
15494
  exitDataScope: H?.exitScope ? (e) => H.exitScope(e) : void 0,
15414
15495
  onUsage: (e) => {
15415
15496
  a.prompt_tokens = (a.prompt_tokens ?? 0) + (e.prompt_tokens ?? 0), a.completion_tokens = (a.completion_tokens ?? 0) + (e.completion_tokens ?? 0), a.total_tokens = (a.total_tokens ?? 0) + (e.total_tokens ?? 0), e.reasoning_tokens && (a.reasoning_tokens = (a.reasoning_tokens ?? 0) + e.reasoning_tokens);
15416
15497
  },
15417
15498
  timeoutMs: e.subagent?.timeoutMs,
15418
- ...wt ? {
15419
- componentLock: wt,
15499
+ ...Et ? {
15500
+ componentLock: Et,
15420
15501
  resolveComponents: (e) => Ff(e, kf(U()?.bind, de))
15421
15502
  } : {}
15422
- }) : void 0, Ot = Dt ? Dt.controller : null, kt = (t) => {
15503
+ }) : void 0, At = kt ? kt.controller : null, jt = (t) => {
15423
15504
  let n = t.thinkingMode ?? e.subagent?.thinkingMode, r = n ? Ap(t.llm ?? e.llm) ? "instance-noop" : "applied" : "inherited";
15424
15505
  return {
15425
15506
  ...t,
15426
15507
  ...n ? { thinkingMode: n } : {},
15427
15508
  thinkingApplied: r
15428
15509
  };
15429
- }, At = ["read", "fetch_document"], jt = K.filter((e) => At.includes(e.name)), Mt = ht ? Fu({
15510
+ }, Mt = ["read", "fetch_document"], Nt = G.filter((e) => Mt.includes(e.name)), Pt = _t ? Fu({
15430
15511
  check: e.verify.check ?? Vu({
15431
15512
  schemas: () => U() ? { "": U().schema } : {},
15432
15513
  root: () => U()?.bind
15433
15514
  }),
15434
15515
  adversarial: e.verify?.adversarial ? {
15435
15516
  llm: e.llm,
15436
- tools: jt
15517
+ tools: Nt
15437
15518
  } : void 0
15438
- }) : void 0, Nt = gt ? td({
15519
+ }) : void 0, It = vt ? td({
15439
15520
  contextWindow: g.contextWindow,
15440
15521
  thresholdRatio: wm(e, g.contextWindow).summaryThresholdRatio
15441
- }) : void 0, Ft = D_({
15522
+ }) : void 0, Lt = A_({
15442
15523
  ...B,
15443
- humanConfirm: Ge,
15444
- screenshot: !!Ae,
15524
+ humanConfirm: Ke,
15525
+ screenshot: !!je,
15445
15526
  domEdit: B.domEdit,
15446
15527
  hasActions: !!e.actions && Object.keys(e.actions).length > 0,
15447
15528
  hasProposals: !!e.proposals,
15448
- subagents: le?.map(kt)
15449
- }, ge && !!P, { promptSoftCap: Nl(g.contextWindow, y.promptSoftCapTokens) }), It = B.pageContext ? k_({
15529
+ viewImage: !!Ae,
15530
+ subagents: le?.map(jt)
15531
+ }, ge && !!P, { promptSoftCap: Nl(g.contextWindow, y.promptSoftCapTokens) }), Rt = B.pageContext ? M_({
15450
15532
  getPageInfo: () => typeof document < "u" && typeof location < "u" ? {
15451
15533
  title: document.title || "",
15452
15534
  url: location.href
15453
15535
  } : null,
15454
15536
  canReadPage: B.domInspect === !0
15455
- }) : void 0, Lt = {
15537
+ }) : void 0, K = {
15456
15538
  epoch: 0,
15457
15539
  notices: [],
15458
15540
  readsInvalidated: 0
15459
- }, Rt = 0, zt = {
15541
+ }, zt = 0, Bt = {
15460
15542
  name: "hostNotice",
15461
15543
  beforeAgent: () => {
15462
- Rt = Lt.epoch;
15544
+ zt = K.epoch;
15463
15545
  },
15464
15546
  wrapModelCall: async (e, t) => {
15465
- if (Ne) {
15466
- Ne = !1;
15467
- let t = eo(e.messages, "agent 已通过 dom_edit 修改页面,此前读取为改前状态", Ve);
15547
+ if (Pe) {
15548
+ Pe = !1;
15549
+ let t = eo(e.messages, "agent 已通过 dom_edit 修改页面,此前读取为改前状态", He);
15468
15550
  if (t.invalidatedCount > 0) {
15469
15551
  for (let n = 0; n < t.messages.length; n++) e.messages[n] = t.messages[n];
15470
15552
  X.agent?.debugLogs?.value?.push({
@@ -15477,18 +15559,18 @@ function K_(e, n, r) {
15477
15559
  });
15478
15560
  }
15479
15561
  }
15480
- if (Lt.epoch > Rt) {
15481
- Rt = Lt.epoch;
15482
- let t = Lt.notices[Lt.notices.length - 1] ?? "", n = eo(e.messages, t || void 0, Ve);
15562
+ if (K.epoch > zt) {
15563
+ zt = K.epoch;
15564
+ let t = K.notices[K.notices.length - 1] ?? "", n = eo(e.messages, t || void 0, He);
15483
15565
  if (n.invalidatedCount > 0) {
15484
15566
  for (let t = 0; t < n.messages.length; t++) e.messages[t] = n.messages[t];
15485
- Lt.readsInvalidated += n.invalidatedCount, X.agent?.debugLogs?.value?.push({
15567
+ K.readsInvalidated += n.invalidatedCount, X.agent?.debugLogs?.value?.push({
15486
15568
  timestamp: Date.now(),
15487
15569
  type: "middleware",
15488
15570
  data: {
15489
15571
  stage: "host_read_invalidated",
15490
15572
  count: n.invalidatedCount,
15491
- epoch: Lt.epoch,
15573
+ epoch: K.epoch,
15492
15574
  reason: t || void 0
15493
15575
  }
15494
15576
  });
@@ -15496,24 +15578,24 @@ function K_(e, n, r) {
15496
15578
  }
15497
15579
  return t(e);
15498
15580
  },
15499
- augmentPrompt: () => Lt.notices.length ? [
15581
+ augmentPrompt: () => K.notices.length ? [
15500
15582
  "【宿主页面已变更】",
15501
- ...Lt.notices.filter(Boolean).map((e) => `· ${e}`),
15583
+ ...K.notices.filter(Boolean).map((e) => `· ${e}`),
15502
15584
  B.domInspect === !0 ? "此前的页面读取/截图结果已过期,回答任何关于当前页面的问题前必须重新 read_page / get_dom 读取当前页面;不要凭此前的读取结果或记忆作答。" : "页面内容可能已变化,断言页面前先核实当前状态;不要凭此前的印象作答。"
15503
15585
  ].join("\n") : void 0,
15504
15586
  afterAgent: () => {
15505
- Lt.notices.length = 0;
15587
+ K.notices.length = 0;
15506
15588
  }
15507
- }, Bt = Ie ? {
15589
+ }, Vt = Le ? {
15508
15590
  name: "proposalNotice",
15509
- augmentPrompt: () => Ie.state.notices.length ? ["【内容提案裁决结果】(以此为准,不要凭提案前状态作答)", ...Ie.state.notices].join("\n") : void 0,
15591
+ augmentPrompt: () => Le.state.notices.length ? ["【内容提案裁决结果】(以此为准,不要凭提案前状态作答)", ...Le.state.notices].join("\n") : void 0,
15510
15592
  afterAgent: () => {
15511
- Ie.state.notices.length = 0;
15593
+ Le.state.notices.length = 0;
15512
15594
  }
15513
- } : null, Vt = P ? {
15595
+ } : null, q = P ? {
15514
15596
  name: "dataHint",
15515
15597
  augmentPrompt: () => gd(U(), e.schemaHint) || void 0
15516
- } : null, q = e.augmentSystem ? {
15598
+ } : null, Ht = e.augmentSystem ? {
15517
15599
  name: "augmentSystem",
15518
15600
  augmentPrompt: (t) => {
15519
15601
  try {
@@ -15526,135 +15608,135 @@ function K_(e, n, r) {
15526
15608
  return;
15527
15609
  }
15528
15610
  }
15529
- } : null, Ht = xm(e.onEvent), J = Ht.emit, Ut, Y = [], Gt = (e) => ({
15611
+ } : null, Ut = xm(e.onEvent), J = Ut.emit, Y, Gt = [], Kt = (e) => ({
15530
15612
  name: e.name,
15531
15613
  description: e.description,
15532
15614
  content: typeof e.getContent == "function" ? e.getContent() : ""
15533
- }), Kt = (e) => ({
15615
+ }), qt = (e) => ({
15534
15616
  name: e.name,
15535
15617
  description: e.description,
15536
15618
  getContent: () => e.content
15537
- }), qt = e.skillStorage === !1 ? null : F_({
15619
+ }), Yt = e.skillStorage === !1 ? null : R_({
15538
15620
  ...typeof e.skillStorage == "object" ? e.skillStorage : {},
15539
15621
  id: e.skillStorage && typeof e.skillStorage == "object" && e.skillStorage.id ? e.skillStorage.id : `agent::${n}`
15540
- }), Yt = () => {
15541
- let t = Ut ? Ut.controller : null;
15622
+ }), Xt = () => {
15623
+ let t = Y ? Y.controller : null;
15542
15624
  if (t) {
15543
- let n = (e.skills || []).filter((e) => !Y.some((t) => t.name === e.name));
15544
- t.set([...n, ...Y]);
15625
+ let n = (e.skills || []).filter((e) => !Gt.some((t) => t.name === e.name));
15626
+ t.set([...n, ...Gt]);
15545
15627
  }
15546
15628
  X.infoTick.value++;
15547
- }, Xt = async () => {
15548
- if (qt) try {
15549
- let t = await qt.list();
15629
+ }, Zt = async () => {
15630
+ if (Yt) try {
15631
+ let t = await Yt.list();
15550
15632
  if (t.length) {
15551
- Y = t.map(Kt);
15552
- let n = Ut ? Ut.controller : null;
15633
+ Gt = t.map(qt);
15634
+ let n = Y ? Y.controller : null;
15553
15635
  if (n) {
15554
- let t = (e.skills || []).filter((e) => !Y.some((t) => t.name === e.name));
15555
- n.set([...t, ...Y]);
15636
+ let t = (e.skills || []).filter((e) => !Gt.some((t) => t.name === e.name));
15637
+ n.set([...t, ...Gt]);
15556
15638
  }
15557
15639
  X.infoTick.value++;
15558
15640
  }
15559
15641
  } catch {}
15560
- }, Zt = st ? Ll({
15642
+ }, Qt = lt ? Ll({
15561
15643
  ...y,
15562
15644
  llmInvoke: d,
15563
15645
  getRegisteredData: () => U() ? [{ description: U().description ?? "主数据对象" }] : [],
15564
15646
  preserveLastToolResults: x,
15565
- ...ct ? {
15647
+ ...ut ? {
15566
15648
  decideInvoke: m,
15567
- getSnapshot: () => Nt?.getSnapshot()
15649
+ getSnapshot: () => It?.getSnapshot()
15568
15650
  } : {}
15569
- }) : void 0, Qt = at ? fl([
15570
- ...B.domInspect && !(e.skills || []).some((e) => e.name === "dom-inspect") ? [i_({
15571
- withScreenshot: !!Ae,
15651
+ }) : void 0, $t = st ? fl([
15652
+ ...B.domInspect && !(e.skills || []).some((e) => e.name === "dom-inspect") ? [s_({
15653
+ withScreenshot: !!je,
15572
15654
  withDomEdit: B.domEdit,
15573
15655
  withDataOps: ge && !!P
15574
15656
  })] : [],
15575
- ...B.domInspect && !(e.skills || []).some((e) => e.name === "page-analysis") ? [o_({
15576
- withScreenshot: !!Ae,
15657
+ ...B.domInspect && !(e.skills || []).some((e) => e.name === "page-analysis") ? [l_({
15658
+ withScreenshot: !!je,
15577
15659
  withDomEdit: B.domEdit,
15578
- withVfs: ot
15660
+ withVfs: ct
15579
15661
  })] : [],
15580
15662
  ...e.skills || []
15581
15663
  ], {
15582
- readVfs: ot ? (e) => T.files[e]?.content : void 0,
15664
+ readVfs: ct ? (e) => T.files[e]?.content : void 0,
15583
15665
  onToolsReady: (e, t) => {
15584
15666
  for (let n of t) {
15585
- let t = G.findIndex((e) => e.name === n.name);
15586
- t >= 0 && G.splice(t, 1), G.push(n), et.set(n.name, e), De.set(n.name, `skill:${e}`);
15667
+ let t = tt.findIndex((e) => e.name === n.name);
15668
+ t >= 0 && tt.splice(t, 1), tt.push(n), nt.set(n.name, e), De.set(n.name, `skill:${e}`);
15587
15669
  }
15588
- K = tt(), X.agent && X.agent.setTools(K), X.infoTick.value++;
15670
+ G = rt(), X.agent && X.agent.setTools(G), X.infoTick.value++;
15589
15671
  }
15590
15672
  }) : void 0;
15591
- Ut = Qt;
15592
- let $t = Em([
15673
+ Y = $t;
15674
+ let en = Em([
15675
+ ...q ? [q] : [],
15676
+ Lt,
15677
+ ...Rt ? [Rt] : [],
15678
+ Bt,
15593
15679
  ...Vt ? [Vt] : [],
15594
- Ft,
15595
- ...It ? [It] : [],
15596
- zt,
15597
- ...Bt ? [Bt] : [],
15598
- ...rt ? [O] : [],
15680
+ ...at ? [O] : [],
15599
15681
  ee,
15600
15682
  te,
15601
- ...nt ? [D] : [],
15683
+ ...it ? [D] : [],
15684
+ ...$t ? [$t] : [],
15685
+ ...ct ? [kd(T)] : [],
15602
15686
  ...Qt ? [Qt] : [],
15603
- ...ot ? [kd(T)] : [],
15604
- ...Zt ? [Zt] : [],
15605
- ...it ? [se] : [],
15606
- ...Je ? [A] : [],
15687
+ ...ot ? [se] : [],
15688
+ ...Ye ? [A] : [],
15607
15689
  ...Ce ? [Ce] : [],
15608
- ...lt ? [M] : [],
15609
- ...yt ? [yt] : [],
15690
+ ...dt ? [M] : [],
15691
+ ...xt ? [xt] : [],
15610
15692
  ...me && z && he ? [Nu(he)] : [],
15611
- ...Ge ? [oe] : [],
15612
- ...bt ? [bt] : [],
15613
- ...W ? [W] : [],
15614
- ...Mt ? [Mt] : [],
15693
+ ...Ke ? [oe] : [],
15615
15694
  ...St ? [St] : [],
15695
+ ...W ? [W] : [],
15696
+ ...Pt ? [Pt] : [],
15697
+ ...wt ? [wt] : [],
15698
+ ...kt ? [kt] : [],
15616
15699
  ...Dt ? [Dt] : [],
15617
- ...Tt ? [Tt] : [],
15618
- ...Et ? [Et] : [],
15619
- ...H && ut ? [qf({
15700
+ ...Ot ? [Ot] : [],
15701
+ ...H && ft ? [qf({
15620
15702
  getBind: () => U()?.bind,
15621
- getTools: () => X.agent?.allTools ?? K
15703
+ getTools: () => X.agent?.allTools ?? G
15622
15704
  })] : [],
15623
- ...q ? [q] : [],
15624
- ...Nt ? [Nt] : [],
15625
- ...Me ? [Me] : [],
15705
+ ...Ht ? [Ht] : [],
15706
+ ...It ? [It] : [],
15707
+ ...Ne ? [Ne] : [],
15626
15708
  ...e.middleware || [],
15627
- ...ve ? [h_(a, {
15709
+ ...ve ? [v_(a, {
15628
15710
  tokenBudget: e.tokenBudget,
15629
15711
  timeBudgetMs: e.timeBudgetMs
15630
15712
  }, J)] : [],
15631
- W_(J, w, U, a)
15632
- ]), en = e.maxMemoryRounds ?? B_;
15633
- function tn(e) {
15713
+ q_(J, w, U, a)
15714
+ ]), tn = e.maxMemoryRounds ?? U_;
15715
+ function nn(e) {
15634
15716
  return (e) => {
15635
15717
  e.type !== "approval_request" && J(ke(e));
15636
15718
  };
15637
15719
  }
15638
- let nn = /* @__PURE__ */ Wt([]), rn = z_(), an = /* @__PURE__ */ new Set();
15639
- function on(e) {
15720
+ let rn = /* @__PURE__ */ Wt([]), an = H_(), on = /* @__PURE__ */ new Set();
15721
+ function sn(e) {
15640
15722
  let t = new AbortController(), n = () => t.abort();
15641
- return e && (e.aborted ? t.abort() : e.addEventListener("abort", n, { once: !0 })), an.add(t), {
15723
+ return e && (e.aborted ? t.abort() : e.addEventListener("abort", n, { once: !0 })), on.add(t), {
15642
15724
  controller: t,
15643
15725
  untrack: () => {
15644
- an.delete(t), e?.removeEventListener("abort", n);
15726
+ on.delete(t), e?.removeEventListener("abort", n);
15645
15727
  }
15646
15728
  };
15647
15729
  }
15648
- function sn() {
15649
- for (let e of an) e.abort();
15650
- an.clear();
15730
+ function cn() {
15731
+ for (let e of on) e.abort();
15732
+ on.clear();
15651
15733
  }
15652
- let cn = /* @__PURE__ */ Wt(null), X = {
15734
+ let ln = /* @__PURE__ */ Wt(null), X = {
15653
15735
  agentId: n,
15654
15736
  store: l,
15655
15737
  messages: w,
15656
15738
  vfsStore: T,
15657
- listeners: Ht.listeners,
15739
+ listeners: Ut.listeners,
15658
15740
  todosMw: D,
15659
15741
  memoryMw: M,
15660
15742
  missionMw: O,
@@ -15669,31 +15751,31 @@ function K_(e, n, r) {
15669
15751
  mcpFailed: [],
15670
15752
  checkpoint: he,
15671
15753
  dataOpsController: H,
15672
- skillsController: Ut ? Ut.controller : null,
15754
+ skillsController: Y ? Y.controller : null,
15673
15755
  infoTick: c,
15674
15756
  pendingConflict: o.pendingConflict,
15675
- pendingQuote: cn,
15676
- sessions: nn,
15677
- refreshSessions: () => hn.refreshSessions(),
15757
+ pendingQuote: ln,
15758
+ sessions: rn,
15759
+ refreshSessions: () => gn.refreshSessions(),
15678
15760
  liveData: U,
15679
15761
  usage: a,
15680
15762
  emit: J,
15681
- runSerial: rn,
15682
- trackActive: on,
15683
- abortAllActive: sn,
15763
+ runSerial: an,
15764
+ trackActive: sn,
15765
+ abortAllActive: cn,
15684
15766
  unloadSkillTools(e) {
15685
15767
  if (e) {
15686
- let t = G.length;
15687
- if (G = G.filter((t) => et.get(t.name) === e ? (De.delete(t.name), et.delete(t.name), !1) : !0), G.length === t) return;
15768
+ let t = tt.length;
15769
+ if (tt = tt.filter((t) => nt.get(t.name) === e ? (De.delete(t.name), nt.delete(t.name), !1) : !0), tt.length === t) return;
15688
15770
  } else {
15689
- if (!G.length) return;
15690
- for (let e of G) De.delete(e.name), et.delete(e.name);
15691
- G = [];
15771
+ if (!tt.length) return;
15772
+ for (let e of tt) De.delete(e.name), nt.delete(e.name);
15773
+ tt = [];
15692
15774
  }
15693
- K = tt(), X.agent && X.agent.setTools(K);
15775
+ G = rt(), X.agent && X.agent.setTools(G);
15694
15776
  },
15695
15777
  applySnapshot(t) {
15696
- if (t.vfs && T.hydrate && T.hydrate(t.vfs), t.messages?.length && (w.push(...Ci(t.messages, (e) => (e ? X.vfsStore?.files?.[e]?.content : void 0) || void 0)), te.markResumed()), t.todos?.length && D.reset(t.todos), t.memory && !e.memory && M.reset(t.memory), t.checkpoints?.length && he && he.importStack(t.checkpoints), t.usage && Object.assign(a, t.usage), t.mission && rt && O.setMission(t.mission), t.workingMemory && it && se.restore(t.workingMemory), t.planConfirmation && (ne.lastPlanConfirmation = t.planConfirmation), Je) {
15778
+ if (t.vfs && T.hydrate && T.hydrate(t.vfs), t.messages?.length && (w.push(...Ci(t.messages, (e) => (e ? X.vfsStore?.files?.[e]?.content : void 0) || void 0)), te.markResumed()), t.todos?.length && D.reset(t.todos), t.memory && !e.memory && M.reset(t.memory), t.checkpoints?.length && he && he.importStack(t.checkpoints), t.usage && Object.assign(a, t.usage), t.mission && at && O.setMission(t.mission), t.workingMemory && ot && se.restore(t.workingMemory), t.planConfirmation && (ne.lastPlanConfirmation = t.planConfirmation), Ye) {
15697
15779
  let n = t.focus, r = n ? Array.isArray(n) ? n : [n] : [];
15698
15780
  if (r.length) {
15699
15781
  let t = U()?.schema, n = t ? r.filter((e) => Is(t, e.path)) : [];
@@ -15703,21 +15785,21 @@ function K_(e, n, r) {
15703
15785
  }
15704
15786
  }
15705
15787
  }
15706
- fn();
15788
+ pn();
15707
15789
  },
15708
15790
  addSkill(e) {
15709
- let t = Y.findIndex((t) => t.name === e.name);
15710
- t >= 0 ? Y[t] = e : Y.push(e), Yt(), qt && qt.put(Gt(e));
15791
+ let t = Gt.findIndex((t) => t.name === e.name);
15792
+ t >= 0 ? Gt[t] = e : Gt.push(e), Xt(), Yt && Yt.put(Kt(e));
15711
15793
  },
15712
15794
  removeSkill(e) {
15713
- let t = Y.findIndex((t) => t.name === e);
15714
- return t < 0 ? !1 : (Y.splice(t, 1), Yt(), qt && qt.remove(e), !0);
15795
+ let t = Gt.findIndex((t) => t.name === e);
15796
+ return t < 0 ? !1 : (Gt.splice(t, 1), Xt(), Yt && Yt.remove(e), !0);
15715
15797
  },
15716
15798
  listUserSkills() {
15717
- return Y.map((e) => e.name);
15799
+ return Gt.map((e) => e.name);
15718
15800
  },
15719
15801
  getUserSkill(e) {
15720
- let t = Y.find((t) => t.name === e);
15802
+ let t = Gt.find((t) => t.name === e);
15721
15803
  if (t) return {
15722
15804
  name: t.name,
15723
15805
  description: t.description,
@@ -15725,7 +15807,7 @@ function K_(e, n, r) {
15725
15807
  };
15726
15808
  },
15727
15809
  afterRound() {
15728
- pn(), hn.persistRuntime();
15810
+ mn(), gn.persistRuntime();
15729
15811
  },
15730
15812
  clearCodeReuse() {
15731
15813
  let e = T;
@@ -15733,10 +15815,10 @@ function K_(e, n, r) {
15733
15815
  },
15734
15816
  async send(e, t) {
15735
15817
  if (await X.initDone, X.refCount <= 0) throw Error("page-agent-sdk: agent 已释放(unmount),拒绝排队中的 send");
15736
- t ??= {}, t?.mission && rt && O.setMission(t.mission);
15818
+ t ??= {}, t?.mission && at && O.setMission(t.mission);
15737
15819
  let n = e, r = (t.images ?? []).filter((e) => e && (e.dataUri || e.vfsRef || e.url));
15738
15820
  if (r.length > 4) throw Error(`[page-agent-sdk] 单轮最多 4 张图片(收到 ${r.length})`);
15739
- if (r.length && (await mn.stowImages(r), await mn.describeIfNeeded(r, n)), r.length && !g.vision && !r.every((e) => e.description)) {
15821
+ if (r.length && (await hn.stowImages(r), await hn.describeIfNeeded(r, n)), r.length && !g.vision && !r.every((e) => e.description)) {
15740
15822
  let e = "当前主模型不支持图片输入(modelCaps.vision=false)。请换多模态模型(gpt-4o/claude/qwen-vl)或 LLMConfig 声明 vision:true;或配置 images.describe 绑定识图转述(集成方识图子 agent / 自有 vision API)";
15741
15823
  throw J({
15742
15824
  type: "error",
@@ -15745,8 +15827,8 @@ function K_(e, n, r) {
15745
15827
  code: "IMAGE_UNSUPPORTED_MODEL"
15746
15828
  }), Error(`[page-agent-sdk] ${e}`);
15747
15829
  }
15748
- T?.setProtectedRefs?.(L_(w));
15749
- let i = ve ? t.maxAutoRetries ?? 1 : 0, a = 0, s = !1, c = tn(t.signal);
15830
+ T?.setProtectedRefs?.(B_(w));
15831
+ let i = ve ? t.maxAutoRetries ?? 1 : 0, a = 0, s = !1, c = nn(t.signal);
15750
15832
  if (t.signal) {
15751
15833
  let e = () => o.resolve("keep_external");
15752
15834
  t.signal.aborted ? e() : t.signal.addEventListener("abort", e, { once: !0 });
@@ -15763,14 +15845,14 @@ function K_(e, n, r) {
15763
15845
  ...n ? { anchor: n } : {}
15764
15846
  };
15765
15847
  }
15766
- let i = e ?? cn.value ?? void 0;
15848
+ let i = e ?? ln.value ?? void 0;
15767
15849
  w.push({
15768
15850
  role: "user",
15769
15851
  content: n,
15770
15852
  timestamp: Date.now(),
15771
15853
  ...r.length ? { images: r } : {},
15772
15854
  ...i ? { quote: i } : {}
15773
- }), s = !0, !e && cn.value && (cn.value = null);
15855
+ }), s = !0, !e && ln.value && (ln.value = null);
15774
15856
  }
15775
15857
  try {
15776
15858
  let e = await X.agent.invoke(w, t.signal, c);
@@ -15832,8 +15914,8 @@ function K_(e, n, r) {
15832
15914
  async batch(e, t, n) {
15833
15915
  if (await X.initDone, !e.length) return [];
15834
15916
  if (X.refCount <= 0) throw Error("page-agent-sdk: agent 已释放(unmount),拒绝排队中的 batch");
15835
- let r = [], i = tn(n);
15836
- if (T?.setProtectedRefs?.(L_(w)), n) {
15917
+ let r = [], i = nn(n);
15918
+ if (T?.setProtectedRefs?.(B_(w)), n) {
15837
15919
  let e = () => o.resolve("keep_external");
15838
15920
  n.aborted ? e() : n.addEventListener("abort", e, { once: !0 });
15839
15921
  }
@@ -15924,14 +16006,14 @@ function K_(e, n, r) {
15924
16006
  }
15925
16007
  return r;
15926
16008
  },
15927
- switchSession: (e) => hn.switchSession(e),
15928
- exportSession: (e) => hn.exportSession(e),
15929
- importSession: (e) => hn.importSession(e),
15930
- resetSession: () => hn.resetSession(),
16009
+ switchSession: (e) => gn.switchSession(e),
16010
+ exportSession: (e) => gn.exportSession(e),
16011
+ importSession: (e) => gn.importSession(e),
16012
+ resetSession: () => gn.resetSession(),
15931
16013
  stream: async (e, t, n) => {
15932
16014
  if (!X.agent) throw Error("page-agent-sdk: agent 尚未初始化完成,请先 await mount()");
15933
16015
  let r = [...e].reverse().find((e) => e.role === "user" && e.images?.length);
15934
- if (r?.images?.length && (await mn.stowImages(r.images), await mn.describeIfNeeded(r.images, r.content), !g.vision && !r.images.every((e) => e.description))) {
16016
+ if (r?.images?.length && (await hn.stowImages(r.images), await hn.describeIfNeeded(r.images, r.content), !g.vision && !r.images.every((e) => e.description))) {
15935
16017
  let e = "当前主模型不支持图片输入(modelCaps.vision=false)。请换多模态模型(gpt-4o/claude/qwen-vl)或 LLMConfig 声明 vision:true;或配置 images.describe 绑定识图转述";
15936
16018
  throw J({
15937
16019
  type: "error",
@@ -15940,7 +16022,7 @@ function K_(e, n, r) {
15940
16022
  code: "IMAGE_UNSUPPORTED_MODEL"
15941
16023
  }), Error(`[page-agent-sdk] ${e}`);
15942
16024
  }
15943
- T?.setProtectedRefs?.(L_(e));
16025
+ T?.setProtectedRefs?.(B_(e));
15944
16026
  let i = (e) => {
15945
16027
  t?.(ke(e)), J(ke(e)), e.type === "subagent" && (e.kind === "tool_call" || e.kind === "tool_result") && X.infoTick.value++;
15946
16028
  };
@@ -15948,30 +16030,30 @@ function K_(e, n, r) {
15948
16030
  let e = () => o.resolve("keep_external");
15949
16031
  n.aborted ? e() : n.addEventListener("abort", e, { once: !0 });
15950
16032
  }
15951
- let { controller: a, untrack: s } = on(n);
16033
+ let { controller: a, untrack: s } = sn(n);
15952
16034
  return X.agent.stream(e, i, a.signal).finally(s);
15953
16035
  },
15954
16036
  release() {
15955
16037
  if (X.refCount--, X.refCount <= 0) {
15956
- sn(), We = !0, l && (T.flush?.(), l.flush(), l.dispose()), qt && qt.dispose();
16038
+ cn(), Ge = !0, l && (T.flush?.(), l.flush(), l.dispose()), Yt && Yt.dispose();
15957
16039
  let e = X.mcpClosers.splice(0);
15958
- e.length && Promise.allSettled(e.map((e) => e())), V_.delete(n);
16040
+ e.length && Promise.allSettled(e.map((e) => e())), W_.delete(n);
15959
16041
  }
15960
16042
  },
15961
16043
  resolveConflict: o.resolve,
15962
16044
  setTools(e) {
15963
- Le.length = 0, e.forEach((e) => {
15964
- Le.push(e), De.set(e.name, "user");
15965
- }), K = tt(), X.agent && X.agent.setTools(K), X.infoTick.value++;
16045
+ Re.length = 0, e.forEach((e) => {
16046
+ Re.push(e), De.set(e.name, "user");
16047
+ }), G = rt(), X.agent && X.agent.setTools(G), X.infoTick.value++;
15966
16048
  },
15967
16049
  addTool(e) {
15968
- K.some((t) => t.name === e.name) && console.warn(`[page-agent-sdk] 工具 "${e.name}" 已存在,新工具覆盖(后注册覆盖先注册)`);
15969
- for (let t = Le.length - 1; t >= 0; t--) Le[t].name === e.name && Le.splice(t, 1);
15970
- Le.push(e), De.set(e.name, "user"), K = tt(), X.agent && X.agent.setTools(K), X.infoTick.value++;
16050
+ G.some((t) => t.name === e.name) && console.warn(`[page-agent-sdk] 工具 "${e.name}" 已存在,新工具覆盖(后注册覆盖先注册)`);
16051
+ for (let t = Re.length - 1; t >= 0; t--) Re[t].name === e.name && Re.splice(t, 1);
16052
+ Re.push(e), De.set(e.name, "user"), G = rt(), X.agent && X.agent.setTools(G), X.infoTick.value++;
15971
16053
  },
15972
16054
  removeTool(e) {
15973
- let t = Le.findIndex((t) => t.name === e);
15974
- return t < 0 ? !1 : (Le.splice(t, 1), De.delete(e), K = tt(), X.agent && X.agent.setTools(K), X.infoTick.value++, !0);
16055
+ let t = Re.findIndex((t) => t.name === e);
16056
+ return t < 0 ? !1 : (Re.splice(t, 1), De.delete(e), G = rt(), X.agent && X.agent.setTools(G), X.infoTick.value++, !0);
15975
16057
  },
15976
16058
  setLlm(t) {
15977
16059
  let n;
@@ -15989,7 +16071,7 @@ function K_(e, n, r) {
15989
16071
  maxOutputTokens: e.maxOutputTokens ?? r?.maxOutputTokens,
15990
16072
  vision: r?.vision ?? t.vision
15991
16073
  }), g.contextWindow < 2e5) throw Error(`[page-agent-sdk][setLlm] 新模型上下文窗口 ${g.contextWindow} 小于最小支持 ${p}(需 ≥200K 窗口模型)`);
15992
- X.agent && (X.agent.setLlm(n), X.agent.setModelCaps?.(g)), Zt?.setContextWindow?.(g.contextWindow), Nt?.setContextWindow?.(g.contextWindow), X.infoTick.value++, e.debug && console.log("[page-agent-sdk][setLlm] 重解析 modelCaps + 回灌:", g);
16074
+ X.agent && (X.agent.setLlm(n), X.agent.setModelCaps?.(g)), Qt?.setContextWindow?.(g.contextWindow), It?.setContextWindow?.(g.contextWindow), X.infoTick.value++, e.debug && console.log("[page-agent-sdk][setLlm] 重解析 modelCaps + 回灌:", g);
15993
16075
  },
15994
16076
  setMemory(e) {
15995
16077
  M.reset(e), typeof e == "function" && M.refresh(), X.infoTick.value++;
@@ -15998,29 +16080,29 @@ function K_(e, n, r) {
15998
16080
  return M.refresh();
15999
16081
  },
16000
16082
  setSubagents(t) {
16001
- if (!Ot) {
16083
+ if (!At) {
16002
16084
  e.debug && console.warn("[page-agent-sdk][setSubagents] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略");
16003
16085
  return;
16004
16086
  }
16005
- Ot.set(t), X.infoTick.value++;
16087
+ At.set(t), X.infoTick.value++;
16006
16088
  },
16007
16089
  addSubagent(t) {
16008
- if (!Ot) {
16090
+ if (!At) {
16009
16091
  e.debug && console.warn("[page-agent-sdk][addSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略");
16010
16092
  return;
16011
16093
  }
16012
- Ot.add(t), X.infoTick.value++;
16094
+ At.add(t), X.infoTick.value++;
16013
16095
  },
16014
16096
  removeSubagent(t) {
16015
- if (!Ot) return e.debug && console.warn("[page-agent-sdk][removeSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略"), !1;
16016
- let n = Ot.remove(t);
16097
+ if (!At) return e.debug && console.warn("[page-agent-sdk][removeSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略"), !1;
16098
+ let n = At.remove(t);
16017
16099
  return n && X.infoTick.value++, n;
16018
16100
  },
16019
16101
  getActiveSubagents() {
16020
- return dt?.getActive() ?? [];
16102
+ return pt?.getActive() ?? [];
16021
16103
  },
16022
16104
  get subagentHistory() {
16023
- return dt?.getHistory() ?? [];
16105
+ return pt?.getHistory() ?? [];
16024
16106
  },
16025
16107
  getInfo() {
16026
16108
  return {
@@ -16028,13 +16110,13 @@ function K_(e, n, r) {
16028
16110
  sessionId: X.sessionId,
16029
16111
  model: Ap(C) ? C.model ?? C.modelName : C.model,
16030
16112
  systemPrompt: X.agent?.getEffectiveSystemPrompt?.() ?? be + gd(U(), e.schemaHint),
16031
- tools: (X.agent?.allTools ?? K).map((e) => ({
16113
+ tools: (X.agent?.allTools ?? G).map((e) => ({
16032
16114
  name: e.name,
16033
16115
  description: e.description,
16034
16116
  schema: e.schema,
16035
16117
  source: De.get(e.name) || "user"
16036
16118
  })),
16037
- skills: (Ut ? Ut.controller.get() : e.skills ?? []).map((e) => ({
16119
+ skills: (Y ? Y.controller.get() : e.skills ?? []).map((e) => ({
16038
16120
  name: e.name,
16039
16121
  description: e.description
16040
16122
  })),
@@ -16050,14 +16132,14 @@ function K_(e, n, r) {
16050
16132
  },
16051
16133
  memory: M.get(),
16052
16134
  staleReadsInvalidated: X.agent?.getStaleReadsInvalidated?.() ?? 0,
16053
- hostReadsInvalidated: Lt.readsInvalidated,
16054
- ...Ie ? { proposals: Ie.snapshot() } : {},
16135
+ hostReadsInvalidated: K.readsInvalidated,
16136
+ ...Le ? { proposals: Le.snapshot() } : {},
16055
16137
  ...r ? { hostWatch: { ...r } } : {},
16056
16138
  llmRetries: X.agent?.getLlmRetries?.() ?? 0,
16057
16139
  llmCallFailures: X.agent?.getLlmCallFailures?.() ?? 0,
16058
16140
  gates: X.agent?.getGateStats?.(),
16059
16141
  systemSegments: X.agent?.getLastSystemSegments?.() ?? [],
16060
- middleware: $t.map((e) => e.name),
16142
+ middleware: en.map((e) => e.name),
16061
16143
  todos: (X.agent?.getState?.()?.todos ?? []).map((e) => ({
16062
16144
  id: e.id,
16063
16145
  content: e.content,
@@ -16068,30 +16150,30 @@ function K_(e, n, r) {
16068
16150
  ...e.evidence === void 0 ? {} : { evidence: e.evidence }
16069
16151
  })),
16070
16152
  planPhase: D.getPlanPhase(),
16071
- mission: rt ? O.getMission() : void 0,
16153
+ mission: at ? O.getMission() : void 0,
16072
16154
  planConfirmation: ne.lastPlanConfirmation,
16073
- workingMemory: it ? se.getWorkingMemory() : void 0,
16074
- focus: Je ? A.getFocus() : void 0,
16075
- focuses: Je ? A.getFocuses() : [],
16076
- actions: v_(e.actions ?? {}),
16155
+ workingMemory: ot ? se.getWorkingMemory() : void 0,
16156
+ focus: Ye ? A.getFocus() : void 0,
16157
+ focuses: Ye ? A.getFocuses() : [],
16158
+ actions: x_(e.actions ?? {}),
16077
16159
  subagent: {
16078
- enabled: !!St,
16160
+ enabled: !!wt,
16079
16161
  maxDepth: e.subagent?.maxDepth ?? 1,
16080
16162
  maxParallel: e.subagent?.maxParallel ?? 4,
16081
16163
  timeoutMs: e.subagent?.timeoutMs === void 0 ? 18e5 : e.subagent.timeoutMs > 0 ? e.subagent.timeoutMs : 0,
16082
16164
  allowedTools: e.subagent?.allowedTools ?? [],
16083
- subagents: (Ot?.get() ?? []).map(kt),
16084
- active: dt?.getActive() ?? [],
16085
- history: dt?.getHistory() ?? [],
16086
- lockedComponents: wt?.locked() ?? {}
16165
+ subagents: (At?.get() ?? []).map(jt),
16166
+ active: pt?.getActive() ?? [],
16167
+ history: pt?.getHistory() ?? [],
16168
+ lockedComponents: Et?.locked() ?? {}
16087
16169
  },
16088
16170
  verify: {
16089
- enabled: !!Mt,
16090
- maxAttempts: ht ? ft : 0,
16091
- adversarial: ht && !!e.verify?.adversarial
16171
+ enabled: !!Pt,
16172
+ maxAttempts: _t ? mt : 0,
16173
+ adversarial: _t && !!e.verify?.adversarial
16092
16174
  },
16093
16175
  context: (() => {
16094
- let e = Nt?.getSnapshot();
16176
+ let e = It?.getSnapshot();
16095
16177
  if (e) {
16096
16178
  let t = X.agent?.getState?.()?.lastCompression;
16097
16179
  t && (e.compression = t);
@@ -16144,41 +16226,41 @@ function K_(e, n, r) {
16144
16226
  }));
16145
16227
  },
16146
16228
  getMission() {
16147
- return rt ? O.getMission() : void 0;
16229
+ return at ? O.getMission() : void 0;
16148
16230
  },
16149
16231
  setMission(t) {
16150
- if (!rt) {
16232
+ if (!at) {
16151
16233
  e.debug && console.warn("[page-agent-sdk][mission] capabilities.missionAnchor 关闭,setMission 忽略");
16152
16234
  return;
16153
16235
  }
16154
16236
  O.setMission(t), X.infoTick.value++;
16155
16237
  },
16156
16238
  getFocus() {
16157
- return Je ? A.getFocus() : void 0;
16239
+ return Ye ? A.getFocus() : void 0;
16158
16240
  },
16159
16241
  getFocuses() {
16160
- return Je ? A.getFocuses() : [];
16242
+ return Ye ? A.getFocuses() : [];
16161
16243
  },
16162
16244
  setFocus(t) {
16163
- let n = G_(t, "setFocus", Je, () => U()?.schema, e.debug);
16245
+ let n = J_(t, "setFocus", Ye, () => U()?.schema, e.debug);
16164
16246
  return n.ok ? (A.setFocus(j(t)), e.debug && A.isInvokeActive() && console.info("[page-agent-sdk][focus] 在途流程进行中,聚焦将在下一次输入生效(当前流程不受影响)"), X.infoTick.value++, { ok: !0 }) : n;
16165
16247
  },
16166
16248
  addFocus(t) {
16167
- let n = G_(t, "addFocus", Je, () => U()?.schema, e.debug);
16249
+ let n = J_(t, "addFocus", Ye, () => U()?.schema, e.debug);
16168
16250
  return n.ok ? A.getFocuses().length >= 8 ? (e.debug && console.warn("[page-agent-sdk][focus] addFocus 拒绝:焦点数已达上限 8(augmentPrompt 注入每焦点子树 schema,过多致 system prompt 超预算)"), {
16169
16251
  ok: !1,
16170
16252
  error: "焦点数上限 8(避免 system prompt 撑爆)"
16171
16253
  }) : (A.addFocus(j(t)), e.debug && A.isInvokeActive() && console.info("[page-agent-sdk][focus] 在途流程进行中,聚焦将在下一次输入生效(当前流程不受影响)"), X.infoTick.value++, { ok: !0 }) : n;
16172
16254
  },
16173
16255
  removeFocus(e) {
16174
- Je && (A.removeFocus(e), X.infoTick.value++);
16256
+ Ye && (A.removeFocus(e), X.infoTick.value++);
16175
16257
  },
16176
16258
  clearFocus() {
16177
- Je && (A.clearFocus(), X.infoTick.value++);
16259
+ Ye && (A.clearFocus(), X.infoTick.value++);
16178
16260
  },
16179
16261
  setQuote(e, t, n) {
16180
16262
  let r = Ni(e ?? ""), i = Ki(n);
16181
- cn.value = r ? {
16263
+ ln.value = r ? {
16182
16264
  text: r,
16183
16265
  ...t ? { source: t } : {},
16184
16266
  ...i ? { anchor: i } : {}
@@ -16186,28 +16268,28 @@ function K_(e, n, r) {
16186
16268
  },
16187
16269
  notifyHostChange(e) {
16188
16270
  let t = typeof e?.reason == "string" ? e.reason.trim().slice(0, 200) : "";
16189
- Lt.epoch += 1, t && !Lt.notices.includes(t) ? Lt.notices.push(t) : t || Lt.notices.push(""), Lt.notices.length > 5 && Lt.notices.splice(0, Lt.notices.length - 5), X.agent?.debugLogs?.value?.push({
16271
+ K.epoch += 1, t && !K.notices.includes(t) ? K.notices.push(t) : t || K.notices.push(""), K.notices.length > 5 && K.notices.splice(0, K.notices.length - 5), X.agent?.debugLogs?.value?.push({
16190
16272
  timestamp: Date.now(),
16191
16273
  type: "middleware",
16192
16274
  data: {
16193
16275
  stage: "host_change_notified",
16194
- epoch: Lt.epoch,
16276
+ epoch: K.epoch,
16195
16277
  reason: t || void 0
16196
16278
  }
16197
16279
  }), X.infoTick.value++;
16198
16280
  },
16199
16281
  clearQuote() {
16200
- cn.value = null;
16282
+ ln.value = null;
16201
16283
  },
16202
16284
  resolveProposal(e, t, n) {
16203
- let r = Ie ? Ie.resolve(e, t, n) : !1;
16285
+ let r = Le ? Le.resolve(e, t, n) : !1;
16204
16286
  return r && X.infoTick.value++, r;
16205
16287
  },
16206
16288
  getProposals() {
16207
- return Ie ? Ie.snapshot() : null;
16289
+ return Le ? Le.snapshot() : null;
16208
16290
  }
16209
16291
  };
16210
- async function ln() {
16292
+ async function un() {
16211
16293
  if (!l) return;
16212
16294
  let t = async (e) => {
16213
16295
  try {
@@ -16261,25 +16343,25 @@ function K_(e, n, r) {
16261
16343
  }), 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);
16262
16344
  } else X.sessionId = await l.createSession(n, a.title), e.debug && console.log("[page-agent-sdk][restore] 新建会话(无历史)", X.sessionId);
16263
16345
  } else X.sessionId = await l.createSession(n, a.title);
16264
- e.memory && hn.persistSave({ memory: M.get() || (typeof e.memory == "string" ? e.memory : "") }), hn.refreshSessions();
16346
+ e.memory && gn.persistSave({ memory: M.get() || (typeof e.memory == "string" ? e.memory : "") }), gn.refreshSessions();
16265
16347
  }
16266
- async function un() {
16267
- await Xt();
16348
+ async function dn() {
16349
+ await Zt();
16268
16350
  }
16269
- function dn(e) {
16351
+ function fn(e) {
16270
16352
  let t = {};
16271
- for (let n of L_(e)) {
16353
+ for (let n of B_(e)) {
16272
16354
  let e = T.files[n];
16273
16355
  e && (t[n] = e.content);
16274
16356
  }
16275
16357
  return t;
16276
16358
  }
16277
- function fn() {
16278
- let e = R_(T.files, L_(w));
16359
+ function pn() {
16360
+ let e = V_(T.files, B_(w));
16279
16361
  for (let t of e) delete T.files[t];
16280
16362
  }
16281
- function pn() {
16282
- let e = xl(w, en);
16363
+ function mn() {
16364
+ let e = xl(w, tn);
16283
16365
  if (!e.trimmed) return;
16284
16366
  let { older: t, summary: n } = e;
16285
16367
  if (J({
@@ -16290,33 +16372,33 @@ function K_(e, n, r) {
16290
16372
  assistant: e.assistantMsgs.map((e) => e.content),
16291
16373
  steps: e.assistantMsgs.flatMap((e) => e.steps ?? [])
16292
16374
  })),
16293
- vfsResults: dn(t.flatMap((e) => [e.userMsg, ...e.assistantMsgs])),
16375
+ vfsResults: fn(t.flatMap((e) => [e.userMsg, ...e.assistantMsgs])),
16294
16376
  summary: n.content,
16295
16377
  reason: "max_memory_rounds"
16296
- }), w.splice(e.deleteFrom, e.deleteCount, n), fn(), b && d) {
16378
+ }), w.splice(e.deleteFrom, e.deleteCount, n), pn(), b && d) {
16297
16379
  let n = e.summary, { prevSeg: r } = e;
16298
16380
  (async () => {
16299
16381
  try {
16300
16382
  let e = await d(Ol(t, S)), i = w.indexOf(n);
16301
16383
  if (i < 0) return;
16302
- w[i].content = bl(t, r, e), hn.persistRuntime();
16384
+ w[i].content = bl(t, r, e), gn.persistRuntime();
16303
16385
  } catch {}
16304
16386
  })();
16305
16387
  }
16306
16388
  }
16307
- let mn = ki({
16389
+ let hn = ki({
16308
16390
  getConfig: () => e.images,
16309
16391
  getVision: () => g.vision === !0,
16310
16392
  emit: J,
16311
16393
  getVfsStore: () => X.vfsStore,
16312
- noteFailure: (e, t) => hn.notePersistFailure(e, t)
16313
- }), hn = km({
16394
+ noteFailure: (e, t) => gn.notePersistFailure(e, t)
16395
+ }), gn = km({
16314
16396
  agentId: n,
16315
16397
  options: e,
16316
16398
  emit: J,
16317
16399
  getStore: () => l,
16318
16400
  core: X,
16319
- sessionsRef: nn,
16401
+ sessionsRef: rn,
16320
16402
  sessionVars: ne,
16321
16403
  messages: w,
16322
16404
  getUsage: () => a,
@@ -16326,24 +16408,24 @@ function K_(e, n, r) {
16326
16408
  missionMw: O,
16327
16409
  workingMemoryMw: se,
16328
16410
  focusMw: A,
16329
- summarizationMw: Zt,
16411
+ summarizationMw: Qt,
16330
16412
  resumeNoticeMw: te,
16331
- useMission: rt,
16332
- useWorkingMemory: it,
16333
- useFocus: Je,
16413
+ useMission: at,
16414
+ useWorkingMemory: ot,
16415
+ useFocus: Ye,
16334
16416
  useAutomation: ve
16335
16417
  },
16336
16418
  vfsStore: T,
16337
16419
  checkpointMgr: he,
16338
16420
  conflictResolve: (e) => o.resolve(e),
16339
- abortAllActive: sn,
16421
+ abortAllActive: cn,
16340
16422
  titleLlmInvoke: f
16341
16423
  });
16342
16424
  return X.initDone = (async () => {
16343
- await ln(), await un(), e.mcp?.length && sd({
16425
+ await un(), await dn(), e.mcp?.length && sd({
16344
16426
  servers: e.mcp,
16345
16427
  emit: J,
16346
- isReleased: () => We,
16428
+ isReleased: () => Ge,
16347
16429
  core: {
16348
16430
  mcpClosers: X.mcpClosers,
16349
16431
  mcpServers: X.mcpServers,
@@ -16352,15 +16434,15 @@ function K_(e, n, r) {
16352
16434
  },
16353
16435
  reservedNames: () => {
16354
16436
  let e = /* @__PURE__ */ new Set();
16355
- for (let t of K) {
16437
+ for (let t of G) {
16356
16438
  let n = De.get(t.name);
16357
16439
  n && !n.startsWith("mcp:") && e.add(t.name);
16358
16440
  }
16359
16441
  return e;
16360
16442
  },
16361
- pushTool: (e, t) => (De.set(e.name, `mcp:${t}`), Ue.push(e), !0),
16443
+ pushTool: (e, t) => (De.set(e.name, `mcp:${t}`), We.push(e), !0),
16362
16444
  rebind: () => {
16363
- K = tt(), X.agent && X.agent.setTools(K), X.infoTick.value++;
16445
+ G = rt(), X.agent && X.agent.setTools(G), X.infoTick.value++;
16364
16446
  },
16365
16447
  debug: e.debug
16366
16448
  });
@@ -16368,13 +16450,13 @@ function K_(e, n, r) {
16368
16450
  Mp(t, { emit: J }), X.agent = Ms({
16369
16451
  llm: t,
16370
16452
  systemPrompt: be,
16371
- tools: K,
16372
- middleware: $t,
16453
+ tools: G,
16454
+ middleware: en,
16373
16455
  maxToolRounds: e.maxToolRounds,
16374
- hasSubagent: ut,
16456
+ hasSubagent: ft,
16375
16457
  pageAssertionGate: B.domInspect === !0,
16376
- pageReadTools: Ve.size ? Ve : void 0,
16377
- deferredWriteTools: He.size ? He : void 0,
16458
+ pageReadTools: He.size ? He : void 0,
16459
+ deferredWriteTools: Ue.size ? Ue : void 0,
16378
16460
  maxRetries: e.maxRetries,
16379
16461
  stallMs: e.streamStallMs ?? 9e4,
16380
16462
  streamMaxMs: e.streamMaxDurationMs ?? 18e5,
@@ -16383,20 +16465,20 @@ function K_(e, n, r) {
16383
16465
  contextWindow: g.contextWindow,
16384
16466
  maxOutputTokens: g.maxOutputTokens,
16385
16467
  vision: g.vision,
16386
- imageContentFormat: je,
16387
- maxVerifyAttempts: ht ? ft : 0,
16468
+ imageContentFormat: Me,
16469
+ maxVerifyAttempts: _t ? mt : 0,
16388
16470
  roundTokenBudget: e.roundTokenBudget ?? 0,
16389
16471
  staleReadInvalidation: e.staleReadInvalidation,
16390
16472
  onLlmChange: (e) => {
16391
16473
  C = e;
16392
16474
  },
16393
16475
  debug: e.debug
16394
- }), N.current = X.agent, Dt && Dt.setReconfigureHook(() => {
16395
- X.agent && X.agent.setTools(tt());
16476
+ }), N.current = X.agent, kt && kt.setReconfigureHook(() => {
16477
+ X.agent && X.agent.setTools(rt());
16396
16478
  });
16397
16479
  })(), X;
16398
16480
  }
16399
- function q_(e, t) {
16481
+ function X_(e, t) {
16400
16482
  let n = e.id ?? Up();
16401
16483
  e.id || console.warn(`[page-agent-sdk] 未传 options.id,已生成随机 id "${n}"。刷新后持久化数据无法恢复,请传稳定 id。`);
16402
16484
  let r = e.streaming ?? !0, i = e.ui ?? "default", a = e.hostWatch === !0 ? { url: !0 } : e.hostWatch && typeof e.hostWatch == "object" ? e.hostWatch : null, o = {
@@ -16405,8 +16487,8 @@ function q_(e, t) {
16405
16487
  pushState: !1,
16406
16488
  title: !1,
16407
16489
  autoNotified: 0
16408
- }, s = null, c, l = e.shareContext ? V_.get(n) : void 0;
16409
- l ? c = l : (c = K_(e, n, a ? o : void 0), e.shareContext && V_.set(n, c)), c.refCount++;
16490
+ }, s = null, c, l = e.shareContext ? W_.get(n) : void 0;
16491
+ l ? c = l : (c = Y_(e, n, a ? o : void 0), e.shareContext && W_.set(n, c)), c.refCount++;
16410
16492
  let u = null, d = vm(e), f = null, p = null;
16411
16493
  async function m(n) {
16412
16494
  if (await c.initDone, u) {
@@ -16424,7 +16506,7 @@ function q_(e, t) {
16424
16506
  if (!a) return;
16425
16507
  s?.dispose(), s = null;
16426
16508
  let e = typeof window < "u" ? window : void 0;
16427
- s = bg({
16509
+ s = Cg({
16428
16510
  target: e,
16429
16511
  history: typeof history < "u" ? history : e?.history,
16430
16512
  document: typeof document < "u" ? document : void 0,
@@ -16440,7 +16522,7 @@ function q_(e, t) {
16440
16522
  from: e.from.slice(0, 120),
16441
16523
  to: e.to.slice(0, 120)
16442
16524
  }
16443
- }), c.notifyHostChange({ reason: vg(e) });
16525
+ }), c.notifyHostChange({ reason: xg(e) });
16444
16526
  }
16445
16527
  }), s && (o.enabled = !0, o.url = s.info.url, o.pushState = s.info.pushState, o.title = s.info.title);
16446
16528
  })(), i === !1 || !t) {
@@ -16666,7 +16748,7 @@ function q_(e, t) {
16666
16748
  }
16667
16749
  //#endregion
16668
16750
  //#region src/core/sdk/ragSubagent.ts
16669
- function J_(e, t, n, r, i) {
16751
+ function Z_(e, t, n, r, i) {
16670
16752
  let a = [];
16671
16753
  e && a.push("vfs_grep + vfs_read(搜预注入文档)"), t && a.push(`${r}(语义检索)`), n && a.push(`${i}(按 source 加载)`), a.push("fetch_document(公网 URL)");
16672
16754
  let o = [];
@@ -16681,7 +16763,7 @@ function J_(e, t, n, r, i) {
16681
16763
 
16682
16764
  你是只读检索角色,不要尝试修改任何数据。不要尝试上面未列出的工具。`;
16683
16765
  }
16684
- function Y_(e, t, n, r, i) {
16766
+ function Q_(e, t, n, r, i) {
16685
16767
  let a = [], o = [];
16686
16768
  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)
16687
16769
 
@@ -16698,12 +16780,12 @@ ${a.join("\n")}
16698
16780
  ## 何时用何源
16699
16781
  ${o.join("\n")}`;
16700
16782
  }
16701
- var X_ = {
16783
+ var $_ = {
16702
16784
  name: "rag-search",
16703
16785
  description: "多源知识检索策略:vfs 预注入文档 → 语义检索 → 指定文档加载 → 公网;综合结构化结论 + 溯源",
16704
- getContent: () => Y_(!0, !0, !0, "search_docs", "load_doc")
16786
+ getContent: () => Q_(!0, !0, !0, "search_docs", "load_doc")
16705
16787
  };
16706
- function Z_(e, n, r) {
16788
+ function ev(e, n, r) {
16707
16789
  let i = s(async ({ query: e, topK: t }) => {
16708
16790
  try {
16709
16791
  let i = await n(e, { topK: t ?? r });
@@ -16721,7 +16803,7 @@ function Z_(e, n, r) {
16721
16803
  });
16722
16804
  return ta([i]), i;
16723
16805
  }
16724
- function Q_(e, n) {
16806
+ function tv(e, n) {
16725
16807
  let r = s(async ({ source: e }) => {
16726
16808
  try {
16727
16809
  let t = await n(e), r = Array.isArray(t) ? t : [t];
@@ -16736,19 +16818,19 @@ function Q_(e, n) {
16736
16818
  });
16737
16819
  return ta([r]), r;
16738
16820
  }
16739
- function $_(e) {
16821
+ function nv(e) {
16740
16822
  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;
16741
16823
  if (!t && !n && r === !1) throw Error("[page-agent-sdk][createRagSubagent] 至少配一种知识源:retriever / loader / useVfs(true)");
16742
16824
  let p = [];
16743
- t && p.push(Z_(s, t, o)), n && p.push(Q_(c, n)), f && p.push(...f);
16825
+ t && p.push(ev(s, t, o)), n && p.push(tv(c, n)), f && p.push(...f);
16744
16826
  let m = r ? [
16745
16827
  "vfs_grep",
16746
16828
  "vfs_read",
16747
16829
  "vfs_json_read"
16748
- ] : void 0, h = J_(r, !!t, !!n, s, c), g = {
16830
+ ] : void 0, h = Z_(r, !!t, !!n, s, c), g = {
16749
16831
  name: "rag-search",
16750
- description: X_.description,
16751
- getContent: () => Y_(r, !!t, !!n, s, c)
16832
+ description: $_.description,
16833
+ getContent: () => Q_(r, !!t, !!n, s, c)
16752
16834
  };
16753
16835
  return {
16754
16836
  id: i,
@@ -16763,7 +16845,7 @@ function $_(e) {
16763
16845
  }
16764
16846
  //#endregion
16765
16847
  //#region src/core/sdk/evalToolkit.ts
16766
- function ev(e = {}) {
16848
+ function rv(e = {}) {
16767
16849
  let t = e.quietMs ?? 9e4, n = e.confirmSamples ?? 3, r = e.baselineMessageCount ?? 0, i = 0;
16768
16850
  return {
16769
16851
  push(e) {
@@ -16774,12 +16856,12 @@ function ev(e = {}) {
16774
16856
  }
16775
16857
  };
16776
16858
  }
16777
- var tv = /* @__PURE__ */ new Set(["elapsedSec"]);
16778
- function nv(e, t, n = {}) {
16859
+ var iv = /* @__PURE__ */ new Set(["elapsedSec"]);
16860
+ function av(e, t, n = {}) {
16779
16861
  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 ?? {})]);
16780
16862
  for (let n of u) {
16781
16863
  let u = Number(e?.[n] ?? 0), d = Number(t?.[n] ?? 0), f = u - d, p = d > 0 ? Math.round(f / d * 100) : 0, m = "";
16782
- tv.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({
16864
+ iv.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({
16783
16865
  key: n,
16784
16866
  prev: d,
16785
16867
  cur: u,
@@ -16794,7 +16876,7 @@ function nv(e, t, n = {}) {
16794
16876
  fields: o
16795
16877
  };
16796
16878
  }
16797
- function rv(e) {
16879
+ function ov(e) {
16798
16880
  let { sdk: t } = e, n = () => {
16799
16881
  let e = t.debugLogs.value ?? [], n = e.length ? e[e.length - 1].timestamp : 0;
16800
16882
  return {
@@ -16807,7 +16889,7 @@ function rv(e) {
16807
16889
  };
16808
16890
  return {
16809
16891
  async waitForIdle(e = {}) {
16810
- let { timeoutMs: r = 6e5, sampleMs: i = 2500, onSample: a, ...o } = e, s = ev(o), c = Date.now();
16892
+ let { timeoutMs: r = 6e5, sampleMs: i = 2500, onSample: a, ...o } = e, s = rv(o), c = Date.now();
16811
16893
  for (;;) {
16812
16894
  let e = n(), o = s.push(e);
16813
16895
  if (a?.(e), o === "done") return e;
@@ -16837,7 +16919,7 @@ function rv(e) {
16837
16919
  }
16838
16920
  //#endregion
16839
16921
  //#region src/core/utils/clipboard.ts
16840
- async function iv(e) {
16922
+ async function sv(e) {
16841
16923
  try {
16842
16924
  let t = globalThis.navigator?.clipboard;
16843
16925
  if (t && typeof t.writeText == "function") return await t.writeText(e), !0;
@@ -16855,9 +16937,9 @@ async function iv(e) {
16855
16937
  }
16856
16938
  //#endregion
16857
16939
  //#region src/core/composables/useChat.ts
16858
- var av = 4e3;
16859
- function ov(e = {}) {
16860
- let { fetchResponse: t, fetchStream: n, onPersist: r, onClear: i, onQueuedCleared: a, onBeforeRegenerate: o } = e, s = /* @__PURE__ */ Pt({
16940
+ var cv = 4e3;
16941
+ function lv(e = {}) {
16942
+ let { fetchResponse: t, fetchStream: n, onPersist: r, onClear: i, onQueuedCleared: a, onBeforeRegenerate: o } = e, s = /* @__PURE__ */ Ft({
16861
16943
  messages: e.messages ?? [],
16862
16944
  loading: !1,
16863
16945
  error: null
@@ -16885,7 +16967,7 @@ function ov(e = {}) {
16885
16967
  }
16886
16968
  async function _(e) {
16887
16969
  if (l.value = !0, n) {
16888
- let t = /* @__PURE__ */ Pt({
16970
+ let t = /* @__PURE__ */ Ft({
16889
16971
  role: "assistant",
16890
16972
  content: "",
16891
16973
  timestamp: Date.now(),
@@ -16937,7 +17019,7 @@ function ov(e = {}) {
16937
17019
  let t = e.delta || "";
16938
17020
  n.subReasonFull = (n.subReasonFull || "") + t;
16939
17021
  let r = (n.subReason || "") + t;
16940
- n.subReason = r.length > av ? r.slice(-4e3) : r;
17022
+ n.subReason = r.length > cv ? r.slice(-4e3) : r;
16941
17023
  break;
16942
17024
  }
16943
17025
  n.children ||= [];
@@ -17068,7 +17150,7 @@ function ov(e = {}) {
17068
17150
  }
17069
17151
  //#endregion
17070
17152
  //#region src/core/components/icons.ts
17071
- var sv = {
17153
+ var uv = {
17072
17154
  header: "🤖",
17073
17155
  subagent: "🤖",
17074
17156
  subagentProgress: "🧬",
@@ -17079,10 +17161,10 @@ var sv = {
17079
17161
  recommend: "💡",
17080
17162
  conflict: "⚠️"
17081
17163
  };
17082
- function cv(e) {
17083
- let t = { ...sv };
17164
+ function dv(e) {
17165
+ let t = { ...uv };
17084
17166
  if (!e) return t;
17085
- let n = Object.keys(sv);
17167
+ let n = Object.keys(uv);
17086
17168
  for (let r of n) {
17087
17169
  let n = e[r];
17088
17170
  typeof n == "string" && (t[r] = n);
@@ -17091,7 +17173,7 @@ function cv(e) {
17091
17173
  }
17092
17174
  //#endregion
17093
17175
  //#region src/core/components/messages.ts
17094
- var lv = {
17176
+ var fv = {
17095
17177
  defaultTitle: "AI 助手",
17096
17178
  inputPlaceholder: "输入消息,Enter 发送...",
17097
17179
  newSession: "新建会话",
@@ -17323,8 +17405,8 @@ var lv = {
17323
17405
  codeDemoText: "这是一段示例文字,用于展示 CSS 效果。",
17324
17406
  codeDemoButton: "按钮",
17325
17407
  codeDemoInput: "输入框"
17326
- }, uv = {
17327
- "zh-CN": lv,
17408
+ }, pv = {
17409
+ "zh-CN": fv,
17328
17410
  "en-US": {
17329
17411
  defaultTitle: "AI Assistant",
17330
17412
  inputPlaceholder: "Type a message, Enter to send...",
@@ -17559,10 +17641,10 @@ var lv = {
17559
17641
  codeDemoInput: "Input"
17560
17642
  }
17561
17643
  };
17562
- function dv(e = "zh-CN", t) {
17644
+ function mv(e = "zh-CN", t) {
17563
17645
  let n = {
17564
- ...lv,
17565
- ...uv[e]
17646
+ ...fv,
17647
+ ...pv[e]
17566
17648
  };
17567
17649
  if (!t) return n;
17568
17650
  let r = { ...n };
@@ -17574,9 +17656,9 @@ function dv(e = "zh-CN", t) {
17574
17656
  }
17575
17657
  //#endregion
17576
17658
  //#region src/core/composables/chatContext.ts
17577
- var fv = Symbol("chatContext");
17578
- function pv(e = {}) {
17579
- let t = ov({
17659
+ var hv = Symbol("chatContext");
17660
+ function gv(e = {}) {
17661
+ let t = lv({
17580
17662
  fetchResponse: e.fetchResponse,
17581
17663
  fetchStream: e.fetchStream,
17582
17664
  messages: e.messages,
@@ -17598,7 +17680,7 @@ function pv(e = {}) {
17598
17680
  }, h = /* @__PURE__ */ Wt({}), g = (e) => h.value[e] === !0, _ = (e) => {
17599
17681
  h.value[e] = !g(e);
17600
17682
  }, v = /* @__PURE__ */ Wt(!1), y = (e) => {
17601
- iv(e).then((e) => {
17683
+ sv(e).then((e) => {
17602
17684
  e && (v.value = !0, setTimeout(() => {
17603
17685
  v.value = !1;
17604
17686
  }, 1500));
@@ -17664,7 +17746,7 @@ function pv(e = {}) {
17664
17746
  e.onClearFocus?.();
17665
17747
  }, F = (t) => {
17666
17748
  e.onFocusChipClick?.(t);
17667
- }, I = cv(e.icons), ce = e.locale ?? "zh-CN", L = dv(ce, e.dialogMessages);
17749
+ }, I = dv(e.icons), ce = e.locale ?? "zh-CN", L = mv(ce, e.dialogMessages);
17668
17750
  return {
17669
17751
  chat: t,
17670
17752
  inputText: o,
@@ -17709,15 +17791,15 @@ function pv(e = {}) {
17709
17791
  toolStepView: e.toolStepView
17710
17792
  };
17711
17793
  }
17712
- function mv() {
17713
- let e = Zn(fv);
17794
+ function _v() {
17795
+ let e = Zn(hv);
17714
17796
  if (!e) throw Error("useChatContext 必须在 provide(chatContextKey) 的组件子树内调用");
17715
17797
  return e;
17716
17798
  }
17717
17799
  //#endregion
17718
17800
  //#region src/core/index.headless.ts
17719
- function hv(e) {
17720
- return q_(e);
17801
+ function vv(e) {
17802
+ return X_(e);
17721
17803
  }
17722
17804
  //#endregion
17723
- export { ym as CAPABILITIES, Sm as CONTEXT_PRESETS, Dp as CompressDecisionSchema, Kg as DEFAULT_COMPUTED_STYLES, jl as DEFAULT_PROMPT_SOFT_CAP, cd as DEFAULT_SYSTEM_PROMPT, ld as DEFAULT_SYSTEM_PROMPT_EN, gf as HTML_VOID_TAGS, xu as HUMAN_CONFIRM_TOOL_NAME, hi as ImageInputError, g as LOW_CAPS_HINT_BASELINE, p as MIN_CONTEXT_WINDOW, va as MODEL_UNAVAILABLE_GUIDANCE, Al as SOFT_CAP_MIN_WINDOW, Sl as STOP_WORDS, Cc as UNSAFE_KEYS, v_ as actionsToInspectInfo, __ as actionsToTools, di as agentError, ed as analyzeContext, Ic as applyPatchToClone, zc as applyPatchToLive, rf as applyPatchesToBind, Eg as applyProposalOps, Hs as arrayMinLength, ui as asAgentError, sp as buildCollectorJs, Zg as buildCssPath, gd as buildDataPrompt, $f as buildDiagnosticsReport, _p as buildHtmlFragmentSkill, cp as buildSandboxSrcdoc, _d as buildSystemPrompt, Ji as captureSelectionQuote, fv as chatContextKey, nf as commitSetToBind, mp as composeStructureThenRender, Ei as compressImage, od as connectMcp, k as constructLlmFromConfig, E as constructOpenLlmSync, iv as copyText, Tg as countOccurrences, Ms as createAgent, bu as createApprovalMiddleware, pv as createChatContext, hv as createChatSdk, Mu as createCheckpointManager, Nu as createCheckpointMiddleware, Hp as createConflictManager, td as createContextInspectorMiddleware, xp as createCraftNoteCheck, hf as createDataOps, rv as createEvalHarness, yp as createHtmlFormatCheck, pp as createHtmlRenderCheck, Cp as createHtmlSubagent, wu as createHumanConfirmMiddleware, Cu as createHumanConfirmTool, ev as createIdleDetector, um as createMemoryBackend, pu as createMemoryMiddleware, u as createProxyLlm, $_ as createRagSubagent, wa as createSandboxRunner, xm as createSdkEvents, z_ as createSerialRunner, mm as createSessionStore, hm as createSessionStoreWithBackend, F_ as createSkillStore, iu as createSubagentMiddleware, Rl as createSubagentTracker, su as createSubagentsMiddleware, D_ as createUsageHintsMiddleware, Fu as createVerifyMiddleware, xd as createVfs, fm as createWebStorageBackend, Vu as createWriteBackCheck, ya as decorateModelUnavailable, Oc as deepClone, x_ as defineDataToolset, Qc as defineSkill, wp as defineTool, Dc as deleteByPath, Op as deriveTitle, nc as describeSchemaNode, hs as detectGarbledToolCall, To as detectTransitionalReply, Uc as diffObjects, nv as diffReport, n_ as domInfoTool, s_ as domInspectSkill, t_ as domSearchTool, Lg as domToStructure, Gg as domTools, b_ as domToolsStatic, Us as elementSchemaCandidates, Yg as ensureDomListenerRecorder, wl as estimateMessageTokens, Dl as estimateRoundTokens, y as estimateTokens, te as extractReasoningDelta, hc as extractSchemaHint, nd as extractText, ee as extractTextDelta, ne as extractUsage, Ng as fetchDocTools, y_ as fetchTools, Hc as findStrippedKeys, rc as formatConstraints, oi as formatZodIssues, Q as getByPath, Rg as getDomTool, e_ as getElementInfo, u_ as getEnvSummary, Xg as getRecordedListeners, dp as getSandboxLifecycle, Is as getSchemaAtPath, Ns as getSchemaTopKeys, Dg as hashContent, Pc as hashValue, vp as htmlFragmentSkill, uc as htmlOrchestratorPrompt, Ol as indexSummarize, p_ as inspectEnvTool, m_ as inspectTools, Ap as isChatModel, ga as isContextLengthError, _a as isModelUnavailableError, Ps as isPathAllowed, nm as isQuotaError, wc as isUnsafePath, Pa as jpEval, ci as jsonParseError, Mc as limitDepth, Cg as lineDiff, _ as lowCapsHint, Zf as maskUrlCredentials, Ac as maybeParseValue, Gf as measureWriteScale, Rc as moveByPath, T as normalizeBaseUrl, op as normalizeRenderResult, ie as normalizeUsage, x as offloadPassThroughChars, b as offloadThresholdChars, lc as presets, Xs as projectBySchema, Ys as projectBySchemaDeep, jc as projectFields, kl as recallRounds, fp as renderInSandbox, ic as renderSchemaHint, ac as renderSchemaOverview, cc as renderSchemaShallow, bm as resolveCapabilities, wm as resolveContextOptions, vm as resolveDialogConfig, Vp as resolveLlm, v as resolveModelCaps, Nl as resolvePromptSoftCap, zs as resolveSchemaPath, _m as resolveStorage, Vc as restoreInPlace, Bc as restoreLive, li as routeError, Ra as runSandboxedScript, Tc as safeMerge, l_ as safeSerialize, $ as safeStringify, gs as sanitizeGarbledContent, Vs as schemaHasRefinement, Qg as searchDom, Ia as searchJson, S_ as selectBuiltinTools, Ec as setByPath, Pl as shouldTriggerCompression, ep as stringifyDiagnosticsReport, w as stripStainlessFetch, dc as systemPromptHelpers, h as tableMaxOutputTokens, Cl as tokenize, Z as toolError, Fs as unwrapSchema, ov as useChat, mv as useChatContext, Bs as validateAtPath, vf as validateHtmlFormat, ef as validateRootValueLocally, tf as validateWriteLocally, Fc as watchFieldsHash, e as z, si as zodError };
17805
+ export { ym as CAPABILITIES, Sm as CONTEXT_PRESETS, Dp as CompressDecisionSchema, Yg as DEFAULT_COMPUTED_STYLES, jl as DEFAULT_PROMPT_SOFT_CAP, cd as DEFAULT_SYSTEM_PROMPT, ld as DEFAULT_SYSTEM_PROMPT_EN, gf as HTML_VOID_TAGS, xu as HUMAN_CONFIRM_TOOL_NAME, hi as ImageInputError, g as LOW_CAPS_HINT_BASELINE, p as MIN_CONTEXT_WINDOW, va as MODEL_UNAVAILABLE_GUIDANCE, Al as SOFT_CAP_MIN_WINDOW, Sl as STOP_WORDS, Cc as UNSAFE_KEYS, x_ as actionsToInspectInfo, b_ as actionsToTools, di as agentError, ed as analyzeContext, Ic as applyPatchToClone, zc as applyPatchToLive, rf as applyPatchesToBind, kg as applyProposalOps, Hs as arrayMinLength, ui as asAgentError, sp as buildCollectorJs, e_ as buildCssPath, gd as buildDataPrompt, $f as buildDiagnosticsReport, _p as buildHtmlFragmentSkill, cp as buildSandboxSrcdoc, _d as buildSystemPrompt, Ji as captureSelectionQuote, hv as chatContextKey, nf as commitSetToBind, mp as composeStructureThenRender, Ei as compressImage, od as connectMcp, k as constructLlmFromConfig, E as constructOpenLlmSync, sv as copyText, Og as countOccurrences, Ms as createAgent, bu as createApprovalMiddleware, gv as createChatContext, vv as createChatSdk, Mu as createCheckpointManager, Nu as createCheckpointMiddleware, Hp as createConflictManager, td as createContextInspectorMiddleware, xp as createCraftNoteCheck, hf as createDataOps, ov as createEvalHarness, yp as createHtmlFormatCheck, pp as createHtmlRenderCheck, Cp as createHtmlSubagent, wu as createHumanConfirmMiddleware, Cu as createHumanConfirmTool, rv as createIdleDetector, um as createMemoryBackend, pu as createMemoryMiddleware, u as createProxyLlm, nv as createRagSubagent, wa as createSandboxRunner, xm as createSdkEvents, H_ as createSerialRunner, mm as createSessionStore, hm as createSessionStoreWithBackend, R_ as createSkillStore, iu as createSubagentMiddleware, Rl as createSubagentTracker, su as createSubagentsMiddleware, A_ as createUsageHintsMiddleware, Fu as createVerifyMiddleware, xd as createVfs, fm as createWebStorageBackend, Vu as createWriteBackCheck, ya as decorateModelUnavailable, Oc as deepClone, w_ as defineDataToolset, Qc as defineSkill, wp as defineTool, Dc as deleteByPath, Op as deriveTitle, nc as describeSchemaNode, hs as detectGarbledToolCall, To as detectTransitionalReply, Uc as diffObjects, av as diffReport, a_ as domInfoTool, u_ as domInspectSkill, i_ as domSearchTool, Bg as domToStructure, Jg as domTools, C_ as domToolsStatic, Us as elementSchemaCandidates, Qg as ensureDomListenerRecorder, wl as estimateMessageTokens, Dl as estimateRoundTokens, y as estimateTokens, te as extractReasoningDelta, hc as extractSchemaHint, nd as extractText, ee as extractTextDelta, ne as extractUsage, Ig as fetchDocTools, S_ as fetchTools, Hc as findStrippedKeys, rc as formatConstraints, oi as formatZodIssues, Q as getByPath, Vg as getDomTool, r_ as getElementInfo, p_ as getEnvSummary, $g as getRecordedListeners, dp as getSandboxLifecycle, Is as getSchemaAtPath, Ns as getSchemaTopKeys, Ag as hashContent, Pc as hashValue, vp as htmlFragmentSkill, uc as htmlOrchestratorPrompt, Ol as indexSummarize, g_ as inspectEnvTool, __ as inspectTools, Ap as isChatModel, ga as isContextLengthError, _a as isModelUnavailableError, Ps as isPathAllowed, nm as isQuotaError, wc as isUnsafePath, Pa as jpEval, ci as jsonParseError, Mc as limitDepth, Eg as lineDiff, _ as lowCapsHint, Zf as maskUrlCredentials, Ac as maybeParseValue, Gf as measureWriteScale, Rc as moveByPath, T as normalizeBaseUrl, op as normalizeRenderResult, ie as normalizeUsage, x as offloadPassThroughChars, b as offloadThresholdChars, lc as presets, Xs as projectBySchema, Ys as projectBySchemaDeep, jc as projectFields, kl as recallRounds, fp as renderInSandbox, ic as renderSchemaHint, ac as renderSchemaOverview, cc as renderSchemaShallow, bm as resolveCapabilities, wm as resolveContextOptions, vm as resolveDialogConfig, Vp as resolveLlm, v as resolveModelCaps, Nl as resolvePromptSoftCap, zs as resolveSchemaPath, _m as resolveStorage, Vc as restoreInPlace, Bc as restoreLive, li as routeError, Ra as runSandboxedScript, Tc as safeMerge, f_ as safeSerialize, $ as safeStringify, gs as sanitizeGarbledContent, Vs as schemaHasRefinement, t_ as searchDom, Ia as searchJson, T_ as selectBuiltinTools, Ec as setByPath, Pl as shouldTriggerCompression, ep as stringifyDiagnosticsReport, w as stripStainlessFetch, dc as systemPromptHelpers, h as tableMaxOutputTokens, Cl as tokenize, Z as toolError, Fs as unwrapSchema, lv as useChat, _v as useChatContext, Bs as validateAtPath, vf as validateHtmlFormat, ef as validateRootValueLocally, tf as validateWriteLocally, Fc as watchFieldsHash, e as z, si as zodError };