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