page-agent-sdk 3.28.0 → 3.29.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 +5 -5
- package/README.zh-CN.md +6 -6
- package/dist/page-agent-sdk.headless.js +998 -849
- package/dist/page-agent-sdk.iife.js +146 -146
- package/dist/page-agent-sdk.js +3105 -2931
- package/dist/page-agent-sdk.legacy.js +15755 -15564
- package/dist/page-agent-sdk.umd.cjs +64 -64
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/style.css +1 -1
- package/types/headless.d.ts +42 -1
- package/types/index.d.ts +44 -1
|
@@ -219,7 +219,7 @@ var z;
|
|
|
219
219
|
function B() {
|
|
220
220
|
return z;
|
|
221
221
|
}
|
|
222
|
-
var V,
|
|
222
|
+
var V, H = /* @__PURE__ */ new WeakSet(), he = class {
|
|
223
223
|
constructor(e) {
|
|
224
224
|
this.fn = e, this.deps = void 0, this.depsTail = void 0, this.flags = 5, this.next = void 0, this.cleanup = void 0, this.scheduler = void 0, z && (z.active ? z.effects.push(this) : this.flags &= -2);
|
|
225
225
|
}
|
|
@@ -227,10 +227,10 @@ var V, he = /* @__PURE__ */ new WeakSet(), ge = class {
|
|
|
227
227
|
this.flags |= 64;
|
|
228
228
|
}
|
|
229
229
|
resume() {
|
|
230
|
-
this.flags & 64 && (this.flags &= -65,
|
|
230
|
+
this.flags & 64 && (this.flags &= -65, H.has(this) && (H.delete(this), this.trigger()));
|
|
231
231
|
}
|
|
232
232
|
notify() {
|
|
233
|
-
this.flags & 2 && !(this.flags & 32) || this.flags & 8 ||
|
|
233
|
+
this.flags & 2 && !(this.flags & 32) || this.flags & 8 || ye(this);
|
|
234
234
|
}
|
|
235
235
|
run() {
|
|
236
236
|
if (!(this.flags & 1)) return this.fn();
|
|
@@ -250,7 +250,7 @@ var V, he = /* @__PURE__ */ new WeakSet(), ge = class {
|
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
252
|
trigger() {
|
|
253
|
-
this.flags & 64 ?
|
|
253
|
+
this.flags & 64 ? H.add(this) : this.scheduler ? this.scheduler() : this.runIfDirty();
|
|
254
254
|
}
|
|
255
255
|
runIfDirty() {
|
|
256
256
|
we(this) && this.run();
|
|
@@ -258,30 +258,30 @@ var V, he = /* @__PURE__ */ new WeakSet(), ge = class {
|
|
|
258
258
|
get dirty() {
|
|
259
259
|
return we(this);
|
|
260
260
|
}
|
|
261
|
-
},
|
|
262
|
-
function
|
|
261
|
+
}, ge = 0, _e, ve;
|
|
262
|
+
function ye(e, t = !1) {
|
|
263
263
|
if (e.flags |= 8, t) {
|
|
264
|
-
e.next =
|
|
264
|
+
e.next = ve, ve = e;
|
|
265
265
|
return;
|
|
266
266
|
}
|
|
267
|
-
e.next =
|
|
267
|
+
e.next = _e, _e = e;
|
|
268
268
|
}
|
|
269
|
-
function
|
|
270
|
-
|
|
269
|
+
function be() {
|
|
270
|
+
ge++;
|
|
271
271
|
}
|
|
272
|
-
function
|
|
273
|
-
if (--
|
|
274
|
-
if (
|
|
275
|
-
let e =
|
|
276
|
-
for (
|
|
272
|
+
function xe() {
|
|
273
|
+
if (--ge > 0) return;
|
|
274
|
+
if (ve) {
|
|
275
|
+
let e = ve;
|
|
276
|
+
for (ve = void 0; e;) {
|
|
277
277
|
let t = e.next;
|
|
278
278
|
e.next = void 0, e.flags &= -9, e = t;
|
|
279
279
|
}
|
|
280
280
|
}
|
|
281
281
|
let e;
|
|
282
|
-
for (;
|
|
283
|
-
let t =
|
|
284
|
-
for (
|
|
282
|
+
for (; _e;) {
|
|
283
|
+
let t = _e;
|
|
284
|
+
for (_e = void 0; t;) {
|
|
285
285
|
let n = t.next;
|
|
286
286
|
if (t.next = void 0, t.flags &= -9, t.flags & 1) try {
|
|
287
287
|
t.trigger();
|
|
@@ -335,12 +335,12 @@ function De(e) {
|
|
|
335
335
|
let { prevDep: t, nextDep: n } = e;
|
|
336
336
|
t && (t.nextDep = n, e.prevDep = void 0), n && (n.prevDep = t, e.nextDep = void 0);
|
|
337
337
|
}
|
|
338
|
-
var Oe = !0,
|
|
339
|
-
function ke() {
|
|
340
|
-
U.push(Oe), Oe = !1;
|
|
341
|
-
}
|
|
338
|
+
var Oe = !0, ke = [];
|
|
342
339
|
function Ae() {
|
|
343
|
-
|
|
340
|
+
ke.push(Oe), Oe = !1;
|
|
341
|
+
}
|
|
342
|
+
function U() {
|
|
343
|
+
let e = ke.pop();
|
|
344
344
|
Oe = e === void 0 || e;
|
|
345
345
|
}
|
|
346
346
|
function je(e) {
|
|
@@ -377,12 +377,12 @@ var Me = 0, Ne = class {
|
|
|
377
377
|
this.version++, Me++, this.notify(e);
|
|
378
378
|
}
|
|
379
379
|
notify(e) {
|
|
380
|
-
|
|
380
|
+
be();
|
|
381
381
|
try {
|
|
382
382
|
if (process.env.NODE_ENV !== "production") for (let t = this.subsHead; t; t = t.nextSub) t.sub.onTrigger && !(t.sub.flags & 8) && t.sub.onTrigger(T({ effect: t.sub }, e));
|
|
383
383
|
for (let e = this.subs; e; e = e.prevSub) e.sub.notify() && e.sub.dep.notify();
|
|
384
384
|
} finally {
|
|
385
|
-
|
|
385
|
+
xe();
|
|
386
386
|
}
|
|
387
387
|
}
|
|
388
388
|
};
|
|
@@ -426,7 +426,7 @@ function Be(e, t, n, r, i, a) {
|
|
|
426
426
|
oldTarget: a
|
|
427
427
|
}));
|
|
428
428
|
};
|
|
429
|
-
if (
|
|
429
|
+
if (be(), t === "clear") o.forEach(s);
|
|
430
430
|
else {
|
|
431
431
|
let i = k(e), a = i && oe(n);
|
|
432
432
|
if (i && n === "length") {
|
|
@@ -446,7 +446,7 @@ function Be(e, t, n, r, i, a) {
|
|
|
446
446
|
break;
|
|
447
447
|
}
|
|
448
448
|
}
|
|
449
|
-
|
|
449
|
+
xe();
|
|
450
450
|
}
|
|
451
451
|
function Ve(e) {
|
|
452
452
|
let t = /* @__PURE__ */ K(e);
|
|
@@ -582,9 +582,9 @@ function Ye(e, t, n) {
|
|
|
582
582
|
return (i === -1 || i === !1) && /* @__PURE__ */ Dt(n[0]) ? (n[0] = /* @__PURE__ */ K(n[0]), r[t](...n)) : i;
|
|
583
583
|
}
|
|
584
584
|
function Xe(e, t, n = []) {
|
|
585
|
-
|
|
585
|
+
Ae(), be();
|
|
586
586
|
let r = (/* @__PURE__ */ K(e))[t].apply(e, n);
|
|
587
|
-
return
|
|
587
|
+
return xe(), U(), r;
|
|
588
588
|
}
|
|
589
589
|
var Ze = /* @__PURE__ */ b("__proto__,__v_isRef,__isVue"), Qe = new Set(/* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((e) => e !== "arguments" && e !== "caller").map((e) => Symbol[e]).filter(te));
|
|
590
590
|
function $e(e) {
|
|
@@ -667,7 +667,7 @@ function ct(e, t, n) {
|
|
|
667
667
|
} });
|
|
668
668
|
};
|
|
669
669
|
}
|
|
670
|
-
function
|
|
670
|
+
function lt(e) {
|
|
671
671
|
return function(...t) {
|
|
672
672
|
if (process.env.NODE_ENV !== "production") {
|
|
673
673
|
let n = t[0] ? `on key "${t[0]}" ` : "";
|
|
@@ -676,7 +676,7 @@ function G(e) {
|
|
|
676
676
|
return e === "delete" ? !1 : e === "clear" ? void 0 : this;
|
|
677
677
|
};
|
|
678
678
|
}
|
|
679
|
-
function
|
|
679
|
+
function ut(e, t) {
|
|
680
680
|
let n = {
|
|
681
681
|
get(n) {
|
|
682
682
|
let r = this.__v_raw, i = /* @__PURE__ */ K(r), a = /* @__PURE__ */ K(n);
|
|
@@ -700,10 +700,10 @@ function lt(e, t) {
|
|
|
700
700
|
}
|
|
701
701
|
};
|
|
702
702
|
return T(n, e ? {
|
|
703
|
-
add:
|
|
704
|
-
set:
|
|
705
|
-
delete:
|
|
706
|
-
clear:
|
|
703
|
+
add: lt("add"),
|
|
704
|
+
set: lt("set"),
|
|
705
|
+
delete: lt("delete"),
|
|
706
|
+
clear: lt("clear")
|
|
707
707
|
} : {
|
|
708
708
|
add(e) {
|
|
709
709
|
let n = /* @__PURE__ */ K(this), r = st(n), i = /* @__PURE__ */ K(e), a = !t && !/* @__PURE__ */ Et(e) && !/* @__PURE__ */ Tt(e) ? i : e;
|
|
@@ -735,11 +735,11 @@ function lt(e, t) {
|
|
|
735
735
|
n[r] = ct(r, e, t);
|
|
736
736
|
}), n;
|
|
737
737
|
}
|
|
738
|
-
function
|
|
739
|
-
let n =
|
|
738
|
+
function G(e, t) {
|
|
739
|
+
let n = ut(e, t);
|
|
740
740
|
return (t, r, i) => r === "__v_isReactive" ? !e : r === "__v_isReadonly" ? e : r === "__v_raw" ? t : Reflect.get(O(n, r) && r in t ? n : t, r, i);
|
|
741
741
|
}
|
|
742
|
-
var dt = { get: /* @__PURE__ */
|
|
742
|
+
var dt = { get: /* @__PURE__ */ G(!1, !1) }, ft = { get: /* @__PURE__ */ G(!0, !1) }, pt = { get: /* @__PURE__ */ G(!0, !0) };
|
|
743
743
|
function mt(e, t, n) {
|
|
744
744
|
let r = /* @__PURE__ */ K(n);
|
|
745
745
|
if (r !== n && t.call(e, r)) {
|
|
@@ -812,16 +812,16 @@ function q(e) {
|
|
|
812
812
|
}
|
|
813
813
|
// @__NO_SIDE_EFFECTS__
|
|
814
814
|
function jt(e) {
|
|
815
|
-
return
|
|
815
|
+
return Nt(e, !1);
|
|
816
816
|
}
|
|
817
817
|
// @__NO_SIDE_EFFECTS__
|
|
818
|
-
function
|
|
819
|
-
return
|
|
818
|
+
function Mt(e) {
|
|
819
|
+
return Nt(e, !0);
|
|
820
820
|
}
|
|
821
|
-
function
|
|
822
|
-
return /* @__PURE__ */ q(e) ? e : new
|
|
821
|
+
function Nt(e, t) {
|
|
822
|
+
return /* @__PURE__ */ q(e) ? e : new J(e, t);
|
|
823
823
|
}
|
|
824
|
-
var
|
|
824
|
+
var J = class {
|
|
825
825
|
constructor(e, t) {
|
|
826
826
|
this.dep = new Pe(), this.__v_isRef = !0, this.__v_isShallow = !1, this._rawValue = t ? e : /* @__PURE__ */ K(e), this._value = t ? e : kt(e), this.__v_isShallow = t;
|
|
827
827
|
}
|
|
@@ -869,7 +869,7 @@ var Rt = class {
|
|
|
869
869
|
this.fn = e, this.setter = t, this._value = void 0, this.dep = new Pe(this), this.__v_isRef = !0, this.deps = void 0, this.depsTail = void 0, this.flags = 16, this.globalVersion = Me - 1, this.next = void 0, this.effect = this, this.__v_isReadonly = !t, this.isSSR = n;
|
|
870
870
|
}
|
|
871
871
|
notify() {
|
|
872
|
-
if (this.flags |= 16, !(this.flags & 8) && V !== this) return
|
|
872
|
+
if (this.flags |= 16, !(this.flags & 8) && V !== this) return ye(this, !0), !0;
|
|
873
873
|
process.env.NODE_ENV;
|
|
874
874
|
}
|
|
875
875
|
get value() {
|
|
@@ -909,11 +909,11 @@ function Wt(e, t, n = x) {
|
|
|
909
909
|
process.env.NODE_ENV !== "production" && l(e);
|
|
910
910
|
})) : j(e) ? f = t ? c ? () => c(e, 2) : e : () => {
|
|
911
911
|
if (p) {
|
|
912
|
-
|
|
912
|
+
Ae();
|
|
913
913
|
try {
|
|
914
914
|
p();
|
|
915
915
|
} finally {
|
|
916
|
-
|
|
916
|
+
U();
|
|
917
917
|
}
|
|
918
918
|
}
|
|
919
919
|
let t = Ht;
|
|
@@ -957,7 +957,7 @@ function Wt(e, t, n = x) {
|
|
|
957
957
|
}
|
|
958
958
|
} else d.run();
|
|
959
959
|
};
|
|
960
|
-
return s && s(b), d = new
|
|
960
|
+
return s && s(b), d = new he(f), d.scheduler = o ? () => o(b, !1) : b, m = (e) => Ut(e, !1, d), p = d.onStop = () => {
|
|
961
961
|
let e = Vt.get(d);
|
|
962
962
|
if (e) {
|
|
963
963
|
if (c) c(e, 4);
|
|
@@ -991,7 +991,7 @@ function Jt() {
|
|
|
991
991
|
var Yt = !1;
|
|
992
992
|
function Xt(e, ...t) {
|
|
993
993
|
if (Yt) return;
|
|
994
|
-
Yt = !0,
|
|
994
|
+
Yt = !0, Ae();
|
|
995
995
|
let n = Kt.length ? Kt[Kt.length - 1].component : null, r = n && n.appContext.config.warnHandler, i = Zt();
|
|
996
996
|
if (r) rn(r, n, 11, [
|
|
997
997
|
e + t.map((e) => e.toString?.call(e) ?? JSON.stringify(e)).join(""),
|
|
@@ -1003,7 +1003,7 @@ function Xt(e, ...t) {
|
|
|
1003
1003
|
let n = [`[Vue warn]: ${e}`, ...t];
|
|
1004
1004
|
i.length && n.push("\n", ...Qt(i)), console.warn(...n);
|
|
1005
1005
|
}
|
|
1006
|
-
|
|
1006
|
+
U(), Yt = !1;
|
|
1007
1007
|
}
|
|
1008
1008
|
function Zt() {
|
|
1009
1009
|
let e = Kt[Kt.length - 1];
|
|
@@ -1112,11 +1112,11 @@ function on(e, t, n, r = !0) {
|
|
|
1112
1112
|
r = r.parent;
|
|
1113
1113
|
}
|
|
1114
1114
|
if (a) {
|
|
1115
|
-
|
|
1115
|
+
Ae(), rn(a, null, 10, [
|
|
1116
1116
|
e,
|
|
1117
1117
|
i,
|
|
1118
1118
|
o
|
|
1119
|
-
]),
|
|
1119
|
+
]), U();
|
|
1120
1120
|
return;
|
|
1121
1121
|
}
|
|
1122
1122
|
}
|
|
@@ -1666,9 +1666,9 @@ function Gr() {
|
|
|
1666
1666
|
"VueInstance"
|
|
1667
1667
|
];
|
|
1668
1668
|
if (/* @__PURE__ */ q(t)) {
|
|
1669
|
-
|
|
1669
|
+
Ae();
|
|
1670
1670
|
let n = t.value;
|
|
1671
|
-
return
|
|
1671
|
+
return U(), [
|
|
1672
1672
|
"div",
|
|
1673
1673
|
{},
|
|
1674
1674
|
[
|
|
@@ -2573,7 +2573,7 @@ function la(e) {
|
|
|
2573
2573
|
function F(e) {
|
|
2574
2574
|
P = e, ae = wi(P.contextWindow), oe = Ti(P.contextWindow);
|
|
2575
2575
|
}
|
|
2576
|
-
let I = /* @__PURE__ */
|
|
2576
|
+
let I = /* @__PURE__ */ Mt([]);
|
|
2577
2577
|
function L(e, t) {
|
|
2578
2578
|
let n = {
|
|
2579
2579
|
timestamp: Date.now(),
|
|
@@ -2584,7 +2584,7 @@ function la(e) {
|
|
|
2584
2584
|
}
|
|
2585
2585
|
let se = (e) => {
|
|
2586
2586
|
I.value.push(e), I.value.length > ra && I.value.splice(0, I.value.length - ra), Pt(I);
|
|
2587
|
-
}, ce = /* @__PURE__ */
|
|
2587
|
+
}, ce = /* @__PURE__ */ Mt([]), le = 0, ue = !!j || !!M;
|
|
2588
2588
|
function de(e, t, n, r = {}) {
|
|
2589
2589
|
if (!ue) return null;
|
|
2590
2590
|
let i = {
|
|
@@ -2616,8 +2616,8 @@ function la(e) {
|
|
|
2616
2616
|
function z() {
|
|
2617
2617
|
me = pe.length > 0 ? R.bindTools?.(pe) ?? R : R;
|
|
2618
2618
|
}
|
|
2619
|
-
let B = Di(), V = .25,
|
|
2620
|
-
function
|
|
2619
|
+
let B = Di(), V = .25, H = /* @__PURE__ */ new Set(["mission", "workingMemory"]);
|
|
2620
|
+
function he() {
|
|
2621
2621
|
let e = v || "你是一个智能助手。", t = [];
|
|
2622
2622
|
for (let e of x) if (e.augmentPrompt) {
|
|
2623
2623
|
let n = e.augmentPrompt(B);
|
|
@@ -2625,7 +2625,7 @@ function la(e) {
|
|
|
2625
2625
|
name: e.name,
|
|
2626
2626
|
text: n,
|
|
2627
2627
|
tokens: X(n),
|
|
2628
|
-
pin:
|
|
2628
|
+
pin: H.has(e.name)
|
|
2629
2629
|
});
|
|
2630
2630
|
}
|
|
2631
2631
|
let n = Math.max(2e3, Math.round(P.contextWindow * V)), r = X(e) + t.reduce((e, t) => e + t.tokens, 0);
|
|
@@ -2639,19 +2639,19 @@ function la(e) {
|
|
|
2639
2639
|
}
|
|
2640
2640
|
return [e, ...t.filter((e) => e.text).map((e) => e.text)].join("\n\n");
|
|
2641
2641
|
}
|
|
2642
|
-
function
|
|
2643
|
-
let t = [new o(
|
|
2642
|
+
function ge(e) {
|
|
2643
|
+
let t = [new o(he())];
|
|
2644
2644
|
for (let n of e) if (n.role === "user") {
|
|
2645
2645
|
let e = P.vision && n.images?.length ? oi(n.content, n.images, N) : null;
|
|
2646
2646
|
e ? t.push(new a({ content: e })) : n.images?.some((e) => e.description) ? t.push(new a(si(n.content, n.images))) : t.push(new a(n.content));
|
|
2647
2647
|
} else n.role === "assistant" ? t.push(new i(n.content)) : n.role === "system" && t.push(new o(n.content));
|
|
2648
2648
|
return t;
|
|
2649
2649
|
}
|
|
2650
|
-
function
|
|
2651
|
-
let t = e[0] &&
|
|
2652
|
-
return [new o(
|
|
2650
|
+
function _e(e) {
|
|
2651
|
+
let t = e[0] && be(e[0]) === "system" ? e.slice(1) : e.slice();
|
|
2652
|
+
return [new o(he()), ...t];
|
|
2653
2653
|
}
|
|
2654
|
-
async function
|
|
2654
|
+
async function ve(e, t, n, r) {
|
|
2655
2655
|
let a = r ?? me, o = {
|
|
2656
2656
|
signal: n,
|
|
2657
2657
|
maxRetries: w,
|
|
@@ -2690,14 +2690,14 @@ function la(e) {
|
|
|
2690
2690
|
};
|
|
2691
2691
|
if (Ri(a) && !e._ctxRetry) {
|
|
2692
2692
|
e._ctxRetry = !0;
|
|
2693
|
-
let i = (e) => X(typeof e.content == "string" ? e.content : JSON.stringify(e.content)), a = e.messages.reduce((e, t) => e + i(t), 0), o =
|
|
2693
|
+
let i = (e) => X(typeof e.content == "string" ? e.content : JSON.stringify(e.content)), a = e.messages.reduce((e, t) => e + i(t), 0), o = xe(e.messages, Math.round(P.contextWindow * .3)), s = o.reduce((e, t) => e + i(t), 0);
|
|
2694
2694
|
return L("error", {
|
|
2695
2695
|
stage: "context_overflow_retry",
|
|
2696
2696
|
at: "launch",
|
|
2697
2697
|
beforeTokens: a,
|
|
2698
2698
|
afterTokens: s,
|
|
2699
2699
|
window: P.contextWindow
|
|
2700
|
-
}), console.warn(`[page-agent-sdk] 上下文超限(启动)→ 激进 trim 重试:${a} → ${s} tokens`),
|
|
2700
|
+
}), console.warn(`[page-agent-sdk] 上下文超限(启动)→ 激进 trim 重试:${a} → ${s} tokens`), ve({
|
|
2701
2701
|
...e,
|
|
2702
2702
|
messages: o
|
|
2703
2703
|
}, t, n, r);
|
|
@@ -2740,13 +2740,13 @@ function la(e) {
|
|
|
2740
2740
|
};
|
|
2741
2741
|
if (Ri(a) && l === null && u === "" && !e._ctxRetry) {
|
|
2742
2742
|
e._ctxRetry = !0;
|
|
2743
|
-
let i = (e) => X(typeof e.content == "string" ? e.content : JSON.stringify(e.content)), a = e.messages.reduce((e, t) => e + i(t), 0), o =
|
|
2743
|
+
let i = (e) => X(typeof e.content == "string" ? e.content : JSON.stringify(e.content)), a = e.messages.reduce((e, t) => e + i(t), 0), o = xe(e.messages, Math.round(P.contextWindow * .3)), s = o.reduce((e, t) => e + i(t), 0);
|
|
2744
2744
|
return L("error", {
|
|
2745
2745
|
stage: "context_overflow_retry",
|
|
2746
2746
|
beforeTokens: a,
|
|
2747
2747
|
afterTokens: s,
|
|
2748
2748
|
window: P.contextWindow
|
|
2749
|
-
}), console.warn(`[page-agent-sdk] 上下文超限 → 激进 trim 重试:${a} → ${s} tokens(窗口 ${P.contextWindow})`),
|
|
2749
|
+
}), console.warn(`[page-agent-sdk] 上下文超限 → 激进 trim 重试:${a} → ${s} tokens(窗口 ${P.contextWindow})`), ve({
|
|
2750
2750
|
...e,
|
|
2751
2751
|
messages: o
|
|
2752
2752
|
}, t, n, r);
|
|
@@ -2760,7 +2760,7 @@ function la(e) {
|
|
|
2760
2760
|
content: u
|
|
2761
2761
|
};
|
|
2762
2762
|
}
|
|
2763
|
-
async function
|
|
2763
|
+
async function ye(e) {
|
|
2764
2764
|
let t = pe.find((t) => t.name === e.name);
|
|
2765
2765
|
if (!t) return {
|
|
2766
2766
|
content: `工具 "${e.name}" 不存在`,
|
|
@@ -2788,15 +2788,15 @@ function la(e) {
|
|
|
2788
2788
|
};
|
|
2789
2789
|
}
|
|
2790
2790
|
}
|
|
2791
|
-
function
|
|
2791
|
+
function be(e) {
|
|
2792
2792
|
return e instanceof a ? "human" : e instanceof i ? "ai" : e instanceof o ? "system" : e instanceof s ? "tool" : "unknown";
|
|
2793
2793
|
}
|
|
2794
|
-
function
|
|
2794
|
+
function xe(e, t) {
|
|
2795
2795
|
return aa(e, t);
|
|
2796
2796
|
}
|
|
2797
2797
|
function Se(e) {
|
|
2798
2798
|
return !ne && !ee ? [] : e.map((e) => {
|
|
2799
|
-
let t =
|
|
2799
|
+
let t = be(e), n = { role: t === "human" ? "user" : t === "ai" ? "assistant" : t }, r = typeof e.content == "string" ? e.content : JSON.stringify(e.content);
|
|
2800
2800
|
r && (n.content = r.length > ia ? r.slice(0, ia) + `…(截断 ${r.length - ia} 字符)` : r);
|
|
2801
2801
|
let i = e.tool_calls;
|
|
2802
2802
|
Array.isArray(i) && i.length && (n.tool_calls = i.map((e) => ({
|
|
@@ -2836,13 +2836,13 @@ function la(e) {
|
|
|
2836
2836
|
}), "";
|
|
2837
2837
|
}
|
|
2838
2838
|
}
|
|
2839
|
-
let i =
|
|
2839
|
+
let i = ge(r);
|
|
2840
2840
|
L("context", {
|
|
2841
2841
|
model: c,
|
|
2842
2842
|
tools: pe.map((e) => e.name),
|
|
2843
2843
|
middleware: x.map((e) => e.name)
|
|
2844
2844
|
});
|
|
2845
|
-
let l = Gi(x, (e) =>
|
|
2845
|
+
let l = Gi(x, (e) => ve(e, t, n)), u = Ki(x, ye), d = {
|
|
2846
2846
|
rounds: 0,
|
|
2847
2847
|
maxToolRounds: re,
|
|
2848
2848
|
invokeUsage: {
|
|
@@ -2885,7 +2885,7 @@ function la(e) {
|
|
|
2885
2885
|
}), B = Vi(x, {
|
|
2886
2886
|
messages: i,
|
|
2887
2887
|
state: B
|
|
2888
|
-
}), i =
|
|
2888
|
+
}), i = _e(i), i = xe(i, Math.round(P.contextWindow * .6));
|
|
2889
2889
|
let r = de(e, "model", c, {
|
|
2890
2890
|
round: f + 1,
|
|
2891
2891
|
tools: pe.map((e) => e.name)
|
|
@@ -3064,15 +3064,15 @@ function la(e) {
|
|
|
3064
3064
|
content: h
|
|
3065
3065
|
}), h;
|
|
3066
3066
|
let e = i[i.length - 1];
|
|
3067
|
-
if (e &&
|
|
3068
|
-
let e = i[0] &&
|
|
3067
|
+
if (e && be(e) === "tool") {
|
|
3068
|
+
let e = i[0] && be(i[0]) === "system" ? i.slice(1) : i.slice(), r = [new o(he() + "\n\n工具调用次数已达上限,请基于已有工具结果直接给出最终回答,不要再调用工具。"), ...e];
|
|
3069
3069
|
L("llm_request", {
|
|
3070
3070
|
round: "wrap_up",
|
|
3071
3071
|
model: c,
|
|
3072
3072
|
tools: [],
|
|
3073
3073
|
messages: Se(r)
|
|
3074
3074
|
});
|
|
3075
|
-
let a = await Gi(x, (e) =>
|
|
3075
|
+
let a = await Gi(x, (e) => ve(e, t, n, R))({
|
|
3076
3076
|
messages: r,
|
|
3077
3077
|
state: B
|
|
3078
3078
|
});
|
|
@@ -3145,7 +3145,7 @@ function la(e) {
|
|
|
3145
3145
|
setModelCaps: F,
|
|
3146
3146
|
debugLogs: I,
|
|
3147
3147
|
spans: ce,
|
|
3148
|
-
getEffectiveSystemPrompt: () =>
|
|
3148
|
+
getEffectiveSystemPrompt: () => he()
|
|
3149
3149
|
};
|
|
3150
3150
|
}
|
|
3151
3151
|
//#endregion
|
|
@@ -3758,10 +3758,10 @@ function $a(e, t) {
|
|
|
3758
3758
|
let i = n[n.length - 1];
|
|
3759
3759
|
return r == null || !(i in r) ? !1 : (Array.isArray(r) && /^\d+$/.test(i) ? r.splice(Number(i), 1) : delete r[i], !0);
|
|
3760
3760
|
}
|
|
3761
|
-
function
|
|
3761
|
+
function eo(e) {
|
|
3762
3762
|
return e === void 0 ? void 0 : JSON.parse(JSON.stringify(e));
|
|
3763
3763
|
}
|
|
3764
|
-
function
|
|
3764
|
+
function to(e) {
|
|
3765
3765
|
if (typeof e != "string") return { parsed: e };
|
|
3766
3766
|
let t = e.trim();
|
|
3767
3767
|
if (!t) return { parsed: e };
|
|
@@ -3772,23 +3772,23 @@ function eo(e) {
|
|
|
3772
3772
|
return n ? { parseError: t } : { parsed: e };
|
|
3773
3773
|
}
|
|
3774
3774
|
}
|
|
3775
|
-
function
|
|
3775
|
+
function no(e, t) {
|
|
3776
3776
|
if (typeof e != "object" || !e) return e;
|
|
3777
3777
|
let n = new Set(t);
|
|
3778
|
-
if (Array.isArray(e)) return e.map((e) =>
|
|
3778
|
+
if (Array.isArray(e)) return e.map((e) => no(e, t));
|
|
3779
3779
|
let r = {};
|
|
3780
3780
|
for (let t of Object.keys(e)) n.has(t) && (r[t] = e[t]);
|
|
3781
3781
|
return r;
|
|
3782
3782
|
}
|
|
3783
|
-
function
|
|
3783
|
+
function ro(e, t) {
|
|
3784
3784
|
if (typeof e != "object" || !e) return e;
|
|
3785
3785
|
if (t <= 0) return Array.isArray(e) ? `[...${e.length}]` : "{...}";
|
|
3786
|
-
if (Array.isArray(e)) return e.map((e) =>
|
|
3786
|
+
if (Array.isArray(e)) return e.map((e) => ro(e, t - 1));
|
|
3787
3787
|
let n = {};
|
|
3788
|
-
for (let r of Object.keys(e)) n[r] =
|
|
3788
|
+
for (let r of Object.keys(e)) n[r] = ro(e[r], t - 1);
|
|
3789
3789
|
return n;
|
|
3790
3790
|
}
|
|
3791
|
-
function
|
|
3791
|
+
function Q(e, t = Infinity) {
|
|
3792
3792
|
let n = /* @__PURE__ */ new WeakSet(), r;
|
|
3793
3793
|
try {
|
|
3794
3794
|
r = JSON.stringify(e, (e, t) => {
|
|
@@ -3807,7 +3807,7 @@ function $(e, t = Infinity) {
|
|
|
3807
3807
|
}
|
|
3808
3808
|
return r.length > t && (r = r.slice(0, t) + `\n…[已截断,原长度 ${r.length}]`), r;
|
|
3809
3809
|
}
|
|
3810
|
-
function
|
|
3810
|
+
function io(e, t = 0) {
|
|
3811
3811
|
let n = 3735928559 ^ t, r = 1103547991 ^ t;
|
|
3812
3812
|
for (let t = 0; t < e.length; t++) {
|
|
3813
3813
|
let i = e.charCodeAt(t);
|
|
@@ -3815,8 +3815,8 @@ function ro(e, t = 0) {
|
|
|
3815
3815
|
}
|
|
3816
3816
|
return n = Math.imul(n ^ n >>> 16, 2246822507) ^ Math.imul(r ^ r >>> 13, 3266489909), r = Math.imul(r ^ r >>> 16, 2246822507) ^ Math.imul(n ^ n >>> 13, 3266489909), 4294967296 * (2097151 & r) + (n >>> 0);
|
|
3817
3817
|
}
|
|
3818
|
-
function
|
|
3819
|
-
return
|
|
3818
|
+
function $(e) {
|
|
3819
|
+
return io(Q(e)).toString(36);
|
|
3820
3820
|
}
|
|
3821
3821
|
function ao(e, t, n, r) {
|
|
3822
3822
|
if (t === "set") return n ? (Qa(e, n, r), null) : "set 操作需要 jsonPath(整体替换请用 set_data)";
|
|
@@ -6293,7 +6293,7 @@ function Lc(e) {
|
|
|
6293
6293
|
hint: "vfs_json_patch 要求文件内容是合法 JSON"
|
|
6294
6294
|
});
|
|
6295
6295
|
}
|
|
6296
|
-
let o =
|
|
6296
|
+
let o = eo(a), s = [];
|
|
6297
6297
|
for (let e of n) {
|
|
6298
6298
|
let n = ao(o, e.op, e.jsonPath, e.value);
|
|
6299
6299
|
if (n) return Y({
|
|
@@ -6825,8 +6825,82 @@ function ll(e) {
|
|
|
6825
6825
|
};
|
|
6826
6826
|
}
|
|
6827
6827
|
//#endregion
|
|
6828
|
+
//#region src/core/sdk/baselineGuard.ts
|
|
6829
|
+
function ul(e) {
|
|
6830
|
+
return {
|
|
6831
|
+
name: "baseline-guard",
|
|
6832
|
+
wrapToolCall: async (t, n) => {
|
|
6833
|
+
if (e.isManaged(t.name) || e.hasBaselines && !e.hasBaselines()) return n(t);
|
|
6834
|
+
let r = $(e.getBind());
|
|
6835
|
+
try {
|
|
6836
|
+
return await n(t);
|
|
6837
|
+
} finally {
|
|
6838
|
+
$(e.getBind()) !== r && (e.recomputeAll(), e.log?.("baseline_guard", {
|
|
6839
|
+
tool: t.name,
|
|
6840
|
+
action: "recompute_baselines",
|
|
6841
|
+
reason: "bind_changed_outside_dataops"
|
|
6842
|
+
}));
|
|
6843
|
+
}
|
|
6844
|
+
}
|
|
6845
|
+
};
|
|
6846
|
+
}
|
|
6847
|
+
//#endregion
|
|
6848
|
+
//#region src/core/sdk/diagnostics.ts
|
|
6849
|
+
var dl = 5e4, fl = 6e6;
|
|
6850
|
+
function pl(e) {
|
|
6851
|
+
return e.replace(/([?&][^=&?]*(?:key|token|secret|password|signature)[^=&?]*=)[^&]*/gi, "$1***");
|
|
6852
|
+
}
|
|
6853
|
+
function ml(e) {
|
|
6854
|
+
if (typeof e == "string") return e.length > dl ? e.slice(0, dl) + `…<truncated:${e.length - dl} chars>` : e;
|
|
6855
|
+
if (Array.isArray(e)) return e.map(ml);
|
|
6856
|
+
if (e && typeof e == "object") {
|
|
6857
|
+
let t = {};
|
|
6858
|
+
for (let [n, r] of Object.entries(e)) t[n] = ml(r);
|
|
6859
|
+
return t;
|
|
6860
|
+
}
|
|
6861
|
+
return e;
|
|
6862
|
+
}
|
|
6863
|
+
function hl(e) {
|
|
6864
|
+
let t = Array.isArray(e.debugLogs) ? e.debugLogs : [];
|
|
6865
|
+
return {
|
|
6866
|
+
format: "page-agent-sdk/diagnostics",
|
|
6867
|
+
version: 1,
|
|
6868
|
+
generatedAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
6869
|
+
environment: {
|
|
6870
|
+
userAgent: typeof navigator < "u" ? navigator.userAgent : "node",
|
|
6871
|
+
url: typeof location < "u" ? pl(location.href) : null
|
|
6872
|
+
},
|
|
6873
|
+
sessionId: e.sessionId ?? null,
|
|
6874
|
+
usage: e.usage ?? null,
|
|
6875
|
+
pendingConflict: e.pendingConflict ?? null,
|
|
6876
|
+
dataSummary: e.dataSummary ?? null,
|
|
6877
|
+
info: e.info ? ml(e.info) : null,
|
|
6878
|
+
messages: (e.messages ?? []).map(ml),
|
|
6879
|
+
debugLogs: t.map(ml),
|
|
6880
|
+
extra: e.extra ?? null
|
|
6881
|
+
};
|
|
6882
|
+
}
|
|
6883
|
+
function gl(e) {
|
|
6884
|
+
let t = JSON.stringify(e);
|
|
6885
|
+
if (t.length <= fl) return t;
|
|
6886
|
+
let n = Array.isArray(e.debugLogs) ? e.debugLogs : [], r = 0;
|
|
6887
|
+
for (; t.length > fl && n.length > 1;) {
|
|
6888
|
+
let i = Math.max(1, Math.floor(n.length / 2));
|
|
6889
|
+
n.splice(0, i), r += i, t = JSON.stringify(e);
|
|
6890
|
+
}
|
|
6891
|
+
return r > 0 && (n.unshift({
|
|
6892
|
+
timestamp: Date.now(),
|
|
6893
|
+
type: "middleware",
|
|
6894
|
+
data: {
|
|
6895
|
+
stage: "diagnostics_truncated",
|
|
6896
|
+
droppedOldestLogs: r,
|
|
6897
|
+
reason: `report > ${fl} chars`
|
|
6898
|
+
}
|
|
6899
|
+
}), t = JSON.stringify(e)), t;
|
|
6900
|
+
}
|
|
6901
|
+
//#endregion
|
|
6828
6902
|
//#region src/core/sdk/htmlSubagent.ts
|
|
6829
|
-
function
|
|
6903
|
+
function _l(e, t, n) {
|
|
6830
6904
|
let r = "html";
|
|
6831
6905
|
return `你是纯代码组件生成专家。可用工具:vfs_write / vfs_edit / vfs_rm(写/改/删代码工作副本 vfs ${e}) / vfs_read + vfs_grep(读 vfs) / validate_code(代码格式自检) / write(写 data,writablePaths 限定;set/patch 增量或整体) / read / write_todos + update_todo(规划)。
|
|
6832
6906
|
|
|
@@ -6880,7 +6954,7 @@ ${`- 输出形态:完整、自包含的 HTML 页面(.${r},可独立成页)`}
|
|
|
6880
6954
|
- 一次想清楚 → 动手 → 验证 → 收口。**思考是手段不是目的,产出代码才是**。
|
|
6881
6955
|
8. **收口格式(必守,最后一行)**:收口回复 = 简短结果总结 + **末行交接笔记** \`[note] <一句话实现要点>\` —— 关键设计决策 / 用户偏好 / 踩坑(如「[note] 液面用 height keyframes 4.2s 循环;装饰仅灯串+光斑 2 类」)。框架只识别末尾 [note] 行存进组件、自动转交下次维护该组件的子 agent;**漏写 = 下任失去交接**(真 LLM 实测漏写率 3/4,务必末行带上)。一行内,只写可复用结论。`;
|
|
6882
6956
|
}
|
|
6883
|
-
function
|
|
6957
|
+
function vl(e, t) {
|
|
6884
6958
|
return `# HTML 完整页面生成规范
|
|
6885
6959
|
|
|
6886
6960
|
## 代码资产模型(重要)
|
|
@@ -6918,14 +6992,14 @@ function dl(e, t) {
|
|
|
6918
6992
|
- 语义化标签(button / nav / section);图片 alt;交互可键盘聚焦
|
|
6919
6993
|
- 颜色对比达标;不只用颜色传达信息`;
|
|
6920
6994
|
}
|
|
6921
|
-
function
|
|
6995
|
+
function yl(e = "components", t = "code") {
|
|
6922
6996
|
return {
|
|
6923
6997
|
name: "html-fragment",
|
|
6924
6998
|
description: "完整 HTML 页面生成规范:代码作为 data 资产 / vfs 工作副本 / 完整自包含可独立成页 / script+CSS 集中放置 / 可引外部 JS/CSS / validate_code 自检 / 安全底线 / 可访问性",
|
|
6925
|
-
getContent: () =>
|
|
6999
|
+
getContent: () => vl(e, t)
|
|
6926
7000
|
};
|
|
6927
7001
|
}
|
|
6928
|
-
function
|
|
7002
|
+
function bl(e = {}) {
|
|
6929
7003
|
let t = e.vfsPrefix ?? "html/";
|
|
6930
7004
|
return ({ state: e }) => {
|
|
6931
7005
|
let n = e.files;
|
|
@@ -6942,7 +7016,7 @@ function pl(e = {}) {
|
|
|
6942
7016
|
} : { ok: !0 };
|
|
6943
7017
|
};
|
|
6944
7018
|
}
|
|
6945
|
-
function
|
|
7019
|
+
function xl(e) {
|
|
6946
7020
|
let n, i, a = {
|
|
6947
7021
|
name: "html-validate-tools",
|
|
6948
7022
|
beforeAgent: (e) => {
|
|
@@ -6995,16 +7069,16 @@ function ml(e) {
|
|
|
6995
7069
|
i = e;
|
|
6996
7070
|
}, a;
|
|
6997
7071
|
}
|
|
6998
|
-
var
|
|
6999
|
-
function
|
|
7072
|
+
var Sl = 2;
|
|
7073
|
+
function Cl(e = {}) {
|
|
7000
7074
|
let { writablePaths: t, codeVfsPrefix: n = "html/", id: r = "html", description: i, planning: a = !0, summarization: o = !0, maxToolRounds: s = 12, temperature: c = .4, skills: l, extraTools: u, formatCheck: d = !0, codeField: f = "code", orchestratorPrompt: p = !0, craftNotes: m = !0 } = e;
|
|
7001
7075
|
if (t !== void 0 && !Array.isArray(t)) throw Error("[page-agent-sdk][createHtmlSubagent] writablePaths 须为字符串数组(代码组件 data 区,如 [\"components\"])/ 省略以从 schema 自动推断");
|
|
7002
7076
|
let h = [];
|
|
7003
|
-
a && h.push(Wa()), d && (h.push(
|
|
7077
|
+
a && h.push(Wa()), d && (h.push(xl(n)), h.push(Xs({ check: bl({ vfsPrefix: n }) })));
|
|
7004
7078
|
let g = u ?? [], _ = t?.[0] ?? "components", v = l === void 0, y = {
|
|
7005
7079
|
id: r,
|
|
7006
7080
|
description: i ?? `生成/修改纯代码组件(代码作为 data 资产,代码字段 ${f} 随 data 持久化;vfs 作工作副本;能规划(write_todos)+ 执行)。需写代码组件或灵活定制时委派`,
|
|
7007
|
-
systemPrompt:
|
|
7081
|
+
systemPrompt: _l(n, f, _),
|
|
7008
7082
|
writablePaths: t ?? [],
|
|
7009
7083
|
allowedTools: [
|
|
7010
7084
|
"vfs_write",
|
|
@@ -7015,9 +7089,9 @@ function gl(e = {}) {
|
|
|
7015
7089
|
],
|
|
7016
7090
|
middleware: h.length ? h : void 0,
|
|
7017
7091
|
summarization: o === !1 ? void 0 : o,
|
|
7018
|
-
maxVerifyAttempts: d ?
|
|
7092
|
+
maxVerifyAttempts: d ? Sl : void 0,
|
|
7019
7093
|
temperature: c,
|
|
7020
|
-
skills: v ? [
|
|
7094
|
+
skills: v ? [yl(_, f)] : l,
|
|
7021
7095
|
maxToolRounds: s,
|
|
7022
7096
|
tools: g.length ? g : void 0,
|
|
7023
7097
|
_codeAsset: {
|
|
@@ -7030,12 +7104,12 @@ function gl(e = {}) {
|
|
|
7030
7104
|
}
|
|
7031
7105
|
};
|
|
7032
7106
|
return y._rebuildCodeAssetPaths = (e) => {
|
|
7033
|
-
y.systemPrompt =
|
|
7107
|
+
y.systemPrompt = _l(n, f, e), v && (y.skills = [yl(e, f)]);
|
|
7034
7108
|
}, y;
|
|
7035
7109
|
}
|
|
7036
7110
|
//#endregion
|
|
7037
7111
|
//#region src/core/sdk/defineTool.ts
|
|
7038
|
-
function
|
|
7112
|
+
function wl(e) {
|
|
7039
7113
|
return r(async (t) => {
|
|
7040
7114
|
let n = await e.handler(t);
|
|
7041
7115
|
return typeof n == "string" ? n : JSON.stringify(n);
|
|
@@ -7047,7 +7121,7 @@ function _l(e) {
|
|
|
7047
7121
|
}
|
|
7048
7122
|
//#endregion
|
|
7049
7123
|
//#region src/core/sdk/inspectContextTool.ts
|
|
7050
|
-
var
|
|
7124
|
+
var Tl = t.object({
|
|
7051
7125
|
path: t.string().optional().describe("分类 key 过滤(如 toolResults/history/systemPrompt/dataHint);不传=全部分类"),
|
|
7052
7126
|
role: t.enum([
|
|
7053
7127
|
"user",
|
|
@@ -7057,11 +7131,11 @@ var vl = t.object({
|
|
|
7057
7131
|
]).optional().describe("聚焦每轮首句的角色(assistant→回复摘要,user→问题摘要);不影响工具列表"),
|
|
7058
7132
|
limit: t.number().int().min(1).max(50).optional().describe("返回最近 N 轮(默认全部;超 50 自动截最近 50 防返回过大)")
|
|
7059
7133
|
});
|
|
7060
|
-
function
|
|
7061
|
-
return
|
|
7134
|
+
function El(e) {
|
|
7135
|
+
return wl({
|
|
7062
7136
|
name: "inspect_context",
|
|
7063
7137
|
description: "查看当前对话上下文的构成(供压缩决策)。返回:totalTokens(历史轮次 token 总和,与触发判断同口径)、occupancy(窗口占用比)、contextWindow、categories(分类占用)、rounds(每轮 token/工具/首句)。先调用本工具查看构成,再决定压缩策略。",
|
|
7064
|
-
schema:
|
|
7138
|
+
schema: Tl,
|
|
7065
7139
|
handler: (t) => {
|
|
7066
7140
|
let n = ss(e.getMessages()), r = n.length > 50 ? n.slice(n.length - 50) : n, i = (t.limit && r.length > t.limit ? r.slice(r.length - t.limit) : r).map((e) => {
|
|
7067
7141
|
let n = ys(e), r = ls(e), i = t.role === "assistant" ? e.assistantMsgs[0] ?? e.userMsg : e.userMsg, a = cs(typeof i.content == "string" ? i.content : "", 60);
|
|
@@ -7084,7 +7158,7 @@ function yl(e) {
|
|
|
7084
7158
|
}
|
|
7085
7159
|
//#endregion
|
|
7086
7160
|
//#region src/core/sdk/compressDecision.ts
|
|
7087
|
-
var
|
|
7161
|
+
var Dl = t.object({
|
|
7088
7162
|
keepRounds: t.number().int().min(0).max(50).optional(),
|
|
7089
7163
|
windowRatio: t.number().min(0).max(1).optional(),
|
|
7090
7164
|
summarize: t.object({ mode: t.enum(["index", "llm"]) }),
|
|
@@ -7094,23 +7168,23 @@ var bl = t.object({
|
|
|
7094
7168
|
}).refine((e) => e.keepRounds !== void 0 || e.windowRatio !== void 0, { message: "keepRounds 与 windowRatio 至少填一个(按当前触发模式)" });
|
|
7095
7169
|
//#endregion
|
|
7096
7170
|
//#region src/core/sdk/llmResolver.ts
|
|
7097
|
-
function
|
|
7171
|
+
function Ol(e) {
|
|
7098
7172
|
let t = e.find((e) => e.role === "user");
|
|
7099
7173
|
if (!t) return;
|
|
7100
7174
|
let n = t.content, r = (typeof n == "string" ? n : Array.isArray(n) ? n.map((e) => typeof e == "string" ? e : e?.text ?? "").join("") : String(n ?? "")).trim().replace(/[\n\r]+/g, " ");
|
|
7101
7175
|
if (r) return r.length > 30 ? r.slice(0, 30) + "…" : r;
|
|
7102
7176
|
}
|
|
7103
|
-
function
|
|
7177
|
+
function kl(e) {
|
|
7104
7178
|
return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
|
|
7105
7179
|
}
|
|
7106
|
-
function
|
|
7180
|
+
function Al(e) {
|
|
7107
7181
|
let t = e.content;
|
|
7108
7182
|
return typeof t == "string" ? t : Array.isArray(t) ? t.map((e) => typeof e == "string" ? e : e?.text ?? "").join("") : String(t ?? "");
|
|
7109
7183
|
}
|
|
7110
|
-
function
|
|
7184
|
+
function jl(e) {
|
|
7111
7185
|
let t = e.summaryLlm ?? e.llm;
|
|
7112
7186
|
if (!t) return;
|
|
7113
|
-
let n = e.summaryTemperature ?? .3, r = e.summaryMaxTokens ?? 1024, i = e.summaryTimeoutMs ?? 15e3, s =
|
|
7187
|
+
let n = e.summaryTemperature ?? .3, r = e.summaryMaxTokens ?? 1024, i = e.summaryTimeoutMs ?? 15e3, s = kl(t) ? t : null, c = kl(t) ? null : t;
|
|
7114
7188
|
if (c && !c.apiKey) {
|
|
7115
7189
|
e.summaryLlm && console.warn("[page-agent-sdk][summarization] summaryLlm 已配置但缺 apiKey,摘要回退主 agent 模型或零成本索引摘要");
|
|
7116
7190
|
return;
|
|
@@ -7122,16 +7196,16 @@ function wl(e) {
|
|
|
7122
7196
|
return !l && c && (l = await m(c, {
|
|
7123
7197
|
temperature: n,
|
|
7124
7198
|
maxTokens: r
|
|
7125
|
-
})),
|
|
7199
|
+
})), Al(await l.invoke([new o("你是对话历史压缩助手。把下面按轮次索引的对话要点,改写成一段连贯、紧凑的中文摘要,保留关键事实、用户意图与已用工具,不要编造。直接输出摘要正文。"), new a(e)], { signal: t.signal })).trim();
|
|
7126
7200
|
} finally {
|
|
7127
7201
|
clearTimeout(s);
|
|
7128
7202
|
}
|
|
7129
7203
|
};
|
|
7130
7204
|
}
|
|
7131
|
-
function
|
|
7205
|
+
function Ml(e) {
|
|
7132
7206
|
let t = e.titleLlm ?? e.summaryLlm ?? e.llm;
|
|
7133
7207
|
if (!t) return;
|
|
7134
|
-
let n =
|
|
7208
|
+
let n = kl(t) ? t : null, r = kl(t) ? null : t;
|
|
7135
7209
|
if (r && !r.apiKey) return;
|
|
7136
7210
|
let i = n;
|
|
7137
7211
|
return async (t) => {
|
|
@@ -7142,7 +7216,7 @@ function Tl(e) {
|
|
|
7142
7216
|
maxTokens: 30
|
|
7143
7217
|
}));
|
|
7144
7218
|
let t = await i.invoke([new o(e.i18n?.locale === "en-US" ? "Generate a short English title (max 10 words) summarizing the conversation below. Output the title text only, no quotes or punctuation." : "根据以下对话的主旨,生成一个简短的中文标题(不超过15个字,不要标点和引号,直接输出标题文字)。"), new a(n)], { signal: s.signal }), c = e.i18n?.locale === "en-US" ? 60 : 20;
|
|
7145
|
-
return
|
|
7219
|
+
return Al(t).trim().replace(/^["'""「『]|["'""」』]$/g, "").split("\n")[0].slice(0, c);
|
|
7146
7220
|
} catch {
|
|
7147
7221
|
return "";
|
|
7148
7222
|
} finally {
|
|
@@ -7150,10 +7224,10 @@ function Tl(e) {
|
|
|
7150
7224
|
}
|
|
7151
7225
|
};
|
|
7152
7226
|
}
|
|
7153
|
-
function
|
|
7227
|
+
function Nl() {
|
|
7154
7228
|
return `call_dec_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
|
|
7155
7229
|
}
|
|
7156
|
-
function
|
|
7230
|
+
function Pl(e) {
|
|
7157
7231
|
let t = e.match(/```(?:json)?\s*([\s\S]*?)```/), n = t ? t[1] : e, r = n.indexOf("{"), i = n.lastIndexOf("}");
|
|
7158
7232
|
if (r < 0 || i < 0 || i <= r) return null;
|
|
7159
7233
|
try {
|
|
@@ -7162,21 +7236,21 @@ function Dl(e) {
|
|
|
7162
7236
|
return null;
|
|
7163
7237
|
}
|
|
7164
7238
|
}
|
|
7165
|
-
function
|
|
7239
|
+
function Fl(e) {
|
|
7166
7240
|
if (!e) return null;
|
|
7167
|
-
let t =
|
|
7241
|
+
let t = Pl(e);
|
|
7168
7242
|
if (t == null) return null;
|
|
7169
|
-
let n =
|
|
7243
|
+
let n = Dl.safeParse(t);
|
|
7170
7244
|
return n.success ? n.data : null;
|
|
7171
7245
|
}
|
|
7172
|
-
async function
|
|
7246
|
+
async function Il(e, t, n, r) {
|
|
7173
7247
|
let i = [...n];
|
|
7174
7248
|
for (let n = 0; n < 3; n++) {
|
|
7175
7249
|
let n = await e.invoke(i, { signal: r }), a = n?.tool_calls ?? [];
|
|
7176
|
-
if (!a.length) return
|
|
7250
|
+
if (!a.length) return Al(n).trim();
|
|
7177
7251
|
i = [...i, n];
|
|
7178
7252
|
for (let e of a) {
|
|
7179
|
-
let n = e.id ??
|
|
7253
|
+
let n = e.id ?? Nl();
|
|
7180
7254
|
try {
|
|
7181
7255
|
let r = await t.invoke(e.args ?? {}), a = typeof r == "string" ? r : r?.content ?? JSON.stringify(r);
|
|
7182
7256
|
i = [...i, new s({
|
|
@@ -7193,10 +7267,10 @@ async function kl(e, t, n, r) {
|
|
|
7193
7267
|
}
|
|
7194
7268
|
return "";
|
|
7195
7269
|
}
|
|
7196
|
-
function
|
|
7270
|
+
function Ll(e) {
|
|
7197
7271
|
let t = e.summaryLlm ?? e.llm;
|
|
7198
7272
|
if (!t) return;
|
|
7199
|
-
let n =
|
|
7273
|
+
let n = kl(t) ? t : null, r = kl(t) ? null : t;
|
|
7200
7274
|
if (r && !r.apiKey) return;
|
|
7201
7275
|
let i = e.decisionTimeoutMs ?? 6e3, s = e.decisionMaxTokens ?? 2048, c = n;
|
|
7202
7276
|
return async (e) => {
|
|
@@ -7208,12 +7282,12 @@ function Al(e) {
|
|
|
7208
7282
|
}));
|
|
7209
7283
|
let n = c;
|
|
7210
7284
|
if (typeof n.bindTools != "function") return null;
|
|
7211
|
-
let i =
|
|
7285
|
+
let i = El({
|
|
7212
7286
|
getMessages: e.getMessages,
|
|
7213
7287
|
getSnapshot: e.getSnapshot,
|
|
7214
7288
|
contextWindow: e.contextWindow
|
|
7215
7289
|
}), l = n.bindTools([i]), u = e.triggerMode === "token" ? "token 模式:必填 windowRatio(0~1 保留窗口预算比例,如 0.4);keepRounds 可选" : "轮数模式:必填 keepRounds(保留最近几轮,如 6);windowRatio 可选", d = [new o(`你是对话历史压缩决策助手。当前触发模式 = ${e.triggerMode}(${e.triggerReason})。先调用 inspect_context 查看上下文构成,再输出压缩决策 JSON。${u}。仅输出 JSON,不要多余文字/markdown。schema:{keepRounds?(int 0-50), windowRatio?(0-1), summarize:{mode:"index"|"llm"}, recallTopK?(int 0-10), preserveTools?(string[]≤10), reason?(≤200字)}。keepRounds/windowRatio 至少填一个。`), new a(`触发原因:${e.triggerReason}\n上下文窗口:${e.contextWindow ?? "未知"} tokens\n阈值比例:${e.thresholdRatio ?? "未知"}\n\n请决策压缩策略(先 inspect_context 查看,再输出 JSON)。`)];
|
|
7216
|
-
return
|
|
7290
|
+
return Fl(await Il(l, i, d, t.signal)) || Fl(await Il(l, i, [...d, new a("上一次输出无效(JSON 解析失败或 schema 校验不通过)。请只输出符合 schema 的压缩决策 JSON,不要多余文字/markdown 代码块。")], t.signal));
|
|
7217
7291
|
} catch {
|
|
7218
7292
|
return null;
|
|
7219
7293
|
} finally {
|
|
@@ -7221,8 +7295,8 @@ function Al(e) {
|
|
|
7221
7295
|
}
|
|
7222
7296
|
};
|
|
7223
7297
|
}
|
|
7224
|
-
function
|
|
7225
|
-
let t = e.llm, n =
|
|
7298
|
+
function Rl(e) {
|
|
7299
|
+
let t = e.llm, n = kl(e.llm) ? void 0 : e.llm;
|
|
7226
7300
|
return {
|
|
7227
7301
|
modelCaps: Ci({
|
|
7228
7302
|
model: n?.model ?? t?.model ?? t?.modelName,
|
|
@@ -7230,25 +7304,38 @@ function jl(e) {
|
|
|
7230
7304
|
maxOutputTokens: e.maxOutputTokens ?? n?.maxOutputTokens ?? t?.maxOutputTokens,
|
|
7231
7305
|
vision: n?.vision ?? t?.vision
|
|
7232
7306
|
}),
|
|
7233
|
-
summaryLlmInvoke:
|
|
7234
|
-
titleLlmInvoke:
|
|
7235
|
-
compressDecisionInvoke:
|
|
7307
|
+
summaryLlmInvoke: jl(e),
|
|
7308
|
+
titleLlmInvoke: Ml(e),
|
|
7309
|
+
compressDecisionInvoke: Ll(e)
|
|
7236
7310
|
};
|
|
7237
7311
|
}
|
|
7238
7312
|
//#endregion
|
|
7239
7313
|
//#region src/core/sdk/conflictManager.ts
|
|
7240
|
-
function
|
|
7241
|
-
let
|
|
7242
|
-
function
|
|
7243
|
-
|
|
7244
|
-
|
|
7314
|
+
function zl(e, t) {
|
|
7315
|
+
let n = /* @__PURE__ */ jt(null), r = 0;
|
|
7316
|
+
function i(i) {
|
|
7317
|
+
let a = t?.() ?? "ask";
|
|
7318
|
+
if (a !== "ask") {
|
|
7319
|
+
let t = {
|
|
7320
|
+
...i,
|
|
7321
|
+
id: ++r,
|
|
7322
|
+
resolve: () => {},
|
|
7323
|
+
autoResolved: a
|
|
7324
|
+
}, n = e?.();
|
|
7325
|
+
return n?.({
|
|
7326
|
+
type: "conflict",
|
|
7327
|
+
conflict: t
|
|
7328
|
+
}), Promise.resolve({ action: a });
|
|
7329
|
+
}
|
|
7330
|
+
return new Promise((t) => {
|
|
7331
|
+
let a = n.value;
|
|
7245
7332
|
a && a.resolve({ action: "keep_external" });
|
|
7246
7333
|
let o = {
|
|
7247
|
-
...
|
|
7248
|
-
id: ++
|
|
7249
|
-
resolve:
|
|
7334
|
+
...i,
|
|
7335
|
+
id: ++r,
|
|
7336
|
+
resolve: t
|
|
7250
7337
|
};
|
|
7251
|
-
|
|
7338
|
+
n.value = o;
|
|
7252
7339
|
let s = e?.();
|
|
7253
7340
|
s?.({
|
|
7254
7341
|
type: "conflict",
|
|
@@ -7256,19 +7343,19 @@ function Ml(e) {
|
|
|
7256
7343
|
});
|
|
7257
7344
|
});
|
|
7258
7345
|
}
|
|
7259
|
-
function
|
|
7260
|
-
let
|
|
7261
|
-
|
|
7346
|
+
function a(e) {
|
|
7347
|
+
let t = n.value;
|
|
7348
|
+
t && (n.value = null, t.resolve({ action: e }));
|
|
7262
7349
|
}
|
|
7263
7350
|
return {
|
|
7264
|
-
pendingConflict:
|
|
7265
|
-
set:
|
|
7266
|
-
resolve:
|
|
7351
|
+
pendingConflict: n,
|
|
7352
|
+
set: i,
|
|
7353
|
+
resolve: a
|
|
7267
7354
|
};
|
|
7268
7355
|
}
|
|
7269
7356
|
//#endregion
|
|
7270
7357
|
//#region src/core/utils/id.ts
|
|
7271
|
-
function
|
|
7358
|
+
function Bl() {
|
|
7272
7359
|
try {
|
|
7273
7360
|
if (typeof crypto < "u" && typeof crypto.randomUUID == "function") return crypto.randomUUID();
|
|
7274
7361
|
} catch {}
|
|
@@ -7276,7 +7363,7 @@ function Nl() {
|
|
|
7276
7363
|
}
|
|
7277
7364
|
//#endregion
|
|
7278
7365
|
//#region src/core/backends/storage.ts
|
|
7279
|
-
var
|
|
7366
|
+
var Vl = "chat-sdk", Hl = 50 * 1024 * 1024, Ul = 4 * 1024 * 1024, Wl = 10 * 1024 * 1024, Gl = .9, Kl = 500, ql = 300, Jl = "__meta__", Yl = "v:1", Xl = [
|
|
7280
7367
|
"messages",
|
|
7281
7368
|
"vfs",
|
|
7282
7369
|
"todos",
|
|
@@ -7287,51 +7374,51 @@ var Pl = "chat-sdk", Fl = 50 * 1024 * 1024, Il = 4 * 1024 * 1024, Ll = 10 * 1024
|
|
|
7287
7374
|
"workingMemory",
|
|
7288
7375
|
"focus"
|
|
7289
7376
|
];
|
|
7290
|
-
function
|
|
7291
|
-
return e === "local" || e === "session" ?
|
|
7377
|
+
function Zl(e) {
|
|
7378
|
+
return e === "local" || e === "session" ? Ul : Hl;
|
|
7292
7379
|
}
|
|
7293
|
-
function
|
|
7380
|
+
function Ql(e) {
|
|
7294
7381
|
if (typeof e != "object" || !e) return !1;
|
|
7295
7382
|
let t = e;
|
|
7296
7383
|
return t.name === "QuotaExceededError" || t.name === "NS_ERROR_DOM_QUOTA_REACHED" || t.code === 22 || t.code === 1014;
|
|
7297
7384
|
}
|
|
7298
|
-
function
|
|
7385
|
+
function $l(e, t, n, r) {
|
|
7299
7386
|
return [
|
|
7300
|
-
|
|
7387
|
+
Yl,
|
|
7301
7388
|
e,
|
|
7302
7389
|
t,
|
|
7303
7390
|
n,
|
|
7304
7391
|
r
|
|
7305
7392
|
].join("::");
|
|
7306
7393
|
}
|
|
7307
|
-
function
|
|
7394
|
+
function eu(e, t, n) {
|
|
7308
7395
|
return [
|
|
7309
|
-
|
|
7396
|
+
Yl,
|
|
7310
7397
|
e,
|
|
7311
7398
|
t,
|
|
7312
7399
|
n
|
|
7313
7400
|
].join("::") + "::";
|
|
7314
7401
|
}
|
|
7315
|
-
function
|
|
7402
|
+
function tu(e, t) {
|
|
7316
7403
|
return [
|
|
7317
|
-
|
|
7404
|
+
Yl,
|
|
7318
7405
|
e,
|
|
7319
7406
|
t
|
|
7320
7407
|
].join("::") + "::";
|
|
7321
7408
|
}
|
|
7322
|
-
function
|
|
7323
|
-
return [
|
|
7409
|
+
function nu(e) {
|
|
7410
|
+
return [Yl, e].join("::") + "::";
|
|
7324
7411
|
}
|
|
7325
|
-
var
|
|
7326
|
-
function
|
|
7327
|
-
|
|
7412
|
+
var ru = null;
|
|
7413
|
+
function iu(e) {
|
|
7414
|
+
ru ||= new TextEncoder();
|
|
7328
7415
|
try {
|
|
7329
|
-
return
|
|
7416
|
+
return ru.encode(JSON.stringify(e)).length;
|
|
7330
7417
|
} catch {
|
|
7331
7418
|
return 0;
|
|
7332
7419
|
}
|
|
7333
7420
|
}
|
|
7334
|
-
function
|
|
7421
|
+
function au(e, t, n) {
|
|
7335
7422
|
let r = e.reduce((e, t) => e + t.bytes, 0);
|
|
7336
7423
|
if (r <= t) return [];
|
|
7337
7424
|
let i = t * n, a = [...e].sort((e, t) => e.lastAccessed - t.lastAccessed), o = [];
|
|
@@ -7341,7 +7428,7 @@ function Ql(e, t, n) {
|
|
|
7341
7428
|
}
|
|
7342
7429
|
return o;
|
|
7343
7430
|
}
|
|
7344
|
-
function
|
|
7431
|
+
function ou() {
|
|
7345
7432
|
let e = /* @__PURE__ */ new Map();
|
|
7346
7433
|
return {
|
|
7347
7434
|
async get(t) {
|
|
@@ -7361,7 +7448,7 @@ function $l() {
|
|
|
7361
7448
|
}
|
|
7362
7449
|
};
|
|
7363
7450
|
}
|
|
7364
|
-
function
|
|
7451
|
+
function su(e) {
|
|
7365
7452
|
return new Promise((t, n) => {
|
|
7366
7453
|
if (typeof indexedDB > "u") {
|
|
7367
7454
|
n(/* @__PURE__ */ Error("indexedDB 不可用"));
|
|
@@ -7422,7 +7509,7 @@ function eu(e) {
|
|
|
7422
7509
|
}, r.onerror = () => n(r.error);
|
|
7423
7510
|
});
|
|
7424
7511
|
}
|
|
7425
|
-
function
|
|
7512
|
+
function cu(e) {
|
|
7426
7513
|
return {
|
|
7427
7514
|
async get(t) {
|
|
7428
7515
|
let n = e.getItem(t);
|
|
@@ -7467,12 +7554,12 @@ function tu(e) {
|
|
|
7467
7554
|
}
|
|
7468
7555
|
};
|
|
7469
7556
|
}
|
|
7470
|
-
function
|
|
7557
|
+
function lu(e, t, n) {
|
|
7471
7558
|
let r = (e.get(t) ?? Promise.resolve()).then(n, n);
|
|
7472
7559
|
return e.set(t, r.then(() => void 0, () => void 0)), r;
|
|
7473
7560
|
}
|
|
7474
|
-
function
|
|
7475
|
-
let t = e.dbName ??
|
|
7561
|
+
function uu(e = {}) {
|
|
7562
|
+
let t = e.dbName ?? Vl, n = e.backend ?? "indexed", r = e.maxBytes ?? Zl(n), i = e.maxBytesPerSession ?? Wl, a = e.evictionWatermark ?? Gl, o = e.debounceMs ?? Kl, s = /* @__PURE__ */ new Set();
|
|
7476
7563
|
function c(e) {
|
|
7477
7564
|
for (let t of s) try {
|
|
7478
7565
|
t(e);
|
|
@@ -7485,16 +7572,16 @@ function ru(e = {}) {
|
|
|
7485
7572
|
try {
|
|
7486
7573
|
if (n === "indexed") {
|
|
7487
7574
|
if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
|
|
7488
|
-
l = await
|
|
7575
|
+
l = await su(t), d(!0);
|
|
7489
7576
|
} else if (n === "session") {
|
|
7490
7577
|
if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
|
|
7491
|
-
l =
|
|
7578
|
+
l = cu(sessionStorage), d(!0);
|
|
7492
7579
|
} else if (n === "local") {
|
|
7493
7580
|
if (typeof localStorage > "u") throw Error("localStorage 不可用");
|
|
7494
|
-
l =
|
|
7495
|
-
} else l =
|
|
7581
|
+
l = cu(localStorage), d(!0);
|
|
7582
|
+
} else l = ou(), d(!1);
|
|
7496
7583
|
} catch (e) {
|
|
7497
|
-
l =
|
|
7584
|
+
l = ou();
|
|
7498
7585
|
let t = e instanceof Error ? e.message : String(e);
|
|
7499
7586
|
d(!1), Promise.resolve().then(() => c({
|
|
7500
7587
|
type: "degraded",
|
|
@@ -7504,10 +7591,10 @@ function ru(e = {}) {
|
|
|
7504
7591
|
})();
|
|
7505
7592
|
let p = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map();
|
|
7506
7593
|
function g(e, n, r, a) {
|
|
7507
|
-
let o =
|
|
7508
|
-
return
|
|
7594
|
+
let o = $l(t, r, a, Jl);
|
|
7595
|
+
return lu(h, o, async () => {
|
|
7509
7596
|
let t = async () => {
|
|
7510
|
-
let t = await l.get(o), s = await l.get(e), u = s == null ? 0 :
|
|
7597
|
+
let t = await l.get(o), s = await l.get(e), u = s == null ? 0 : iu(s), d = iu(n), f = (t?.bytes ?? 0) + (d - u);
|
|
7511
7598
|
if (f > i) {
|
|
7512
7599
|
c({
|
|
7513
7600
|
type: "quota",
|
|
@@ -7529,12 +7616,12 @@ function ru(e = {}) {
|
|
|
7529
7616
|
try {
|
|
7530
7617
|
await t();
|
|
7531
7618
|
} catch (e) {
|
|
7532
|
-
if (
|
|
7619
|
+
if (Ql(e) && !u) {
|
|
7533
7620
|
u = !0;
|
|
7534
7621
|
try {
|
|
7535
7622
|
await b();
|
|
7536
7623
|
} catch {}
|
|
7537
|
-
l =
|
|
7624
|
+
l = ou(), Promise.resolve().then(() => c({
|
|
7538
7625
|
type: "degraded",
|
|
7539
7626
|
reason: "存储配额超限(QuotaExceededError),已淘汰最旧会话并降级内存"
|
|
7540
7627
|
}));
|
|
@@ -7546,7 +7633,7 @@ function ru(e = {}) {
|
|
|
7546
7633
|
});
|
|
7547
7634
|
}
|
|
7548
7635
|
function _(e, n, r, i) {
|
|
7549
|
-
let a =
|
|
7636
|
+
let a = $l(t, e, n, r), s = p.get(a);
|
|
7550
7637
|
s && s.resolve();
|
|
7551
7638
|
let c = m.get(a);
|
|
7552
7639
|
return c && clearTimeout(c), new Promise((t) => {
|
|
@@ -7573,15 +7660,15 @@ function ru(e = {}) {
|
|
|
7573
7660
|
function y() {
|
|
7574
7661
|
v ||= setTimeout(() => {
|
|
7575
7662
|
v = null, b();
|
|
7576
|
-
},
|
|
7663
|
+
}, ql);
|
|
7577
7664
|
}
|
|
7578
7665
|
async function b() {
|
|
7579
7666
|
let e = [];
|
|
7580
|
-
await l.scan(
|
|
7667
|
+
await l.scan(nu(t), (t, n) => {
|
|
7581
7668
|
t.endsWith("::__meta__") && e.push(n);
|
|
7582
7669
|
});
|
|
7583
|
-
let n =
|
|
7584
|
-
for (let e of n) await l.clearPrefix(
|
|
7670
|
+
let n = au(e, r, a);
|
|
7671
|
+
for (let e of n) await l.clearPrefix(eu(t, e.agentId, e.sessionId)), c({
|
|
7585
7672
|
type: "evicted",
|
|
7586
7673
|
agentId: e.agentId,
|
|
7587
7674
|
sessionId: e.sessionId,
|
|
@@ -7592,13 +7679,13 @@ function ru(e = {}) {
|
|
|
7592
7679
|
ready: f,
|
|
7593
7680
|
async listSessions(e) {
|
|
7594
7681
|
let n = [];
|
|
7595
|
-
return await l.scan(
|
|
7682
|
+
return await l.scan(tu(t, e), (e, t) => {
|
|
7596
7683
|
e.endsWith("::__meta__") && n.push(t);
|
|
7597
7684
|
}), n.sort((e, t) => t.lastAccessed - e.lastAccessed);
|
|
7598
7685
|
},
|
|
7599
7686
|
async load(e, n) {
|
|
7600
|
-
let r =
|
|
7601
|
-
return await
|
|
7687
|
+
let r = $l(t, e, n, Jl);
|
|
7688
|
+
return await lu(h, r, async () => {
|
|
7602
7689
|
let i = await l.get(r);
|
|
7603
7690
|
if (!i) return;
|
|
7604
7691
|
let a = {
|
|
@@ -7607,8 +7694,8 @@ function ru(e = {}) {
|
|
|
7607
7694
|
todos: [],
|
|
7608
7695
|
memory: ""
|
|
7609
7696
|
};
|
|
7610
|
-
for (let r of
|
|
7611
|
-
let i = await l.get(
|
|
7697
|
+
for (let r of Xl) {
|
|
7698
|
+
let i = await l.get($l(t, e, n, r));
|
|
7612
7699
|
i != null && (a[r] = i);
|
|
7613
7700
|
}
|
|
7614
7701
|
return i.lastAccessed = Date.now(), await l.set(r, i), a;
|
|
@@ -7616,12 +7703,12 @@ function ru(e = {}) {
|
|
|
7616
7703
|
},
|
|
7617
7704
|
async save(e, t, n) {
|
|
7618
7705
|
let r = [];
|
|
7619
|
-
for (let i of
|
|
7706
|
+
for (let i of Xl) n[i] !== void 0 && r.push(_(e, t, i, n[i]));
|
|
7620
7707
|
await Promise.all(r);
|
|
7621
7708
|
},
|
|
7622
7709
|
async updateTitle(e, n, r) {
|
|
7623
|
-
let i =
|
|
7624
|
-
return
|
|
7710
|
+
let i = $l(t, e, n, Jl);
|
|
7711
|
+
return lu(h, i, async () => {
|
|
7625
7712
|
let e = await l.get(i);
|
|
7626
7713
|
e && (e.title = r, e.lastAccessed = Date.now(), await l.set(i, e));
|
|
7627
7714
|
});
|
|
@@ -7637,13 +7724,13 @@ function ru(e = {}) {
|
|
|
7637
7724
|
})), c({ type: "flush" }), await b();
|
|
7638
7725
|
},
|
|
7639
7726
|
async deleteSession(e, n) {
|
|
7640
|
-
let r =
|
|
7727
|
+
let r = eu(t, e, n);
|
|
7641
7728
|
for (let [e, t] of p.entries()) e.startsWith(r) && (t.resolve(), p.delete(e));
|
|
7642
7729
|
for (let [e, t] of m.entries()) e.startsWith(r) && (clearTimeout(t), m.delete(e));
|
|
7643
7730
|
await l.clearPrefix(r);
|
|
7644
7731
|
},
|
|
7645
7732
|
async createSession(e, n, r) {
|
|
7646
|
-
let i = r ??
|
|
7733
|
+
let i = r ?? Bl(), a = Date.now(), o = {
|
|
7647
7734
|
agentId: e,
|
|
7648
7735
|
sessionId: i,
|
|
7649
7736
|
createdAt: a,
|
|
@@ -7651,7 +7738,7 @@ function ru(e = {}) {
|
|
|
7651
7738
|
bytes: 0,
|
|
7652
7739
|
title: n
|
|
7653
7740
|
};
|
|
7654
|
-
return await l.set(
|
|
7741
|
+
return await l.set($l(t, e, i, Jl), o), i;
|
|
7655
7742
|
},
|
|
7656
7743
|
onEvent(e) {
|
|
7657
7744
|
s.add(e);
|
|
@@ -7666,15 +7753,15 @@ function ru(e = {}) {
|
|
|
7666
7753
|
}
|
|
7667
7754
|
//#endregion
|
|
7668
7755
|
//#region src/core/sdk/optionsResolver.ts
|
|
7669
|
-
function
|
|
7670
|
-
return e === void 0 ?
|
|
7756
|
+
function du(e) {
|
|
7757
|
+
return e === void 0 ? uu({ backend: "memory" }) : e === !1 ? null : typeof e == "string" ? uu({ backend: e }) : e.enabled === !1 ? null : uu(e);
|
|
7671
7758
|
}
|
|
7672
|
-
function
|
|
7759
|
+
function fu(e) {
|
|
7673
7760
|
return e.dialog ?? {};
|
|
7674
7761
|
}
|
|
7675
7762
|
//#endregion
|
|
7676
7763
|
//#region src/core/capabilities.ts
|
|
7677
|
-
var
|
|
7764
|
+
var pu = [
|
|
7678
7765
|
{
|
|
7679
7766
|
name: "dataOps",
|
|
7680
7767
|
defaultOn: !0
|
|
@@ -7767,13 +7854,13 @@ var ou = [
|
|
|
7767
7854
|
defaultOn: !1
|
|
7768
7855
|
}
|
|
7769
7856
|
];
|
|
7770
|
-
function
|
|
7857
|
+
function mu(e) {
|
|
7771
7858
|
let t = {};
|
|
7772
|
-
for (let n of
|
|
7859
|
+
for (let n of pu) {
|
|
7773
7860
|
let r = e?.[n.name];
|
|
7774
7861
|
t[n.name] = n.defaultOn ? r !== !1 : r === !0;
|
|
7775
7862
|
}
|
|
7776
|
-
for (let e of
|
|
7863
|
+
for (let e of pu) if (e.requires && t[e.name]) {
|
|
7777
7864
|
for (let n of e.requires) if (!t[n]) {
|
|
7778
7865
|
t[e.name] = !1;
|
|
7779
7866
|
break;
|
|
@@ -7783,7 +7870,7 @@ function su(e) {
|
|
|
7783
7870
|
}
|
|
7784
7871
|
//#endregion
|
|
7785
7872
|
//#region src/core/sdk/events.ts
|
|
7786
|
-
function
|
|
7873
|
+
function hu(e) {
|
|
7787
7874
|
let t = /* @__PURE__ */ new Set(), n = (n) => {
|
|
7788
7875
|
if (n.type !== "approval_request") {
|
|
7789
7876
|
if (e) try {
|
|
@@ -7809,7 +7896,7 @@ function cu(e) {
|
|
|
7809
7896
|
}
|
|
7810
7897
|
//#endregion
|
|
7811
7898
|
//#region src/core/sdk/contextPreset.ts
|
|
7812
|
-
var
|
|
7899
|
+
var gu = {
|
|
7813
7900
|
auto: {
|
|
7814
7901
|
summaryThresholdRatio: .5,
|
|
7815
7902
|
windowRatio: .4,
|
|
@@ -7837,7 +7924,7 @@ var lu = {
|
|
|
7837
7924
|
enableRecall: !0,
|
|
7838
7925
|
enableLLMSummary: !0
|
|
7839
7926
|
}
|
|
7840
|
-
},
|
|
7927
|
+
}, _u = {
|
|
7841
7928
|
auto: ["describe_data", "read"],
|
|
7842
7929
|
conservative: ["describe_data"],
|
|
7843
7930
|
aggressive: ["describe_data", "read"],
|
|
@@ -7848,8 +7935,8 @@ var lu = {
|
|
|
7848
7935
|
"search_data"
|
|
7849
7936
|
]
|
|
7850
7937
|
};
|
|
7851
|
-
function
|
|
7852
|
-
let n =
|
|
7938
|
+
function vu(e, t) {
|
|
7939
|
+
let n = gu[e.contextPreset ?? "auto"] ?? {}, r = e.contextOptions === !1 ? {} : e.contextOptions ?? {};
|
|
7853
7940
|
return {
|
|
7854
7941
|
...n,
|
|
7855
7942
|
...r,
|
|
@@ -7859,7 +7946,7 @@ function du(e, t) {
|
|
|
7859
7946
|
}
|
|
7860
7947
|
//#endregion
|
|
7861
7948
|
//#region src/core/sdk/middlewareStack.ts
|
|
7862
|
-
var
|
|
7949
|
+
var yu = {
|
|
7863
7950
|
dataHint: 10,
|
|
7864
7951
|
usageHints: 20,
|
|
7865
7952
|
todos: 30,
|
|
@@ -7876,17 +7963,17 @@ var fu = {
|
|
|
7876
7963
|
subagents: 140,
|
|
7877
7964
|
augmentSystem: 150
|
|
7878
7965
|
};
|
|
7879
|
-
function
|
|
7966
|
+
function bu(e) {
|
|
7880
7967
|
return e.map((e, t) => ({
|
|
7881
7968
|
m: e,
|
|
7882
7969
|
i: t,
|
|
7883
|
-
p:
|
|
7970
|
+
p: yu[e.name] ?? Infinity
|
|
7884
7971
|
})).sort((e, t) => e.p - t.p || e.i - t.i).map((e) => e.m);
|
|
7885
7972
|
}
|
|
7886
7973
|
//#endregion
|
|
7887
7974
|
//#region src/core/tools/dataSlotQuery.ts
|
|
7888
|
-
var
|
|
7889
|
-
function
|
|
7975
|
+
var xu = /[\w$-]/;
|
|
7976
|
+
function Su(e) {
|
|
7890
7977
|
let t = [], n = e.trim(), r = +(n[0] === "$");
|
|
7891
7978
|
for (; r < n.length;) {
|
|
7892
7979
|
let e = n[r];
|
|
@@ -7897,7 +7984,7 @@ function hu(e) {
|
|
|
7897
7984
|
continue;
|
|
7898
7985
|
}
|
|
7899
7986
|
let e = "";
|
|
7900
|
-
for (; r < n.length &&
|
|
7987
|
+
for (; r < n.length && xu.test(n[r]);) e += n[r++];
|
|
7901
7988
|
if (!e) throw Error("JSONPath: .. 后缺属性名");
|
|
7902
7989
|
t.push({
|
|
7903
7990
|
type: "descendKey",
|
|
@@ -7910,7 +7997,7 @@ function hu(e) {
|
|
|
7910
7997
|
continue;
|
|
7911
7998
|
}
|
|
7912
7999
|
let e = "";
|
|
7913
|
-
for (; r < n.length &&
|
|
8000
|
+
for (; r < n.length && xu.test(n[r]);) e += n[r++];
|
|
7914
8001
|
if (!e) throw Error("JSONPath: . 后缺属性名");
|
|
7915
8002
|
t.push({
|
|
7916
8003
|
type: "key",
|
|
@@ -7966,7 +8053,7 @@ function hu(e) {
|
|
|
7966
8053
|
}
|
|
7967
8054
|
return t;
|
|
7968
8055
|
}
|
|
7969
|
-
function
|
|
8056
|
+
function Cu(e) {
|
|
7970
8057
|
let t = [], n = 0, r = e.trim();
|
|
7971
8058
|
for (; n < r.length;) {
|
|
7972
8059
|
let e = r[n];
|
|
@@ -8011,7 +8098,7 @@ function gu(e) {
|
|
|
8011
8098
|
}
|
|
8012
8099
|
return t;
|
|
8013
8100
|
}
|
|
8014
|
-
var
|
|
8101
|
+
var wu = class {
|
|
8015
8102
|
toks;
|
|
8016
8103
|
item;
|
|
8017
8104
|
pos = 0;
|
|
@@ -8047,12 +8134,12 @@ var _u = class {
|
|
|
8047
8134
|
return this.next(), e;
|
|
8048
8135
|
}
|
|
8049
8136
|
let e = this.operand(), t = this.peek();
|
|
8050
|
-
return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(),
|
|
8137
|
+
return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(), Du(t, e, this.operand())) : Tu(e);
|
|
8051
8138
|
}
|
|
8052
8139
|
operand() {
|
|
8053
8140
|
let e = this.next();
|
|
8054
8141
|
if (e === void 0) throw Error("过滤表达式:缺操作数");
|
|
8055
|
-
if (e.startsWith("@")) return
|
|
8142
|
+
if (e.startsWith("@")) return Eu(e, this.item);
|
|
8056
8143
|
if (e[0] === "'" || e[0] === "\"") return e.slice(1, -1);
|
|
8057
8144
|
if (e === "true") return !0;
|
|
8058
8145
|
if (e === "false") return !1;
|
|
@@ -8062,10 +8149,10 @@ var _u = class {
|
|
|
8062
8149
|
throw Error(`过滤表达式:未知操作数 '${e}'`);
|
|
8063
8150
|
}
|
|
8064
8151
|
};
|
|
8065
|
-
function
|
|
8152
|
+
function Tu(e) {
|
|
8066
8153
|
return !!e && e !== 0 && e !== "" && e !== null;
|
|
8067
8154
|
}
|
|
8068
|
-
function
|
|
8155
|
+
function Eu(e, t) {
|
|
8069
8156
|
let n = e.split(".").filter((e) => e && e !== "@"), r = t;
|
|
8070
8157
|
for (let e of n) {
|
|
8071
8158
|
if (typeof r != "object" || !r) return;
|
|
@@ -8073,7 +8160,7 @@ function yu(e, t) {
|
|
|
8073
8160
|
}
|
|
8074
8161
|
return r;
|
|
8075
8162
|
}
|
|
8076
|
-
function
|
|
8163
|
+
function Du(e, t, n) {
|
|
8077
8164
|
switch (e) {
|
|
8078
8165
|
case "==": return t === n;
|
|
8079
8166
|
case "!=": return t !== n;
|
|
@@ -8084,47 +8171,47 @@ function bu(e, t, n) {
|
|
|
8084
8171
|
default: return !1;
|
|
8085
8172
|
}
|
|
8086
8173
|
}
|
|
8087
|
-
function
|
|
8088
|
-
return new
|
|
8174
|
+
function Ou(e, t) {
|
|
8175
|
+
return new wu(Cu(e), t).parse();
|
|
8089
8176
|
}
|
|
8090
|
-
function
|
|
8177
|
+
function ku(e, t) {
|
|
8091
8178
|
return e ? `${e}.${t}` : String(t);
|
|
8092
8179
|
}
|
|
8093
|
-
function
|
|
8180
|
+
function Au(e, t) {
|
|
8094
8181
|
let n = [{
|
|
8095
8182
|
path: "",
|
|
8096
8183
|
value: e
|
|
8097
8184
|
}];
|
|
8098
|
-
for (let e of
|
|
8185
|
+
for (let e of Su(t)) {
|
|
8099
8186
|
let t = [];
|
|
8100
8187
|
if (e.type === "key") for (let r of n) r.value != null && typeof r.value == "object" && e.key in r.value && t.push({
|
|
8101
|
-
path:
|
|
8188
|
+
path: ku(r.path, e.key),
|
|
8102
8189
|
value: r.value[e.key]
|
|
8103
8190
|
});
|
|
8104
8191
|
else if (e.type === "index") {
|
|
8105
8192
|
for (let r of n) if (Array.isArray(r.value)) {
|
|
8106
8193
|
let n = r.value[e.index];
|
|
8107
8194
|
e.index >= 0 && e.index < r.value.length && t.push({
|
|
8108
|
-
path:
|
|
8195
|
+
path: ku(r.path, e.index),
|
|
8109
8196
|
value: n,
|
|
8110
8197
|
index: e.index
|
|
8111
8198
|
});
|
|
8112
8199
|
}
|
|
8113
8200
|
} else if (e.type === "wildcard") {
|
|
8114
8201
|
for (let e of n) if (Array.isArray(e.value)) e.value.forEach((n, r) => t.push({
|
|
8115
|
-
path:
|
|
8202
|
+
path: ku(e.path, r),
|
|
8116
8203
|
value: n,
|
|
8117
8204
|
index: r
|
|
8118
8205
|
}));
|
|
8119
8206
|
else if (e.value != null && typeof e.value == "object") for (let n of Object.keys(e.value)) t.push({
|
|
8120
|
-
path:
|
|
8207
|
+
path: ku(e.path, n),
|
|
8121
8208
|
value: e.value[n]
|
|
8122
8209
|
});
|
|
8123
8210
|
} else if (e.type === "descendKey") {
|
|
8124
8211
|
let r = e.key, i = (e) => {
|
|
8125
8212
|
if (!(e.value == null || typeof e.value != "object")) for (let n of Object.keys(e.value)) {
|
|
8126
8213
|
let a = {
|
|
8127
|
-
path:
|
|
8214
|
+
path: ku(e.path, n),
|
|
8128
8215
|
value: e.value[n]
|
|
8129
8216
|
};
|
|
8130
8217
|
n === r && t.push(a), i(a);
|
|
@@ -8135,7 +8222,7 @@ function Cu(e, t) {
|
|
|
8135
8222
|
let e = (n) => {
|
|
8136
8223
|
if (!(n.value == null || typeof n.value != "object")) for (let r of Object.keys(n.value)) {
|
|
8137
8224
|
let i = {
|
|
8138
|
-
path:
|
|
8225
|
+
path: ku(n.path, r),
|
|
8139
8226
|
value: n.value[r]
|
|
8140
8227
|
};
|
|
8141
8228
|
t.push(i), e(i);
|
|
@@ -8144,16 +8231,16 @@ function Cu(e, t) {
|
|
|
8144
8231
|
for (let t of n) e(t);
|
|
8145
8232
|
} else if (e.type === "filter") {
|
|
8146
8233
|
for (let r of n) if (Array.isArray(r.value)) r.value.forEach((n, i) => {
|
|
8147
|
-
|
|
8148
|
-
path:
|
|
8234
|
+
Ou(e.filter, n) && t.push({
|
|
8235
|
+
path: ku(r.path, i),
|
|
8149
8236
|
value: n,
|
|
8150
8237
|
index: i
|
|
8151
8238
|
});
|
|
8152
8239
|
});
|
|
8153
8240
|
else if (r.value != null && typeof r.value == "object") for (let n of Object.keys(r.value)) {
|
|
8154
8241
|
let i = r.value[n];
|
|
8155
|
-
|
|
8156
|
-
path:
|
|
8242
|
+
Ou(e.filter, i) && t.push({
|
|
8243
|
+
path: ku(r.path, n),
|
|
8157
8244
|
value: i
|
|
8158
8245
|
});
|
|
8159
8246
|
}
|
|
@@ -8162,7 +8249,7 @@ function Cu(e, t) {
|
|
|
8162
8249
|
}
|
|
8163
8250
|
return n;
|
|
8164
8251
|
}
|
|
8165
|
-
function
|
|
8252
|
+
function ju(e, t) {
|
|
8166
8253
|
let n = e.length, r = t.length;
|
|
8167
8254
|
if (!n) return r;
|
|
8168
8255
|
if (!r) return n;
|
|
@@ -8178,7 +8265,7 @@ function wu(e, t) {
|
|
|
8178
8265
|
}
|
|
8179
8266
|
return i[r];
|
|
8180
8267
|
}
|
|
8181
|
-
function
|
|
8268
|
+
function Mu(e, t, n = {}) {
|
|
8182
8269
|
let r = n.mode || "substring", i = n.limit ?? 50, a = n.matchKey !== !1, o = [], s = null;
|
|
8183
8270
|
if (r === "regex") try {
|
|
8184
8271
|
s = new RegExp(t, "i");
|
|
@@ -8188,11 +8275,11 @@ function Tu(e, t, n = {}) {
|
|
|
8188
8275
|
let c = (e, l, u) => {
|
|
8189
8276
|
if (o.length >= i || e == null) return;
|
|
8190
8277
|
if (typeof e == "object") {
|
|
8191
|
-
if (Array.isArray(e)) e.forEach((e, t) => c(e,
|
|
8192
|
-
else for (let t of Object.keys(e)) c(e[t],
|
|
8278
|
+
if (Array.isArray(e)) e.forEach((e, t) => c(e, ku(l, t), String(t)));
|
|
8279
|
+
else for (let t of Object.keys(e)) c(e[t], ku(l, t), t);
|
|
8193
8280
|
return;
|
|
8194
8281
|
}
|
|
8195
|
-
let d = String(e), f =
|
|
8282
|
+
let d = String(e), f = Nu(d, t, r, n.fuzzyThreshold ?? 2, s);
|
|
8196
8283
|
if (f) {
|
|
8197
8284
|
o.push({
|
|
8198
8285
|
path: l,
|
|
@@ -8203,7 +8290,7 @@ function Tu(e, t, n = {}) {
|
|
|
8203
8290
|
return;
|
|
8204
8291
|
}
|
|
8205
8292
|
if (a && u) {
|
|
8206
|
-
let e =
|
|
8293
|
+
let e = Nu(u, t, r, n.fuzzyThreshold ?? 2, s);
|
|
8207
8294
|
e && o.push({
|
|
8208
8295
|
path: l,
|
|
8209
8296
|
key: u,
|
|
@@ -8214,51 +8301,51 @@ function Tu(e, t, n = {}) {
|
|
|
8214
8301
|
};
|
|
8215
8302
|
return c(e, ""), o;
|
|
8216
8303
|
}
|
|
8217
|
-
function
|
|
8304
|
+
function Nu(e, t, n, r, i) {
|
|
8218
8305
|
let a = e.toLowerCase(), o = t.toLowerCase();
|
|
8219
8306
|
if (n === "substring") return a.includes(o) ? 1 : null;
|
|
8220
8307
|
if (n === "regex") return i && i.test(e) ? 1 : null;
|
|
8221
8308
|
if (n === "fuzzy") {
|
|
8222
8309
|
if (a.includes(o)) return 2;
|
|
8223
|
-
let e =
|
|
8310
|
+
let e = ju(a, o);
|
|
8224
8311
|
return e <= r ? r - e + 1 : null;
|
|
8225
8312
|
}
|
|
8226
8313
|
return null;
|
|
8227
8314
|
}
|
|
8228
|
-
function
|
|
8315
|
+
function Pu(e, t, n = 3e3) {
|
|
8229
8316
|
return To(t, n)(e);
|
|
8230
8317
|
}
|
|
8231
8318
|
//#endregion
|
|
8232
8319
|
//#region src/core/tools/resources.ts
|
|
8233
|
-
var
|
|
8234
|
-
function
|
|
8235
|
-
return `${
|
|
8320
|
+
var Fu = "⟦frozen:", Iu = "⟦res:", Lu = "⟧";
|
|
8321
|
+
function Ru(e) {
|
|
8322
|
+
return `${Fu}${e}${Lu}`;
|
|
8236
8323
|
}
|
|
8237
|
-
function
|
|
8238
|
-
return `${
|
|
8324
|
+
function zu(e) {
|
|
8325
|
+
return `${Iu}${e}${Lu}`;
|
|
8239
8326
|
}
|
|
8240
|
-
function
|
|
8241
|
-
return typeof e == "string" ? e.startsWith(
|
|
8327
|
+
function Bu(e) {
|
|
8328
|
+
return typeof e == "string" ? e.startsWith(Fu) && e.endsWith(Lu) ? {
|
|
8242
8329
|
type: "frozen",
|
|
8243
8330
|
path: e.slice(8, e.length - 1)
|
|
8244
|
-
} : e.startsWith(
|
|
8331
|
+
} : e.startsWith(Iu) && e.endsWith(Lu) ? {
|
|
8245
8332
|
type: "res",
|
|
8246
8333
|
handle: e.slice(5, e.length - 1)
|
|
8247
8334
|
} : null : null;
|
|
8248
8335
|
}
|
|
8249
|
-
function
|
|
8336
|
+
function Vu(e) {
|
|
8250
8337
|
return String(e ?? "").trim().replace(/^\.+/, "");
|
|
8251
8338
|
}
|
|
8252
|
-
function
|
|
8339
|
+
function Hu(e) {
|
|
8253
8340
|
let t = 5381;
|
|
8254
8341
|
for (let n = 0; n < e.length; n++) t = (t * 33 ^ e.charCodeAt(n)) >>> 0;
|
|
8255
8342
|
return (t >>> 0).toString(16).padStart(8, "0").slice(0, 8);
|
|
8256
8343
|
}
|
|
8257
|
-
function
|
|
8344
|
+
function Uu(e, t) {
|
|
8258
8345
|
return e === t ? !0 : e && t && typeof e == "object" && typeof t == "object" ? JSON.stringify(e) === JSON.stringify(t) : !1;
|
|
8259
8346
|
}
|
|
8260
|
-
function
|
|
8261
|
-
let n =
|
|
8347
|
+
function Wu(e, t) {
|
|
8348
|
+
let n = Vu(e);
|
|
8262
8349
|
if (!n) return;
|
|
8263
8350
|
let r = t.get(n);
|
|
8264
8351
|
if (r) return {
|
|
@@ -8278,7 +8365,7 @@ function Lu(e, t) {
|
|
|
8278
8365
|
}));
|
|
8279
8366
|
return i;
|
|
8280
8367
|
}
|
|
8281
|
-
var
|
|
8368
|
+
var Gu = class {
|
|
8282
8369
|
vfs;
|
|
8283
8370
|
constructor(e) {
|
|
8284
8371
|
this.vfs = e;
|
|
@@ -8287,7 +8374,7 @@ var Ru = class {
|
|
|
8287
8374
|
return `resources/${e}.json`;
|
|
8288
8375
|
}
|
|
8289
8376
|
ensure(e, t, n) {
|
|
8290
|
-
let r =
|
|
8377
|
+
let r = Hu(e), i = {
|
|
8291
8378
|
path: e,
|
|
8292
8379
|
mode: n,
|
|
8293
8380
|
value: t,
|
|
@@ -8299,7 +8386,7 @@ var Ru = class {
|
|
|
8299
8386
|
}, r;
|
|
8300
8387
|
}
|
|
8301
8388
|
get(e) {
|
|
8302
|
-
return this.readEntry(this.key(e)) || this.readEntry(this.key(
|
|
8389
|
+
return this.readEntry(this.key(e)) || this.readEntry(this.key(Hu(e)));
|
|
8303
8390
|
}
|
|
8304
8391
|
readEntry(e) {
|
|
8305
8392
|
let t = this.vfs.files[e];
|
|
@@ -8315,7 +8402,7 @@ var Ru = class {
|
|
|
8315
8402
|
this.ensure(e, t, n?.mode ?? "verbatim");
|
|
8316
8403
|
}
|
|
8317
8404
|
delete(e) {
|
|
8318
|
-
let t = this.get(e)?.handle ??
|
|
8405
|
+
let t = this.get(e)?.handle ?? Hu(e), n = this.key(t), r = !!this.vfs.files[n];
|
|
8319
8406
|
return r && delete this.vfs.files[n], r;
|
|
8320
8407
|
}
|
|
8321
8408
|
list() {
|
|
@@ -8335,7 +8422,7 @@ var Ru = class {
|
|
|
8335
8422
|
for (let e of Object.keys(this.vfs.files)) e.startsWith("resources/") && delete this.vfs.files[e];
|
|
8336
8423
|
}
|
|
8337
8424
|
};
|
|
8338
|
-
function
|
|
8425
|
+
function Ku(e) {
|
|
8339
8426
|
let { jp: t, resolved: n, resourcesByPath: r, resourceStore: i } = e;
|
|
8340
8427
|
if (!r.size) return n;
|
|
8341
8428
|
let a = !1;
|
|
@@ -8344,19 +8431,19 @@ function zu(e) {
|
|
|
8344
8431
|
break;
|
|
8345
8432
|
}
|
|
8346
8433
|
if (!a) return n;
|
|
8347
|
-
let o =
|
|
8434
|
+
let o = eo(n);
|
|
8348
8435
|
for (let [e, n] of r) {
|
|
8349
8436
|
if (t !== "" && e !== t && !e.startsWith(t + ".")) continue;
|
|
8350
8437
|
if (e === t) {
|
|
8351
8438
|
if (o === void 0) continue;
|
|
8352
|
-
return n.mode === "freeze" ?
|
|
8439
|
+
return n.mode === "freeze" ? Ru(e) : i ? zu(i.ensure(e, o, "verbatim")) : o;
|
|
8353
8440
|
}
|
|
8354
8441
|
let r = t === "" ? e : e.slice(t.length + 1), a = Z(o, r);
|
|
8355
|
-
a !== void 0 && (n.mode === "freeze" ? Qa(o, r,
|
|
8442
|
+
a !== void 0 && (n.mode === "freeze" ? Qa(o, r, Ru(e)) : i && Qa(o, r, zu(i.ensure(e, a, "verbatim"))));
|
|
8356
8443
|
}
|
|
8357
8444
|
return o;
|
|
8358
8445
|
}
|
|
8359
|
-
function
|
|
8446
|
+
function qu(e, t, n, r) {
|
|
8360
8447
|
if (!r) return {
|
|
8361
8448
|
code: "RESOURCE_NOT_FOUND",
|
|
8362
8449
|
message: `句柄 "${e}" 无法展开(资源池未启用)`,
|
|
@@ -8367,7 +8454,7 @@ function Bu(e, t, n, r) {
|
|
|
8367
8454
|
code: "RESOURCE_NOT_FOUND",
|
|
8368
8455
|
message: `字段 "${t}" 在 bind 中已不存在,无法展开句柄 "${e}"`,
|
|
8369
8456
|
hint: "该字段可能已被删除或 restore 到不含此字段的快照;重新 read 确认当前结构"
|
|
8370
|
-
} :
|
|
8457
|
+
} : Uu(i.value, n) ? { value: i.value } : (r.update(t, n), { value: n }) : n === void 0 ? {
|
|
8371
8458
|
code: "RESOURCE_NOT_FOUND",
|
|
8372
8459
|
message: `句柄 "${e}" 不存在(字段 "${t}" 可能未注册或已被删除)`,
|
|
8373
8460
|
hint: "重新 read 该字段触发懒注册"
|
|
@@ -8377,7 +8464,7 @@ function Bu(e, t, n, r) {
|
|
|
8377
8464
|
hint: "重新 read 该字段触发懒注册重建句柄,再写回新句柄 ⟦res:<handle>⟧"
|
|
8378
8465
|
};
|
|
8379
8466
|
}
|
|
8380
|
-
function
|
|
8467
|
+
function Ju(e, t) {
|
|
8381
8468
|
let n = t.getBind();
|
|
8382
8469
|
for (let [r, i] of t.resourcesByPath) {
|
|
8383
8470
|
let a = Z(n, r), o = Z(e, r);
|
|
@@ -8386,11 +8473,11 @@ function Vu(e, t) {
|
|
|
8386
8473
|
continue;
|
|
8387
8474
|
}
|
|
8388
8475
|
if (i.mode === "freeze") {
|
|
8389
|
-
if (o ===
|
|
8476
|
+
if (o === Ru(r)) {
|
|
8390
8477
|
Qa(e, r, a);
|
|
8391
8478
|
continue;
|
|
8392
8479
|
}
|
|
8393
|
-
if (!
|
|
8480
|
+
if (!Uu(o, a)) return {
|
|
8394
8481
|
ok: !1,
|
|
8395
8482
|
code: "FROZEN_FIELD",
|
|
8396
8483
|
path: r,
|
|
@@ -8398,9 +8485,9 @@ function Vu(e, t) {
|
|
|
8398
8485
|
hint: "该字段由系统/集成方维护,LLM 不得改动。如需展示其值用 resource_get({path}) 取真值"
|
|
8399
8486
|
};
|
|
8400
8487
|
} else {
|
|
8401
|
-
let n =
|
|
8488
|
+
let n = Bu(o);
|
|
8402
8489
|
if (n && n.type === "res") {
|
|
8403
|
-
let i =
|
|
8490
|
+
let i = qu(n.handle, r, a, t.resourceStore);
|
|
8404
8491
|
if ("value" in i) {
|
|
8405
8492
|
Qa(e, r, i.value);
|
|
8406
8493
|
continue;
|
|
@@ -8413,7 +8500,7 @@ function Vu(e, t) {
|
|
|
8413
8500
|
hint: i.hint
|
|
8414
8501
|
};
|
|
8415
8502
|
}
|
|
8416
|
-
if (!
|
|
8503
|
+
if (!Uu(o, a)) return {
|
|
8417
8504
|
ok: !1,
|
|
8418
8505
|
code: "VERBATIM_MISMATCH",
|
|
8419
8506
|
path: r,
|
|
@@ -8424,7 +8511,7 @@ function Vu(e, t) {
|
|
|
8424
8511
|
}
|
|
8425
8512
|
return { ok: !0 };
|
|
8426
8513
|
}
|
|
8427
|
-
function
|
|
8514
|
+
function Yu(e, t, n) {
|
|
8428
8515
|
let r = t === void 0 ? e.message : `patches[${t}]${n ? ` @ "${n}"` : ""}: ${e.message}`;
|
|
8429
8516
|
return Y({
|
|
8430
8517
|
code: e.code,
|
|
@@ -8437,28 +8524,28 @@ function Hu(e, t, n) {
|
|
|
8437
8524
|
} }
|
|
8438
8525
|
});
|
|
8439
8526
|
}
|
|
8440
|
-
function
|
|
8527
|
+
function Xu(e) {
|
|
8441
8528
|
let { value: t, ctx: n } = e;
|
|
8442
8529
|
if (!n || !n.resourcesByPath.size) return {
|
|
8443
8530
|
ok: !0,
|
|
8444
8531
|
value: t
|
|
8445
8532
|
};
|
|
8446
|
-
let r =
|
|
8533
|
+
let r = eo(t), i = Ju(r, n);
|
|
8447
8534
|
return i.ok ? {
|
|
8448
8535
|
ok: !0,
|
|
8449
8536
|
value: r
|
|
8450
8537
|
} : {
|
|
8451
8538
|
ok: !1,
|
|
8452
|
-
error:
|
|
8539
|
+
error: Yu(i)
|
|
8453
8540
|
};
|
|
8454
8541
|
}
|
|
8455
|
-
function
|
|
8542
|
+
function Zu(e) {
|
|
8456
8543
|
let { patches: t, clone: n, ctx: r } = e;
|
|
8457
8544
|
if (!r || !r.resourcesByPath.size) return { ok: !0 };
|
|
8458
8545
|
for (let e = 0; e < t.length; e++) {
|
|
8459
8546
|
let n = t[e];
|
|
8460
8547
|
if (n.op === "remove") {
|
|
8461
|
-
let t =
|
|
8548
|
+
let t = Wu(n.jsonPath || "", r.resourcesByPath);
|
|
8462
8549
|
if (t) {
|
|
8463
8550
|
let r = t.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED", i = t.spec.mode === "freeze" ? "冻结字段不可删。如需移除请联系集成方调整 data.resources 配置" : "verbatim 字段不可直接删;先 resource_delete({path}) 释放资源保护后再删";
|
|
8464
8551
|
return {
|
|
@@ -8477,27 +8564,27 @@ function Wu(e) {
|
|
|
8477
8564
|
}
|
|
8478
8565
|
}
|
|
8479
8566
|
}
|
|
8480
|
-
let i =
|
|
8567
|
+
let i = Ju(n, r);
|
|
8481
8568
|
if (!i.ok) {
|
|
8482
|
-
let e =
|
|
8569
|
+
let e = Qu(i.path, t);
|
|
8483
8570
|
return {
|
|
8484
8571
|
ok: !1,
|
|
8485
|
-
error:
|
|
8572
|
+
error: Yu(i, e >= 0 ? e : void 0, e >= 0 ? t[e].jsonPath : void 0)
|
|
8486
8573
|
};
|
|
8487
8574
|
}
|
|
8488
8575
|
return { ok: !0 };
|
|
8489
8576
|
}
|
|
8490
|
-
function
|
|
8491
|
-
let n =
|
|
8577
|
+
function Qu(e, t) {
|
|
8578
|
+
let n = Vu(e);
|
|
8492
8579
|
for (let e = 0; e < t.length; e++) {
|
|
8493
|
-
let r =
|
|
8580
|
+
let r = Vu(t[e].jsonPath || "");
|
|
8494
8581
|
if (r && (r === n || n.startsWith(r + ".") || r.startsWith(n + "."))) return e;
|
|
8495
8582
|
}
|
|
8496
8583
|
return -1;
|
|
8497
8584
|
}
|
|
8498
8585
|
//#endregion
|
|
8499
8586
|
//#region src/core/tools/dataOps.ts
|
|
8500
|
-
var
|
|
8587
|
+
var $u = /* @__PURE__ */ new Set([
|
|
8501
8588
|
"describe_data",
|
|
8502
8589
|
"get_data",
|
|
8503
8590
|
"set_data",
|
|
@@ -8511,14 +8598,14 @@ var Ku = /* @__PURE__ */ new Set([
|
|
|
8511
8598
|
"resource_update",
|
|
8512
8599
|
"resource_list",
|
|
8513
8600
|
"resource_delete"
|
|
8514
|
-
]),
|
|
8515
|
-
function
|
|
8516
|
-
return t === "advanced" ? e : t === "minimal" ? e.filter((e) =>
|
|
8601
|
+
]), ed = /* @__PURE__ */ new Set(["read", "write"]);
|
|
8602
|
+
function td(e, t = "advanced") {
|
|
8603
|
+
return t === "advanced" ? e : t === "minimal" ? e.filter((e) => ed.has(e.name)) : e.filter((e) => !$u.has(e.name));
|
|
8517
8604
|
}
|
|
8518
|
-
function
|
|
8519
|
-
let { bindRef: t, schema: n, allowKeys: r, snapshots: i, maxSnapshots: a, audit: o, dryRun: s, op: c = "set", protectedCtx: l } = e, u = e.value, d = e.internalAfterWrite ?
|
|
8605
|
+
function nd(e) {
|
|
8606
|
+
let { bindRef: t, schema: n, allowKeys: r, snapshots: i, maxSnapshots: a, audit: o, dryRun: s, op: c = "set", protectedCtx: l } = e, u = e.value, d = e.internalAfterWrite ? eo(t) : null;
|
|
8520
8607
|
if (l) {
|
|
8521
|
-
let e =
|
|
8608
|
+
let e = Xu({
|
|
8522
8609
|
value: u,
|
|
8523
8610
|
ctx: l
|
|
8524
8611
|
});
|
|
@@ -8557,7 +8644,7 @@ function Yu(e) {
|
|
|
8557
8644
|
hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹(如 {value:\"x\"})或集成方通过 sdk.setData 替换 bind"
|
|
8558
8645
|
})
|
|
8559
8646
|
};
|
|
8560
|
-
let m =
|
|
8647
|
+
let m = eo(t), h = i.length ? i[i.length - 1].id + 1 : 1;
|
|
8561
8648
|
for (i.push({
|
|
8562
8649
|
id: h,
|
|
8563
8650
|
ts: Date.now(),
|
|
@@ -8570,12 +8657,12 @@ function Yu(e) {
|
|
|
8570
8657
|
timestamp: Date.now()
|
|
8571
8658
|
}), e.onWrite?.(), e.internalAfterWrite?.(t, d), {
|
|
8572
8659
|
ok: !0,
|
|
8573
|
-
hash:
|
|
8660
|
+
hash: $(t),
|
|
8574
8661
|
data: f.data
|
|
8575
8662
|
};
|
|
8576
8663
|
}
|
|
8577
|
-
function
|
|
8578
|
-
let { bindRef: t, patches: n, schema: r, allowKeys: i, snapshots: a, maxSnapshots: o, markDataDirty: s, schemaErrorMode: c = "zod", snapshotLabel: l, dryRun: u, protectedCtx: d } = e, f = e.internalAfterWrite ?
|
|
8664
|
+
function rd(e) {
|
|
8665
|
+
let { bindRef: t, patches: n, schema: r, allowKeys: i, snapshots: a, maxSnapshots: o, markDataDirty: s, schemaErrorMode: c = "zod", snapshotLabel: l, dryRun: u, protectedCtx: d } = e, f = e.internalAfterWrite ? eo(t) : null, p = eo(t), m = [];
|
|
8579
8666
|
for (let e = 0; e < n.length; e++) {
|
|
8580
8667
|
let t = n[e], a = t.jsonPath || "";
|
|
8581
8668
|
if (Xa(a)) return {
|
|
@@ -8604,7 +8691,7 @@ function Xu(e) {
|
|
|
8604
8691
|
hint: `op 为 ${o} 时 value 必填;删除请用 op:'remove'`
|
|
8605
8692
|
})
|
|
8606
8693
|
};
|
|
8607
|
-
let n =
|
|
8694
|
+
let n = to(t.value);
|
|
8608
8695
|
if (n.parseError) return {
|
|
8609
8696
|
ok: !1,
|
|
8610
8697
|
error: Yr(`patches[${e}]`, t.value, n.parseError)
|
|
@@ -8634,7 +8721,7 @@ function Xu(e) {
|
|
|
8634
8721
|
});
|
|
8635
8722
|
}
|
|
8636
8723
|
if (d) {
|
|
8637
|
-
let e =
|
|
8724
|
+
let e = Zu({
|
|
8638
8725
|
patches: n,
|
|
8639
8726
|
clone: p,
|
|
8640
8727
|
ctx: d
|
|
@@ -8675,7 +8762,7 @@ function Xu(e) {
|
|
|
8675
8762
|
id: _,
|
|
8676
8763
|
ts: Date.now(),
|
|
8677
8764
|
op: "edit",
|
|
8678
|
-
value: f ??
|
|
8765
|
+
value: f ?? eo(t),
|
|
8679
8766
|
...l ? { label: l } : {}
|
|
8680
8767
|
}); a.length > o;) a.shift();
|
|
8681
8768
|
for (let e of m) e.op === "remove" && $a(t, e.jp);
|
|
@@ -8685,37 +8772,37 @@ function Xu(e) {
|
|
|
8685
8772
|
clone: p
|
|
8686
8773
|
};
|
|
8687
8774
|
}
|
|
8688
|
-
function
|
|
8775
|
+
function id(e) {
|
|
8689
8776
|
return e < 1024 ? `${e}B` : e < 1024 * 1024 ? `${(e / 1024).toFixed(1)}KB` : `${(e / (1024 * 1024)).toFixed(1)}MB`;
|
|
8690
8777
|
}
|
|
8691
|
-
function
|
|
8778
|
+
function ad(e, t, n, r) {
|
|
8692
8779
|
if (!t || !n.length || typeof e != "object" || !e) return e;
|
|
8693
|
-
let i = new Set(n.map((e) => e.field)), a =
|
|
8780
|
+
let i = new Set(n.map((e) => e.field)), a = eo(e);
|
|
8694
8781
|
return (function e(t) {
|
|
8695
8782
|
if (Array.isArray(t)) for (let n of t) e(n);
|
|
8696
8783
|
else if (t && typeof t == "object") for (let n of Object.keys(t)) {
|
|
8697
8784
|
let a = t[n];
|
|
8698
|
-
typeof a == "string" && i.has(n) && a.length >= r ? t[n] = `<${n} ${
|
|
8785
|
+
typeof a == "string" && i.has(n) && a.length >= r ? t[n] = `<${n} ${id(a.length)}>` : e(a);
|
|
8699
8786
|
}
|
|
8700
8787
|
})(a), a;
|
|
8701
8788
|
}
|
|
8702
|
-
var
|
|
8703
|
-
function
|
|
8704
|
-
return
|
|
8789
|
+
var od = 0;
|
|
8790
|
+
function sd() {
|
|
8791
|
+
return od++, "c_" + Math.random().toString(36).slice(2, 8) + od.toString(36);
|
|
8705
8792
|
}
|
|
8706
|
-
function
|
|
8793
|
+
function cd(e, t) {
|
|
8707
8794
|
if (!(!e || typeof e != "object")) for (let n of t) {
|
|
8708
8795
|
let t = Z(e, n);
|
|
8709
|
-
if (Array.isArray(t)) for (let e of t) e && typeof e == "object" && !("__pgId" in e) && (e.__pgId =
|
|
8796
|
+
if (Array.isArray(t)) for (let e of t) e && typeof e == "object" && !("__pgId" in e) && (e.__pgId = sd());
|
|
8710
8797
|
}
|
|
8711
8798
|
}
|
|
8712
|
-
function
|
|
8799
|
+
function ld(e) {
|
|
8713
8800
|
(function e(t) {
|
|
8714
8801
|
if (Array.isArray(t)) t.forEach(e);
|
|
8715
8802
|
else if (t && typeof t == "object") for (let n of Object.keys(t)) n.startsWith("__pg") ? delete t[n] : e(t[n]);
|
|
8716
8803
|
})(e);
|
|
8717
8804
|
}
|
|
8718
|
-
function
|
|
8805
|
+
function ud(e, n = {}) {
|
|
8719
8806
|
let i = n.pgIdPaths ?? [], a = i.length ? (e, t) => {
|
|
8720
8807
|
if (t && typeof t == "object") for (let n of i) {
|
|
8721
8808
|
let r = Z(t, n), i = Z(e, n);
|
|
@@ -8730,7 +8817,7 @@ function rd(e, n = {}) {
|
|
|
8730
8817
|
if (!(!t || typeof t != "object" || "__pgId" in t)) for (let e = 0; e < r.length; e++) {
|
|
8731
8818
|
if (o.has(e)) continue;
|
|
8732
8819
|
let n = r[e];
|
|
8733
|
-
if (!(!n || typeof n != "object" || !n.__pgId) &&
|
|
8820
|
+
if (!(!n || typeof n != "object" || !n.__pgId) && Uu(a(n), a(t))) {
|
|
8734
8821
|
t.__pgId = n.__pgId, o.add(e);
|
|
8735
8822
|
break;
|
|
8736
8823
|
}
|
|
@@ -8742,11 +8829,11 @@ function rd(e, n = {}) {
|
|
|
8742
8829
|
t && n && typeof n == "object" && !("__pgId" in n) && (n.__pgId = t, o.add(e));
|
|
8743
8830
|
}
|
|
8744
8831
|
}
|
|
8745
|
-
|
|
8746
|
-
} : void 0, o = i.length ? ja(e.schema, i).schema : e.schema, s = e.bind, c = e.description ?? "主数据对象", l = ua(o), u = /* @__PURE__ */ new Map(), d = n.vfsStore ? new
|
|
8832
|
+
cd(e, i);
|
|
8833
|
+
} : void 0, o = i.length ? ja(e.schema, i).schema : e.schema, s = e.bind, c = e.description ?? "主数据对象", l = ua(o), u = /* @__PURE__ */ new Map(), d = n.vfsStore ? new Gu(n.vfsStore) : void 0;
|
|
8747
8834
|
function f(e) {
|
|
8748
8835
|
if (u.clear(), e) for (let t of e) {
|
|
8749
|
-
let e =
|
|
8836
|
+
let e = Vu(t.path);
|
|
8750
8837
|
u.set(e, {
|
|
8751
8838
|
path: e,
|
|
8752
8839
|
mode: t.mode
|
|
@@ -8762,7 +8849,7 @@ function rd(e, n = {}) {
|
|
|
8762
8849
|
let n = t ?? _;
|
|
8763
8850
|
e === void 0 ? g.delete(n) : g.set(n, e);
|
|
8764
8851
|
}, x = (e) => {
|
|
8765
|
-
let t =
|
|
8852
|
+
let t = $(s);
|
|
8766
8853
|
return b(t, e), t;
|
|
8767
8854
|
}, S = n.autoLock !== !1, C = n.largeTextThreshold ?? 200, w = (n.largeTextPaths ?? []).map((e) => {
|
|
8768
8855
|
let t = e.lastIndexOf(".");
|
|
@@ -8801,8 +8888,13 @@ function rd(e, n = {}) {
|
|
|
8801
8888
|
g.delete(e);
|
|
8802
8889
|
},
|
|
8803
8890
|
recomputeBaseline: (e) => {
|
|
8804
|
-
g.set(e ?? "",
|
|
8891
|
+
g.set(e ?? "", $(s));
|
|
8892
|
+
},
|
|
8893
|
+
recomputeAllBaselines: () => {
|
|
8894
|
+
let e = $(s);
|
|
8895
|
+
for (let t of g.keys()) g.set(t, e);
|
|
8805
8896
|
},
|
|
8897
|
+
hasBaselines: () => g.size > 0,
|
|
8806
8898
|
getResourcesSnapshot: () => {
|
|
8807
8899
|
let e = [];
|
|
8808
8900
|
for (let [t, n] of u) if (n.mode === "verbatim") {
|
|
@@ -8822,7 +8914,7 @@ function rd(e, n = {}) {
|
|
|
8822
8914
|
return e;
|
|
8823
8915
|
},
|
|
8824
8916
|
createResource: d ? (e, t) => {
|
|
8825
|
-
let n =
|
|
8917
|
+
let n = Vu(e), r = u.get(n), i = t === void 0 ? Z(s, n) : t;
|
|
8826
8918
|
return d.ensure(n, i, r?.mode ?? "verbatim");
|
|
8827
8919
|
} : void 0,
|
|
8828
8920
|
getResource: d ? (e) => {
|
|
@@ -8835,7 +8927,7 @@ function rd(e, n = {}) {
|
|
|
8835
8927
|
} : void 0;
|
|
8836
8928
|
} : void 0,
|
|
8837
8929
|
updateResource: d ? (e, t) => {
|
|
8838
|
-
let n =
|
|
8930
|
+
let n = Vu(e);
|
|
8839
8931
|
d.update(n, t), Qa(s, n, t), E();
|
|
8840
8932
|
} : void 0,
|
|
8841
8933
|
deleteResource: d ? (e) => d.delete(e) : void 0,
|
|
@@ -8844,7 +8936,7 @@ function rd(e, n = {}) {
|
|
|
8844
8936
|
n.onAudit?.(e);
|
|
8845
8937
|
};
|
|
8846
8938
|
function k(e, t) {
|
|
8847
|
-
let n =
|
|
8939
|
+
let n = eo(s), r = m.length ? m[m.length - 1].id + 1 : 1;
|
|
8848
8940
|
for (m.push({
|
|
8849
8941
|
id: r,
|
|
8850
8942
|
ts: Date.now(),
|
|
@@ -8856,12 +8948,12 @@ function rd(e, n = {}) {
|
|
|
8856
8948
|
}
|
|
8857
8949
|
async function A(e, t, r) {
|
|
8858
8950
|
if (!t || t === "") return null;
|
|
8859
|
-
let i =
|
|
8951
|
+
let i = $(s);
|
|
8860
8952
|
if (i === t) return null;
|
|
8861
8953
|
if (!n.onConflict) return Y({
|
|
8862
8954
|
code: "VERSION_CONFLICT",
|
|
8863
8955
|
message: `乐观锁冲突:expectedHash=${t} 但当前 hash=${i}。主数据在你 read 之后已被修改(外部代码/其他 agent/用户手动改)。`,
|
|
8864
|
-
hint: `重新 read 拿最新值与 hash,基于最新值修改后再写入(传新的 expectedHash)。当前值:${
|
|
8956
|
+
hint: `重新 read 拿最新值与 hash,基于最新值修改后再写入(传新的 expectedHash)。当前值:${Q(s, 400)}`
|
|
8865
8957
|
});
|
|
8866
8958
|
let a = await n.onConflict({
|
|
8867
8959
|
op: e,
|
|
@@ -8871,11 +8963,11 @@ function rd(e, n = {}) {
|
|
|
8871
8963
|
expectedHash: t,
|
|
8872
8964
|
snapshotId: 0
|
|
8873
8965
|
});
|
|
8874
|
-
if (a.action === "keep_external") return `已保留外部修改(未写入)。当前值:${
|
|
8966
|
+
if (a.action === "keep_external") return `已保留外部修改(未写入)。当前值:${Q(s, 400)} (hash=${i})。请重新 read 拿最新值与 hash 再改。`;
|
|
8875
8967
|
if (a.action === "restore") {
|
|
8876
|
-
if (!m.length) return `无历史快照可回退(本次为首次操作)。当前值:${
|
|
8968
|
+
if (!m.length) return `无历史快照可回退(本次为首次操作)。当前值:${Q(s, 400)} (hash=${i})。请重新 read 再改或选「强制覆盖」。`;
|
|
8877
8969
|
let e = m[m.length - 1];
|
|
8878
|
-
return lo(s,
|
|
8970
|
+
return lo(s, eo(e.value)), E(), `已回退主数据到历史快照 #${e.id}[${e.op}]。当前值:${Q(s, 400)} (hash=${$(s)})。请基于回退后的值重写或停止。`;
|
|
8879
8971
|
}
|
|
8880
8972
|
return null;
|
|
8881
8973
|
}
|
|
@@ -8898,14 +8990,14 @@ function rd(e, n = {}) {
|
|
|
8898
8990
|
hint: "主数据仅暴露 schema 声明的字段;若需操作该字段,集成方需在 schema 中声明它"
|
|
8899
8991
|
});
|
|
8900
8992
|
let i = r ? Z(s, r) : s;
|
|
8901
|
-
!r && l && (i = ya(i, o)), p && (i =
|
|
8993
|
+
!r && l && (i = ya(i, o)), p && (i = Ku({
|
|
8902
8994
|
jp: r,
|
|
8903
8995
|
resolved: i,
|
|
8904
8996
|
resourcesByPath: p.resourcesByPath,
|
|
8905
8997
|
resourceStore: p.resourceStore
|
|
8906
8998
|
}));
|
|
8907
|
-
let a =
|
|
8908
|
-
return b(a, n), i === void 0 ? `主数据${r ? ` @ ${r}` : ""} = (undefined) (hash=${a})` : (i =
|
|
8999
|
+
let a = $(s);
|
|
9000
|
+
return b(a, n), i === void 0 ? `主数据${r ? ` @ ${r}` : ""} = (undefined) (hash=${a})` : (i = ad(i, n === "", w, C), `主数据${r ? ` @ ${r}` : ""} = ${Q(i)} (hash=${a})`);
|
|
8909
9001
|
}, {
|
|
8910
9002
|
name: "get_data",
|
|
8911
9003
|
description: "@deprecated(改用 read,等价且支持 fields/depth/分页)。读取主数据当前值(返回含 hash 供乐观锁);jsonPath 可选读子路径。大结果自动外存 vfs。",
|
|
@@ -8913,9 +9005,9 @@ function rd(e, n = {}) {
|
|
|
8913
9005
|
}), te = r(async ({ value: e, expectedHash: t }, n) => {
|
|
8914
9006
|
let r = v(n), i = await A("set", t || (S ? y(r) : void 0));
|
|
8915
9007
|
if (i !== null) return i;
|
|
8916
|
-
let c =
|
|
9008
|
+
let c = to(e);
|
|
8917
9009
|
if (c.parseError) return Yr("", e, c.parseError);
|
|
8918
|
-
let u =
|
|
9010
|
+
let u = nd({
|
|
8919
9011
|
bindRef: s,
|
|
8920
9012
|
value: c.parsed,
|
|
8921
9013
|
schema: o,
|
|
@@ -8927,7 +9019,7 @@ function rd(e, n = {}) {
|
|
|
8927
9019
|
internalAfterWrite: a,
|
|
8928
9020
|
protectedCtx: p
|
|
8929
9021
|
});
|
|
8930
|
-
return u.ok ? (b(u.hash, r), `已设置主数据 = ${
|
|
9022
|
+
return u.ok ? (b(u.hash, r), `已设置主数据 = ${Q(u.data, 600)} (新 hash=${u.hash})${l ? "(白名单模式:仅更新 schema 声明字段,未声明字段保留)" : ""}`) : u.error;
|
|
8931
9023
|
}, {
|
|
8932
9024
|
name: "set_data",
|
|
8933
9025
|
description: "@deprecated(改用 write,等价)。整体设置主数据(value 需过 schema 校验)。白名单模式:set 为根级浅合并,深层整体替换(未传字段丢失);保留深层字段用 edit_data({op:\"merge\"})。expectedHash 乐观锁可选(默认 autoLock)。",
|
|
@@ -8962,7 +9054,7 @@ function rd(e, n = {}) {
|
|
|
8962
9054
|
message: `edit 仅适用于对象/数组主数据,当前是 ${s === void 0 ? "undefined" : typeof s}`,
|
|
8963
9055
|
hint: "叶子(原始类型)请用 set_data 整体设置"
|
|
8964
9056
|
});
|
|
8965
|
-
let g =
|
|
9057
|
+
let g = rd({
|
|
8966
9058
|
bindRef: s,
|
|
8967
9059
|
patches: [{
|
|
8968
9060
|
op: r,
|
|
@@ -8987,7 +9079,7 @@ function rd(e, n = {}) {
|
|
|
8987
9079
|
timestamp: Date.now()
|
|
8988
9080
|
});
|
|
8989
9081
|
let b = x(n);
|
|
8990
|
-
return `已 edit 主数据(${_.op}${d ? " @ " + d : ""})。当前值:${
|
|
9082
|
+
return `已 edit 主数据(${_.op}${d ? " @ " + d : ""})。当前值:${Q(s, 600)} (新 hash=${b})`;
|
|
8991
9083
|
}, {
|
|
8992
9084
|
name: "edit_data",
|
|
8993
9085
|
description: "增量编辑主数据(advanced;simple 用 write 等价)。op:set/remove/merge/append/move;jsonPath 相对根(数组索引用数字);value 对象或 JSON 字符串。schema 校验失败不写;expectedHash 可选乐观锁。大对象优先增量改。",
|
|
@@ -9033,7 +9125,7 @@ function rd(e, n = {}) {
|
|
|
9033
9125
|
hint: "仅 schema 声明的 key 可删"
|
|
9034
9126
|
});
|
|
9035
9127
|
if (p) {
|
|
9036
|
-
let t =
|
|
9128
|
+
let t = Wu(e, p.resourcesByPath);
|
|
9037
9129
|
if (t) return Y({
|
|
9038
9130
|
code: t.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED",
|
|
9039
9131
|
message: `delete_data @ "${e}" 命中受保护字段 "${t.protectedPath}"(${t.spec.mode}),不可删除`,
|
|
@@ -9048,7 +9140,7 @@ function rd(e, n = {}) {
|
|
|
9048
9140
|
op: "delete",
|
|
9049
9141
|
detail: e,
|
|
9050
9142
|
timestamp: Date.now()
|
|
9051
|
-
}), b(
|
|
9143
|
+
}), b($(s), r), a ? `已删除主数据 @ ${e}` : `主数据 @ ${e} 不存在(无需删除)`;
|
|
9052
9144
|
}, {
|
|
9053
9145
|
name: "delete_data",
|
|
9054
9146
|
description: "删除主数据的某个子路径(jsonPath)。主数据整体不可删(用 set_data 整体替换)。expectedHash(可选):改前 read/get 返回的 hash;不传时自动用你最后读到的 hash(autoLock,默认开)防\"基于过期值删除\"。",
|
|
@@ -9072,11 +9164,11 @@ function rd(e, n = {}) {
|
|
|
9072
9164
|
hint: "用 history_data({list:true}) 查看可用快照序号"
|
|
9073
9165
|
});
|
|
9074
9166
|
let i = o.safeParse(r.value);
|
|
9075
|
-
return i.success ? (lo(s,
|
|
9167
|
+
return i.success ? (lo(s, eo(r.value)), E(), O({
|
|
9076
9168
|
op: "restore",
|
|
9077
9169
|
detail: `#${r.id}`,
|
|
9078
9170
|
timestamp: Date.now()
|
|
9079
|
-
}), b(
|
|
9171
|
+
}), b($(s), n), `已回退主数据到快照 #${r.id}[${r.op}]${r.label ? `(${r.label})` : ""}。`) : Y({
|
|
9080
9172
|
code: "SNAPSHOT_SCHEMA_INVALID",
|
|
9081
9173
|
message: `快照 #${r.id} 的值不符合当前 schema,无法回退`,
|
|
9082
9174
|
hint: "schema 可能已变更;该快照已过期,选其他快照或重新设置",
|
|
@@ -9108,7 +9200,7 @@ function rd(e, n = {}) {
|
|
|
9108
9200
|
message: `未找到快照 #${e}`,
|
|
9109
9201
|
hint: "不传 id 查看最近一次;或 history_data({list:true}) 查看可用序号"
|
|
9110
9202
|
});
|
|
9111
|
-
let i =
|
|
9203
|
+
let i = eo(r.value), a = t || "";
|
|
9112
9204
|
if (a) {
|
|
9113
9205
|
if (Xa(a)) return Y({
|
|
9114
9206
|
code: "PATH_UNSAFE",
|
|
@@ -9124,7 +9216,7 @@ function rd(e, n = {}) {
|
|
|
9124
9216
|
let e = pa(o, a);
|
|
9125
9217
|
e && (i = ya(i, e));
|
|
9126
9218
|
} else l && (i = ya(i, o));
|
|
9127
|
-
return `快照 #${r.id}[${r.op}]${r.label ? `(${r.label})` : ""}${a ? ` @ ${a}` : ""} = ${
|
|
9219
|
+
return `快照 #${r.id}[${r.op}]${r.label ? `(${r.label})` : ""}${a ? ` @ ${a}` : ""} = ${Q(i)}`;
|
|
9128
9220
|
}, {
|
|
9129
9221
|
name: "history_data",
|
|
9130
9222
|
description: "查看主数据快照(只读不回退当前)。list:true 列时间线;传 id 看某次快照内容(默认最近),jsonPath 可只看子路径。冲突诊断/看上一版用;对比差异用 diff_data;回退用 restore_data。",
|
|
@@ -9142,7 +9234,7 @@ function rd(e, n = {}) {
|
|
|
9142
9234
|
});
|
|
9143
9235
|
let i = l ? ya(s, o) : s, a;
|
|
9144
9236
|
try {
|
|
9145
|
-
a =
|
|
9237
|
+
a = Au(i, e);
|
|
9146
9238
|
} catch (t) {
|
|
9147
9239
|
return Y({
|
|
9148
9240
|
code: "JSONPATH_SYNTAX",
|
|
@@ -9151,7 +9243,7 @@ function rd(e, n = {}) {
|
|
|
9151
9243
|
details: { expr: e }
|
|
9152
9244
|
});
|
|
9153
9245
|
}
|
|
9154
|
-
let c = t ?? 50, u = a.slice(0, c), d = u.map((e) => `{"path":${JSON.stringify(e.path)},"index":${e.index === void 0 ? "null" : e.index},"value":${
|
|
9246
|
+
let c = t ?? 50, u = a.slice(0, c), d = u.map((e) => `{"path":${JSON.stringify(e.path)},"index":${e.index === void 0 ? "null" : e.index},"value":${Q(ad(e.value, r === "", w, C))}}`);
|
|
9155
9247
|
return `{"matched":${a.length},"returned":${u.length},"truncated":${a.length > c},"results":[${d.join(",")}]}`;
|
|
9156
9248
|
}, {
|
|
9157
9249
|
name: "query_data",
|
|
@@ -9166,13 +9258,13 @@ function rd(e, n = {}) {
|
|
|
9166
9258
|
message: "主数据为空,无可搜索内容"
|
|
9167
9259
|
});
|
|
9168
9260
|
try {
|
|
9169
|
-
let a =
|
|
9261
|
+
let a = Mu(l ? ya(s, o) : s, e, {
|
|
9170
9262
|
mode: t,
|
|
9171
9263
|
fuzzyThreshold: n,
|
|
9172
9264
|
matchKey: r,
|
|
9173
9265
|
limit: i ?? 50
|
|
9174
9266
|
});
|
|
9175
|
-
return
|
|
9267
|
+
return Q({
|
|
9176
9268
|
matched: a.length,
|
|
9177
9269
|
results: a
|
|
9178
9270
|
});
|
|
@@ -9217,7 +9309,7 @@ function rd(e, n = {}) {
|
|
|
9217
9309
|
e && (u = ya(u, e));
|
|
9218
9310
|
}
|
|
9219
9311
|
} else u = l ? ya(s, o) : s;
|
|
9220
|
-
let d =
|
|
9312
|
+
let d = eo(u), f = await Pu(d, e, c && JSON.stringify(d).length > 1e5 ? 8e3 : 3e3);
|
|
9221
9313
|
if (!f.ok) {
|
|
9222
9314
|
let t = /超时/.test(f.error || "");
|
|
9223
9315
|
return Y({
|
|
@@ -9233,7 +9325,7 @@ function rd(e, n = {}) {
|
|
|
9233
9325
|
if (t === "transform") {
|
|
9234
9326
|
let e = f.result;
|
|
9235
9327
|
if (c) {
|
|
9236
|
-
let t =
|
|
9328
|
+
let t = rd({
|
|
9237
9329
|
bindRef: s,
|
|
9238
9330
|
patches: [{
|
|
9239
9331
|
op: "set",
|
|
@@ -9254,7 +9346,7 @@ function rd(e, n = {}) {
|
|
|
9254
9346
|
op: "edit",
|
|
9255
9347
|
detail: `eval_transform_subtree @ ${c}`,
|
|
9256
9348
|
timestamp: Date.now()
|
|
9257
|
-
}), b(
|
|
9349
|
+
}), b($(s), i), `已通过脚本 transform 子树 @ ${c} 更新(耗时 ${f.elapsedMs}ms)。当前值: ${Q(s, 600)}`) : t.error;
|
|
9258
9350
|
}
|
|
9259
9351
|
if (e && typeof e == "object" && !Array.isArray(e) && "patches" in e && Array.isArray(e.patches)) {
|
|
9260
9352
|
if (typeof s != "object" || !s) return Y({
|
|
@@ -9262,7 +9354,7 @@ function rd(e, n = {}) {
|
|
|
9262
9354
|
message: `主数据 bind 为原始类型(${s === null ? "null" : typeof s}),eval transform(patches) 无法就地替换`,
|
|
9263
9355
|
hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹或集成方通过 sdk.setData 替换 bind"
|
|
9264
9356
|
});
|
|
9265
|
-
let t =
|
|
9357
|
+
let t = rd({
|
|
9266
9358
|
bindRef: s,
|
|
9267
9359
|
patches: e.patches,
|
|
9268
9360
|
schema: o,
|
|
@@ -9279,11 +9371,11 @@ function rd(e, n = {}) {
|
|
|
9279
9371
|
op: "edit",
|
|
9280
9372
|
detail: `eval_transform(${t.applied.length} patches)`,
|
|
9281
9373
|
timestamp: Date.now()
|
|
9282
|
-
}), b(
|
|
9374
|
+
}), b($(s), i), `已通过脚本 transform(patches) 更新主数据(${t.applied.length} 个 patch,耗时 ${f.elapsedMs}ms)。当前值: ${Q(s, 600)}`) : t.error;
|
|
9283
9375
|
}
|
|
9284
9376
|
let t = e;
|
|
9285
9377
|
if (p) {
|
|
9286
|
-
let e =
|
|
9378
|
+
let e = Xu({
|
|
9287
9379
|
value: t,
|
|
9288
9380
|
ctx: p
|
|
9289
9381
|
});
|
|
@@ -9299,14 +9391,14 @@ function rd(e, n = {}) {
|
|
|
9299
9391
|
op: "edit",
|
|
9300
9392
|
detail: "eval_transform",
|
|
9301
9393
|
timestamp: Date.now()
|
|
9302
|
-
}), b(
|
|
9394
|
+
}), b($(s), i), `已通过脚本 transform 更新主数据(耗时 ${f.elapsedMs}ms)。当前值: ${Q(s, 600)}`) : Y({
|
|
9303
9395
|
code: "SCHEMA_INVALID",
|
|
9304
9396
|
message: "脚本返回值校验失败,未写入(transform 模式要求返回主数据的完整新值且符合 schema)",
|
|
9305
9397
|
hint: "确认脚本 return 了完整新值(非部分);或返回 {patches:[...]} 走增量模式;按 describe_data() 查看格式",
|
|
9306
9398
|
details: qr(n.error.issues)
|
|
9307
9399
|
});
|
|
9308
9400
|
}
|
|
9309
|
-
return
|
|
9401
|
+
return Q({
|
|
9310
9402
|
ok: !0,
|
|
9311
9403
|
result: f.result,
|
|
9312
9404
|
elapsedMs: f.elapsedMs
|
|
@@ -9322,7 +9414,7 @@ function rd(e, n = {}) {
|
|
|
9322
9414
|
});
|
|
9323
9415
|
ee(oe, (e) => e?.mode === "transform");
|
|
9324
9416
|
let F = r(async ({ jsonPath: e, jsonPaths: t, fields: r, depth: i, offset: a, limit: u }, d) => {
|
|
9325
|
-
let f = v(d), m =
|
|
9417
|
+
let f = v(d), m = $(s);
|
|
9326
9418
|
if (t && t.length) {
|
|
9327
9419
|
let e = !1, a = t.map((t) => {
|
|
9328
9420
|
let a = t || "";
|
|
@@ -9335,7 +9427,7 @@ function rd(e, n = {}) {
|
|
|
9335
9427
|
e && (c = ya(c, e));
|
|
9336
9428
|
}
|
|
9337
9429
|
let u = c;
|
|
9338
|
-
if (p && (u =
|
|
9430
|
+
if (p && (u = Ku({
|
|
9339
9431
|
jp: a,
|
|
9340
9432
|
resolved: u,
|
|
9341
9433
|
resourcesByPath: p.resourcesByPath,
|
|
@@ -9345,7 +9437,7 @@ function rd(e, n = {}) {
|
|
|
9345
9437
|
} catch (e) {
|
|
9346
9438
|
return `- ${a}: [READ_INTERCEPT: ${e.message}]`;
|
|
9347
9439
|
}
|
|
9348
|
-
return r && r.length && (u =
|
|
9440
|
+
return r && r.length && (u = no(u, r)), i != null && (u = ro(u, i)), u = ad(u, f === "", w, C), u === void 0 ? `- ${a} = (undefined)` : `- ${a} = ${Q(u)}`;
|
|
9349
9441
|
});
|
|
9350
9442
|
return e && b(m, f), `多路径读取(共 ${t.length} 项,hash=${m}):\n${a.join("\n")}`;
|
|
9351
9443
|
}
|
|
@@ -9367,7 +9459,7 @@ function rd(e, n = {}) {
|
|
|
9367
9459
|
e && (g = ya(g, e));
|
|
9368
9460
|
}
|
|
9369
9461
|
let _ = g;
|
|
9370
|
-
if (p && (_ =
|
|
9462
|
+
if (p && (_ = Ku({
|
|
9371
9463
|
jp: h,
|
|
9372
9464
|
resolved: _,
|
|
9373
9465
|
resourcesByPath: p.resourcesByPath,
|
|
@@ -9380,13 +9472,13 @@ function rd(e, n = {}) {
|
|
|
9380
9472
|
message: `read 拦截器抛错: ${e.message}`
|
|
9381
9473
|
});
|
|
9382
9474
|
}
|
|
9383
|
-
b(m, f), r && r.length && (_ =
|
|
9475
|
+
b(m, f), r && r.length && (_ = no(_, r)), i != null && (_ = ro(_, i)), _ = ad(_, f === "", w, C);
|
|
9384
9476
|
let y = n.toolMode === "simple" || n.toolMode === "minimal" ? "字段约束与形状见 systemPrompt「可操作数据」段,或 read 子路径见实际值,照现有字段写。" : "字段约束(类型/min/max/enum/必填/默认)见 systemPrompt「可操作数据」段,或用 schema_data({ jsonPath }) 按需查。", x = e ? "" : `主数据说明: ${c}\n格式: 写入值需为 JSON,且通过声明的 schema 校验(校验失败时 write 会返回结构化错误)。${y}\n\n`, S = r && r.length ? `(字段裁剪:${r.join(",")})` : "", T = i == null ? "" : `(深度≤${i})`, E = S || T ? ` ${S}${T}` : "";
|
|
9385
9477
|
if ((a !== void 0 || u !== void 0) && Array.isArray(_)) {
|
|
9386
9478
|
let e = _.length, t = Math.max(0, a ?? 0), n = Math.min(200, Math.max(1, u ?? 50)), r = _.slice(t, t + n), i = t + n < e;
|
|
9387
|
-
return `${x}主数据${h ? ` @ ${h}` : ""} 数组分页[offset=${t},limit=${n}]${E} = ${
|
|
9479
|
+
return `${x}主数据${h ? ` @ ${h}` : ""} 数组分页[offset=${t},limit=${n}]${E} = ${Q(r)} (total=${e}, hasMore=${i}) (hash=${m})`;
|
|
9388
9480
|
}
|
|
9389
|
-
return _ === void 0 ? `${x}主数据${h ? ` @ ${h}` : ""}${E} = (undefined) (hash=${m})` : `${x}主数据${h ? ` @ ${h}` : ""}${E} = ${
|
|
9481
|
+
return _ === void 0 ? `${x}主数据${h ? ` @ ${h}` : ""}${E} = (undefined) (hash=${m})` : `${x}主数据${h ? ` @ ${h}` : ""}${E} = ${Q(_)} (hash=${m})`;
|
|
9390
9482
|
}, {
|
|
9391
9483
|
name: "read",
|
|
9392
9484
|
description: "读取主数据(高层入口,合并 describe/get)。不传 jsonPath → 返回主数据说明 + 格式提示(含字段约束);传 jsonPath → 返回该子路径当前值 + hash;传 jsonPaths → 一次读多个不相关子路径(省多轮往返)。hash 用于乐观锁(默认 autoLock,write 时自动比对,无需手动传)。fields(字段裁剪)/depth(深度截断)减体积;offset+limit 对数组目标分页(返回切片 + total/hasMore)。集成方可能经 read 拦截器对返回值脱敏/派生。",
|
|
@@ -9429,7 +9521,7 @@ function rd(e, n = {}) {
|
|
|
9429
9521
|
}
|
|
9430
9522
|
let C = S ? y(d) : void 0;
|
|
9431
9523
|
if (c && C !== void 0) {
|
|
9432
|
-
let e =
|
|
9524
|
+
let e = $(s);
|
|
9433
9525
|
if (e !== C) return Y({
|
|
9434
9526
|
code: "VERSION_CONFLICT",
|
|
9435
9527
|
message: `dryRun 预检发现乐观锁冲突: expectedHash=${C} 当前 hash=${e}(主数据在你 read 后被改)`,
|
|
@@ -9453,7 +9545,7 @@ function rd(e, n = {}) {
|
|
|
9453
9545
|
hint: "仅 schema 声明的 key 可删"
|
|
9454
9546
|
});
|
|
9455
9547
|
if (p) {
|
|
9456
|
-
let e =
|
|
9548
|
+
let e = Wu(t.jsonPath, p.resourcesByPath);
|
|
9457
9549
|
if (e) return Y({
|
|
9458
9550
|
code: e.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED",
|
|
9459
9551
|
message: `write delete @ "${t.jsonPath}" 命中受保护字段 "${e.protectedPath}"(${e.spec.mode}),不可删除`,
|
|
@@ -9463,8 +9555,8 @@ function rd(e, n = {}) {
|
|
|
9463
9555
|
let e = await A("delete", C);
|
|
9464
9556
|
if (e !== null) return e;
|
|
9465
9557
|
if (c) {
|
|
9466
|
-
let e =
|
|
9467
|
-
return $a(e, t.jsonPath) ? `dryRun(delete): 将删除 @ ${t.jsonPath}。预览剩余:${
|
|
9558
|
+
let e = eo(s);
|
|
9559
|
+
return $a(e, t.jsonPath) ? `dryRun(delete): 将删除 @ ${t.jsonPath}。预览剩余:${Q(e, 600)}。未实际写入、未入快照。` : `dryRun(delete): @ ${t.jsonPath} 不存在(无需删除)。未实际写入。`;
|
|
9468
9560
|
}
|
|
9469
9561
|
k("delete");
|
|
9470
9562
|
let n = $a(s, t.jsonPath);
|
|
@@ -9472,7 +9564,7 @@ function rd(e, n = {}) {
|
|
|
9472
9564
|
op: "delete",
|
|
9473
9565
|
detail: t.jsonPath,
|
|
9474
9566
|
timestamp: Date.now()
|
|
9475
|
-
}), a && (a(s, null), E()), b(
|
|
9567
|
+
}), a && (a(s, null), E()), b($(s), d), n ? `已删除主数据 @ ${t.jsonPath}` : `主数据 @ ${t.jsonPath} 不存在(无需删除)`;
|
|
9476
9568
|
}
|
|
9477
9569
|
if (f === "edit") {
|
|
9478
9570
|
if (typeof s != "object" || !s) return Y({
|
|
@@ -9486,7 +9578,7 @@ function rd(e, n = {}) {
|
|
|
9486
9578
|
op: t.op ?? "set",
|
|
9487
9579
|
jsonPath: t.jsonPath || "",
|
|
9488
9580
|
value: g
|
|
9489
|
-
}]), i =
|
|
9581
|
+
}]), i = rd({
|
|
9490
9582
|
bindRef: s,
|
|
9491
9583
|
patches: n,
|
|
9492
9584
|
schema: o,
|
|
@@ -9500,7 +9592,7 @@ function rd(e, n = {}) {
|
|
|
9500
9592
|
protectedCtx: p
|
|
9501
9593
|
});
|
|
9502
9594
|
if (!i.ok) return i.error;
|
|
9503
|
-
if (c) return `dryRun(edit): ${i.applied.length} 个 patch 预检通过(schema 校验 OK)。预览结果:${
|
|
9595
|
+
if (c) return `dryRun(edit): ${i.applied.length} 个 patch 预检通过(schema 校验 OK)。预览结果:${Q(i.clone, 600)}。未实际写入、未入快照。`;
|
|
9504
9596
|
O({
|
|
9505
9597
|
op: "edit",
|
|
9506
9598
|
detail: `${i.applied.length} 个 patch${i.applied.length > 1 ? "(批量)" : ""}`,
|
|
@@ -9508,13 +9600,13 @@ function rd(e, n = {}) {
|
|
|
9508
9600
|
timestamp: Date.now()
|
|
9509
9601
|
});
|
|
9510
9602
|
let u = x(d);
|
|
9511
|
-
return
|
|
9603
|
+
return ld(i.clone), `已 write(edit) 主数据(${i.applied.length} 个 patch)。当前值:${Q(i.clone, 600)} (新 hash=${u})`;
|
|
9512
9604
|
}
|
|
9513
|
-
let w =
|
|
9605
|
+
let w = to(g);
|
|
9514
9606
|
if (w.parseError) return Yr("", g, w.parseError);
|
|
9515
9607
|
let T = await A("set", C);
|
|
9516
9608
|
if (T !== null) return T;
|
|
9517
|
-
let D =
|
|
9609
|
+
let D = nd({
|
|
9518
9610
|
bindRef: s,
|
|
9519
9611
|
value: w.parsed,
|
|
9520
9612
|
schema: o,
|
|
@@ -9528,9 +9620,9 @@ function rd(e, n = {}) {
|
|
|
9528
9620
|
protectedCtx: p
|
|
9529
9621
|
});
|
|
9530
9622
|
if (!D.ok) return D.error;
|
|
9531
|
-
if (c) return `dryRun(set): schema 校验通过。预览新值:${
|
|
9532
|
-
let ee =
|
|
9533
|
-
return b(ee, d),
|
|
9623
|
+
if (c) return `dryRun(set): schema 校验通过。预览新值:${Q(D.data, 600)}。未实际写入、未入快照。`;
|
|
9624
|
+
let ee = $(s);
|
|
9625
|
+
return b(ee, d), ld(D.data), `已 write(set) 主数据 = ${Q(D.data, 600)} (新 hash=${ee})${l ? "(白名单模式:仅更新 schema 声明字段,未声明字段保留)" : ""}`;
|
|
9534
9626
|
}, {
|
|
9535
9627
|
name: "write",
|
|
9536
9628
|
description: "写入主数据(高层入口,合并 set/edit/delete + 自动乐观锁 + 自动快照)。四意图:① 整体替换 write({value:整个对象});② 增量 write({patch:{op,jsonPath,value}}) op=set/remove/merge/append/move(move 的 value=目标路径字符串);③ 批量原子 write({patches:[...]})(任一失败整批回滚);④ 删子路径 write({patch:{jsonPath},del:true})。dryRun:true 预检不落盘。写入自动 schema 校验(失败不写,按错误修正重试)+ 自动快照。详细用法见系统提示「能力使用提示」。",
|
|
@@ -9565,7 +9657,7 @@ function rd(e, n = {}) {
|
|
|
9565
9657
|
ee(I);
|
|
9566
9658
|
let L = r(async ({ jsonPath: e }) => {
|
|
9567
9659
|
let t = e || "", n = t ? pa(o, t) : o;
|
|
9568
|
-
return n ? `schema${t ? ` @ ${t}` : ""} = ${
|
|
9660
|
+
return n ? `schema${t ? ` @ ${t}` : ""} = ${Q(Ea(n))}` : Y({
|
|
9569
9661
|
code: "PATH_DENIED",
|
|
9570
9662
|
message: `schema @ "${t}" 不存在`,
|
|
9571
9663
|
hint: "jsonPath 需在 schema 声明字段内(用 read() 不传 jsonPath 查看顶层字段)"
|
|
@@ -9579,7 +9671,7 @@ function rd(e, n = {}) {
|
|
|
9579
9671
|
if (n) {
|
|
9580
9672
|
let e = t;
|
|
9581
9673
|
if (typeof e == "string") {
|
|
9582
|
-
let t =
|
|
9674
|
+
let t = to(e);
|
|
9583
9675
|
t.parseError || (e = t.parsed);
|
|
9584
9676
|
}
|
|
9585
9677
|
r = e, i = "against";
|
|
@@ -9597,8 +9689,8 @@ function rd(e, n = {}) {
|
|
|
9597
9689
|
});
|
|
9598
9690
|
r = t.value, i = `快照 #${t.id}`;
|
|
9599
9691
|
}
|
|
9600
|
-
let a = l ? ya(s, o) : s, c = po(r,
|
|
9601
|
-
return c.length ? `差异(当前 vs ${i},共 ${c.length} 处):\n${c.map((e) => ` ${e.path}: ${
|
|
9692
|
+
let a = l ? ya(s, o) : s, c = po(r, eo(a));
|
|
9693
|
+
return c.length ? `差异(当前 vs ${i},共 ${c.length} 处):\n${c.map((e) => ` ${e.path}: ${Q(e.from)} → ${Q(e.to)}`).join("\n")}` : `无差异:当前主数据与 ${i} 完全相同。`;
|
|
9602
9694
|
}, {
|
|
9603
9695
|
name: "diff_data",
|
|
9604
9696
|
description: "对比当前主数据与某快照(默认最近)或一段 JSON(against)的差异,返回结构化 {path, from→to} 列表。供 verify 自纠/冲突诊断/操作审计(\"刚才改了啥\")。snapshotId 指定快照;against 传一段 JSON 值(与 snapshotId 互斥,传则忽略快照)。",
|
|
@@ -9649,7 +9741,7 @@ function rd(e, n = {}) {
|
|
|
9649
9741
|
}
|
|
9650
9742
|
let g = await A("set", n || (S ? y(c) : void 0));
|
|
9651
9743
|
if (g !== null) return g;
|
|
9652
|
-
let _ =
|
|
9744
|
+
let _ = nd({
|
|
9653
9745
|
bindRef: s,
|
|
9654
9746
|
value: f,
|
|
9655
9747
|
schema: o,
|
|
@@ -9662,7 +9754,7 @@ function rd(e, n = {}) {
|
|
|
9662
9754
|
internalAfterWrite: a,
|
|
9663
9755
|
protectedCtx: p
|
|
9664
9756
|
});
|
|
9665
|
-
return _.ok ? (b(_.hash, c), delete e.files[u], `已 draft_commit 草稿 "${t}" → 主数据 = ${
|
|
9757
|
+
return _.ok ? (b(_.hash, c), delete e.files[u], `已 draft_commit 草稿 "${t}" → 主数据 = ${Q(_.data, 600)} (新 hash=${_.hash})${l ? "(白名单模式:仅更新 schema 声明字段)" : ""}。草稿已清理。`) : _.error;
|
|
9666
9758
|
}, {
|
|
9667
9759
|
name: "draft_commit",
|
|
9668
9760
|
description: "把 draft_write 累积的草稿合并 + JSON.parse + 乐观锁 + schema 校验,原子提交主数据(任一步失败不写,草稿保留可修后重试;成功清草稿 + 自动快照可回退)。仅大 JSON 从零生成用;小改用 write。",
|
|
@@ -9682,14 +9774,14 @@ function rd(e, n = {}) {
|
|
|
9682
9774
|
message: "未提供 path 或有效 handle",
|
|
9683
9775
|
hint: "传 path(受保护字段)或 handle(占位符 ⟦res:handle⟧ 里的句柄)"
|
|
9684
9776
|
});
|
|
9685
|
-
let r =
|
|
9777
|
+
let r = Vu(n);
|
|
9686
9778
|
if (!u.has(r)) return Y({
|
|
9687
9779
|
code: "RESOURCE_NOT_FOUND",
|
|
9688
9780
|
message: `"${n}" 不是受保护字段`,
|
|
9689
9781
|
hint: "resource_get 仅查集成方在 data.resources 声明的路径"
|
|
9690
9782
|
});
|
|
9691
9783
|
let i = d.get(r);
|
|
9692
|
-
if (i) return
|
|
9784
|
+
if (i) return Q({
|
|
9693
9785
|
path: i.path,
|
|
9694
9786
|
mode: i.mode,
|
|
9695
9787
|
value: i.value,
|
|
@@ -9702,7 +9794,7 @@ function rd(e, n = {}) {
|
|
|
9702
9794
|
hint: "该字段可能在 bind 中不存在;先 read 触发懒注册"
|
|
9703
9795
|
});
|
|
9704
9796
|
let o = u.get(r), c = d.ensure(r, a, o.mode);
|
|
9705
|
-
return
|
|
9797
|
+
return Q({
|
|
9706
9798
|
path: r,
|
|
9707
9799
|
mode: o.mode,
|
|
9708
9800
|
value: a,
|
|
@@ -9722,7 +9814,7 @@ function rd(e, n = {}) {
|
|
|
9722
9814
|
message: "resource_update 需要 path",
|
|
9723
9815
|
hint: "传要更新的 verbatim 受保护字段路径"
|
|
9724
9816
|
});
|
|
9725
|
-
let i =
|
|
9817
|
+
let i = Vu(e), a = u.get(i);
|
|
9726
9818
|
if (!a) return Y({
|
|
9727
9819
|
code: "RESOURCE_NOT_FOUND",
|
|
9728
9820
|
message: `"${e}" 不是受保护字段`,
|
|
@@ -9743,9 +9835,9 @@ function rd(e, n = {}) {
|
|
|
9743
9835
|
details: qr(n.error.issues)
|
|
9744
9836
|
});
|
|
9745
9837
|
}
|
|
9746
|
-
d.update(i, t), Qa(s, i, t), b(
|
|
9838
|
+
d.update(i, t), Qa(s, i, t), b($(s), r), E();
|
|
9747
9839
|
let l = d.get(i)?.handle;
|
|
9748
|
-
return `已更新 verbatim 资源 "${e}" = ${
|
|
9840
|
+
return `已更新 verbatim 资源 "${e}" = ${Q(t, 200)}(handle ${l ?? "(未知)"} 不变)。后续 write 该字段写回句柄 ⟦res:${l}⟧ 或新值`;
|
|
9749
9841
|
}, {
|
|
9750
9842
|
name: "resource_update",
|
|
9751
9843
|
description: "更新 verbatim 受保护字段的真实值(改精确原值,如刷新 token/hash)。仅 verbatim 可改;freeze 拒。更新后同步 bind + 标脏,后续 write 写回句柄即用新值。",
|
|
@@ -9757,7 +9849,7 @@ function rd(e, n = {}) {
|
|
|
9757
9849
|
ee(n);
|
|
9758
9850
|
let i = r(async () => {
|
|
9759
9851
|
let e = d.list();
|
|
9760
|
-
return e.length ?
|
|
9852
|
+
return e.length ? Q({ resources: e }) : "当前无已注册的受保护资源(read 受保护路径会懒注册)";
|
|
9761
9853
|
}, {
|
|
9762
9854
|
name: "resource_list",
|
|
9763
9855
|
description: "列出所有已注册的受保护资源(path/mode/handle/bytes)。",
|
|
@@ -9812,8 +9904,8 @@ function rd(e, n = {}) {
|
|
|
9812
9904
|
}
|
|
9813
9905
|
//#endregion
|
|
9814
9906
|
//#region src/core/tools/fetchDoc.ts
|
|
9815
|
-
var
|
|
9816
|
-
let n = new AbortController(), r = setTimeout(() => n.abort(),
|
|
9907
|
+
var dd = 3e4, fd = [r(async ({ url: e, as: t }) => {
|
|
9908
|
+
let n = new AbortController(), r = setTimeout(() => n.abort(), dd);
|
|
9817
9909
|
try {
|
|
9818
9910
|
let r = await fetch(e, {
|
|
9819
9911
|
method: "GET",
|
|
@@ -9830,7 +9922,7 @@ var id = 3e4, ad = [r(async ({ url: e, as: t }) => {
|
|
|
9830
9922
|
].join("\n");
|
|
9831
9923
|
} catch (t) {
|
|
9832
9924
|
let r = t?.message || String(t);
|
|
9833
|
-
return n.signal.aborted ? `获取失败:请求超时(${
|
|
9925
|
+
return n.signal.aborted ? `获取失败:请求超时(${dd}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
|
|
9834
9926
|
} finally {
|
|
9835
9927
|
clearTimeout(r);
|
|
9836
9928
|
}
|
|
@@ -9841,7 +9933,7 @@ var id = 3e4, ad = [r(async ({ url: e, as: t }) => {
|
|
|
9841
9933
|
url: t.string().describe("要抓取的 URL(同源或已配 CORS)"),
|
|
9842
9934
|
as: t.enum(["text", "markdown"]).optional().describe("返回格式标签,默认 text")
|
|
9843
9935
|
})
|
|
9844
|
-
})],
|
|
9936
|
+
})], pd = [
|
|
9845
9937
|
"id",
|
|
9846
9938
|
"class",
|
|
9847
9939
|
"href",
|
|
@@ -9853,12 +9945,12 @@ var id = 3e4, ad = [r(async ({ url: e, as: t }) => {
|
|
|
9853
9945
|
"aria-label",
|
|
9854
9946
|
"name",
|
|
9855
9947
|
"type"
|
|
9856
|
-
],
|
|
9857
|
-
function
|
|
9948
|
+
], md = /^(value|srcdoc|formaction|on\w+)$/i, hd = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session/i;
|
|
9949
|
+
function gd(e, t) {
|
|
9858
9950
|
if (!e) return null;
|
|
9859
|
-
let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ??
|
|
9951
|
+
let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ?? pd, s = (e) => {
|
|
9860
9952
|
let t = {};
|
|
9861
|
-
for (let n of Array.from(e.attributes)) (a ? o.includes(n.name) : o.includes(n.name) || n.name.startsWith("data-")) && (
|
|
9953
|
+
for (let n of Array.from(e.attributes)) (a ? o.includes(n.name) : o.includes(n.name) || n.name.startsWith("data-")) && (md.test(n.name) || hd.test(n.name) || (t[n.name] = n.value));
|
|
9862
9954
|
return t;
|
|
9863
9955
|
}, c = (e, t) => {
|
|
9864
9956
|
let n = {
|
|
@@ -9874,10 +9966,10 @@ function ld(e, t) {
|
|
|
9874
9966
|
};
|
|
9875
9967
|
return c(e, n);
|
|
9876
9968
|
}
|
|
9877
|
-
var
|
|
9969
|
+
var _d = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
|
|
9878
9970
|
let i = e ? document.querySelector(e) : document.body;
|
|
9879
9971
|
if (!i) return `未找到匹配元素:selector="${e}"`;
|
|
9880
|
-
let a =
|
|
9972
|
+
let a = gd(i, {
|
|
9881
9973
|
depth: t ?? 3,
|
|
9882
9974
|
attrs: n,
|
|
9883
9975
|
includeText: r ?? !0
|
|
@@ -9892,22 +9984,22 @@ var ud = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
|
|
|
9892
9984
|
attrs: t.array(t.string()).optional().describe("属性白名单(传了 = 严格白名单;不传 = 默认常用 + data-*)"),
|
|
9893
9985
|
includeText: t.boolean().optional().describe("是否包含直接文本(默认 true)")
|
|
9894
9986
|
})
|
|
9895
|
-
}),
|
|
9896
|
-
function
|
|
9897
|
-
if (
|
|
9987
|
+
}), vd = [_d], yd = /* @__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("."), bd = /* @__PURE__ */ new WeakMap(), xd = !1;
|
|
9988
|
+
function Sd() {
|
|
9989
|
+
if (xd) return;
|
|
9898
9990
|
let e = globalThis.EventTarget;
|
|
9899
9991
|
if (!e?.prototype?.addEventListener) return;
|
|
9900
|
-
|
|
9992
|
+
xd = !0;
|
|
9901
9993
|
let t = e.prototype.addEventListener, n = e.prototype.removeEventListener;
|
|
9902
9994
|
e.prototype.addEventListener = function(e, ...n) {
|
|
9903
9995
|
try {
|
|
9904
|
-
let t =
|
|
9905
|
-
t || (t = /* @__PURE__ */ new Map(),
|
|
9996
|
+
let t = bd.get(this);
|
|
9997
|
+
t || (t = /* @__PURE__ */ new Map(), bd.set(this, t)), t.set(String(e), (t.get(String(e)) ?? 0) + 1);
|
|
9906
9998
|
} catch {}
|
|
9907
9999
|
return t.call(this, e, ...n);
|
|
9908
10000
|
}, e.prototype.removeEventListener = function(e, ...t) {
|
|
9909
10001
|
try {
|
|
9910
|
-
let t =
|
|
10002
|
+
let t = bd.get(this);
|
|
9911
10003
|
if (t) {
|
|
9912
10004
|
let n = (t.get(String(e)) ?? 1) - 1;
|
|
9913
10005
|
n <= 0 ? t.delete(String(e)) : t.set(String(e), n);
|
|
@@ -9916,10 +10008,10 @@ function hd() {
|
|
|
9916
10008
|
return n.call(this, e, ...t);
|
|
9917
10009
|
};
|
|
9918
10010
|
}
|
|
9919
|
-
function
|
|
9920
|
-
return [...
|
|
10011
|
+
function Cd(e) {
|
|
10012
|
+
return [...bd.get(e)?.entries() ?? []].filter(([, e]) => e > 0).map(([e]) => e);
|
|
9921
10013
|
}
|
|
9922
|
-
function
|
|
10014
|
+
function wd(e, t = 12) {
|
|
9923
10015
|
let n = [], r = e, i = 0;
|
|
9924
10016
|
for (; r && r.tagName && i < t;) {
|
|
9925
10017
|
let e = r.tagName.toLowerCase(), t = r.id;
|
|
@@ -9940,7 +10032,7 @@ function _d(e, t = 12) {
|
|
|
9940
10032
|
}
|
|
9941
10033
|
return n.join(" > ");
|
|
9942
10034
|
}
|
|
9943
|
-
function
|
|
10035
|
+
function Td(e, t, n = {}) {
|
|
9944
10036
|
if (!e) return {
|
|
9945
10037
|
hits: [],
|
|
9946
10038
|
total: 0,
|
|
@@ -9978,7 +10070,7 @@ function vd(e, t, n = {}) {
|
|
|
9978
10070
|
n = r.slice(Math.max(0, i - 20), i + t.length + 40);
|
|
9979
10071
|
}
|
|
9980
10072
|
return {
|
|
9981
|
-
selector:
|
|
10073
|
+
selector: wd(e),
|
|
9982
10074
|
tag: e.tagName.toLowerCase(),
|
|
9983
10075
|
text: n.slice(0, 120)
|
|
9984
10076
|
};
|
|
@@ -9987,7 +10079,7 @@ function vd(e, t, n = {}) {
|
|
|
9987
10079
|
truncated: a.length > o
|
|
9988
10080
|
};
|
|
9989
10081
|
}
|
|
9990
|
-
var
|
|
10082
|
+
var Ed = [
|
|
9991
10083
|
"content",
|
|
9992
10084
|
"display",
|
|
9993
10085
|
"width",
|
|
@@ -9995,14 +10087,14 @@ var yd = [
|
|
|
9995
10087
|
"background-color",
|
|
9996
10088
|
"position"
|
|
9997
10089
|
];
|
|
9998
|
-
function
|
|
10090
|
+
function Dd(e, t = {}) {
|
|
9999
10091
|
if (!e) return null;
|
|
10000
10092
|
let n = {
|
|
10001
|
-
selector:
|
|
10093
|
+
selector: wd(e),
|
|
10002
10094
|
tag: e.tagName.toLowerCase(),
|
|
10003
10095
|
attrs: {}
|
|
10004
10096
|
};
|
|
10005
|
-
for (let t of Array.from(e.attributes)) !(
|
|
10097
|
+
for (let t of Array.from(e.attributes)) !(pd.includes(t.name) || t.name.startsWith("data-")) || md.test(t.name) || hd.test(t.name) || (n.attrs[t.name] = t.value);
|
|
10006
10098
|
let r = Array.from(e.childNodes).filter((e) => e.nodeType === 3).map((e) => e.textContent || "").join("").trim();
|
|
10007
10099
|
r && (n.text = r.slice(0, 400));
|
|
10008
10100
|
let i = String(e.innerText ?? e.textContent ?? "").trim();
|
|
@@ -10024,7 +10116,7 @@ function bd(e, t = {}) {
|
|
|
10024
10116
|
if (typeof a != "function") return r;
|
|
10025
10117
|
try {
|
|
10026
10118
|
let i = a(e, n ?? null);
|
|
10027
|
-
for (let e of n ?
|
|
10119
|
+
for (let e of n ? Ed : t.styles ?? yd) {
|
|
10028
10120
|
let t = typeof i.getPropertyValue == "function" ? i.getPropertyValue(e) : i[e];
|
|
10029
10121
|
t && (r[e] = String(t).slice(0, 200));
|
|
10030
10122
|
}
|
|
@@ -10042,16 +10134,16 @@ function bd(e, t = {}) {
|
|
|
10042
10134
|
n.events = {
|
|
10043
10135
|
inline: t,
|
|
10044
10136
|
vue: r ? Object.keys(r).filter((e) => /^on[A-Z]/.test(e)).map((e) => e.slice(2).toLowerCase()) : [],
|
|
10045
|
-
captured:
|
|
10137
|
+
captured: Cd(e)
|
|
10046
10138
|
};
|
|
10047
10139
|
}
|
|
10048
10140
|
return n;
|
|
10049
10141
|
}
|
|
10050
|
-
var
|
|
10051
|
-
|
|
10142
|
+
var Od = r(({ query: e, mode: t, limit: n, root: r }) => {
|
|
10143
|
+
Sd();
|
|
10052
10144
|
let i = r ? document.querySelector(r) : document;
|
|
10053
10145
|
if (r && !i) return `未找到 root 元素:selector="${r}"`;
|
|
10054
|
-
let a =
|
|
10146
|
+
let a = Td(i, e, {
|
|
10055
10147
|
mode: t,
|
|
10056
10148
|
limit: n
|
|
10057
10149
|
});
|
|
@@ -10068,11 +10160,11 @@ var xd = r(({ query: e, mode: t, limit: n, root: r }) => {
|
|
|
10068
10160
|
limit: t.number().int().min(1).max(20).optional().describe("返回上限(默认 10)"),
|
|
10069
10161
|
root: t.string().optional().describe("限定搜索范围的容器选择器(默认整页)")
|
|
10070
10162
|
})
|
|
10071
|
-
}),
|
|
10072
|
-
|
|
10163
|
+
}), kd = r(({ selector: e, styles: t, includeHtml: n, htmlLimit: r, includeEvents: i, includeRect: a, pseudo: o }) => {
|
|
10164
|
+
Sd();
|
|
10073
10165
|
let s = document.querySelector(e);
|
|
10074
10166
|
if (!s) return `未找到匹配元素:selector="${e}"(可先用 dom_search 定位)`;
|
|
10075
|
-
let c =
|
|
10167
|
+
let c = Dd(s, {
|
|
10076
10168
|
styles: t,
|
|
10077
10169
|
includeHtml: n,
|
|
10078
10170
|
htmlLimit: r,
|
|
@@ -10093,7 +10185,7 @@ var xd = r(({ query: e, mode: t, limit: n, root: r }) => {
|
|
|
10093
10185
|
includeRect: t.boolean().optional().describe("是否含几何位置(默认 true)"),
|
|
10094
10186
|
pseudo: t.boolean().optional().describe("是否含 ::before/::after 伪元素摘要(默认 false)")
|
|
10095
10187
|
})
|
|
10096
|
-
}),
|
|
10188
|
+
}), Ad = {
|
|
10097
10189
|
name: "dom-inspect",
|
|
10098
10190
|
description: "页面 DOM 深度检视工具(dom_search 搜索元素 / dom_info 读内容·计算样式·事件绑定·几何)。定位元素、验证样式落地、排查交互绑定时加载",
|
|
10099
10191
|
getContent: () => [
|
|
@@ -10110,15 +10202,15 @@ var xd = r(({ query: e, mode: t, limit: n, root: r }) => {
|
|
|
10110
10202
|
"## 排障套路",
|
|
10111
10203
|
"1. dom_search(mode:\"text\", query:按钮文案) 定位 → 2. dom_info(styles:[\"display\",\"background-color\",\"pointer-events\"]) 验证样式/点击性 → 3. 不符则改数据(get_dom 看结构对照)"
|
|
10112
10204
|
].join("\n"),
|
|
10113
|
-
tools: [() => [
|
|
10205
|
+
tools: [() => [Od, kd]]
|
|
10114
10206
|
};
|
|
10115
10207
|
//#endregion
|
|
10116
10208
|
//#region src/core/tools/envTool.ts
|
|
10117
|
-
function
|
|
10209
|
+
function jd(e) {
|
|
10118
10210
|
let t = e;
|
|
10119
10211
|
return typeof t.tagName == "string" || typeof t.nodeType == "number" && typeof t.nodeName == "string";
|
|
10120
10212
|
}
|
|
10121
|
-
function
|
|
10213
|
+
function Md(e, t = 3, n = 2e3, r, i) {
|
|
10122
10214
|
if (e == null) return e;
|
|
10123
10215
|
if (typeof e == "string") return e.length > n ? e.slice(0, n) + "…(已截断)" : e;
|
|
10124
10216
|
if (typeof e == "number" || typeof e == "boolean") return e;
|
|
@@ -10127,14 +10219,14 @@ function Td(e, t = 3, n = 2e3, r, i) {
|
|
|
10127
10219
|
if (typeof e == "bigint") return `${e.toString()}n`;
|
|
10128
10220
|
if (typeof e != "object") return String(e);
|
|
10129
10221
|
let a = e;
|
|
10130
|
-
if (
|
|
10222
|
+
if (jd(a)) {
|
|
10131
10223
|
let e = a;
|
|
10132
10224
|
return e.tagName ? `[Element: <${e.tagName.toLowerCase()}>]` : `[Node: ${e.nodeName}]`;
|
|
10133
10225
|
}
|
|
10134
10226
|
if (r?.has(a)) return "[Circular]";
|
|
10135
10227
|
let o = r ?? /* @__PURE__ */ new WeakSet();
|
|
10136
10228
|
if (o.add(a), Array.isArray(e)) {
|
|
10137
|
-
let r = e.slice(0, 100).map((e) =>
|
|
10229
|
+
let r = e.slice(0, 100).map((e) => Md(e, t - 1, n, o, i));
|
|
10138
10230
|
return e.length > 100 && r.push(`…(共 ${e.length} 项,已截断)`), r;
|
|
10139
10231
|
}
|
|
10140
10232
|
if (t < 0) return "(对象,已截断)";
|
|
@@ -10147,14 +10239,14 @@ function Td(e, t = 3, n = 2e3, r, i) {
|
|
|
10147
10239
|
}
|
|
10148
10240
|
try {
|
|
10149
10241
|
let e = a[r];
|
|
10150
|
-
i?.test(r) ? s[r] = "[REDACTED]" : s[r] =
|
|
10242
|
+
i?.test(r) ? s[r] = "[REDACTED]" : s[r] = Md(e, t - 1, n, o, i);
|
|
10151
10243
|
} catch {
|
|
10152
10244
|
s[r] = "(getter 抛错)";
|
|
10153
10245
|
}
|
|
10154
10246
|
}
|
|
10155
10247
|
return s;
|
|
10156
10248
|
}
|
|
10157
|
-
function
|
|
10249
|
+
function Nd(e) {
|
|
10158
10250
|
let t = e ?? (typeof window < "u" ? window : {}), n = t.navigator, r = t.location, i = t.document;
|
|
10159
10251
|
return {
|
|
10160
10252
|
location: {
|
|
@@ -10187,9 +10279,9 @@ function Ed(e) {
|
|
|
10187
10279
|
} : "(无 document)"
|
|
10188
10280
|
};
|
|
10189
10281
|
}
|
|
10190
|
-
var
|
|
10282
|
+
var Pd = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|opener|parent|top|self|window|globalThis|closed|history|navigation|trustedTypes|origin|crossOriginIsolated)$/, Fd = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session|ticket/i, Id = r(({ key: e }) => {
|
|
10191
10283
|
if (e) {
|
|
10192
|
-
if (
|
|
10284
|
+
if (Pd.test(e) || Fd.test(e)) return JSON.stringify({
|
|
10193
10285
|
key: e,
|
|
10194
10286
|
denied: !0,
|
|
10195
10287
|
reason: "安全:该 key 在 denylist(localStorage/sessionStorage/cookie/document 或敏感命名 token/secret/key/auth),不读取防泄漏"
|
|
@@ -10199,18 +10291,18 @@ var Dd = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|open
|
|
|
10199
10291
|
key: e,
|
|
10200
10292
|
exists: t !== void 0,
|
|
10201
10293
|
type: typeof t,
|
|
10202
|
-
value:
|
|
10294
|
+
value: Md(t, 3, 2e3, void 0, Fd)
|
|
10203
10295
|
}, null, 2);
|
|
10204
10296
|
}
|
|
10205
|
-
return JSON.stringify(
|
|
10297
|
+
return JSON.stringify(Nd(), null, 2);
|
|
10206
10298
|
}, {
|
|
10207
10299
|
name: "inspect_env",
|
|
10208
10300
|
description: "读宿主页面环境信息(排查调试)。不传参返回摘要(URL/origin、浏览器/语言、viewport、title/readyState);传 key 读指定 window 属性值(如 key:\"appConfig\")。只读,大结果自动外存 vfs。",
|
|
10209
10301
|
schema: t.object({ key: t.string().optional().describe("要读取的 window 属性名(如 \"appConfig\"/\"__DEBUG__\");不传 = 返回环境摘要") })
|
|
10210
|
-
}),
|
|
10302
|
+
}), Ld = [Id];
|
|
10211
10303
|
//#endregion
|
|
10212
10304
|
//#region src/core/harness/budget.ts
|
|
10213
|
-
function
|
|
10305
|
+
function Rd(e, t, n) {
|
|
10214
10306
|
let r = 0;
|
|
10215
10307
|
return {
|
|
10216
10308
|
name: "budget",
|
|
@@ -10235,12 +10327,12 @@ function jd(e, t, n) {
|
|
|
10235
10327
|
}
|
|
10236
10328
|
//#endregion
|
|
10237
10329
|
//#region src/core/sdk/actions.ts
|
|
10238
|
-
var
|
|
10239
|
-
function
|
|
10330
|
+
var zd = /^[a-zA-Z][a-zA-Z0-9_]*$/;
|
|
10331
|
+
function Bd(e) {
|
|
10240
10332
|
let n = [];
|
|
10241
10333
|
for (let [i, a] of Object.entries(e)) {
|
|
10242
|
-
if (!
|
|
10243
|
-
console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${
|
|
10334
|
+
if (!zd.test(i)) {
|
|
10335
|
+
console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${zd}),已跳过`);
|
|
10244
10336
|
continue;
|
|
10245
10337
|
}
|
|
10246
10338
|
let e = a.description || `宿主动作 ${i}`;
|
|
@@ -10260,9 +10352,9 @@ function Nd(e) {
|
|
|
10260
10352
|
}
|
|
10261
10353
|
return n;
|
|
10262
10354
|
}
|
|
10263
|
-
function
|
|
10355
|
+
function Vd(e) {
|
|
10264
10356
|
let t = {};
|
|
10265
|
-
for (let [n, r] of Object.entries(e))
|
|
10357
|
+
for (let [n, r] of Object.entries(e)) zd.test(n) && (t[n] = {
|
|
10266
10358
|
description: r.description,
|
|
10267
10359
|
hasParams: !!r.params
|
|
10268
10360
|
});
|
|
@@ -10270,12 +10362,12 @@ function Pd(e) {
|
|
|
10270
10362
|
}
|
|
10271
10363
|
//#endregion
|
|
10272
10364
|
//#region src/core/toolsets.ts
|
|
10273
|
-
var
|
|
10274
|
-
function
|
|
10275
|
-
return
|
|
10365
|
+
var Hd = fd, Ud = vd;
|
|
10366
|
+
function Wd(e, t) {
|
|
10367
|
+
return ud(e, t);
|
|
10276
10368
|
}
|
|
10277
|
-
function
|
|
10278
|
-
let a =
|
|
10369
|
+
function Gd(e, t, n, r, i) {
|
|
10370
|
+
let a = mu(e);
|
|
10279
10371
|
return [
|
|
10280
10372
|
...a.dataOps ? t : [],
|
|
10281
10373
|
...a.fetch ? n : [],
|
|
@@ -10285,7 +10377,7 @@ function Rd(e, t, n, r, i) {
|
|
|
10285
10377
|
}
|
|
10286
10378
|
//#endregion
|
|
10287
10379
|
//#region src/core/sdk/toolRegistry.ts
|
|
10288
|
-
function
|
|
10380
|
+
function Kd(e) {
|
|
10289
10381
|
let t = /* @__PURE__ */ new Map(), n = [];
|
|
10290
10382
|
for (let r of e) for (let e of r.tools) {
|
|
10291
10383
|
let i = t.get(e.name);
|
|
@@ -10305,15 +10397,15 @@ function zd(e) {
|
|
|
10305
10397
|
}
|
|
10306
10398
|
//#endregion
|
|
10307
10399
|
//#region src/core/harness/usageHints.ts
|
|
10308
|
-
var
|
|
10309
|
-
function
|
|
10310
|
-
let a =
|
|
10400
|
+
var qd = .7;
|
|
10401
|
+
function Jd(e, t, n = "advanced", r, i) {
|
|
10402
|
+
let a = mu(e), o = n !== "advanced", s = n === "minimal";
|
|
10311
10403
|
return {
|
|
10312
10404
|
name: "usageHints",
|
|
10313
10405
|
augmentPrompt: (n) => {
|
|
10314
10406
|
let r = [];
|
|
10315
10407
|
if (a.planning && (r.push("【自适应规划】按任务复杂度决定是否先规划,不要对简单任务过度编排:"), r.push(" · 简单/明确任务(改单字段、调样式、查值)→ 直接 read/write 执行,不必 write_todos。"), r.push(" · 复杂任务(多步、大改、有歧义、不可逆)→ 先 write_todos 拆解,首个任务标 in_progress,逐项推进。"), r.push(" · 执行中发现步骤要改/补/细分 → 用 update_todo({id, content?, status?}) 按 id 增量改单项,不必重传整个清单。"), e?.humanConfirm ? r.push(" · 规划出多步方案若需用户拍板 → 先 request_human_confirmation 给方案选项,确认后再执行。") : r.push(" · 规划出多步方案若需用户拍板 → 以文字列出方案选项等用户回复,勿自行拍板。"), r.push(" · 规划阶段有轮次预算(maxPlanRevisions,默认 5):勿反复调研/改计划而不执行,规划充分后即开始 write 落地。")), t && (o ? (r.push("读写主数据用 read/write(高层入口,自动乐观锁 + 自动快照)。read({jsonPath}) 读子路径当前值(返回含 hash,write 时自动比对,无需手动传);read() 不传读整个主数据 + 说明。write 改值两姿势:① 改单个字段/子路径用 write({patch:{op:\"set\", jsonPath:\"路径.字段\", value:新值}})——patch.value 就是该字段的新值(类型匹配:string 直传字符串、number 传数字、对象传对象),不要包成 {字段:值} 对象(字段名已在 jsonPath);也兼容 write({value:新值, patch:{op,jsonPath}}) 顶层 value(向后兼容,但优先 patch.value,避免与整体 set 的 value 混淆);② 替换整个对象用 write({value:{整个新对象}})。op:set 设值 / remove 删 / merge 合并对象 / append 追加数组 / move 移动数组元素(value=目标路径字符串:数组本身=追加到末尾、数组内下标=插到该位置;同数组即重排如组件调序,目标下标按移除源后解释,一步完成免双 set 交换);批量多改动 write({patches:[{op,jsonPath,value},...]});删子路径 write({patch:{jsonPath:\"路径\"}, del:true})。写入自动经 schema 校验(失败不写,按错误提示改值类型/形状后重试)+ 自动存快照" + (s ? "。" : "(出错可用 restore_data 回退)。")), r.push("修改大对象/数组优先用 write 的 patch 增量(只发改动部分),避免整体重传被 max_tokens 截断致 JSON 不完整。"), r.push("读大数组(read 返回 hasMore=true)用 read({jsonPath,offset,limit}) 分页(offset+=limit 续读,默认 limit=50);复杂 patches 改动先 write({patches,dryRun:true}) 预检(走完整校验不落盘)。"), r.push("【省轮次·批量】读多个同构子路径(如各组件 props:root.child.0.props、root.child.1.props…)用 read({jsonPaths:[\"路径1\",\"路径2\",...]}) 一次取回,勿发多个独立 read 占多 tool_call 槽 + 多 ToolMessage 回灌。改多处用 write({patches:[{op:\"set\",jsonPath:\"路径.字段\",value},...]}) 一次提交多改动(原子任一失败回滚),勿逐个 write 烧轮次预算。"), r.push("read/describe 返回按 schema 投影:仅 schema 声明的字段可见(未声明字段自动隐藏,防误操作);要操作某字段需集成方在 schema 声明。"), s || (r.push("查任意路径完整约束或对比快照差异需切 advanced 工具模式(schema_data/diff_data,当前未装载勿调用);查历史快照值(只读不改当前)用 history_data({id?,jsonPath?})。"), r.push("在大数组里按条件筛选用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素 path/index;定位后用 write patch 改。找名字记不清的元素用 search_data(substring/regex/fuzzy)。批量过滤/映射/聚合/重写大数组用 eval_script(沙箱脚本,mode=query 只读/transform 落地)。"))) : (r.push("改主数据前先 get_data({jsonPath}) 读其当前真实值与 hash(返回末尾 hash=xxx),基于真实值改,不要凭记忆。写入(set/edit/delete)时回传 expectedHash=该 hash 启用乐观锁——若主数据在你 get 之后被外部代码/其他 agent/用户手动改过,会触发冲突:集成方若开启人工介入,工具会挂起等用户决定(保留外部/强制覆盖/回退),你应等待工具返回后按结果继续(保留外部→重新 get 再改;强制覆盖→已写入,继续;回退→已回退到历史快照,基于回退值重写);未开启人工介入时返回 VERSION_CONFLICT 不写入,重新 get 拿最新值与 hash 再改。"), r.push("不确定主数据字段结构时用 describe_data 查看说明。"), r.push("修改大对象/数组优先用 edit_data 增量 patch(只发改动部分),避免 set_data 整体重传被 max_tokens 截断导致 JSON 不完整、校验失败。"), r.push("修改主数据出错时可用 restore_data 回退最近一次。"), r.push("在大数组里按条件筛选元素用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素的 path/index;定位后再 edit_data 改。"), r.push("找名字记不清的元素用 search_data(支持 substring/regex/fuzzy 模糊搜索)。"), r.push("需要过滤/映射/聚合/批量重写大数组时用 eval_script(沙箱脚本,入参 data);只读探查用 mode=query,批量重写用 mode=transform(返回值经校验后落地)。"), r.push("读大数组用 read({jsonPath,offset,limit}) 分页(返回 hasMore=true 时 offset+=limit 续读);一次读多个不相关子路径用 read({jsonPaths});复杂改动先 write({...,dryRun:true}) 预检不落盘。"), r.push("【省轮次·批量】读多个同构子路径(如各组件 props)用 read({jsonPaths:[...]}) 一次取回,勿发多个独立 read;改多处用 write({patches:[{op:\"set\",jsonPath,value},...]}) 一次提交多改动(原子任一失败回滚),勿逐个 edit_data/write 烧轮次预算。"), r.push("对比当前与历史快照(或一段 JSON against)的差异用 diff_data({snapshotId?,against?})(返回结构化 path→from/to,verify 自纠/操作审计/\"刚才改了啥\");只读查历史快照值用 history_data({id?,jsonPath?})。"))), a.subagent && r.push("独立子任务可 spawn_agent 委派(过程隔离,不占主上下文):默认只读,需要子 agent 写数据时传 writablePaths(路径前缀白名单,越界 PATH_OUT_OF_SCOPE)。多个独立子任务可 spawn_agents 并行委派(各子互不通信,结论由你汇总;并行委派不可授写权限,写操作由你收尾执行)。"), a.inspectEnv && r.push("排查页面环境(当前 URL/浏览器/视口/集成方调试变量)用 inspect_env——不传参返回环境摘要(location/navigator/viewport/document),传 key 读特定 window 属性(如 inspect_env({key:\"appConfig\"}) 读 window.appConfig)。改完数据看渲染、定位\"为何没生效\"时用它(只读,不改数据)。"), a.domInspect && r.push("改完数据想确认渲染是否生效(或定位元素/辅助 UI 设计问答)用 get_dom({selector?,depth?}) 读渲染后 DOM(结构化返回 tag/attrs/text/children,depth 控制深度防爆炸,只读)。配合宿主 actions(save_draft/publish 等)形成\"改数据→get_dom 看渲染→触发动作\"闭环。"), a.draftWrite && !o && (r.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。"), r.push("⚠️ 大 JSON 分块构建是典型多轮工具调用(draft_write×N + draft_commit + read 确认 + 调研 read/query),默认 maxToolRounds=15 可能触顶被 while 截断导致草稿写不完;目标组件数大时集成方应在 createChatSdk 配 maxToolRounds ≥ 20(或按 N+5 估算)。draft_commit 提交同样走乐观锁(改前 read 拿 hash,bind 被改过会触发冲突介入,不静默覆盖)。")), a.todoDeps && r.push("复杂任务可用 todos 层级依赖:write_todos 时给 todo 传 parentId(父任务 id,表达层级)+ deps(依赖的 todo id 数组,必须先完成)。有依赖的任务,deps 全 completed 后再标 in_progress;完成时 update_todo({id, status:\"completed\", evidence:\"完成证据\"}) 记证据。无依赖关系的任务不传 parentId/deps(扁平)。"), a.focus && !o && (r.push("【上下文聚焦】判断任务范围,用 set_focus/add_focus/remove_focus/clear_focus 自动收敛工作范围:"), r.push(" · 局部任务(只改某一组件/区域,如「调导航栏」「改 components.3 样式」)→ 先 read 定位 jsonPath,再 set_focus({path:\"该子树路径\"}) 聚焦;聚焦后每轮只看该子树结构,写其他位置会被 PATH_DENIED 拒绝。"), r.push(" · 多个相关组件(如「同时改导航栏和页脚」)→ set_focus 聚焦首个后用 add_focus({path}) 追加其余;聚焦后可写任一焦点子树,越界仍被拒;移除单个用 remove_focus({path})。"), r.push(" · 全局任务(多处/整体结构,如「重排所有组件」「换主题」)→ 不要聚焦,保持全量视野直接写。"), r.push(" · 完成局部精修、要转向其他区域或做整体改动 → 调 clear_focus 退出聚焦(清空全部焦点),恢复全部读写权限。"), r.push(" · set_focus/add_focus 的 path 必须在 schema 内(类型校验);不确定路径先 read/describe_data 查。")), e?.subagents?.length) {
|
|
10316
|
-
let t = e.subagents.filter((e) => (e.temperature ?? 0) >=
|
|
10408
|
+
let t = e.subagents.filter((e) => (e.temperature ?? 0) >= qd || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), n = e.subagents.filter((e) => (e.temperature ?? 0) < qd && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
|
|
10317
10409
|
r.push("【规划-反思-执行·路由】按任务性质选模式,不要对简单任务过度编排:"), t.length && (r.push(` · 创作/设计/开放性需求(如"设计主题风格""换个感觉")→ 先调 ${t.map((e) => "use_" + e.id).join("/")} 出 2-3 套方案(高温创意),`), r.push(e?.humanConfirm ? " 不要自己拍板;拿到方案后,若需用户拍板用 request_human_confirmation 弹选项。" : " 不要自己拍板;拿到方案后以文字列出选项等用户回复(humanConfirm 未开,勿调不存在工具)。")), n.length && r.push(` · 严谨/易错/校验类 → 可先调 ${n.map((e) => "use_" + e.id).join("/")} 反思挑刺(低温审查),据反馈修订。`), r.push(o ? " · 方案定稿后,由你(主 agent)用 write 落地成 JSON(低温度执行 + schema 校验 + 写前确认)。" : " · 方案定稿后,由你(主 agent)用 edit_data 落地成 JSON(低温度执行 + schema 校验 + 写前确认)。"), r.push(" · 简单/明确任务(如\"标题改红色\")直接执行,不必走规划-反思。");
|
|
10318
10410
|
}
|
|
10319
10411
|
e?.humanConfirm && (r.push("【人工确认·必读】以下情形必须先调 request_human_confirmation 征询用户、拿到答复后再继续,不要自行拍板:"), r.push(" 1) 用户让你「给方案/列选项/我来选/挑一个」时:把每个方案作为一个 option,调 request_human_confirmation(question=简述, options=[方案A,方案B,...], recommendation=你推荐的)。不要只回文字罗列方案让用户自己回复——要用工具把选项做成可点选按钮。"), r.push(" 2) 需求有歧义/不确定时:调工具问清楚(options 不传则用户答同意或拒绝)。"), r.push(" 3) 即将执行高风险不可逆操作(删除/覆盖/批量改动)前:调工具确认。"), r.push(" 4) 规划出多步方案需用户确认时:把整个方案(或关键分步)作为 option 调 request_human_confirmation,确认后再执行。"), r.push("用户在选项里选了哪个,就按那个方案继续;选「拒绝」则停止并询问如何调整。"));
|
|
@@ -10333,7 +10425,7 @@ function Vd(e, t, n = "advanced", r, i) {
|
|
|
10333
10425
|
}
|
|
10334
10426
|
//#endregion
|
|
10335
10427
|
//#region src/core/harness/resourcesPin.ts
|
|
10336
|
-
function
|
|
10428
|
+
function Yd(e) {
|
|
10337
10429
|
let t = e.toolsExposed === !1 ? "读到 ⟦frozen:path⟧/⟦res:handle⟧ 占位符 = 精确值在冻结区/资源池(不入消息流);resource_get/resource_update 为 advanced 工具,当前模式未装载,勿尝试调用;freeze 字段不可写(撞 FROZEN_FIELD 即放弃);verbatim 字段保持原值,勿在当前模式下尝试改写(直接写新值会 VERBATIM_MISMATCH);撞 RESOURCE_EVICTED/RESOURCE_NOT_FOUND 重新 read 懒注册。" : "读到 ⟦frozen:path⟧/⟦res:handle⟧ 占位符 = 精确值在冻结区/资源池(不入消息流);需真值用 resource_get({path});freeze 字段不可写(撞 FROZEN_FIELD 即放弃);verbatim 直接写新值会 VERBATIM_MISMATCH,先 resource_update 再写回句柄;撞 RESOURCE_EVICTED/RESOURCE_NOT_FOUND 重新 read 懒注册。";
|
|
10338
10430
|
return {
|
|
10339
10431
|
name: "resourcesPin",
|
|
@@ -10348,102 +10440,102 @@ function Hd(e) {
|
|
|
10348
10440
|
}
|
|
10349
10441
|
//#endregion
|
|
10350
10442
|
//#region src/core/backends/skillStore.ts
|
|
10351
|
-
var
|
|
10352
|
-
function
|
|
10353
|
-
return `${
|
|
10443
|
+
var Xd = "v:1::skill-store", Zd = "chat-sdk";
|
|
10444
|
+
function Qd(e, t, n) {
|
|
10445
|
+
return `${Xd}::${e}::${t}::${n}`;
|
|
10354
10446
|
}
|
|
10355
|
-
function
|
|
10356
|
-
return `${
|
|
10447
|
+
function $d(e, t) {
|
|
10448
|
+
return `${Xd}::${e}::${t}::`;
|
|
10357
10449
|
}
|
|
10358
|
-
function
|
|
10359
|
-
let t = e.dbName ??
|
|
10450
|
+
function ef(e = {}) {
|
|
10451
|
+
let t = e.dbName ?? Zd, n = e.backend ?? "indexed", r = e.id ?? "", i, a, o = new Promise((e) => {
|
|
10360
10452
|
a = e;
|
|
10361
10453
|
});
|
|
10362
10454
|
return (async () => {
|
|
10363
10455
|
try {
|
|
10364
10456
|
if (n === "indexed") {
|
|
10365
10457
|
if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
|
|
10366
|
-
i = await
|
|
10458
|
+
i = await su(t), a(!0);
|
|
10367
10459
|
} else if (n === "session") {
|
|
10368
10460
|
if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
|
|
10369
|
-
i =
|
|
10461
|
+
i = cu(sessionStorage), a(!0);
|
|
10370
10462
|
} else if (n === "local") {
|
|
10371
10463
|
if (typeof localStorage > "u") throw Error("localStorage 不可用");
|
|
10372
|
-
i =
|
|
10373
|
-
} else i =
|
|
10464
|
+
i = cu(localStorage), a(!0);
|
|
10465
|
+
} else i = ou(), a(!1);
|
|
10374
10466
|
} catch {
|
|
10375
|
-
i =
|
|
10467
|
+
i = ou(), a(!1);
|
|
10376
10468
|
}
|
|
10377
10469
|
})(), {
|
|
10378
10470
|
ready: o,
|
|
10379
10471
|
async list() {
|
|
10380
10472
|
let e = [];
|
|
10381
|
-
return await i.scan(
|
|
10473
|
+
return await i.scan($d(t, r), (t, n) => {
|
|
10382
10474
|
e.push(n);
|
|
10383
10475
|
}), e;
|
|
10384
10476
|
},
|
|
10385
10477
|
async get(e) {
|
|
10386
|
-
return await i.get(
|
|
10478
|
+
return await i.get(Qd(t, r, e));
|
|
10387
10479
|
},
|
|
10388
10480
|
async put(e) {
|
|
10389
10481
|
try {
|
|
10390
|
-
await i.set(
|
|
10482
|
+
await i.set(Qd(t, r, e.name), e);
|
|
10391
10483
|
} catch (e) {
|
|
10392
|
-
|
|
10484
|
+
Ql(e) && (i = ou());
|
|
10393
10485
|
}
|
|
10394
10486
|
},
|
|
10395
10487
|
async remove(e) {
|
|
10396
|
-
let n =
|
|
10488
|
+
let n = Qd(t, r, e);
|
|
10397
10489
|
return await i.get(n) == null ? !1 : (await i.del(n), !0);
|
|
10398
10490
|
},
|
|
10399
10491
|
async clear() {
|
|
10400
|
-
await i.clearPrefix(
|
|
10492
|
+
await i.clearPrefix($d(t, r));
|
|
10401
10493
|
},
|
|
10402
10494
|
dispose() {}
|
|
10403
10495
|
};
|
|
10404
10496
|
}
|
|
10405
10497
|
//#endregion
|
|
10406
10498
|
//#region src/core/backends/preferenceStore.ts
|
|
10407
|
-
var
|
|
10499
|
+
var tf = [
|
|
10408
10500
|
"color",
|
|
10409
10501
|
"copy",
|
|
10410
10502
|
"layout",
|
|
10411
10503
|
"interaction",
|
|
10412
10504
|
"tech",
|
|
10413
10505
|
"other"
|
|
10414
|
-
],
|
|
10415
|
-
function
|
|
10416
|
-
return `${
|
|
10506
|
+
], nf = "v:1::pref-store", rf = "chat-sdk";
|
|
10507
|
+
function af(e, t, n) {
|
|
10508
|
+
return `${nf}::${e}::${t}::${n}`;
|
|
10417
10509
|
}
|
|
10418
|
-
function
|
|
10419
|
-
return `${
|
|
10510
|
+
function of(e, t) {
|
|
10511
|
+
return `${nf}::${e}::${t}::`;
|
|
10420
10512
|
}
|
|
10421
|
-
function
|
|
10513
|
+
function sf() {
|
|
10422
10514
|
return `pref-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
10423
10515
|
}
|
|
10424
|
-
function
|
|
10425
|
-
let t = e.dbName ??
|
|
10516
|
+
function cf(e = {}) {
|
|
10517
|
+
let t = e.dbName ?? rf, n = e.backend ?? "indexed", r = e.id ?? "", i = e.maxEntries ?? 20, a, o, s = new Promise((e) => {
|
|
10426
10518
|
o = e;
|
|
10427
10519
|
});
|
|
10428
10520
|
(async () => {
|
|
10429
10521
|
try {
|
|
10430
10522
|
if (n === "indexed") {
|
|
10431
10523
|
if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
|
|
10432
|
-
a = await
|
|
10524
|
+
a = await su(t), o(!0);
|
|
10433
10525
|
} else if (n === "session") {
|
|
10434
10526
|
if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
|
|
10435
|
-
a =
|
|
10527
|
+
a = cu(sessionStorage), o(!0);
|
|
10436
10528
|
} else if (n === "local") {
|
|
10437
10529
|
if (typeof localStorage > "u") throw Error("localStorage 不可用");
|
|
10438
|
-
a =
|
|
10439
|
-
} else a =
|
|
10530
|
+
a = cu(localStorage), o(!0);
|
|
10531
|
+
} else a = ou(), o(!1);
|
|
10440
10532
|
} catch {
|
|
10441
|
-
a =
|
|
10533
|
+
a = ou(), o(!1);
|
|
10442
10534
|
}
|
|
10443
10535
|
})();
|
|
10444
10536
|
async function c() {
|
|
10445
10537
|
let e = [];
|
|
10446
|
-
return await a.scan(
|
|
10538
|
+
return await a.scan(of(t, r), (t, n) => {
|
|
10447
10539
|
e.push(n);
|
|
10448
10540
|
}), e;
|
|
10449
10541
|
}
|
|
@@ -10454,7 +10546,7 @@ function ef(e = {}) {
|
|
|
10454
10546
|
},
|
|
10455
10547
|
async put(e) {
|
|
10456
10548
|
let n = await c(), o = Date.now(), s = n.reduce((e, t) => Math.max(e, t.updatedAt), 0), l = n.find((t) => t.topic === e.topic), u = {
|
|
10457
|
-
id: e.id ?? l?.id ??
|
|
10549
|
+
id: e.id ?? l?.id ?? sf(),
|
|
10458
10550
|
content: e.content,
|
|
10459
10551
|
topic: e.topic,
|
|
10460
10552
|
sourceSessionId: l?.sourceSessionId ?? e.sourceSessionId,
|
|
@@ -10462,71 +10554,71 @@ function ef(e = {}) {
|
|
|
10462
10554
|
createdAt: l?.createdAt ?? o,
|
|
10463
10555
|
updatedAt: Math.max(o, s + 1)
|
|
10464
10556
|
};
|
|
10465
|
-
l && l.id !== u.id && await a.del(
|
|
10557
|
+
l && l.id !== u.id && await a.del(af(t, r, l.id));
|
|
10466
10558
|
try {
|
|
10467
|
-
await a.set(
|
|
10559
|
+
await a.set(af(t, r, u.id), u);
|
|
10468
10560
|
} catch (e) {
|
|
10469
|
-
|
|
10561
|
+
Ql(e) && (a = ou(), await a.set(af(t, r, u.id), u));
|
|
10470
10562
|
}
|
|
10471
10563
|
let d = await c();
|
|
10472
10564
|
if (d.length > i) {
|
|
10473
10565
|
let e = d.sort((e, t) => e.updatedAt - t.updatedAt).slice(0, d.length - i);
|
|
10474
|
-
for (let n of e) await a.del(
|
|
10566
|
+
for (let n of e) await a.del(af(t, r, n.id));
|
|
10475
10567
|
}
|
|
10476
10568
|
return u;
|
|
10477
10569
|
},
|
|
10478
10570
|
async remove(e) {
|
|
10479
|
-
let n =
|
|
10571
|
+
let n = af(t, r, e);
|
|
10480
10572
|
return await a.get(n) == null ? !1 : (await a.del(n), !0);
|
|
10481
10573
|
},
|
|
10482
10574
|
async clear() {
|
|
10483
|
-
await a.clearPrefix(
|
|
10575
|
+
await a.clearPrefix(of(t, r));
|
|
10484
10576
|
},
|
|
10485
10577
|
dispose() {}
|
|
10486
10578
|
};
|
|
10487
10579
|
}
|
|
10488
10580
|
//#endregion
|
|
10489
10581
|
//#region src/core/harness/preferences.ts
|
|
10490
|
-
var
|
|
10582
|
+
var lf = {
|
|
10491
10583
|
color: "颜色",
|
|
10492
10584
|
copy: "文案",
|
|
10493
10585
|
layout: "排版",
|
|
10494
10586
|
interaction: "交互",
|
|
10495
10587
|
tech: "技术",
|
|
10496
10588
|
other: "其他"
|
|
10497
|
-
},
|
|
10589
|
+
}, uf = [
|
|
10498
10590
|
/^(?:请|帮我|麻烦)?你?记住[::,,、]?\s*(.{4,200})/,
|
|
10499
10591
|
/^(?:从)?今后(?:开始|起)?[::,,]?\s*(.{4,200})/,
|
|
10500
10592
|
/^以后(?:都|全都|总是|尽量)?[::,,]?\s*(.{4,200})/
|
|
10501
|
-
],
|
|
10593
|
+
], df = /(?:不要|别再|别用|别加|太(?:艳|花|亮|暗|大|小|密|挤|乱|复杂|素|少)|不喜欢|讨厌|希望|更喜欢|偏好|永远|一律|统一保持|保持统一)/, ff = [
|
|
10502
10594
|
["layout", /布局|排版|间距|留白|密度|居中|对齐|栅格|边距|紧凑|圆角|分栏|层级|大小|尺寸/],
|
|
10503
10595
|
["copy", /文案|文字|标题|副标题|字体|字号|措辞|语气|口语|书面|简洁|简短|详尽|emoji|表情/],
|
|
10504
10596
|
["interaction", /动画|动效|过渡|交互|悬停|hover|点击反馈|弹窗|提示|加载|滚动/],
|
|
10505
10597
|
["tech", /代码|框架|组件|技术|写法|命名|注释|依赖|版本|接口/],
|
|
10506
10598
|
["color", /颜色|配色|色调|色彩|深色|浅色|饱和|渐变|紫|红|橙|黄|绿|青|蓝|粉|棕|灰|黑|白|金|银/]
|
|
10507
10599
|
];
|
|
10508
|
-
function
|
|
10509
|
-
for (let [t, n] of
|
|
10600
|
+
function pf(e) {
|
|
10601
|
+
for (let [t, n] of ff) if (n.test(e)) return t;
|
|
10510
10602
|
return "other";
|
|
10511
10603
|
}
|
|
10512
|
-
function
|
|
10604
|
+
function mf(e) {
|
|
10513
10605
|
let t = e.trim();
|
|
10514
|
-
if (!(!t || t.length > 500)) for (let e of
|
|
10606
|
+
if (!(!t || t.length > 500)) for (let e of uf) {
|
|
10515
10607
|
let n = t.match(e);
|
|
10516
10608
|
if (n?.[1]) {
|
|
10517
10609
|
let e = n[1].trim().replace(/[。.!!]+$/, "");
|
|
10518
10610
|
return e.length < 3 ? void 0 : {
|
|
10519
10611
|
content: e,
|
|
10520
|
-
topic:
|
|
10612
|
+
topic: pf(e)
|
|
10521
10613
|
};
|
|
10522
10614
|
}
|
|
10523
10615
|
}
|
|
10524
10616
|
}
|
|
10525
|
-
function
|
|
10617
|
+
function hf(e) {
|
|
10526
10618
|
let t = e.trim();
|
|
10527
|
-
return t.length < 4 || t.length > 500 || /^(你好|hi|hello|ok|好的|继续|嗯|谢谢|hey|哈喽|收到|明白)/i.test(t) ? !1 :
|
|
10619
|
+
return t.length < 4 || t.length > 500 || /^(你好|hi|hello|ok|好的|继续|嗯|谢谢|hey|哈喽|收到|明白)/i.test(t) ? !1 : df.test(t);
|
|
10528
10620
|
}
|
|
10529
|
-
function
|
|
10621
|
+
function gf(e) {
|
|
10530
10622
|
return [
|
|
10531
10623
|
"你是用户偏好提取器。判断下面的用户消息是否包含「持久偏好」—— 对未来同类工作都适用的口味/规则(如配色口味、文案风格、排版密度),而非仅针对本轮的任务指令。",
|
|
10532
10624
|
"只输出 JSON(无任何其他文本):{\"captured\": true, \"content\": \"一句话中性陈述(用户视角,如:不用紫色,偏好低饱和)\", \"topic\": \"color|copy|layout|interaction|tech|other\"} 或 {\"captured\": false, \"content\": \"\", \"topic\": \"other\"}",
|
|
@@ -10535,7 +10627,7 @@ function lf(e) {
|
|
|
10535
10627
|
`用户消息:"""${e.slice(0, 800)}"""`
|
|
10536
10628
|
].join("\n");
|
|
10537
10629
|
}
|
|
10538
|
-
function
|
|
10630
|
+
function _f(e) {
|
|
10539
10631
|
if (!e) return;
|
|
10540
10632
|
let t = (e.match(/```(?:json)?\s*([\s\S]*?)```/)?.[1] ?? e).match(/\{[\s\S]*\}/)?.[0];
|
|
10541
10633
|
if (t) try {
|
|
@@ -10544,19 +10636,19 @@ function uf(e) {
|
|
|
10544
10636
|
let n = typeof e.content == "string" ? e.content.trim().replace(/[。.!!]+$/, "") : "";
|
|
10545
10637
|
return n.length < 3 || n.length > 200 ? void 0 : {
|
|
10546
10638
|
content: n,
|
|
10547
|
-
topic:
|
|
10639
|
+
topic: tf.includes(e.topic) ? e.topic : "other"
|
|
10548
10640
|
};
|
|
10549
10641
|
} catch {
|
|
10550
10642
|
return;
|
|
10551
10643
|
}
|
|
10552
10644
|
}
|
|
10553
|
-
function
|
|
10645
|
+
function vf(e) {
|
|
10554
10646
|
if (!e.length) return;
|
|
10555
10647
|
let t = ["## 用户偏好(跨会话沉淀;除非用户本轮另有指示,遵守以下偏好)"];
|
|
10556
|
-
for (let n of e) t.push(`- ${
|
|
10648
|
+
for (let n of e) t.push(`- ${lf[n.topic]}:${n.content}`);
|
|
10557
10649
|
return t.join("\n");
|
|
10558
10650
|
}
|
|
10559
|
-
function
|
|
10651
|
+
function yf(e) {
|
|
10560
10652
|
let t = [], n = -1, r = Promise.resolve(), i = (t) => e.onDebug?.({
|
|
10561
10653
|
stage: "preferences",
|
|
10562
10654
|
...t
|
|
@@ -10577,21 +10669,21 @@ function ff(e) {
|
|
|
10577
10669
|
}
|
|
10578
10670
|
return {
|
|
10579
10671
|
name: "preferences",
|
|
10580
|
-
augmentPrompt: () =>
|
|
10672
|
+
augmentPrompt: () => vf(t),
|
|
10581
10673
|
afterAgent: (t) => {
|
|
10582
10674
|
let r = t.messages ?? [];
|
|
10583
10675
|
for (let t = n + 1; t < r.length; t++) {
|
|
10584
10676
|
let n = r[t];
|
|
10585
10677
|
if (n.role !== "user" || typeof n.content != "string" || !n.content) continue;
|
|
10586
|
-
let o = n.content, s =
|
|
10678
|
+
let o = n.content, s = mf(o);
|
|
10587
10679
|
if (s) {
|
|
10588
10680
|
a(s.content, s.topic, t, "explicit");
|
|
10589
10681
|
continue;
|
|
10590
10682
|
}
|
|
10591
|
-
if (e.llmInvoke &&
|
|
10683
|
+
if (e.llmInvoke && hf(o)) {
|
|
10592
10684
|
let n = t;
|
|
10593
|
-
e.llmInvoke(
|
|
10594
|
-
let t =
|
|
10685
|
+
e.llmInvoke(gf(o)).then((e) => {
|
|
10686
|
+
let t = _f(e);
|
|
10595
10687
|
t && a(t.content, t.topic, n, "llm");
|
|
10596
10688
|
}).catch((e) => i({ extractError: String(e) }));
|
|
10597
10689
|
}
|
|
@@ -10614,12 +10706,12 @@ function ff(e) {
|
|
|
10614
10706
|
}
|
|
10615
10707
|
};
|
|
10616
10708
|
}
|
|
10617
|
-
var
|
|
10618
|
-
function
|
|
10709
|
+
var bf = /large_results\/[^\s"'`),]+\.txt/g;
|
|
10710
|
+
function xf(e) {
|
|
10619
10711
|
let t = /* @__PURE__ */ new Set(), n = (e) => {
|
|
10620
10712
|
if (typeof e != "string" || !e) return;
|
|
10621
10713
|
let n;
|
|
10622
|
-
for (
|
|
10714
|
+
for (bf.lastIndex = 0; (n = bf.exec(e)) !== null;) t.add(n[0]);
|
|
10623
10715
|
};
|
|
10624
10716
|
for (let r of e) {
|
|
10625
10717
|
if (n(r.content), r.steps) for (let e of r.steps) n(e.result);
|
|
@@ -10627,14 +10719,14 @@ function mf(e) {
|
|
|
10627
10719
|
}
|
|
10628
10720
|
return t;
|
|
10629
10721
|
}
|
|
10630
|
-
function
|
|
10722
|
+
function Sf(e, t) {
|
|
10631
10723
|
let n = [];
|
|
10632
10724
|
for (let r of Object.keys(e)) r.startsWith("large_results/") && !t.has(r) && n.push(r);
|
|
10633
10725
|
return n;
|
|
10634
10726
|
}
|
|
10635
10727
|
//#endregion
|
|
10636
10728
|
//#region src/core/utils/serialRunner.ts
|
|
10637
|
-
function
|
|
10729
|
+
function Cf() {
|
|
10638
10730
|
let e = Promise.resolve();
|
|
10639
10731
|
return function(t) {
|
|
10640
10732
|
let n = e.then(t, t);
|
|
@@ -10643,24 +10735,24 @@ function gf() {
|
|
|
10643
10735
|
}
|
|
10644
10736
|
//#endregion
|
|
10645
10737
|
//#region src/core/sdk/createChatSdk.ts
|
|
10646
|
-
var
|
|
10647
|
-
function
|
|
10738
|
+
var wf = 30, Tf = /* @__PURE__ */ new Map();
|
|
10739
|
+
function Ef(e, t) {
|
|
10648
10740
|
return e === "set_data" ? "set" : e === "edit_data" ? "edit" : e === "delete_data" ? "delete" : e === "restore_data" ? "restore" : e === "write" ? t?.del ? "delete" : t?.patch ? "edit" : "set" : null;
|
|
10649
10741
|
}
|
|
10650
|
-
function
|
|
10742
|
+
function Df(e) {
|
|
10651
10743
|
return e === "spawn_agent" || e === "spawn_agents" || e.startsWith("use_");
|
|
10652
10744
|
}
|
|
10653
|
-
function
|
|
10745
|
+
function Of(e, t, n, r) {
|
|
10654
10746
|
let i = 0;
|
|
10655
10747
|
return {
|
|
10656
10748
|
name: "sdk-events",
|
|
10657
10749
|
wrapToolCall: async (t, r) => {
|
|
10658
|
-
let i = await r(t), a =
|
|
10750
|
+
let i = await r(t), a = Ef(t.name, t.args);
|
|
10659
10751
|
return a ? e({
|
|
10660
10752
|
type: "data_change",
|
|
10661
10753
|
operation: a,
|
|
10662
10754
|
value: n()?.bind
|
|
10663
|
-
}) : i.status === "done" &&
|
|
10755
|
+
}) : i.status === "done" && Df(t.name) && e({
|
|
10664
10756
|
type: "data_change",
|
|
10665
10757
|
operation: "edit",
|
|
10666
10758
|
value: n()?.bind
|
|
@@ -10687,7 +10779,7 @@ function xf(e, t, n, r) {
|
|
|
10687
10779
|
}
|
|
10688
10780
|
};
|
|
10689
10781
|
}
|
|
10690
|
-
function
|
|
10782
|
+
function kf(e, t, n, r, i) {
|
|
10691
10783
|
if (!n) return i && console.warn(`[page-agent-sdk][focus] capabilities.focus 关闭,${t} 忽略`), {
|
|
10692
10784
|
ok: !1,
|
|
10693
10785
|
error: "capabilities.focus 关闭"
|
|
@@ -10705,20 +10797,20 @@ function Sf(e, t, n, r, i) {
|
|
|
10705
10797
|
error: "当前无主数据 schema,无法聚焦"
|
|
10706
10798
|
});
|
|
10707
10799
|
}
|
|
10708
|
-
function
|
|
10800
|
+
function Af(e, n) {
|
|
10709
10801
|
let i = e.toolMode ?? "advanced", a = i, o = {
|
|
10710
10802
|
prompt_tokens: 0,
|
|
10711
10803
|
completion_tokens: 0,
|
|
10712
10804
|
total_tokens: 0
|
|
10713
|
-
}, s =
|
|
10805
|
+
}, s = zl(() => G, () => e.conflictPolicy ?? "ask"), c = /* @__PURE__ */ jt(0), l = du(e.storage);
|
|
10714
10806
|
e.debug && l && l.onEvent((e) => console.log("[page-agent-sdk][storage]", e));
|
|
10715
|
-
let { modelCaps: u, summaryLlmInvoke: d, titleLlmInvoke: f, compressDecisionInvoke: h } =
|
|
10807
|
+
let { modelCaps: u, summaryLlmInvoke: d, titleLlmInvoke: f, compressDecisionInvoke: h } = Rl(e), g = u;
|
|
10716
10808
|
if (e.debug && console.log("[page-agent-sdk][modelCaps]", g), g.contextWindow < 2e5) throw Error(`[page-agent-sdk] 模型上下文窗口 ${g.contextWindow} 小于最小支持 ${Si}(需 ≥200K 窗口模型,如 GLM-5.2/Claude/Kimi/Qwen-1M/DeepSeek-v4)`);
|
|
10717
|
-
let _ =
|
|
10809
|
+
let _ = vu(e, g.contextWindow), v = _.enableLLMSummary !== !1, y = (e.contextOptions && e.contextOptions.preserveLastToolResults) ?? _u[e.contextPreset ?? "auto"], b = new Set(y), x = e.llm;
|
|
10718
10810
|
e.debug && !d && console.warn("[page-agent-sdk][summarization] 未构造 llmInvoke(apiKey 缺失?),摘要回退零成本索引摘要");
|
|
10719
10811
|
let S = /* @__PURE__ */ bt([]), C = kc(e.vfs?.initialFiles, {
|
|
10720
10812
|
persist: l ? { save: (e) => {
|
|
10721
|
-
|
|
10813
|
+
Ut({ vfs: e });
|
|
10722
10814
|
} } : void 0,
|
|
10723
10815
|
maxBytes: e.vfs?.maxBytes,
|
|
10724
10816
|
poolBytes: e.vfs?.poolBytes
|
|
@@ -10736,8 +10828,8 @@ function Cf(e, n) {
|
|
|
10736
10828
|
let k = { current: null }, A = e.data ? {
|
|
10737
10829
|
...e.data,
|
|
10738
10830
|
description: e.data.description ?? "主数据对象"
|
|
10739
|
-
} : void 0, ee = !(e.subagents ?? []).some((e) => e._codeAsset) &&
|
|
10740
|
-
ee && A?.schema && va(A.schema).length && (j = [...e.subagents ?? [],
|
|
10831
|
+
} : void 0, ee = !(e.subagents ?? []).some((e) => e._codeAsset) && mu(e.capabilities).subagent, j = e.subagents;
|
|
10832
|
+
ee && A?.schema && va(A.schema).length && (j = [...e.subagents ?? [], Cl()], console.info("[page-agent-sdk] 检测到 schema 含代码组件数组(如 components[].code),已自动装配 HTML 代码子 agent(委派编排 + vfs 工作副本 + 格式校验 + 增量 commit)。需定制(codeField/formatCheck/craftNotes 等)请显式传 createHtmlSubagent(...)"));
|
|
10741
10833
|
let M = (j ?? []).filter((e) => !!e._codeAsset), te = /* @__PURE__ */ new Set();
|
|
10742
10834
|
for (let e of M) {
|
|
10743
10835
|
if (e._codeAsset.writablePaths.length) continue;
|
|
@@ -10753,7 +10845,7 @@ function Cf(e, n) {
|
|
|
10753
10845
|
getTodos: () => k.current?.getState?.()?.todos ?? [],
|
|
10754
10846
|
messages: S,
|
|
10755
10847
|
maxCheckpoints: ae && typeof ae == "object" ? ae.maxCheckpoints : void 0
|
|
10756
|
-
}) : null, I = !ae || typeof ae != "object" || ae.auto !== !1, L =
|
|
10848
|
+
}) : null, I = !ae || typeof ae != "object" || ae.auto !== !1, L = mu(e.capabilities), se = L.dataOps, ce = L.draftWrite, le = L.tracing, ue = L.automation, de = Tc({
|
|
10757
10849
|
...e,
|
|
10758
10850
|
locale: e.i18n?.locale
|
|
10759
10851
|
});
|
|
@@ -10761,8 +10853,8 @@ function Cf(e, n) {
|
|
|
10761
10853
|
let e = N.map((e) => e._codeAsset.orchestratorPrompt).filter(Boolean).join("\n\n");
|
|
10762
10854
|
e && (de += "\n\n" + e);
|
|
10763
10855
|
} else A?.schema && _a(A.schema) && (de += "\n\n" + Fa.htmlDirectWriteFallback, console.warn("[page-agent-sdk] 检测到 schema 含 code 字段但未注册 html 子 agent:已自动注入「主 agent 自己写 HTML」编排(code 作普通字段直接 write,无 vfs 工作副本 / 无格式校验门禁)。如需代码资产机制(vfs + 格式校验 + 增量 commit + 主上下文 code 摘要),注册 createHtmlSubagent;若确为降级意图可忽略。"));
|
|
10764
|
-
e.hintsMode && e.hintsMode !== "auto" ? a = e.hintsMode : i === "advanced" && /simple\s
|
|
10765
|
-
let fe = se && A ?
|
|
10856
|
+
e.hintsMode && e.hintsMode !== "auto" ? a = e.hintsMode : i === "advanced" && /simple\s*模式|未暴露/.test(de) && (a = "simple", console.warn("[page-agent-sdk][hintsMode] 检测到 systemPrompt 含「simple 模式/未暴露」措辞但 toolMode 为 advanced(默认):usageHints 已自动降级为 simple 提示词,避免教 LLM 调用集成方 systemPrompt 声明「未暴露」的工具。建议显式对齐:① 集成方 systemPrompt 按 simple 工作流设计 → 传 toolMode:'simple' 让工具池也匹配(推荐);② 确需 advanced 工具池 + simple 风格提示词 → 显式传 hintsMode:'simple';③ systemPrompt 措辞已过时(实际想要 advanced)→ 更新 systemPrompt 去掉「simple 模式」字样。注:仅「勿调用」字样不再触发降级(3.29 收窄;集成方常用它描述自己禁用的工具,属合法 advanced 用法)。"));
|
|
10857
|
+
let fe = se && A ? ud(A, {
|
|
10766
10858
|
onAudit: e.onAudit ?? (e.debug ? (e) => console.log("[page-agent-sdk][data audit]", e) : void 0),
|
|
10767
10859
|
maxSnapshots: e.maxSnapshots,
|
|
10768
10860
|
onConflict: s.set,
|
|
@@ -10772,22 +10864,38 @@ function Cf(e, n) {
|
|
|
10772
10864
|
vfsStore: ce || A?.resources?.length ? C : void 0,
|
|
10773
10865
|
...P.length ? { pgIdPaths: P } : {},
|
|
10774
10866
|
...ie.length ? { largeTextPaths: ie } : {}
|
|
10775
|
-
}) : [], pe = se ?
|
|
10867
|
+
}) : [], pe = se ? td(fe, i) : [], R = se && A ? fe.controller ?? null : null, me = se && A?.resources?.length && R?.getResourcesSnapshot ? Yd({
|
|
10776
10868
|
getResourcesSnapshot: () => R?.getResourcesSnapshot?.() ?? [],
|
|
10777
10869
|
toolsExposed: i === "advanced"
|
|
10778
|
-
}) : void 0, z = () => R?.get() ?? A, B =
|
|
10779
|
-
|
|
10780
|
-
|
|
10781
|
-
|
|
10782
|
-
|
|
10783
|
-
|
|
10784
|
-
|
|
10785
|
-
|
|
10786
|
-
|
|
10787
|
-
|
|
10788
|
-
|
|
10789
|
-
|
|
10790
|
-
|
|
10870
|
+
}) : void 0, z = () => R?.get() ?? A, B = new Set(fe.map((e) => e.name)), V = R ? ul({
|
|
10871
|
+
getBind: () => z()?.bind,
|
|
10872
|
+
recomputeAll: () => R.recomputeAllBaselines?.(),
|
|
10873
|
+
hasBaselines: () => R.hasBaselines?.() ?? !1,
|
|
10874
|
+
isManaged: (e) => B.has(e),
|
|
10875
|
+
log: (e, t) => {
|
|
10876
|
+
let n = J.agent?.debugLogs;
|
|
10877
|
+
n && (n.value.push({
|
|
10878
|
+
timestamp: Date.now(),
|
|
10879
|
+
type: "middleware",
|
|
10880
|
+
data: {
|
|
10881
|
+
stage: "baseline_guard",
|
|
10882
|
+
...t
|
|
10883
|
+
}
|
|
10884
|
+
}), Pt(n));
|
|
10885
|
+
}
|
|
10886
|
+
}) : void 0, H = /* @__PURE__ */ new Map(), he = Gd(L, pe, fd, L.domInspect && !L.skills ? [
|
|
10887
|
+
...vd,
|
|
10888
|
+
Od,
|
|
10889
|
+
kd
|
|
10890
|
+
] : vd, Ld);
|
|
10891
|
+
he.forEach((e) => H.set(e.name, "builtin"));
|
|
10892
|
+
let ge = [...e.tools || []];
|
|
10893
|
+
ge.forEach((e) => H.set(e.name, "user"));
|
|
10894
|
+
let _e = Bd(e.actions ?? {});
|
|
10895
|
+
_e.forEach((e) => H.set(e.name, "action"));
|
|
10896
|
+
let ve = [], ye = !1, be = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), xe = be ? Zo() : null;
|
|
10897
|
+
xe && H.set(Yo, "builtin");
|
|
10898
|
+
let Se = oe && F ? [r(async () => {
|
|
10791
10899
|
let e = F.list();
|
|
10792
10900
|
return e.length ? F.restore() ? `已回退到最近一次正常状态(checkpoint #${e[e.length - 1].id})。对话历史、主数据、vfs、todos 已整体还原。请基于回退后的状态重新判断并继续。` : "回退失败:无可用 checkpoint。" : "无可用 checkpoint,无法回退。";
|
|
10793
10901
|
}, {
|
|
@@ -10802,8 +10910,8 @@ function Cf(e, n) {
|
|
|
10802
10910
|
description: "列出可用会话 checkpoint(回退点)。",
|
|
10803
10911
|
schema: t.object({}).optional()
|
|
10804
10912
|
})] : [];
|
|
10805
|
-
|
|
10806
|
-
let
|
|
10913
|
+
Se.forEach((e) => H.set(e.name, "builtin"));
|
|
10914
|
+
let Ce = L.focus, we = r(async ({ path: e, label: t }) => {
|
|
10807
10915
|
let n = z()?.schema;
|
|
10808
10916
|
return n ? pa(n, e) ? (E.setFocus({
|
|
10809
10917
|
path: e,
|
|
@@ -10816,11 +10924,11 @@ function Cf(e, n) {
|
|
|
10816
10924
|
path: t.string().describe("要聚焦的组件 jsonPath,如 components.3"),
|
|
10817
10925
|
label: t.string().optional().describe("人类可读标签,如「导航栏」")
|
|
10818
10926
|
})
|
|
10819
|
-
}),
|
|
10927
|
+
}), Te = r(async () => (E.clearFocus(), "已清除聚焦,恢复全量可操作范围(可读写所有组件)。"), {
|
|
10820
10928
|
name: "clear_focus",
|
|
10821
10929
|
description: "清除当前聚焦,退出精修模式,恢复对全部组件的读写权限。",
|
|
10822
10930
|
schema: t.object({}).optional()
|
|
10823
|
-
}),
|
|
10931
|
+
}), Ee = r(async ({ path: e, label: t }) => {
|
|
10824
10932
|
let n = z()?.schema;
|
|
10825
10933
|
if (!n) return "聚焦失败:当前无主数据 schema,无法聚焦。";
|
|
10826
10934
|
if (!pa(n, e)) return `PATH_DENIED · 聚焦失败:path "${e}" 不在 schema 内。请先用 read 查看可操作路径再聚焦。`;
|
|
@@ -10837,7 +10945,7 @@ function Cf(e, n) {
|
|
|
10837
10945
|
path: t.string().describe("要追加聚焦的组件 jsonPath,如 components.3"),
|
|
10838
10946
|
label: t.string().optional().describe("人类可读标签")
|
|
10839
10947
|
})
|
|
10840
|
-
}),
|
|
10948
|
+
}), De = r(async ({ path: e }) => {
|
|
10841
10949
|
let t = E.getFocuses().length;
|
|
10842
10950
|
E.removeFocus(e);
|
|
10843
10951
|
let n = E.getFocuses();
|
|
@@ -10846,81 +10954,85 @@ function Cf(e, n) {
|
|
|
10846
10954
|
name: "remove_focus",
|
|
10847
10955
|
description: "移除单个聚焦焦点(by path),保留其他焦点。移除最后一个等价退出精修。全部退出用 clear_focus。",
|
|
10848
10956
|
schema: t.object({ path: t.string().describe("要移除的焦点 jsonPath") })
|
|
10849
|
-
}),
|
|
10850
|
-
Se,
|
|
10851
|
-
Ce,
|
|
10957
|
+
}), Oe = Ce && i === "advanced" ? [
|
|
10852
10958
|
we,
|
|
10853
|
-
Te
|
|
10959
|
+
Te,
|
|
10960
|
+
Ee,
|
|
10961
|
+
De
|
|
10854
10962
|
] : [];
|
|
10855
|
-
|
|
10856
|
-
let
|
|
10857
|
-
function
|
|
10858
|
-
let { tools: e, collisions: t } =
|
|
10963
|
+
Oe.forEach((e) => H.set(e.name, "builtin"));
|
|
10964
|
+
let ke = [], Ae = /* @__PURE__ */ new Map(), U = je();
|
|
10965
|
+
function je() {
|
|
10966
|
+
let { tools: e, collisions: t } = Kd([
|
|
10859
10967
|
{
|
|
10860
10968
|
label: "builtin",
|
|
10861
|
-
tools:
|
|
10969
|
+
tools: he
|
|
10862
10970
|
},
|
|
10863
10971
|
{
|
|
10864
10972
|
label: "user",
|
|
10865
|
-
tools:
|
|
10973
|
+
tools: ge
|
|
10866
10974
|
},
|
|
10867
10975
|
{
|
|
10868
10976
|
label: "action",
|
|
10869
|
-
tools:
|
|
10977
|
+
tools: _e
|
|
10870
10978
|
},
|
|
10871
10979
|
{
|
|
10872
10980
|
label: "humanConfirm",
|
|
10873
|
-
tools:
|
|
10981
|
+
tools: xe ? [xe] : []
|
|
10874
10982
|
},
|
|
10875
10983
|
{
|
|
10876
10984
|
label: "checkpoint",
|
|
10877
|
-
tools:
|
|
10985
|
+
tools: Se
|
|
10878
10986
|
},
|
|
10879
10987
|
{
|
|
10880
10988
|
label: "focus",
|
|
10881
|
-
tools:
|
|
10989
|
+
tools: Oe
|
|
10882
10990
|
},
|
|
10883
10991
|
{
|
|
10884
10992
|
label: "mcp",
|
|
10885
|
-
tools:
|
|
10993
|
+
tools: ve
|
|
10886
10994
|
},
|
|
10887
10995
|
{
|
|
10888
10996
|
label: "skill",
|
|
10889
|
-
tools:
|
|
10997
|
+
tools: ke
|
|
10890
10998
|
}
|
|
10891
10999
|
]);
|
|
10892
11000
|
return t.length && console.warn("[page-agent-sdk] 工具重名,后注册覆盖先注册:", t.map((e) => `${e.name}(${e.loser}→${e.winner})`).join(", ")), e;
|
|
10893
11001
|
}
|
|
10894
|
-
let
|
|
10895
|
-
if (
|
|
10896
|
-
if (
|
|
10897
|
-
let
|
|
11002
|
+
let Me = L.planning, Ne = L.missionAnchor, Pe = L.workingMemory, Fe = L.skills, Ie = L.vfs || re;
|
|
11003
|
+
if (Ie) for (let e of Ic) H.set(e, "builtin");
|
|
11004
|
+
if (Me) for (let e of w.tools ?? []) H.set(e.name, "builtin");
|
|
11005
|
+
let Le = L.summarization, Re = L.agentCompression && !!h;
|
|
10898
11006
|
e.debug && L.agentCompression && !h && console.warn("[page-agent-sdk][agentCompression] agentCompression 开启但 summaryLlm 不可用(或缺 apiKey / 模型不支持工具),压缩决策不启用,回退静态压缩");
|
|
10899
|
-
let
|
|
10900
|
-
|
|
10901
|
-
let
|
|
10902
|
-
|
|
11007
|
+
let ze = L.memory, W = L.subagent, Be = W ? ks() : void 0, Ve = e.verify?.maxAttempts ?? 2, He = !!(e.verify?.check || e.verify?.maxAttempts || e.verify?.adversarial), Ue = e.capabilities?.verify === !1, We = (L.verify || He && !Ue) && e.verify?.enabled !== !1 && Ve > 0, Ge = L.contextInspector;
|
|
11008
|
+
He && !We && e.verify?.enabled !== !1 && console.warn("[page-agent-sdk][verify] 检测到 verify 配置(check/maxAttempts/adversarial)但未装载(capabilities.verify:false 显式关闭 或 maxAttempts≤0)");
|
|
11009
|
+
let Ke = e.subagent, qe = Ke?.allowedTools ?? [], Je = e.permissions?.length ? qo(e.permissions) : void 0, Ye = e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? Jo(e.approval) : void 0, Xe = [
|
|
11010
|
+
...Je ? [Je] : [],
|
|
11011
|
+
...Ye ? [Ye] : [],
|
|
11012
|
+
...V ? [V] : []
|
|
11013
|
+
], Ze = !W || Ke?.enabled === !1 ? void 0 : Ks({
|
|
11014
|
+
llm: Ke?.llm ?? e.llm,
|
|
10903
11015
|
allTools: () => J.agent?.allTools ?? U,
|
|
10904
|
-
allowedTools:
|
|
10905
|
-
systemPrompt:
|
|
10906
|
-
temperature:
|
|
10907
|
-
maxTokens:
|
|
10908
|
-
skills:
|
|
10909
|
-
maxDepth:
|
|
10910
|
-
maxParallel:
|
|
11016
|
+
allowedTools: qe.length ? qe : void 0,
|
|
11017
|
+
systemPrompt: Ke?.systemPrompt,
|
|
11018
|
+
temperature: Ke?.temperature,
|
|
11019
|
+
maxTokens: Ke?.maxTokens,
|
|
11020
|
+
skills: Ke?.skills,
|
|
11021
|
+
maxDepth: Ke?.maxDepth,
|
|
11022
|
+
maxParallel: Ke?.maxParallel,
|
|
10911
11023
|
debug: e.debug,
|
|
10912
11024
|
getFocuses: () => E.getFocuses(),
|
|
10913
11025
|
getSchema: () => z()?.schema ?? null,
|
|
10914
|
-
tracker:
|
|
10915
|
-
guardMiddleware:
|
|
10916
|
-
getVfsFiles:
|
|
11026
|
+
tracker: Be,
|
|
11027
|
+
guardMiddleware: Xe.length ? Xe : void 0,
|
|
11028
|
+
getVfsFiles: Ie ? () => C.files : void 0,
|
|
10917
11029
|
enterDataScope: R?.enterScope ? (e) => R.enterScope(e) : void 0,
|
|
10918
11030
|
exitDataScope: R?.exitScope ? (e) => R.exitScope(e) : void 0,
|
|
10919
11031
|
onUsage: (e) => {
|
|
10920
11032
|
o.prompt_tokens = (o.prompt_tokens ?? 0) + (e.prompt_tokens ?? 0), o.completion_tokens = (o.completion_tokens ?? 0) + (e.completion_tokens ?? 0), o.total_tokens = (o.total_tokens ?? 0) + (e.total_tokens ?? 0);
|
|
10921
11033
|
},
|
|
10922
|
-
timeoutMs:
|
|
10923
|
-
}),
|
|
11034
|
+
timeoutMs: Ke?.timeoutMs
|
|
11035
|
+
}), Qe = ne?.map((e) => {
|
|
10924
11036
|
if (!e._codeAsset) return e;
|
|
10925
11037
|
let t = e._codeAsset, n = tl({
|
|
10926
11038
|
writablePaths: t.writablePaths,
|
|
@@ -10937,64 +11049,64 @@ function Cf(e, n) {
|
|
|
10937
11049
|
...e,
|
|
10938
11050
|
middleware: r
|
|
10939
11051
|
};
|
|
10940
|
-
}),
|
|
11052
|
+
}), $e = re && W ? nl() : void 0, et = $e ? ll({
|
|
10941
11053
|
getBind: () => z()?.bind,
|
|
10942
11054
|
writablePaths: P,
|
|
10943
|
-
getLocked: () =>
|
|
11055
|
+
getLocked: () => $e.locked(),
|
|
10944
11056
|
tools: U,
|
|
10945
11057
|
getCodeFieldPaths: () => sl(z()?.bind, N.map((e) => ({
|
|
10946
11058
|
writablePaths: e._codeAsset.writablePaths,
|
|
10947
11059
|
codeField: e._codeAsset.codeField
|
|
10948
11060
|
})))
|
|
10949
|
-
}) : void 0,
|
|
11061
|
+
}) : void 0, tt = W && Qe !== void 0 ? Ys(Qe, {
|
|
10950
11062
|
llm: e.llm,
|
|
10951
11063
|
allTools: () => J.agent?.allTools ?? U,
|
|
10952
11064
|
debug: e.debug,
|
|
10953
11065
|
getFocuses: () => E.getFocuses(),
|
|
10954
11066
|
getSchema: () => z()?.schema ?? null,
|
|
10955
11067
|
getBind: () => z()?.bind,
|
|
10956
|
-
tracker:
|
|
10957
|
-
guardMiddleware:
|
|
10958
|
-
getVfsFiles:
|
|
11068
|
+
tracker: Be,
|
|
11069
|
+
guardMiddleware: Xe.length ? Xe : void 0,
|
|
11070
|
+
getVfsFiles: Ie ? () => C.files : void 0,
|
|
10959
11071
|
enterDataScope: R?.enterScope ? (e) => R.enterScope(e) : void 0,
|
|
10960
11072
|
exitDataScope: R?.exitScope ? (e) => R.exitScope(e) : void 0,
|
|
10961
11073
|
onUsage: (e) => {
|
|
10962
11074
|
o.prompt_tokens = (o.prompt_tokens ?? 0) + (e.prompt_tokens ?? 0), o.completion_tokens = (o.completion_tokens ?? 0) + (e.completion_tokens ?? 0), o.total_tokens = (o.total_tokens ?? 0) + (e.total_tokens ?? 0);
|
|
10963
11075
|
},
|
|
10964
11076
|
timeoutMs: e.subagent?.timeoutMs,
|
|
10965
|
-
|
|
10966
|
-
componentLock:
|
|
11077
|
+
...$e ? {
|
|
11078
|
+
componentLock: $e,
|
|
10967
11079
|
resolveComponents: (e) => rl(e, Zc(z()?.bind, P))
|
|
10968
11080
|
} : {}
|
|
10969
|
-
}) : void 0,
|
|
11081
|
+
}) : void 0, nt = tt ? tt.controller : null, rt = [
|
|
10970
11082
|
"get_data",
|
|
10971
11083
|
"describe_data",
|
|
10972
11084
|
"read",
|
|
10973
11085
|
"fetch_document"
|
|
10974
|
-
],
|
|
11086
|
+
], it = U.filter((e) => rt.includes(e.name)), at = We ? Xs({
|
|
10975
11087
|
check: e.verify.check ?? nc({
|
|
10976
11088
|
schemas: () => z() ? { "": z().schema } : {},
|
|
10977
11089
|
root: () => z()?.bind
|
|
10978
11090
|
}),
|
|
10979
11091
|
adversarial: e.verify?.adversarial ? {
|
|
10980
11092
|
llm: e.llm,
|
|
10981
|
-
tools:
|
|
11093
|
+
tools: it
|
|
10982
11094
|
} : void 0
|
|
10983
|
-
}) : void 0,
|
|
11095
|
+
}) : void 0, ot = Ge ? gc({
|
|
10984
11096
|
contextWindow: g.contextWindow,
|
|
10985
|
-
thresholdRatio:
|
|
10986
|
-
}) : void 0,
|
|
11097
|
+
thresholdRatio: vu(e, g.contextWindow).summaryThresholdRatio
|
|
11098
|
+
}) : void 0, st = Jd({
|
|
10987
11099
|
...L,
|
|
10988
|
-
humanConfirm:
|
|
11100
|
+
humanConfirm: be,
|
|
10989
11101
|
subagents: ne?.map((e) => ({
|
|
10990
11102
|
id: e.id,
|
|
10991
11103
|
description: e.description,
|
|
10992
11104
|
temperature: e.temperature
|
|
10993
11105
|
}))
|
|
10994
|
-
}, se && !!A, a, !!A?.resources?.length, { promptSoftCap: ws(g.contextWindow, _.promptSoftCapTokens) }),
|
|
11106
|
+
}, se && !!A, a, !!A?.resources?.length, { promptSoftCap: ws(g.contextWindow, _.promptSoftCapTokens) }), ct = A ? {
|
|
10995
11107
|
name: "dataHint",
|
|
10996
11108
|
augmentPrompt: () => wc(z(), e.schemaHint, i) || void 0
|
|
10997
|
-
} : null,
|
|
11109
|
+
} : null, lt = e.augmentSystem ? {
|
|
10998
11110
|
name: "augmentSystem",
|
|
10999
11111
|
augmentPrompt: (t) => {
|
|
11000
11112
|
try {
|
|
@@ -11007,22 +11119,22 @@ function Cf(e, n) {
|
|
|
11007
11119
|
return;
|
|
11008
11120
|
}
|
|
11009
11121
|
}
|
|
11010
|
-
} : null,
|
|
11122
|
+
} : null, ut = hu(e.onEvent), G = ut.emit, dt, ft = [], pt = (e) => ({
|
|
11011
11123
|
name: e.name,
|
|
11012
11124
|
description: e.description,
|
|
11013
11125
|
content: typeof e.getContent == "function" ? e.getContent() : ""
|
|
11014
|
-
}),
|
|
11126
|
+
}), mt = (e) => ({
|
|
11015
11127
|
name: e.name,
|
|
11016
11128
|
description: e.description,
|
|
11017
11129
|
getContent: () => e.content
|
|
11018
|
-
}),
|
|
11130
|
+
}), ht = e.skillStorage === !1 ? null : ef({
|
|
11019
11131
|
...typeof e.skillStorage == "object" ? e.skillStorage : {},
|
|
11020
11132
|
id: e.skillStorage && typeof e.skillStorage == "object" && e.skillStorage.id ? e.skillStorage.id : `agent::${n}`
|
|
11021
|
-
}),
|
|
11133
|
+
}), gt = L.preferences, _t = gt && e.preferenceStorage !== !1 ? cf({
|
|
11022
11134
|
...typeof e.preferenceStorage == "object" ? e.preferenceStorage : {},
|
|
11023
11135
|
id: e.preferenceStorage && typeof e.preferenceStorage == "object" && e.preferenceStorage.id ? e.preferenceStorage.id : `agent::${n}`
|
|
11024
|
-
}) : null,
|
|
11025
|
-
store:
|
|
11136
|
+
}) : null, vt = _t ? yf({
|
|
11137
|
+
store: _t,
|
|
11026
11138
|
llmInvoke: d,
|
|
11027
11139
|
getSessionId: () => J.sessionId,
|
|
11028
11140
|
onDebug: (e) => {
|
|
@@ -11033,77 +11145,78 @@ function Cf(e, n) {
|
|
|
11033
11145
|
data: e
|
|
11034
11146
|
}), Pt(t));
|
|
11035
11147
|
}
|
|
11036
|
-
}) : null,
|
|
11037
|
-
let t =
|
|
11148
|
+
}) : null, yt = () => {
|
|
11149
|
+
let t = dt ? dt.controller : null;
|
|
11038
11150
|
if (t) {
|
|
11039
|
-
let n = (e.skills || []).filter((e) => !
|
|
11040
|
-
t.set([...n, ...
|
|
11151
|
+
let n = (e.skills || []).filter((e) => !ft.some((t) => t.name === e.name));
|
|
11152
|
+
t.set([...n, ...ft]);
|
|
11041
11153
|
}
|
|
11042
11154
|
J.infoTick.value++;
|
|
11043
|
-
},
|
|
11044
|
-
if (
|
|
11045
|
-
let t = await
|
|
11155
|
+
}, xt = async () => {
|
|
11156
|
+
if (ht) try {
|
|
11157
|
+
let t = await ht.list();
|
|
11046
11158
|
if (t.length) {
|
|
11047
|
-
|
|
11048
|
-
let n =
|
|
11159
|
+
ft = t.map(mt);
|
|
11160
|
+
let n = dt ? dt.controller : null;
|
|
11049
11161
|
if (n) {
|
|
11050
|
-
let t = (e.skills || []).filter((e) => !
|
|
11051
|
-
n.set([...t, ...
|
|
11162
|
+
let t = (e.skills || []).filter((e) => !ft.some((t) => t.name === e.name));
|
|
11163
|
+
n.set([...t, ...ft]);
|
|
11052
11164
|
}
|
|
11053
11165
|
J.infoTick.value++;
|
|
11054
11166
|
}
|
|
11055
11167
|
} catch {}
|
|
11056
|
-
},
|
|
11168
|
+
}, St = Le ? Os({
|
|
11057
11169
|
..._,
|
|
11058
11170
|
llmInvoke: d,
|
|
11059
11171
|
getRegisteredData: () => z() ? [{ description: z().description ?? "主数据对象" }] : [],
|
|
11060
11172
|
preserveLastToolResults: y,
|
|
11061
|
-
...
|
|
11173
|
+
...Re ? {
|
|
11062
11174
|
decideInvoke: h,
|
|
11063
|
-
getSnapshot: () =>
|
|
11175
|
+
getSnapshot: () => ot?.getSnapshot()
|
|
11064
11176
|
} : {}
|
|
11065
|
-
}) : void 0,
|
|
11066
|
-
...
|
|
11067
|
-
|
|
11068
|
-
...
|
|
11069
|
-
...
|
|
11070
|
-
...
|
|
11071
|
-
...
|
|
11072
|
-
readVfs:
|
|
11177
|
+
}) : void 0, Ct = bu([
|
|
11178
|
+
...ct ? [ct] : [],
|
|
11179
|
+
st,
|
|
11180
|
+
...Ne ? [T] : [],
|
|
11181
|
+
...vt ? [vt] : [],
|
|
11182
|
+
...Me ? [w] : [],
|
|
11183
|
+
...Fe ? [dt = Bo([...L.domInspect && !(e.skills || []).some((e) => e.name === Ad.name) ? [Ad] : [], ...e.skills || []], {
|
|
11184
|
+
readVfs: Ie ? (e) => C.files[e]?.content : void 0,
|
|
11073
11185
|
hostScriptEnabled: L.skillHostScript,
|
|
11074
11186
|
onToolsReady: (e, t) => {
|
|
11075
11187
|
for (let n of t) {
|
|
11076
|
-
let t =
|
|
11077
|
-
t >= 0 &&
|
|
11188
|
+
let t = ke.findIndex((e) => e.name === n.name);
|
|
11189
|
+
t >= 0 && ke.splice(t, 1), ke.push(n), Ae.set(n.name, e), H.set(n.name, `skill:${e}`);
|
|
11078
11190
|
}
|
|
11079
|
-
U =
|
|
11191
|
+
U = je(), J.agent && J.agent.setTools(U), J.infoTick.value++;
|
|
11080
11192
|
}
|
|
11081
11193
|
})] : [],
|
|
11082
|
-
...
|
|
11083
|
-
...
|
|
11084
|
-
...
|
|
11085
|
-
...
|
|
11194
|
+
...Ie ? [Rc(C)] : [],
|
|
11195
|
+
...St ? [St] : [],
|
|
11196
|
+
...Pe ? [D] : [],
|
|
11197
|
+
...Ce ? [E] : [],
|
|
11086
11198
|
...me ? [me] : [],
|
|
11087
|
-
...
|
|
11088
|
-
...
|
|
11199
|
+
...ze ? [O] : [],
|
|
11200
|
+
...Je ? [Je] : [],
|
|
11089
11201
|
...oe && I && F ? [os(F)] : [],
|
|
11090
|
-
...
|
|
11091
|
-
...qe ? [qe] : [],
|
|
11092
|
-
...rt ? [rt] : [],
|
|
11202
|
+
...be ? [Qo()] : [],
|
|
11093
11203
|
...Ye ? [Ye] : [],
|
|
11094
|
-
|
|
11095
|
-
...
|
|
11096
|
-
...
|
|
11097
|
-
...
|
|
11204
|
+
...V ? [V] : [],
|
|
11205
|
+
...at ? [at] : [],
|
|
11206
|
+
...Ze ? [Ze] : [],
|
|
11207
|
+
...tt ? [tt] : [],
|
|
11208
|
+
...et ? [et] : [],
|
|
11209
|
+
...lt ? [lt] : [],
|
|
11210
|
+
...ot ? [ot] : [],
|
|
11098
11211
|
...e.middleware || [],
|
|
11099
|
-
...ue ? [
|
|
11212
|
+
...ue ? [Rd(o, {
|
|
11100
11213
|
tokenBudget: e.tokenBudget,
|
|
11101
11214
|
timeBudgetMs: e.timeBudgetMs
|
|
11102
11215
|
}, G)] : [],
|
|
11103
|
-
|
|
11104
|
-
]),
|
|
11105
|
-
function
|
|
11106
|
-
if (
|
|
11216
|
+
Of(G, S, z, o)
|
|
11217
|
+
]), wt = e.maxMemoryRounds ?? wf, Tt = e.approval?.timeoutMs, Et = Tt === void 0 || Tt === 0 ? 3e4 : !Number.isFinite(Tt) || Tt < 0 ? 0 : Tt;
|
|
11218
|
+
function Dt(e) {
|
|
11219
|
+
if (Et) return (t) => {
|
|
11107
11220
|
if (t.type !== "approval_request") return;
|
|
11108
11221
|
let n = Date.now(), r = t.toolName;
|
|
11109
11222
|
setTimeout(() => {
|
|
@@ -11117,43 +11230,43 @@ function Cf(e, n) {
|
|
|
11117
11230
|
waitedMs: Date.now() - n
|
|
11118
11231
|
}
|
|
11119
11232
|
}));
|
|
11120
|
-
},
|
|
11233
|
+
}, Et);
|
|
11121
11234
|
};
|
|
11122
11235
|
}
|
|
11123
|
-
function
|
|
11124
|
-
let t =
|
|
11236
|
+
function K(e) {
|
|
11237
|
+
let t = Dt(e);
|
|
11125
11238
|
return (e) => {
|
|
11126
11239
|
t?.(e), e.type !== "approval_request" && G(e);
|
|
11127
11240
|
};
|
|
11128
11241
|
}
|
|
11129
|
-
let
|
|
11130
|
-
async function
|
|
11242
|
+
let Ot = /* @__PURE__ */ jt([]);
|
|
11243
|
+
async function kt() {
|
|
11131
11244
|
if (l) try {
|
|
11132
|
-
|
|
11245
|
+
Ot.value = (await l.listSessions(n)).sort((e, t) => t.lastAccessed - e.lastAccessed);
|
|
11133
11246
|
} catch (t) {
|
|
11134
11247
|
e.debug && console.warn("[page-agent-sdk][persist] refreshSessions 失败(已吞):", t);
|
|
11135
11248
|
}
|
|
11136
11249
|
}
|
|
11137
|
-
let
|
|
11138
|
-
function
|
|
11250
|
+
let At = Cf(), q = /* @__PURE__ */ new Set();
|
|
11251
|
+
function Mt(e) {
|
|
11139
11252
|
let t = new AbortController(), n = () => t.abort();
|
|
11140
|
-
return e && (e.aborted ? t.abort() : e.addEventListener("abort", n, { once: !0 })),
|
|
11253
|
+
return e && (e.aborted ? t.abort() : e.addEventListener("abort", n, { once: !0 })), q.add(t), {
|
|
11141
11254
|
controller: t,
|
|
11142
11255
|
untrack: () => {
|
|
11143
|
-
|
|
11256
|
+
q.delete(t), e?.removeEventListener("abort", n);
|
|
11144
11257
|
}
|
|
11145
11258
|
};
|
|
11146
11259
|
}
|
|
11147
|
-
function
|
|
11148
|
-
for (let e of
|
|
11149
|
-
|
|
11260
|
+
function Nt() {
|
|
11261
|
+
for (let e of q) e.abort();
|
|
11262
|
+
q.clear();
|
|
11150
11263
|
}
|
|
11151
11264
|
let J = {
|
|
11152
11265
|
agentId: n,
|
|
11153
11266
|
store: l,
|
|
11154
11267
|
messages: S,
|
|
11155
11268
|
vfsStore: C,
|
|
11156
|
-
listeners:
|
|
11269
|
+
listeners: ut.listeners,
|
|
11157
11270
|
todosMw: w,
|
|
11158
11271
|
memoryMw: O,
|
|
11159
11272
|
missionMw: T,
|
|
@@ -11168,30 +11281,30 @@ function Cf(e, n) {
|
|
|
11168
11281
|
mcpFailed: [],
|
|
11169
11282
|
checkpoint: F,
|
|
11170
11283
|
dataOpsController: R,
|
|
11171
|
-
skillsController:
|
|
11284
|
+
skillsController: dt ? dt.controller : null,
|
|
11172
11285
|
infoTick: c,
|
|
11173
11286
|
pendingConflict: s.pendingConflict,
|
|
11174
|
-
sessions:
|
|
11175
|
-
refreshSessions:
|
|
11287
|
+
sessions: Ot,
|
|
11288
|
+
refreshSessions: kt,
|
|
11176
11289
|
liveData: z,
|
|
11177
11290
|
usage: o,
|
|
11178
11291
|
emit: G,
|
|
11179
|
-
runSerial:
|
|
11180
|
-
trackActive:
|
|
11181
|
-
abortAllActive:
|
|
11292
|
+
runSerial: At,
|
|
11293
|
+
trackActive: Mt,
|
|
11294
|
+
abortAllActive: Nt,
|
|
11182
11295
|
unloadSkillTools(e) {
|
|
11183
11296
|
if (e) {
|
|
11184
|
-
let t =
|
|
11185
|
-
if (
|
|
11297
|
+
let t = ke.length;
|
|
11298
|
+
if (ke = ke.filter((t) => Ae.get(t.name) === e ? (H.delete(t.name), Ae.delete(t.name), !1) : !0), ke.length === t) return;
|
|
11186
11299
|
} else {
|
|
11187
|
-
if (!
|
|
11188
|
-
for (let e of
|
|
11189
|
-
|
|
11300
|
+
if (!ke.length) return;
|
|
11301
|
+
for (let e of ke) H.delete(e.name), Ae.delete(e.name);
|
|
11302
|
+
ke = [];
|
|
11190
11303
|
}
|
|
11191
|
-
U =
|
|
11304
|
+
U = je(), J.agent && J.agent.setTools(U);
|
|
11192
11305
|
},
|
|
11193
11306
|
applySnapshot(t) {
|
|
11194
|
-
if (t.vfs && C.hydrate && C.hydrate(t.vfs), t.messages?.length && S.push(...ui(t.messages, (e) => (e ? J.vfsStore?.files?.[e]?.content : void 0) || void 0)), t.todos?.length && w.reset(t.todos), t.memory && !e.memory && O.reset(t.memory), t.checkpoints?.length && F && F.importStack(t.checkpoints), t.usage && Object.assign(o, t.usage), t.mission &&
|
|
11307
|
+
if (t.vfs && C.hydrate && C.hydrate(t.vfs), t.messages?.length && S.push(...ui(t.messages, (e) => (e ? J.vfsStore?.files?.[e]?.content : void 0) || void 0)), t.todos?.length && w.reset(t.todos), t.memory && !e.memory && O.reset(t.memory), t.checkpoints?.length && F && F.importStack(t.checkpoints), t.usage && Object.assign(o, t.usage), t.mission && Ne && T.setMission(t.mission), t.workingMemory && Pe && D.restore(t.workingMemory), Ce) {
|
|
11195
11308
|
let n = t.focus, r = n ? Array.isArray(n) ? n : [n] : [];
|
|
11196
11309
|
if (r.length) {
|
|
11197
11310
|
let t = z()?.schema, n = t ? r.filter((e) => pa(t, e.path)) : [];
|
|
@@ -11201,21 +11314,21 @@ function Cf(e, n) {
|
|
|
11201
11314
|
}
|
|
11202
11315
|
}
|
|
11203
11316
|
}
|
|
11204
|
-
|
|
11317
|
+
Rt();
|
|
11205
11318
|
},
|
|
11206
11319
|
addSkill(e) {
|
|
11207
|
-
let t =
|
|
11208
|
-
t >= 0 ?
|
|
11320
|
+
let t = ft.findIndex((t) => t.name === e.name);
|
|
11321
|
+
t >= 0 ? ft[t] = e : ft.push(e), yt(), ht && ht.put(pt(e));
|
|
11209
11322
|
},
|
|
11210
11323
|
removeSkill(e) {
|
|
11211
|
-
let t =
|
|
11212
|
-
return t < 0 ? !1 : (
|
|
11324
|
+
let t = ft.findIndex((t) => t.name === e);
|
|
11325
|
+
return t < 0 ? !1 : (ft.splice(t, 1), yt(), ht && ht.remove(e), !0);
|
|
11213
11326
|
},
|
|
11214
11327
|
listUserSkills() {
|
|
11215
|
-
return
|
|
11328
|
+
return ft.map((e) => e.name);
|
|
11216
11329
|
},
|
|
11217
11330
|
getUserSkill(e) {
|
|
11218
|
-
let t =
|
|
11331
|
+
let t = ft.find((t) => t.name === e);
|
|
11219
11332
|
if (t) return {
|
|
11220
11333
|
name: t.name,
|
|
11221
11334
|
description: t.description,
|
|
@@ -11223,11 +11336,11 @@ function Cf(e, n) {
|
|
|
11223
11336
|
};
|
|
11224
11337
|
},
|
|
11225
11338
|
afterRound() {
|
|
11226
|
-
|
|
11339
|
+
zt(), qt();
|
|
11227
11340
|
},
|
|
11228
11341
|
async send(e, t) {
|
|
11229
11342
|
if (await J.initDone, J.refCount <= 0) throw Error("page-agent-sdk: agent 已释放(unmount),拒绝排队中的 send");
|
|
11230
|
-
t ??= {}, t?.mission &&
|
|
11343
|
+
t ??= {}, t?.mission && Ne && T.setMission(t.mission);
|
|
11231
11344
|
let n = e;
|
|
11232
11345
|
if (t.interceptors?.input) try {
|
|
11233
11346
|
let r = t.interceptors.input(e);
|
|
@@ -11235,7 +11348,7 @@ function Cf(e, n) {
|
|
|
11235
11348
|
} catch {}
|
|
11236
11349
|
let r = (t.images ?? []).filter((e) => e && (e.dataUri || e.vfsRef || e.url));
|
|
11237
11350
|
if (r.length > 4) throw Error(`[page-agent-sdk] 单轮最多 4 张图片(收到 ${r.length})`);
|
|
11238
|
-
if (r.length && (await
|
|
11351
|
+
if (r.length && (await Gt(r), await Kt(r, n)), r.length && !g.vision && !r.every((e) => e.description)) {
|
|
11239
11352
|
let e = "当前主模型不支持图片输入(modelCaps.vision=false)。请换多模态模型(gpt-4o/claude/qwen-vl)或 LLMConfig 声明 vision:true;或配置 images.describe 绑定识图转述(集成方识图子 agent / 自有 vision API)";
|
|
11240
11353
|
throw G({
|
|
11241
11354
|
type: "error",
|
|
@@ -11244,7 +11357,7 @@ function Cf(e, n) {
|
|
|
11244
11357
|
code: "IMAGE_UNSUPPORTED_MODEL"
|
|
11245
11358
|
}), Error(`[page-agent-sdk] ${e}`);
|
|
11246
11359
|
}
|
|
11247
|
-
let i = ue ? t.maxAutoRetries ?? 1 : 0, a = 0, o = !1, s =
|
|
11360
|
+
let i = ue ? t.maxAutoRetries ?? 1 : 0, a = 0, o = !1, s = K(t.signal), c = J.sessionId;
|
|
11248
11361
|
for (;;) {
|
|
11249
11362
|
o ||= (S.push({
|
|
11250
11363
|
role: "user",
|
|
@@ -11302,7 +11415,7 @@ function Cf(e, n) {
|
|
|
11302
11415
|
async batch(e, t, n) {
|
|
11303
11416
|
if (await J.initDone, !e.length) return [];
|
|
11304
11417
|
if (J.refCount <= 0) throw Error("page-agent-sdk: agent 已释放(unmount),拒绝排队中的 batch");
|
|
11305
|
-
let r = [], i =
|
|
11418
|
+
let r = [], i = K(n);
|
|
11306
11419
|
for (let a = 0; a < e.length; a++) {
|
|
11307
11420
|
if (n?.aborted) {
|
|
11308
11421
|
for (let t = a; t < e.length; t++) r.push({
|
|
@@ -11382,40 +11495,40 @@ function Cf(e, n) {
|
|
|
11382
11495
|
async switchSession(t) {
|
|
11383
11496
|
if (await J.initDone, !l) throw Error("page-agent-sdk: storage 未开启,无法切换会话(请传 storage 选项)");
|
|
11384
11497
|
if (s.resolve("keep_external"), J.sessionId && l) {
|
|
11385
|
-
if (
|
|
11498
|
+
if (Ne) {
|
|
11386
11499
|
let e = T.getMission();
|
|
11387
|
-
e &&
|
|
11500
|
+
e && Ut({ mission: e });
|
|
11388
11501
|
}
|
|
11389
|
-
if (
|
|
11502
|
+
if (Pe) {
|
|
11390
11503
|
let e = D.getWorkingMemory();
|
|
11391
|
-
e &&
|
|
11504
|
+
e && Ut({ workingMemory: e });
|
|
11392
11505
|
}
|
|
11393
|
-
if (
|
|
11506
|
+
if (Ce) {
|
|
11394
11507
|
let e = E.getFocuses();
|
|
11395
|
-
|
|
11508
|
+
Ut({ focus: e.length ? e : null });
|
|
11396
11509
|
}
|
|
11397
11510
|
}
|
|
11398
11511
|
C.flush?.(), await l.flush();
|
|
11399
11512
|
let r = t ?? "", i;
|
|
11400
|
-
return r ? (i = await l.load(n, r), i || await l.createSession(n, e.session?.title, r)) : r = await l.createSession(n, e.session?.title), J.sessionId = r, S.splice(0, S.length), C.clear?.(), w.reset([]), e.memory || O.reset(""), T.reset(), D.reset(), E.reset(),
|
|
11513
|
+
return r ? (i = await l.load(n, r), i || await l.createSession(n, e.session?.title, r)) : r = await l.createSession(n, e.session?.title), J.sessionId = r, S.splice(0, S.length), C.clear?.(), w.reset([]), e.memory || O.reset(""), T.reset(), D.reset(), E.reset(), vt?.resetScanCursor(), F && F.importStack([]), J.agent.debugLogs.value = [], i ||= await l.load(n, r), i && (J.applySnapshot(i), G({
|
|
11401
11514
|
type: "session_restored",
|
|
11402
11515
|
sessionId: r,
|
|
11403
11516
|
rounds: i.messages?.length ?? 0
|
|
11404
|
-
})), e.memory &&
|
|
11517
|
+
})), e.memory && Ut({ memory: O.get() || (typeof e.memory == "string" ? e.memory : "") }), kt(), Bt = void 0, Vt = !1, J.infoTick.value++, r;
|
|
11405
11518
|
},
|
|
11406
11519
|
resetSession: () => {
|
|
11407
|
-
|
|
11520
|
+
Nt(), s.resolve("keep_external"), J.sessionId = Bl(), S.splice(0, S.length), C.clear?.(), w.reset([]), e.memory || O.reset(""), T.reset(), D.reset(), E.reset(), vt?.resetScanCursor(), F && F.importStack([]), J.agent && (J.agent.debugLogs.value = []), l && l.createSession(J.agentId, e.session?.title, J.sessionId).catch((t) => {
|
|
11408
11521
|
e.debug && console.warn("[page-agent-sdk][persist] createSession 失败(已吞):", t);
|
|
11409
11522
|
}), G({
|
|
11410
11523
|
type: "session_restored",
|
|
11411
11524
|
sessionId: J.sessionId,
|
|
11412
11525
|
rounds: 0
|
|
11413
|
-
}), J.infoTick.value++,
|
|
11526
|
+
}), J.infoTick.value++, kt(), Bt = void 0, Vt = !1;
|
|
11414
11527
|
},
|
|
11415
11528
|
stream: async (e, t, n) => {
|
|
11416
11529
|
if (!J.agent) throw Error("page-agent-sdk: agent 尚未初始化完成,请先 await mount()");
|
|
11417
11530
|
let r = [...e].reverse().find((e) => e.role === "user" && e.images?.length);
|
|
11418
|
-
if (r?.images?.length && (await
|
|
11531
|
+
if (r?.images?.length && (await Gt(r.images), await Kt(r.images, r.content), !g.vision && !r.images.every((e) => e.description))) {
|
|
11419
11532
|
let e = "当前主模型不支持图片输入(modelCaps.vision=false)。请换多模态模型(gpt-4o/claude/qwen-vl)或 LLMConfig 声明 vision:true;或配置 images.describe 绑定识图转述";
|
|
11420
11533
|
throw G({
|
|
11421
11534
|
type: "error",
|
|
@@ -11424,7 +11537,7 @@ function Cf(e, n) {
|
|
|
11424
11537
|
code: "IMAGE_UNSUPPORTED_MODEL"
|
|
11425
11538
|
}), Error(`[page-agent-sdk] ${e}`);
|
|
11426
11539
|
}
|
|
11427
|
-
C?.setProtectedRefs?.(
|
|
11540
|
+
C?.setProtectedRefs?.(xf(e));
|
|
11428
11541
|
let i = (e) => {
|
|
11429
11542
|
t?.(e), G(e), e.type === "subagent" && (e.kind === "tool_call" || e.kind === "tool_result") && J.infoTick.value++;
|
|
11430
11543
|
};
|
|
@@ -11432,48 +11545,48 @@ function Cf(e, n) {
|
|
|
11432
11545
|
let e = () => s.resolve("keep_external");
|
|
11433
11546
|
n.aborted ? e() : n.addEventListener("abort", e, { once: !0 });
|
|
11434
11547
|
}
|
|
11435
|
-
let { controller: a, untrack: o } =
|
|
11548
|
+
let { controller: a, untrack: o } = Mt(n);
|
|
11436
11549
|
return J.agent.stream(e, i, a.signal).finally(o);
|
|
11437
11550
|
},
|
|
11438
11551
|
release() {
|
|
11439
11552
|
if (J.refCount--, J.refCount <= 0) {
|
|
11440
|
-
|
|
11553
|
+
Nt(), ye = !0, l && (C.flush?.(), l.flush(), l.dispose()), ht && ht.dispose();
|
|
11441
11554
|
let e = J.mcpClosers.splice(0);
|
|
11442
|
-
e.length && Promise.allSettled(e.map((e) => e())),
|
|
11555
|
+
e.length && Promise.allSettled(e.map((e) => e())), Tf.delete(n);
|
|
11443
11556
|
}
|
|
11444
11557
|
},
|
|
11445
11558
|
resolveConflict: s.resolve,
|
|
11446
11559
|
setTools(e) {
|
|
11447
|
-
|
|
11448
|
-
|
|
11449
|
-
}), U =
|
|
11560
|
+
ge.length = 0, e.forEach((e) => {
|
|
11561
|
+
ge.push(e), H.set(e.name, "user");
|
|
11562
|
+
}), U = je(), J.agent && J.agent.setTools(U), J.infoTick.value++;
|
|
11450
11563
|
},
|
|
11451
11564
|
addTool(e) {
|
|
11452
11565
|
U.some((t) => t.name === e.name) && console.warn(`[page-agent-sdk] 工具 "${e.name}" 已存在,新工具覆盖(后注册覆盖先注册)`);
|
|
11453
|
-
for (let t =
|
|
11454
|
-
|
|
11566
|
+
for (let t = ge.length - 1; t >= 0; t--) ge[t].name === e.name && ge.splice(t, 1);
|
|
11567
|
+
ge.push(e), H.set(e.name, "user"), U = je(), J.agent && J.agent.setTools(U), J.infoTick.value++;
|
|
11455
11568
|
},
|
|
11456
11569
|
removeTool(e) {
|
|
11457
|
-
let t =
|
|
11458
|
-
return t < 0 ? !1 : (
|
|
11570
|
+
let t = ge.findIndex((t) => t.name === e);
|
|
11571
|
+
return t < 0 ? !1 : (ge.splice(t, 1), H.delete(e), U = je(), J.agent && J.agent.setTools(U), J.infoTick.value++, !0);
|
|
11459
11572
|
},
|
|
11460
11573
|
setLlm(t) {
|
|
11461
11574
|
let n;
|
|
11462
|
-
if (
|
|
11575
|
+
if (kl(t)) n = t;
|
|
11463
11576
|
else {
|
|
11464
11577
|
let e = t;
|
|
11465
11578
|
if ((e.provider ?? "openai") === "anthropic") throw Error("[page-agent-sdk][setLlm] 切换到 Anthropic 需传 BaseChatModel 实例(动态 import 无法同步);请先 const { ChatAnthropic } = await import(\"@langchain/anthropic\") 构造实例后传入");
|
|
11466
11579
|
n = p(e);
|
|
11467
11580
|
}
|
|
11468
11581
|
typeof n.bindTools != "function" && e.debug && console.warn("[page-agent-sdk][setLlm] 新模型不支持 bindTools(tool calling 会失效)"), x = t;
|
|
11469
|
-
let r =
|
|
11582
|
+
let r = kl(t) ? void 0 : t;
|
|
11470
11583
|
if (g = Ci({
|
|
11471
11584
|
model: r?.model ?? t.model ?? t.modelName,
|
|
11472
11585
|
contextWindow: e.contextWindow ?? r?.contextWindow,
|
|
11473
11586
|
maxOutputTokens: e.maxOutputTokens ?? r?.maxOutputTokens,
|
|
11474
11587
|
vision: r?.vision ?? t.vision
|
|
11475
11588
|
}), g.contextWindow < 2e5) throw Error(`[page-agent-sdk][setLlm] 新模型上下文窗口 ${g.contextWindow} 小于最小支持 ${Si}(需 ≥200K 窗口模型)`);
|
|
11476
|
-
J.agent && (J.agent.setLlm(n), J.agent.setModelCaps?.(g)),
|
|
11589
|
+
J.agent && (J.agent.setLlm(n), J.agent.setModelCaps?.(g)), St?.setContextWindow?.(g.contextWindow), ot?.setContextWindow?.(g.contextWindow), J.infoTick.value++, e.debug && console.log("[page-agent-sdk][setLlm] 重解析 modelCaps + 回灌:", g);
|
|
11477
11590
|
},
|
|
11478
11591
|
setMemory(e) {
|
|
11479
11592
|
O.reset(e), typeof e == "function" && O.refresh(), J.infoTick.value++;
|
|
@@ -11482,43 +11595,43 @@ function Cf(e, n) {
|
|
|
11482
11595
|
return O.refresh();
|
|
11483
11596
|
},
|
|
11484
11597
|
setSubagents(t) {
|
|
11485
|
-
if (!
|
|
11598
|
+
if (!nt) {
|
|
11486
11599
|
e.debug && console.warn("[page-agent-sdk][setSubagents] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略");
|
|
11487
11600
|
return;
|
|
11488
11601
|
}
|
|
11489
|
-
|
|
11602
|
+
nt.set(t), J.infoTick.value++;
|
|
11490
11603
|
},
|
|
11491
11604
|
addSubagent(t) {
|
|
11492
|
-
if (!
|
|
11605
|
+
if (!nt) {
|
|
11493
11606
|
e.debug && console.warn("[page-agent-sdk][addSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略");
|
|
11494
11607
|
return;
|
|
11495
11608
|
}
|
|
11496
|
-
|
|
11609
|
+
nt.add(t), J.infoTick.value++;
|
|
11497
11610
|
},
|
|
11498
11611
|
removeSubagent(t) {
|
|
11499
|
-
if (!
|
|
11500
|
-
let n =
|
|
11612
|
+
if (!nt) return e.debug && console.warn("[page-agent-sdk][removeSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略"), !1;
|
|
11613
|
+
let n = nt.remove(t);
|
|
11501
11614
|
return n && J.infoTick.value++, n;
|
|
11502
11615
|
},
|
|
11503
11616
|
getActiveSubagents() {
|
|
11504
|
-
return
|
|
11617
|
+
return Be?.getActive() ?? [];
|
|
11505
11618
|
},
|
|
11506
11619
|
get subagentHistory() {
|
|
11507
|
-
return
|
|
11620
|
+
return Be?.getHistory() ?? [];
|
|
11508
11621
|
},
|
|
11509
11622
|
getInfo() {
|
|
11510
11623
|
return {
|
|
11511
11624
|
id: n,
|
|
11512
11625
|
sessionId: J.sessionId,
|
|
11513
|
-
model:
|
|
11626
|
+
model: kl(x) ? x.model ?? x.modelName : x.model,
|
|
11514
11627
|
systemPrompt: J.agent?.getEffectiveSystemPrompt?.() ?? de + wc(z(), e.schemaHint, i),
|
|
11515
11628
|
tools: (J.agent?.allTools ?? U).map((e) => ({
|
|
11516
11629
|
name: e.name,
|
|
11517
11630
|
description: e.description,
|
|
11518
11631
|
schema: e.schema,
|
|
11519
|
-
source:
|
|
11632
|
+
source: H.get(e.name) || "user"
|
|
11520
11633
|
})),
|
|
11521
|
-
skills: (
|
|
11634
|
+
skills: (dt ? dt.controller.get() : e.skills ?? []).map((e) => ({
|
|
11522
11635
|
name: e.name,
|
|
11523
11636
|
description: e.description
|
|
11524
11637
|
})),
|
|
@@ -11533,7 +11646,7 @@ function Cf(e, n) {
|
|
|
11533
11646
|
promptSoftCap: ws(g.contextWindow, _.promptSoftCapTokens)
|
|
11534
11647
|
},
|
|
11535
11648
|
memory: O.get(),
|
|
11536
|
-
middleware:
|
|
11649
|
+
middleware: Ct.map((e) => e.name),
|
|
11537
11650
|
todos: (J.agent?.getState?.()?.todos ?? []).map((e) => ({
|
|
11538
11651
|
id: e.id,
|
|
11539
11652
|
content: e.content,
|
|
@@ -11544,33 +11657,33 @@ function Cf(e, n) {
|
|
|
11544
11657
|
...e.evidence === void 0 ? {} : { evidence: e.evidence }
|
|
11545
11658
|
})),
|
|
11546
11659
|
planPhase: w.getPlanPhase(),
|
|
11547
|
-
mission:
|
|
11548
|
-
preferences:
|
|
11549
|
-
workingMemory:
|
|
11550
|
-
focus:
|
|
11551
|
-
focuses:
|
|
11660
|
+
mission: Ne ? T.getMission() : void 0,
|
|
11661
|
+
preferences: gt && vt ? vt.getPreferences() : void 0,
|
|
11662
|
+
workingMemory: Pe ? D.getWorkingMemory() : void 0,
|
|
11663
|
+
focus: Ce ? E.getFocus() : void 0,
|
|
11664
|
+
focuses: Ce ? E.getFocuses() : [],
|
|
11552
11665
|
trace: le && J.agent?.spans ? {
|
|
11553
11666
|
spans: J.agent.spans.value,
|
|
11554
11667
|
metrics: Ei(J.agent.spans.value)
|
|
11555
11668
|
} : void 0,
|
|
11556
|
-
actions:
|
|
11669
|
+
actions: Vd(e.actions ?? {}),
|
|
11557
11670
|
subagent: {
|
|
11558
|
-
enabled: !!
|
|
11671
|
+
enabled: !!Ze,
|
|
11559
11672
|
maxDepth: e.subagent?.maxDepth ?? 1,
|
|
11560
11673
|
maxParallel: e.subagent?.maxParallel ?? 4,
|
|
11561
11674
|
allowedTools: e.subagent?.allowedTools ?? [],
|
|
11562
|
-
subagents:
|
|
11563
|
-
active:
|
|
11564
|
-
history:
|
|
11565
|
-
lockedComponents:
|
|
11675
|
+
subagents: nt?.get() ?? [],
|
|
11676
|
+
active: Be?.getActive() ?? [],
|
|
11677
|
+
history: Be?.getHistory() ?? [],
|
|
11678
|
+
lockedComponents: $e?.locked() ?? {}
|
|
11566
11679
|
},
|
|
11567
11680
|
verify: {
|
|
11568
|
-
enabled: !!
|
|
11569
|
-
maxAttempts:
|
|
11570
|
-
adversarial:
|
|
11681
|
+
enabled: !!at,
|
|
11682
|
+
maxAttempts: We ? Ve : 0,
|
|
11683
|
+
adversarial: We && !!e.verify?.adversarial
|
|
11571
11684
|
},
|
|
11572
11685
|
context: (() => {
|
|
11573
|
-
let e =
|
|
11686
|
+
let e = ot?.getSnapshot();
|
|
11574
11687
|
if (e) {
|
|
11575
11688
|
let t = J.agent?.getState?.()?.lastCompression;
|
|
11576
11689
|
t && (e.compression = t);
|
|
@@ -11589,52 +11702,85 @@ function Cf(e, n) {
|
|
|
11589
11702
|
} : void 0
|
|
11590
11703
|
};
|
|
11591
11704
|
},
|
|
11705
|
+
exportDiagnostics() {
|
|
11706
|
+
let e = J.getInfo(), t = {
|
|
11707
|
+
...e,
|
|
11708
|
+
tools: e.tools.map(({ schema: e, ...t }) => t),
|
|
11709
|
+
data: e.data ? {
|
|
11710
|
+
description: e.data.description,
|
|
11711
|
+
schemaTopKeys: ua(e.data.schema) ?? []
|
|
11712
|
+
} : void 0
|
|
11713
|
+
}, n = J.liveData(), r = null;
|
|
11714
|
+
if (n) {
|
|
11715
|
+
let e = -1, t = [];
|
|
11716
|
+
try {
|
|
11717
|
+
let r = JSON.stringify(n.bind);
|
|
11718
|
+
e = r ? r.length : 0, n.bind && typeof n.bind == "object" && !Array.isArray(n.bind) && (t = Object.keys(n.bind));
|
|
11719
|
+
} catch {
|
|
11720
|
+
e = -1;
|
|
11721
|
+
}
|
|
11722
|
+
r = {
|
|
11723
|
+
description: n.description,
|
|
11724
|
+
topKeys: t,
|
|
11725
|
+
approxBytes: e
|
|
11726
|
+
};
|
|
11727
|
+
}
|
|
11728
|
+
return gl(hl({
|
|
11729
|
+
debugLogs: J.agent?.debugLogs?.value ?? [],
|
|
11730
|
+
messages: J.messages,
|
|
11731
|
+
info: t,
|
|
11732
|
+
usage: { ...J.usage },
|
|
11733
|
+
pendingConflict: J.pendingConflict?.value ?? null,
|
|
11734
|
+
sessionId: J.sessionId,
|
|
11735
|
+
dataSummary: r
|
|
11736
|
+
}));
|
|
11737
|
+
},
|
|
11592
11738
|
getMission() {
|
|
11593
|
-
return
|
|
11739
|
+
return Ne ? T.getMission() : void 0;
|
|
11594
11740
|
},
|
|
11595
11741
|
setMission(t) {
|
|
11596
|
-
if (!
|
|
11742
|
+
if (!Ne) {
|
|
11597
11743
|
e.debug && console.warn("[page-agent-sdk][mission] capabilities.missionAnchor 关闭,setMission 忽略");
|
|
11598
11744
|
return;
|
|
11599
11745
|
}
|
|
11600
11746
|
T.setMission(t), J.infoTick.value++;
|
|
11601
11747
|
},
|
|
11602
11748
|
getPreferences() {
|
|
11603
|
-
return
|
|
11749
|
+
return vt ? vt.getPreferences() : [];
|
|
11604
11750
|
},
|
|
11605
11751
|
async removePreference(e) {
|
|
11606
|
-
if (!
|
|
11607
|
-
let t = await
|
|
11752
|
+
if (!vt) return !1;
|
|
11753
|
+
let t = await vt.removePreference(e);
|
|
11608
11754
|
return t && J.infoTick.value++, t;
|
|
11609
11755
|
},
|
|
11610
11756
|
async clearPreferences() {
|
|
11611
|
-
|
|
11757
|
+
vt && (await vt.clearPreferences(), J.infoTick.value++);
|
|
11612
11758
|
},
|
|
11613
11759
|
getFocus() {
|
|
11614
|
-
return
|
|
11760
|
+
return Ce ? E.getFocus() : void 0;
|
|
11615
11761
|
},
|
|
11616
11762
|
getFocuses() {
|
|
11617
|
-
return
|
|
11763
|
+
return Ce ? E.getFocuses() : [];
|
|
11618
11764
|
},
|
|
11619
11765
|
setFocus(t) {
|
|
11620
|
-
let n =
|
|
11766
|
+
let n = kf(t, "setFocus", Ce, () => z()?.schema, e.debug);
|
|
11621
11767
|
return n.ok ? (E.setFocus(t), J.infoTick.value++, { ok: !0 }) : n;
|
|
11622
11768
|
},
|
|
11623
11769
|
addFocus(t) {
|
|
11624
|
-
let n =
|
|
11770
|
+
let n = kf(t, "addFocus", Ce, () => z()?.schema, e.debug);
|
|
11625
11771
|
return n.ok ? E.getFocuses().length >= 8 ? (e.debug && console.warn("[page-agent-sdk][focus] addFocus 拒绝:焦点数已达上限 8(augmentPrompt 注入每焦点子树 schema,过多致 system prompt 超预算)"), {
|
|
11626
11772
|
ok: !1,
|
|
11627
11773
|
error: "焦点数上限 8(避免 system prompt 撑爆)"
|
|
11628
11774
|
}) : (E.addFocus(t), J.infoTick.value++, { ok: !0 }) : n;
|
|
11629
11775
|
},
|
|
11630
11776
|
removeFocus(e) {
|
|
11631
|
-
|
|
11777
|
+
Ce && (E.removeFocus(e), J.infoTick.value++);
|
|
11632
11778
|
},
|
|
11633
11779
|
clearFocus() {
|
|
11634
|
-
|
|
11780
|
+
Ce && (E.clearFocus(), J.infoTick.value++);
|
|
11635
11781
|
}
|
|
11636
11782
|
};
|
|
11637
|
-
async function
|
|
11783
|
+
async function Ft() {
|
|
11638
11784
|
if (!l) return;
|
|
11639
11785
|
await l.ready;
|
|
11640
11786
|
let t = e.session || {};
|
|
@@ -11658,25 +11804,25 @@ function Cf(e, n) {
|
|
|
11658
11804
|
}), e.debug && console.log("[page-agent-sdk][restore] 恢复会话", J.sessionId, `${t.messages?.length ?? 0} msgs`)) : e.debug && console.log("[page-agent-sdk][restore] 会话 meta 存在但快照为空", J.sessionId);
|
|
11659
11805
|
} else J.sessionId = await l.createSession(n, t.title), e.debug && console.log("[page-agent-sdk][restore] 新建会话(无历史)", J.sessionId);
|
|
11660
11806
|
} else J.sessionId = await l.createSession(n, t.title);
|
|
11661
|
-
e.memory &&
|
|
11807
|
+
e.memory && Ut({ memory: O.get() || (typeof e.memory == "string" ? e.memory : "") }), kt();
|
|
11662
11808
|
}
|
|
11663
|
-
async function
|
|
11664
|
-
await
|
|
11809
|
+
async function It() {
|
|
11810
|
+
await xt();
|
|
11665
11811
|
}
|
|
11666
|
-
function
|
|
11812
|
+
function Lt(e) {
|
|
11667
11813
|
let t = {};
|
|
11668
|
-
for (let n of
|
|
11814
|
+
for (let n of xf(e)) {
|
|
11669
11815
|
let e = C.files[n];
|
|
11670
11816
|
e && (t[n] = e.content);
|
|
11671
11817
|
}
|
|
11672
11818
|
return t;
|
|
11673
11819
|
}
|
|
11674
|
-
function
|
|
11675
|
-
let e =
|
|
11820
|
+
function Rt() {
|
|
11821
|
+
let e = Sf(C.files, xf(S));
|
|
11676
11822
|
for (let t of e) delete C.files[t];
|
|
11677
11823
|
}
|
|
11678
|
-
function
|
|
11679
|
-
let e = hs(S,
|
|
11824
|
+
function zt() {
|
|
11825
|
+
let e = hs(S, wt);
|
|
11680
11826
|
if (!e.trimmed) return;
|
|
11681
11827
|
let { older: t, summary: n } = e;
|
|
11682
11828
|
if (G({
|
|
@@ -11687,22 +11833,22 @@ function Cf(e, n) {
|
|
|
11687
11833
|
assistant: e.assistantMsgs.map((e) => e.content),
|
|
11688
11834
|
steps: e.assistantMsgs.flatMap((e) => e.steps ?? [])
|
|
11689
11835
|
})),
|
|
11690
|
-
vfsResults:
|
|
11836
|
+
vfsResults: Lt(t.flatMap((e) => [e.userMsg, ...e.assistantMsgs])),
|
|
11691
11837
|
summary: n.content,
|
|
11692
11838
|
reason: "max_memory_rounds"
|
|
11693
|
-
}), S.splice(e.deleteFrom, e.deleteCount, n),
|
|
11839
|
+
}), S.splice(e.deleteFrom, e.deleteCount, n), Rt(), v && d) {
|
|
11694
11840
|
let n = e.summary, { prevSeg: r } = e;
|
|
11695
11841
|
(async () => {
|
|
11696
11842
|
try {
|
|
11697
11843
|
let e = await d(bs(t, b)), i = S.indexOf(n);
|
|
11698
11844
|
if (i < 0) return;
|
|
11699
|
-
S[i].content = ms(t, r, e),
|
|
11845
|
+
S[i].content = ms(t, r, e), qt();
|
|
11700
11846
|
} catch {}
|
|
11701
11847
|
})();
|
|
11702
11848
|
}
|
|
11703
11849
|
}
|
|
11704
|
-
let
|
|
11705
|
-
function
|
|
11850
|
+
let Bt, Vt = !1;
|
|
11851
|
+
function Ht(t, n) {
|
|
11706
11852
|
e.debug && console.warn(`[page-agent-sdk][persist] ${t} 失败(已吞):`, n);
|
|
11707
11853
|
let r = J.agent?.debugLogs;
|
|
11708
11854
|
r && r.value.push({
|
|
@@ -11715,19 +11861,19 @@ function Cf(e, n) {
|
|
|
11715
11861
|
}
|
|
11716
11862
|
});
|
|
11717
11863
|
}
|
|
11718
|
-
function
|
|
11719
|
-
!J.sessionId || !l || l.save(n, J.sessionId, e).catch((e) =>
|
|
11864
|
+
function Ut(e) {
|
|
11865
|
+
!J.sessionId || !l || l.save(n, J.sessionId, e).catch((e) => Ht("save", e));
|
|
11720
11866
|
}
|
|
11721
|
-
function
|
|
11722
|
-
l && l.updateTitle(n, e, t).catch((e) =>
|
|
11867
|
+
function Wt(e, t) {
|
|
11868
|
+
l && l.updateTitle(n, e, t).catch((e) => Ht("updateTitle", e));
|
|
11723
11869
|
}
|
|
11724
|
-
async function
|
|
11870
|
+
async function Gt(t) {
|
|
11725
11871
|
let n = e.images?.upload;
|
|
11726
11872
|
for (let e of t) {
|
|
11727
11873
|
try {
|
|
11728
11874
|
e.dataUri && !e.thumb && (e.thumb = await hi(e.dataUri));
|
|
11729
11875
|
} catch (e) {
|
|
11730
|
-
|
|
11876
|
+
Ht("imageThumb", e);
|
|
11731
11877
|
}
|
|
11732
11878
|
if (n && e.dataUri && !e.url) try {
|
|
11733
11879
|
let t = await n(e.dataUri, e);
|
|
@@ -11741,7 +11887,7 @@ function Cf(e, n) {
|
|
|
11741
11887
|
});
|
|
11742
11888
|
}
|
|
11743
11889
|
}
|
|
11744
|
-
async function
|
|
11890
|
+
async function Kt(t, n) {
|
|
11745
11891
|
let r = e.images?.describe;
|
|
11746
11892
|
if (g.vision || !r) return;
|
|
11747
11893
|
let i = e.images?.describeTimeoutMs ?? 15e3;
|
|
@@ -11761,24 +11907,24 @@ function Cf(e, n) {
|
|
|
11761
11907
|
});
|
|
11762
11908
|
}
|
|
11763
11909
|
}
|
|
11764
|
-
function
|
|
11910
|
+
function qt() {
|
|
11765
11911
|
if (!J.sessionId || !l) return;
|
|
11766
|
-
if (
|
|
11912
|
+
if (Ut({ messages: li(JSON.parse(JSON.stringify(S))) }), Ut({ todos: J.agent?.getState?.()?.todos ?? [] }), Ne) {
|
|
11767
11913
|
let e = T.getMission();
|
|
11768
|
-
e &&
|
|
11914
|
+
e && Ut({ mission: e });
|
|
11769
11915
|
}
|
|
11770
|
-
if (
|
|
11916
|
+
if (Pe) {
|
|
11771
11917
|
let e = D.getWorkingMemory();
|
|
11772
|
-
e &&
|
|
11918
|
+
e && Ut({ workingMemory: e });
|
|
11773
11919
|
}
|
|
11774
|
-
if (
|
|
11920
|
+
if (Ce) {
|
|
11775
11921
|
let e = E.getFocuses();
|
|
11776
|
-
|
|
11922
|
+
Ut({ focus: e.length ? e : null });
|
|
11777
11923
|
}
|
|
11778
|
-
ue && F && (
|
|
11779
|
-
let t =
|
|
11780
|
-
if (t && t !==
|
|
11781
|
-
|
|
11924
|
+
ue && F && (Ut({ checkpoints: F.exportStack() }), Ut({ usage: o }));
|
|
11925
|
+
let t = Ol(S);
|
|
11926
|
+
if (t && t !== Bt && (Bt = t, Wt(J.sessionId, t)), e.autoTitle !== !1 && f && !Vt && S.some((e) => e.role === "user") && S.some((e) => e.role === "assistant")) {
|
|
11927
|
+
Vt = !0;
|
|
11782
11928
|
let e = J.sessionId;
|
|
11783
11929
|
(async () => {
|
|
11784
11930
|
try {
|
|
@@ -11787,9 +11933,9 @@ function Cf(e, n) {
|
|
|
11787
11933
|
try {
|
|
11788
11934
|
await l.updateTitle(n, e, t);
|
|
11789
11935
|
} catch (e) {
|
|
11790
|
-
|
|
11936
|
+
Ht("updateTitle", e);
|
|
11791
11937
|
}
|
|
11792
|
-
await
|
|
11938
|
+
await kt();
|
|
11793
11939
|
}
|
|
11794
11940
|
} catch {}
|
|
11795
11941
|
})();
|
|
@@ -11797,16 +11943,16 @@ function Cf(e, n) {
|
|
|
11797
11943
|
e.debug && console.log("[page-agent-sdk][persist] save", J.sessionId, `${S.length} msgs`);
|
|
11798
11944
|
}
|
|
11799
11945
|
return J.initDone = (async () => {
|
|
11800
|
-
await
|
|
11946
|
+
await Ft(), await It(), vt && await vt.preload(), e.mcp?.length && (async () => {
|
|
11801
11947
|
let t = await Promise.allSettled(e.mcp.map((e) => xc(e))), n = t.flatMap((e) => e.status === "fulfilled" ? [e.value.close] : []);
|
|
11802
|
-
if (
|
|
11948
|
+
if (ye) {
|
|
11803
11949
|
Promise.allSettled(n.map((e) => e()));
|
|
11804
11950
|
return;
|
|
11805
11951
|
}
|
|
11806
11952
|
J.mcpClosers = n, J.mcpServers = [];
|
|
11807
11953
|
let r = /* @__PURE__ */ new Set();
|
|
11808
11954
|
for (let e of U) {
|
|
11809
|
-
let t =
|
|
11955
|
+
let t = H.get(e.name);
|
|
11810
11956
|
t && !t.startsWith("mcp:") && r.add(e.name);
|
|
11811
11957
|
}
|
|
11812
11958
|
t.forEach((t, n) => {
|
|
@@ -11820,7 +11966,7 @@ function Cf(e, n) {
|
|
|
11820
11966
|
console.warn(`[page-agent-sdk][mcp] 工具 "${e.name}" 与内置工具重名,已拒绝注入(安全保留字保护)`);
|
|
11821
11967
|
return;
|
|
11822
11968
|
}
|
|
11823
|
-
|
|
11969
|
+
H.set(e.name, `mcp:${a}`), ve.push(e);
|
|
11824
11970
|
});
|
|
11825
11971
|
else {
|
|
11826
11972
|
console.warn(`[page-agent-sdk][mcp] server ${a} 连接失败:`, t.reason);
|
|
@@ -11840,14 +11986,14 @@ function Cf(e, n) {
|
|
|
11840
11986
|
}
|
|
11841
11987
|
});
|
|
11842
11988
|
}
|
|
11843
|
-
}),
|
|
11989
|
+
}), ve.length && (U = je(), J.agent && J.agent.setTools(U), J.infoTick.value++), e.debug && console.log(`[page-agent-sdk][mcp] 注入 ${ve.length} 个工具,${J.mcpServers.length} 个 server`);
|
|
11844
11990
|
})();
|
|
11845
|
-
let t =
|
|
11991
|
+
let t = kl(e.llm) ? e.llm : await m(e.llm);
|
|
11846
11992
|
J.agent = la({
|
|
11847
11993
|
llm: t,
|
|
11848
11994
|
systemPrompt: de,
|
|
11849
11995
|
tools: U,
|
|
11850
|
-
middleware:
|
|
11996
|
+
middleware: Ct,
|
|
11851
11997
|
maxToolRounds: e.maxToolRounds,
|
|
11852
11998
|
maxRetries: e.maxRetries,
|
|
11853
11999
|
stallMs: e.streamStallMs ?? 9e4,
|
|
@@ -11856,8 +12002,8 @@ function Cf(e, n) {
|
|
|
11856
12002
|
contextWindow: g.contextWindow,
|
|
11857
12003
|
maxOutputTokens: g.maxOutputTokens,
|
|
11858
12004
|
vision: g.vision,
|
|
11859
|
-
imageContentFormat: !
|
|
11860
|
-
maxVerifyAttempts:
|
|
12005
|
+
imageContentFormat: !kl(e.llm) && (e.llm.provider ?? "openai") === "anthropic" ? "anthropic" : "openai",
|
|
12006
|
+
maxVerifyAttempts: We ? Ve : 0,
|
|
11861
12007
|
roundTokenBudget: e.roundTokenBudget ?? 0,
|
|
11862
12008
|
onLlmChange: (e) => {
|
|
11863
12009
|
x = e;
|
|
@@ -11872,17 +12018,17 @@ function Cf(e, n) {
|
|
|
11872
12018
|
} catch {}
|
|
11873
12019
|
} : void 0,
|
|
11874
12020
|
debug: e.debug
|
|
11875
|
-
}), k.current = J.agent,
|
|
11876
|
-
J.agent && J.agent.setTools(
|
|
12021
|
+
}), k.current = J.agent, tt && tt.setReconfigureHook && tt.setReconfigureHook(() => {
|
|
12022
|
+
J.agent && J.agent.setTools(je());
|
|
11877
12023
|
});
|
|
11878
12024
|
})(), J;
|
|
11879
12025
|
}
|
|
11880
|
-
function
|
|
11881
|
-
let n = e.id ??
|
|
12026
|
+
function jf(e, t) {
|
|
12027
|
+
let n = e.id ?? Bl();
|
|
11882
12028
|
e.id || console.warn(`[page-agent-sdk] 未传 options.id,已生成随机 id "${n}"。刷新后持久化数据无法恢复,请传稳定 id。`);
|
|
11883
|
-
let r = e.streaming ?? !0, i = e.ui ?? "default", a, o = e.shareContext ?
|
|
11884
|
-
o ? a = o : (a =
|
|
11885
|
-
let s = null, c =
|
|
12029
|
+
let r = e.streaming ?? !0, i = e.ui ?? "default", a, o = e.shareContext ? Tf.get(n) : void 0;
|
|
12030
|
+
o ? a = o : (a = Af(e, n), e.shareContext && Tf.set(n, a)), a.refCount++;
|
|
12031
|
+
let s = null, c = fu(e), l = null, u = null;
|
|
11886
12032
|
async function d(n) {
|
|
11887
12033
|
if (await a.initDone, s) {
|
|
11888
12034
|
s.show();
|
|
@@ -11974,6 +12120,7 @@ function wf(e, t) {
|
|
|
11974
12120
|
},
|
|
11975
12121
|
infoTick: a.infoTick,
|
|
11976
12122
|
inspect: a.getInfo,
|
|
12123
|
+
exportDiagnostics: () => a.exportDiagnostics(),
|
|
11977
12124
|
inspectContext: () => a.getInfo().context,
|
|
11978
12125
|
getMission: a.getMission,
|
|
11979
12126
|
setMission: a.setMission,
|
|
@@ -12102,7 +12249,7 @@ function wf(e, t) {
|
|
|
12102
12249
|
}
|
|
12103
12250
|
//#endregion
|
|
12104
12251
|
//#region src/core/sdk/ragSubagent.ts
|
|
12105
|
-
function
|
|
12252
|
+
function Mf(e, t, n, r, i) {
|
|
12106
12253
|
let a = [];
|
|
12107
12254
|
e && a.push("vfs_grep + vfs_read(搜预注入文档)"), t && a.push(`${r}(语义检索)`), n && a.push(`${i}(按 source 加载)`), a.push("fetch_document(公网 URL)");
|
|
12108
12255
|
let o = [];
|
|
@@ -12117,7 +12264,7 @@ function Tf(e, t, n, r, i) {
|
|
|
12117
12264
|
|
|
12118
12265
|
你是只读检索角色,不要尝试修改任何数据。不要尝试上面未列出的工具。`;
|
|
12119
12266
|
}
|
|
12120
|
-
function
|
|
12267
|
+
function Nf(e, t, n, r, i) {
|
|
12121
12268
|
let a = [], o = [];
|
|
12122
12269
|
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)
|
|
12123
12270
|
|
|
@@ -12134,12 +12281,12 @@ ${a.join("\n")}
|
|
|
12134
12281
|
## 何时用何源
|
|
12135
12282
|
${o.join("\n")}`;
|
|
12136
12283
|
}
|
|
12137
|
-
var
|
|
12284
|
+
var Pf = {
|
|
12138
12285
|
name: "rag-search",
|
|
12139
12286
|
description: "多源知识检索策略:vfs 预注入文档 → 语义检索 → 指定文档加载 → 公网;综合结构化结论 + 溯源",
|
|
12140
|
-
getContent: () =>
|
|
12287
|
+
getContent: () => Nf(!0, !0, !0, "search_docs", "load_doc")
|
|
12141
12288
|
};
|
|
12142
|
-
function
|
|
12289
|
+
function Ff(e, n, i) {
|
|
12143
12290
|
return r(async ({ query: e, topK: t }) => {
|
|
12144
12291
|
try {
|
|
12145
12292
|
let r = await n(e, { topK: t ?? i });
|
|
@@ -12156,7 +12303,7 @@ function Of(e, n, i) {
|
|
|
12156
12303
|
})
|
|
12157
12304
|
});
|
|
12158
12305
|
}
|
|
12159
|
-
function
|
|
12306
|
+
function If(e, n) {
|
|
12160
12307
|
return r(async ({ source: e }) => {
|
|
12161
12308
|
try {
|
|
12162
12309
|
let t = await n(e), r = Array.isArray(t) ? t : [t];
|
|
@@ -12170,19 +12317,19 @@ function kf(e, n) {
|
|
|
12170
12317
|
schema: t.object({ source: t.string().describe("文档标识(id/URL/key)") })
|
|
12171
12318
|
});
|
|
12172
12319
|
}
|
|
12173
|
-
function
|
|
12320
|
+
function Lf(e) {
|
|
12174
12321
|
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;
|
|
12175
12322
|
if (!t && !n && r === !1) throw Error("[page-agent-sdk][createRagSubagent] 至少配一种知识源:retriever / loader / useVfs(true)");
|
|
12176
12323
|
let p = [];
|
|
12177
|
-
t && p.push(
|
|
12324
|
+
t && p.push(Ff(s, t, o)), n && p.push(If(c, n)), f && p.push(...f);
|
|
12178
12325
|
let m = r ? [
|
|
12179
12326
|
"vfs_grep",
|
|
12180
12327
|
"vfs_read",
|
|
12181
12328
|
"vfs_json_read"
|
|
12182
|
-
] : void 0, h =
|
|
12329
|
+
] : void 0, h = Mf(r, !!t, !!n, s, c), g = {
|
|
12183
12330
|
name: "rag-search",
|
|
12184
|
-
description:
|
|
12185
|
-
getContent: () =>
|
|
12331
|
+
description: Pf.description,
|
|
12332
|
+
getContent: () => Nf(r, !!t, !!n, s, c)
|
|
12186
12333
|
};
|
|
12187
12334
|
return {
|
|
12188
12335
|
id: i,
|
|
@@ -12197,7 +12344,7 @@ function Af(e) {
|
|
|
12197
12344
|
}
|
|
12198
12345
|
//#endregion
|
|
12199
12346
|
//#region src/core/utils/clipboard.ts
|
|
12200
|
-
async function
|
|
12347
|
+
async function Rf(e) {
|
|
12201
12348
|
try {
|
|
12202
12349
|
let t = globalThis.navigator?.clipboard;
|
|
12203
12350
|
if (t && typeof t.writeText == "function") return await t.writeText(e), !0;
|
|
@@ -12215,8 +12362,8 @@ async function jf(e) {
|
|
|
12215
12362
|
}
|
|
12216
12363
|
//#endregion
|
|
12217
12364
|
//#region src/core/composables/useChat.ts
|
|
12218
|
-
var
|
|
12219
|
-
function
|
|
12365
|
+
var zf = 4e3;
|
|
12366
|
+
function Bf(e = {}) {
|
|
12220
12367
|
let { fetchResponse: t, fetchStream: n, onPersist: r, onClear: i, onQueuedCleared: a } = e, o = /* @__PURE__ */ bt({
|
|
12221
12368
|
messages: e.messages ?? [],
|
|
12222
12369
|
loading: !1,
|
|
@@ -12295,7 +12442,7 @@ function Nf(e = {}) {
|
|
|
12295
12442
|
let t = e.delta || "";
|
|
12296
12443
|
n.subReasonFull = (n.subReasonFull || "") + t;
|
|
12297
12444
|
let r = (n.subReason || "") + t;
|
|
12298
|
-
n.subReason = r.length >
|
|
12445
|
+
n.subReason = r.length > zf ? r.slice(-4e3) : r;
|
|
12299
12446
|
break;
|
|
12300
12447
|
}
|
|
12301
12448
|
n.children ||= [];
|
|
@@ -12424,7 +12571,7 @@ function Nf(e = {}) {
|
|
|
12424
12571
|
}
|
|
12425
12572
|
//#endregion
|
|
12426
12573
|
//#region src/core/components/icons.ts
|
|
12427
|
-
var
|
|
12574
|
+
var Vf = {
|
|
12428
12575
|
header: "🤖",
|
|
12429
12576
|
subagent: "🤖",
|
|
12430
12577
|
subagentProgress: "🧬",
|
|
@@ -12435,10 +12582,10 @@ var Pf = {
|
|
|
12435
12582
|
recommend: "💡",
|
|
12436
12583
|
conflict: "⚠️"
|
|
12437
12584
|
};
|
|
12438
|
-
function
|
|
12439
|
-
let t = { ...
|
|
12585
|
+
function Hf(e) {
|
|
12586
|
+
let t = { ...Vf };
|
|
12440
12587
|
if (!e) return t;
|
|
12441
|
-
let n = Object.keys(
|
|
12588
|
+
let n = Object.keys(Vf);
|
|
12442
12589
|
for (let r of n) {
|
|
12443
12590
|
let n = e[r];
|
|
12444
12591
|
typeof n == "string" && (t[r] = n);
|
|
@@ -12447,7 +12594,7 @@ function Ff(e) {
|
|
|
12447
12594
|
}
|
|
12448
12595
|
//#endregion
|
|
12449
12596
|
//#region src/core/components/messages.ts
|
|
12450
|
-
var
|
|
12597
|
+
var Uf = {
|
|
12451
12598
|
defaultTitle: "AI 助手",
|
|
12452
12599
|
inputPlaceholder: "输入消息,Enter 发送...",
|
|
12453
12600
|
newSession: "新建会话",
|
|
@@ -12542,6 +12689,7 @@ var If = {
|
|
|
12542
12689
|
debugTabSubagent: "子 agent",
|
|
12543
12690
|
debugTabInfo: "Agent 信息",
|
|
12544
12691
|
debugClearLogs: "清空日志",
|
|
12692
|
+
debugCopyReport: "复制诊断报告(完整日志,交维护者排查)",
|
|
12545
12693
|
debugTypeContext: "上下文",
|
|
12546
12694
|
debugTypeLlmRequest: "LLM请求",
|
|
12547
12695
|
debugTypeLlmResponse: "LLM响应",
|
|
@@ -12682,8 +12830,8 @@ var If = {
|
|
|
12682
12830
|
codeDemoText: "这是一段示例文字,用于展示 CSS 效果。",
|
|
12683
12831
|
codeDemoButton: "按钮",
|
|
12684
12832
|
codeDemoInput: "输入框"
|
|
12685
|
-
},
|
|
12686
|
-
"zh-CN":
|
|
12833
|
+
}, Wf = {
|
|
12834
|
+
"zh-CN": Uf,
|
|
12687
12835
|
"en-US": {
|
|
12688
12836
|
defaultTitle: "AI Assistant",
|
|
12689
12837
|
inputPlaceholder: "Type a message, Enter to send...",
|
|
@@ -12779,6 +12927,7 @@ var If = {
|
|
|
12779
12927
|
debugTabSubagent: "Sub-agents",
|
|
12780
12928
|
debugTabInfo: "Agent info",
|
|
12781
12929
|
debugClearLogs: "Clear logs",
|
|
12930
|
+
debugCopyReport: "Copy diagnostics report (full logs for troubleshooting)",
|
|
12782
12931
|
debugTypeContext: "Context",
|
|
12783
12932
|
debugTypeLlmRequest: "LLM request",
|
|
12784
12933
|
debugTypeLlmResponse: "LLM response",
|
|
@@ -12921,10 +13070,10 @@ var If = {
|
|
|
12921
13070
|
codeDemoInput: "Input"
|
|
12922
13071
|
}
|
|
12923
13072
|
};
|
|
12924
|
-
function
|
|
13073
|
+
function Gf(e = "zh-CN", t) {
|
|
12925
13074
|
let n = {
|
|
12926
|
-
...
|
|
12927
|
-
...
|
|
13075
|
+
...Uf,
|
|
13076
|
+
...Wf[e]
|
|
12928
13077
|
};
|
|
12929
13078
|
if (!t) return n;
|
|
12930
13079
|
let r = { ...n };
|
|
@@ -12936,9 +13085,9 @@ function Rf(e = "zh-CN", t) {
|
|
|
12936
13085
|
}
|
|
12937
13086
|
//#endregion
|
|
12938
13087
|
//#region src/core/composables/chatContext.ts
|
|
12939
|
-
var
|
|
12940
|
-
function
|
|
12941
|
-
let t =
|
|
13088
|
+
var Kf = Symbol("chatContext");
|
|
13089
|
+
function qf(e = {}) {
|
|
13090
|
+
let t = Bf({
|
|
12942
13091
|
fetchResponse: e.fetchResponse,
|
|
12943
13092
|
fetchStream: e.fetchStream,
|
|
12944
13093
|
messages: e.messages,
|
|
@@ -12958,7 +13107,7 @@ function Bf(e = {}) {
|
|
|
12958
13107
|
}, h = /* @__PURE__ */ jt({}), g = (e) => h.value[e] === !0, _ = (e) => {
|
|
12959
13108
|
h.value[e] = !g(e);
|
|
12960
13109
|
}, v = /* @__PURE__ */ jt(!1), y = (e) => {
|
|
12961
|
-
|
|
13110
|
+
Rf(e).then((e) => {
|
|
12962
13111
|
e && (v.value = !0, setTimeout(() => {
|
|
12963
13112
|
v.value = !1;
|
|
12964
13113
|
}, 1500));
|
|
@@ -13020,7 +13169,7 @@ function Bf(e = {}) {
|
|
|
13020
13169
|
e.onClearFocus?.();
|
|
13021
13170
|
}, ie = (t) => {
|
|
13022
13171
|
e.onFocusChipClick?.(t);
|
|
13023
|
-
}, ae =
|
|
13172
|
+
}, ae = Hf(e.icons), oe = e.locale ?? "zh-CN", F = Gf(oe, e.dialogMessages);
|
|
13024
13173
|
return {
|
|
13025
13174
|
chat: t,
|
|
13026
13175
|
inputText: o,
|
|
@@ -13060,15 +13209,15 @@ function Bf(e = {}) {
|
|
|
13060
13209
|
messages: F
|
|
13061
13210
|
};
|
|
13062
13211
|
}
|
|
13063
|
-
function
|
|
13064
|
-
let e = Rn(
|
|
13212
|
+
function Jf() {
|
|
13213
|
+
let e = Rn(Kf);
|
|
13065
13214
|
if (!e) throw Error("useChatContext 必须在 provide(chatContextKey) 的组件子树内调用");
|
|
13066
13215
|
return e;
|
|
13067
13216
|
}
|
|
13068
13217
|
//#endregion
|
|
13069
13218
|
//#region src/core/index.headless.ts
|
|
13070
|
-
function
|
|
13071
|
-
return
|
|
13219
|
+
function Yf(e) {
|
|
13220
|
+
return jf(e);
|
|
13072
13221
|
}
|
|
13073
13222
|
//#endregion
|
|
13074
|
-
export {
|
|
13223
|
+
export { pu as CAPABILITIES, gu as CONTEXT_PRESETS, Dl as CompressDecisionSchema, yd as DEFAULT_COMPUTED_STYLES, Cs as DEFAULT_PROMPT_SOFT_CAP, Sc as DEFAULT_SYSTEM_PROMPT, zc as HTML_VOID_TAGS, Yo as HUMAN_CONFIRM_TOOL_NAME, ni as ImageInputError, Si as MIN_CONTEXT_WINDOW, Ss as SOFT_CAP_MIN_WINDOW, gs as STOP_WORDS, Ya as UNSAFE_KEYS, Vd as actionsToInspectInfo, Bd as actionsToTools, Qr as agentError, hc as analyzeContext, ao as applyPatchToClone, co as applyPatchToLive, Zr as asAgentError, wd as buildCssPath, wc as buildDataPrompt, hl as buildDiagnosticsReport, Tc as buildSystemPrompt, Kf as chatContextKey, nd as commitSetToBind, pi as compressImage, xc as connectMcp, m as constructLlmFromConfig, p as constructOpenLlmSync, Rf as copyText, la as createAgent, Jo as createApprovalMiddleware, qf as createChatContext, Yf as createChatSdk, as as createCheckpointManager, os as createCheckpointMiddleware, zl as createConflictManager, gc as createContextInspectorMiddleware, ud as createDataOps, bl as createHtmlFormatCheck, Cl as createHtmlSubagent, Qo as createHumanConfirmMiddleware, Zo as createHumanConfirmTool, ou as createMemoryBackend, Vo as createMemoryMiddleware, u as createProxyLlm, Lf as createRagSubagent, To as createSandboxRunner, hu as createSdkEvents, Cf as createSerialRunner, uu as createSessionStore, ef as createSkillStore, Ks as createSubagentMiddleware, ks as createSubagentTracker, Ys as createSubagentsMiddleware, Jd as createUsageHintsMiddleware, Xs as createVerifyMiddleware, kc as createVfs, cu as createWebStorageBackend, nc as createWriteBackCheck, eo as deepClone, Wd as defineDataToolset, Do as defineSkill, wl as defineTool, $a as deleteByPath, Ol as deriveTitle, Ea as describeSchemaNode, qi as detectGarbledToolCall, po as diffObjects, kd as domInfoTool, Ad as domInspectSkill, Od as domSearchTool, gd as domToStructure, vd as domTools, Ud as domToolsStatic, Sd as ensureDomListenerRecorder, vs as estimateMessageTokens, ys as estimateRoundTokens, X as estimateTokens, g as extractReasoningDelta, za as extractSchemaHint, _c as extractText, h as extractTextDelta, _ as extractUsage, fd as fetchDocTools, Hd as fetchTools, td as filterByToolMode, fo as findStrippedKeys, Da as formatConstraints, qr as formatZodIssues, Z as getByPath, _d as getDomTool, Dd as getElementInfo, Nd as getEnvSummary, Cd as getRecordedListeners, pa as getSchemaAtPath, ua as getSchemaTopKeys, Ei as getTraceMetrics, $ as hashValue, Pa as htmlOrchestratorPrompt, bs as indexSummarize, Id as inspectEnvTool, Ld as inspectTools, kl as isChatModel, Ri as isContextLengthError, da as isPathAllowed, Ql as isQuotaError, Xa as isUnsafePath, Au as jpEval, Yr as jsonParseError, ro as limitDepth, pl as maskUrlCredentials, to as maybeParseValue, y as normalizeUsage, Ti as offloadPassThroughChars, wi as offloadThresholdChars, Na as presets, ba as projectBySchema, ya as projectBySchemaDeep, no as projectFields, xs as recallRounds, Oa as renderSchemaHint, ka as renderSchemaOverview, Ma as renderSchemaShallow, mu as resolveCapabilities, vu as resolveContextOptions, fu as resolveDialogConfig, Rl as resolveLlm, Ci as resolveModelCaps, ws as resolvePromptSoftCap, du as resolveStorage, uo as restoreInPlace, lo as restoreLive, Xr as routeError, Eo as runHostScript, Pu as runSandboxedScript, Za as safeMerge, Md as safeSerialize, Q as safeStringify, Td as searchDom, Mu as searchJson, Gd as selectBuiltinTools, Qa as setByPath, Ts as shouldTriggerCompression, gl as stringifyDiagnosticsReport, Fa as systemPromptHelpers, _s as tokenize, Y as toolError, fa as unwrapSchema, Bf as useChat, Jf as useChatContext, Vc as validateHtmlFormat, e as z, Jr as zodError };
|