page-agent-sdk 2.38.1 → 2.38.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/README.zh-CN.md +3 -3
- package/dist/page-agent-sdk.headless.js +791 -744
- package/dist/page-agent-sdk.iife.js +118 -118
- package/dist/page-agent-sdk.js +1961 -1914
- package/dist/page-agent-sdk.umd.cjs +66 -66
- package/package.json +1 -1
|
@@ -357,7 +357,7 @@ function V(e, t, n) {
|
|
|
357
357
|
});
|
|
358
358
|
}
|
|
359
359
|
}
|
|
360
|
-
function
|
|
360
|
+
function H(e, t, n, r, i, a) {
|
|
361
361
|
let o = Fe.get(e);
|
|
362
362
|
if (!o) {
|
|
363
363
|
je++;
|
|
@@ -395,68 +395,68 @@ function ze(e, t, n, r, i, a) {
|
|
|
395
395
|
}
|
|
396
396
|
B();
|
|
397
397
|
}
|
|
398
|
-
function
|
|
398
|
+
function ze(e) {
|
|
399
399
|
let t = /* @__PURE__ */ G(e);
|
|
400
400
|
return t === e ? t : (V(t, "iterate", Re), /* @__PURE__ */ Ct(e) ? t : t.map(Et));
|
|
401
401
|
}
|
|
402
|
-
function
|
|
402
|
+
function Be(e) {
|
|
403
403
|
return V(e = /* @__PURE__ */ G(e), "iterate", Re), e;
|
|
404
404
|
}
|
|
405
|
-
function
|
|
405
|
+
function Ve(e, t) {
|
|
406
406
|
return /* @__PURE__ */ St(e) ? Dt(/* @__PURE__ */ xt(e) ? Et(t) : t) : Et(t);
|
|
407
407
|
}
|
|
408
|
-
var
|
|
408
|
+
var He = {
|
|
409
409
|
__proto__: null,
|
|
410
410
|
[Symbol.iterator]() {
|
|
411
|
-
return
|
|
411
|
+
return Ue(this, Symbol.iterator, (e) => Ve(this, e));
|
|
412
412
|
},
|
|
413
413
|
concat(...e) {
|
|
414
|
-
return
|
|
414
|
+
return ze(this).concat(...e.map((e) => T(e) ? ze(e) : e));
|
|
415
415
|
},
|
|
416
416
|
entries() {
|
|
417
|
-
return
|
|
417
|
+
return Ue(this, "entries", (e) => (e[1] = Ve(this, e[1]), e));
|
|
418
418
|
},
|
|
419
419
|
every(e, t) {
|
|
420
|
-
return
|
|
420
|
+
return Ge(this, "every", e, t, void 0, arguments);
|
|
421
421
|
},
|
|
422
422
|
filter(e, t) {
|
|
423
|
-
return
|
|
423
|
+
return Ge(this, "filter", e, t, (e) => e.map((e) => Ve(this, e)), arguments);
|
|
424
424
|
},
|
|
425
425
|
find(e, t) {
|
|
426
|
-
return
|
|
426
|
+
return Ge(this, "find", e, t, (e) => Ve(this, e), arguments);
|
|
427
427
|
},
|
|
428
428
|
findIndex(e, t) {
|
|
429
|
-
return
|
|
429
|
+
return Ge(this, "findIndex", e, t, void 0, arguments);
|
|
430
430
|
},
|
|
431
431
|
findLast(e, t) {
|
|
432
|
-
return
|
|
432
|
+
return Ge(this, "findLast", e, t, (e) => Ve(this, e), arguments);
|
|
433
433
|
},
|
|
434
434
|
findLastIndex(e, t) {
|
|
435
|
-
return
|
|
435
|
+
return Ge(this, "findLastIndex", e, t, void 0, arguments);
|
|
436
436
|
},
|
|
437
437
|
forEach(e, t) {
|
|
438
|
-
return
|
|
438
|
+
return Ge(this, "forEach", e, t, void 0, arguments);
|
|
439
439
|
},
|
|
440
440
|
includes(...e) {
|
|
441
|
-
return
|
|
441
|
+
return qe(this, "includes", e);
|
|
442
442
|
},
|
|
443
443
|
indexOf(...e) {
|
|
444
|
-
return
|
|
444
|
+
return qe(this, "indexOf", e);
|
|
445
445
|
},
|
|
446
446
|
join(e) {
|
|
447
|
-
return
|
|
447
|
+
return ze(this).join(e);
|
|
448
448
|
},
|
|
449
449
|
lastIndexOf(...e) {
|
|
450
|
-
return
|
|
450
|
+
return qe(this, "lastIndexOf", e);
|
|
451
451
|
},
|
|
452
452
|
map(e, t) {
|
|
453
|
-
return
|
|
453
|
+
return Ge(this, "map", e, t, void 0, arguments);
|
|
454
454
|
},
|
|
455
455
|
pop() {
|
|
456
|
-
return
|
|
456
|
+
return U(this, "pop");
|
|
457
457
|
},
|
|
458
458
|
push(...e) {
|
|
459
|
-
return
|
|
459
|
+
return U(this, "push", e);
|
|
460
460
|
},
|
|
461
461
|
reduce(e, ...t) {
|
|
462
462
|
return Ke(this, "reduce", e, t);
|
|
@@ -465,47 +465,47 @@ var Ue = {
|
|
|
465
465
|
return Ke(this, "reduceRight", e, t);
|
|
466
466
|
},
|
|
467
467
|
shift() {
|
|
468
|
-
return
|
|
468
|
+
return U(this, "shift");
|
|
469
469
|
},
|
|
470
470
|
some(e, t) {
|
|
471
|
-
return
|
|
471
|
+
return Ge(this, "some", e, t, void 0, arguments);
|
|
472
472
|
},
|
|
473
473
|
splice(...e) {
|
|
474
|
-
return
|
|
474
|
+
return U(this, "splice", e);
|
|
475
475
|
},
|
|
476
476
|
toReversed() {
|
|
477
|
-
return
|
|
477
|
+
return ze(this).toReversed();
|
|
478
478
|
},
|
|
479
479
|
toSorted(e) {
|
|
480
|
-
return
|
|
480
|
+
return ze(this).toSorted(e);
|
|
481
481
|
},
|
|
482
482
|
toSpliced(...e) {
|
|
483
|
-
return
|
|
483
|
+
return ze(this).toSpliced(...e);
|
|
484
484
|
},
|
|
485
485
|
unshift(...e) {
|
|
486
|
-
return
|
|
486
|
+
return U(this, "unshift", e);
|
|
487
487
|
},
|
|
488
488
|
values() {
|
|
489
|
-
return
|
|
489
|
+
return Ue(this, "values", (e) => Ve(this, e));
|
|
490
490
|
}
|
|
491
491
|
};
|
|
492
|
-
function
|
|
493
|
-
let r =
|
|
492
|
+
function Ue(e, t, n) {
|
|
493
|
+
let r = Be(e), i = r[t]();
|
|
494
494
|
return r !== e && !/* @__PURE__ */ Ct(e) && (i._next = i.next, i.next = () => {
|
|
495
495
|
let e = i._next();
|
|
496
496
|
return e.done || (e.value = n(e.value)), e;
|
|
497
497
|
}), i;
|
|
498
498
|
}
|
|
499
|
-
var
|
|
500
|
-
function
|
|
501
|
-
let o =
|
|
502
|
-
if (c !==
|
|
499
|
+
var We = Array.prototype;
|
|
500
|
+
function Ge(e, t, n, r, i, a) {
|
|
501
|
+
let o = Be(e), s = o !== e && !/* @__PURE__ */ Ct(e), c = o[t];
|
|
502
|
+
if (c !== We[t]) {
|
|
503
503
|
let t = c.apply(e, a);
|
|
504
504
|
return s ? Et(t) : t;
|
|
505
505
|
}
|
|
506
506
|
let l = n;
|
|
507
507
|
o !== e && (s ? l = function(t, r) {
|
|
508
|
-
return n.call(this,
|
|
508
|
+
return n.call(this, Ve(e, t), r, e);
|
|
509
509
|
} : n.length > 2 && (l = function(t, r) {
|
|
510
510
|
return n.call(this, t, r, e);
|
|
511
511
|
}));
|
|
@@ -513,22 +513,22 @@ function H(e, t, n, r, i, a) {
|
|
|
513
513
|
return s && i ? i(u) : u;
|
|
514
514
|
}
|
|
515
515
|
function Ke(e, t, n, r) {
|
|
516
|
-
let i =
|
|
516
|
+
let i = Be(e), a = i !== e && !/* @__PURE__ */ Ct(e), o = n, s = !1;
|
|
517
517
|
i !== e && (a ? (s = r.length === 0, o = function(t, r, i) {
|
|
518
|
-
return s && (s = !1, t =
|
|
518
|
+
return s && (s = !1, t = Ve(e, t)), n.call(this, t, Ve(e, r), i, e);
|
|
519
519
|
}) : n.length > 3 && (o = function(t, r, i) {
|
|
520
520
|
return n.call(this, t, r, i, e);
|
|
521
521
|
}));
|
|
522
522
|
let c = i[t](o, ...r);
|
|
523
|
-
return s ?
|
|
523
|
+
return s ? Ve(e, c) : c;
|
|
524
524
|
}
|
|
525
|
-
function
|
|
525
|
+
function qe(e, t, n) {
|
|
526
526
|
let r = /* @__PURE__ */ G(e);
|
|
527
527
|
V(r, "iterate", Re);
|
|
528
528
|
let i = r[t](...n);
|
|
529
529
|
return (i === -1 || i === !1) && /* @__PURE__ */ wt(n[0]) ? (n[0] = /* @__PURE__ */ G(n[0]), r[t](...n)) : i;
|
|
530
530
|
}
|
|
531
|
-
function
|
|
531
|
+
function U(e, t, n = []) {
|
|
532
532
|
Oe(), ye();
|
|
533
533
|
let r = (/* @__PURE__ */ G(e))[t].apply(e, n);
|
|
534
534
|
return B(), ke(), r;
|
|
@@ -553,7 +553,7 @@ var Ze = class {
|
|
|
553
553
|
let a = T(e);
|
|
554
554
|
if (!r) {
|
|
555
555
|
let e;
|
|
556
|
-
if (a && (e =
|
|
556
|
+
if (a && (e = He[t])) return e;
|
|
557
557
|
if (t === "hasOwnProperty") return Xe;
|
|
558
558
|
}
|
|
559
559
|
let o = Reflect.get(e, t, /* @__PURE__ */ K(e) ? e : n);
|
|
@@ -575,11 +575,11 @@ var Ze = class {
|
|
|
575
575
|
if (!/* @__PURE__ */ Ct(n) && !/* @__PURE__ */ St(n) && (i = /* @__PURE__ */ G(i), n = /* @__PURE__ */ G(n)), !a && /* @__PURE__ */ K(i) && !/* @__PURE__ */ K(n)) return r ? (process.env.NODE_ENV !== "production" && de(`Set operation on key "${String(t)}" failed: target is readonly.`, e[t]), !0) : (i.value = n, !0);
|
|
576
576
|
}
|
|
577
577
|
let o = a ? Number(t) < e.length : w(e, t), s = Reflect.set(e, t, n, /* @__PURE__ */ K(e) ? e : r);
|
|
578
|
-
return e === /* @__PURE__ */ G(r) && s && (o ? ie(n, i) &&
|
|
578
|
+
return e === /* @__PURE__ */ G(r) && s && (o ? ie(n, i) && H(e, "set", t, n, i) : H(e, "add", t, n)), s;
|
|
579
579
|
}
|
|
580
580
|
deleteProperty(e, t) {
|
|
581
581
|
let n = w(e, t), r = e[t], i = Reflect.deleteProperty(e, t);
|
|
582
|
-
return i && n &&
|
|
582
|
+
return i && n && H(e, "delete", t, void 0, r), i;
|
|
583
583
|
}
|
|
584
584
|
has(e, t) {
|
|
585
585
|
let n = Reflect.has(e, t);
|
|
@@ -598,10 +598,10 @@ var Ze = class {
|
|
|
598
598
|
deleteProperty(e, t) {
|
|
599
599
|
return process.env.NODE_ENV !== "production" && de(`Delete operation on key "${String(t)}" failed: target is readonly.`, e), !0;
|
|
600
600
|
}
|
|
601
|
-
}, et = /* @__PURE__ */ new Qe(), tt = /* @__PURE__ */ new $e(), nt = /* @__PURE__ */ new $e(!0),
|
|
602
|
-
function
|
|
601
|
+
}, et = /* @__PURE__ */ new Qe(), tt = /* @__PURE__ */ new $e(), nt = /* @__PURE__ */ new $e(!0), rt = (e) => e, it = (e) => Reflect.getPrototypeOf(e);
|
|
602
|
+
function at(e, t, n) {
|
|
603
603
|
return function(...r) {
|
|
604
|
-
let i = this.__v_raw, a = /* @__PURE__ */ G(i), o = E(a), s = e === "entries" || e === Symbol.iterator && o, c = e === "keys" && o, l = i[e](...r), u = n ?
|
|
604
|
+
let i = this.__v_raw, a = /* @__PURE__ */ G(i), o = E(a), s = e === "entries" || e === Symbol.iterator && o, c = e === "keys" && o, l = i[e](...r), u = n ? rt : t ? Dt : Et;
|
|
605
605
|
return !t && V(a, "iterate", c ? Le : Ie), x(Object.create(l), { next() {
|
|
606
606
|
let { value: e, done: t } = l.next();
|
|
607
607
|
return t ? {
|
|
@@ -614,7 +614,7 @@ function it(e, t, n) {
|
|
|
614
614
|
} });
|
|
615
615
|
};
|
|
616
616
|
}
|
|
617
|
-
function
|
|
617
|
+
function W(e) {
|
|
618
618
|
return function(...t) {
|
|
619
619
|
if (process.env.NODE_ENV !== "production") {
|
|
620
620
|
let n = t[0] ? `on key "${t[0]}" ` : "";
|
|
@@ -628,7 +628,7 @@ function ot(e, t) {
|
|
|
628
628
|
get(n) {
|
|
629
629
|
let r = this.__v_raw, i = /* @__PURE__ */ G(r), a = /* @__PURE__ */ G(n);
|
|
630
630
|
e || (ie(n, a) && V(i, "get", n), V(i, "get", a));
|
|
631
|
-
let { has: o } =
|
|
631
|
+
let { has: o } = it(i), s = t ? rt : e ? Dt : Et;
|
|
632
632
|
if (o.call(i, n)) return s(r.get(n));
|
|
633
633
|
if (o.call(i, a)) return s(r.get(a));
|
|
634
634
|
r !== i && r.get(n);
|
|
@@ -642,36 +642,36 @@ function ot(e, t) {
|
|
|
642
642
|
return e || (ie(t, i) && V(r, "has", t), V(r, "has", i)), t === i ? n.has(t) : n.has(t) || n.has(i);
|
|
643
643
|
},
|
|
644
644
|
forEach(n, r) {
|
|
645
|
-
let i = this, a = i.__v_raw, o = /* @__PURE__ */ G(a), s = t ?
|
|
645
|
+
let i = this, a = i.__v_raw, o = /* @__PURE__ */ G(a), s = t ? rt : e ? Dt : Et;
|
|
646
646
|
return !e && V(o, "iterate", Ie), a.forEach((e, t) => n.call(r, s(e), s(t), i));
|
|
647
647
|
}
|
|
648
648
|
};
|
|
649
649
|
return x(n, e ? {
|
|
650
|
-
add:
|
|
651
|
-
set:
|
|
652
|
-
delete:
|
|
653
|
-
clear:
|
|
650
|
+
add: W("add"),
|
|
651
|
+
set: W("set"),
|
|
652
|
+
delete: W("delete"),
|
|
653
|
+
clear: W("clear")
|
|
654
654
|
} : {
|
|
655
655
|
add(e) {
|
|
656
|
-
let n = /* @__PURE__ */ G(this), r =
|
|
657
|
-
return r.has.call(n, a) || ie(e, a) && r.has.call(n, e) || ie(i, a) && r.has.call(n, i) || (n.add(a),
|
|
656
|
+
let n = /* @__PURE__ */ G(this), r = it(n), i = /* @__PURE__ */ G(e), a = !t && !/* @__PURE__ */ Ct(e) && !/* @__PURE__ */ St(e) ? i : e;
|
|
657
|
+
return r.has.call(n, a) || ie(e, a) && r.has.call(n, e) || ie(i, a) && r.has.call(n, i) || (n.add(a), H(n, "add", a, a)), this;
|
|
658
658
|
},
|
|
659
659
|
set(e, n) {
|
|
660
660
|
!t && !/* @__PURE__ */ Ct(n) && !/* @__PURE__ */ St(n) && (n = /* @__PURE__ */ G(n));
|
|
661
|
-
let r = /* @__PURE__ */ G(this), { has: i, get: a } =
|
|
661
|
+
let r = /* @__PURE__ */ G(this), { has: i, get: a } = it(r), o = i.call(r, e);
|
|
662
662
|
o ? process.env.NODE_ENV !== "production" && dt(r, i, e) : (e = /* @__PURE__ */ G(e), o = i.call(r, e));
|
|
663
663
|
let s = a.call(r, e);
|
|
664
|
-
return r.set(e, n), o ? ie(n, s) &&
|
|
664
|
+
return r.set(e, n), o ? ie(n, s) && H(r, "set", e, n, s) : H(r, "add", e, n), this;
|
|
665
665
|
},
|
|
666
666
|
delete(e) {
|
|
667
|
-
let t = /* @__PURE__ */ G(this), { has: n, get: r } =
|
|
667
|
+
let t = /* @__PURE__ */ G(this), { has: n, get: r } = it(t), i = n.call(t, e);
|
|
668
668
|
i ? process.env.NODE_ENV !== "production" && dt(t, n, e) : (e = /* @__PURE__ */ G(e), i = n.call(t, e));
|
|
669
669
|
let a = r ? r.call(t, e) : void 0, o = t.delete(e);
|
|
670
|
-
return i &&
|
|
670
|
+
return i && H(t, "delete", e, void 0, a), o;
|
|
671
671
|
},
|
|
672
672
|
clear() {
|
|
673
673
|
let e = /* @__PURE__ */ G(this), t = e.size !== 0, n = process.env.NODE_ENV === "production" ? void 0 : E(e) ? new Map(e) : new Set(e), r = e.clear();
|
|
674
|
-
return t &&
|
|
674
|
+
return t && H(e, "clear", void 0, void 0, n), r;
|
|
675
675
|
}
|
|
676
676
|
}), [
|
|
677
677
|
"keys",
|
|
@@ -679,7 +679,7 @@ function ot(e, t) {
|
|
|
679
679
|
"entries",
|
|
680
680
|
Symbol.iterator
|
|
681
681
|
].forEach((r) => {
|
|
682
|
-
n[r] =
|
|
682
|
+
n[r] = at(r, e, t);
|
|
683
683
|
}), n;
|
|
684
684
|
}
|
|
685
685
|
function st(e, t) {
|
|
@@ -3185,8 +3185,7 @@ var ua = /* @__PURE__ */ new Set([
|
|
|
3185
3185
|
"edit_data",
|
|
3186
3186
|
"delete_data",
|
|
3187
3187
|
"write",
|
|
3188
|
-
"
|
|
3189
|
-
"vfs_edit"
|
|
3188
|
+
"draft_commit"
|
|
3190
3189
|
]);
|
|
3191
3190
|
function da(e) {
|
|
3192
3191
|
let t = e ?? {}, n = /* @__PURE__ */ new Set();
|
|
@@ -3221,12 +3220,23 @@ function pa(e) {
|
|
|
3221
3220
|
return n.join("\n");
|
|
3222
3221
|
},
|
|
3223
3222
|
wrapToolCall: async (e, n) => {
|
|
3224
|
-
if (t.length
|
|
3225
|
-
let
|
|
3226
|
-
|
|
3227
|
-
content: `PATH_DENIED · 聚焦越界:当前聚焦 [${t.map((e) => e.label ? `${e.path}(${e.label})` : e.path).join(", ")}],不可操作「${e}」。请先 remove_focus / clear_focus 或换焦点后重试。`,
|
|
3223
|
+
if (t.length) {
|
|
3224
|
+
let r = t.map((e) => e.label ? `${e.path}(${e.label})` : e.path).join(", "), i = (e) => ({
|
|
3225
|
+
content: `PATH_DENIED · 聚焦越界:当前聚焦 [${r}],不可操作「${e}」。请先 remove_focus / clear_focus 或换焦点后重试。`,
|
|
3228
3226
|
status: "error"
|
|
3229
|
-
};
|
|
3227
|
+
});
|
|
3228
|
+
if (e.name === "eval_script") {
|
|
3229
|
+
if (e.args?.mode !== "transform") return n(e);
|
|
3230
|
+
let r = da(e.args);
|
|
3231
|
+
if (!r.length) return i("(整体数据)");
|
|
3232
|
+
for (let e of r) if (!t.some((t) => fa(e, t.path))) return i(e);
|
|
3233
|
+
return n(e);
|
|
3234
|
+
}
|
|
3235
|
+
if (ua.has(e.name)) {
|
|
3236
|
+
let n = da(e.args);
|
|
3237
|
+
if (!n.length) return i("(整体数据)");
|
|
3238
|
+
for (let e of n) if (!t.some((t) => fa(e, t.path))) return i(e);
|
|
3239
|
+
}
|
|
3230
3240
|
}
|
|
3231
3241
|
return n(e);
|
|
3232
3242
|
},
|
|
@@ -3682,7 +3692,9 @@ var Fa = /* @__PURE__ */ new Set([
|
|
|
3682
3692
|
"delete_data",
|
|
3683
3693
|
"write",
|
|
3684
3694
|
"vfs_write",
|
|
3685
|
-
"vfs_edit"
|
|
3695
|
+
"vfs_edit",
|
|
3696
|
+
"draft_commit",
|
|
3697
|
+
"eval_script"
|
|
3686
3698
|
]), Ia = /* @__PURE__ */ new Set([
|
|
3687
3699
|
"get_data",
|
|
3688
3700
|
"describe_data",
|
|
@@ -3715,8 +3727,10 @@ function Ba(e) {
|
|
|
3715
3727
|
return {
|
|
3716
3728
|
name: "permissions",
|
|
3717
3729
|
wrapToolCall: async (t, n) => {
|
|
3718
|
-
let r = Fa.has(t.name) ? "write" : Ia.has(t.name) ? "read" : null
|
|
3719
|
-
|
|
3730
|
+
let r = Fa.has(t.name) ? "write" : Ia.has(t.name) ? "read" : null;
|
|
3731
|
+
t.name === "eval_script" && t.args?.mode !== "transform" && (r = null);
|
|
3732
|
+
let i = za(t.args);
|
|
3733
|
+
if (r === "write" && !i.length && (i = [""]), r && i.length) {
|
|
3720
3734
|
for (let t of i) if (Ra(e, r, t) === "deny") return {
|
|
3721
3735
|
content: `权限拒绝:${r} 操作 "${t}" 被 permissions 规则禁止。`,
|
|
3722
3736
|
status: "error"
|
|
@@ -4225,56 +4239,77 @@ var So = [
|
|
|
4225
4239
|
"search_data",
|
|
4226
4240
|
"fetch_document"
|
|
4227
4241
|
], Co = 1, wo = 4, To = 6, Eo = ["spawn_agent", "spawn_agents"], Do = [
|
|
4242
|
+
"load_skill",
|
|
4243
|
+
"write_todos",
|
|
4244
|
+
"update_todo",
|
|
4245
|
+
"restore_last_checkpoint",
|
|
4246
|
+
"request_human_confirmation",
|
|
4247
|
+
"set_focus",
|
|
4248
|
+
"add_focus",
|
|
4249
|
+
"remove_focus",
|
|
4250
|
+
"clear_focus"
|
|
4251
|
+
];
|
|
4252
|
+
function Oo(e) {
|
|
4253
|
+
return Eo.includes(e) || Do.includes(e) || e.startsWith("use_");
|
|
4254
|
+
}
|
|
4255
|
+
function ko(e, t, n = []) {
|
|
4256
|
+
return [...e.filter((e) => t.has(e.name) && !Oo(e.name)), ...n];
|
|
4257
|
+
}
|
|
4258
|
+
var Ao = [
|
|
4228
4259
|
"write",
|
|
4229
4260
|
"set_data",
|
|
4230
4261
|
"edit_data",
|
|
4231
4262
|
"delete_data",
|
|
4232
4263
|
"draft_commit"
|
|
4233
4264
|
];
|
|
4234
|
-
function
|
|
4265
|
+
function jo(e) {
|
|
4235
4266
|
let t = [];
|
|
4236
4267
|
if (typeof e.jsonPath == "string" && e.jsonPath && t.push(e.jsonPath), typeof e.path == "string" && e.path && t.push(e.path), e.patch && typeof e.patch.jsonPath == "string" && t.push(e.patch.jsonPath), Array.isArray(e.patches)) for (let n of e.patches) n && typeof n.jsonPath == "string" && t.push(n.jsonPath);
|
|
4237
4268
|
return t;
|
|
4238
4269
|
}
|
|
4239
|
-
function
|
|
4270
|
+
function Mo(e, t) {
|
|
4240
4271
|
return t.some((t) => e === t || e.startsWith(t + ".") || e.startsWith(t + "["));
|
|
4241
4272
|
}
|
|
4242
|
-
function
|
|
4273
|
+
function No(e, t) {
|
|
4243
4274
|
let n = e.invoke.bind(e), r = async (e) => {
|
|
4244
|
-
|
|
4275
|
+
if (Array.isArray(e?.patches) && e.patches.some((e) => !e || typeof e.jsonPath != "string" || !e.jsonPath)) return `PATH_OUT_OF_SCOPE:patches 含无 jsonPath 项(作用于根),子 agent 仅可写 ${t.join(", ")} 范围内子路径。请为每个 patch 指定 jsonPath。`;
|
|
4276
|
+
let r = jo(e);
|
|
4245
4277
|
if (!r.length) return `PATH_OUT_OF_SCOPE:子 agent 仅可增量 patch(writablePaths: ${t.join(", ")}),不能整体替换(无 jsonPath)。用 write({patch:{jsonPath,...}}) 增量改。`;
|
|
4246
|
-
for (let e of r) if (!
|
|
4278
|
+
for (let e of r) if (!Mo(e, t)) return `PATH_OUT_OF_SCOPE:子 agent 写 "${e}" 越界(仅可写 ${t.join(", ")})。`;
|
|
4247
4279
|
return n(e);
|
|
4248
4280
|
};
|
|
4249
4281
|
return new Proxy(e, { get(e, t, n) {
|
|
4250
4282
|
return t === "invoke" ? r : Reflect.get(e, t, n);
|
|
4251
4283
|
} });
|
|
4252
4284
|
}
|
|
4253
|
-
async function
|
|
4254
|
-
let
|
|
4285
|
+
async function Po(e, t, n, r, i, a) {
|
|
4286
|
+
let o = t.depth ?? 0, s = t.maxDepth ?? Co, c = /* @__PURE__ */ new Set([...So, ...t.allowedTools ?? []]), l = () => typeof t.allTools == "function" ? t.allTools() : t.allTools, u = ko(l(), c, t.extraTools ?? []);
|
|
4255
4287
|
if (t.writablePaths?.length) {
|
|
4256
|
-
|
|
4257
|
-
let e =
|
|
4258
|
-
|
|
4288
|
+
u = u.filter((e) => !Ao.includes(e.name));
|
|
4289
|
+
let e = l().filter((e) => Ao.includes(e.name) && !Oo(e.name)).map((e) => No(e, t.writablePaths));
|
|
4290
|
+
u = [...u, ...e];
|
|
4259
4291
|
}
|
|
4260
|
-
let
|
|
4292
|
+
let d = o + 1 < s ? [Fo({
|
|
4261
4293
|
...t,
|
|
4262
|
-
depth:
|
|
4263
|
-
})] : [],
|
|
4294
|
+
depth: o + 1
|
|
4295
|
+
})] : [], f = t.getFocuses?.() ?? [], p = f.length ? pa({
|
|
4264
4296
|
getSchema: t.getSchema ?? (() => null),
|
|
4265
|
-
initialFocuses:
|
|
4266
|
-
}) : void 0,
|
|
4297
|
+
initialFocuses: f
|
|
4298
|
+
}) : void 0, m = t.getVfsFiles ? {
|
|
4299
|
+
name: "vfs-bridge",
|
|
4300
|
+
beforeAgent: () => ({ files: t.getVfsFiles() })
|
|
4301
|
+
} : void 0, h = ni({
|
|
4267
4302
|
model: xo(t.llm) ? t.llm.model ?? t.llm.modelName : e.model ?? t.llm.model,
|
|
4268
4303
|
contextWindow: t.llm.contextWindow,
|
|
4269
4304
|
maxOutputTokens: t.llm.maxOutputTokens
|
|
4270
4305
|
});
|
|
4271
|
-
if (
|
|
4272
|
-
let
|
|
4273
|
-
contextWindow:
|
|
4306
|
+
if (h.contextWindow < 2e5) throw Error(`[page-agent-sdk][subagent] 子 agent 模型上下文窗口 ${h.contextWindow} 小于最小支持 ${ti}(需 ≥200K 窗口模型)`);
|
|
4307
|
+
let g = t.summarization === void 0 ? void 0 : yo(typeof t.summarization == "object" ? {
|
|
4308
|
+
contextWindow: h.contextWindow,
|
|
4274
4309
|
...t.summarization
|
|
4275
|
-
} : { contextWindow:
|
|
4276
|
-
contextWindow:
|
|
4277
|
-
maxOutputTokens:
|
|
4310
|
+
} : { contextWindow: h.contextWindow }), _ = ji({
|
|
4311
|
+
contextWindow: h.contextWindow,
|
|
4312
|
+
maxOutputTokens: h.maxOutputTokens,
|
|
4278
4313
|
...xo(t.llm) ? { llm: t.llm } : {
|
|
4279
4314
|
apiKey: t.llm.apiKey,
|
|
4280
4315
|
baseUrl: t.llm.baseUrl,
|
|
@@ -4283,27 +4318,33 @@ async function jo(e, t, n, r, i) {
|
|
|
4283
4318
|
maxTokens: t.maxTokens ?? t.llm.maxTokens
|
|
4284
4319
|
},
|
|
4285
4320
|
systemPrompt: e.role?.trim() || t.systemPrompt || "你是一个专注的子任务执行者。你只有只读工具(读主数据 / 抓文档),用它们完成给定任务,给出简洁结论,不要展开多余解释。",
|
|
4286
|
-
tools:
|
|
4321
|
+
tools: u,
|
|
4287
4322
|
middleware: [
|
|
4288
4323
|
...t.skills?.length ? [Na(t.skills)] : [],
|
|
4324
|
+
...g ? [g] : [],
|
|
4289
4325
|
...m ? [m] : [],
|
|
4290
|
-
...
|
|
4291
|
-
...
|
|
4326
|
+
...d,
|
|
4327
|
+
...p ? [p] : [],
|
|
4328
|
+
...t.guardMiddleware ?? [],
|
|
4292
4329
|
...t.middleware ?? []
|
|
4293
4330
|
],
|
|
4294
4331
|
maxToolRounds: t.maxToolRounds ?? To,
|
|
4295
4332
|
onLog: i,
|
|
4296
4333
|
debug: t.debug
|
|
4297
4334
|
});
|
|
4298
|
-
return t.debug && console.log(`[subagent] 启动子 agent(depth=${
|
|
4335
|
+
return t.debug && console.log(`[subagent] 启动子 agent(depth=${o},工具 ${u.length} 个)`), _.stream([{
|
|
4299
4336
|
role: "user",
|
|
4300
4337
|
content: e.prompt,
|
|
4301
4338
|
timestamp: Date.now()
|
|
4302
4339
|
}], (e) => {
|
|
4340
|
+
if (e.type === "approval_request") {
|
|
4341
|
+
a?.(e);
|
|
4342
|
+
return;
|
|
4343
|
+
}
|
|
4303
4344
|
r && (e.type === "tool_call" || e.type === "tool_result") && r(e);
|
|
4304
4345
|
}, n);
|
|
4305
4346
|
}
|
|
4306
|
-
function
|
|
4347
|
+
function Fo(e) {
|
|
4307
4348
|
let n = e.maxParallel ?? wo, i, a, o, s = (t, n) => (r) => {
|
|
4308
4349
|
e.tracker?.pushStep(t, {
|
|
4309
4350
|
kind: r.type,
|
|
@@ -4322,25 +4363,25 @@ function Mo(e) {
|
|
|
4322
4363
|
};
|
|
4323
4364
|
return {
|
|
4324
4365
|
name: "subagent",
|
|
4325
|
-
tools: [r(async ({ prompt: t, role: n, tools: r, writablePaths:
|
|
4326
|
-
let
|
|
4366
|
+
tools: [r(async ({ prompt: t, role: n, tools: r, writablePaths: c, model: l }) => {
|
|
4367
|
+
let u = (r ?? []).filter((e) => !Ao.includes(e)), d = u.length || c?.length ? {
|
|
4327
4368
|
...e,
|
|
4328
|
-
...
|
|
4329
|
-
...
|
|
4330
|
-
} : e,
|
|
4369
|
+
...u.length ? { allowedTools: u } : {},
|
|
4370
|
+
...c?.length ? { writablePaths: c } : {}
|
|
4371
|
+
} : e, f = `sub-${Math.random().toString(36).slice(2, 8)}`, p = n?.trim() || "子任务", m = (e) => o?.({
|
|
4331
4372
|
...e,
|
|
4332
|
-
source: `子:${
|
|
4333
|
-
}),
|
|
4334
|
-
e.tracker?.start(
|
|
4373
|
+
source: `子:${p}`
|
|
4374
|
+
}), h = Date.now();
|
|
4375
|
+
e.tracker?.start(f, t, p, h);
|
|
4335
4376
|
try {
|
|
4336
|
-
let r = await
|
|
4377
|
+
let r = await Po({
|
|
4337
4378
|
prompt: t,
|
|
4338
4379
|
role: n,
|
|
4339
|
-
model:
|
|
4340
|
-
},
|
|
4341
|
-
return e.tracker?.finish(
|
|
4380
|
+
model: l
|
|
4381
|
+
}, d, i, s(f, p), m, a);
|
|
4382
|
+
return e.tracker?.finish(f, "done", r), r;
|
|
4342
4383
|
} catch (t) {
|
|
4343
|
-
throw e.tracker?.finish(
|
|
4384
|
+
throw e.tracker?.finish(f, "error", String(t?.message ?? t)), t;
|
|
4344
4385
|
}
|
|
4345
4386
|
}, {
|
|
4346
4387
|
name: "spawn_agent",
|
|
@@ -4348,18 +4389,18 @@ function Mo(e) {
|
|
|
4348
4389
|
schema: t.object({
|
|
4349
4390
|
prompt: t.string().describe("子任务描述(子 agent 的唯一输入)"),
|
|
4350
4391
|
role: t.string().optional().describe("子 agent 身份(如\"你是代码审查专家\")"),
|
|
4351
|
-
tools: t.array(t.string()).optional().describe("子 agent 可用工具名白名单(默认只读主数据 + fetch)"),
|
|
4392
|
+
tools: t.array(t.string()).optional().describe("子 agent 可用工具名白名单(默认只读主数据 + fetch)。写工具不可自授——写权限用 writablePaths;委派/框架类工具系统保留不可授"),
|
|
4352
4393
|
writablePaths: t.array(t.string()).optional().describe("子 agent 可写路径前缀(给写权限;越界 PATH_OUT_OF_SCOPE;如 [\"components\"] 允许写 components.* )"),
|
|
4353
4394
|
model: t.string().optional().describe("覆盖模型(默认同主)")
|
|
4354
4395
|
})
|
|
4355
4396
|
}), r(async ({ tasks: t }) => (await Qr(t, n, async (t, n) => {
|
|
4356
|
-
let r = `sub-${n}-${Math.random().toString(36).slice(2, 6)}`,
|
|
4397
|
+
let r = `sub-${n}-${Math.random().toString(36).slice(2, 6)}`, c = t.role?.trim() || `子任务${n + 1}`, l = (e) => o?.({
|
|
4357
4398
|
...e,
|
|
4358
|
-
source: `子:${
|
|
4359
|
-
}),
|
|
4360
|
-
e.tracker?.start(r, t.prompt,
|
|
4399
|
+
source: `子:${c}`
|
|
4400
|
+
}), u = Date.now();
|
|
4401
|
+
e.tracker?.start(r, t.prompt, c, u);
|
|
4361
4402
|
try {
|
|
4362
|
-
let n = await
|
|
4403
|
+
let n = await Po(t, e, i, s(r, c), l, a);
|
|
4363
4404
|
return e.tracker?.finish(r, "done", n ?? "(未完成)"), n;
|
|
4364
4405
|
} catch (t) {
|
|
4365
4406
|
throw e.tracker?.finish(r, "error", String(t?.message ?? t)), t;
|
|
@@ -4375,8 +4416,8 @@ function Mo(e) {
|
|
|
4375
4416
|
wrapToolCall: async (e, t) => (e.signal && (i = e.signal), e.emit && (a = e.emit), e.logSink && (o = e.logSink), t(e))
|
|
4376
4417
|
};
|
|
4377
4418
|
}
|
|
4378
|
-
var
|
|
4379
|
-
function
|
|
4419
|
+
var Io = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
|
|
4420
|
+
function Lo(e, t) {
|
|
4380
4421
|
let n = e.tools ?? [];
|
|
4381
4422
|
return {
|
|
4382
4423
|
llm: e.llm ?? t.llm,
|
|
@@ -4394,10 +4435,12 @@ function Po(e, t) {
|
|
|
4394
4435
|
...e.summarization === void 0 ? {} : { summarization: e.summarization },
|
|
4395
4436
|
...t.getFocuses ? { getFocuses: t.getFocuses } : {},
|
|
4396
4437
|
...t.getSchema ? { getSchema: t.getSchema } : {},
|
|
4397
|
-
...t.tracker ? { tracker: t.tracker } : {}
|
|
4438
|
+
...t.tracker ? { tracker: t.tracker } : {},
|
|
4439
|
+
...t.guardMiddleware?.length ? { guardMiddleware: t.guardMiddleware } : {},
|
|
4440
|
+
...t.getVfsFiles ? { getVfsFiles: t.getVfsFiles } : {}
|
|
4398
4441
|
};
|
|
4399
4442
|
}
|
|
4400
|
-
function
|
|
4443
|
+
function Ro(e, n) {
|
|
4401
4444
|
let i, a, o, s = (e, t) => (n) => {
|
|
4402
4445
|
a && a({
|
|
4403
4446
|
type: "subagent",
|
|
@@ -4411,44 +4454,44 @@ function Fo(e, n) {
|
|
|
4411
4454
|
});
|
|
4412
4455
|
}, c = [], l = [], u;
|
|
4413
4456
|
function d(e) {
|
|
4414
|
-
let
|
|
4415
|
-
for (let
|
|
4416
|
-
if (!
|
|
4417
|
-
console.warn(`[subagents] id "${
|
|
4457
|
+
let c = /* @__PURE__ */ new Set(), l = [], u = [];
|
|
4458
|
+
for (let d of e) {
|
|
4459
|
+
if (!Io.test(d.id)) {
|
|
4460
|
+
console.warn(`[subagents] id "${d.id}" 非合法工具名(须 [a-zA-Z_][a-zA-Z0-9_]*),已跳过`);
|
|
4418
4461
|
continue;
|
|
4419
4462
|
}
|
|
4420
|
-
let e = `use_${
|
|
4421
|
-
if (
|
|
4422
|
-
console.warn(`[subagents] id "${
|
|
4463
|
+
let e = `use_${d.id}`;
|
|
4464
|
+
if (c.has(e)) {
|
|
4465
|
+
console.warn(`[subagents] id "${d.id}" 重复,已跳过`);
|
|
4423
4466
|
continue;
|
|
4424
4467
|
}
|
|
4425
|
-
|
|
4426
|
-
let t =
|
|
4468
|
+
c.add(e), l.push(d), u.push(r(async ({ task: e }) => {
|
|
4469
|
+
let t = Lo(d, n), r = (e) => o?.({
|
|
4427
4470
|
...e,
|
|
4428
|
-
source: `子:${
|
|
4429
|
-
}),
|
|
4430
|
-
|
|
4471
|
+
source: `子:${d.id}`
|
|
4472
|
+
}), c = n.tracker, l = c ? `use_${d.id}-${Math.random().toString(36).slice(2, 6)}` : `use_${d.id}`, u = s(`use_${d.id}`, d.id), f = c ? (e) => {
|
|
4473
|
+
c.pushStep(l, {
|
|
4431
4474
|
kind: e.type,
|
|
4432
4475
|
name: e.name,
|
|
4433
4476
|
ts: Date.now()
|
|
4434
|
-
}),
|
|
4435
|
-
} :
|
|
4436
|
-
|
|
4477
|
+
}), u(e);
|
|
4478
|
+
} : u, p = Date.now();
|
|
4479
|
+
c?.start(l, e, d.id, p);
|
|
4437
4480
|
try {
|
|
4438
|
-
let n = await
|
|
4439
|
-
return
|
|
4481
|
+
let n = await Po({ prompt: e }, t, i, f, r, a);
|
|
4482
|
+
return c?.finish(l, "done", n), n;
|
|
4440
4483
|
} catch (e) {
|
|
4441
|
-
throw
|
|
4484
|
+
throw c?.finish(l, "error", String(e?.message ?? e)), e;
|
|
4442
4485
|
}
|
|
4443
4486
|
}, {
|
|
4444
|
-
name: `use_${
|
|
4445
|
-
description: `委派给「${
|
|
4487
|
+
name: `use_${d.id}`,
|
|
4488
|
+
description: `委派给「${d.description}」子 agent 执行任务,返回其结论(过程隔离,不占主上下文)。`,
|
|
4446
4489
|
schema: t.object({ task: t.string().describe("委派给该子 agent 的任务描述") })
|
|
4447
4490
|
}));
|
|
4448
4491
|
}
|
|
4449
4492
|
return {
|
|
4450
|
-
valid:
|
|
4451
|
-
tools:
|
|
4493
|
+
valid: l,
|
|
4494
|
+
tools: u
|
|
4452
4495
|
};
|
|
4453
4496
|
}
|
|
4454
4497
|
let f = d(e);
|
|
@@ -4496,7 +4539,7 @@ function Fo(e, n) {
|
|
|
4496
4539
|
}
|
|
4497
4540
|
//#endregion
|
|
4498
4541
|
//#region src/core/harness/verify.ts
|
|
4499
|
-
function
|
|
4542
|
+
function zo(e) {
|
|
4500
4543
|
return {
|
|
4501
4544
|
name: "verify",
|
|
4502
4545
|
async beforeReturn({ messages: t, state: n, log: r }) {
|
|
@@ -4508,10 +4551,10 @@ function Io(e) {
|
|
|
4508
4551
|
if (e.adversarial) {
|
|
4509
4552
|
r?.("middleware", {
|
|
4510
4553
|
stage: "adversarial_start",
|
|
4511
|
-
model:
|
|
4554
|
+
model: qo(e.adversarial.llm),
|
|
4512
4555
|
tools: (e.adversarial.tools ?? []).length
|
|
4513
4556
|
});
|
|
4514
|
-
let n = await
|
|
4557
|
+
let n = await Zo(t, e.adversarial.llm, r, e.adversarial.tools);
|
|
4515
4558
|
if (r?.("middleware", {
|
|
4516
4559
|
stage: "adversarial_done",
|
|
4517
4560
|
clean: n === null,
|
|
@@ -4522,18 +4565,18 @@ function Io(e) {
|
|
|
4522
4565
|
}
|
|
4523
4566
|
};
|
|
4524
4567
|
}
|
|
4525
|
-
var
|
|
4568
|
+
var Bo = /* @__PURE__ */ new Set([
|
|
4526
4569
|
"set_data",
|
|
4527
4570
|
"edit_data",
|
|
4528
4571
|
"delete_data",
|
|
4529
4572
|
"write"
|
|
4530
|
-
]),
|
|
4531
|
-
function
|
|
4573
|
+
]), Vo = /校验失败|SCHEMA_INVALID|未注册|不存在|仅支持|必须是|NOT_OBJECT|PATH_UNSAFE|VERSION_CONFLICT|WRITE_INTERCEPT/;
|
|
4574
|
+
function Ho(e) {
|
|
4532
4575
|
let t = /* @__PURE__ */ new Map();
|
|
4533
4576
|
for (let n of e) {
|
|
4534
4577
|
let e = n?.tool_calls;
|
|
4535
4578
|
if (Array.isArray(e)) for (let n of e) {
|
|
4536
|
-
if (!
|
|
4579
|
+
if (!Bo.has(n.name)) continue;
|
|
4537
4580
|
let e = n.id, r = n?.args ?? {};
|
|
4538
4581
|
if (n.name === "write") if (r.del && r.patch?.jsonPath) t.set(r.patch.jsonPath, {
|
|
4539
4582
|
path: r.patch.jsonPath,
|
|
@@ -4572,7 +4615,7 @@ function zo(e) {
|
|
|
4572
4615
|
}
|
|
4573
4616
|
return [...t.values()];
|
|
4574
4617
|
}
|
|
4575
|
-
function
|
|
4618
|
+
function Uo(e) {
|
|
4576
4619
|
let t = /* @__PURE__ */ new Map();
|
|
4577
4620
|
for (let n of e) {
|
|
4578
4621
|
let e = n?.tool_call_id, r = n?.content;
|
|
@@ -4580,7 +4623,7 @@ function Bo(e) {
|
|
|
4580
4623
|
}
|
|
4581
4624
|
return t;
|
|
4582
4625
|
}
|
|
4583
|
-
function
|
|
4626
|
+
function Wo(e, t) {
|
|
4584
4627
|
if (t === "") return e;
|
|
4585
4628
|
if (e == null) return;
|
|
4586
4629
|
let n = e;
|
|
@@ -4590,16 +4633,16 @@ function Vo(e, t) {
|
|
|
4590
4633
|
}
|
|
4591
4634
|
return n;
|
|
4592
4635
|
}
|
|
4593
|
-
function
|
|
4636
|
+
function Go(e = {}) {
|
|
4594
4637
|
let t = typeof e.root == "function" ? e.root : e.root === void 0 ? () => e.window ?? globalThis.window : () => e.root, n = typeof e.schemas == "function" ? e.schemas : () => e.schemas ?? {};
|
|
4595
4638
|
return async ({ messages: e }) => {
|
|
4596
|
-
let r =
|
|
4639
|
+
let r = Ho(e);
|
|
4597
4640
|
if (!r.length) return { ok: !0 };
|
|
4598
|
-
let i =
|
|
4641
|
+
let i = Uo(e), a = n()[""], o = t(), s = [];
|
|
4599
4642
|
for (let { path: e, op: t, callId: n } of r) {
|
|
4600
4643
|
let r = n ? i.get(n) : void 0;
|
|
4601
|
-
if (r &&
|
|
4602
|
-
let c =
|
|
4644
|
+
if (r && Vo.test(r)) continue;
|
|
4645
|
+
let c = Wo(o, e);
|
|
4603
4646
|
if (t === "delete_data") c !== void 0 && s.push(`${e} 删除后读回仍有值,疑似未生效`);
|
|
4604
4647
|
else if (c == null) s.push(`写入 ${e} 后读回为空,疑似未生效`);
|
|
4605
4648
|
else if (a) {
|
|
@@ -4613,17 +4656,17 @@ function Ho(e = {}) {
|
|
|
4613
4656
|
} : { ok: !0 };
|
|
4614
4657
|
};
|
|
4615
4658
|
}
|
|
4616
|
-
function
|
|
4659
|
+
function Ko(e) {
|
|
4617
4660
|
return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
|
|
4618
4661
|
}
|
|
4619
|
-
function
|
|
4620
|
-
return
|
|
4662
|
+
function qo(e) {
|
|
4663
|
+
return Ko(e) ? e.model ?? e.modelName ?? "<实例>" : e.model ?? "<配置>";
|
|
4621
4664
|
}
|
|
4622
|
-
var
|
|
4623
|
-
function
|
|
4624
|
-
return
|
|
4665
|
+
var Jo = /无问题|没有问题|未发现问题|没有发现|没问题|未发现/;
|
|
4666
|
+
function Yo(e) {
|
|
4667
|
+
return Jo.test(e);
|
|
4625
4668
|
}
|
|
4626
|
-
function
|
|
4669
|
+
function Xo(e) {
|
|
4627
4670
|
let t = "", n = "";
|
|
4628
4671
|
for (let r of e) r instanceof a ? t = typeof r.content == "string" ? r.content : "" : r instanceof i && !(r.tool_calls?.length > 0) && (n = typeof r.content == "string" ? r.content : "");
|
|
4629
4672
|
return {
|
|
@@ -4631,8 +4674,8 @@ function qo(e) {
|
|
|
4631
4674
|
lastReply: n
|
|
4632
4675
|
};
|
|
4633
4676
|
}
|
|
4634
|
-
async function
|
|
4635
|
-
let { lastUser: i, lastReply: a } =
|
|
4677
|
+
async function Zo(e, t, n, r) {
|
|
4678
|
+
let { lastUser: i, lastReply: a } = Xo(e);
|
|
4636
4679
|
if (!a) return null;
|
|
4637
4680
|
let o = Array.isArray(r) && r.length > 0, s = [
|
|
4638
4681
|
"你是严格的对抗式审查者,目标是找出以下 AI 助手回复的错误并证明它有问题(事实错误 / 遗漏 / 逻辑矛盾 / 与需求不符)。",
|
|
@@ -4643,7 +4686,7 @@ async function Jo(e, t, n, r) {
|
|
|
4643
4686
|
].join("\n"), c = "你是严格的对抗式审查者,只找问题不赞美。目标是反驳,不是改进。", l = n ? (e) => n(e.type, {
|
|
4644
4687
|
...e.data,
|
|
4645
4688
|
source: "adversarial"
|
|
4646
|
-
}) : void 0, u = await ji(
|
|
4689
|
+
}) : void 0, u = await ji(Ko(t) ? {
|
|
4647
4690
|
llm: t,
|
|
4648
4691
|
tools: r,
|
|
4649
4692
|
maxToolRounds: o ? 4 : 1,
|
|
@@ -4668,11 +4711,11 @@ async function Jo(e, t, n, r) {
|
|
|
4668
4711
|
stage: "adversarial_verdict",
|
|
4669
4712
|
verdict: u,
|
|
4670
4713
|
source: "adversarial"
|
|
4671
|
-
}),
|
|
4714
|
+
}), Yo(u) ? null : u.trim();
|
|
4672
4715
|
}
|
|
4673
4716
|
//#endregion
|
|
4674
4717
|
//#region src/core/utils/contextAnalysis.ts
|
|
4675
|
-
var
|
|
4718
|
+
var Qo = [
|
|
4676
4719
|
{
|
|
4677
4720
|
prefix: "## 可操作数据",
|
|
4678
4721
|
key: "dataHint"
|
|
@@ -4701,7 +4744,7 @@ var Yo = [
|
|
|
4701
4744
|
prefix: "【与当前问题可能相关的早期对话】",
|
|
4702
4745
|
key: "recall"
|
|
4703
4746
|
}
|
|
4704
|
-
],
|
|
4747
|
+
], $o = [
|
|
4705
4748
|
{
|
|
4706
4749
|
key: "systemPrompt",
|
|
4707
4750
|
label: "系统提示词(身份/规则)"
|
|
@@ -4755,9 +4798,9 @@ var Yo = [
|
|
|
4755
4798
|
label: "其他"
|
|
4756
4799
|
}
|
|
4757
4800
|
];
|
|
4758
|
-
function
|
|
4801
|
+
function es() {
|
|
4759
4802
|
let e = {};
|
|
4760
|
-
for (let t of
|
|
4803
|
+
for (let t of $o) e[t.key] = {
|
|
4761
4804
|
key: t.key,
|
|
4762
4805
|
label: t.label,
|
|
4763
4806
|
tokens: 0,
|
|
@@ -4766,16 +4809,16 @@ function Zo() {
|
|
|
4766
4809
|
};
|
|
4767
4810
|
return e;
|
|
4768
4811
|
}
|
|
4769
|
-
function
|
|
4812
|
+
function ts(e, t) {
|
|
4770
4813
|
e.tokens += t, e.msgCount += 1;
|
|
4771
4814
|
}
|
|
4772
|
-
function
|
|
4815
|
+
function ns(e) {
|
|
4773
4816
|
let t = e.content;
|
|
4774
4817
|
return typeof t == "string" ? t : JSON.stringify(t ?? "");
|
|
4775
4818
|
}
|
|
4776
|
-
function
|
|
4819
|
+
function rs(e, t) {
|
|
4777
4820
|
let n = [];
|
|
4778
|
-
for (let t of
|
|
4821
|
+
for (let t of Qo) {
|
|
4779
4822
|
let r = 0;
|
|
4780
4823
|
for (;;) {
|
|
4781
4824
|
let i = e.indexOf(t.prefix, r);
|
|
@@ -4788,35 +4831,35 @@ function es(e, t) {
|
|
|
4788
4831
|
}
|
|
4789
4832
|
if (n.sort((e, t) => e.idx - t.idx), !n.length) {
|
|
4790
4833
|
let n = e.trim();
|
|
4791
|
-
n &&
|
|
4834
|
+
n && ts(t.systemPrompt, X(n));
|
|
4792
4835
|
return;
|
|
4793
4836
|
}
|
|
4794
4837
|
if (n[0].idx > 0) {
|
|
4795
4838
|
let r = e.slice(0, n[0].idx).trim();
|
|
4796
|
-
r &&
|
|
4839
|
+
r && ts(t.systemPrompt, X(r));
|
|
4797
4840
|
}
|
|
4798
4841
|
for (let r = 0; r < n.length; r++) {
|
|
4799
4842
|
let i = n[r].idx, a = r + 1 < n.length ? n[r + 1].idx : e.length, o = e.slice(i, a).trim();
|
|
4800
|
-
o &&
|
|
4843
|
+
o && ts(t[n[r].key], X(o));
|
|
4801
4844
|
}
|
|
4802
4845
|
}
|
|
4803
|
-
function
|
|
4804
|
-
let n =
|
|
4846
|
+
function is(e, t = {}) {
|
|
4847
|
+
let n = es(), r = -1;
|
|
4805
4848
|
for (let t = e.length - 1; t >= 0; t--) if (e[t] instanceof a) {
|
|
4806
4849
|
r = t;
|
|
4807
4850
|
break;
|
|
4808
4851
|
}
|
|
4809
4852
|
for (let t = 0; t < e.length; t++) {
|
|
4810
4853
|
let c = e[t];
|
|
4811
|
-
if (c instanceof o)
|
|
4812
|
-
else if (c instanceof a)
|
|
4854
|
+
if (c instanceof o) rs(ns(c), n);
|
|
4855
|
+
else if (c instanceof a) ts(n[t === r ? "current" : "history"], X(ns(c)));
|
|
4813
4856
|
else if (c instanceof i) {
|
|
4814
4857
|
let e = c.tool_calls ?? [];
|
|
4815
4858
|
if (e.length) {
|
|
4816
4859
|
let t = e.map((e) => JSON.stringify(e.args ?? {})).join(" ");
|
|
4817
|
-
|
|
4818
|
-
} else
|
|
4819
|
-
} else c instanceof s ?
|
|
4860
|
+
ts(n.toolResults, X(t));
|
|
4861
|
+
} else ts(n.assistant, X(ns(c)));
|
|
4862
|
+
} else c instanceof s ? ts(n.toolResults, X(ns(c))) : ts(n.other, X(ns(c)));
|
|
4820
4863
|
}
|
|
4821
4864
|
let c = Object.values(n).filter((e) => e.tokens > 0);
|
|
4822
4865
|
c.sort((e, t) => t.tokens - e.tokens);
|
|
@@ -4833,12 +4876,12 @@ function ts(e, t = {}) {
|
|
|
4833
4876
|
}
|
|
4834
4877
|
//#endregion
|
|
4835
4878
|
//#region src/core/harness/contextInspector.ts
|
|
4836
|
-
function
|
|
4879
|
+
function as(e = {}) {
|
|
4837
4880
|
let t, n = e.contextWindow;
|
|
4838
4881
|
return {
|
|
4839
4882
|
name: "context-inspector",
|
|
4840
4883
|
async wrapModelCall(r, i) {
|
|
4841
|
-
return t =
|
|
4884
|
+
return t = is(r.messages, {
|
|
4842
4885
|
contextWindow: n,
|
|
4843
4886
|
thresholdRatio: e.thresholdRatio
|
|
4844
4887
|
}), i(r);
|
|
@@ -4851,13 +4894,13 @@ function ns(e = {}) {
|
|
|
4851
4894
|
}
|
|
4852
4895
|
//#endregion
|
|
4853
4896
|
//#region src/core/mcp/client.ts
|
|
4854
|
-
function
|
|
4897
|
+
function os(e) {
|
|
4855
4898
|
let t = e?.content;
|
|
4856
4899
|
if (!Array.isArray(t) || !t.length) return "";
|
|
4857
4900
|
let n = t.map((e) => e.type === "text" && e.text ? e.text : e.type === "image" && e.data ? `[image:${String(e.data).slice(0, 32)}…]` : e.type === "audio" && e.data ? "[audio]" : e.type === "resource" && e.resource ? e.resource.text ?? e.resource.blob ?? "" : "").filter(Boolean).join("\n");
|
|
4858
4901
|
return e?.isError ? `工具错误:${n}` : n;
|
|
4859
4902
|
}
|
|
4860
|
-
async function
|
|
4903
|
+
async function ss(e) {
|
|
4861
4904
|
let t = new URL(e.url), n = e.requestInit;
|
|
4862
4905
|
if (e.transport === "http") {
|
|
4863
4906
|
let { StreamableHTTPClientTransport: e } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
|
|
@@ -4870,8 +4913,8 @@ async function is(e) {
|
|
|
4870
4913
|
let { WebSocketClientTransport: r } = await import("@modelcontextprotocol/sdk/client/websocket.js");
|
|
4871
4914
|
return new r(t);
|
|
4872
4915
|
}
|
|
4873
|
-
function
|
|
4874
|
-
return r(async (n) =>
|
|
4916
|
+
function cs(e, t) {
|
|
4917
|
+
return r(async (n) => os(await t.callTool({
|
|
4875
4918
|
name: e.name,
|
|
4876
4919
|
arguments: n
|
|
4877
4920
|
})), {
|
|
@@ -4880,39 +4923,39 @@ function as(e, t) {
|
|
|
4880
4923
|
schema: e.inputSchema
|
|
4881
4924
|
});
|
|
4882
4925
|
}
|
|
4883
|
-
async function
|
|
4884
|
-
let { Client: t } = await import("@modelcontextprotocol/sdk/client"), n = await
|
|
4926
|
+
async function ls(e) {
|
|
4927
|
+
let { Client: t } = await import("@modelcontextprotocol/sdk/client"), n = await ss(e), r = new t({
|
|
4885
4928
|
name: "page-agent-sdk",
|
|
4886
4929
|
version: "1.0"
|
|
4887
4930
|
}, { capabilities: {} });
|
|
4888
4931
|
await r.connect(n);
|
|
4889
4932
|
let { tools: i } = await r.listTools();
|
|
4890
4933
|
return {
|
|
4891
|
-
tools: i.map((e) =>
|
|
4934
|
+
tools: i.map((e) => cs(e, r)),
|
|
4892
4935
|
close: () => r.close()
|
|
4893
4936
|
};
|
|
4894
4937
|
}
|
|
4895
4938
|
//#endregion
|
|
4896
4939
|
//#region src/core/sdk/promptBuilder.ts
|
|
4897
|
-
var
|
|
4940
|
+
var us = [
|
|
4898
4941
|
"你是一个 JSON 操作助手。集成方声明了一个主数据对象(含 zod schema 校验),你通过专用工具安全地读写它来完成任务。",
|
|
4899
4942
|
"所有写操作都经范围控制(仅 schema 声明字段内)与 schema 校验(不合法会返回结构化错误而非写入),并自动留快照可回退。",
|
|
4900
4943
|
"大对象/数组优先用增量 patch(只发改动)而非整体重传,避免输出被截断。",
|
|
4901
4944
|
"---",
|
|
4902
4945
|
ia.reliableWriteRules
|
|
4903
4946
|
].join("\n\n");
|
|
4904
|
-
function
|
|
4947
|
+
function ds(e, t) {
|
|
4905
4948
|
if (!e) return "";
|
|
4906
4949
|
let n = ca(e.schema, t);
|
|
4907
4950
|
return `\n\n## 可操作数据(字段以 read 工具返回的实际值为准)\n${e.description ? e.description + "\n" : ""}${n}`;
|
|
4908
4951
|
}
|
|
4909
|
-
function
|
|
4952
|
+
function fs(e) {
|
|
4910
4953
|
let t = e.appendReliableWriteRules !== !1;
|
|
4911
|
-
return e.systemPrompt ? t ? e.systemPrompt + "\n\n---\n\n" + ia.reliableWriteRules : e.systemPrompt :
|
|
4954
|
+
return e.systemPrompt ? t ? e.systemPrompt + "\n\n---\n\n" + ia.reliableWriteRules : e.systemPrompt : us;
|
|
4912
4955
|
}
|
|
4913
4956
|
//#endregion
|
|
4914
4957
|
//#region src/core/sdk/defineTool.ts
|
|
4915
|
-
function
|
|
4958
|
+
function ps(e) {
|
|
4916
4959
|
return r(async (t) => {
|
|
4917
4960
|
let n = await e.handler(t);
|
|
4918
4961
|
return typeof n == "string" ? n : JSON.stringify(n);
|
|
@@ -4924,7 +4967,7 @@ function us(e) {
|
|
|
4924
4967
|
}
|
|
4925
4968
|
//#endregion
|
|
4926
4969
|
//#region src/core/sdk/inspectContextTool.ts
|
|
4927
|
-
var
|
|
4970
|
+
var ms = t.object({
|
|
4928
4971
|
path: t.string().optional().describe("分类 key 过滤(如 toolResults/history/systemPrompt/dataHint);不传=全部分类"),
|
|
4929
4972
|
role: t.enum([
|
|
4930
4973
|
"user",
|
|
@@ -4934,11 +4977,11 @@ var ds = t.object({
|
|
|
4934
4977
|
]).optional().describe("聚焦每轮首句的角色(assistant→回复摘要,user→问题摘要);不影响工具列表"),
|
|
4935
4978
|
limit: t.number().int().min(1).max(50).optional().describe("返回最近 N 轮(默认全部;超 50 自动截最近 50 防返回过大)")
|
|
4936
4979
|
});
|
|
4937
|
-
function
|
|
4938
|
-
return
|
|
4980
|
+
function hs(e) {
|
|
4981
|
+
return ps({
|
|
4939
4982
|
name: "inspect_context",
|
|
4940
4983
|
description: "查看当前对话上下文的构成(供压缩决策)。返回:totalTokens(历史轮次 token 总和,与触发判断同口径)、occupancy(窗口占用比)、contextWindow、categories(分类占用)、rounds(每轮 token/工具/首句)。先调用本工具查看构成,再决定压缩策略。",
|
|
4941
|
-
schema:
|
|
4984
|
+
schema: ms,
|
|
4942
4985
|
handler: (t) => {
|
|
4943
4986
|
let n = eo(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) => {
|
|
4944
4987
|
let n = po(e), r = no(e), i = t.role === "assistant" ? e.assistantMsgs[0] ?? e.userMsg : e.userMsg, a = to(typeof i.content == "string" ? i.content : "", 60);
|
|
@@ -4961,7 +5004,7 @@ function fs(e) {
|
|
|
4961
5004
|
}
|
|
4962
5005
|
//#endregion
|
|
4963
5006
|
//#region src/core/sdk/compressDecision.ts
|
|
4964
|
-
var
|
|
5007
|
+
var gs = t.object({
|
|
4965
5008
|
keepRounds: t.number().int().min(0).max(50).optional(),
|
|
4966
5009
|
windowRatio: t.number().min(0).max(1).optional(),
|
|
4967
5010
|
summarize: t.object({ mode: t.enum(["index", "llm"]) }),
|
|
@@ -4971,23 +5014,23 @@ var ps = t.object({
|
|
|
4971
5014
|
}).refine((e) => e.keepRounds !== void 0 || e.windowRatio !== void 0, { message: "keepRounds 与 windowRatio 至少填一个(按当前触发模式)" });
|
|
4972
5015
|
//#endregion
|
|
4973
5016
|
//#region src/core/sdk/llmResolver.ts
|
|
4974
|
-
function
|
|
5017
|
+
function _s(e) {
|
|
4975
5018
|
let t = e.find((e) => e.role === "user");
|
|
4976
5019
|
if (!t) return;
|
|
4977
5020
|
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, " ");
|
|
4978
5021
|
if (r) return r.length > 30 ? r.slice(0, 30) + "…" : r;
|
|
4979
5022
|
}
|
|
4980
|
-
function
|
|
5023
|
+
function vs(e) {
|
|
4981
5024
|
return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
|
|
4982
5025
|
}
|
|
4983
|
-
function
|
|
5026
|
+
function ys(e) {
|
|
4984
5027
|
let t = e.content;
|
|
4985
5028
|
return typeof t == "string" ? t : Array.isArray(t) ? t.map((e) => typeof e == "string" ? e : e?.text ?? "").join("") : String(t ?? "");
|
|
4986
5029
|
}
|
|
4987
|
-
function
|
|
5030
|
+
function bs(e) {
|
|
4988
5031
|
let t = e.summaryLlm ?? e.llm;
|
|
4989
5032
|
if (!t) return;
|
|
4990
|
-
let n = e.summaryTemperature ?? .3, r = e.summaryMaxTokens ?? 1024, i = e.summaryTimeoutMs ?? 15e3, s =
|
|
5033
|
+
let n = e.summaryTemperature ?? .3, r = e.summaryMaxTokens ?? 1024, i = e.summaryTimeoutMs ?? 15e3, s = vs(t) ? t : null, c = vs(t) ? null : t;
|
|
4991
5034
|
if (c && !c.apiKey) {
|
|
4992
5035
|
e.summaryLlm && console.warn("[page-agent-sdk][summarization] summaryLlm 已配置但缺 apiKey,摘要回退主 agent 模型或零成本索引摘要");
|
|
4993
5036
|
return;
|
|
@@ -4999,16 +5042,16 @@ function _s(e) {
|
|
|
4999
5042
|
return !l && c && (l = await f(c, {
|
|
5000
5043
|
temperature: n,
|
|
5001
5044
|
maxTokens: r
|
|
5002
|
-
})),
|
|
5045
|
+
})), ys(await l.invoke([new o("你是对话历史压缩助手。把下面按轮次索引的对话要点,改写成一段连贯、紧凑的中文摘要,保留关键事实、用户意图与已用工具,不要编造。直接输出摘要正文。"), new a(e)], { signal: t.signal })).trim();
|
|
5003
5046
|
} finally {
|
|
5004
5047
|
clearTimeout(s);
|
|
5005
5048
|
}
|
|
5006
5049
|
};
|
|
5007
5050
|
}
|
|
5008
|
-
function
|
|
5051
|
+
function xs(e) {
|
|
5009
5052
|
let t = e.titleLlm ?? e.summaryLlm ?? e.llm;
|
|
5010
5053
|
if (!t) return;
|
|
5011
|
-
let n =
|
|
5054
|
+
let n = vs(t) ? t : null, r = vs(t) ? null : t;
|
|
5012
5055
|
if (r && !r.apiKey) return;
|
|
5013
5056
|
let i = n;
|
|
5014
5057
|
return async (e) => {
|
|
@@ -5017,7 +5060,7 @@ function vs(e) {
|
|
|
5017
5060
|
return !i && r && (i = await f(r, {
|
|
5018
5061
|
temperature: 0,
|
|
5019
5062
|
maxTokens: 30
|
|
5020
|
-
})),
|
|
5063
|
+
})), ys(await i.invoke([new o("根据以下对话的主旨,生成一个简短的中文标题(不超过15个字,不要标点和引号,直接输出标题文字)。"), new a(t)], { signal: n.signal })).trim().replace(/^["'""「『]|["'""」』]$/g, "").split("\n")[0].slice(0, 20);
|
|
5021
5064
|
} catch {
|
|
5022
5065
|
return "";
|
|
5023
5066
|
} finally {
|
|
@@ -5025,10 +5068,10 @@ function vs(e) {
|
|
|
5025
5068
|
}
|
|
5026
5069
|
};
|
|
5027
5070
|
}
|
|
5028
|
-
function
|
|
5071
|
+
function Ss() {
|
|
5029
5072
|
return `call_dec_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
|
|
5030
5073
|
}
|
|
5031
|
-
function
|
|
5074
|
+
function Cs(e) {
|
|
5032
5075
|
let t = e.match(/```(?:json)?\s*([\s\S]*?)```/), n = t ? t[1] : e, r = n.indexOf("{"), i = n.lastIndexOf("}");
|
|
5033
5076
|
if (r < 0 || i < 0 || i <= r) return null;
|
|
5034
5077
|
try {
|
|
@@ -5037,21 +5080,21 @@ function bs(e) {
|
|
|
5037
5080
|
return null;
|
|
5038
5081
|
}
|
|
5039
5082
|
}
|
|
5040
|
-
function
|
|
5083
|
+
function ws(e) {
|
|
5041
5084
|
if (!e) return null;
|
|
5042
|
-
let t =
|
|
5085
|
+
let t = Cs(e);
|
|
5043
5086
|
if (t == null) return null;
|
|
5044
|
-
let n =
|
|
5087
|
+
let n = gs.safeParse(t);
|
|
5045
5088
|
return n.success ? n.data : null;
|
|
5046
5089
|
}
|
|
5047
|
-
async function
|
|
5090
|
+
async function Ts(e, t, n, r) {
|
|
5048
5091
|
let i = [...n];
|
|
5049
5092
|
for (let n = 0; n < 3; n++) {
|
|
5050
5093
|
let n = await e.invoke(i, { signal: r }), a = n?.tool_calls ?? [];
|
|
5051
|
-
if (!a.length) return
|
|
5094
|
+
if (!a.length) return ys(n).trim();
|
|
5052
5095
|
i = [...i, n];
|
|
5053
5096
|
for (let e of a) {
|
|
5054
|
-
let n = e.id ??
|
|
5097
|
+
let n = e.id ?? Ss();
|
|
5055
5098
|
try {
|
|
5056
5099
|
let r = await t.invoke(e.args ?? {}), a = typeof r == "string" ? r : r?.content ?? JSON.stringify(r);
|
|
5057
5100
|
i = [...i, new s({
|
|
@@ -5068,10 +5111,10 @@ async function Ss(e, t, n, r) {
|
|
|
5068
5111
|
}
|
|
5069
5112
|
return "";
|
|
5070
5113
|
}
|
|
5071
|
-
function
|
|
5114
|
+
function Es(e) {
|
|
5072
5115
|
let t = e.summaryLlm ?? e.llm;
|
|
5073
5116
|
if (!t) return;
|
|
5074
|
-
let n =
|
|
5117
|
+
let n = vs(t) ? t : null, r = vs(t) ? null : t;
|
|
5075
5118
|
if (r && !r.apiKey) return;
|
|
5076
5119
|
let i = e.decisionTimeoutMs ?? 6e3, s = e.decisionMaxTokens ?? 2048, c = n;
|
|
5077
5120
|
return async (e) => {
|
|
@@ -5083,12 +5126,12 @@ function Cs(e) {
|
|
|
5083
5126
|
}));
|
|
5084
5127
|
let n = c;
|
|
5085
5128
|
if (typeof n.bindTools != "function") return null;
|
|
5086
|
-
let i =
|
|
5129
|
+
let i = hs({
|
|
5087
5130
|
getMessages: e.getMessages,
|
|
5088
5131
|
getSnapshot: e.getSnapshot,
|
|
5089
5132
|
contextWindow: e.contextWindow
|
|
5090
5133
|
}), 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)。`)];
|
|
5091
|
-
return
|
|
5134
|
+
return ws(await Ts(l, i, d, t.signal)) || ws(await Ts(l, i, [...d, new a("上一次输出无效(JSON 解析失败或 schema 校验不通过)。请只输出符合 schema 的压缩决策 JSON,不要多余文字/markdown 代码块。")], t.signal));
|
|
5092
5135
|
} catch {
|
|
5093
5136
|
return null;
|
|
5094
5137
|
} finally {
|
|
@@ -5096,22 +5139,22 @@ function Cs(e) {
|
|
|
5096
5139
|
}
|
|
5097
5140
|
};
|
|
5098
5141
|
}
|
|
5099
|
-
function
|
|
5100
|
-
let t = e.llm, n =
|
|
5142
|
+
function Ds(e) {
|
|
5143
|
+
let t = e.llm, n = vs(e.llm) ? void 0 : e.llm;
|
|
5101
5144
|
return {
|
|
5102
5145
|
modelCaps: ni({
|
|
5103
5146
|
model: n?.model ?? t?.model ?? t?.modelName,
|
|
5104
5147
|
contextWindow: e.contextWindow ?? n?.contextWindow ?? t?.contextWindow,
|
|
5105
5148
|
maxOutputTokens: e.maxOutputTokens ?? n?.maxOutputTokens ?? t?.maxOutputTokens
|
|
5106
5149
|
}),
|
|
5107
|
-
summaryLlmInvoke:
|
|
5108
|
-
titleLlmInvoke:
|
|
5109
|
-
compressDecisionInvoke:
|
|
5150
|
+
summaryLlmInvoke: bs(e),
|
|
5151
|
+
titleLlmInvoke: xs(e),
|
|
5152
|
+
compressDecisionInvoke: Es(e)
|
|
5110
5153
|
};
|
|
5111
5154
|
}
|
|
5112
5155
|
//#endregion
|
|
5113
5156
|
//#region src/core/sdk/conflictManager.ts
|
|
5114
|
-
function
|
|
5157
|
+
function Os(e) {
|
|
5115
5158
|
let t = /* @__PURE__ */ Ot(null), n = 0;
|
|
5116
5159
|
function r(r) {
|
|
5117
5160
|
return new Promise((i) => {
|
|
@@ -5142,7 +5185,7 @@ function Ts(e) {
|
|
|
5142
5185
|
}
|
|
5143
5186
|
//#endregion
|
|
5144
5187
|
//#region src/core/utils/id.ts
|
|
5145
|
-
function
|
|
5188
|
+
function ks() {
|
|
5146
5189
|
try {
|
|
5147
5190
|
if (typeof crypto < "u" && typeof crypto.randomUUID == "function") return crypto.randomUUID();
|
|
5148
5191
|
} catch {}
|
|
@@ -5150,7 +5193,7 @@ function Es() {
|
|
|
5150
5193
|
}
|
|
5151
5194
|
//#endregion
|
|
5152
5195
|
//#region src/core/backends/storage.ts
|
|
5153
|
-
var
|
|
5196
|
+
var As = "chat-sdk", js = 50 * 1024 * 1024, Ms = 4 * 1024 * 1024, Ns = 10 * 1024 * 1024, Ps = .9, Fs = 500, Is = 300, Ls = "__meta__", Rs = "v:1", zs = [
|
|
5154
5197
|
"messages",
|
|
5155
5198
|
"vfs",
|
|
5156
5199
|
"todos",
|
|
@@ -5161,51 +5204,51 @@ var Ds = "chat-sdk", Os = 50 * 1024 * 1024, ks = 4 * 1024 * 1024, As = 10 * 1024
|
|
|
5161
5204
|
"workingMemory",
|
|
5162
5205
|
"focus"
|
|
5163
5206
|
];
|
|
5164
|
-
function
|
|
5165
|
-
return e === "local" || e === "session" ?
|
|
5207
|
+
function Bs(e) {
|
|
5208
|
+
return e === "local" || e === "session" ? Ms : js;
|
|
5166
5209
|
}
|
|
5167
|
-
function
|
|
5210
|
+
function Vs(e) {
|
|
5168
5211
|
if (typeof e != "object" || !e) return !1;
|
|
5169
5212
|
let t = e;
|
|
5170
5213
|
return t.name === "QuotaExceededError" || t.name === "NS_ERROR_DOM_QUOTA_REACHED" || t.code === 22 || t.code === 1014;
|
|
5171
5214
|
}
|
|
5172
|
-
function
|
|
5215
|
+
function Hs(e, t, n, r) {
|
|
5173
5216
|
return [
|
|
5174
|
-
|
|
5217
|
+
Rs,
|
|
5175
5218
|
e,
|
|
5176
5219
|
t,
|
|
5177
5220
|
n,
|
|
5178
5221
|
r
|
|
5179
5222
|
].join("::");
|
|
5180
5223
|
}
|
|
5181
|
-
function
|
|
5224
|
+
function Us(e, t, n) {
|
|
5182
5225
|
return [
|
|
5183
|
-
|
|
5226
|
+
Rs,
|
|
5184
5227
|
e,
|
|
5185
5228
|
t,
|
|
5186
5229
|
n
|
|
5187
5230
|
].join("::") + "::";
|
|
5188
5231
|
}
|
|
5189
|
-
function
|
|
5232
|
+
function Ws(e, t) {
|
|
5190
5233
|
return [
|
|
5191
|
-
|
|
5234
|
+
Rs,
|
|
5192
5235
|
e,
|
|
5193
5236
|
t
|
|
5194
5237
|
].join("::") + "::";
|
|
5195
5238
|
}
|
|
5196
|
-
function
|
|
5197
|
-
return [
|
|
5239
|
+
function Gs(e) {
|
|
5240
|
+
return [Rs, e].join("::") + "::";
|
|
5198
5241
|
}
|
|
5199
|
-
var
|
|
5200
|
-
function
|
|
5201
|
-
|
|
5242
|
+
var Ks = null;
|
|
5243
|
+
function qs(e) {
|
|
5244
|
+
Ks ||= new TextEncoder();
|
|
5202
5245
|
try {
|
|
5203
|
-
return
|
|
5246
|
+
return Ks.encode(JSON.stringify(e)).length;
|
|
5204
5247
|
} catch {
|
|
5205
5248
|
return 0;
|
|
5206
5249
|
}
|
|
5207
5250
|
}
|
|
5208
|
-
function
|
|
5251
|
+
function Js(e, t, n) {
|
|
5209
5252
|
let r = e.reduce((e, t) => e + t.bytes, 0);
|
|
5210
5253
|
if (r <= t) return [];
|
|
5211
5254
|
let i = t * n, a = [...e].sort((e, t) => e.lastAccessed - t.lastAccessed), o = [];
|
|
@@ -5215,7 +5258,7 @@ function Gs(e, t, n) {
|
|
|
5215
5258
|
}
|
|
5216
5259
|
return o;
|
|
5217
5260
|
}
|
|
5218
|
-
function
|
|
5261
|
+
function Ys() {
|
|
5219
5262
|
let e = /* @__PURE__ */ new Map();
|
|
5220
5263
|
return {
|
|
5221
5264
|
async get(t) {
|
|
@@ -5235,7 +5278,7 @@ function Ks() {
|
|
|
5235
5278
|
}
|
|
5236
5279
|
};
|
|
5237
5280
|
}
|
|
5238
|
-
function
|
|
5281
|
+
function Xs(e) {
|
|
5239
5282
|
return new Promise((t, n) => {
|
|
5240
5283
|
if (typeof indexedDB > "u") {
|
|
5241
5284
|
n(/* @__PURE__ */ Error("indexedDB 不可用"));
|
|
@@ -5296,7 +5339,7 @@ function qs(e) {
|
|
|
5296
5339
|
}, r.onerror = () => n(r.error);
|
|
5297
5340
|
});
|
|
5298
5341
|
}
|
|
5299
|
-
function
|
|
5342
|
+
function Zs(e) {
|
|
5300
5343
|
return {
|
|
5301
5344
|
async get(t) {
|
|
5302
5345
|
let n = e.getItem(t);
|
|
@@ -5341,12 +5384,12 @@ function Js(e) {
|
|
|
5341
5384
|
}
|
|
5342
5385
|
};
|
|
5343
5386
|
}
|
|
5344
|
-
function
|
|
5387
|
+
function Qs(e, t, n) {
|
|
5345
5388
|
let r = (e.get(t) ?? Promise.resolve()).then(n, n);
|
|
5346
5389
|
return e.set(t, r.then(() => void 0, () => void 0)), r;
|
|
5347
5390
|
}
|
|
5348
|
-
function
|
|
5349
|
-
let t = e.dbName ??
|
|
5391
|
+
function $s(e = {}) {
|
|
5392
|
+
let t = e.dbName ?? As, n = e.backend ?? "indexed", r = e.maxBytes ?? Bs(n), i = e.maxBytesPerSession ?? Ns, a = e.evictionWatermark ?? Ps, o = e.debounceMs ?? Fs, s = /* @__PURE__ */ new Set();
|
|
5350
5393
|
function c(e) {
|
|
5351
5394
|
for (let t of s) try {
|
|
5352
5395
|
t(e);
|
|
@@ -5359,16 +5402,16 @@ function Xs(e = {}) {
|
|
|
5359
5402
|
try {
|
|
5360
5403
|
if (n === "indexed") {
|
|
5361
5404
|
if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
|
|
5362
|
-
l = await
|
|
5405
|
+
l = await Xs(t), d(!0);
|
|
5363
5406
|
} else if (n === "session") {
|
|
5364
5407
|
if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
|
|
5365
|
-
l =
|
|
5408
|
+
l = Zs(sessionStorage), d(!0);
|
|
5366
5409
|
} else if (n === "local") {
|
|
5367
5410
|
if (typeof localStorage > "u") throw Error("localStorage 不可用");
|
|
5368
|
-
l =
|
|
5369
|
-
} else l =
|
|
5411
|
+
l = Zs(localStorage), d(!0);
|
|
5412
|
+
} else l = Ys(), d(!1);
|
|
5370
5413
|
} catch (e) {
|
|
5371
|
-
l =
|
|
5414
|
+
l = Ys();
|
|
5372
5415
|
let t = e instanceof Error ? e.message : String(e);
|
|
5373
5416
|
d(!1), Promise.resolve().then(() => c({
|
|
5374
5417
|
type: "degraded",
|
|
@@ -5378,10 +5421,10 @@ function Xs(e = {}) {
|
|
|
5378
5421
|
})();
|
|
5379
5422
|
let p = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map();
|
|
5380
5423
|
function g(e, n, r, a) {
|
|
5381
|
-
let o =
|
|
5382
|
-
return
|
|
5424
|
+
let o = Hs(t, r, a, Ls);
|
|
5425
|
+
return Qs(h, o, async () => {
|
|
5383
5426
|
let t = async () => {
|
|
5384
|
-
let t = await l.get(o), s = await l.get(e), u = s == null ? 0 :
|
|
5427
|
+
let t = await l.get(o), s = await l.get(e), u = s == null ? 0 : qs(s), d = qs(n), f = (t?.bytes ?? 0) + (d - u);
|
|
5385
5428
|
if (f > i) {
|
|
5386
5429
|
c({
|
|
5387
5430
|
type: "quota",
|
|
@@ -5403,12 +5446,12 @@ function Xs(e = {}) {
|
|
|
5403
5446
|
try {
|
|
5404
5447
|
await t();
|
|
5405
5448
|
} catch (e) {
|
|
5406
|
-
if (
|
|
5449
|
+
if (Vs(e) && !u) {
|
|
5407
5450
|
u = !0;
|
|
5408
5451
|
try {
|
|
5409
5452
|
await b();
|
|
5410
5453
|
} catch {}
|
|
5411
|
-
l =
|
|
5454
|
+
l = Ys(), Promise.resolve().then(() => c({
|
|
5412
5455
|
type: "degraded",
|
|
5413
5456
|
reason: "存储配额超限(QuotaExceededError),已淘汰最旧会话并降级内存"
|
|
5414
5457
|
}));
|
|
@@ -5420,7 +5463,7 @@ function Xs(e = {}) {
|
|
|
5420
5463
|
});
|
|
5421
5464
|
}
|
|
5422
5465
|
function _(e, n, r, i) {
|
|
5423
|
-
let a =
|
|
5466
|
+
let a = Hs(t, e, n, r), s = p.get(a);
|
|
5424
5467
|
s && s.resolve();
|
|
5425
5468
|
let c = m.get(a);
|
|
5426
5469
|
return c && clearTimeout(c), new Promise((t) => {
|
|
@@ -5447,15 +5490,15 @@ function Xs(e = {}) {
|
|
|
5447
5490
|
function y() {
|
|
5448
5491
|
v ||= setTimeout(() => {
|
|
5449
5492
|
v = null, b();
|
|
5450
|
-
},
|
|
5493
|
+
}, Is);
|
|
5451
5494
|
}
|
|
5452
5495
|
async function b() {
|
|
5453
5496
|
let e = [];
|
|
5454
|
-
await l.scan(
|
|
5497
|
+
await l.scan(Gs(t), (t, n) => {
|
|
5455
5498
|
t.endsWith("::__meta__") && e.push(n);
|
|
5456
5499
|
});
|
|
5457
|
-
let n =
|
|
5458
|
-
for (let e of n) await l.clearPrefix(
|
|
5500
|
+
let n = Js(e, r, a);
|
|
5501
|
+
for (let e of n) await l.clearPrefix(Us(t, e.agentId, e.sessionId)), c({
|
|
5459
5502
|
type: "evicted",
|
|
5460
5503
|
agentId: e.agentId,
|
|
5461
5504
|
sessionId: e.sessionId,
|
|
@@ -5466,13 +5509,13 @@ function Xs(e = {}) {
|
|
|
5466
5509
|
ready: f,
|
|
5467
5510
|
async listSessions(e) {
|
|
5468
5511
|
let n = [];
|
|
5469
|
-
return await l.scan(
|
|
5512
|
+
return await l.scan(Ws(t, e), (e, t) => {
|
|
5470
5513
|
e.endsWith("::__meta__") && n.push(t);
|
|
5471
5514
|
}), n.sort((e, t) => t.lastAccessed - e.lastAccessed);
|
|
5472
5515
|
},
|
|
5473
5516
|
async load(e, n) {
|
|
5474
|
-
let r =
|
|
5475
|
-
return await
|
|
5517
|
+
let r = Hs(t, e, n, Ls);
|
|
5518
|
+
return await Qs(h, r, async () => {
|
|
5476
5519
|
let i = await l.get(r);
|
|
5477
5520
|
if (!i) return;
|
|
5478
5521
|
let a = {
|
|
@@ -5481,8 +5524,8 @@ function Xs(e = {}) {
|
|
|
5481
5524
|
todos: [],
|
|
5482
5525
|
memory: ""
|
|
5483
5526
|
};
|
|
5484
|
-
for (let r of
|
|
5485
|
-
let i = await l.get(
|
|
5527
|
+
for (let r of zs) {
|
|
5528
|
+
let i = await l.get(Hs(t, e, n, r));
|
|
5486
5529
|
i != null && (a[r] = i);
|
|
5487
5530
|
}
|
|
5488
5531
|
return i.lastAccessed = Date.now(), await l.set(r, i), a;
|
|
@@ -5490,12 +5533,12 @@ function Xs(e = {}) {
|
|
|
5490
5533
|
},
|
|
5491
5534
|
async save(e, t, n) {
|
|
5492
5535
|
let r = [];
|
|
5493
|
-
for (let i of
|
|
5536
|
+
for (let i of zs) n[i] !== void 0 && r.push(_(e, t, i, n[i]));
|
|
5494
5537
|
await Promise.all(r);
|
|
5495
5538
|
},
|
|
5496
5539
|
async updateTitle(e, n, r) {
|
|
5497
|
-
let i =
|
|
5498
|
-
return
|
|
5540
|
+
let i = Hs(t, e, n, Ls);
|
|
5541
|
+
return Qs(h, i, async () => {
|
|
5499
5542
|
let e = await l.get(i);
|
|
5500
5543
|
e && (e.title = r, e.lastAccessed = Date.now(), await l.set(i, e));
|
|
5501
5544
|
});
|
|
@@ -5511,10 +5554,10 @@ function Xs(e = {}) {
|
|
|
5511
5554
|
})), c({ type: "flush" }), await b();
|
|
5512
5555
|
},
|
|
5513
5556
|
async deleteSession(e, n) {
|
|
5514
|
-
await l.clearPrefix(
|
|
5557
|
+
await l.clearPrefix(Us(t, e, n));
|
|
5515
5558
|
},
|
|
5516
5559
|
async createSession(e, n, r) {
|
|
5517
|
-
let i = r ??
|
|
5560
|
+
let i = r ?? ks(), a = Date.now(), o = {
|
|
5518
5561
|
agentId: e,
|
|
5519
5562
|
sessionId: i,
|
|
5520
5563
|
createdAt: a,
|
|
@@ -5522,7 +5565,7 @@ function Xs(e = {}) {
|
|
|
5522
5565
|
bytes: 0,
|
|
5523
5566
|
title: n
|
|
5524
5567
|
};
|
|
5525
|
-
return await l.set(
|
|
5568
|
+
return await l.set(Hs(t, e, i, Ls), o), i;
|
|
5526
5569
|
},
|
|
5527
5570
|
onEvent(e) {
|
|
5528
5571
|
s.add(e);
|
|
@@ -5537,15 +5580,15 @@ function Xs(e = {}) {
|
|
|
5537
5580
|
}
|
|
5538
5581
|
//#endregion
|
|
5539
5582
|
//#region src/core/sdk/optionsResolver.ts
|
|
5540
|
-
function
|
|
5541
|
-
return e === void 0 || e === !1 ? null : typeof e == "string" ?
|
|
5583
|
+
function ec(e) {
|
|
5584
|
+
return e === void 0 || e === !1 ? null : typeof e == "string" ? $s({ backend: e }) : e.enabled === !1 ? null : $s(e);
|
|
5542
5585
|
}
|
|
5543
|
-
function
|
|
5586
|
+
function tc(e) {
|
|
5544
5587
|
return e.dialog ?? {};
|
|
5545
5588
|
}
|
|
5546
5589
|
//#endregion
|
|
5547
5590
|
//#region src/core/capabilities.ts
|
|
5548
|
-
var
|
|
5591
|
+
var nc = [
|
|
5549
5592
|
{
|
|
5550
5593
|
name: "dataOps",
|
|
5551
5594
|
defaultOn: !0
|
|
@@ -5634,13 +5677,13 @@ var $s = [
|
|
|
5634
5677
|
requires: ["summarization"]
|
|
5635
5678
|
}
|
|
5636
5679
|
];
|
|
5637
|
-
function
|
|
5680
|
+
function rc(e) {
|
|
5638
5681
|
let t = {};
|
|
5639
|
-
for (let n of
|
|
5682
|
+
for (let n of nc) {
|
|
5640
5683
|
let r = e?.[n.name];
|
|
5641
5684
|
t[n.name] = n.defaultOn ? r !== !1 : r === !0;
|
|
5642
5685
|
}
|
|
5643
|
-
for (let e of
|
|
5686
|
+
for (let e of nc) if (e.requires && t[e.name]) {
|
|
5644
5687
|
for (let n of e.requires) if (!t[n]) {
|
|
5645
5688
|
t[e.name] = !1;
|
|
5646
5689
|
break;
|
|
@@ -5650,7 +5693,7 @@ function ec(e) {
|
|
|
5650
5693
|
}
|
|
5651
5694
|
//#endregion
|
|
5652
5695
|
//#region src/core/sdk/events.ts
|
|
5653
|
-
function
|
|
5696
|
+
function ic(e) {
|
|
5654
5697
|
let t = /* @__PURE__ */ new Set(), n = (n) => {
|
|
5655
5698
|
if (n.type !== "approval_request") {
|
|
5656
5699
|
if (e) try {
|
|
@@ -5676,7 +5719,7 @@ function tc(e) {
|
|
|
5676
5719
|
}
|
|
5677
5720
|
//#endregion
|
|
5678
5721
|
//#region src/core/sdk/contextPreset.ts
|
|
5679
|
-
var
|
|
5722
|
+
var ac = {
|
|
5680
5723
|
auto: {
|
|
5681
5724
|
summaryThresholdRatio: .5,
|
|
5682
5725
|
windowRatio: .4,
|
|
@@ -5704,7 +5747,7 @@ var nc = {
|
|
|
5704
5747
|
enableRecall: !0,
|
|
5705
5748
|
enableLLMSummary: !0
|
|
5706
5749
|
}
|
|
5707
|
-
},
|
|
5750
|
+
}, oc = {
|
|
5708
5751
|
auto: ["describe_data", "read"],
|
|
5709
5752
|
conservative: ["describe_data"],
|
|
5710
5753
|
aggressive: ["describe_data", "read"],
|
|
@@ -5715,8 +5758,8 @@ var nc = {
|
|
|
5715
5758
|
"search_data"
|
|
5716
5759
|
]
|
|
5717
5760
|
};
|
|
5718
|
-
function
|
|
5719
|
-
let n =
|
|
5761
|
+
function sc(e, t) {
|
|
5762
|
+
let n = ac[e.contextPreset ?? "auto"] ?? {}, r = e.contextOptions === !1 ? {} : e.contextOptions ?? {};
|
|
5720
5763
|
return {
|
|
5721
5764
|
...n,
|
|
5722
5765
|
...r,
|
|
@@ -5726,7 +5769,7 @@ function ic(e, t) {
|
|
|
5726
5769
|
}
|
|
5727
5770
|
//#endregion
|
|
5728
5771
|
//#region src/core/sdk/middlewareStack.ts
|
|
5729
|
-
var
|
|
5772
|
+
var cc = {
|
|
5730
5773
|
dataHint: 10,
|
|
5731
5774
|
usageHints: 20,
|
|
5732
5775
|
todos: 30,
|
|
@@ -5743,29 +5786,29 @@ var ac = {
|
|
|
5743
5786
|
subagents: 140,
|
|
5744
5787
|
augmentSystem: 150
|
|
5745
5788
|
};
|
|
5746
|
-
function
|
|
5789
|
+
function lc(e) {
|
|
5747
5790
|
return e.map((e, t) => ({
|
|
5748
5791
|
m: e,
|
|
5749
5792
|
i: t,
|
|
5750
|
-
p:
|
|
5793
|
+
p: cc[e.name] ?? Infinity
|
|
5751
5794
|
})).sort((e, t) => e.p - t.p || e.i - t.i).map((e) => e.m);
|
|
5752
5795
|
}
|
|
5753
5796
|
//#endregion
|
|
5754
5797
|
//#region src/core/tools/jsonUtils.ts
|
|
5755
|
-
var
|
|
5798
|
+
var uc = /* @__PURE__ */ new Set([
|
|
5756
5799
|
"__proto__",
|
|
5757
5800
|
"constructor",
|
|
5758
5801
|
"prototype"
|
|
5759
5802
|
]);
|
|
5760
|
-
function
|
|
5761
|
-
return e.split(".").some((e) =>
|
|
5803
|
+
function dc(e) {
|
|
5804
|
+
return e.split(".").some((e) => uc.has(e));
|
|
5762
5805
|
}
|
|
5763
|
-
function
|
|
5764
|
-
if (!(!t || typeof t != "object" || Array.isArray(t))) for (let n of Object.keys(t))
|
|
5806
|
+
function fc(e, t) {
|
|
5807
|
+
if (!(!t || typeof t != "object" || Array.isArray(t))) for (let n of Object.keys(t)) uc.has(n) || (e[n] = t[n]);
|
|
5765
5808
|
}
|
|
5766
5809
|
function Z(e, t) {
|
|
5767
5810
|
if (!t) return e;
|
|
5768
|
-
if (
|
|
5811
|
+
if (dc(t)) return;
|
|
5769
5812
|
let n = t.split("."), r = e;
|
|
5770
5813
|
for (let e of n) {
|
|
5771
5814
|
if (r == null) return;
|
|
@@ -5773,8 +5816,8 @@ function Z(e, t) {
|
|
|
5773
5816
|
}
|
|
5774
5817
|
return r;
|
|
5775
5818
|
}
|
|
5776
|
-
function
|
|
5777
|
-
if (!t ||
|
|
5819
|
+
function pc(e, t, n) {
|
|
5820
|
+
if (!t || dc(t)) return;
|
|
5778
5821
|
let r = t.split("."), i = e;
|
|
5779
5822
|
for (let e = 0; e < r.length - 1; e++) {
|
|
5780
5823
|
let t = r[e];
|
|
@@ -5782,8 +5825,8 @@ function uc(e, t, n) {
|
|
|
5782
5825
|
}
|
|
5783
5826
|
i[r[r.length - 1]] = n;
|
|
5784
5827
|
}
|
|
5785
|
-
function
|
|
5786
|
-
if (!t ||
|
|
5828
|
+
function mc(e, t) {
|
|
5829
|
+
if (!t || dc(t)) return !1;
|
|
5787
5830
|
let n = t.split("."), r = e;
|
|
5788
5831
|
for (let e = 0; e < n.length - 1; e++) {
|
|
5789
5832
|
if (r == null) return !1;
|
|
@@ -5792,10 +5835,10 @@ function dc(e, t) {
|
|
|
5792
5835
|
let i = n[n.length - 1];
|
|
5793
5836
|
return r == null || !(i in r) ? !1 : (Array.isArray(r) && /^\d+$/.test(i) ? r.splice(Number(i), 1) : delete r[i], !0);
|
|
5794
5837
|
}
|
|
5795
|
-
function
|
|
5838
|
+
function hc(e) {
|
|
5796
5839
|
return e === void 0 ? void 0 : JSON.parse(JSON.stringify(e));
|
|
5797
5840
|
}
|
|
5798
|
-
function
|
|
5841
|
+
function gc(e) {
|
|
5799
5842
|
if (typeof e != "string") return { parsed: e };
|
|
5800
5843
|
let t = e.trim();
|
|
5801
5844
|
if (!t) return { parsed: e };
|
|
@@ -5806,20 +5849,20 @@ function pc(e) {
|
|
|
5806
5849
|
return n ? { parseError: t } : { parsed: e };
|
|
5807
5850
|
}
|
|
5808
5851
|
}
|
|
5809
|
-
function
|
|
5852
|
+
function _c(e, t) {
|
|
5810
5853
|
if (typeof e != "object" || !e) return e;
|
|
5811
5854
|
let n = new Set(t);
|
|
5812
|
-
if (Array.isArray(e)) return e.map((e) =>
|
|
5855
|
+
if (Array.isArray(e)) return e.map((e) => _c(e, t));
|
|
5813
5856
|
let r = {};
|
|
5814
5857
|
for (let t of Object.keys(e)) n.has(t) && (r[t] = e[t]);
|
|
5815
5858
|
return r;
|
|
5816
5859
|
}
|
|
5817
|
-
function
|
|
5860
|
+
function vc(e, t) {
|
|
5818
5861
|
if (typeof e != "object" || !e) return e;
|
|
5819
5862
|
if (t <= 0) return Array.isArray(e) ? `[...${e.length}]` : "{...}";
|
|
5820
|
-
if (Array.isArray(e)) return e.map((e) =>
|
|
5863
|
+
if (Array.isArray(e)) return e.map((e) => vc(e, t - 1));
|
|
5821
5864
|
let n = {};
|
|
5822
|
-
for (let r of Object.keys(e)) n[r] =
|
|
5865
|
+
for (let r of Object.keys(e)) n[r] = vc(e[r], t - 1);
|
|
5823
5866
|
return n;
|
|
5824
5867
|
}
|
|
5825
5868
|
function Q(e, t = Infinity) {
|
|
@@ -5841,7 +5884,7 @@ function Q(e, t = Infinity) {
|
|
|
5841
5884
|
}
|
|
5842
5885
|
return r.length > t && (r = r.slice(0, t) + `\n…[已截断,原长度 ${r.length}]`), r;
|
|
5843
5886
|
}
|
|
5844
|
-
function
|
|
5887
|
+
function yc(e, t = 0) {
|
|
5845
5888
|
let n = 3735928559 ^ t, r = 1103547991 ^ t;
|
|
5846
5889
|
for (let t = 0; t < e.length; t++) {
|
|
5847
5890
|
let i = e.charCodeAt(t);
|
|
@@ -5850,31 +5893,31 @@ function gc(e, t = 0) {
|
|
|
5850
5893
|
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);
|
|
5851
5894
|
}
|
|
5852
5895
|
function $(e) {
|
|
5853
|
-
return
|
|
5896
|
+
return yc(Q(e)).toString(36);
|
|
5854
5897
|
}
|
|
5855
|
-
function
|
|
5856
|
-
if (t === "set") return n ? (
|
|
5857
|
-
if (t === "remove") return n ? (
|
|
5898
|
+
function bc(e, t, n, r) {
|
|
5899
|
+
if (t === "set") return n ? (pc(e, n, r), null) : "set 操作需要 jsonPath(整体替换请用 set_data)";
|
|
5900
|
+
if (t === "remove") return n ? (mc(e, n), null) : "remove 操作需要 jsonPath";
|
|
5858
5901
|
if (t === "merge") {
|
|
5859
5902
|
let t = n ? Z(e, n) : e;
|
|
5860
|
-
return typeof t != "object" || !t || Array.isArray(t) ? `merge 目标${n ? `(${n})` : "(根)"}不是对象` : (
|
|
5903
|
+
return typeof t != "object" || !t || Array.isArray(t) ? `merge 目标${n ? `(${n})` : "(根)"}不是对象` : (fc(t, r), null);
|
|
5861
5904
|
}
|
|
5862
5905
|
let i = n ? Z(e, n) : e;
|
|
5863
5906
|
return Array.isArray(i) ? (Array.isArray(r) ? i.push(...r) : i.push(r), null) : `append 目标${n ? `(${n})` : "(根)"}不是数组`;
|
|
5864
5907
|
}
|
|
5865
|
-
function
|
|
5866
|
-
if (t === "set")
|
|
5867
|
-
else if (t === "remove")
|
|
5868
|
-
else if (t === "merge")
|
|
5908
|
+
function xc(e, t, n, r) {
|
|
5909
|
+
if (t === "set") pc(e, n, r);
|
|
5910
|
+
else if (t === "remove") mc(e, n);
|
|
5911
|
+
else if (t === "merge") fc(n ? Z(e, n) : e, r);
|
|
5869
5912
|
else {
|
|
5870
5913
|
let t = n ? Z(e, n) : e;
|
|
5871
5914
|
Array.isArray(r) ? t.push(...r) : t.push(r);
|
|
5872
5915
|
}
|
|
5873
5916
|
}
|
|
5874
|
-
function
|
|
5875
|
-
typeof e == "object" && e &&
|
|
5917
|
+
function Sc(e, t) {
|
|
5918
|
+
typeof e == "object" && e && Cc(e, t);
|
|
5876
5919
|
}
|
|
5877
|
-
function
|
|
5920
|
+
function Cc(e, t) {
|
|
5878
5921
|
if (Array.isArray(e)) {
|
|
5879
5922
|
e.length = 0, Array.isArray(t) && e.push(...t);
|
|
5880
5923
|
return;
|
|
@@ -5883,7 +5926,7 @@ function bc(e, t) {
|
|
|
5883
5926
|
for (let t of Object.keys(e)) t in n || delete e[t];
|
|
5884
5927
|
for (let t of Object.keys(n)) e[t] = n[t];
|
|
5885
5928
|
}
|
|
5886
|
-
function
|
|
5929
|
+
function wc(e, t, n = "") {
|
|
5887
5930
|
let r = [];
|
|
5888
5931
|
if (!(typeof e == "object" && e) || !(typeof t == "object" && t) || Array.isArray(e) !== Array.isArray(t)) return e !== t && r.push({
|
|
5889
5932
|
path: n || "(root)",
|
|
@@ -5902,14 +5945,14 @@ function xc(e, t, n = "") {
|
|
|
5902
5945
|
path: i,
|
|
5903
5946
|
from: e[a],
|
|
5904
5947
|
to: void 0
|
|
5905
|
-
}) : r.push(...
|
|
5948
|
+
}) : r.push(...wc(e[a], t[a], i));
|
|
5906
5949
|
}
|
|
5907
5950
|
return r;
|
|
5908
5951
|
}
|
|
5909
5952
|
let i = e, a = t, o = /* @__PURE__ */ new Set([...Object.keys(i), ...Object.keys(a)]);
|
|
5910
5953
|
for (let e of o) {
|
|
5911
5954
|
let t = n ? `${n}.${e}` : e;
|
|
5912
|
-
e in i ? e in a ? r.push(...
|
|
5955
|
+
e in i ? e in a ? r.push(...wc(i[e], a[e], t)) : r.push({
|
|
5913
5956
|
path: t,
|
|
5914
5957
|
from: i[e],
|
|
5915
5958
|
to: void 0
|
|
@@ -5921,48 +5964,48 @@ function xc(e, t, n = "") {
|
|
|
5921
5964
|
}
|
|
5922
5965
|
return r;
|
|
5923
5966
|
}
|
|
5924
|
-
var
|
|
5967
|
+
var Tc = {
|
|
5925
5968
|
largeResults: 4 * 1024 * 1024,
|
|
5926
5969
|
drafts: 2 * 1024 * 1024,
|
|
5927
5970
|
userFiles: 2 * 1024 * 1024,
|
|
5928
5971
|
resources: 4 * 1024 * 1024
|
|
5929
|
-
},
|
|
5972
|
+
}, Ec = [
|
|
5930
5973
|
"largeResults",
|
|
5931
5974
|
"drafts",
|
|
5932
5975
|
"userFiles",
|
|
5933
5976
|
"resources"
|
|
5934
|
-
],
|
|
5935
|
-
function
|
|
5977
|
+
], Dc = .9;
|
|
5978
|
+
function Oc(e, t = {}) {
|
|
5936
5979
|
let n = Object.create(null);
|
|
5937
|
-
if (e) for (let [t, r] of Object.entries(e)) n[
|
|
5980
|
+
if (e) for (let [t, r] of Object.entries(e)) n[Mc(t)] = {
|
|
5938
5981
|
content: r,
|
|
5939
|
-
updatedAt:
|
|
5982
|
+
updatedAt: Pc()
|
|
5940
5983
|
};
|
|
5941
5984
|
let { persist: r } = t, i = t.maxBytes ?? 8388608, a = {
|
|
5942
|
-
...
|
|
5985
|
+
...Tc,
|
|
5943
5986
|
...t.poolBytes ?? {}
|
|
5944
5987
|
};
|
|
5945
5988
|
function o(e) {
|
|
5946
|
-
let t =
|
|
5989
|
+
let t = Mc(e);
|
|
5947
5990
|
return t.startsWith("large_results/") ? "largeResults" : t.startsWith("drafts/") ? "drafts" : t.startsWith("resources/") ? "resources" : "userFiles";
|
|
5948
5991
|
}
|
|
5949
5992
|
function s(e) {
|
|
5950
5993
|
let t = 0;
|
|
5951
|
-
for (let [r, i] of Object.entries(n)) o(r) === e && (t +=
|
|
5994
|
+
for (let [r, i] of Object.entries(n)) o(r) === e && (t += Ac(i.content));
|
|
5952
5995
|
return t;
|
|
5953
5996
|
}
|
|
5954
5997
|
function c() {
|
|
5955
|
-
for (let e of
|
|
5998
|
+
for (let e of Ec) {
|
|
5956
5999
|
let t = a[e];
|
|
5957
6000
|
if (s(e) <= t) continue;
|
|
5958
|
-
let r = t *
|
|
6001
|
+
let r = t * Dc, i = e === "largeResults", c = i && s(e) > t * 1.5;
|
|
5959
6002
|
c && console.warn(`[page-agent-sdk] vfs large_results 池 ${s(e)} > ${Math.round(t * 1.5)}(被引用撑爆)→ 无视 protectedRefs 强制删`);
|
|
5960
6003
|
let l = Object.entries(n).filter(([t]) => o(t) === e).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
|
|
5961
6004
|
for (let [t] of l) if (!(i && !c && u.has(t)) && (delete n[t], s(e) <= r)) break;
|
|
5962
6005
|
}
|
|
5963
|
-
if (
|
|
5964
|
-
let e = i *
|
|
5965
|
-
for (let [i] of r) if (!(o(i) === "largeResults" && !t && u.has(i)) && (delete n[i],
|
|
6006
|
+
if (jc(n) > i) {
|
|
6007
|
+
let e = i * Dc, t = jc(n) > i * 1.5, r = Object.entries(n).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
|
|
6008
|
+
for (let [i] of r) if (!(o(i) === "largeResults" && !t && u.has(i)) && (delete n[i], jc(n) <= e)) break;
|
|
5966
6009
|
}
|
|
5967
6010
|
}
|
|
5968
6011
|
let l = !0, u = /* @__PURE__ */ new Set(), d = null;
|
|
@@ -5998,7 +6041,7 @@ function Tc(e, t = {}) {
|
|
|
5998
6041
|
}
|
|
5999
6042
|
};
|
|
6000
6043
|
return r && (m.hydrate = (e) => {
|
|
6001
|
-
for (let [t, r] of Object.entries(e)) n[
|
|
6044
|
+
for (let [t, r] of Object.entries(e)) n[Mc(t)] = r;
|
|
6002
6045
|
c(), l = !0;
|
|
6003
6046
|
}, m.flush = () => {
|
|
6004
6047
|
d &&= (clearTimeout(d), null), f();
|
|
@@ -6007,19 +6050,19 @@ function Tc(e, t = {}) {
|
|
|
6007
6050
|
p(), l = !0;
|
|
6008
6051
|
}), m;
|
|
6009
6052
|
}
|
|
6010
|
-
var
|
|
6011
|
-
function
|
|
6012
|
-
return
|
|
6053
|
+
var kc = null;
|
|
6054
|
+
function Ac(e) {
|
|
6055
|
+
return kc ||= new TextEncoder(), kc.encode(e).length;
|
|
6013
6056
|
}
|
|
6014
|
-
function
|
|
6057
|
+
function jc(e) {
|
|
6015
6058
|
let t = 0;
|
|
6016
|
-
for (let n of Object.values(e)) t +=
|
|
6059
|
+
for (let n of Object.values(e)) t += Ac(n.content);
|
|
6017
6060
|
return t;
|
|
6018
6061
|
}
|
|
6019
|
-
function
|
|
6062
|
+
function Mc(e) {
|
|
6020
6063
|
return e.replace(/^\/+/, "").replace(/\/+/g, "/");
|
|
6021
6064
|
}
|
|
6022
|
-
function
|
|
6065
|
+
function Nc(e) {
|
|
6023
6066
|
let t = "";
|
|
6024
6067
|
for (let n = 0; n < e.length; n++) {
|
|
6025
6068
|
let r = e[n];
|
|
@@ -6027,10 +6070,10 @@ function Ac(e) {
|
|
|
6027
6070
|
}
|
|
6028
6071
|
return RegExp("^" + t + "$");
|
|
6029
6072
|
}
|
|
6030
|
-
function
|
|
6073
|
+
function Pc() {
|
|
6031
6074
|
return Date.now();
|
|
6032
6075
|
}
|
|
6033
|
-
var
|
|
6076
|
+
var Fc = [
|
|
6034
6077
|
"vfs_read",
|
|
6035
6078
|
"vfs_write",
|
|
6036
6079
|
"vfs_edit",
|
|
@@ -6041,10 +6084,10 @@ var Mc = [
|
|
|
6041
6084
|
"vfs_json_patch",
|
|
6042
6085
|
"vfs_rm"
|
|
6043
6086
|
];
|
|
6044
|
-
function
|
|
6087
|
+
function Ic(e) {
|
|
6045
6088
|
return [
|
|
6046
6089
|
r(async ({ path: t, offset: n, limit: r }) => {
|
|
6047
|
-
let i = e.files[
|
|
6090
|
+
let i = e.files[Mc(t)];
|
|
6048
6091
|
if (!i) return Y({
|
|
6049
6092
|
code: "NOT_FOUND",
|
|
6050
6093
|
path: t,
|
|
@@ -6073,9 +6116,9 @@ function Nc(e) {
|
|
|
6073
6116
|
hint: "jsonString=true 要求 content 是合法 JSON;检查引号/逗号/括号配对;或省略 jsonString 写纯文本"
|
|
6074
6117
|
});
|
|
6075
6118
|
}
|
|
6076
|
-
return e.files[
|
|
6119
|
+
return e.files[Mc(t)] = {
|
|
6077
6120
|
content: n,
|
|
6078
|
-
updatedAt:
|
|
6121
|
+
updatedAt: Pc()
|
|
6079
6122
|
}, `已写入 ${t}(${n.length} 字符)${r ? "(JSON 校验通过)" : ""}`;
|
|
6080
6123
|
}, {
|
|
6081
6124
|
name: "vfs_write",
|
|
@@ -6087,7 +6130,7 @@ function Nc(e) {
|
|
|
6087
6130
|
})
|
|
6088
6131
|
}),
|
|
6089
6132
|
r(async ({ path: t, oldString: n, newString: r }) => {
|
|
6090
|
-
let i =
|
|
6133
|
+
let i = Mc(t), a = e.files[i];
|
|
6091
6134
|
if (!a) return Y({
|
|
6092
6135
|
code: "NOT_FOUND",
|
|
6093
6136
|
path: t,
|
|
@@ -6117,7 +6160,7 @@ function Nc(e) {
|
|
|
6117
6160
|
}
|
|
6118
6161
|
return e.files[i] = {
|
|
6119
6162
|
content: a.content.replace(n, r),
|
|
6120
|
-
updatedAt:
|
|
6163
|
+
updatedAt: Pc()
|
|
6121
6164
|
}, `已替换 ${t} 中 1 处。`;
|
|
6122
6165
|
}, {
|
|
6123
6166
|
name: "vfs_edit",
|
|
@@ -6139,7 +6182,7 @@ function Nc(e) {
|
|
|
6139
6182
|
r(async ({ pattern: t }) => {
|
|
6140
6183
|
let n;
|
|
6141
6184
|
try {
|
|
6142
|
-
n =
|
|
6185
|
+
n = Nc(t);
|
|
6143
6186
|
} catch (e) {
|
|
6144
6187
|
return Y({
|
|
6145
6188
|
code: "GLOB_INVALID",
|
|
@@ -6168,7 +6211,7 @@ function Nc(e) {
|
|
|
6168
6211
|
details: { pattern: t }
|
|
6169
6212
|
});
|
|
6170
6213
|
}
|
|
6171
|
-
let i = n ? [
|
|
6214
|
+
let i = n ? [Mc(n)] : Object.keys(e.files), a = [];
|
|
6172
6215
|
for (let t of i) {
|
|
6173
6216
|
let n = e.files[t];
|
|
6174
6217
|
n && n.content.split("\n").forEach((e, n) => {
|
|
@@ -6185,7 +6228,7 @@ function Nc(e) {
|
|
|
6185
6228
|
})
|
|
6186
6229
|
}),
|
|
6187
6230
|
r(async ({ path: t, jsonPath: n }) => {
|
|
6188
|
-
let r =
|
|
6231
|
+
let r = Mc(t), i = e.files[r];
|
|
6189
6232
|
if (!i) return Y({
|
|
6190
6233
|
code: "NOT_FOUND",
|
|
6191
6234
|
path: t,
|
|
@@ -6222,7 +6265,7 @@ function Nc(e) {
|
|
|
6222
6265
|
})
|
|
6223
6266
|
}),
|
|
6224
6267
|
r(async ({ path: t, patches: n }) => {
|
|
6225
|
-
let r =
|
|
6268
|
+
let r = Mc(t), i = e.files[r];
|
|
6226
6269
|
if (!i) return Y({
|
|
6227
6270
|
code: "NOT_FOUND",
|
|
6228
6271
|
path: t,
|
|
@@ -6240,9 +6283,9 @@ function Nc(e) {
|
|
|
6240
6283
|
hint: "vfs_json_patch 要求文件内容是合法 JSON"
|
|
6241
6284
|
});
|
|
6242
6285
|
}
|
|
6243
|
-
let o =
|
|
6286
|
+
let o = hc(a), s = [];
|
|
6244
6287
|
for (let e of n) {
|
|
6245
|
-
let n =
|
|
6288
|
+
let n = bc(o, e.op, e.jsonPath, e.value);
|
|
6246
6289
|
if (n) return Y({
|
|
6247
6290
|
code: "PATCH_FAILED",
|
|
6248
6291
|
path: t,
|
|
@@ -6255,7 +6298,7 @@ function Nc(e) {
|
|
|
6255
6298
|
let c = JSON.stringify(o);
|
|
6256
6299
|
return e.files[r] = {
|
|
6257
6300
|
content: c,
|
|
6258
|
-
updatedAt:
|
|
6301
|
+
updatedAt: Pc()
|
|
6259
6302
|
}, `已对 ${t} 应用 ${n.length} 个 patch(影响 ${s.length} 处:${s.join(", ")}),文件现 ${c.length} 字符`;
|
|
6260
6303
|
}, {
|
|
6261
6304
|
name: "vfs_json_patch",
|
|
@@ -6275,7 +6318,7 @@ function Nc(e) {
|
|
|
6275
6318
|
})
|
|
6276
6319
|
}),
|
|
6277
6320
|
r(async ({ path: t }) => {
|
|
6278
|
-
let n =
|
|
6321
|
+
let n = Mc(t);
|
|
6279
6322
|
return e.files[n] ? (delete e.files[n], `已删除 ${t}`) : Y({
|
|
6280
6323
|
code: "NOT_FOUND",
|
|
6281
6324
|
path: t,
|
|
@@ -6289,17 +6332,17 @@ function Nc(e) {
|
|
|
6289
6332
|
})
|
|
6290
6333
|
];
|
|
6291
6334
|
}
|
|
6292
|
-
function
|
|
6335
|
+
function Lc(e) {
|
|
6293
6336
|
return {
|
|
6294
6337
|
name: "vfs",
|
|
6295
|
-
tools:
|
|
6338
|
+
tools: Ic(e),
|
|
6296
6339
|
beforeAgent: () => ({ files: e.files })
|
|
6297
6340
|
};
|
|
6298
6341
|
}
|
|
6299
6342
|
//#endregion
|
|
6300
6343
|
//#region src/core/tools/dataSlotQuery.ts
|
|
6301
|
-
var
|
|
6302
|
-
function
|
|
6344
|
+
var Rc = /[\w$-]/;
|
|
6345
|
+
function zc(e) {
|
|
6303
6346
|
let t = [], n = e.trim(), r = +(n[0] === "$");
|
|
6304
6347
|
for (; r < n.length;) {
|
|
6305
6348
|
let e = n[r];
|
|
@@ -6310,7 +6353,7 @@ function Ic(e) {
|
|
|
6310
6353
|
continue;
|
|
6311
6354
|
}
|
|
6312
6355
|
let e = "";
|
|
6313
|
-
for (; r < n.length &&
|
|
6356
|
+
for (; r < n.length && Rc.test(n[r]);) e += n[r++];
|
|
6314
6357
|
if (!e) throw Error("JSONPath: .. 后缺属性名");
|
|
6315
6358
|
t.push({
|
|
6316
6359
|
type: "descendKey",
|
|
@@ -6323,7 +6366,7 @@ function Ic(e) {
|
|
|
6323
6366
|
continue;
|
|
6324
6367
|
}
|
|
6325
6368
|
let e = "";
|
|
6326
|
-
for (; r < n.length &&
|
|
6369
|
+
for (; r < n.length && Rc.test(n[r]);) e += n[r++];
|
|
6327
6370
|
if (!e) throw Error("JSONPath: . 后缺属性名");
|
|
6328
6371
|
t.push({
|
|
6329
6372
|
type: "key",
|
|
@@ -6379,7 +6422,7 @@ function Ic(e) {
|
|
|
6379
6422
|
}
|
|
6380
6423
|
return t;
|
|
6381
6424
|
}
|
|
6382
|
-
function
|
|
6425
|
+
function Bc(e) {
|
|
6383
6426
|
let t = [], n = 0, r = e.trim();
|
|
6384
6427
|
for (; n < r.length;) {
|
|
6385
6428
|
let e = r[n];
|
|
@@ -6424,7 +6467,7 @@ function Lc(e) {
|
|
|
6424
6467
|
}
|
|
6425
6468
|
return t;
|
|
6426
6469
|
}
|
|
6427
|
-
var
|
|
6470
|
+
var Vc = class {
|
|
6428
6471
|
toks;
|
|
6429
6472
|
item;
|
|
6430
6473
|
pos = 0;
|
|
@@ -6460,12 +6503,12 @@ var Rc = class {
|
|
|
6460
6503
|
return this.next(), e;
|
|
6461
6504
|
}
|
|
6462
6505
|
let e = this.operand(), t = this.peek();
|
|
6463
|
-
return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(),
|
|
6506
|
+
return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(), Wc(t, e, this.operand())) : Hc(e);
|
|
6464
6507
|
}
|
|
6465
6508
|
operand() {
|
|
6466
6509
|
let e = this.next();
|
|
6467
6510
|
if (e === void 0) throw Error("过滤表达式:缺操作数");
|
|
6468
|
-
if (e.startsWith("@")) return
|
|
6511
|
+
if (e.startsWith("@")) return Uc(e, this.item);
|
|
6469
6512
|
if (e[0] === "'" || e[0] === "\"") return e.slice(1, -1);
|
|
6470
6513
|
if (e === "true") return !0;
|
|
6471
6514
|
if (e === "false") return !1;
|
|
@@ -6475,10 +6518,10 @@ var Rc = class {
|
|
|
6475
6518
|
throw Error(`过滤表达式:未知操作数 '${e}'`);
|
|
6476
6519
|
}
|
|
6477
6520
|
};
|
|
6478
|
-
function
|
|
6521
|
+
function Hc(e) {
|
|
6479
6522
|
return !!e && e !== 0 && e !== "" && e !== null;
|
|
6480
6523
|
}
|
|
6481
|
-
function
|
|
6524
|
+
function Uc(e, t) {
|
|
6482
6525
|
let n = e.split(".").filter((e) => e && e !== "@"), r = t;
|
|
6483
6526
|
for (let e of n) {
|
|
6484
6527
|
if (typeof r != "object" || !r) return;
|
|
@@ -6486,7 +6529,7 @@ function Bc(e, t) {
|
|
|
6486
6529
|
}
|
|
6487
6530
|
return r;
|
|
6488
6531
|
}
|
|
6489
|
-
function
|
|
6532
|
+
function Wc(e, t, n) {
|
|
6490
6533
|
switch (e) {
|
|
6491
6534
|
case "==": return t === n;
|
|
6492
6535
|
case "!=": return t !== n;
|
|
@@ -6497,47 +6540,47 @@ function Vc(e, t, n) {
|
|
|
6497
6540
|
default: return !1;
|
|
6498
6541
|
}
|
|
6499
6542
|
}
|
|
6500
|
-
function
|
|
6501
|
-
return new
|
|
6543
|
+
function Gc(e, t) {
|
|
6544
|
+
return new Vc(Bc(e), t).parse();
|
|
6502
6545
|
}
|
|
6503
|
-
function
|
|
6546
|
+
function Kc(e, t) {
|
|
6504
6547
|
return e ? `${e}.${t}` : String(t);
|
|
6505
6548
|
}
|
|
6506
|
-
function
|
|
6549
|
+
function qc(e, t) {
|
|
6507
6550
|
let n = [{
|
|
6508
6551
|
path: "",
|
|
6509
6552
|
value: e
|
|
6510
6553
|
}];
|
|
6511
|
-
for (let e of
|
|
6554
|
+
for (let e of zc(t)) {
|
|
6512
6555
|
let t = [];
|
|
6513
6556
|
if (e.type === "key") for (let r of n) r.value != null && typeof r.value == "object" && e.key in r.value && t.push({
|
|
6514
|
-
path:
|
|
6557
|
+
path: Kc(r.path, e.key),
|
|
6515
6558
|
value: r.value[e.key]
|
|
6516
6559
|
});
|
|
6517
6560
|
else if (e.type === "index") {
|
|
6518
6561
|
for (let r of n) if (Array.isArray(r.value)) {
|
|
6519
6562
|
let n = r.value[e.index];
|
|
6520
6563
|
e.index >= 0 && e.index < r.value.length && t.push({
|
|
6521
|
-
path:
|
|
6564
|
+
path: Kc(r.path, e.index),
|
|
6522
6565
|
value: n,
|
|
6523
6566
|
index: e.index
|
|
6524
6567
|
});
|
|
6525
6568
|
}
|
|
6526
6569
|
} else if (e.type === "wildcard") {
|
|
6527
6570
|
for (let e of n) if (Array.isArray(e.value)) e.value.forEach((n, r) => t.push({
|
|
6528
|
-
path:
|
|
6571
|
+
path: Kc(e.path, r),
|
|
6529
6572
|
value: n,
|
|
6530
6573
|
index: r
|
|
6531
6574
|
}));
|
|
6532
6575
|
else if (e.value != null && typeof e.value == "object") for (let n of Object.keys(e.value)) t.push({
|
|
6533
|
-
path:
|
|
6576
|
+
path: Kc(e.path, n),
|
|
6534
6577
|
value: e.value[n]
|
|
6535
6578
|
});
|
|
6536
6579
|
} else if (e.type === "descendKey") {
|
|
6537
6580
|
let r = e.key, i = (e) => {
|
|
6538
6581
|
if (!(e.value == null || typeof e.value != "object")) for (let n of Object.keys(e.value)) {
|
|
6539
6582
|
let a = {
|
|
6540
|
-
path:
|
|
6583
|
+
path: Kc(e.path, n),
|
|
6541
6584
|
value: e.value[n]
|
|
6542
6585
|
};
|
|
6543
6586
|
n === r && t.push(a), i(a);
|
|
@@ -6548,7 +6591,7 @@ function Wc(e, t) {
|
|
|
6548
6591
|
let e = (n) => {
|
|
6549
6592
|
if (!(n.value == null || typeof n.value != "object")) for (let r of Object.keys(n.value)) {
|
|
6550
6593
|
let i = {
|
|
6551
|
-
path:
|
|
6594
|
+
path: Kc(n.path, r),
|
|
6552
6595
|
value: n.value[r]
|
|
6553
6596
|
};
|
|
6554
6597
|
t.push(i), e(i);
|
|
@@ -6557,16 +6600,16 @@ function Wc(e, t) {
|
|
|
6557
6600
|
for (let t of n) e(t);
|
|
6558
6601
|
} else if (e.type === "filter") {
|
|
6559
6602
|
for (let r of n) if (Array.isArray(r.value)) r.value.forEach((n, i) => {
|
|
6560
|
-
|
|
6561
|
-
path:
|
|
6603
|
+
Gc(e.filter, n) && t.push({
|
|
6604
|
+
path: Kc(r.path, i),
|
|
6562
6605
|
value: n,
|
|
6563
6606
|
index: i
|
|
6564
6607
|
});
|
|
6565
6608
|
});
|
|
6566
6609
|
else if (r.value != null && typeof r.value == "object") for (let n of Object.keys(r.value)) {
|
|
6567
6610
|
let i = r.value[n];
|
|
6568
|
-
|
|
6569
|
-
path:
|
|
6611
|
+
Gc(e.filter, i) && t.push({
|
|
6612
|
+
path: Kc(r.path, n),
|
|
6570
6613
|
value: i
|
|
6571
6614
|
});
|
|
6572
6615
|
}
|
|
@@ -6575,7 +6618,7 @@ function Wc(e, t) {
|
|
|
6575
6618
|
}
|
|
6576
6619
|
return n;
|
|
6577
6620
|
}
|
|
6578
|
-
function
|
|
6621
|
+
function Jc(e, t) {
|
|
6579
6622
|
let n = e.length, r = t.length;
|
|
6580
6623
|
if (!n) return r;
|
|
6581
6624
|
if (!r) return n;
|
|
@@ -6591,7 +6634,7 @@ function Gc(e, t) {
|
|
|
6591
6634
|
}
|
|
6592
6635
|
return i[r];
|
|
6593
6636
|
}
|
|
6594
|
-
function
|
|
6637
|
+
function Yc(e, t, n = {}) {
|
|
6595
6638
|
let r = n.mode || "substring", i = n.limit ?? 50, a = n.matchKey !== !1, o = [], s = null;
|
|
6596
6639
|
if (r === "regex") try {
|
|
6597
6640
|
s = new RegExp(t, "i");
|
|
@@ -6601,11 +6644,11 @@ function Kc(e, t, n = {}) {
|
|
|
6601
6644
|
let c = (e, l, u) => {
|
|
6602
6645
|
if (o.length >= i || e == null) return;
|
|
6603
6646
|
if (typeof e == "object") {
|
|
6604
|
-
if (Array.isArray(e)) e.forEach((e, t) => c(e,
|
|
6605
|
-
else for (let t of Object.keys(e)) c(e[t],
|
|
6647
|
+
if (Array.isArray(e)) e.forEach((e, t) => c(e, Kc(l, t), String(t)));
|
|
6648
|
+
else for (let t of Object.keys(e)) c(e[t], Kc(l, t), t);
|
|
6606
6649
|
return;
|
|
6607
6650
|
}
|
|
6608
|
-
let d = String(e), f =
|
|
6651
|
+
let d = String(e), f = Xc(d, t, r, n.fuzzyThreshold ?? 2, s);
|
|
6609
6652
|
if (f) {
|
|
6610
6653
|
o.push({
|
|
6611
6654
|
path: l,
|
|
@@ -6616,7 +6659,7 @@ function Kc(e, t, n = {}) {
|
|
|
6616
6659
|
return;
|
|
6617
6660
|
}
|
|
6618
6661
|
if (a && u) {
|
|
6619
|
-
let e =
|
|
6662
|
+
let e = Xc(u, t, r, n.fuzzyThreshold ?? 2, s);
|
|
6620
6663
|
e && o.push({
|
|
6621
6664
|
path: l,
|
|
6622
6665
|
key: u,
|
|
@@ -6627,51 +6670,51 @@ function Kc(e, t, n = {}) {
|
|
|
6627
6670
|
};
|
|
6628
6671
|
return c(e, ""), o;
|
|
6629
6672
|
}
|
|
6630
|
-
function
|
|
6673
|
+
function Xc(e, t, n, r, i) {
|
|
6631
6674
|
let a = e.toLowerCase(), o = t.toLowerCase();
|
|
6632
6675
|
if (n === "substring") return a.includes(o) ? 1 : null;
|
|
6633
6676
|
if (n === "regex") return i && i.test(e) ? 1 : null;
|
|
6634
6677
|
if (n === "fuzzy") {
|
|
6635
6678
|
if (a.includes(o)) return 2;
|
|
6636
|
-
let e =
|
|
6679
|
+
let e = Jc(a, o);
|
|
6637
6680
|
return e <= r ? r - e + 1 : null;
|
|
6638
6681
|
}
|
|
6639
6682
|
return null;
|
|
6640
6683
|
}
|
|
6641
|
-
function
|
|
6684
|
+
function Zc(e, t, n = 3e3) {
|
|
6642
6685
|
return ba(t, n)(e);
|
|
6643
6686
|
}
|
|
6644
6687
|
//#endregion
|
|
6645
6688
|
//#region src/core/tools/resources.ts
|
|
6646
|
-
var
|
|
6647
|
-
function
|
|
6648
|
-
return `${
|
|
6689
|
+
var Qc = "⟦frozen:", $c = "⟦res:", el = "⟧";
|
|
6690
|
+
function tl(e) {
|
|
6691
|
+
return `${Qc}${e}${el}`;
|
|
6649
6692
|
}
|
|
6650
|
-
function
|
|
6651
|
-
return `${
|
|
6693
|
+
function nl(e) {
|
|
6694
|
+
return `${$c}${e}${el}`;
|
|
6652
6695
|
}
|
|
6653
|
-
function
|
|
6654
|
-
return typeof e == "string" ? e.startsWith(
|
|
6696
|
+
function rl(e) {
|
|
6697
|
+
return typeof e == "string" ? e.startsWith(Qc) && e.endsWith(el) ? {
|
|
6655
6698
|
type: "frozen",
|
|
6656
6699
|
path: e.slice(8, e.length - 1)
|
|
6657
|
-
} : e.startsWith(
|
|
6700
|
+
} : e.startsWith($c) && e.endsWith(el) ? {
|
|
6658
6701
|
type: "res",
|
|
6659
6702
|
handle: e.slice(5, e.length - 1)
|
|
6660
6703
|
} : null : null;
|
|
6661
6704
|
}
|
|
6662
|
-
function
|
|
6705
|
+
function il(e) {
|
|
6663
6706
|
return String(e ?? "").trim().replace(/^\.+/, "");
|
|
6664
6707
|
}
|
|
6665
|
-
function
|
|
6708
|
+
function al(e) {
|
|
6666
6709
|
let t = 5381;
|
|
6667
6710
|
for (let n = 0; n < e.length; n++) t = (t * 33 ^ e.charCodeAt(n)) >>> 0;
|
|
6668
6711
|
return (t >>> 0).toString(16).padStart(8, "0").slice(0, 8);
|
|
6669
6712
|
}
|
|
6670
|
-
function
|
|
6713
|
+
function ol(e, t) {
|
|
6671
6714
|
return e === t ? !0 : e && t && typeof e == "object" && typeof t == "object" ? JSON.stringify(e) === JSON.stringify(t) : !1;
|
|
6672
6715
|
}
|
|
6673
|
-
function
|
|
6674
|
-
let n =
|
|
6716
|
+
function sl(e, t) {
|
|
6717
|
+
let n = il(e);
|
|
6675
6718
|
if (!n) return;
|
|
6676
6719
|
let r = t.get(n);
|
|
6677
6720
|
if (r) return {
|
|
@@ -6691,7 +6734,7 @@ function il(e, t) {
|
|
|
6691
6734
|
}));
|
|
6692
6735
|
return i;
|
|
6693
6736
|
}
|
|
6694
|
-
var
|
|
6737
|
+
var cl = class {
|
|
6695
6738
|
vfs;
|
|
6696
6739
|
constructor(e) {
|
|
6697
6740
|
this.vfs = e;
|
|
@@ -6700,7 +6743,7 @@ var al = class {
|
|
|
6700
6743
|
return `resources/${e}.json`;
|
|
6701
6744
|
}
|
|
6702
6745
|
ensure(e, t, n) {
|
|
6703
|
-
let r =
|
|
6746
|
+
let r = al(e), i = {
|
|
6704
6747
|
path: e,
|
|
6705
6748
|
mode: n,
|
|
6706
6749
|
value: t,
|
|
@@ -6712,7 +6755,7 @@ var al = class {
|
|
|
6712
6755
|
}, r;
|
|
6713
6756
|
}
|
|
6714
6757
|
get(e) {
|
|
6715
|
-
return this.readEntry(this.key(e)) || this.readEntry(this.key(
|
|
6758
|
+
return this.readEntry(this.key(e)) || this.readEntry(this.key(al(e)));
|
|
6716
6759
|
}
|
|
6717
6760
|
readEntry(e) {
|
|
6718
6761
|
let t = this.vfs.files[e];
|
|
@@ -6728,7 +6771,7 @@ var al = class {
|
|
|
6728
6771
|
this.ensure(e, t, n?.mode ?? "verbatim");
|
|
6729
6772
|
}
|
|
6730
6773
|
delete(e) {
|
|
6731
|
-
let t = this.get(e)?.handle ??
|
|
6774
|
+
let t = this.get(e)?.handle ?? al(e), n = this.key(t), r = !!this.vfs.files[n];
|
|
6732
6775
|
return r && delete this.vfs.files[n], r;
|
|
6733
6776
|
}
|
|
6734
6777
|
list() {
|
|
@@ -6748,7 +6791,7 @@ var al = class {
|
|
|
6748
6791
|
for (let e of Object.keys(this.vfs.files)) e.startsWith("resources/") && delete this.vfs.files[e];
|
|
6749
6792
|
}
|
|
6750
6793
|
};
|
|
6751
|
-
function
|
|
6794
|
+
function ll(e) {
|
|
6752
6795
|
let { jp: t, resolved: n, resourcesByPath: r, resourceStore: i } = e;
|
|
6753
6796
|
if (!r.size) return n;
|
|
6754
6797
|
let a = !1;
|
|
@@ -6757,19 +6800,19 @@ function ol(e) {
|
|
|
6757
6800
|
break;
|
|
6758
6801
|
}
|
|
6759
6802
|
if (!a) return n;
|
|
6760
|
-
let o =
|
|
6803
|
+
let o = hc(n);
|
|
6761
6804
|
for (let [e, n] of r) {
|
|
6762
6805
|
if (t !== "" && e !== t && !e.startsWith(t + ".")) continue;
|
|
6763
6806
|
if (e === t) {
|
|
6764
6807
|
if (o === void 0) continue;
|
|
6765
|
-
return n.mode === "freeze" ?
|
|
6808
|
+
return n.mode === "freeze" ? tl(e) : i ? nl(i.ensure(e, o, "verbatim")) : o;
|
|
6766
6809
|
}
|
|
6767
6810
|
let r = t === "" ? e : e.slice(t.length + 1), a = Z(o, r);
|
|
6768
|
-
a !== void 0 && (n.mode === "freeze" ?
|
|
6811
|
+
a !== void 0 && (n.mode === "freeze" ? pc(o, r, tl(e)) : i && pc(o, r, nl(i.ensure(e, a, "verbatim"))));
|
|
6769
6812
|
}
|
|
6770
6813
|
return o;
|
|
6771
6814
|
}
|
|
6772
|
-
function
|
|
6815
|
+
function ul(e, t, n, r) {
|
|
6773
6816
|
if (!r) return {
|
|
6774
6817
|
code: "RESOURCE_NOT_FOUND",
|
|
6775
6818
|
message: `句柄 "${e}" 无法展开(资源池未启用)`,
|
|
@@ -6780,7 +6823,7 @@ function sl(e, t, n, r) {
|
|
|
6780
6823
|
code: "RESOURCE_NOT_FOUND",
|
|
6781
6824
|
message: `字段 "${t}" 在 bind 中已不存在,无法展开句柄 "${e}"`,
|
|
6782
6825
|
hint: "该字段可能已被删除或 restore 到不含此字段的快照;重新 read 确认当前结构"
|
|
6783
|
-
} :
|
|
6826
|
+
} : ol(i.value, n) ? { value: i.value } : (r.update(t, n), { value: n }) : n === void 0 ? {
|
|
6784
6827
|
code: "RESOURCE_NOT_FOUND",
|
|
6785
6828
|
message: `句柄 "${e}" 不存在(字段 "${t}" 可能未注册或已被删除)`,
|
|
6786
6829
|
hint: "重新 read 该字段触发懒注册"
|
|
@@ -6790,20 +6833,20 @@ function sl(e, t, n, r) {
|
|
|
6790
6833
|
hint: "重新 read 该字段触发懒注册重建句柄,再写回新句柄 ⟦res:<handle>⟧"
|
|
6791
6834
|
};
|
|
6792
6835
|
}
|
|
6793
|
-
function
|
|
6836
|
+
function dl(e, t) {
|
|
6794
6837
|
let n = t.getBind();
|
|
6795
6838
|
for (let [r, i] of t.resourcesByPath) {
|
|
6796
6839
|
let a = Z(n, r), o = Z(e, r);
|
|
6797
6840
|
if (o === void 0) {
|
|
6798
|
-
a !== void 0 &&
|
|
6841
|
+
a !== void 0 && pc(e, r, a);
|
|
6799
6842
|
continue;
|
|
6800
6843
|
}
|
|
6801
6844
|
if (i.mode === "freeze") {
|
|
6802
|
-
if (o ===
|
|
6803
|
-
|
|
6845
|
+
if (o === tl(r)) {
|
|
6846
|
+
pc(e, r, a);
|
|
6804
6847
|
continue;
|
|
6805
6848
|
}
|
|
6806
|
-
if (!
|
|
6849
|
+
if (!ol(o, a)) return {
|
|
6807
6850
|
ok: !1,
|
|
6808
6851
|
code: "FROZEN_FIELD",
|
|
6809
6852
|
path: r,
|
|
@@ -6811,11 +6854,11 @@ function cl(e, t) {
|
|
|
6811
6854
|
hint: "该字段由系统/集成方维护,LLM 不得改动。如需展示其值用 resource_get({path}) 取真值"
|
|
6812
6855
|
};
|
|
6813
6856
|
} else {
|
|
6814
|
-
let n =
|
|
6857
|
+
let n = rl(o);
|
|
6815
6858
|
if (n && n.type === "res") {
|
|
6816
|
-
let i =
|
|
6859
|
+
let i = ul(n.handle, r, a, t.resourceStore);
|
|
6817
6860
|
if ("value" in i) {
|
|
6818
|
-
|
|
6861
|
+
pc(e, r, i.value);
|
|
6819
6862
|
continue;
|
|
6820
6863
|
}
|
|
6821
6864
|
return {
|
|
@@ -6826,7 +6869,7 @@ function cl(e, t) {
|
|
|
6826
6869
|
hint: i.hint
|
|
6827
6870
|
};
|
|
6828
6871
|
}
|
|
6829
|
-
if (!
|
|
6872
|
+
if (!ol(o, a)) return {
|
|
6830
6873
|
ok: !1,
|
|
6831
6874
|
code: "VERBATIM_MISMATCH",
|
|
6832
6875
|
path: r,
|
|
@@ -6837,7 +6880,7 @@ function cl(e, t) {
|
|
|
6837
6880
|
}
|
|
6838
6881
|
return { ok: !0 };
|
|
6839
6882
|
}
|
|
6840
|
-
function
|
|
6883
|
+
function fl(e, t, n) {
|
|
6841
6884
|
let r = t === void 0 ? e.message : `patches[${t}]${n ? ` @ "${n}"` : ""}: ${e.message}`;
|
|
6842
6885
|
return Y({
|
|
6843
6886
|
code: e.code,
|
|
@@ -6850,28 +6893,28 @@ function ll(e, t, n) {
|
|
|
6850
6893
|
} }
|
|
6851
6894
|
});
|
|
6852
6895
|
}
|
|
6853
|
-
function
|
|
6896
|
+
function pl(e) {
|
|
6854
6897
|
let { value: t, ctx: n } = e;
|
|
6855
6898
|
if (!n || !n.resourcesByPath.size) return {
|
|
6856
6899
|
ok: !0,
|
|
6857
6900
|
value: t
|
|
6858
6901
|
};
|
|
6859
|
-
let r =
|
|
6902
|
+
let r = hc(t), i = dl(r, n);
|
|
6860
6903
|
return i.ok ? {
|
|
6861
6904
|
ok: !0,
|
|
6862
6905
|
value: r
|
|
6863
6906
|
} : {
|
|
6864
6907
|
ok: !1,
|
|
6865
|
-
error:
|
|
6908
|
+
error: fl(i)
|
|
6866
6909
|
};
|
|
6867
6910
|
}
|
|
6868
|
-
function
|
|
6911
|
+
function ml(e) {
|
|
6869
6912
|
let { patches: t, clone: n, ctx: r } = e;
|
|
6870
6913
|
if (!r || !r.resourcesByPath.size) return { ok: !0 };
|
|
6871
6914
|
for (let e = 0; e < t.length; e++) {
|
|
6872
6915
|
let n = t[e];
|
|
6873
6916
|
if (n.op === "remove") {
|
|
6874
|
-
let t =
|
|
6917
|
+
let t = sl(n.jsonPath || "", r.resourcesByPath);
|
|
6875
6918
|
if (t) {
|
|
6876
6919
|
let r = t.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED", i = t.spec.mode === "freeze" ? "冻结字段不可删。如需移除请联系集成方调整 data.resources 配置" : "verbatim 字段不可直接删;先 resource_delete({path}) 释放资源保护后再删";
|
|
6877
6920
|
return {
|
|
@@ -6890,27 +6933,27 @@ function dl(e) {
|
|
|
6890
6933
|
}
|
|
6891
6934
|
}
|
|
6892
6935
|
}
|
|
6893
|
-
let i =
|
|
6936
|
+
let i = dl(n, r);
|
|
6894
6937
|
if (!i.ok) {
|
|
6895
|
-
let e =
|
|
6938
|
+
let e = hl(i.path, t);
|
|
6896
6939
|
return {
|
|
6897
6940
|
ok: !1,
|
|
6898
|
-
error:
|
|
6941
|
+
error: fl(i, e >= 0 ? e : void 0, e >= 0 ? t[e].jsonPath : void 0)
|
|
6899
6942
|
};
|
|
6900
6943
|
}
|
|
6901
6944
|
return { ok: !0 };
|
|
6902
6945
|
}
|
|
6903
|
-
function
|
|
6904
|
-
let n =
|
|
6946
|
+
function hl(e, t) {
|
|
6947
|
+
let n = il(e);
|
|
6905
6948
|
for (let e = 0; e < t.length; e++) {
|
|
6906
|
-
let r =
|
|
6949
|
+
let r = il(t[e].jsonPath || "");
|
|
6907
6950
|
if (r && (r === n || n.startsWith(r + ".") || r.startsWith(n + "."))) return e;
|
|
6908
6951
|
}
|
|
6909
6952
|
return -1;
|
|
6910
6953
|
}
|
|
6911
6954
|
//#endregion
|
|
6912
6955
|
//#region src/core/tools/dataOps.ts
|
|
6913
|
-
var
|
|
6956
|
+
var gl = /* @__PURE__ */ new Set([
|
|
6914
6957
|
"describe_data",
|
|
6915
6958
|
"get_data",
|
|
6916
6959
|
"set_data",
|
|
@@ -6924,14 +6967,14 @@ var pl = /* @__PURE__ */ new Set([
|
|
|
6924
6967
|
"resource_update",
|
|
6925
6968
|
"resource_list",
|
|
6926
6969
|
"resource_delete"
|
|
6927
|
-
]),
|
|
6928
|
-
function
|
|
6929
|
-
return t === "advanced" ? e : t === "minimal" ? e.filter((e) =>
|
|
6970
|
+
]), _l = /* @__PURE__ */ new Set(["read", "write"]);
|
|
6971
|
+
function vl(e, t = "simple") {
|
|
6972
|
+
return t === "advanced" ? e : t === "minimal" ? e.filter((e) => _l.has(e.name)) : e.filter((e) => !gl.has(e.name));
|
|
6930
6973
|
}
|
|
6931
|
-
function
|
|
6974
|
+
function yl(e) {
|
|
6932
6975
|
let { bindRef: t, schema: n, allowKeys: r, snapshots: i, maxSnapshots: a, audit: o, dryRun: s, op: c = "set", protectedCtx: l } = e, u = e.value;
|
|
6933
6976
|
if (l) {
|
|
6934
|
-
let e =
|
|
6977
|
+
let e = pl({
|
|
6935
6978
|
value: u,
|
|
6936
6979
|
ctx: l
|
|
6937
6980
|
});
|
|
@@ -6959,14 +7002,14 @@ function gl(e) {
|
|
|
6959
7002
|
hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹(如 {value:\"x\"})或集成方通过 sdk.setData 替换 bind"
|
|
6960
7003
|
})
|
|
6961
7004
|
};
|
|
6962
|
-
let f =
|
|
7005
|
+
let f = hc(t), p = i.length ? i[i.length - 1].id + 1 : 1;
|
|
6963
7006
|
for (i.push({
|
|
6964
7007
|
id: p,
|
|
6965
7008
|
ts: Date.now(),
|
|
6966
7009
|
op: c,
|
|
6967
7010
|
value: f
|
|
6968
7011
|
}); i.length > a;) i.shift();
|
|
6969
|
-
return d.data !== null && typeof d.data == "object" && (r ?
|
|
7012
|
+
return d.data !== null && typeof d.data == "object" && (r ? fc(t, d.data) : Cc(t, d.data)), o({
|
|
6970
7013
|
op: c,
|
|
6971
7014
|
value: d.data,
|
|
6972
7015
|
timestamp: Date.now()
|
|
@@ -6976,11 +7019,11 @@ function gl(e) {
|
|
|
6976
7019
|
data: d.data
|
|
6977
7020
|
};
|
|
6978
7021
|
}
|
|
6979
|
-
function
|
|
6980
|
-
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 =
|
|
7022
|
+
function bl(e) {
|
|
7023
|
+
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 = hc(t), p = [];
|
|
6981
7024
|
for (let e = 0; e < n.length; e++) {
|
|
6982
7025
|
let t = n[e], a = t.jsonPath || "";
|
|
6983
|
-
if (
|
|
7026
|
+
if (dc(a)) return {
|
|
6984
7027
|
ok: !1,
|
|
6985
7028
|
error: Y({
|
|
6986
7029
|
code: "PATH_UNSAFE",
|
|
@@ -7006,14 +7049,14 @@ function _l(e) {
|
|
|
7006
7049
|
hint: `op 为 ${o} 时 value 必填;删除请用 op:'remove'`
|
|
7007
7050
|
})
|
|
7008
7051
|
};
|
|
7009
|
-
let n =
|
|
7052
|
+
let n = gc(t.value);
|
|
7010
7053
|
if (n.parseError) return {
|
|
7011
7054
|
ok: !1,
|
|
7012
7055
|
error: Gr(`patches[${e}]`, t.value, n.parseError)
|
|
7013
7056
|
};
|
|
7014
7057
|
s = n.parsed;
|
|
7015
7058
|
}
|
|
7016
|
-
let c =
|
|
7059
|
+
let c = bc(f, o, a, s);
|
|
7017
7060
|
if (c) return {
|
|
7018
7061
|
ok: !1,
|
|
7019
7062
|
error: Y({
|
|
@@ -7029,7 +7072,7 @@ function _l(e) {
|
|
|
7029
7072
|
});
|
|
7030
7073
|
}
|
|
7031
7074
|
if (d) {
|
|
7032
|
-
let e =
|
|
7075
|
+
let e = ml({
|
|
7033
7076
|
patches: n,
|
|
7034
7077
|
clone: f,
|
|
7035
7078
|
ctx: d
|
|
@@ -7059,21 +7102,21 @@ function _l(e) {
|
|
|
7059
7102
|
id: h,
|
|
7060
7103
|
ts: Date.now(),
|
|
7061
7104
|
op: "edit",
|
|
7062
|
-
value:
|
|
7105
|
+
value: hc(t),
|
|
7063
7106
|
...l ? { label: l } : {}
|
|
7064
7107
|
}); a.length > o;) a.shift();
|
|
7065
|
-
for (let e of p) e.op === "remove" &&
|
|
7066
|
-
return m.data !== null && typeof m.data == "object" && (i ?
|
|
7108
|
+
for (let e of p) e.op === "remove" && mc(t, e.jp);
|
|
7109
|
+
return m.data !== null && typeof m.data == "object" && (i ? fc(t, m.data) : Cc(t, m.data)), s?.(), {
|
|
7067
7110
|
ok: !0,
|
|
7068
7111
|
applied: p,
|
|
7069
7112
|
clone: f
|
|
7070
7113
|
};
|
|
7071
7114
|
}
|
|
7072
|
-
function
|
|
7073
|
-
let i = e.schema, a = e.bind, o = e.description ?? "主数据对象", s = Mi(i), c = /* @__PURE__ */ new Map(), l = n.vfsStore ? new
|
|
7115
|
+
function xl(e, n = {}) {
|
|
7116
|
+
let i = e.schema, a = e.bind, o = e.description ?? "主数据对象", s = Mi(i), c = /* @__PURE__ */ new Map(), l = n.vfsStore ? new cl(n.vfsStore) : void 0;
|
|
7074
7117
|
function u(e) {
|
|
7075
7118
|
if (c.clear(), e) for (let t of e) {
|
|
7076
|
-
let e =
|
|
7119
|
+
let e = il(t.path);
|
|
7077
7120
|
c.set(e, {
|
|
7078
7121
|
path: e,
|
|
7079
7122
|
mode: t.mode
|
|
@@ -7125,7 +7168,7 @@ function vl(e, n = {}) {
|
|
|
7125
7168
|
return e;
|
|
7126
7169
|
},
|
|
7127
7170
|
createResource: l ? (e, t) => {
|
|
7128
|
-
let n =
|
|
7171
|
+
let n = il(e), r = c.get(n), i = t === void 0 ? Z(a, n) : t;
|
|
7129
7172
|
return l.ensure(n, i, r?.mode ?? "verbatim");
|
|
7130
7173
|
} : void 0,
|
|
7131
7174
|
getResource: l ? (e) => {
|
|
@@ -7138,8 +7181,8 @@ function vl(e, n = {}) {
|
|
|
7138
7181
|
} : void 0;
|
|
7139
7182
|
} : void 0,
|
|
7140
7183
|
updateResource: l ? (e, t) => {
|
|
7141
|
-
let n =
|
|
7142
|
-
l.update(n, t),
|
|
7184
|
+
let n = il(e);
|
|
7185
|
+
l.update(n, t), pc(a, n, t), _();
|
|
7143
7186
|
} : void 0,
|
|
7144
7187
|
deleteResource: l ? (e) => l.delete(e) : void 0,
|
|
7145
7188
|
listResources: l ? () => l.list() : void 0
|
|
@@ -7147,7 +7190,7 @@ function vl(e, n = {}) {
|
|
|
7147
7190
|
n.onAudit?.(e);
|
|
7148
7191
|
};
|
|
7149
7192
|
function b(e, t) {
|
|
7150
|
-
let n =
|
|
7193
|
+
let n = hc(a), r = f.length ? f[f.length - 1].id + 1 : 1;
|
|
7151
7194
|
for (f.push({
|
|
7152
7195
|
id: r,
|
|
7153
7196
|
ts: Date.now(),
|
|
@@ -7178,7 +7221,7 @@ function vl(e, n = {}) {
|
|
|
7178
7221
|
if (o.action === "restore") {
|
|
7179
7222
|
if (!f.length) return `无历史快照可回退(本次为首次操作)。当前值:${Q(a, 400)} (hash=${i})。请重新 read 再改或选「强制覆盖」。`;
|
|
7180
7223
|
let e = f[f.length - 1];
|
|
7181
|
-
return
|
|
7224
|
+
return Sc(a, hc(e.value)), _(), `已回退主数据到历史快照 #${e.id}[${e.op}]。当前值:${Q(a, 400)} (hash=${$(a)})。请基于回退后的值重写或停止。`;
|
|
7182
7225
|
}
|
|
7183
7226
|
return null;
|
|
7184
7227
|
}
|
|
@@ -7188,7 +7231,7 @@ function vl(e, n = {}) {
|
|
|
7188
7231
|
schema: t.object({})
|
|
7189
7232
|
}), C = r(async ({ jsonPath: e }) => {
|
|
7190
7233
|
let t = e || "";
|
|
7191
|
-
if (
|
|
7234
|
+
if (dc(t)) return Y({
|
|
7192
7235
|
code: "PATH_UNSAFE",
|
|
7193
7236
|
message: `jsonPath "${t}" 含非法段(__proto__/constructor/prototype)`,
|
|
7194
7237
|
hint: "使用正常属性路径,如 components.0.text(数组索引用数字)"
|
|
@@ -7199,7 +7242,7 @@ function vl(e, n = {}) {
|
|
|
7199
7242
|
hint: "主数据仅暴露 schema 声明的字段;若需操作该字段,集成方需在 schema 中声明它"
|
|
7200
7243
|
});
|
|
7201
7244
|
let n = t ? Z(a, t) : a;
|
|
7202
|
-
t || (n = Li(n, s)), d && (n =
|
|
7245
|
+
t || (n = Li(n, s)), d && (n = ll({
|
|
7203
7246
|
jp: t,
|
|
7204
7247
|
resolved: n,
|
|
7205
7248
|
resourcesByPath: d.resourcesByPath,
|
|
@@ -7214,9 +7257,9 @@ function vl(e, n = {}) {
|
|
|
7214
7257
|
}), w = r(async ({ value: e, expectedHash: t }) => {
|
|
7215
7258
|
let n = await x("set", t || (h ? m : void 0));
|
|
7216
7259
|
if (n !== null) return n;
|
|
7217
|
-
let r =
|
|
7260
|
+
let r = gc(e);
|
|
7218
7261
|
if (r.parseError) return Gr("", e, r.parseError);
|
|
7219
|
-
let o =
|
|
7262
|
+
let o = yl({
|
|
7220
7263
|
bindRef: a,
|
|
7221
7264
|
value: r.parsed,
|
|
7222
7265
|
schema: i,
|
|
@@ -7243,7 +7286,7 @@ function vl(e, n = {}) {
|
|
|
7243
7286
|
hint: "顶层 op 或 patch.op 至少传一个"
|
|
7244
7287
|
});
|
|
7245
7288
|
let c = n || "";
|
|
7246
|
-
if (
|
|
7289
|
+
if (dc(c)) return Y({
|
|
7247
7290
|
code: "PATH_UNSAFE",
|
|
7248
7291
|
message: `jsonPath "${c}" 含非法段(__proto__/constructor/prototype)`,
|
|
7249
7292
|
hint: "使用正常的属性路径,如 components.0.text(数组索引用数字)"
|
|
@@ -7260,7 +7303,7 @@ function vl(e, n = {}) {
|
|
|
7260
7303
|
message: `edit 仅适用于对象/数组主数据,当前是 ${a === void 0 ? "undefined" : typeof a}`,
|
|
7261
7304
|
hint: "叶子(原始类型)请用 set_data 整体设置"
|
|
7262
7305
|
});
|
|
7263
|
-
let u =
|
|
7306
|
+
let u = bl({
|
|
7264
7307
|
bindRef: a,
|
|
7265
7308
|
patches: [{
|
|
7266
7309
|
op: t,
|
|
@@ -7313,7 +7356,7 @@ function vl(e, n = {}) {
|
|
|
7313
7356
|
message: "delete_data 需要 jsonPath 指定要删的子路径(主数据整体不可删,用 set_data 整体替换)",
|
|
7314
7357
|
hint: "如 jsonPath:\"components.0\" 删数组首项"
|
|
7315
7358
|
});
|
|
7316
|
-
if (
|
|
7359
|
+
if (dc(e)) return Y({
|
|
7317
7360
|
code: "PATH_UNSAFE",
|
|
7318
7361
|
message: `jsonPath "${e}" 含非法段`,
|
|
7319
7362
|
hint: "使用正常属性路径"
|
|
@@ -7324,7 +7367,7 @@ function vl(e, n = {}) {
|
|
|
7324
7367
|
hint: "仅 schema 声明的 key 可删"
|
|
7325
7368
|
});
|
|
7326
7369
|
if (d) {
|
|
7327
|
-
let t =
|
|
7370
|
+
let t = sl(e, d.resourcesByPath);
|
|
7328
7371
|
if (t) return Y({
|
|
7329
7372
|
code: t.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED",
|
|
7330
7373
|
message: `delete_data @ "${e}" 命中受保护字段 "${t.protectedPath}"(${t.spec.mode}),不可删除`,
|
|
@@ -7334,7 +7377,7 @@ function vl(e, n = {}) {
|
|
|
7334
7377
|
let n = await x("delete", t || (h ? m : void 0));
|
|
7335
7378
|
if (n !== null) return n;
|
|
7336
7379
|
b("delete");
|
|
7337
|
-
let r =
|
|
7380
|
+
let r = mc(a, e);
|
|
7338
7381
|
return _(), y({
|
|
7339
7382
|
op: "delete",
|
|
7340
7383
|
detail: e,
|
|
@@ -7360,7 +7403,7 @@ function vl(e, n = {}) {
|
|
|
7360
7403
|
hint: "用 history_data({list:true}) 查看可用快照序号"
|
|
7361
7404
|
});
|
|
7362
7405
|
let n = i.safeParse(t.value);
|
|
7363
|
-
return n.success ? (
|
|
7406
|
+
return n.success ? (Sc(a, hc(t.value)), _(), y({
|
|
7364
7407
|
op: "restore",
|
|
7365
7408
|
detail: `#${t.id}`,
|
|
7366
7409
|
timestamp: Date.now()
|
|
@@ -7394,9 +7437,9 @@ function vl(e, n = {}) {
|
|
|
7394
7437
|
message: `未找到快照 #${e}`,
|
|
7395
7438
|
hint: "不传 id 查看最近一次;或 history_data({list:true}) 查看可用序号"
|
|
7396
7439
|
});
|
|
7397
|
-
let a =
|
|
7440
|
+
let a = hc(r.value), o = t || "";
|
|
7398
7441
|
if (o) {
|
|
7399
|
-
if (
|
|
7442
|
+
if (dc(o)) return Y({
|
|
7400
7443
|
code: "PATH_UNSAFE",
|
|
7401
7444
|
message: `jsonPath "${o}" 含非法段`,
|
|
7402
7445
|
hint: "使用正常属性路径"
|
|
@@ -7427,7 +7470,7 @@ function vl(e, n = {}) {
|
|
|
7427
7470
|
});
|
|
7428
7471
|
let n = s ? Li(a, s) : a, r;
|
|
7429
7472
|
try {
|
|
7430
|
-
r =
|
|
7473
|
+
r = qc(n, e);
|
|
7431
7474
|
} catch (t) {
|
|
7432
7475
|
return Y({
|
|
7433
7476
|
code: "JSONPATH_SYNTAX",
|
|
@@ -7451,7 +7494,7 @@ function vl(e, n = {}) {
|
|
|
7451
7494
|
message: "主数据为空,无可搜索内容"
|
|
7452
7495
|
});
|
|
7453
7496
|
try {
|
|
7454
|
-
let o =
|
|
7497
|
+
let o = Yc(s ? Li(a, s) : a, e, {
|
|
7455
7498
|
mode: t,
|
|
7456
7499
|
fuzzyThreshold: n,
|
|
7457
7500
|
matchKey: r,
|
|
@@ -7501,7 +7544,7 @@ function vl(e, n = {}) {
|
|
|
7501
7544
|
e && (o = Ii(o, e));
|
|
7502
7545
|
}
|
|
7503
7546
|
} else o = s ? Li(a, s) : a;
|
|
7504
|
-
let c =
|
|
7547
|
+
let c = hc(o), l = await Zc(c, e, r && JSON.stringify(c).length > 1e5 ? 8e3 : 3e3);
|
|
7505
7548
|
if (!l.ok) {
|
|
7506
7549
|
let t = /超时/.test(l.error || "");
|
|
7507
7550
|
return Y({
|
|
@@ -7517,7 +7560,7 @@ function vl(e, n = {}) {
|
|
|
7517
7560
|
if (t === "transform") {
|
|
7518
7561
|
let e = l.result;
|
|
7519
7562
|
if (r) {
|
|
7520
|
-
let t =
|
|
7563
|
+
let t = bl({
|
|
7521
7564
|
bindRef: a,
|
|
7522
7565
|
patches: [{
|
|
7523
7566
|
op: "set",
|
|
@@ -7545,7 +7588,7 @@ function vl(e, n = {}) {
|
|
|
7545
7588
|
message: `主数据 bind 为原始类型(${a === null ? "null" : typeof a}),eval transform(patches) 无法就地替换`,
|
|
7546
7589
|
hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹或集成方通过 sdk.setData 替换 bind"
|
|
7547
7590
|
});
|
|
7548
|
-
let t =
|
|
7591
|
+
let t = bl({
|
|
7549
7592
|
bindRef: a,
|
|
7550
7593
|
patches: e.patches,
|
|
7551
7594
|
schema: i,
|
|
@@ -7565,7 +7608,7 @@ function vl(e, n = {}) {
|
|
|
7565
7608
|
}
|
|
7566
7609
|
let t = e;
|
|
7567
7610
|
if (d) {
|
|
7568
|
-
let e =
|
|
7611
|
+
let e = pl({
|
|
7569
7612
|
value: t,
|
|
7570
7613
|
ctx: d
|
|
7571
7614
|
});
|
|
@@ -7577,7 +7620,7 @@ function vl(e, n = {}) {
|
|
|
7577
7620
|
code: "LEAF_BIND",
|
|
7578
7621
|
message: `主数据 bind 为原始类型(${a === null ? "null" : typeof a}),eval transform 无法就地替换外部持有的值引用`,
|
|
7579
7622
|
hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹或集成方通过 sdk.setData 替换 bind"
|
|
7580
|
-
}) : (b("edit", "eval_transform"), n.data !== null && typeof n.data == "object" && (s ?
|
|
7623
|
+
}) : (b("edit", "eval_transform"), n.data !== null && typeof n.data == "object" && (s ? fc(a, n.data) : Cc(a, n.data)), _(), y({
|
|
7581
7624
|
op: "edit",
|
|
7582
7625
|
detail: "eval_transform",
|
|
7583
7626
|
timestamp: Date.now()
|
|
@@ -7614,7 +7657,7 @@ function vl(e, n = {}) {
|
|
|
7614
7657
|
e && (o = Ii(o, e));
|
|
7615
7658
|
}
|
|
7616
7659
|
let l = o;
|
|
7617
|
-
if (d && (l =
|
|
7660
|
+
if (d && (l = ll({
|
|
7618
7661
|
jp: t,
|
|
7619
7662
|
resolved: l,
|
|
7620
7663
|
resourcesByPath: d.resourcesByPath,
|
|
@@ -7624,12 +7667,12 @@ function vl(e, n = {}) {
|
|
|
7624
7667
|
} catch (e) {
|
|
7625
7668
|
return `- ${t}: [READ_INTERCEPT: ${e.message}]`;
|
|
7626
7669
|
}
|
|
7627
|
-
return r && r.length && (l =
|
|
7670
|
+
return r && r.length && (l = _c(l, r)), c != null && (l = vc(l, c)), l === void 0 ? `- ${t} = (undefined)` : `- ${t} = ${Q(l)}`;
|
|
7628
7671
|
});
|
|
7629
7672
|
return `多路径读取(共 ${t.length} 项,hash=${f}):\n${e.join("\n")}`;
|
|
7630
7673
|
}
|
|
7631
7674
|
let p = e || "";
|
|
7632
|
-
if (
|
|
7675
|
+
if (dc(p)) return Y({
|
|
7633
7676
|
code: "PATH_UNSAFE",
|
|
7634
7677
|
message: `jsonPath "${p}" 含非法段(__proto__/constructor/prototype)`,
|
|
7635
7678
|
hint: "使用正常属性路径,如 components.0.text(数组索引数字)"
|
|
@@ -7646,7 +7689,7 @@ function vl(e, n = {}) {
|
|
|
7646
7689
|
e && (h = Ii(h, e));
|
|
7647
7690
|
}
|
|
7648
7691
|
let g = h;
|
|
7649
|
-
if (d && (g =
|
|
7692
|
+
if (d && (g = ll({
|
|
7650
7693
|
jp: p,
|
|
7651
7694
|
resolved: g,
|
|
7652
7695
|
resourcesByPath: d.resourcesByPath,
|
|
@@ -7659,7 +7702,7 @@ function vl(e, n = {}) {
|
|
|
7659
7702
|
message: `read 拦截器抛错: ${e.message}`
|
|
7660
7703
|
});
|
|
7661
7704
|
}
|
|
7662
|
-
r && r.length && (g =
|
|
7705
|
+
r && r.length && (g = _c(g, r)), c != null && (g = vc(g, c));
|
|
7663
7706
|
let _ = e ? "" : `主数据说明: ${o}\n格式: 写入值需为 JSON,且通过声明的 schema 校验(校验失败时 write 会返回结构化错误)。字段约束(类型/min/max/enum/必填/默认)见 systemPrompt「可操作数据」段,或用 schema_data({ jsonPath }) 按需查。\n\n`, v = r && r.length ? `(字段裁剪:${r.join(",")})` : "", y = c == null ? "" : `(深度≤${c})`, b = v || y ? ` ${v}${y}` : "";
|
|
7664
7707
|
if ((l !== void 0 || u !== void 0) && Array.isArray(g)) {
|
|
7665
7708
|
let e = g.length, t = Math.max(0, l ?? 0), n = Math.min(200, Math.max(1, u ?? 50)), r = g.slice(t, t + n), i = t + n < e;
|
|
@@ -7721,7 +7764,7 @@ function vl(e, n = {}) {
|
|
|
7721
7764
|
message: "delete 需要 patch.jsonPath 指定要删的子路径(主数据整体不可删,用 write(value) 整体替换)",
|
|
7722
7765
|
hint: "如 patch:{jsonPath:\"components.0\"}, del:true"
|
|
7723
7766
|
});
|
|
7724
|
-
if (
|
|
7767
|
+
if (dc(t.jsonPath)) return Y({
|
|
7725
7768
|
code: "PATH_UNSAFE",
|
|
7726
7769
|
message: `jsonPath "${t.jsonPath}" 含非法段`,
|
|
7727
7770
|
hint: "使用正常属性路径"
|
|
@@ -7732,7 +7775,7 @@ function vl(e, n = {}) {
|
|
|
7732
7775
|
hint: "仅 schema 声明的 key 可删"
|
|
7733
7776
|
});
|
|
7734
7777
|
if (d) {
|
|
7735
|
-
let e =
|
|
7778
|
+
let e = sl(t.jsonPath, d.resourcesByPath);
|
|
7736
7779
|
if (e) return Y({
|
|
7737
7780
|
code: e.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED",
|
|
7738
7781
|
message: `write delete @ "${t.jsonPath}" 命中受保护字段 "${e.protectedPath}"(${e.spec.mode}),不可删除`,
|
|
@@ -7742,11 +7785,11 @@ function vl(e, n = {}) {
|
|
|
7742
7785
|
let e = await x("delete", v);
|
|
7743
7786
|
if (e !== null) return e;
|
|
7744
7787
|
if (c) {
|
|
7745
|
-
let e =
|
|
7746
|
-
return
|
|
7788
|
+
let e = hc(a);
|
|
7789
|
+
return mc(e, t.jsonPath) ? `dryRun(delete): 将删除 @ ${t.jsonPath}。预览剩余:${Q(e, 600)}。未实际写入、未入快照。` : `dryRun(delete): @ ${t.jsonPath} 不存在(无需删除)。未实际写入。`;
|
|
7747
7790
|
}
|
|
7748
7791
|
b("delete");
|
|
7749
|
-
let n =
|
|
7792
|
+
let n = mc(a, t.jsonPath);
|
|
7750
7793
|
return _(), y({
|
|
7751
7794
|
op: "delete",
|
|
7752
7795
|
detail: t.jsonPath,
|
|
@@ -7765,7 +7808,7 @@ function vl(e, n = {}) {
|
|
|
7765
7808
|
op: t.op ?? "set",
|
|
7766
7809
|
jsonPath: t.jsonPath || "",
|
|
7767
7810
|
value: u
|
|
7768
|
-
}]), o =
|
|
7811
|
+
}]), o = bl({
|
|
7769
7812
|
bindRef: a,
|
|
7770
7813
|
patches: n,
|
|
7771
7814
|
schema: i,
|
|
@@ -7784,11 +7827,11 @@ function vl(e, n = {}) {
|
|
|
7784
7827
|
timestamp: Date.now()
|
|
7785
7828
|
}), m = $(a), `已 write(edit) 主数据(${o.applied.length} 个 patch)。当前值:${Q(a, 600)} (新 hash=${$(a)})`) : o.error;
|
|
7786
7829
|
}
|
|
7787
|
-
let S =
|
|
7830
|
+
let S = gc(u);
|
|
7788
7831
|
if (S.parseError) return Gr("", u, S.parseError);
|
|
7789
7832
|
let C = await x("set", v);
|
|
7790
7833
|
if (C !== null) return C;
|
|
7791
|
-
let w =
|
|
7834
|
+
let w = yl({
|
|
7792
7835
|
bindRef: a,
|
|
7793
7836
|
value: S.parsed,
|
|
7794
7837
|
schema: i,
|
|
@@ -7845,7 +7888,7 @@ function vl(e, n = {}) {
|
|
|
7845
7888
|
if (n) {
|
|
7846
7889
|
let e = t;
|
|
7847
7890
|
if (typeof e == "string") {
|
|
7848
|
-
let t =
|
|
7891
|
+
let t = gc(e);
|
|
7849
7892
|
t.parseError || (e = t.parsed);
|
|
7850
7893
|
}
|
|
7851
7894
|
r = e, i = "against";
|
|
@@ -7863,7 +7906,7 @@ function vl(e, n = {}) {
|
|
|
7863
7906
|
});
|
|
7864
7907
|
r = t.value, i = `快照 #${t.id}`;
|
|
7865
7908
|
}
|
|
7866
|
-
let o = s ? Li(a, s) : a, c =
|
|
7909
|
+
let o = s ? Li(a, s) : a, c = wc(r, hc(o));
|
|
7867
7910
|
return c.length ? `差异(当前 vs ${i},共 ${c.length} 处):\n${c.map((e) => ` ${e.path}: ${Q(e.from)} → ${Q(e.to)}`).join("\n")}` : `无差异:当前主数据与 ${i} 完全相同。`;
|
|
7868
7911
|
}, {
|
|
7869
7912
|
name: "diff_data",
|
|
@@ -7915,7 +7958,7 @@ function vl(e, n = {}) {
|
|
|
7915
7958
|
}
|
|
7916
7959
|
let u = await x("set", n || (h ? m : void 0));
|
|
7917
7960
|
if (u !== null) return u;
|
|
7918
|
-
let g =
|
|
7961
|
+
let g = yl({
|
|
7919
7962
|
bindRef: a,
|
|
7920
7963
|
value: l,
|
|
7921
7964
|
schema: i,
|
|
@@ -7947,7 +7990,7 @@ function vl(e, n = {}) {
|
|
|
7947
7990
|
message: "未提供 path 或有效 handle",
|
|
7948
7991
|
hint: "传 path(受保护字段)或 handle(占位符 ⟦res:handle⟧ 里的句柄)"
|
|
7949
7992
|
});
|
|
7950
|
-
let r =
|
|
7993
|
+
let r = il(n);
|
|
7951
7994
|
if (!c.has(r)) return Y({
|
|
7952
7995
|
code: "RESOURCE_NOT_FOUND",
|
|
7953
7996
|
message: `"${n}" 不是受保护字段`,
|
|
@@ -7986,7 +8029,7 @@ function vl(e, n = {}) {
|
|
|
7986
8029
|
message: "resource_update 需要 path",
|
|
7987
8030
|
hint: "传要更新的 verbatim 受保护字段路径"
|
|
7988
8031
|
});
|
|
7989
|
-
let n =
|
|
8032
|
+
let n = il(e), r = c.get(n);
|
|
7990
8033
|
if (!r) return Y({
|
|
7991
8034
|
code: "RESOURCE_NOT_FOUND",
|
|
7992
8035
|
message: `"${e}" 不是受保护字段`,
|
|
@@ -8007,7 +8050,7 @@ function vl(e, n = {}) {
|
|
|
8007
8050
|
details: Ur(n.error.issues)
|
|
8008
8051
|
});
|
|
8009
8052
|
}
|
|
8010
|
-
l.update(n, t),
|
|
8053
|
+
l.update(n, t), pc(a, n, t), m = $(a), _();
|
|
8011
8054
|
let s = l.get(n)?.handle;
|
|
8012
8055
|
return `已更新 verbatim 资源 "${e}" = ${Q(t, 200)}(handle ${s ?? "(未知)"} 不变)。后续 write 该字段写回句柄 ⟦res:${s}⟧ 或新值`;
|
|
8013
8056
|
}, {
|
|
@@ -8068,8 +8111,8 @@ function vl(e, n = {}) {
|
|
|
8068
8111
|
}
|
|
8069
8112
|
//#endregion
|
|
8070
8113
|
//#region src/core/tools/fetchDoc.ts
|
|
8071
|
-
var
|
|
8072
|
-
let n = new AbortController(), r = setTimeout(() => n.abort(),
|
|
8114
|
+
var Sl = 3e4, Cl = [r(async ({ url: e, as: t }) => {
|
|
8115
|
+
let n = new AbortController(), r = setTimeout(() => n.abort(), Sl);
|
|
8073
8116
|
try {
|
|
8074
8117
|
let r = await fetch(e, {
|
|
8075
8118
|
method: "GET",
|
|
@@ -8086,7 +8129,7 @@ var yl = 3e4, bl = [r(async ({ url: e, as: t }) => {
|
|
|
8086
8129
|
].join("\n");
|
|
8087
8130
|
} catch (t) {
|
|
8088
8131
|
let r = t?.message || String(t);
|
|
8089
|
-
return n.signal.aborted ? `获取失败:请求超时(${
|
|
8132
|
+
return n.signal.aborted ? `获取失败:请求超时(${Sl}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
|
|
8090
8133
|
} finally {
|
|
8091
8134
|
clearTimeout(r);
|
|
8092
8135
|
}
|
|
@@ -8097,7 +8140,7 @@ var yl = 3e4, bl = [r(async ({ url: e, as: t }) => {
|
|
|
8097
8140
|
url: t.string().describe("要抓取的 URL(同源或已配 CORS)"),
|
|
8098
8141
|
as: t.enum(["text", "markdown"]).optional().describe("返回格式标签,默认 text")
|
|
8099
8142
|
})
|
|
8100
|
-
})],
|
|
8143
|
+
})], wl = [
|
|
8101
8144
|
"id",
|
|
8102
8145
|
"class",
|
|
8103
8146
|
"href",
|
|
@@ -8109,12 +8152,12 @@ var yl = 3e4, bl = [r(async ({ url: e, as: t }) => {
|
|
|
8109
8152
|
"aria-label",
|
|
8110
8153
|
"name",
|
|
8111
8154
|
"type"
|
|
8112
|
-
],
|
|
8113
|
-
function
|
|
8155
|
+
], Tl = /^(value|srcdoc|formaction|on\w+)$/i, El = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session/i;
|
|
8156
|
+
function Dl(e, t) {
|
|
8114
8157
|
if (!e) return null;
|
|
8115
|
-
let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ??
|
|
8158
|
+
let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ?? wl, s = (e) => {
|
|
8116
8159
|
let t = {};
|
|
8117
|
-
for (let n of Array.from(e.attributes)) (a ? o.includes(n.name) : o.includes(n.name) || n.name.startsWith("data-")) && (
|
|
8160
|
+
for (let n of Array.from(e.attributes)) (a ? o.includes(n.name) : o.includes(n.name) || n.name.startsWith("data-")) && (Tl.test(n.name) || El.test(n.name) || (t[n.name] = n.value));
|
|
8118
8161
|
return t;
|
|
8119
8162
|
}, c = (e, t) => {
|
|
8120
8163
|
let n = {
|
|
@@ -8130,10 +8173,10 @@ function wl(e, t) {
|
|
|
8130
8173
|
};
|
|
8131
8174
|
return c(e, n);
|
|
8132
8175
|
}
|
|
8133
|
-
var
|
|
8176
|
+
var Ol = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
|
|
8134
8177
|
let i = e ? document.querySelector(e) : document.body;
|
|
8135
8178
|
if (!i) return `未找到匹配元素:selector="${e}"`;
|
|
8136
|
-
let a =
|
|
8179
|
+
let a = Dl(i, {
|
|
8137
8180
|
depth: t ?? 3,
|
|
8138
8181
|
attrs: n,
|
|
8139
8182
|
includeText: r ?? !0
|
|
@@ -8148,14 +8191,14 @@ var Tl = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
|
|
|
8148
8191
|
attrs: t.array(t.string()).optional().describe("属性白名单(传了 = 严格白名单;不传 = 默认常用 + data-*)"),
|
|
8149
8192
|
includeText: t.boolean().optional().describe("是否包含直接文本(默认 true)")
|
|
8150
8193
|
})
|
|
8151
|
-
}),
|
|
8194
|
+
}), kl = [Ol];
|
|
8152
8195
|
//#endregion
|
|
8153
8196
|
//#region src/core/tools/envTool.ts
|
|
8154
|
-
function
|
|
8197
|
+
function Al(e) {
|
|
8155
8198
|
let t = e;
|
|
8156
8199
|
return typeof t.tagName == "string" || typeof t.nodeType == "number" && typeof t.nodeName == "string";
|
|
8157
8200
|
}
|
|
8158
|
-
function
|
|
8201
|
+
function jl(e, t = 3, n = 2e3, r) {
|
|
8159
8202
|
if (e == null) return e;
|
|
8160
8203
|
if (typeof e == "string") return e.length > n ? e.slice(0, n) + "…(已截断)" : e;
|
|
8161
8204
|
if (typeof e == "number" || typeof e == "boolean") return e;
|
|
@@ -8164,14 +8207,14 @@ function Ol(e, t = 3, n = 2e3, r) {
|
|
|
8164
8207
|
if (typeof e == "bigint") return `${e.toString()}n`;
|
|
8165
8208
|
if (typeof e != "object") return String(e);
|
|
8166
8209
|
let i = e;
|
|
8167
|
-
if (
|
|
8210
|
+
if (Al(i)) {
|
|
8168
8211
|
let e = i;
|
|
8169
8212
|
return e.tagName ? `[Element: <${e.tagName.toLowerCase()}>]` : `[Node: ${e.nodeName}]`;
|
|
8170
8213
|
}
|
|
8171
8214
|
if (r?.has(i)) return "[Circular]";
|
|
8172
8215
|
let a = r ?? /* @__PURE__ */ new WeakSet();
|
|
8173
8216
|
if (a.add(i), Array.isArray(e)) {
|
|
8174
|
-
let r = e.slice(0, 100).map((e) =>
|
|
8217
|
+
let r = e.slice(0, 100).map((e) => jl(e, t - 1, n, a));
|
|
8175
8218
|
return e.length > 100 && r.push(`…(共 ${e.length} 项,已截断)`), r;
|
|
8176
8219
|
}
|
|
8177
8220
|
if (t < 0) return "(对象,已截断)";
|
|
@@ -8183,14 +8226,14 @@ function Ol(e, t = 3, n = 2e3, r) {
|
|
|
8183
8226
|
break;
|
|
8184
8227
|
}
|
|
8185
8228
|
try {
|
|
8186
|
-
o[r] =
|
|
8229
|
+
o[r] = jl(i[r], t - 1, n, a);
|
|
8187
8230
|
} catch {
|
|
8188
8231
|
o[r] = "(getter 抛错)";
|
|
8189
8232
|
}
|
|
8190
8233
|
}
|
|
8191
8234
|
return o;
|
|
8192
8235
|
}
|
|
8193
|
-
function
|
|
8236
|
+
function Ml(e) {
|
|
8194
8237
|
let t = e ?? (typeof window < "u" ? window : {}), n = t.navigator, r = t.location, i = t.document;
|
|
8195
8238
|
return {
|
|
8196
8239
|
location: {
|
|
@@ -8223,9 +8266,9 @@ function kl(e) {
|
|
|
8223
8266
|
} : "(无 document)"
|
|
8224
8267
|
};
|
|
8225
8268
|
}
|
|
8226
|
-
var
|
|
8269
|
+
var Nl = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|opener|parent|top|self|window|globalThis|closed|history|navigation|trustedTypes|origin|crossOriginIsolated)$/, Pl = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session|ticket/i, Fl = r(({ key: e }) => {
|
|
8227
8270
|
if (e) {
|
|
8228
|
-
if (
|
|
8271
|
+
if (Nl.test(e) || Pl.test(e)) return JSON.stringify({
|
|
8229
8272
|
key: e,
|
|
8230
8273
|
denied: !0,
|
|
8231
8274
|
reason: "安全:该 key 在 denylist(localStorage/sessionStorage/cookie/document 或敏感命名 token/secret/key/auth),不读取防泄漏"
|
|
@@ -8235,18 +8278,18 @@ var Al = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|open
|
|
|
8235
8278
|
key: e,
|
|
8236
8279
|
exists: t !== void 0,
|
|
8237
8280
|
type: typeof t,
|
|
8238
|
-
value:
|
|
8281
|
+
value: jl(t)
|
|
8239
8282
|
}, null, 2);
|
|
8240
8283
|
}
|
|
8241
|
-
return JSON.stringify(
|
|
8284
|
+
return JSON.stringify(Ml(), null, 2);
|
|
8242
8285
|
}, {
|
|
8243
8286
|
name: "inspect_env",
|
|
8244
8287
|
description: "读取宿主页面环境信息(排查调试用,默认开启)。不传参 = 返回环境摘要(location 的 URL/origin/path、navigator 的浏览器/语言、viewport 视口尺寸、document 的 title/readyState);传 key = 读取指定 window 属性值(如 inspect_env({key:\"appConfig\"}) 读集成方挂的调试变量 window.appConfig)。用于排查「当前页面在哪/什么浏览器/视口多大/调试变量值是什么」。轻量只读,大结果自动外存 vfs。",
|
|
8245
8288
|
schema: t.object({ key: t.string().optional().describe("要读取的 window 属性名(如 \"appConfig\"/\"__DEBUG__\");不传 = 返回环境摘要") })
|
|
8246
|
-
}),
|
|
8289
|
+
}), Il = [Fl];
|
|
8247
8290
|
//#endregion
|
|
8248
8291
|
//#region src/core/harness/budget.ts
|
|
8249
|
-
function
|
|
8292
|
+
function Ll(e, t, n) {
|
|
8250
8293
|
let r = 0;
|
|
8251
8294
|
return {
|
|
8252
8295
|
name: "budget",
|
|
@@ -8271,12 +8314,12 @@ function Pl(e, t, n) {
|
|
|
8271
8314
|
}
|
|
8272
8315
|
//#endregion
|
|
8273
8316
|
//#region src/core/sdk/actions.ts
|
|
8274
|
-
var
|
|
8275
|
-
function
|
|
8317
|
+
var Rl = /^[a-zA-Z][a-zA-Z0-9_]*$/;
|
|
8318
|
+
function zl(e) {
|
|
8276
8319
|
let n = [];
|
|
8277
8320
|
for (let [i, a] of Object.entries(e)) {
|
|
8278
|
-
if (!
|
|
8279
|
-
console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${
|
|
8321
|
+
if (!Rl.test(i)) {
|
|
8322
|
+
console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${Rl}),已跳过`);
|
|
8280
8323
|
continue;
|
|
8281
8324
|
}
|
|
8282
8325
|
let e = a.description || `宿主动作 ${i}`;
|
|
@@ -8296,9 +8339,9 @@ function Il(e) {
|
|
|
8296
8339
|
}
|
|
8297
8340
|
return n;
|
|
8298
8341
|
}
|
|
8299
|
-
function
|
|
8342
|
+
function Bl(e) {
|
|
8300
8343
|
let t = {};
|
|
8301
|
-
for (let [n, r] of Object.entries(e))
|
|
8344
|
+
for (let [n, r] of Object.entries(e)) Rl.test(n) && (t[n] = {
|
|
8302
8345
|
description: r.description,
|
|
8303
8346
|
hasParams: !!r.params
|
|
8304
8347
|
});
|
|
@@ -8306,12 +8349,12 @@ function Ll(e) {
|
|
|
8306
8349
|
}
|
|
8307
8350
|
//#endregion
|
|
8308
8351
|
//#region src/core/toolsets.ts
|
|
8309
|
-
var
|
|
8310
|
-
function
|
|
8311
|
-
return
|
|
8352
|
+
var Vl = Cl, Hl = kl;
|
|
8353
|
+
function Ul(e, t) {
|
|
8354
|
+
return xl(e, t);
|
|
8312
8355
|
}
|
|
8313
|
-
function
|
|
8314
|
-
let a =
|
|
8356
|
+
function Wl(e, t, n, r, i) {
|
|
8357
|
+
let a = rc(e);
|
|
8315
8358
|
return [
|
|
8316
8359
|
...a.dataOps ? t : [],
|
|
8317
8360
|
...a.fetch ? n : [],
|
|
@@ -8321,7 +8364,7 @@ function Vl(e, t, n, r, i) {
|
|
|
8321
8364
|
}
|
|
8322
8365
|
//#endregion
|
|
8323
8366
|
//#region src/core/sdk/toolRegistry.ts
|
|
8324
|
-
function
|
|
8367
|
+
function Gl(e) {
|
|
8325
8368
|
let t = /* @__PURE__ */ new Map(), n = [];
|
|
8326
8369
|
for (let r of e) for (let e of r.tools) {
|
|
8327
8370
|
let i = t.get(e.name);
|
|
@@ -8341,15 +8384,15 @@ function Hl(e) {
|
|
|
8341
8384
|
}
|
|
8342
8385
|
//#endregion
|
|
8343
8386
|
//#region src/core/harness/usageHints.ts
|
|
8344
|
-
var
|
|
8345
|
-
function
|
|
8346
|
-
let i =
|
|
8387
|
+
var Kl = .7;
|
|
8388
|
+
function ql(e, t, n = "simple", r = !1) {
|
|
8389
|
+
let i = rc(e), a = n !== "advanced";
|
|
8347
8390
|
return {
|
|
8348
8391
|
name: "usageHints",
|
|
8349
8392
|
augmentPrompt: () => {
|
|
8350
8393
|
let n = [];
|
|
8351
8394
|
if (i.planning && (n.push("【自适应规划】按任务复杂度决定是否先规划,不要对简单任务过度编排:"), n.push(" · 简单/明确任务(改单字段、调样式、查值)→ 直接 read/write 执行,不必 write_todos。"), n.push(" · 复杂任务(多步、大改、有歧义、不可逆)→ 先 write_todos 拆解,首个任务标 in_progress,逐项推进。"), n.push(" · 执行中发现步骤要改/补/细分 → 用 update_todo({id, content?, status?}) 按 id 增量改单项,不必重传整个清单。"), n.push(" · 规划出多步方案若需用户拍板 → 先 request_human_confirmation 给方案选项,确认后再执行。"), n.push(" · 规划阶段有轮次预算(maxPlanRevisions,默认 5):勿反复调研/改计划而不执行,规划充分后即开始 write 落地。")), t && (a ? (n.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 追加数组;批量多改动 write({patches:[{op,jsonPath,value},...]});删子路径 write({patch:{jsonPath:\"路径\"}, del:true})。写入自动经 schema 校验(失败不写,按错误提示改值类型/形状后重试)+ 自动存快照(出错可用 restore_data 回退)。"), n.push("修改大对象/数组优先用 write 的 patch 增量(只发改动部分),避免整体重传被 max_tokens 截断致 JSON 不完整。"), n.push("读大数组(read 返回 hasMore=true)用 read({jsonPath,offset,limit}) 分页(offset+=limit 续读,默认 limit=50);一次读多个不相关子路径用 read({jsonPaths:[...]}) 省轮次;复杂 patches 改动先 write({patches,dryRun:true}) 预检(走完整校验不落盘)。"), n.push("read/describe 返回按 schema 投影:仅 schema 声明的字段可见(未声明字段自动隐藏,防误操作);要操作某字段需集成方在 schema 声明,查任意路径完整约束用 schema_data({jsonPath})。"), n.push("查历史快照值(看上一版长啥样 / 冲突诊断 / 用户问\"刚才改了啥\")用 history_data({id?,jsonPath?})(只读不改当前);对比当前与历史快照的差异需切 advanced 用 diff_data(返回结构化 path→from/to)。"), n.push("在大数组里按条件筛选用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素 path/index;定位后用 write patch 改。找名字记不清的元素用 search_data(substring/regex/fuzzy)。批量过滤/映射/聚合/重写大数组用 eval_script(沙箱脚本,mode=query 只读/transform 落地)。")) : (n.push("改主数据前先 get_data({jsonPath}) 读其当前真实值与 hash(返回末尾 hash=xxx),基于真实值改,不要凭记忆。写入(set/edit/delete)时回传 expectedHash=该 hash 启用乐观锁——若主数据在你 get 之后被外部代码/其他 agent/用户手动改过,会触发冲突:集成方若开启人工介入,工具会挂起等用户决定(保留外部/强制覆盖/回退),你应等待工具返回后按结果继续(保留外部→重新 get 再改;强制覆盖→已写入,继续;回退→已回退到历史快照,基于回退值重写);未开启人工介入时返回 VERSION_CONFLICT 不写入,重新 get 拿最新值与 hash 再改。"), n.push("不确定主数据字段结构时用 describe_data 查看说明。"), n.push("修改大对象/数组优先用 edit_data 增量 patch(只发改动部分),避免 set_data 整体重传被 max_tokens 截断导致 JSON 不完整、校验失败。"), n.push("修改主数据出错时可用 restore_data 回退最近一次。"), n.push("在大数组里按条件筛选元素用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素的 path/index;定位后再 edit_data 改。"), n.push("找名字记不清的元素用 search_data(支持 substring/regex/fuzzy 模糊搜索)。"), n.push("需要过滤/映射/聚合/批量重写大数组时用 eval_script(沙箱脚本,入参 data);只读探查用 mode=query,批量重写用 mode=transform(返回值经校验后落地)。"), n.push("读大数组用 read({jsonPath,offset,limit}) 分页(返回 hasMore=true 时 offset+=limit 续读);一次读多个不相关子路径用 read({jsonPaths});复杂改动先 write({...,dryRun:true}) 预检不落盘。"), n.push("对比当前与历史快照(或一段 JSON against)的差异用 diff_data({snapshotId?,against?})(返回结构化 path→from/to,verify 自纠/操作审计/\"刚才改了啥\");只读查历史快照值用 history_data({id?,jsonPath?})。"))), i.subagent && n.push("独立子任务可 spawn_agent 委派(只读工具,过程不占主上下文)。"), i.inspectEnv && n.push("排查页面环境(当前 URL/浏览器/视口/集成方调试变量)用 inspect_env——不传参返回环境摘要(location/navigator/viewport/document),传 key 读特定 window 属性(如 inspect_env({key:\"appConfig\"}) 读 window.appConfig)。改完数据看渲染、定位\"为何没生效\"时用它(只读,不改数据)。"), i.domInspect && n.push("改完数据想确认渲染是否生效(或定位元素/辅助 UI 设计问答)用 get_dom({selector?,depth?}) 读渲染后 DOM(结构化返回 tag/attrs/text/children,depth 控制深度防爆炸,只读)。配合宿主 actions(save_draft/publish 等)形成\"改数据→get_dom 看渲染→触发动作\"闭环。"), i.draftWrite && n.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。"), i.draftWrite && n.push("⚠️ 大 JSON 分块构建是典型多轮工具调用(draft_write×N + draft_commit + read 确认 + 调研 read/query),默认 maxToolRounds=10 可能触顶被 while 截断导致草稿写不完;目标组件数大时集成方应在 createChatSdk 配 maxToolRounds ≥ 20(或按 N+5 估算)。draft_commit 提交同样走乐观锁(改前 read 拿 hash,bind 被改过会触发冲突介入,不静默覆盖)。"), i.todoDeps && n.push("复杂任务可用 todos 层级依赖:write_todos 时给 todo 传 parentId(父任务 id,表达层级)+ deps(依赖的 todo id 数组,必须先完成)。有依赖的任务,deps 全 completed 后再标 in_progress;完成时 update_todo({id, status:\"completed\", evidence:\"完成证据\"}) 记证据。无依赖关系的任务不传 parentId/deps(扁平)。"), i.focus && !a && (n.push("【上下文聚焦】判断任务范围,用 set_focus/add_focus/remove_focus/clear_focus 自动收敛工作范围:"), n.push(" · 局部任务(只改某一组件/区域,如「调导航栏」「改 components.3 样式」)→ 先 read 定位 jsonPath,再 set_focus({path:\"该子树路径\"}) 聚焦;聚焦后每轮只看该子树结构,写其他位置会被 PATH_DENIED 拒绝。"), n.push(" · 多个相关组件(如「同时改导航栏和页脚」)→ set_focus 聚焦首个后用 add_focus({path}) 追加其余;聚焦后可写任一焦点子树,越界仍被拒;移除单个用 remove_focus({path})。"), n.push(" · 全局任务(多处/整体结构,如「重排所有组件」「换主题」)→ 不要聚焦,保持全量视野直接写。"), n.push(" · 完成局部精修、要转向其他区域或做整体改动 → 调 clear_focus 退出聚焦(清空全部焦点),恢复全部读写权限。"), n.push(" · set_focus/add_focus 的 path 必须在 schema 内(类型校验);不确定路径先 read/describe_data 查。")), r && (n.push("【受保护资源·精确值保护】部分字段被 freeze/verbatim 保护(集成方在 data.resources 声明):"), n.push(" · read 受保护路径返回占位符 ⟦frozen:path⟧(freeze,精确值不入消息流)或 ⟦res:handle⟧(verbatim,原值在资源池),非真值。"), n.push(" · 确需真值用 resource_get({path})(仅受保护路径);freeze 字段完全不可改,撞 FROZEN_FIELD 即放弃该字段改动。"), n.push(" · verbatim 字段改新值:先 resource_update({path,value}) 更新资源池(同步 bind),再 write 写回句柄 ⟦res:handle⟧;直接写新值 → VERBATIM_MISMATCH。"), n.push(" · 撞 RESOURCE_EVICTED(资源被池淘汰)→ 重新 read 该字段懒注册重建句柄;撞 RESOURCE_NOT_FOUND → 重新 read。")), e?.subagents?.length) {
|
|
8352
|
-
let t = e.subagents.filter((e) => (e.temperature ?? 0) >=
|
|
8395
|
+
let t = e.subagents.filter((e) => (e.temperature ?? 0) >= Kl || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), r = e.subagents.filter((e) => (e.temperature ?? 0) < Kl && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
|
|
8353
8396
|
n.push("【规划-反思-执行·路由】按任务性质选模式,不要对简单任务过度编排:"), t.length && (n.push(` · 创作/设计/开放性需求(如"设计主题风格""换个感觉")→ 先调 ${t.map((e) => "use_" + e.id).join("/")} 出 2-3 套方案(高温创意),`), n.push(" 不要自己拍板;拿到方案后,若需用户拍板用 request_human_confirmation 弹选项。")), r.length && n.push(` · 严谨/易错/校验类 → 可先调 ${r.map((e) => "use_" + e.id).join("/")} 反思挑刺(低温审查),据反馈修订。`), n.push(a ? " · 方案定稿后,由你(主 agent)用 write 落地成 JSON(低温度执行 + schema 校验 + 写前确认)。" : " · 方案定稿后,由你(主 agent)用 edit_data 落地成 JSON(低温度执行 + schema 校验 + 写前确认)。"), n.push(" · 简单/明确任务(如\"标题改红色\")直接执行,不必走规划-反思。");
|
|
8354
8397
|
}
|
|
8355
8398
|
return e?.humanConfirm && (n.push("【人工确认·必读】以下情形必须先调 request_human_confirmation 征询用户、拿到答复后再继续,不要自行拍板:"), n.push(" 1) 用户让你「给方案/列选项/我来选/挑一个」时:把每个方案作为一个 option,调 request_human_confirmation(question=简述, options=[方案A,方案B,...], recommendation=你推荐的)。不要只回文字罗列方案让用户自己回复——要用工具把选项做成可点选按钮。"), n.push(" 2) 需求有歧义/不确定时:调工具问清楚(options 不传则用户答同意或拒绝)。"), n.push(" 3) 即将执行高风险不可逆操作(删除/覆盖/批量改动)前:调工具确认。"), n.push(" 4) 规划出多步方案需用户确认时:把整个方案(或关键分步)作为 option 调 request_human_confirmation,确认后再执行。"), n.push("用户在选项里选了哪个,就按那个方案继续;选「拒绝」则停止并询问如何调整。")), n.length && n.unshift("调用工具务必用标准 function calling(工具调用)格式发起,不要在回复正文里输出伪 XML/标签(如 deepseek 的 tool_calls 标签、invoke、function_call、tool_call 等)或 JSON 文本——那不会被识别为工具调用,会被当普通文字,工具不执行。"), n.length ? "## 能力使用提示\n" + n.join("\n") : void 0;
|
|
@@ -8358,7 +8401,7 @@ function Wl(e, t, n = "simple", r = !1) {
|
|
|
8358
8401
|
}
|
|
8359
8402
|
//#endregion
|
|
8360
8403
|
//#region src/core/harness/resourcesPin.ts
|
|
8361
|
-
function
|
|
8404
|
+
function Jl(e) {
|
|
8362
8405
|
return {
|
|
8363
8406
|
name: "resourcesPin",
|
|
8364
8407
|
augmentPrompt: () => {
|
|
@@ -8372,78 +8415,78 @@ function Gl(e) {
|
|
|
8372
8415
|
}
|
|
8373
8416
|
//#endregion
|
|
8374
8417
|
//#region src/core/backends/skillStore.ts
|
|
8375
|
-
var
|
|
8376
|
-
function
|
|
8377
|
-
return `${
|
|
8418
|
+
var Yl = "v:1::skill-store", Xl = "chat-sdk";
|
|
8419
|
+
function Zl(e, t, n) {
|
|
8420
|
+
return `${Yl}::${e}::${t}::${n}`;
|
|
8378
8421
|
}
|
|
8379
|
-
function
|
|
8380
|
-
return `${
|
|
8422
|
+
function Ql(e, t) {
|
|
8423
|
+
return `${Yl}::${e}::${t}::`;
|
|
8381
8424
|
}
|
|
8382
|
-
function
|
|
8383
|
-
let t = e.dbName ??
|
|
8425
|
+
function $l(e = {}) {
|
|
8426
|
+
let t = e.dbName ?? Xl, n = e.backend ?? "indexed", r = e.id ?? "", i, a, o = new Promise((e) => {
|
|
8384
8427
|
a = e;
|
|
8385
8428
|
});
|
|
8386
8429
|
return (async () => {
|
|
8387
8430
|
try {
|
|
8388
8431
|
if (n === "indexed") {
|
|
8389
8432
|
if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
|
|
8390
|
-
i = await
|
|
8433
|
+
i = await Xs(t), a(!0);
|
|
8391
8434
|
} else if (n === "session") {
|
|
8392
8435
|
if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
|
|
8393
|
-
i =
|
|
8436
|
+
i = Zs(sessionStorage), a(!0);
|
|
8394
8437
|
} else if (n === "local") {
|
|
8395
8438
|
if (typeof localStorage > "u") throw Error("localStorage 不可用");
|
|
8396
|
-
i =
|
|
8397
|
-
} else i =
|
|
8439
|
+
i = Zs(localStorage), a(!0);
|
|
8440
|
+
} else i = Ys(), a(!1);
|
|
8398
8441
|
} catch {
|
|
8399
|
-
i =
|
|
8442
|
+
i = Ys(), a(!1);
|
|
8400
8443
|
}
|
|
8401
8444
|
})(), {
|
|
8402
8445
|
ready: o,
|
|
8403
8446
|
async list() {
|
|
8404
8447
|
let e = [];
|
|
8405
|
-
return await i.scan(
|
|
8448
|
+
return await i.scan(Ql(t, r), (t, n) => {
|
|
8406
8449
|
e.push(n);
|
|
8407
8450
|
}), e;
|
|
8408
8451
|
},
|
|
8409
8452
|
async get(e) {
|
|
8410
|
-
return await i.get(
|
|
8453
|
+
return await i.get(Zl(t, r, e));
|
|
8411
8454
|
},
|
|
8412
8455
|
async put(e) {
|
|
8413
8456
|
try {
|
|
8414
|
-
await i.set(
|
|
8457
|
+
await i.set(Zl(t, r, e.name), e);
|
|
8415
8458
|
} catch (e) {
|
|
8416
|
-
|
|
8459
|
+
Vs(e) && (i = Ys());
|
|
8417
8460
|
}
|
|
8418
8461
|
},
|
|
8419
8462
|
async remove(e) {
|
|
8420
|
-
let n =
|
|
8463
|
+
let n = Zl(t, r, e);
|
|
8421
8464
|
return await i.get(n) == null ? !1 : (await i.del(n), !0);
|
|
8422
8465
|
},
|
|
8423
8466
|
async clear() {
|
|
8424
|
-
await i.clearPrefix(
|
|
8467
|
+
await i.clearPrefix(Ql(t, r));
|
|
8425
8468
|
},
|
|
8426
8469
|
dispose() {}
|
|
8427
8470
|
};
|
|
8428
8471
|
}
|
|
8429
|
-
var
|
|
8430
|
-
function
|
|
8472
|
+
var eu = /large_results\/[^\s"'`),]+\.txt/g;
|
|
8473
|
+
function tu(e) {
|
|
8431
8474
|
let t = /* @__PURE__ */ new Set(), n = (e) => {
|
|
8432
8475
|
if (typeof e != "string" || !e) return;
|
|
8433
8476
|
let n;
|
|
8434
|
-
for (
|
|
8477
|
+
for (eu.lastIndex = 0; (n = eu.exec(e)) !== null;) t.add(n[0]);
|
|
8435
8478
|
};
|
|
8436
8479
|
for (let t of e) if (n(t.content), t.steps) for (let e of t.steps) n(e.result);
|
|
8437
8480
|
return t;
|
|
8438
8481
|
}
|
|
8439
|
-
function
|
|
8482
|
+
function nu(e, t) {
|
|
8440
8483
|
let n = [];
|
|
8441
8484
|
for (let r of Object.keys(e)) r.startsWith("large_results/") && !t.has(r) && n.push(r);
|
|
8442
8485
|
return n;
|
|
8443
8486
|
}
|
|
8444
8487
|
//#endregion
|
|
8445
8488
|
//#region src/core/utils/serialRunner.ts
|
|
8446
|
-
function
|
|
8489
|
+
function ru() {
|
|
8447
8490
|
let e = Promise.resolve();
|
|
8448
8491
|
return function(t) {
|
|
8449
8492
|
let n = e.then(t, t);
|
|
@@ -8452,16 +8495,16 @@ function eu() {
|
|
|
8452
8495
|
}
|
|
8453
8496
|
//#endregion
|
|
8454
8497
|
//#region src/core/sdk/createChatSdk.ts
|
|
8455
|
-
var
|
|
8456
|
-
function
|
|
8498
|
+
var iu = 30, au = /* @__PURE__ */ new Map();
|
|
8499
|
+
function ou(e, t) {
|
|
8457
8500
|
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;
|
|
8458
8501
|
}
|
|
8459
|
-
function
|
|
8502
|
+
function su(e, t, n, r) {
|
|
8460
8503
|
let i = 0;
|
|
8461
8504
|
return {
|
|
8462
8505
|
name: "sdk-events",
|
|
8463
8506
|
wrapToolCall: async (t, r) => {
|
|
8464
|
-
let i = await r(t), a =
|
|
8507
|
+
let i = await r(t), a = ou(t.name, t.args);
|
|
8465
8508
|
return a && e({
|
|
8466
8509
|
type: "data_change",
|
|
8467
8510
|
operation: a,
|
|
@@ -8496,7 +8539,7 @@ function iu(e, t, n, r) {
|
|
|
8496
8539
|
}
|
|
8497
8540
|
};
|
|
8498
8541
|
}
|
|
8499
|
-
function
|
|
8542
|
+
function cu(e, t, n, r, i) {
|
|
8500
8543
|
if (!n) return i && console.warn(`[page-agent-sdk][focus] capabilities.focus 关闭,${t} 忽略`), {
|
|
8501
8544
|
ok: !1,
|
|
8502
8545
|
error: "capabilities.focus 关闭"
|
|
@@ -8514,18 +8557,18 @@ function au(e, t, n, r, i) {
|
|
|
8514
8557
|
error: "当前无主数据 schema,无法聚焦"
|
|
8515
8558
|
});
|
|
8516
8559
|
}
|
|
8517
|
-
function
|
|
8560
|
+
function lu(e, n) {
|
|
8518
8561
|
let i = {
|
|
8519
8562
|
prompt_tokens: 0,
|
|
8520
8563
|
completion_tokens: 0,
|
|
8521
8564
|
total_tokens: 0
|
|
8522
|
-
}, a =
|
|
8565
|
+
}, a = Os(() => U), o = /* @__PURE__ */ Ot(0), s = ec(e.storage);
|
|
8523
8566
|
e.debug && s && s.onEvent((e) => console.log("[page-agent-sdk][storage]", e));
|
|
8524
|
-
let { modelCaps: c, summaryLlmInvoke: l, titleLlmInvoke: u, compressDecisionInvoke: p } =
|
|
8567
|
+
let { modelCaps: c, summaryLlmInvoke: l, titleLlmInvoke: u, compressDecisionInvoke: p } = Ds(e), m = c;
|
|
8525
8568
|
if (e.debug && console.log("[page-agent-sdk][modelCaps]", m), m.contextWindow < 2e5) throw Error(`[page-agent-sdk] 模型上下文窗口 ${m.contextWindow} 小于最小支持 ${ti}(需 ≥200K 窗口模型,如 GLM-5.2/Claude/Kimi/Qwen-1M/DeepSeek-v4)`);
|
|
8526
|
-
let h =
|
|
8569
|
+
let h = sc(e, m.contextWindow), g = h.enableLLMSummary !== !1, _ = (e.contextOptions && e.contextOptions.preserveLastToolResults) ?? oc[e.contextPreset ?? "auto"], v = new Set(_), y = e.llm;
|
|
8527
8570
|
e.debug && !l && console.warn("[page-agent-sdk][summarization] 未构造 llmInvoke(apiKey 缺失?),摘要回退零成本索引摘要");
|
|
8528
|
-
let b = /* @__PURE__ */ _t([]), x =
|
|
8571
|
+
let b = /* @__PURE__ */ _t([]), x = Oc(e.vfs?.initialFiles, {
|
|
8529
8572
|
persist: s ? { save: (e) => {
|
|
8530
8573
|
W.sessionId && s && s.save(n, W.sessionId, { vfs: e });
|
|
8531
8574
|
} } : void 0,
|
|
@@ -8545,18 +8588,18 @@ function ou(e, n) {
|
|
|
8545
8588
|
getTodos: () => ee.current?.getState?.()?.todos ?? [],
|
|
8546
8589
|
messages: b,
|
|
8547
8590
|
maxCheckpoints: O && typeof O == "object" ? O.maxCheckpoints : void 0
|
|
8548
|
-
}) : null, te = !O || typeof O != "object" || O.auto !== !1, j =
|
|
8591
|
+
}) : null, te = !O || typeof O != "object" || O.auto !== !1, j = rc(e.capabilities), ne = j.dataOps, M = j.draftWrite, N = j.tracing, re = j.automation, P = fs(e), ie = ne && D ? xl(D, {
|
|
8549
8592
|
onAudit: e.onAudit ?? (e.debug ? (e) => console.log("[page-agent-sdk][data audit]", e) : void 0),
|
|
8550
8593
|
maxSnapshots: e.maxSnapshots,
|
|
8551
8594
|
onConflict: a.set,
|
|
8552
8595
|
autoLock: e.autoLock,
|
|
8553
8596
|
interceptors: e.interceptors,
|
|
8554
8597
|
vfsStore: M || D?.resources?.length ? x : void 0
|
|
8555
|
-
}) : [], ae = ne ?
|
|
8598
|
+
}) : [], ae = ne ? vl(ie, e.toolMode) : [], oe = ne && D ? ie.controller ?? null : null, se = ne && D?.resources?.length && oe?.getResourcesSnapshot ? Jl({ getResourcesSnapshot: () => oe?.getResourcesSnapshot?.() ?? [] }) : void 0, F = () => oe?.get() ?? D, I = /* @__PURE__ */ new Map(), ce = Wl(j, ae, Cl, kl, Il);
|
|
8556
8599
|
ce.forEach((e) => I.set(e.name, "builtin"));
|
|
8557
8600
|
let le = [...e.tools || []];
|
|
8558
8601
|
le.forEach((e) => I.set(e.name, "user"));
|
|
8559
|
-
let L =
|
|
8602
|
+
let L = zl(e.actions ?? {});
|
|
8560
8603
|
L.forEach((e) => I.set(e.name, "action"));
|
|
8561
8604
|
let ue = [], de = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), fe = de ? Wa() : null;
|
|
8562
8605
|
fe && I.set(Ha, "builtin");
|
|
@@ -8628,7 +8671,7 @@ function ou(e, n) {
|
|
|
8628
8671
|
ve.forEach((e) => I.set(e.name, "builtin"));
|
|
8629
8672
|
let z = [], ye = /* @__PURE__ */ new Map(), B = be();
|
|
8630
8673
|
function be() {
|
|
8631
|
-
let { tools: e, collisions: t } =
|
|
8674
|
+
let { tools: e, collisions: t } = Gl([
|
|
8632
8675
|
{
|
|
8633
8676
|
label: "builtin",
|
|
8634
8677
|
tools: ce
|
|
@@ -8665,15 +8708,15 @@ function ou(e, n) {
|
|
|
8665
8708
|
return t.length && console.warn("[page-agent-sdk] 工具重名,后注册覆盖先注册:", t.map((e) => `${e.name}(${e.loser}→${e.winner})`).join(", ")), e;
|
|
8666
8709
|
}
|
|
8667
8710
|
let xe = j.planning, Se = j.missionAnchor, Ce = j.workingMemory, we = j.skills, Te = j.vfs;
|
|
8668
|
-
if (Te) for (let e of
|
|
8711
|
+
if (Te) for (let e of Fc) I.set(e, "builtin");
|
|
8669
8712
|
if (xe) for (let e of S.tools ?? []) I.set(e.name, "builtin");
|
|
8670
8713
|
let Ee = j.summarization, De = j.agentCompression && !!p;
|
|
8671
8714
|
e.debug && j.agentCompression && !p && console.warn("[page-agent-sdk][agentCompression] agentCompression 开启但 summaryLlm 不可用(或缺 apiKey / 模型不支持工具),压缩决策不启用,回退静态压缩");
|
|
8672
8715
|
let Oe = j.memory, ke = j.subagent, Ae = ke ? bo() : void 0, je = e.verify?.maxAttempts ?? 2, Me = j.verify && e.verify?.enabled !== !1 && je > 0, Ne = j.contextInspector;
|
|
8673
8716
|
e.verify?.check && !j.verify && console.warn("[page-agent-sdk][verify] 检测到 verify.check 但 capabilities.verify 未开启,verify 未装载");
|
|
8674
|
-
let Pe = e.subagent, Fe = Pe?.allowedTools ?? [], Ie = !ke || Pe?.enabled === !1 ? void 0 :
|
|
8717
|
+
let Pe = e.subagent, Fe = Pe?.allowedTools ?? [], Ie = e.permissions?.length ? Ba(e.permissions) : void 0, Le = e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? Va(e.approval) : void 0, Re = [...Ie ? [Ie] : [], ...Le ? [Le] : []], V = !ke || Pe?.enabled === !1 ? void 0 : Fo({
|
|
8675
8718
|
llm: Pe?.llm ?? e.llm,
|
|
8676
|
-
allTools: () => B,
|
|
8719
|
+
allTools: () => W.agent?.allTools ?? B,
|
|
8677
8720
|
allowedTools: Fe.length ? Fe : void 0,
|
|
8678
8721
|
systemPrompt: Pe?.systemPrompt,
|
|
8679
8722
|
temperature: Pe?.temperature,
|
|
@@ -8684,32 +8727,36 @@ function ou(e, n) {
|
|
|
8684
8727
|
debug: e.debug,
|
|
8685
8728
|
getFocuses: () => w.getFocuses(),
|
|
8686
8729
|
getSchema: () => F()?.schema ?? null,
|
|
8687
|
-
tracker: Ae
|
|
8688
|
-
|
|
8730
|
+
tracker: Ae,
|
|
8731
|
+
guardMiddleware: Re.length ? Re : void 0,
|
|
8732
|
+
getVfsFiles: Te ? () => x.files : void 0
|
|
8733
|
+
}), H = ke && e.subagents !== void 0 ? Ro(e.subagents, {
|
|
8689
8734
|
llm: e.llm,
|
|
8690
|
-
allTools: () => B,
|
|
8735
|
+
allTools: () => W.agent?.allTools ?? B,
|
|
8691
8736
|
debug: e.debug,
|
|
8692
8737
|
getFocuses: () => w.getFocuses(),
|
|
8693
8738
|
getSchema: () => F()?.schema ?? null,
|
|
8694
|
-
tracker: Ae
|
|
8695
|
-
|
|
8739
|
+
tracker: Ae,
|
|
8740
|
+
guardMiddleware: Re.length ? Re : void 0,
|
|
8741
|
+
getVfsFiles: Te ? () => x.files : void 0
|
|
8742
|
+
}) : void 0, ze = H ? H.controller : null, Be = [
|
|
8696
8743
|
"get_data",
|
|
8697
8744
|
"describe_data",
|
|
8698
8745
|
"read",
|
|
8699
8746
|
"fetch_document"
|
|
8700
|
-
],
|
|
8701
|
-
check: e.verify.check ??
|
|
8747
|
+
], Ve = B.filter((e) => Be.includes(e.name)), He = Me ? zo({
|
|
8748
|
+
check: e.verify.check ?? Go({
|
|
8702
8749
|
schemas: () => F() ? { "": F().schema } : {},
|
|
8703
8750
|
root: () => F()?.bind
|
|
8704
8751
|
}),
|
|
8705
8752
|
adversarial: e.verify?.adversarial ? {
|
|
8706
8753
|
llm: e.llm,
|
|
8707
|
-
tools:
|
|
8754
|
+
tools: Ve
|
|
8708
8755
|
} : void 0
|
|
8709
|
-
}) : void 0,
|
|
8756
|
+
}) : void 0, Ue = Ne ? as({
|
|
8710
8757
|
contextWindow: m.contextWindow,
|
|
8711
|
-
thresholdRatio:
|
|
8712
|
-
}) : void 0,
|
|
8758
|
+
thresholdRatio: sc(e, m.contextWindow).summaryThresholdRatio
|
|
8759
|
+
}) : void 0, We = ql({
|
|
8713
8760
|
...j,
|
|
8714
8761
|
humanConfirm: de,
|
|
8715
8762
|
subagents: e.subagents?.map((e) => ({
|
|
@@ -8717,10 +8764,10 @@ function ou(e, n) {
|
|
|
8717
8764
|
description: e.description,
|
|
8718
8765
|
temperature: e.temperature
|
|
8719
8766
|
}))
|
|
8720
|
-
}, ne && !!D, e.toolMode, !!D?.resources?.length),
|
|
8767
|
+
}, ne && !!D, e.toolMode, !!D?.resources?.length), Ge = D ? {
|
|
8721
8768
|
name: "dataHint",
|
|
8722
|
-
augmentPrompt: () =>
|
|
8723
|
-
} : null,
|
|
8769
|
+
augmentPrompt: () => ds(F(), e.schemaHint) || void 0
|
|
8770
|
+
} : null, Ke = e.augmentSystem ? {
|
|
8724
8771
|
name: "augmentSystem",
|
|
8725
8772
|
augmentPrompt: (t) => {
|
|
8726
8773
|
try {
|
|
@@ -8733,52 +8780,52 @@ function ou(e, n) {
|
|
|
8733
8780
|
return;
|
|
8734
8781
|
}
|
|
8735
8782
|
}
|
|
8736
|
-
} : null,
|
|
8783
|
+
} : null, qe = ic(e.onEvent), U = qe.emit, Je, Ye = [], Xe = (e) => ({
|
|
8737
8784
|
name: e.name,
|
|
8738
8785
|
description: e.description,
|
|
8739
8786
|
content: typeof e.getContent == "function" ? e.getContent() : ""
|
|
8740
|
-
}),
|
|
8787
|
+
}), Ze = (e) => ({
|
|
8741
8788
|
name: e.name,
|
|
8742
8789
|
description: e.description,
|
|
8743
8790
|
getContent: () => e.content
|
|
8744
|
-
}),
|
|
8791
|
+
}), Qe = e.skillStorage === !1 ? null : $l({
|
|
8745
8792
|
...typeof e.skillStorage == "object" ? e.skillStorage : {},
|
|
8746
8793
|
id: e.skillStorage && typeof e.skillStorage == "object" && e.skillStorage.id ? e.skillStorage.id : `agent::${n}`
|
|
8747
|
-
}),
|
|
8748
|
-
let t =
|
|
8794
|
+
}), $e = () => {
|
|
8795
|
+
let t = Je ? Je.controller : null;
|
|
8749
8796
|
if (t) {
|
|
8750
|
-
let n = (e.skills || []).filter((e) => !
|
|
8751
|
-
t.set([...n, ...
|
|
8797
|
+
let n = (e.skills || []).filter((e) => !Ye.some((t) => t.name === e.name));
|
|
8798
|
+
t.set([...n, ...Ye]);
|
|
8752
8799
|
}
|
|
8753
8800
|
W.infoTick.value++;
|
|
8754
|
-
},
|
|
8755
|
-
if (
|
|
8756
|
-
let t = await
|
|
8801
|
+
}, et = async () => {
|
|
8802
|
+
if (Qe) try {
|
|
8803
|
+
let t = await Qe.list();
|
|
8757
8804
|
if (t.length) {
|
|
8758
|
-
|
|
8759
|
-
let n =
|
|
8805
|
+
Ye = t.map(Ze);
|
|
8806
|
+
let n = Je ? Je.controller : null;
|
|
8760
8807
|
if (n) {
|
|
8761
|
-
let t = (e.skills || []).filter((e) => !
|
|
8762
|
-
n.set([...t, ...
|
|
8808
|
+
let t = (e.skills || []).filter((e) => !Ye.some((t) => t.name === e.name));
|
|
8809
|
+
n.set([...t, ...Ye]);
|
|
8763
8810
|
}
|
|
8764
8811
|
W.infoTick.value++;
|
|
8765
8812
|
}
|
|
8766
8813
|
} catch {}
|
|
8767
|
-
},
|
|
8814
|
+
}, tt = Ee ? yo({
|
|
8768
8815
|
...h,
|
|
8769
8816
|
llmInvoke: l,
|
|
8770
8817
|
getRegisteredData: () => F() ? [{ description: F().description ?? "主数据对象" }] : [],
|
|
8771
8818
|
preserveLastToolResults: _,
|
|
8772
8819
|
...De ? {
|
|
8773
8820
|
decideInvoke: p,
|
|
8774
|
-
getSnapshot: () =>
|
|
8821
|
+
getSnapshot: () => Ue?.getSnapshot()
|
|
8775
8822
|
} : {}
|
|
8776
|
-
}) : void 0,
|
|
8777
|
-
...
|
|
8778
|
-
|
|
8823
|
+
}) : void 0, nt = lc([
|
|
8824
|
+
...Ge ? [Ge] : [],
|
|
8825
|
+
We,
|
|
8779
8826
|
...Se ? [C] : [],
|
|
8780
8827
|
...xe ? [S] : [],
|
|
8781
|
-
...we ? [
|
|
8828
|
+
...we ? [Je = Na(e.skills || [], {
|
|
8782
8829
|
readVfs: Te ? (e) => x.files[e]?.content : void 0,
|
|
8783
8830
|
hostScriptEnabled: j.skillHostScript,
|
|
8784
8831
|
onToolsReady: (e, t) => {
|
|
@@ -8789,37 +8836,37 @@ function ou(e, n) {
|
|
|
8789
8836
|
B = be(), W.agent && W.agent.setTools(B), W.infoTick.value++;
|
|
8790
8837
|
}
|
|
8791
8838
|
})] : [],
|
|
8792
|
-
...Te ? [
|
|
8793
|
-
...
|
|
8839
|
+
...Te ? [Lc(x)] : [],
|
|
8840
|
+
...tt ? [tt] : [],
|
|
8794
8841
|
...Ce ? [T] : [],
|
|
8795
8842
|
...R ? [w] : [],
|
|
8796
8843
|
...se ? [se] : [],
|
|
8797
8844
|
...Oe ? [E] : [],
|
|
8798
|
-
...
|
|
8845
|
+
...Ie ? [Ie] : [],
|
|
8799
8846
|
...k && te && A ? [$a(A)] : [],
|
|
8800
8847
|
...de ? [Ga()] : [],
|
|
8801
|
-
...e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? [Va(e.approval)] : [],
|
|
8802
|
-
...Be ? [Be] : [],
|
|
8803
|
-
...Ie ? [Ie] : [],
|
|
8804
8848
|
...Le ? [Le] : [],
|
|
8805
|
-
...
|
|
8806
|
-
...
|
|
8849
|
+
...He ? [He] : [],
|
|
8850
|
+
...V ? [V] : [],
|
|
8851
|
+
...H ? [H] : [],
|
|
8852
|
+
...Ke ? [Ke] : [],
|
|
8853
|
+
...Ue ? [Ue] : [],
|
|
8807
8854
|
...e.middleware || [],
|
|
8808
|
-
...re ? [
|
|
8855
|
+
...re ? [Ll(i, {
|
|
8809
8856
|
tokenBudget: e.tokenBudget,
|
|
8810
8857
|
timeBudgetMs: e.timeBudgetMs
|
|
8811
|
-
},
|
|
8812
|
-
|
|
8813
|
-
]),
|
|
8814
|
-
async function
|
|
8815
|
-
s && (
|
|
8858
|
+
}, U)] : [],
|
|
8859
|
+
su(U, b, F, i)
|
|
8860
|
+
]), rt = e.maxMemoryRounds ?? iu, it = /* @__PURE__ */ Ot([]);
|
|
8861
|
+
async function at() {
|
|
8862
|
+
s && (it.value = (await s.listSessions(n)).sort((e, t) => t.lastAccessed - e.lastAccessed));
|
|
8816
8863
|
}
|
|
8817
8864
|
let W = {
|
|
8818
8865
|
agentId: n,
|
|
8819
8866
|
store: s,
|
|
8820
8867
|
messages: b,
|
|
8821
8868
|
vfsStore: x,
|
|
8822
|
-
listeners:
|
|
8869
|
+
listeners: qe.listeners,
|
|
8823
8870
|
todosMw: S,
|
|
8824
8871
|
memoryMw: E,
|
|
8825
8872
|
missionMw: C,
|
|
@@ -8833,14 +8880,14 @@ function ou(e, n) {
|
|
|
8833
8880
|
mcpServers: [],
|
|
8834
8881
|
checkpoint: A,
|
|
8835
8882
|
dataOpsController: oe,
|
|
8836
|
-
skillsController:
|
|
8883
|
+
skillsController: Je ? Je.controller : null,
|
|
8837
8884
|
infoTick: o,
|
|
8838
8885
|
pendingConflict: a.pendingConflict,
|
|
8839
|
-
sessions:
|
|
8840
|
-
refreshSessions:
|
|
8886
|
+
sessions: it,
|
|
8887
|
+
refreshSessions: at,
|
|
8841
8888
|
liveData: F,
|
|
8842
8889
|
usage: i,
|
|
8843
|
-
emit:
|
|
8890
|
+
emit: U,
|
|
8844
8891
|
unloadSkillTools(e) {
|
|
8845
8892
|
if (e) {
|
|
8846
8893
|
let t = z.length;
|
|
@@ -8863,21 +8910,21 @@ function ou(e, n) {
|
|
|
8863
8910
|
}
|
|
8864
8911
|
}
|
|
8865
8912
|
}
|
|
8866
|
-
|
|
8913
|
+
lt();
|
|
8867
8914
|
},
|
|
8868
8915
|
addSkill(e) {
|
|
8869
|
-
let t =
|
|
8870
|
-
t >= 0 ?
|
|
8916
|
+
let t = Ye.findIndex((t) => t.name === e.name);
|
|
8917
|
+
t >= 0 ? Ye[t] = e : Ye.push(e), $e(), Qe && Qe.put(Xe(e));
|
|
8871
8918
|
},
|
|
8872
8919
|
removeSkill(e) {
|
|
8873
|
-
let t =
|
|
8874
|
-
return t < 0 ? !1 : (
|
|
8920
|
+
let t = Ye.findIndex((t) => t.name === e);
|
|
8921
|
+
return t < 0 ? !1 : (Ye.splice(t, 1), $e(), Qe && Qe.remove(e), !0);
|
|
8875
8922
|
},
|
|
8876
8923
|
listUserSkills() {
|
|
8877
|
-
return
|
|
8924
|
+
return Ye.map((e) => e.name);
|
|
8878
8925
|
},
|
|
8879
8926
|
getUserSkill(e) {
|
|
8880
|
-
let t =
|
|
8927
|
+
let t = Ye.find((t) => t.name === e);
|
|
8881
8928
|
if (t) return {
|
|
8882
8929
|
name: t.name,
|
|
8883
8930
|
description: t.description,
|
|
@@ -8885,7 +8932,7 @@ function ou(e, n) {
|
|
|
8885
8932
|
};
|
|
8886
8933
|
},
|
|
8887
8934
|
afterRound() {
|
|
8888
|
-
|
|
8935
|
+
ut(), pt();
|
|
8889
8936
|
},
|
|
8890
8937
|
async send(e, t) {
|
|
8891
8938
|
await W.initDone, t ??= {}, t?.mission && Se && C.setMission(t.mission);
|
|
@@ -8915,7 +8962,7 @@ function ou(e, n) {
|
|
|
8915
8962
|
} catch (e) {
|
|
8916
8963
|
let t = qr(e, "fatal");
|
|
8917
8964
|
if (i < r && A?.canRestore()) {
|
|
8918
|
-
i += 1, A.restore(), a = !0,
|
|
8965
|
+
i += 1, A.restore(), a = !0, U({
|
|
8919
8966
|
type: "error",
|
|
8920
8967
|
message: `致命错误自动恢复(${i}/${r}):${t.message},已回退 checkpoint 重试`,
|
|
8921
8968
|
severity: "observable",
|
|
@@ -8927,7 +8974,7 @@ function ou(e, n) {
|
|
|
8927
8974
|
});
|
|
8928
8975
|
continue;
|
|
8929
8976
|
}
|
|
8930
|
-
throw
|
|
8977
|
+
throw U({
|
|
8931
8978
|
type: "error",
|
|
8932
8979
|
message: t.message,
|
|
8933
8980
|
severity: t.severity,
|
|
@@ -8969,7 +9016,7 @@ function ou(e, n) {
|
|
|
8969
9016
|
} catch (o) {
|
|
8970
9017
|
b.length > a && b.splice(a);
|
|
8971
9018
|
let s = qr(o, "fatal");
|
|
8972
|
-
|
|
9019
|
+
U({
|
|
8973
9020
|
type: "error",
|
|
8974
9021
|
message: `批量任务 ${r + 1}/${e.length} 失败:${s.message}`,
|
|
8975
9022
|
severity: "observable",
|
|
@@ -9011,24 +9058,24 @@ function ou(e, n) {
|
|
|
9011
9058
|
}
|
|
9012
9059
|
x.flush?.(), await s.flush();
|
|
9013
9060
|
let r = t ?? "", i;
|
|
9014
|
-
return r ? (i = await s.load(n, r), i || await s.createSession(n, e.session?.title, r)) : r = await s.createSession(n, e.session?.title), W.sessionId = r, b.splice(0, b.length), x.clear?.(), S.reset([]), e.memory || E.reset(""), C.reset(), T.reset(), w.reset(), A && A.importStack([]), W.agent.debugLogs.value = [], i ||= await s.load(n, r), i && (W.applySnapshot(i),
|
|
9061
|
+
return r ? (i = await s.load(n, r), i || await s.createSession(n, e.session?.title, r)) : r = await s.createSession(n, e.session?.title), W.sessionId = r, b.splice(0, b.length), x.clear?.(), S.reset([]), e.memory || E.reset(""), C.reset(), T.reset(), w.reset(), A && A.importStack([]), W.agent.debugLogs.value = [], i ||= await s.load(n, r), i && (W.applySnapshot(i), U({
|
|
9015
9062
|
type: "session_restored",
|
|
9016
9063
|
sessionId: r,
|
|
9017
9064
|
rounds: i.messages?.length ?? 0
|
|
9018
|
-
})), e.memory && s.save(n, W.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }),
|
|
9065
|
+
})), e.memory && s.save(n, W.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), at(), dt = void 0, ft = !1, r;
|
|
9019
9066
|
},
|
|
9020
9067
|
resetSession: () => {
|
|
9021
|
-
s && (W.sessionId =
|
|
9068
|
+
s && (W.sessionId = ks(), x.clear?.(), S.reset([]), e.memory || E.reset(""), C.reset(), T.reset(), w.reset(), A && A.importStack([]), W.agent && (W.agent.debugLogs.value = []), s.createSession(W.agentId, e.session?.title, W.sessionId), U({
|
|
9022
9069
|
type: "session_restored",
|
|
9023
9070
|
sessionId: W.sessionId,
|
|
9024
9071
|
rounds: 0
|
|
9025
|
-
}),
|
|
9072
|
+
}), at(), dt = void 0, ft = !1);
|
|
9026
9073
|
},
|
|
9027
9074
|
stream: (e, t, n) => {
|
|
9028
9075
|
if (!W.agent) throw Error("page-agent-sdk: agent 尚未初始化完成,请先 await mount()");
|
|
9029
|
-
x?.setProtectedRefs?.(
|
|
9076
|
+
x?.setProtectedRefs?.(tu(e));
|
|
9030
9077
|
let r = (e) => {
|
|
9031
|
-
t?.(e),
|
|
9078
|
+
t?.(e), U(e);
|
|
9032
9079
|
};
|
|
9033
9080
|
if (n) {
|
|
9034
9081
|
let e = () => a.resolve("keep_external");
|
|
@@ -9038,9 +9085,9 @@ function ou(e, n) {
|
|
|
9038
9085
|
},
|
|
9039
9086
|
release() {
|
|
9040
9087
|
if (W.refCount--, W.refCount <= 0) {
|
|
9041
|
-
s && (x.flush?.(), s.flush(), s.dispose()),
|
|
9088
|
+
s && (x.flush?.(), s.flush(), s.dispose()), Qe && Qe.dispose();
|
|
9042
9089
|
let e = W.mcpClosers.splice(0);
|
|
9043
|
-
e.length && Promise.allSettled(e.map((e) => e())),
|
|
9090
|
+
e.length && Promise.allSettled(e.map((e) => e())), au.delete(n);
|
|
9044
9091
|
}
|
|
9045
9092
|
},
|
|
9046
9093
|
resolveConflict: a.resolve,
|
|
@@ -9060,20 +9107,20 @@ function ou(e, n) {
|
|
|
9060
9107
|
},
|
|
9061
9108
|
setLlm(t) {
|
|
9062
9109
|
let n;
|
|
9063
|
-
if (
|
|
9110
|
+
if (vs(t)) n = t;
|
|
9064
9111
|
else {
|
|
9065
9112
|
let e = t;
|
|
9066
9113
|
if ((e.provider ?? "openai") === "anthropic") throw Error("[page-agent-sdk][setLlm] 切换到 Anthropic 需传 BaseChatModel 实例(动态 import 无法同步);请先 const { ChatAnthropic } = await import(\"@langchain/anthropic\") 构造实例后传入");
|
|
9067
9114
|
n = d(e);
|
|
9068
9115
|
}
|
|
9069
9116
|
typeof n.bindTools != "function" && e.debug && console.warn("[page-agent-sdk][setLlm] 新模型不支持 bindTools(tool calling 会失效)"), y = t;
|
|
9070
|
-
let r =
|
|
9117
|
+
let r = vs(t) ? void 0 : t;
|
|
9071
9118
|
if (m = ni({
|
|
9072
9119
|
model: r?.model ?? t.model ?? t.modelName,
|
|
9073
9120
|
contextWindow: e.contextWindow ?? r?.contextWindow,
|
|
9074
9121
|
maxOutputTokens: e.maxOutputTokens ?? r?.maxOutputTokens
|
|
9075
9122
|
}), m.contextWindow < 2e5) throw Error(`[page-agent-sdk][setLlm] 新模型上下文窗口 ${m.contextWindow} 小于最小支持 ${ti}(需 ≥200K 窗口模型)`);
|
|
9076
|
-
W.agent && (W.agent.setLlm(n), W.agent.setModelCaps?.(m)),
|
|
9123
|
+
W.agent && (W.agent.setLlm(n), W.agent.setModelCaps?.(m)), tt?.setContextWindow?.(m.contextWindow), Ue?.setContextWindow?.(m.contextWindow), W.infoTick.value++, e.debug && console.log("[page-agent-sdk][setLlm] 重解析 modelCaps + 回灌:", m);
|
|
9077
9124
|
},
|
|
9078
9125
|
setMemory(e) {
|
|
9079
9126
|
E.reset(e), typeof e == "function" && E.refresh(), W.infoTick.value++;
|
|
@@ -9082,22 +9129,22 @@ function ou(e, n) {
|
|
|
9082
9129
|
return E.refresh();
|
|
9083
9130
|
},
|
|
9084
9131
|
setSubagents(t) {
|
|
9085
|
-
if (!
|
|
9132
|
+
if (!ze) {
|
|
9086
9133
|
e.debug && console.warn("[page-agent-sdk][setSubagents] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略");
|
|
9087
9134
|
return;
|
|
9088
9135
|
}
|
|
9089
|
-
|
|
9136
|
+
ze.set(t), W.infoTick.value++;
|
|
9090
9137
|
},
|
|
9091
9138
|
addSubagent(t) {
|
|
9092
|
-
if (!
|
|
9139
|
+
if (!ze) {
|
|
9093
9140
|
e.debug && console.warn("[page-agent-sdk][addSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略");
|
|
9094
9141
|
return;
|
|
9095
9142
|
}
|
|
9096
|
-
|
|
9143
|
+
ze.add(t), W.infoTick.value++;
|
|
9097
9144
|
},
|
|
9098
9145
|
removeSubagent(t) {
|
|
9099
|
-
if (!
|
|
9100
|
-
let n =
|
|
9146
|
+
if (!ze) return e.debug && console.warn("[page-agent-sdk][removeSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略"), !1;
|
|
9147
|
+
let n = ze.remove(t);
|
|
9101
9148
|
return n && W.infoTick.value++, n;
|
|
9102
9149
|
},
|
|
9103
9150
|
getActiveSubagents() {
|
|
@@ -9110,15 +9157,15 @@ function ou(e, n) {
|
|
|
9110
9157
|
return {
|
|
9111
9158
|
id: n,
|
|
9112
9159
|
sessionId: W.sessionId,
|
|
9113
|
-
model:
|
|
9114
|
-
systemPrompt: W.agent?.getEffectiveSystemPrompt?.() ?? P +
|
|
9160
|
+
model: vs(y) ? y.model ?? y.modelName : y.model,
|
|
9161
|
+
systemPrompt: W.agent?.getEffectiveSystemPrompt?.() ?? P + ds(F(), e.schemaHint),
|
|
9115
9162
|
tools: (W.agent?.allTools ?? B).map((e) => ({
|
|
9116
9163
|
name: e.name,
|
|
9117
9164
|
description: e.description,
|
|
9118
9165
|
schema: e.schema,
|
|
9119
9166
|
source: I.get(e.name) || "user"
|
|
9120
9167
|
})),
|
|
9121
|
-
skills: (
|
|
9168
|
+
skills: (Je ? Je.controller.get() : e.skills ?? []).map((e) => ({
|
|
9122
9169
|
name: e.name,
|
|
9123
9170
|
description: e.description
|
|
9124
9171
|
})),
|
|
@@ -9128,7 +9175,7 @@ function ou(e, n) {
|
|
|
9128
9175
|
} : void 0,
|
|
9129
9176
|
contextPreset: e.contextPreset ?? "auto",
|
|
9130
9177
|
memory: E.get(),
|
|
9131
|
-
middleware:
|
|
9178
|
+
middleware: nt.map((e) => e.name),
|
|
9132
9179
|
todos: (W.agent?.getState?.()?.todos ?? []).map((e) => ({
|
|
9133
9180
|
id: e.id,
|
|
9134
9181
|
content: e.content,
|
|
@@ -9147,23 +9194,23 @@ function ou(e, n) {
|
|
|
9147
9194
|
spans: W.agent.spans.value,
|
|
9148
9195
|
metrics: ai(W.agent.spans.value)
|
|
9149
9196
|
} : void 0,
|
|
9150
|
-
actions:
|
|
9197
|
+
actions: Bl(e.actions ?? {}),
|
|
9151
9198
|
subagent: {
|
|
9152
|
-
enabled: !!
|
|
9199
|
+
enabled: !!V,
|
|
9153
9200
|
maxDepth: e.subagent?.maxDepth ?? 1,
|
|
9154
9201
|
maxParallel: e.subagent?.maxParallel ?? 4,
|
|
9155
9202
|
allowedTools: e.subagent?.allowedTools ?? [],
|
|
9156
|
-
subagents:
|
|
9203
|
+
subagents: ze?.get() ?? [],
|
|
9157
9204
|
active: Ae?.getActive() ?? [],
|
|
9158
9205
|
history: Ae?.getHistory() ?? []
|
|
9159
9206
|
},
|
|
9160
9207
|
verify: {
|
|
9161
|
-
enabled: !!
|
|
9208
|
+
enabled: !!He,
|
|
9162
9209
|
maxAttempts: Me ? je : 0,
|
|
9163
9210
|
adversarial: Me && !!e.verify?.adversarial
|
|
9164
9211
|
},
|
|
9165
9212
|
context: (() => {
|
|
9166
|
-
let e =
|
|
9213
|
+
let e = Ue?.getSnapshot();
|
|
9167
9214
|
if (e) {
|
|
9168
9215
|
let t = W.agent?.getState?.()?.lastCompression;
|
|
9169
9216
|
t && (e.compression = t);
|
|
@@ -9196,11 +9243,11 @@ function ou(e, n) {
|
|
|
9196
9243
|
return R ? w.getFocuses() : [];
|
|
9197
9244
|
},
|
|
9198
9245
|
setFocus(t) {
|
|
9199
|
-
let n =
|
|
9246
|
+
let n = cu(t, "setFocus", R, () => F()?.schema, e.debug);
|
|
9200
9247
|
return n.ok ? (w.setFocus(t), W.infoTick.value++, { ok: !0 }) : n;
|
|
9201
9248
|
},
|
|
9202
9249
|
addFocus(t) {
|
|
9203
|
-
let n =
|
|
9250
|
+
let n = cu(t, "addFocus", R, () => F()?.schema, e.debug);
|
|
9204
9251
|
return n.ok ? w.getFocuses().length >= 8 ? (e.debug && console.warn("[page-agent-sdk][focus] addFocus 拒绝:焦点数已达上限 8(augmentPrompt 注入每焦点子树 schema,过多致 system prompt 超预算)"), {
|
|
9205
9252
|
ok: !1,
|
|
9206
9253
|
error: "焦点数上限 8(避免 system prompt 撑爆)"
|
|
@@ -9213,14 +9260,14 @@ function ou(e, n) {
|
|
|
9213
9260
|
R && (w.clearFocus(), W.infoTick.value++);
|
|
9214
9261
|
}
|
|
9215
9262
|
};
|
|
9216
|
-
async function
|
|
9263
|
+
async function ot() {
|
|
9217
9264
|
if (!s) return;
|
|
9218
9265
|
await s.ready;
|
|
9219
9266
|
let t = e.session || {};
|
|
9220
9267
|
if (t.id) {
|
|
9221
9268
|
W.sessionId = t.id;
|
|
9222
9269
|
let e = await s.load(n, W.sessionId);
|
|
9223
|
-
e ? (W.applySnapshot(e),
|
|
9270
|
+
e ? (W.applySnapshot(e), U({
|
|
9224
9271
|
type: "session_restored",
|
|
9225
9272
|
sessionId: W.sessionId,
|
|
9226
9273
|
rounds: e.messages?.length ?? 0
|
|
@@ -9230,35 +9277,35 @@ function ou(e, n) {
|
|
|
9230
9277
|
if (e.debug && console.log("[page-agent-sdk][restore] listSessions", n, r.length, r.map((e) => e.sessionId)), r.length) {
|
|
9231
9278
|
W.sessionId = r[0].sessionId;
|
|
9232
9279
|
let t = await s.load(n, W.sessionId);
|
|
9233
|
-
t ? (W.applySnapshot(t),
|
|
9280
|
+
t ? (W.applySnapshot(t), U({
|
|
9234
9281
|
type: "session_restored",
|
|
9235
9282
|
sessionId: W.sessionId,
|
|
9236
9283
|
rounds: t.messages?.length ?? 0
|
|
9237
9284
|
}), e.debug && console.log("[page-agent-sdk][restore] 恢复会话", W.sessionId, `${t.messages?.length ?? 0} msgs`)) : e.debug && console.log("[page-agent-sdk][restore] 会话 meta 存在但快照为空", W.sessionId);
|
|
9238
9285
|
} else W.sessionId = await s.createSession(n, t.title), e.debug && console.log("[page-agent-sdk][restore] 新建会话(无历史)", W.sessionId);
|
|
9239
9286
|
} else W.sessionId = await s.createSession(n, t.title);
|
|
9240
|
-
e.memory && s.save(n, W.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }),
|
|
9287
|
+
e.memory && s.save(n, W.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), at();
|
|
9241
9288
|
}
|
|
9242
|
-
async function
|
|
9243
|
-
await
|
|
9289
|
+
async function st() {
|
|
9290
|
+
await et();
|
|
9244
9291
|
}
|
|
9245
|
-
function
|
|
9292
|
+
function ct(e) {
|
|
9246
9293
|
let t = {};
|
|
9247
|
-
for (let n of
|
|
9294
|
+
for (let n of tu(e)) {
|
|
9248
9295
|
let e = x.files[n];
|
|
9249
9296
|
e && (t[n] = e.content);
|
|
9250
9297
|
}
|
|
9251
9298
|
return t;
|
|
9252
9299
|
}
|
|
9253
|
-
function
|
|
9254
|
-
let e =
|
|
9300
|
+
function lt() {
|
|
9301
|
+
let e = nu(x.files, tu(b));
|
|
9255
9302
|
for (let t of e) delete x.files[t];
|
|
9256
9303
|
}
|
|
9257
|
-
function
|
|
9258
|
-
let e = co(b,
|
|
9304
|
+
function ut() {
|
|
9305
|
+
let e = co(b, rt);
|
|
9259
9306
|
if (!e.trimmed) return;
|
|
9260
9307
|
let { older: t, summary: n } = e;
|
|
9261
|
-
if (
|
|
9308
|
+
if (U({
|
|
9262
9309
|
type: "context_trimmed",
|
|
9263
9310
|
dropped: t.map((e) => ({
|
|
9264
9311
|
round: e.round,
|
|
@@ -9266,22 +9313,22 @@ function ou(e, n) {
|
|
|
9266
9313
|
assistant: e.assistantMsgs.map((e) => e.content),
|
|
9267
9314
|
steps: e.assistantMsgs.flatMap((e) => e.steps ?? [])
|
|
9268
9315
|
})),
|
|
9269
|
-
vfsResults:
|
|
9316
|
+
vfsResults: ct(t.flatMap((e) => [e.userMsg, ...e.assistantMsgs])),
|
|
9270
9317
|
summary: n.content,
|
|
9271
9318
|
reason: "max_memory_rounds"
|
|
9272
|
-
}), b.splice(e.deleteFrom, e.deleteCount, n),
|
|
9319
|
+
}), b.splice(e.deleteFrom, e.deleteCount, n), lt(), g && l) {
|
|
9273
9320
|
let n = e.summary, { prevSeg: r } = e;
|
|
9274
9321
|
(async () => {
|
|
9275
9322
|
try {
|
|
9276
9323
|
let e = await l(mo(t, v)), i = b.indexOf(n);
|
|
9277
9324
|
if (i < 0) return;
|
|
9278
|
-
b[i].content = so(t, r, e),
|
|
9325
|
+
b[i].content = so(t, r, e), pt();
|
|
9279
9326
|
} catch {}
|
|
9280
9327
|
})();
|
|
9281
9328
|
}
|
|
9282
9329
|
}
|
|
9283
|
-
let
|
|
9284
|
-
function
|
|
9330
|
+
let dt, ft = !1;
|
|
9331
|
+
function pt() {
|
|
9285
9332
|
if (!W.sessionId || !s) return;
|
|
9286
9333
|
let t = JSON.parse(JSON.stringify(b));
|
|
9287
9334
|
s.save(n, W.sessionId, { messages: t });
|
|
@@ -9299,15 +9346,15 @@ function ou(e, n) {
|
|
|
9299
9346
|
s.save(n, W.sessionId, { focus: e.length ? e : null });
|
|
9300
9347
|
}
|
|
9301
9348
|
re && A && (s.save(n, W.sessionId, { checkpoints: A.exportStack() }), s.save(n, W.sessionId, { usage: i }));
|
|
9302
|
-
let a =
|
|
9303
|
-
a && a !==
|
|
9349
|
+
let a = _s(b);
|
|
9350
|
+
a && a !== dt && (dt = a, s.updateTitle(n, W.sessionId, a)), e.autoTitle !== !1 && u && !ft && b.some((e) => e.role === "user") && b.some((e) => e.role === "assistant") && (ft = !0, (async () => {
|
|
9304
9351
|
let e = await u(b);
|
|
9305
|
-
e && (await s.updateTitle(n, W.sessionId, e), await
|
|
9352
|
+
e && (await s.updateTitle(n, W.sessionId, e), await at());
|
|
9306
9353
|
})()), e.debug && console.log("[page-agent-sdk][persist] save", W.sessionId, `${b.length} msgs`);
|
|
9307
9354
|
}
|
|
9308
9355
|
return W.initDone = (async () => {
|
|
9309
|
-
if (await
|
|
9310
|
-
let t = await Promise.allSettled(e.mcp.map((e) =>
|
|
9356
|
+
if (await ot(), await st(), e.mcp?.length) {
|
|
9357
|
+
let t = await Promise.allSettled(e.mcp.map((e) => ls(e)));
|
|
9311
9358
|
W.mcpClosers = t.flatMap((e) => e.status === "fulfilled" ? [e.value.close] : []), W.mcpServers = [], t.forEach((t, n) => {
|
|
9312
9359
|
let r = e.mcp[n], i = r.name ?? r.url;
|
|
9313
9360
|
t.status === "fulfilled" ? (W.mcpServers.push({
|
|
@@ -9317,12 +9364,12 @@ function ou(e, n) {
|
|
|
9317
9364
|
}), t.value.tools.forEach((e) => I.set(e.name, `mcp:${i}`)), ue.push(...t.value.tools)) : console.warn(`[page-agent-sdk][mcp] server ${i} 连接失败:`, t.reason);
|
|
9318
9365
|
}), B = be(), e.debug && console.log(`[page-agent-sdk][mcp] 注入 ${ue.length} 个工具,${W.mcpServers.length} 个 server`);
|
|
9319
9366
|
}
|
|
9320
|
-
let t =
|
|
9367
|
+
let t = vs(e.llm) ? e.llm : await f(e.llm);
|
|
9321
9368
|
W.agent = ji({
|
|
9322
9369
|
llm: t,
|
|
9323
9370
|
systemPrompt: P,
|
|
9324
9371
|
tools: B,
|
|
9325
|
-
middleware:
|
|
9372
|
+
middleware: nt,
|
|
9326
9373
|
maxToolRounds: e.maxToolRounds,
|
|
9327
9374
|
maxRetries: e.maxRetries,
|
|
9328
9375
|
maxParallelTools: e.maxParallelTools,
|
|
@@ -9334,7 +9381,7 @@ function ou(e, n) {
|
|
|
9334
9381
|
},
|
|
9335
9382
|
onTrace: N ? (e, t) => {
|
|
9336
9383
|
try {
|
|
9337
|
-
|
|
9384
|
+
U({
|
|
9338
9385
|
type: "trace",
|
|
9339
9386
|
spans: e,
|
|
9340
9387
|
metrics: t
|
|
@@ -9342,17 +9389,17 @@ function ou(e, n) {
|
|
|
9342
9389
|
} catch {}
|
|
9343
9390
|
} : void 0,
|
|
9344
9391
|
debug: e.debug
|
|
9345
|
-
}), ee.current = W.agent,
|
|
9392
|
+
}), ee.current = W.agent, H && H.setReconfigureHook && H.setReconfigureHook(() => {
|
|
9346
9393
|
W.agent && W.agent.setTools(be());
|
|
9347
9394
|
});
|
|
9348
9395
|
})(), W;
|
|
9349
9396
|
}
|
|
9350
|
-
function
|
|
9351
|
-
let n = e.id ??
|
|
9397
|
+
function uu(e, t) {
|
|
9398
|
+
let n = e.id ?? ks();
|
|
9352
9399
|
e.id || console.warn(`[page-agent-sdk] 未传 options.id,已生成随机 id "${n}"。刷新后持久化数据无法恢复,请传稳定 id。`);
|
|
9353
|
-
let r = e.streaming ?? !0, i = e.ui ?? "default", a, o = e.shareContext ?
|
|
9354
|
-
o ? a = o : (a =
|
|
9355
|
-
let s = null, c =
|
|
9400
|
+
let r = e.streaming ?? !0, i = e.ui ?? "default", a, o = e.shareContext ? au.get(n) : void 0;
|
|
9401
|
+
o ? a = o : (a = lu(e, n), e.shareContext && au.set(n, a)), a.refCount++;
|
|
9402
|
+
let s = null, c = tc(e), l = null, u = null;
|
|
9356
9403
|
async function d(n) {
|
|
9357
9404
|
if (await a.initDone, s) {
|
|
9358
9405
|
s.show();
|
|
@@ -9394,7 +9441,7 @@ function su(e, t) {
|
|
|
9394
9441
|
function m() {
|
|
9395
9442
|
s?.show();
|
|
9396
9443
|
}
|
|
9397
|
-
let h =
|
|
9444
|
+
let h = ru();
|
|
9398
9445
|
return {
|
|
9399
9446
|
mount: d,
|
|
9400
9447
|
unmount: f,
|
|
@@ -9507,7 +9554,7 @@ function su(e, t) {
|
|
|
9507
9554
|
},
|
|
9508
9555
|
vfsWrite: (e, t) => {
|
|
9509
9556
|
let n = typeof t == "string" ? t : JSON.stringify(t);
|
|
9510
|
-
a.vfsStore.files[
|
|
9557
|
+
a.vfsStore.files[Mc(e)] = {
|
|
9511
9558
|
content: n,
|
|
9512
9559
|
updatedAt: Date.now()
|
|
9513
9560
|
};
|
|
@@ -9550,12 +9597,12 @@ function su(e, t) {
|
|
|
9550
9597
|
}
|
|
9551
9598
|
//#endregion
|
|
9552
9599
|
//#region src/core/sdk/ragSubagent.ts
|
|
9553
|
-
var
|
|
9600
|
+
var du = "你是知识检索专家。可用工具:search_docs(语义检索)/ load_doc(按 source 加载)/ vfs_grep+vfs_read(搜预注入文档)/ fetch_document(公网 URL)。\n\n工作方式:\n1. 分析任务,拆出需查证的要点(如:需要哪些组件、各自的 props 约束、UI 规范要求);\n2. 多源检索:先 vfs_grep 搜预注入文档(快、静态)→ 不够用 search_docs 语义检索 → 需特定文档用 load_doc → 公网用 fetch_document;\n3. 检索结果不足时换关键词、扩大 topK、或换源重试;\n4. 综合成结构化、可执行结论(不堆原文,提炼成可直接用于决策/配置的信息);\n5. 标注关键信息来源(文档名/段落),便于溯源;检索不到明确说「未检索到」,不编造。\n\n你是只读检索角色,不要尝试修改任何数据。", fu = "# 知识检索策略(RAG)\n\n## 多源决策树\n- vfs_grep / vfs_read:搜集成方预注入 vfs 的文档(组件文档 / UI 规范)—— 快、静态,先查\n- search_docs:语义检索(retriever 向量库)—— 模糊匹配,关键词不确定 / 语义相似时用\n- load_doc:按 source 精确加载(已知文档 id / URL / key)—— 精确取特定文档\n- fetch_document:公网 URL —— 查公开资料\n\n## 综合规范\n- 多源交叉验证(关键结论优先 ≥2 源印证,或单一权威源)\n- 标注来源(文档名 / URL / 段落),便于溯源\n- 结构化、可执行结论(组件清单 + 各自 props 约束 + 适用场景),不堆原文\n- 未检索到明确说「未检索到」,不编造;建议替代方案(改关键词 / 建议写代码组件等)\n\n## 何时用何源\n- 静态文档(组件库文档 / UI 规范):vfs_grep\n- 语义相似(「瀑布流组件」「倒计时」「拼团」):search_docs\n- 已知文档 id / URL:load_doc\n- 公开 URL(设计规范网站 / 第三方文档):fetch_document", pu = {
|
|
9554
9601
|
name: "rag-search",
|
|
9555
9602
|
description: "多源知识检索策略:vfs 预注入文档 → 语义检索 → 指定文档加载 → 公网;综合结构化结论 + 溯源",
|
|
9556
|
-
getContent: () =>
|
|
9603
|
+
getContent: () => fu
|
|
9557
9604
|
};
|
|
9558
|
-
function
|
|
9605
|
+
function mu(e, n, i) {
|
|
9559
9606
|
return r(async ({ query: e, topK: t }) => {
|
|
9560
9607
|
try {
|
|
9561
9608
|
let r = await n(e, { topK: t ?? i });
|
|
@@ -9572,7 +9619,7 @@ function du(e, n, i) {
|
|
|
9572
9619
|
})
|
|
9573
9620
|
});
|
|
9574
9621
|
}
|
|
9575
|
-
function
|
|
9622
|
+
function hu(e, n) {
|
|
9576
9623
|
return r(async ({ source: e }) => {
|
|
9577
9624
|
try {
|
|
9578
9625
|
let t = await n(e), r = Array.isArray(t) ? t : [t];
|
|
@@ -9586,11 +9633,11 @@ function fu(e, n) {
|
|
|
9586
9633
|
schema: t.object({ source: t.string().describe("文档标识(id/URL/key)") })
|
|
9587
9634
|
});
|
|
9588
9635
|
}
|
|
9589
|
-
function
|
|
9636
|
+
function gu(e) {
|
|
9590
9637
|
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;
|
|
9591
9638
|
if (!t && !n && r === !1) throw Error("[page-agent-sdk][createRagSubagent] 至少配一种知识源:retriever / loader / useVfs(true)");
|
|
9592
9639
|
let p = [];
|
|
9593
|
-
t && p.push(
|
|
9640
|
+
t && p.push(mu(s, t, o)), n && p.push(hu(c, n)), f && p.push(...f);
|
|
9594
9641
|
let m = r ? [
|
|
9595
9642
|
"vfs_grep",
|
|
9596
9643
|
"vfs_read",
|
|
@@ -9599,17 +9646,17 @@ function pu(e) {
|
|
|
9599
9646
|
return {
|
|
9600
9647
|
id: i,
|
|
9601
9648
|
description: a ?? "检索知识库(组件文档/UI 规范/业务规则),返回有依据的结构化结论。需要查阅文档才能回答或决定如何配置时委派",
|
|
9602
|
-
systemPrompt:
|
|
9649
|
+
systemPrompt: du,
|
|
9603
9650
|
tools: p.length ? p : void 0,
|
|
9604
9651
|
allowedTools: m,
|
|
9605
|
-
skills: d ?? [
|
|
9652
|
+
skills: d ?? [pu],
|
|
9606
9653
|
maxToolRounds: l,
|
|
9607
9654
|
...u === void 0 ? {} : { summarization: u }
|
|
9608
9655
|
};
|
|
9609
9656
|
}
|
|
9610
9657
|
//#endregion
|
|
9611
9658
|
//#region src/core/sdk/htmlSubagent.ts
|
|
9612
|
-
function
|
|
9659
|
+
function _u(e) {
|
|
9613
9660
|
return `你是纯代码组件生成专家。可用工具:vfs_write / vfs_edit / vfs_rm(写/改/删代码到 vfs ${e}) / vfs_grep + vfs_read(读 vfs) / write + set(写 data 引用,writablePaths 限定) / read / write_todos + update_todo(规划)。
|
|
9614
9661
|
|
|
9615
9662
|
代码存储约定(重要):
|
|
@@ -9623,12 +9670,12 @@ function mu(e) {
|
|
|
9623
9670
|
3. 小段代码 vfs_write 整体写;大段用 vfs_edit 增量拼(避免单次输出超限);
|
|
9624
9671
|
4. 生成后 read(vfs 文件 + data 引用)确认结构正确;只写 writablePaths 内 data + ${e} 下 vfs。`;
|
|
9625
9672
|
}
|
|
9626
|
-
var
|
|
9673
|
+
var vu = "# 纯代码组件生成规范\n\n## 代码存储约定(重要)\n- 代码正文写 vfs:html/<name>.vue(如 html/hero.vue)\n- data 存引用:{ type:'custom', codeRef:'vfs://html/<name>.vue', name, props }\n- 改代码:vfs_edit 改 vfs 文件(data 的 codeRef 引用不变)\n\n## 何时写代码组件\n- 组件库无对应类型(高度定制交互 / 一次性特效 / 特殊布局)→ 写 custom 代码组件\n- 组件库已有(按钮 / 卡片 / 列表)→ 用现有组件配置,不重造\n\n## Vue SFC 规范\n- Vue 3 <template> + <script setup>(组合式)\n- props 用 defineProps;事件用 defineEmits\n- 只渲染 UI,不做副作用(不发请求 / 不读写 storage)\n\n## props 定义\n- 代码组件 defineProps 接受外部 data 传入(集成方渲染时按 data 的 props 字段传)\n\n## 组件库引用\n- 代码内可 import 组件库组件(如 <Button>);所用依赖以集成方渲染层已注入为准,不重复造\n\n## 安全底线(必须)\n- 禁 eval / new Function / Function 构造器\n- 禁访问 window 敏感属性(document.cookie / apiKey / token)\n- 不引入外部脚本 / CDN\n\n## 可访问性 + 语义化\n- 语义化标签(button / nav / section);图片 alt;交互可键盘聚焦\n- 颜色对比达标;不只用颜色传达信息", yu = {
|
|
9627
9674
|
name: "html-builder",
|
|
9628
9675
|
description: "纯代码组件(custom Vue SFC)生成规范:代码存 vfs+data 引用 / SFC 规范 / 安全底线 / props / 组件库引用 / 可访问性",
|
|
9629
|
-
getContent: () =>
|
|
9676
|
+
getContent: () => vu
|
|
9630
9677
|
};
|
|
9631
|
-
function
|
|
9678
|
+
function bu(e) {
|
|
9632
9679
|
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 } = e;
|
|
9633
9680
|
if (!t?.length) throw Error("[page-agent-sdk][createHtmlSubagent] writablePaths 必填(代码组件 data 区,如 [\"components\"])");
|
|
9634
9681
|
let d = [];
|
|
@@ -9637,7 +9684,7 @@ function _u(e) {
|
|
|
9637
9684
|
return {
|
|
9638
9685
|
id: r,
|
|
9639
9686
|
description: i ?? "生成/修改纯代码组件(custom Vue SFC)。代码写 vfs,data 存引用;能规划(write_todos)+ 执行。需写代码组件或灵活定制时委派",
|
|
9640
|
-
systemPrompt:
|
|
9687
|
+
systemPrompt: _u(n),
|
|
9641
9688
|
writablePaths: t,
|
|
9642
9689
|
allowedTools: [
|
|
9643
9690
|
"vfs_write",
|
|
@@ -9649,14 +9696,14 @@ function _u(e) {
|
|
|
9649
9696
|
middleware: d.length ? d : void 0,
|
|
9650
9697
|
summarization: o === !1 ? void 0 : o,
|
|
9651
9698
|
temperature: c,
|
|
9652
|
-
skills: l ?? [
|
|
9699
|
+
skills: l ?? [yu],
|
|
9653
9700
|
maxToolRounds: s,
|
|
9654
9701
|
tools: f.length ? f : void 0
|
|
9655
9702
|
};
|
|
9656
9703
|
}
|
|
9657
9704
|
//#endregion
|
|
9658
9705
|
//#region src/core/utils/clipboard.ts
|
|
9659
|
-
async function
|
|
9706
|
+
async function xu(e) {
|
|
9660
9707
|
try {
|
|
9661
9708
|
let t = globalThis.navigator?.clipboard;
|
|
9662
9709
|
if (t && typeof t.writeText == "function") return await t.writeText(e), !0;
|
|
@@ -9674,7 +9721,7 @@ async function vu(e) {
|
|
|
9674
9721
|
}
|
|
9675
9722
|
//#endregion
|
|
9676
9723
|
//#region src/core/composables/useChat.ts
|
|
9677
|
-
function
|
|
9724
|
+
function Su(e = {}) {
|
|
9678
9725
|
let { fetchResponse: t, fetchStream: n, onPersist: r, onClear: i } = e, a = /* @__PURE__ */ _t({
|
|
9679
9726
|
messages: e.messages ?? [],
|
|
9680
9727
|
loading: !1,
|
|
@@ -9853,9 +9900,9 @@ function yu(e = {}) {
|
|
|
9853
9900
|
}
|
|
9854
9901
|
//#endregion
|
|
9855
9902
|
//#region src/core/composables/chatContext.ts
|
|
9856
|
-
var
|
|
9857
|
-
function
|
|
9858
|
-
let t =
|
|
9903
|
+
var Cu = Symbol("chatContext");
|
|
9904
|
+
function wu(e = {}) {
|
|
9905
|
+
let t = Su({
|
|
9859
9906
|
fetchResponse: e.fetchResponse,
|
|
9860
9907
|
fetchStream: e.fetchStream,
|
|
9861
9908
|
messages: e.messages,
|
|
@@ -9874,7 +9921,7 @@ function xu(e = {}) {
|
|
|
9874
9921
|
}, h = /* @__PURE__ */ Ot({}), g = (e) => h.value[e] !== !1, _ = (e) => {
|
|
9875
9922
|
h.value[e] = !g(e);
|
|
9876
9923
|
}, v = /* @__PURE__ */ Ot(!1), y = (e) => {
|
|
9877
|
-
|
|
9924
|
+
xu(e).then((e) => {
|
|
9878
9925
|
e && (v.value = !0, setTimeout(() => {
|
|
9879
9926
|
v.value = !1;
|
|
9880
9927
|
}, 1500));
|
|
@@ -9942,15 +9989,15 @@ function xu(e = {}) {
|
|
|
9942
9989
|
}
|
|
9943
9990
|
};
|
|
9944
9991
|
}
|
|
9945
|
-
function
|
|
9946
|
-
let e = Fn(
|
|
9992
|
+
function Tu() {
|
|
9993
|
+
let e = Fn(Cu);
|
|
9947
9994
|
if (!e) throw Error("useChatContext 必须在 provide(chatContextKey) 的组件子树内调用");
|
|
9948
9995
|
return e;
|
|
9949
9996
|
}
|
|
9950
9997
|
//#endregion
|
|
9951
9998
|
//#region src/core/index.headless.ts
|
|
9952
|
-
function
|
|
9953
|
-
return
|
|
9999
|
+
function Eu(e) {
|
|
10000
|
+
return uu(e);
|
|
9954
10001
|
}
|
|
9955
10002
|
//#endregion
|
|
9956
|
-
export {
|
|
10003
|
+
export { nc as CAPABILITIES, ac as CONTEXT_PRESETS, gs as CompressDecisionSchema, us as DEFAULT_SYSTEM_PROMPT, Ha as HUMAN_CONFIRM_TOOL_NAME, ti as MIN_CONTEXT_WINDOW, lo as STOP_WORDS, uc as UNSAFE_KEYS, Bl as actionsToInspectInfo, zl as actionsToTools, Jr as agentError, is as analyzeContext, bc as applyPatchToClone, xc as applyPatchToLive, qr as asAgentError, ds as buildDataPrompt, fs as buildSystemPrompt, Cu as chatContextKey, yl as commitSetToBind, ls as connectMcp, f as constructLlmFromConfig, d as constructOpenLlmSync, xu as copyText, ji as createAgent, Va as createApprovalMiddleware, wu as createChatContext, Eu as createChatSdk, Qa as createCheckpointManager, $a as createCheckpointMiddleware, Os as createConflictManager, as as createContextInspectorMiddleware, xl as createDataOps, bu as createHtmlSubagent, Ga as createHumanConfirmMiddleware, Wa as createHumanConfirmTool, Ys as createMemoryBackend, Pa as createMemoryMiddleware, u as createProxyLlm, gu as createRagSubagent, ba as createSandboxRunner, ic as createSdkEvents, ru as createSerialRunner, $s as createSessionStore, $l as createSkillStore, Fo as createSubagentMiddleware, bo as createSubagentTracker, Ro as createSubagentsMiddleware, ql as createUsageHintsMiddleware, zo as createVerifyMiddleware, Oc as createVfs, Zs as createWebStorageBackend, Go as createWriteBackCheck, hc as deepClone, Ul as defineDataToolset, Sa as defineSkill, ps as defineTool, mc as deleteByPath, _s as deriveTitle, Ui as describeSchemaNode, xi as detectGarbledToolCall, wc as diffObjects, Dl as domToStructure, kl as domTools, Hl as domToolsStatic, fo as estimateMessageTokens, po as estimateRoundTokens, X as estimateTokens, m as extractReasoningDelta, ca as extractSchemaHint, os as extractText, p as extractTextDelta, h as extractUsage, Cl as fetchDocTools, Vl as fetchTools, vl as filterByToolMode, Wi as formatConstraints, Ur as formatZodIssues, Z as getByPath, Ol as getDomTool, Ml as getEnvSummary, Fi as getSchemaAtPath, Mi as getSchemaTopKeys, ai as getTraceMetrics, $ as hashValue, mo as indexSummarize, Fl as inspectEnvTool, Il as inspectTools, vs as isChatModel, fi as isContextLengthError, Ni as isPathAllowed, Vs as isQuotaError, dc as isUnsafePath, qc as jpEval, Gr as jsonParseError, vc as limitDepth, gc as maybeParseValue, ii as offloadPassThroughChars, ri as offloadThresholdChars, ra as presets, Li as projectBySchema, Ii as projectBySchemaDeep, _c as projectFields, ho as recallRounds, Gi as renderSchemaHint, Ki as renderSchemaOverview, Ji as renderSchemaShallow, rc as resolveCapabilities, sc as resolveContextOptions, tc as resolveDialogConfig, Ds as resolveLlm, ni as resolveModelCaps, ec as resolveStorage, Cc as restoreInPlace, Sc as restoreLive, Kr as routeError, xa as runHostScript, Zc as runSandboxedScript, fc as safeMerge, jl as safeSerialize, Q as safeStringify, Yc as searchJson, Wl as selectBuiltinTools, pc as setByPath, go as shouldTriggerCompression, ia as systemPromptHelpers, uo as tokenize, Y as toolError, Pi as unwrapSchema, Su as useChat, Tu as useChatContext, e as z, Wr as zodError };
|