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