page-agent-sdk 3.11.0 → 3.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -370,7 +370,7 @@ function Fe(e) {
370
370
  }
371
371
  }
372
372
  var Ie = /* @__PURE__ */ new WeakMap(), Le = /* @__PURE__ */ Symbol(process.env.NODE_ENV === "production" ? "" : "Object iterate"), Re = /* @__PURE__ */ Symbol(process.env.NODE_ENV === "production" ? "" : "Map keys iterate"), ze = /* @__PURE__ */ Symbol(process.env.NODE_ENV === "production" ? "" : "Array iterate");
373
- function Be(e, t, n) {
373
+ function U(e, t, n) {
374
374
  if (H && z) {
375
375
  let r = Ie.get(e);
376
376
  r || Ie.set(e, r = /* @__PURE__ */ new Map());
@@ -382,7 +382,7 @@ function Be(e, t, n) {
382
382
  });
383
383
  }
384
384
  }
385
- function U(e, t, n, r, i, a) {
385
+ function Be(e, t, n, r, i, a) {
386
386
  let o = Ie.get(e);
387
387
  if (!o) {
388
388
  Me++;
@@ -422,13 +422,13 @@ function U(e, t, n, r, i, a) {
422
422
  }
423
423
  function Ve(e) {
424
424
  let t = /* @__PURE__ */ K(e);
425
- return t === e ? t : (Be(t, "iterate", ze), /* @__PURE__ */ Tt(e) ? t : t.map(Ot));
425
+ return t === e ? t : (U(t, "iterate", ze), /* @__PURE__ */ G(e) ? t : t.map(Ot));
426
426
  }
427
427
  function He(e) {
428
- return Be(e = /* @__PURE__ */ K(e), "iterate", ze), e;
428
+ return U(e = /* @__PURE__ */ K(e), "iterate", ze), e;
429
429
  }
430
430
  function Ue(e, t) {
431
- return /* @__PURE__ */ wt(e) ? kt(/* @__PURE__ */ G(e) ? Ot(t) : t) : Ot(t);
431
+ return /* @__PURE__ */ Tt(e) ? kt(/* @__PURE__ */ wt(e) ? Ot(t) : t) : Ot(t);
432
432
  }
433
433
  var We = {
434
434
  __proto__: null,
@@ -516,14 +516,14 @@ var We = {
516
516
  };
517
517
  function Ge(e, t, n) {
518
518
  let r = He(e), i = r[t]();
519
- return r !== e && !/* @__PURE__ */ Tt(e) && (i._next = i.next, i.next = () => {
519
+ return r !== e && !/* @__PURE__ */ G(e) && (i._next = i.next, i.next = () => {
520
520
  let e = i._next();
521
521
  return e.done || (e.value = n(e.value)), e;
522
522
  }), i;
523
523
  }
524
524
  var Ke = Array.prototype;
525
525
  function qe(e, t, n, r, i, a) {
526
- let o = He(e), s = o !== e && !/* @__PURE__ */ Tt(e), c = o[t];
526
+ let o = He(e), s = o !== e && !/* @__PURE__ */ G(e), c = o[t];
527
527
  if (c !== Ke[t]) {
528
528
  let t = c.apply(e, a);
529
529
  return s ? Ot(t) : t;
@@ -538,7 +538,7 @@ function qe(e, t, n, r, i, a) {
538
538
  return s && i ? i(u) : u;
539
539
  }
540
540
  function Je(e, t, n, r) {
541
- let i = He(e), a = i !== e && !/* @__PURE__ */ Tt(e), o = n, s = !1;
541
+ let i = He(e), a = i !== e && !/* @__PURE__ */ G(e), o = n, s = !1;
542
542
  i !== e && (a ? (s = r.length === 0, o = function(t, r, i) {
543
543
  return s && (s = !1, t = Ue(e, t)), n.call(this, t, Ue(e, r), i, e);
544
544
  }) : n.length > 3 && (o = function(t, r, i) {
@@ -549,7 +549,7 @@ function Je(e, t, n, r) {
549
549
  }
550
550
  function Ye(e, t, n) {
551
551
  let r = /* @__PURE__ */ K(e);
552
- Be(r, "iterate", ze);
552
+ U(r, "iterate", ze);
553
553
  let i = r[t](...n);
554
554
  return (i === -1 || i === !1) && /* @__PURE__ */ Et(n[0]) ? (n[0] = /* @__PURE__ */ K(n[0]), r[t](...n)) : i;
555
555
  }
@@ -562,7 +562,7 @@ var Ze = /* @__PURE__ */ y("__proto__,__v_isRef,__isVue"), Qe = new Set(/* @__PU
562
562
  function $e(e) {
563
563
  te(e) || (e = String(e));
564
564
  let t = /* @__PURE__ */ K(this);
565
- return Be(t, "has", e), t.hasOwnProperty(e);
565
+ return U(t, "has", e), t.hasOwnProperty(e);
566
566
  }
567
567
  var et = class {
568
568
  constructor(e = !1, t = !1) {
@@ -582,7 +582,7 @@ var et = class {
582
582
  if (t === "hasOwnProperty") return $e;
583
583
  }
584
584
  let o = Reflect.get(e, t, /* @__PURE__ */ q(e) ? e : n);
585
- if ((te(t) ? Qe.has(t) : Ze(t)) || (r || Be(e, "get", t), i)) return o;
585
+ if ((te(t) ? Qe.has(t) : Ze(t)) || (r || U(e, "get", t), i)) return o;
586
586
  if (/* @__PURE__ */ q(o)) {
587
587
  let e = a && P(t) ? o : o.value;
588
588
  return r && M(e) ? /* @__PURE__ */ xt(e) : e;
@@ -596,22 +596,22 @@ var et = class {
596
596
  set(e, t, n, r) {
597
597
  let i = e[t], a = O(e) && P(t);
598
598
  if (!this._isShallow) {
599
- let r = /* @__PURE__ */ wt(i);
600
- if (!/* @__PURE__ */ Tt(n) && !/* @__PURE__ */ wt(n) && (i = /* @__PURE__ */ K(i), n = /* @__PURE__ */ K(n)), !a && /* @__PURE__ */ q(i) && !/* @__PURE__ */ q(n)) return r ? (process.env.NODE_ENV !== "production" && L(`Set operation on key "${String(t)}" failed: target is readonly.`, e[t]), !0) : (i.value = n, !0);
599
+ let r = /* @__PURE__ */ Tt(i);
600
+ if (!/* @__PURE__ */ G(n) && !/* @__PURE__ */ Tt(n) && (i = /* @__PURE__ */ K(i), n = /* @__PURE__ */ K(n)), !a && /* @__PURE__ */ q(i) && !/* @__PURE__ */ q(n)) return r ? (process.env.NODE_ENV !== "production" && L(`Set operation on key "${String(t)}" failed: target is readonly.`, e[t]), !0) : (i.value = n, !0);
601
601
  }
602
602
  let o = a ? Number(t) < e.length : D(e, t), s = Reflect.set(e, t, n, /* @__PURE__ */ q(e) ? e : r);
603
- return e === /* @__PURE__ */ K(r) && s && (o ? F(n, i) && U(e, "set", t, n, i) : U(e, "add", t, n)), s;
603
+ return e === /* @__PURE__ */ K(r) && s && (o ? F(n, i) && Be(e, "set", t, n, i) : Be(e, "add", t, n)), s;
604
604
  }
605
605
  deleteProperty(e, t) {
606
606
  let n = D(e, t), r = e[t], i = Reflect.deleteProperty(e, t);
607
- return i && n && U(e, "delete", t, void 0, r), i;
607
+ return i && n && Be(e, "delete", t, void 0, r), i;
608
608
  }
609
609
  has(e, t) {
610
610
  let n = Reflect.has(e, t);
611
- return (!te(t) || !Qe.has(t)) && Be(e, "has", t), n;
611
+ return (!te(t) || !Qe.has(t)) && U(e, "has", t), n;
612
612
  }
613
613
  ownKeys(e) {
614
- return Be(e, "iterate", O(e) ? "length" : Le), Reflect.ownKeys(e);
614
+ return U(e, "iterate", O(e) ? "length" : Le), Reflect.ownKeys(e);
615
615
  }
616
616
  }, nt = class extends et {
617
617
  constructor(e = !1) {
@@ -623,11 +623,11 @@ var et = class {
623
623
  deleteProperty(e, t) {
624
624
  return process.env.NODE_ENV !== "production" && L(`Delete operation on key "${String(t)}" failed: target is readonly.`, e), !0;
625
625
  }
626
- }, W = /* @__PURE__ */ new tt(), rt = /* @__PURE__ */ new nt(), it = /* @__PURE__ */ new nt(!0), at = (e) => e, ot = (e) => Reflect.getPrototypeOf(e);
626
+ }, rt = /* @__PURE__ */ new tt(), it = /* @__PURE__ */ new nt(), W = /* @__PURE__ */ new nt(!0), at = (e) => e, ot = (e) => Reflect.getPrototypeOf(e);
627
627
  function st(e, t, n) {
628
628
  return function(...r) {
629
629
  let i = this.__v_raw, a = /* @__PURE__ */ K(i), o = k(a), s = e === "entries" || e === Symbol.iterator && o, c = e === "keys" && o, l = i[e](...r), u = n ? at : t ? kt : Ot;
630
- return !t && Be(a, "iterate", c ? Re : Le), w(Object.create(l), { next() {
630
+ return !t && U(a, "iterate", c ? Re : Le), w(Object.create(l), { next() {
631
631
  let { value: e, done: t } = l.next();
632
632
  return t ? {
633
633
  value: e,
@@ -652,7 +652,7 @@ function lt(e, t) {
652
652
  let n = {
653
653
  get(n) {
654
654
  let r = this.__v_raw, i = /* @__PURE__ */ K(r), a = /* @__PURE__ */ K(n);
655
- e || (F(n, a) && Be(i, "get", n), Be(i, "get", a));
655
+ e || (F(n, a) && U(i, "get", n), U(i, "get", a));
656
656
  let { has: o } = ot(i), s = t ? at : e ? kt : Ot;
657
657
  if (o.call(i, n)) return s(r.get(n));
658
658
  if (o.call(i, a)) return s(r.get(a));
@@ -660,15 +660,15 @@ function lt(e, t) {
660
660
  },
661
661
  get size() {
662
662
  let t = this.__v_raw;
663
- return !e && Be(/* @__PURE__ */ K(t), "iterate", Le), t.size;
663
+ return !e && U(/* @__PURE__ */ K(t), "iterate", Le), t.size;
664
664
  },
665
665
  has(t) {
666
666
  let n = this.__v_raw, r = /* @__PURE__ */ K(n), i = /* @__PURE__ */ K(t);
667
- return e || (F(t, i) && Be(r, "has", t), Be(r, "has", i)), t === i ? n.has(t) : n.has(t) || n.has(i);
667
+ return e || (F(t, i) && U(r, "has", t), U(r, "has", i)), t === i ? n.has(t) : n.has(t) || n.has(i);
668
668
  },
669
669
  forEach(n, r) {
670
670
  let i = this, a = i.__v_raw, o = /* @__PURE__ */ K(a), s = t ? at : e ? kt : Ot;
671
- return !e && Be(o, "iterate", Le), a.forEach((e, t) => n.call(r, s(e), s(t), i));
671
+ return !e && U(o, "iterate", Le), a.forEach((e, t) => n.call(r, s(e), s(t), i));
672
672
  }
673
673
  };
674
674
  return w(n, e ? {
@@ -678,25 +678,25 @@ function lt(e, t) {
678
678
  clear: ct("clear")
679
679
  } : {
680
680
  add(e) {
681
- let n = /* @__PURE__ */ K(this), r = ot(n), i = /* @__PURE__ */ K(e), a = !t && !/* @__PURE__ */ Tt(e) && !/* @__PURE__ */ wt(e) ? i : e;
682
- return r.has.call(n, a) || F(e, a) && r.has.call(n, e) || F(i, a) && r.has.call(n, i) || (n.add(a), U(n, "add", a, a)), this;
681
+ let n = /* @__PURE__ */ K(this), r = ot(n), i = /* @__PURE__ */ K(e), a = !t && !/* @__PURE__ */ G(e) && !/* @__PURE__ */ Tt(e) ? i : e;
682
+ return r.has.call(n, a) || F(e, a) && r.has.call(n, e) || F(i, a) && r.has.call(n, i) || (n.add(a), Be(n, "add", a, a)), this;
683
683
  },
684
684
  set(e, n) {
685
- !t && !/* @__PURE__ */ Tt(n) && !/* @__PURE__ */ wt(n) && (n = /* @__PURE__ */ K(n));
685
+ !t && !/* @__PURE__ */ G(n) && !/* @__PURE__ */ Tt(n) && (n = /* @__PURE__ */ K(n));
686
686
  let r = /* @__PURE__ */ K(this), { has: i, get: a } = ot(r), o = i.call(r, e);
687
687
  o ? process.env.NODE_ENV !== "production" && mt(r, i, e) : (e = /* @__PURE__ */ K(e), o = i.call(r, e));
688
688
  let s = a.call(r, e);
689
- return r.set(e, n), o ? F(n, s) && U(r, "set", e, n, s) : U(r, "add", e, n), this;
689
+ return r.set(e, n), o ? F(n, s) && Be(r, "set", e, n, s) : Be(r, "add", e, n), this;
690
690
  },
691
691
  delete(e) {
692
692
  let t = /* @__PURE__ */ K(this), { has: n, get: r } = ot(t), i = n.call(t, e);
693
693
  i ? process.env.NODE_ENV !== "production" && mt(t, n, e) : (e = /* @__PURE__ */ K(e), i = n.call(t, e));
694
694
  let a = r ? r.call(t, e) : void 0, o = t.delete(e);
695
- return i && U(t, "delete", e, void 0, a), o;
695
+ return i && Be(t, "delete", e, void 0, a), o;
696
696
  },
697
697
  clear() {
698
698
  let e = /* @__PURE__ */ K(this), t = e.size !== 0, n = process.env.NODE_ENV === "production" ? void 0 : k(e) ? new Map(e) : new Set(e), r = e.clear();
699
- return t && U(e, "clear", void 0, void 0, n), r;
699
+ return t && Be(e, "clear", void 0, void 0, n), r;
700
700
  }
701
701
  }), [
702
702
  "keys",
@@ -733,15 +733,15 @@ function yt(e) {
733
733
  }
734
734
  // @__NO_SIDE_EFFECTS__
735
735
  function bt(e) {
736
- return /* @__PURE__ */ wt(e) ? e : Ct(e, !1, W, dt, ht);
736
+ return /* @__PURE__ */ Tt(e) ? e : Ct(e, !1, rt, dt, ht);
737
737
  }
738
738
  // @__NO_SIDE_EFFECTS__
739
739
  function xt(e) {
740
- return Ct(e, !0, rt, ft, _t);
740
+ return Ct(e, !0, it, ft, _t);
741
741
  }
742
742
  // @__NO_SIDE_EFFECTS__
743
743
  function St(e) {
744
- return Ct(e, !0, it, pt, vt);
744
+ return Ct(e, !0, W, pt, vt);
745
745
  }
746
746
  function Ct(e, t, n, r, i) {
747
747
  if (!M(e)) return process.env.NODE_ENV !== "production" && L(`value cannot be made ${t ? "readonly" : "reactive"}: ${String(e)}`), e;
@@ -754,15 +754,15 @@ function Ct(e, t, n, r, i) {
754
754
  return i.set(e, s), s;
755
755
  }
756
756
  // @__NO_SIDE_EFFECTS__
757
- function G(e) {
758
- return /* @__PURE__ */ wt(e) ? /* @__PURE__ */ G(e.__v_raw) : !!(e && e.__v_isReactive);
757
+ function wt(e) {
758
+ return /* @__PURE__ */ Tt(e) ? /* @__PURE__ */ wt(e.__v_raw) : !!(e && e.__v_isReactive);
759
759
  }
760
760
  // @__NO_SIDE_EFFECTS__
761
- function wt(e) {
761
+ function Tt(e) {
762
762
  return !!(e && e.__v_isReadonly);
763
763
  }
764
764
  // @__NO_SIDE_EFFECTS__
765
- function Tt(e) {
765
+ function G(e) {
766
766
  return !!(e && e.__v_isShallow);
767
767
  }
768
768
  // @__NO_SIDE_EFFECTS__
@@ -805,7 +805,7 @@ var Nt = class {
805
805
  }), this._value;
806
806
  }
807
807
  set value(e) {
808
- let t = this._rawValue, n = this.__v_isShallow || /* @__PURE__ */ Tt(e) || /* @__PURE__ */ wt(e);
808
+ let t = this._rawValue, n = this.__v_isShallow || /* @__PURE__ */ G(e) || /* @__PURE__ */ Tt(e);
809
809
  e = n ? e : /* @__PURE__ */ K(e), F(e, t) && (this._rawValue = e, this._value = n ? e : Ot(e), process.env.NODE_ENV === "production" ? this.dep.trigger() : this.dep.trigger({
810
810
  target: this,
811
811
  type: "set",
@@ -834,7 +834,7 @@ var It = {
834
834
  }
835
835
  };
836
836
  function Lt(e) {
837
- return /* @__PURE__ */ G(e) ? e : new Proxy(e, It);
837
+ return /* @__PURE__ */ wt(e) ? e : new Proxy(e, It);
838
838
  }
839
839
  var Rt = class {
840
840
  constructor(e, t, n) {
@@ -873,10 +873,10 @@ function Ut(e, t = !1, n = Ht) {
873
873
  function Wt(e, t, n = b) {
874
874
  let { immediate: r, deep: i, once: a, scheduler: o, augmentJob: s, call: c } = n, l = (e) => {
875
875
  (n.onWarn || L)("Invalid watch source: ", e, "A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.");
876
- }, u = (e) => i ? e : /* @__PURE__ */ Tt(e) || i === !1 || i === 0 ? Gt(e, 1) : Gt(e), d, f, p, m, h = !1, g = !1;
877
- if (/* @__PURE__ */ q(e) ? (f = () => e.value, h = /* @__PURE__ */ Tt(e)) : /* @__PURE__ */ G(e) ? (f = () => u(e), h = !0) : O(e) ? (g = !0, h = e.some((e) => /* @__PURE__ */ G(e) || /* @__PURE__ */ Tt(e)), f = () => e.map((e) => {
876
+ }, u = (e) => i ? e : /* @__PURE__ */ G(e) || i === !1 || i === 0 ? Gt(e, 1) : Gt(e), d, f, p, m, h = !1, g = !1;
877
+ if (/* @__PURE__ */ q(e) ? (f = () => e.value, h = /* @__PURE__ */ G(e)) : /* @__PURE__ */ wt(e) ? (f = () => u(e), h = !0) : O(e) ? (g = !0, h = e.some((e) => /* @__PURE__ */ wt(e) || /* @__PURE__ */ G(e)), f = () => e.map((e) => {
878
878
  if (/* @__PURE__ */ q(e)) return e.value;
879
- if (/* @__PURE__ */ G(e)) return u(e);
879
+ if (/* @__PURE__ */ wt(e)) return u(e);
880
880
  if (A(e)) return c ? c(e, 2) : e();
881
881
  process.env.NODE_ENV !== "production" && l(e);
882
882
  })) : A(e) ? f = t ? c ? () => c(e, 2) : e : () => {
@@ -1328,7 +1328,7 @@ var Gn = /* @__PURE__ */ Symbol.for("v-ndc"), Kn = (e) => e ? Fr(e) ? Lr(e) : Kn
1328
1328
  else Zn && (o[t] = 0);
1329
1329
  }
1330
1330
  let l = qn[t], u, d;
1331
- if (l) return t === "$attrs" ? (Be(e.attrs, "get", ""), process.env.NODE_ENV) : process.env.NODE_ENV !== "production" && t === "$slots" && Be(e, "get", t), l(e);
1331
+ if (l) return t === "$attrs" ? (U(e.attrs, "get", ""), process.env.NODE_ENV) : process.env.NODE_ENV !== "production" && t === "$slots" && U(e, "get", t), l(e);
1332
1332
  if ((u = s.__cssModules) && (u = u[t])) return u;
1333
1333
  if (n !== b && D(n, t)) return o[t] = 4, n[t];
1334
1334
  if (d = c.config.globalProperties, D(d, t)) return d[t];
@@ -1652,25 +1652,25 @@ function Wr() {
1652
1652
  s(n),
1653
1653
  ">"
1654
1654
  ];
1655
- } else if (/* @__PURE__ */ G(t)) return [
1655
+ } else if (/* @__PURE__ */ wt(t)) return [
1656
1656
  "div",
1657
1657
  {},
1658
1658
  [
1659
1659
  "span",
1660
1660
  e,
1661
- /* @__PURE__ */ Tt(t) ? "ShallowReactive" : "Reactive"
1661
+ /* @__PURE__ */ G(t) ? "ShallowReactive" : "Reactive"
1662
1662
  ],
1663
1663
  "<",
1664
1664
  s(t),
1665
- `>${/* @__PURE__ */ wt(t) ? " (readonly)" : ""}`
1665
+ `>${/* @__PURE__ */ Tt(t) ? " (readonly)" : ""}`
1666
1666
  ];
1667
- else if (/* @__PURE__ */ wt(t)) return [
1667
+ else if (/* @__PURE__ */ Tt(t)) return [
1668
1668
  "div",
1669
1669
  {},
1670
1670
  [
1671
1671
  "span",
1672
1672
  e,
1673
- /* @__PURE__ */ Tt(t) ? "ShallowReadonly" : "Readonly"
1673
+ /* @__PURE__ */ G(t) ? "ShallowReadonly" : "Readonly"
1674
1674
  ],
1675
1675
  "<",
1676
1676
  s(t),
@@ -1762,7 +1762,7 @@ function Wr() {
1762
1762
  if (O(r) && r.includes(t) || M(r) && t in r || e.extends && l(e.extends, t, n) || e.mixins && e.mixins.some((e) => l(e, t, n))) return !0;
1763
1763
  }
1764
1764
  function u(e) {
1765
- return /* @__PURE__ */ Tt(e) ? "ShallowRef" : e.effect ? "ComputedRef" : "Ref";
1765
+ return /* @__PURE__ */ G(e) ? "ShallowRef" : e.effect ? "ComputedRef" : "Ref";
1766
1766
  }
1767
1767
  window.devtoolsFormatters ? window.devtoolsFormatters.push(i) : window.devtoolsFormatters = [i];
1768
1768
  }
@@ -3250,15 +3250,15 @@ var pa = {
3250
3250
  subagent: !1
3251
3251
  } }
3252
3252
  };
3253
- function ma(e) {
3254
- let t = `use_${e}`;
3253
+ function ma(e, t = "code") {
3254
+ let n = `use_${e}`;
3255
3255
  return [
3256
- `【执行纪律(最重要)】收到代码组件任务后:**新建类直接委派**(追加组件无需通读/翻页现有数组,子 agent 自会采样一个组件看结构)→ 修改类才 read 定位(by name)→ 调 ${t} 委派 → read 核对 → 回复用户。**中间绝不输出过渡性文字** —— 「我先看看…」「稍后委派」「接下来我会…」这类计划性回复等于任务没做就结束了(回复即本轮终止);所有调研和委派在本轮内连续完成,完成后才回复总结。`,
3256
+ `【执行纪律(最重要)】收到代码组件任务后:**新建类直接委派**(追加组件无需通读/翻页现有数组,子 agent 自会采样一个组件看结构)→ 修改类才 read 定位(by name)→ 调 ${n} 委派 → read 核对 → 回复用户。**中间绝不输出过渡性文字** —— 「我先看看…」「稍后委派」「接下来我会…」这类计划性回复等于任务没做就结束了(回复即本轮终止);所有调研和委派在本轮内连续完成,完成后才回复总结。`,
3257
3257
  "【产物形态】每个组件是完整、自包含的 HTML 页面(含 style/script,可独立成页);你只负责委派和收尾,不关心宿主如何渲染(v-html / iframe / SFC 是集成方的事)。",
3258
- `【主 agent 职责边界(硬规则)】禁止直接 read/write 代码组件的 code 字段(read 只得 <code Nkb> 摘要没用;write 绕过 vfs/verify 危险)—— 生成/修改/排查 code 一律经 ${t},收尾 read 核对。`,
3259
- `【多组件逐个委派(防上下文污染)】一次要多个组件:① write_todos 列出(每项 name + 要点)② 逐个委派 —— 每组件一次 ${t},task 只写该组件(name + 要点 + 主题/风格),勿一次委派多个(同一子 agent 共享上下文生成多个 → class/样式冲突污染)③ 每次返回 read 核对(确认已生成 + 名称对)+ update_todo 标完成 ④ 主题/风格在每次 task 里转述(每个子 agent 全新上下文,不知其他组件)。`,
3260
- `【委派 task 规格化(收窄子 agent 决策,防开放任务致装饰穷举)】委派 ${t} 的 task 必须含:① 组件定位(by name)② 视觉风格(配色/质感/字体;**给 1-2 个具体视觉锚** —— 主色 hex **取自平台 UI/设计规范 skill 的定义值**(有规范类 skill 先 load 再引用其 hex,勿凭页面观察自造近似色;无规范才自定,如「金黄 #F7C948」)、主体占比(如「杯高约画布 60%」)或装饰密度(如「仅 2 类背景装饰」)—— 细节空间收窄,子 agent 不在装饰细节上展开推演)③ 内容(文案/数据/图)④ 交互意图(动效/状态/触发)⑤ 历史偏好(可选):聊天上下文中有与该组件相关的用户历史偏好/反馈(如「用户偏好深色系」「上轮嫌动画太快」),提炼一句附 task 末尾(新子 agent 无记忆,全靠 task);**不含技术实现**(SVG vs CSS / keyframes vs transition 归子 agent 选)。❌「生成啤酒杯动画」→ ✅「啤酒杯倒酒(beer):金黄啤酒 #F7C948 从上方倒入透明杯(杯高约画布 60%),深绿背景,液体循环下落 2s,hover 杯子放大」。规格简练(4 要素各半句),远省子 agent 思考 token。`,
3261
- `【委派失败重试】${t} 返回乱码/内部标记(如 <|DSML|)/空结论或报错 = 子 agent 异常,**重新委派一次**(task 附「上次失败,这次先把 code 写短些/分步」);连续两次失败才降级告知用户。**不要因此自己直接 write/edit code 字段**(绕过 vfs/格式校验,且你拿不到规范全文)。`,
3258
+ `【主 agent 职责边界(硬规则)】禁止直接 read/write 代码组件的 ${t} 字段(read 只得 <code Nkb> 摘要没用;write 绕过 vfs/verify 危险)—— 生成/修改/排查代码一律经 ${n},收尾 read 核对。`,
3259
+ `【多组件逐个委派(防上下文污染)】一次要多个组件:① write_todos 列出(每项 name + 要点)② 逐个委派 —— 每组件一次 ${n},task 只写该组件(name + 要点 + 主题/风格),勿一次委派多个(同一子 agent 共享上下文生成多个 → class/样式冲突污染)③ 每次返回 read 核对(确认已生成 + 名称对)+ update_todo 标完成 ④ 主题/风格在每次 task 里转述(每个子 agent 全新上下文,不知其他组件)。`,
3260
+ `【委派 task 规格化(收窄子 agent 决策,防开放任务致装饰穷举)】委派 ${n} 的 task 必须含:① 组件定位(by name)② 视觉风格(配色/质感/字体;**给 1-2 个具体视觉锚** —— 主色 hex **取自平台 UI/设计规范 skill 的定义值**(有规范类 skill 先 load 再引用其 hex,勿凭页面观察自造近似色;无规范才自定,如「金黄 #F7C948」)、主体占比(如「杯高约画布 60%」)或装饰密度(如「仅 2 类背景装饰」)—— 细节空间收窄,子 agent 不在装饰细节上展开推演)③ 内容(文案/数据/图)④ 交互意图(动效/状态/触发)⑤ 历史偏好(可选):聊天上下文中有与该组件相关的用户历史偏好/反馈(如「用户偏好深色系」「上轮嫌动画太快」),提炼一句附 task 末尾(新子 agent 无记忆,全靠 task);**不含技术实现**(SVG vs CSS / keyframes vs transition 归子 agent 选)。❌「生成啤酒杯动画」→ ✅「啤酒杯倒酒(beer):金黄啤酒 #F7C948 从上方倒入透明杯(杯高约画布 60%),深绿背景,液体循环下落 2s,hover 杯子放大」。规格简练(4 要素各半句),远省子 agent 思考 token。`,
3261
+ `【委派失败重试】${n} 返回乱码/内部标记(如 <|DSML|)/空结论或报错 = 子 agent 异常,**重新委派一次**(task 附「上次失败,这次先把代码写短些/分步」);连续两次失败才降级告知用户。**不要因此自己直接 write/edit ${t} 字段**(绕过 vfs/格式校验,且你拿不到规范全文)。`,
3262
3262
  "【预算将尽暂停】组件很多、接近工具轮次上限不要硬扛:完成手头这个后报告「已生成 K/N,还剩 M 个」,等用户确认后从 todos 剩余项继续(勿重复已完成)。"
3263
3263
  ].join("\n");
3264
3264
  }
@@ -3273,12 +3273,12 @@ var ha = {
3273
3273
  "6. 写入若触发乐观锁冲突(返回 VERSION_CONFLICT 或工具挂起等用户决定):等工具返回结果后按其指示继续(保留外部值 → 重新 read 再改;已覆盖/已回退 → 基于结果重写),不要放弃任务。"
3274
3274
  ].join("\n"),
3275
3275
  htmlPageOrchestrator: ma("html"),
3276
- htmlPageProposeFirst: ["【新建/创意类请求】先用简短文字给出 2~3 套方案(每套一两句风格/配色/结构要点),询问用户选哪套;选定前不要委派生成代码、不要写 components。", "【方案切换】已生成某套方案后改选另一套:不重新罗列,直接依据之前描述委派 use_html 重新生成并覆盖相应组件。"].join("\n"),
3276
+ htmlPageProposeFirst: ["【新建/创意类请求】先用简短文字给出 2~3 套方案(每套一两句风格/配色/结构要点),询问用户选哪套;选定前不要委派生成代码、不要写 components。", "【方案切换】已生成某套方案后改选另一套:不重新罗列,直接依据之前描述重新委派生成并覆盖相应组件(委派工具见编排段 use_<id>)。"].join("\n"),
3277
3277
  htmlDirectWriteFallback: [
3278
- "【纯代码组件 · 你直接写】当前未配备 html 子 agent,纯代码组件的 code 字段由你直接 write(普通字段,经 schema 校验 + 乐观锁 + 快照栈,与改其他字段无异;无 vfs 工作副本 / 无格式校验门禁)。",
3279
- "【HTML 生成规范】code 必须是完整、自包含的 HTML 页面(含 <style>/<script>,可独立成页):标签正确闭合、style/script 集中放置(如 <head> 内)、class 加前缀防冲突;可引外部 JS/CSS(CDN/字体)。安全底线:禁 eval/new Function、不引可疑外部脚本、不访问 document.cookie 等敏感属性。",
3280
- "【修改而非重写】改已有 code:先 read({jsonPath}) 取当前 code → 基于当前值增量改(只动要改的部分,如换配色/文案/某段结构),不要整体重写整个 code(易丢已有内容、token 浪费)。",
3281
- "【质量自检】无格式校验门禁,写完自查标签闭合 / 结构完整;code 进 data 由集成方渲染层(v-html/iframe)呈现。如需代码资产机制(vfs 工作副本 + 格式校验 + 增量 commit),注册 createHtmlSubagent。"
3278
+ "【纯代码组件 · 你直接写】当前未配备 html 子 agent,纯代码组件的代码字段(code,以 schema 声明为准)由你直接 write(普通字段,经 schema 校验 + 乐观锁 + 快照栈,与改其他字段无异;无 vfs 工作副本 / 无格式校验门禁)。",
3279
+ "【HTML 生成规范】代码字段必须是完整、自包含的 HTML 页面(含 <style>/<script>,可独立成页):标签正确闭合、style/script 集中放置(如 <head> 内)、class 加前缀防冲突;可引外部 JS/CSS(CDN/字体)。安全底线:禁 eval/new Function、不引可疑外部脚本、不访问 document.cookie 等敏感属性。",
3280
+ "【修改而非重写】改已有代码:先 read({jsonPath}) 取当前代码字段 → 基于当前值增量改(只动要改的部分,如换配色/文案/某段结构),不要整体重写整个代码字段(易丢已有内容、token 浪费)。",
3281
+ "【质量自检】无格式校验门禁,写完自查标签闭合 / 结构完整;代码进 data 由集成方渲染层(v-html/iframe)呈现。如需代码资产机制(vfs 工作副本 + 格式校验 + 增量 commit),注册 createHtmlSubagent。"
3282
3282
  ].join("\n")
3283
3283
  }, ga = 15, _a = 4e3, va = /* @__PURE__ */ new WeakMap();
3284
3284
  function ya(e, t) {
@@ -3353,7 +3353,7 @@ function wa(e = [], n = {}) {
3353
3353
  name: "todos",
3354
3354
  tools: [r(async ({ todos: e }) => {
3355
3355
  if (!s) s = !0, c = 1;
3356
- else if (c > l) return `规划阶段已达上限(${l} 轮,现在已是第 ${c} 版计划)。停止调研/修订,基于当前清单开始执行(用 write/set_data/edit_data 落地)。当前清单:\n${i.map((e, t) => `${t + 1}. #${e.id} [${e.status}] ${e.content}`).join("\n") || "(空)"}`;
3356
+ else if (c > l) return `规划阶段已达上限(${l} 轮,现在已是第 ${c} 版计划)。停止调研/修订,基于当前清单开始执行(用 write 落地;advanced 模式亦可用 set_data/edit_data)。当前清单:\n${i.map((e, t) => `${t + 1}. #${e.id} [${e.status}] ${e.content}`).join("\n") || "(空)"}`;
3357
3357
  return i = Sa(e), `已更新任务清单:${i.length} 项\n${i.map((e, t) => `${t + 1}. #${e.id} [${e.status}] ${e.content}`).join("\n")}`;
3358
3358
  }, {
3359
3359
  name: "write_todos",
@@ -3697,7 +3697,7 @@ function Ya(e, t) {
3697
3697
  return Array.isArray(a) && Number(i) >= a.length;
3698
3698
  }
3699
3699
  function Xa(e) {
3700
- let t = e.initialFocuses ? [...e.initialFocuses] : [], n = () => e.onChange?.([...t]);
3700
+ let t = e.initialFocuses ? [...e.initialFocuses] : [], n = () => e.onChange?.([...t]), r = e.unfocusGuidance ?? "tool", i = r === "tool" ? "需改其他组件请先 remove_focus / clear_focus 或换焦点。" : r === "ask-user" ? "焦点由用户在输入框设定与移除(聚焦 chip ✕);用户要求改其他组件时,提示用户移除聚焦后重试,勿尝试写焦点外(会被拒)。" : "需改其他组件时,在收口回复中说明需先取消焦点(焦点由主会话管理),勿尝试越界写。", a = r === "tool" ? "请先 remove_focus / clear_focus 或换焦点后重试。" : r === "ask-user" ? "焦点由用户在输入框管理,请提示用户移除输入框中的聚焦 chip 后重试(当前模式无 focus 工具)。" : "请只改焦点子树;需改其他组件时,在收口回复中说明需先取消焦点。";
3701
3701
  return {
3702
3702
  name: "focus",
3703
3703
  beforeAgent: () => t.length ? {
@@ -3709,7 +3709,7 @@ function Xa(e) {
3709
3709
  let n = [
3710
3710
  "## 当前精修目标",
3711
3711
  t.map((e) => `· ${e.path}${e.label ? `(${e.label})` : ""}`).join("\n"),
3712
- `仅操作上述 ${t.length} 个聚焦子树${t.length > 1 ? "之一" : ""},不要改动其他组件;需改其他组件请先 remove_focus / clear_focus 或换焦点。`
3712
+ `仅操作上述 ${t.length} 个聚焦子树${t.length > 1 ? "之一" : ""},用户未指明目标的指令默认作用于聚焦组件;不要改动其他组件;${i}`
3713
3713
  ], r = e.getSchema();
3714
3714
  if (r) {
3715
3715
  let e = t.map((e) => {
@@ -3722,21 +3722,21 @@ function Xa(e) {
3722
3722
  },
3723
3723
  wrapToolCall: async (n, r) => {
3724
3724
  if (t.length) {
3725
- let i = t.map((e) => e.label ? `${e.path}(${e.label})` : e.path).join(", "), a = (e) => ({
3726
- content: `PATH_DENIED · 聚焦越界:当前聚焦 [${i}],不可操作「${e}」。请先 remove_focus / clear_focus 或换焦点后重试。`,
3725
+ let i = t.map((e) => e.label ? `${e.path}(${e.label})` : e.path).join(", "), o = (e) => ({
3726
+ content: `PATH_DENIED · 聚焦越界:当前聚焦 [${i}],不可操作「${e}」。${a}`,
3727
3727
  status: "error"
3728
3728
  });
3729
3729
  if (n.name === "eval_script") {
3730
3730
  if (n.args?.mode !== "transform") return r(n);
3731
3731
  let i = qa(n.args);
3732
- if (!i.length) return a("(整体数据)");
3733
- for (let n of i) if (!t.some((e) => Ja(n, e.path)) && !Ya(n, e.getBind?.())) return a(n);
3732
+ if (!i.length) return o("(整体数据)");
3733
+ for (let n of i) if (!t.some((e) => Ja(n, e.path)) && !Ya(n, e.getBind?.())) return o(n);
3734
3734
  return r(n);
3735
3735
  }
3736
3736
  if (Ka.has(n.name)) {
3737
3737
  let r = qa(n.args);
3738
- if (!r.length) return a("(整体数据)");
3739
- for (let n of r) if (!t.some((e) => Ja(n, e.path)) && !Ya(n, e.getBind?.())) return a(n);
3738
+ if (!r.length) return o("(整体数据)");
3739
+ for (let n of r) if (!t.some((e) => Ja(n, e.path)) && !Ya(n, e.getBind?.())) return o(n);
3740
3740
  }
3741
3741
  }
3742
3742
  return r(n);
@@ -4841,7 +4841,8 @@ async function Cs(e, t, n, r, i, a) {
4841
4841
  })] : [], p = t.getFocuses?.() ?? [], m = p.length ? Xa({
4842
4842
  getSchema: t.getSchema ?? (() => null),
4843
4843
  getBind: t.getBind,
4844
- initialFocuses: p
4844
+ initialFocuses: p,
4845
+ unfocusGuidance: "report-parent"
4845
4846
  }) : void 0, h = t.getVfsFiles ? {
4846
4847
  name: "vfs-bridge",
4847
4848
  beforeAgent: () => ({ files: t.getVfsFiles() })
@@ -6214,7 +6215,7 @@ function Oc(e) {
6214
6215
  break;
6215
6216
  }
6216
6217
  }
6217
- return `## 组件代码文件地图(改组件时按 name 直接改对应 vfs 文件;框架自动 checkout/commit)${c ? "\n📝 笔记 = 前任维护者交接(设计决策/用户反馈/踩坑),改该组件时遵循" : ""}\n${i.join("\n")}${l}`;
6218
+ return `## 组件代码文件地图(改组件时按 name 直接改对应 vfs 文件;框架自动 checkout/commit)${c ? "\n📝 笔记 = 前任维护者交接(设计决策/用户反馈/踩坑),改该组件时遵循;收口回复末行必须附一行 [note] 交接笔记(本组件本次的实现要点),框架存进组件转交下任" : ""}\n${i.join("\n")}${l}`;
6218
6219
  },
6219
6220
  wrapToolCall: async (e, i) => {
6220
6221
  let a = e.name === "vfs_write" || e.name === "vfs_edit" || e.name === "vfs_rm" ? e.args?.path : void 0, s = typeof a == "string" ? uc(a) : void 0, c = typeof s == "string" && s.startsWith(n);
@@ -6225,7 +6226,7 @@ function Oc(e) {
6225
6226
  if (e.size) {
6226
6227
  let t = Tc(s, n);
6227
6228
  if (t && !e.has(t)) return {
6228
- content: `PATH_DENIED · vfs 越界:当前聚焦代码文件 [${[...e].map((e) => `${n}${e}.${r}`).join(", ")}],你要改的 "${s}" 不在其中。请只改焦点组件的代码文件;如需改其他组件,请让主 agent clear_focus / 换焦点后重试。`,
6229
+ content: `PATH_DENIED · vfs 越界:当前聚焦代码文件 [${[...e].map((e) => `${n}${e}.${r}`).join(", ")}],你要改的 "${s}" 不在其中。请只改焦点组件的代码文件;如需改其他组件,请在收口回复中说明需先取消聚焦(焦点由主会话/用户管理,你无 focus 工具)后重试。`,
6229
6230
  status: "error"
6230
6231
  };
6231
6232
  }
@@ -6284,27 +6285,27 @@ function Oc(e) {
6284
6285
  }
6285
6286
  //#endregion
6286
6287
  //#region src/core/sdk/htmlSubagent.ts
6287
- function kc(e) {
6288
- let t = "html";
6288
+ function kc(e, t, n) {
6289
+ let r = "html";
6289
6290
  return `你是纯代码组件生成专家。可用工具:vfs_write / vfs_edit / vfs_rm(写/改/删代码工作副本 vfs ${e}) / vfs_read + vfs_grep(读 vfs) / validate_code(代码格式自检) / write(写 data,writablePaths 限定;set/patch 增量或整体) / read / write_todos + update_todo(规划)。
6290
6291
 
6291
6292
  收 task 规格照做(减少你自己的思考纠结):task 含视觉(配色/质感)+ 内容(文案/数据)+ 交互(动效/触发)规格时,**照规格实现**(技术实现 SVG vs CSS / keyframes vs transition 自行选成熟模式,不穷举);task 缺规格(主 agent 漏写)时,按字面意图选**一个简单方案**直接实现,不纠结「该用什么风格」—— 主 agent 掌整页主题协调,你负责落地。
6292
6293
 
6293
6294
  代码作为数据资产(重要):
6294
- - 代码正文是 data 的 code 字段(资产,随 data json 进服务端 DB);UI 直接绑 data.code 渲染
6295
- - vfs 是编辑工作副本:框架在每次委派开始时自动把 data.code 检出到 vfs(${e}<__pgId>.${t}),你改 vfs,委派结束框架自动把改过的 vfs 增量回写 data.code
6295
+ - 代码正文是 data 的 ${t} 字段(资产,随 data json 进服务端 DB);UI 直接绑 data.${t} 渲染
6296
+ - vfs 是编辑工作副本:框架在每次委派开始时自动把 data.${t} 检出到 vfs(${e}<__pgId>.${r}),你改 vfs,委派结束框架自动把改过的 vfs 增量回写 data.${t}
6296
6297
  - __pgId 是框架管的内部字段(组件稳定映射键):read 看不到、write 写不进,你别碰
6297
6298
 
6298
6299
  两条工作路径:
6299
- - **修改已有组件**(改颜色/文案/布局等):必经 vfs —— 上下文有「组件代码文件地图」(name → vfs 路径),按 name 找到对应文件直接 vfs_edit 增量改目标片段 → validate_code 自检;框架自动回写 data.code。勿直接 write data.code 改已有组件(绕过 vfs/verify,且无增量友好);文件未检出时先 vfs_write 创建
6300
- - **新建组件**:write({ patch:{ op:'set', jsonPath:'components.N', value:{...} } }) —— value 按 data schema **全字段写**(含必填字段如 type/name,code 正文;缺必填字段会被 schema 拒)。调研**只看一个样本**:read({jsonPath:'components', offset:0, limit:1}) 取首个元素照抄字段名即可(**禁止分页逐个翻完整数组**,大数组翻页纯烧轮次;也不要 describe_data/schema_data 反复查);N = 数组长度(追加到末尾,read 返回的 total/length 即是)。框架自动补 __pgId。**固定流程**:直接 write data → validate_code({jsonPath:'components.N.code'}) 自检(从 data 读刚写的 code,零重传 content)→ read 确认;**不必手动 vfs_write 建工作副本**(框架下次委派自动 checkout;仅当本次委派内还要继续精修它,才 vfs_write 建副本再 vfs_edit)。**校验方式**:新建组件用 jsonPath(零重传)/ 修改组件用 path(vfs 文件)/ content 仅兜底;**禁止在思考里权衡「content 太长 / 要不要重传 / 先 vfs_write 再 by path」**,选对应方式一次校验即收口(为之纠结反费更多 token,真实复盘子 agent 曾在此循环 10+ 回合致整页超时)。**code 字段直接写完整代码字符串,换行/引号照常写,无需手工 JSON 转义**
6300
+ - **修改已有组件**(改颜色/文案/布局等):必经 vfs —— 上下文有「组件代码文件地图」(name → vfs 路径),按 name 找到对应文件直接 vfs_edit 增量改目标片段 → validate_code 自检;框架自动回写 data.${t}。勿直接 write data.${t} 改已有组件(绕过 vfs/verify,且无增量友好);文件未检出时先 vfs_write 创建
6301
+ - **新建组件**:write({ patch:{ op:'set', jsonPath:'${n}.N', value:{...} } }) —— value 按 data schema **全字段写**(含全部必填字段 —— 字段名以样本为准照抄,如类型/名称,外加 ${t} 代码正文;缺必填字段会被 schema 拒)。调研**只看一个样本**:read({jsonPath:'${n}', offset:0, limit:1}) 取首个元素照抄字段名即可(**禁止分页逐个翻完整数组**,大数组翻页纯烧轮次;也不要 describe_data/schema_data 反复查);N = 数组长度(追加到末尾,read 返回的 total/length 即是)。框架自动补 __pgId。**固定流程**:直接 write data → validate_code({jsonPath:'${n}.N.${t}'}) 自检(从 data 读刚写的代码,零重传 content)→ read 确认;**不必手动 vfs_write 建工作副本**(框架下次委派自动 checkout;仅当本次委派内还要继续精修它,才 vfs_write 建副本再 vfs_edit)。**校验方式**:新建组件用 jsonPath(零重传)/ 修改组件用 path(vfs 文件)/ content 仅兜底;**禁止在思考里权衡「content 太长 / 要不要重传 / 先 vfs_write 再 by path」**,选对应方式一次校验即收口(为之纠结反费更多 token,真实复盘子 agent 曾在此循环 10+ 回合致整页超时)。**${t} 字段直接写完整代码字符串,换行/引号照常写,无需手工 JSON 转义**
6301
6302
 
6302
6303
  焦点精修(若继承到主 agent 焦点):
6303
- - 上下文若提示「当前精修目标」(如 components.2(banner)),说明主 agent 聚焦了某组件 → 你**只能改该焦点组件**的代码文件(vfs 文件 ${e}<焦点组件 __pgId>.${t});改其他组件的代码文件会被 PATH_DENIED 硬拦
6304
+ - 上下文若提示「当前精修目标」(如 ${n}.2),说明主 agent 聚焦了某组件 → 你**只能改该焦点组件**的代码文件(vfs 文件 ${e}<焦点组件 __pgId>.${r});改其他组件的代码文件会被 PATH_DENIED 硬拦
6304
6305
  - 直接改焦点组件文件,不要尝试改其他组件(浪费轮次);聚焦模式下也不能新建组件(数据写被拦)—— 若 task 要新建,反馈主 agent 需先取消焦点
6305
6306
 
6306
6307
  代码形态规则:
6307
- ${`- 输出形态:完整、自包含的 HTML 页面(.${t},可独立成页)`}
6308
+ ${`- 输出形态:完整、自包含的 HTML 页面(.${r},可独立成页)`}
6308
6309
 
6309
6310
  输出要求(生成完整、自包含、能独立成页的 HTML):
6310
6311
  - 产物是**完整、自包含的 HTML 页面**(结构完整、标签闭合、交互逻辑用 <script>),能独立正确渲染
@@ -6315,7 +6316,7 @@ ${`- 输出形态:完整、自包含的 HTML 页面(.${t},可独立成页)`}
6315
6316
 
6316
6317
  诚实交付:
6317
6318
  - 按用户需求产出完整 HTML 页面。若某需求无法实现,结论简短说明(不展开权衡、不解释渲染原理)。禁止假装实现了未做到的特性。
6318
- - **收尾回复末尾附 1 行交接笔记**(给下次维护该组件的子 agent,框架会存进组件并自动转交):格式 \`[note] <一句话实现要点>\` —— 关键设计决策 / 用户偏好反馈 / 踩坑(如「[note] 液面用 height keyframes 4.2s 循环;装饰仅灯串+光斑 2 类」)。只写可复用的结论,一行内。
6319
+ - 收尾回复末尾附 1 行交接笔记(格式见文末「收口格式」,**必守**)。
6319
6320
 
6320
6321
  工作方式:
6321
6322
  1. 中等任务(多组件 / 大段代码)先 write_todos 拆解:read 看现有结构 → 规划各组件 → 逐个改/建 → read 确认。**todo 工具约束**:write_todos 是整表替换(一次列全),update_todo 是增量(标完成/改状态);两者**不可在同一轮混用**(一轮内只用一种,否则被拒),别再同轮重试另一种;
@@ -6332,14 +6333,55 @@ ${`- 输出形态:完整、自包含的 HTML 页面(.${t},可独立成页)`}
6332
6333
  - **机械决定一次定**:写法选择(read 回读 vs 复制、vfs 草稿 vs 直写 data、并行 vs 串行)快速选一个,**不在思考里反复权衡 token 成本**(为之纠结反更费 token)。
6333
6334
  - **禁止在思考里整段写出完整代码草稿**:CSS/JS/HTML 代码只写进 write / vfs_write / vfs_edit 工具调用(代码只出现一次);思考里只做高层设计(结构 / 字段 / 方案选择),不要先逐行预写一遍代码再在工具里重复一遍 —— 那会让代码 token 翻倍。
6334
6335
  - **终稿纪律(一次写成)**:动手前要点清单一次定稿(≤10 条:结构 + DOM 分层/z-index + 关键尺寸 + 动画时序),清单齐了**直接在工具调用里写终稿**;① 不先写一版再推翻重写第二版(整段重写 = 代码 token 翻倍,写前多花 30 秒把清单想齐);② 同一几何/层级约束(bottom 定位/遮挡/z-index)**只推演一次**,不重复推导第二遍;③ 写完发现小问题(遮挡/重叠/命名),只改那一处,不重写整段。
6335
- - **代码字符串不纠结转义**:code / content 字段就是普通字符串,直接写完整代码文本(换行、引号照常写),不要纠结「\n」转义、单双引号、字面换行会不会被拒 —— 框架自动序列化,反复权衡纯属浪费 token。
6336
- - 一次想清楚 → 动手 → 验证 → 收口。**思考是手段不是目的,产出代码才是**。`;
6336
+ - **代码字符串不纠结转义**:代码字段(${t})/ content 参数就是普通字符串,直接写完整代码文本(换行、引号照常写),不要纠结「\n」转义、单双引号、字面换行会不会被拒 —— 框架自动序列化,反复权衡纯属浪费 token。
6337
+ - 一次想清楚 → 动手 → 验证 → 收口。**思考是手段不是目的,产出代码才是**。
6338
+ 8. **收口格式(必守,最后一行)**:收口回复 = 简短结果总结 + **末行交接笔记** \`[note] <一句话实现要点>\` —— 关键设计决策 / 用户偏好 / 踩坑(如「[note] 液面用 height keyframes 4.2s 循环;装饰仅灯串+光斑 2 类」)。框架只识别末尾 [note] 行存进组件、自动转交下次维护该组件的子 agent;**漏写 = 下任失去交接**(真 LLM 实测漏写率 3/4,务必末行带上)。一行内,只写可复用结论。`;
6339
+ }
6340
+ function Ac(e, t) {
6341
+ return `# HTML 完整页面生成规范
6342
+
6343
+ ## 代码资产模型(重要)
6344
+ - 代码正文是 data 的 ${t} 字段(资产,随 data json 进服务端 DB);UI 绑 data.${t} 渲染
6345
+ - vfs 是编辑工作副本:框架自动 checkout(data.${t}→vfs)/ commit(vfs→data.${t}),你只改 vfs
6346
+ - __pgId 框架管(read 看不到、write 写不进),别碰
6347
+
6348
+ ## 两条工作路径
6349
+ - 修改已有组件:必经 vfs —— 按上下文「组件代码文件地图」(name → vfs 路径)定位文件,vfs_edit 增量改 → validate_code;勿直接 write data.${t};文件未检出先 vfs_write 创建
6350
+ - 新建组件:write({patch:{op:'set',jsonPath:'${e}.N',value:{...}}}) —— value 按 schema 全字段写(必填字段不能漏,字段名以样本为准;调研只 read({jsonPath:'${e}',offset:0,limit:1}) 看一个样本照抄字段名,勿分页翻全量数组),框架补 __pgId。固定流程 write → validate_code({jsonPath:'${e}.N.${t}'})(零重传 content)→ read 确认,**不手动 vfs_write 建副本**(框架下次委派自动 checkout)。${t} 字段直接写完整代码字符串,换行/引号照常写,无需手工 JSON 转义
6351
+
6352
+ ## 焦点精修(继承主 agent 焦点时)
6353
+ - 上下文提示「当前精修目标」(如 ${e}.2)→ 只改该焦点组件的代码文件;改其他组件会被 PATH_DENIED 硬拦
6354
+ - 聚焦模式不能新建组件(数据写被拦),要新建先反馈主 agent 取消焦点
6355
+
6356
+ ## 输出:完整、自包含、能独立成页的 HTML
6357
+ - 产物是**完整、自包含的 HTML 页面**(结构完整、标签闭合),能独立正确渲染。下游改造(抽 body / 包组件 / 片段化)由插件或 tool 做,不是你的事
6358
+ - **交互逻辑默认用 <script> 实现**(完整页面含 script 是常态);仅当用户明确要求「纯 CSS / 不要 script」时不写
6359
+ - **CSS 用 <style> 块、script 用 <script> 块集中放置**(如 <head> 内),不散落内联 —— 便于下游工具提取成独立 html/css/js
6360
+ - 可引入外部 JS / CSS(CDN 组件库、字体、外链样式)按需使用;class 统一加前缀防冲突(如 .pg-hero-…)
6361
+
6362
+ ## 标签闭合(必须)
6363
+ - 非自闭合标签必须成对闭合(<img> / <br> / <input> 等 void 元素除外)
6364
+ - 每次生成/修改后调 validate_code 自检(只校验结构合法性),报错用 vfs_edit 修正直到通过
6365
+
6366
+ ## 何时写代码组件
6367
+ - 组件库无对应类型(高度定制布局 / 一次性专题页 / 特殊视觉效果)→ 写完整 HTML 页面
6368
+ - 组件库已有(按钮 / 卡片 / 列表)→ 用现有组件配置,不重造
6369
+
6370
+ ## 安全底线(必须)
6371
+ - 禁 eval / new Function / Function 构造器
6372
+ - 禁访问 window 敏感属性(document.cookie / apiKey / token)
6373
+
6374
+ ## 可访问性 + 语义化
6375
+ - 语义化标签(button / nav / section);图片 alt;交互可键盘聚焦
6376
+ - 颜色对比达标;不只用颜色传达信息`;
6377
+ }
6378
+ function jc(e = "components", t = "code") {
6379
+ return {
6380
+ name: "html-fragment",
6381
+ description: "完整 HTML 页面生成规范:代码作为 data 资产 / vfs 工作副本 / 完整自包含可独立成页 / script+CSS 集中放置 / 可引外部 JS/CSS / validate_code 自检 / 安全底线 / 可访问性",
6382
+ getContent: () => Ac(e, t)
6383
+ };
6337
6384
  }
6338
- var Ac = "# HTML 完整页面生成规范\n\n## 代码资产模型(重要)\n- 代码正文是 data 的 code 字段(资产,随 data json 进服务端 DB);UI 绑 data.code 渲染\n- vfs 是编辑工作副本:框架自动 checkout(data.code→vfs)/ commit(vfs→data.code),你只改 vfs\n- __pgId 框架管(read 看不到、write 写不进),别碰\n\n## 两条工作路径\n- 修改已有组件:必经 vfs —— 按上下文「组件代码文件地图」(name → vfs 路径)定位文件,vfs_edit 增量改 → validate_code;勿直接 write data.code;文件未检出先 vfs_write 创建\n- 新建组件:write({patch:{op:'set',jsonPath:'components.N',value:{...}}}) —— value 按 schema 全字段写(必填字段如 type 不能漏;调研只 read({jsonPath:'components',offset:0,limit:1}) 看一个样本照抄字段名,勿分页翻全量数组),框架补 __pgId。固定流程 write → validate_code({jsonPath:'components.N.code'})(零重传 content)→ read 确认,**不手动 vfs_write 建副本**(框架下次委派自动 checkout)。code 字段直接写完整代码字符串,换行/引号照常写,无需手工 JSON 转义\n\n## 焦点精修(继承主 agent 焦点时)\n- 上下文提示「当前精修目标」(如 components.2(banner))→ 只改该焦点组件的代码文件;改其他组件会被 PATH_DENIED 硬拦\n- 聚焦模式不能新建组件(数据写被拦),要新建先反馈主 agent 取消焦点\n\n## 输出:完整、自包含、能独立成页的 HTML\n- 产物是**完整、自包含的 HTML 页面**(结构完整、标签闭合),能独立正确渲染。下游改造(抽 body / 包组件 / 片段化)由插件或 tool 做,不是你的事\n- **交互逻辑默认用 <script> 实现**(完整页面含 script 是常态);仅当用户明确要求「纯 CSS / 不要 script」时不写\n- **CSS 用 <style> 块、script 用 <script> 块集中放置**(如 <head> 内),不散落内联 —— 便于下游工具提取成独立 html/css/js\n- 可引入外部 JS / CSS(CDN 组件库、字体、外链样式)按需使用;class 统一加前缀防冲突(如 .pg-hero-…)\n\n## 标签闭合(必须)\n- 非自闭合标签必须成对闭合(<img> / <br> / <input> 等 void 元素除外)\n- 每次生成/修改后调 validate_code 自检(只校验结构合法性),报错用 vfs_edit 修正直到通过\n\n## 何时写代码组件\n- 组件库无对应类型(高度定制布局 / 一次性专题页 / 特殊视觉效果)→ 写完整 HTML 页面\n- 组件库已有(按钮 / 卡片 / 列表)→ 用现有组件配置,不重造\n\n## 安全底线(必须)\n- 禁 eval / new Function / Function 构造器\n- 禁访问 window 敏感属性(document.cookie / apiKey / token)\n\n## 可访问性 + 语义化\n- 语义化标签(button / nav / section);图片 alt;交互可键盘聚焦\n- 颜色对比达标;不只用颜色传达信息", jc = {
6339
- name: "html-fragment",
6340
- description: "完整 HTML 页面生成规范:代码作为 data 资产 / vfs 工作副本 / 完整自包含可独立成页 / script+CSS 集中放置 / 可引外部 JS/CSS / validate_code 自检 / 安全底线 / 可访问性",
6341
- getContent: () => Ac
6342
- };
6343
6385
  function Mc(e = {}) {
6344
6386
  let t = e.vfsPrefix ?? "html/";
6345
6387
  return ({ state: e }) => {
@@ -6400,8 +6442,8 @@ function Nc(e) {
6400
6442
  name: "validate_code",
6401
6443
  description: "校验 HTML 代码格式(标签闭合等结构合法性;DOCTYPE/html/head/body/script 均允许 —— 完整页面级)。生成/修改代码后必调;报错修正后复查直到通过。",
6402
6444
  schema: t.object({
6403
- jsonPath: t.string().optional().describe("首选。从 data 读 code 校验(如 components.2.code;新建组件 write 后用,零重传 content)"),
6404
- path: t.string().optional().describe("修改已有组件时校验 vfs 工作副本文件(如 html/hero.html)"),
6445
+ jsonPath: t.string().optional().describe("首选。从 data 读代码校验(传代码字段的 jsonPath;新建组件 write 后用,零重传 content)"),
6446
+ path: t.string().optional().describe("修改已有组件时校验 vfs 工作副本文件(如 " + e + "hero.html)"),
6405
6447
  content: t.string().optional().describe("兜底。仅当 jsonPath/path 均不便时直传代码")
6406
6448
  })
6407
6449
  })]
@@ -6416,11 +6458,10 @@ function Fc(e = {}) {
6416
6458
  if (t !== void 0 && !Array.isArray(t)) throw Error("[page-agent-sdk][createHtmlSubagent] writablePaths 须为字符串数组(代码组件 data 区,如 [\"components\"])/ 省略以从 schema 自动推断");
6417
6459
  let h = [];
6418
6460
  a && h.push(wa()), d && (h.push(Nc(n)), h.push(Os({ check: Mc({ vfsPrefix: n }) })));
6419
- let g = u ?? [];
6420
- return {
6461
+ let g = u ?? [], _ = t?.[0] ?? "components", v = l === void 0, y = {
6421
6462
  id: r,
6422
- description: i ?? "生成/修改纯代码组件(custom 代码)。代码作为 data 资产(code 字段进 DB),vfs 作工作副本;能规划(write_todos)+ 执行。需写代码组件或灵活定制时委派",
6423
- systemPrompt: kc(n),
6463
+ description: i ?? `生成/修改纯代码组件(代码作为 data 资产,代码字段 ${f} 随 data 持久化;vfs 作工作副本;能规划(write_todos)+ 执行)。需写代码组件或灵活定制时委派`,
6464
+ systemPrompt: kc(n, f, _),
6424
6465
  writablePaths: t ?? [],
6425
6466
  allowedTools: [
6426
6467
  "vfs_write",
@@ -6433,7 +6474,7 @@ function Fc(e = {}) {
6433
6474
  summarization: o === !1 ? void 0 : o,
6434
6475
  maxVerifyAttempts: d ? Pc : void 0,
6435
6476
  temperature: c,
6436
- skills: l ?? [jc],
6477
+ skills: v ? [jc(_, f)] : l,
6437
6478
  maxToolRounds: s,
6438
6479
  tools: g.length ? g : void 0,
6439
6480
  _codeAsset: {
@@ -6442,9 +6483,12 @@ function Fc(e = {}) {
6442
6483
  ext: "html",
6443
6484
  codeField: f,
6444
6485
  craftNotes: m,
6445
- ...p ? { orchestratorPrompt: ma(r) } : {}
6486
+ ...p ? { orchestratorPrompt: ma(r, f) } : {}
6446
6487
  }
6447
6488
  };
6489
+ return y._rebuildCodeAssetPaths = (e) => {
6490
+ y.systemPrompt = kc(n, f, e), v && (y.skills = [jc(e, f)]);
6491
+ }, y;
6448
6492
  }
6449
6493
  //#endregion
6450
6494
  //#region src/core/sdk/defineTool.ts
@@ -9408,21 +9452,21 @@ function Ku(e) {
9408
9452
  //#region src/core/harness/usageHints.ts
9409
9453
  var qu = .7;
9410
9454
  function Ju(e, t, n = "simple", r, i) {
9411
- let a = El(e), o = n !== "advanced";
9455
+ let a = El(e), o = n !== "advanced", s = n === "minimal";
9412
9456
  return {
9413
9457
  name: "usageHints",
9414
9458
  augmentPrompt: (n) => {
9415
9459
  let r = [];
9416
- if (a.planning && (r.push("【自适应规划】按任务复杂度决定是否先规划,不要对简单任务过度编排:"), r.push(" · 简单/明确任务(改单字段、调样式、查值)→ 直接 read/write 执行,不必 write_todos。"), r.push(" · 复杂任务(多步、大改、有歧义、不可逆)→ 先 write_todos 拆解,首个任务标 in_progress,逐项推进。"), r.push(" · 执行中发现步骤要改/补/细分 → 用 update_todo({id, content?, status?}) 按 id 增量改单项,不必重传整个清单。"), r.push(" · 规划出多步方案若需用户拍板 → 先 request_human_confirmation 给方案选项,确认后再执行。"), r.push(" · 规划阶段有轮次预算(maxPlanRevisions,默认 5):勿反复调研/改计划而不执行,规划充分后即开始 write 落地。")), t && (o ? (r.push("读写主数据用 read/write(高层入口,自动乐观锁 + 自动快照)。read({jsonPath}) 读子路径当前值(返回含 hash,write 时自动比对,无需手动传);read() 不传读整个主数据 + 说明。write 改值两姿势:① 改单个字段/子路径用 write({patch:{op:\"set\", jsonPath:\"路径.字段\", value:新值}})——patch.value 就是该字段的新值(类型匹配:string 直传字符串、number 传数字、对象传对象),不要包成 {字段:值} 对象(字段名已在 jsonPath);也兼容 write({value:新值, patch:{op,jsonPath}}) 顶层 value(向后兼容,但优先 patch.value,避免与整体 set 的 value 混淆);② 替换整个对象用 write({value:{整个新对象}})。op:set 设值 / remove 删 / merge 合并对象 / append 追加数组 / move 移动数组元素(value=目标路径字符串:数组本身=追加到末尾、数组内下标=插到该位置;同数组即重排如组件调序,目标下标按移除源后解释,一步完成免双 set 交换);批量多改动 write({patches:[{op,jsonPath,value},...]});删子路径 write({patch:{jsonPath:\"路径\"}, del:true})。写入自动经 schema 校验(失败不写,按错误提示改值类型/形状后重试)+ 自动存快照(出错可用 restore_data 回退)。"), r.push("修改大对象/数组优先用 write 的 patch 增量(只发改动部分),避免整体重传被 max_tokens 截断致 JSON 不完整。"), r.push("读大数组(read 返回 hasMore=true)用 read({jsonPath,offset,limit}) 分页(offset+=limit 续读,默认 limit=50);一次读多个不相关子路径用 read({jsonPaths:[...]}) 省轮次;复杂 patches 改动先 write({patches,dryRun:true}) 预检(走完整校验不落盘)。"), r.push("read/describe 返回按 schema 投影:仅 schema 声明的字段可见(未声明字段自动隐藏,防误操作);要操作某字段需集成方在 schema 声明,查任意路径完整约束用 schema_data({jsonPath})。"), r.push("查历史快照值(看上一版长啥样 / 冲突诊断 / 用户问\"刚才改了啥\")用 history_data({id?,jsonPath?})(只读不改当前);对比当前与历史快照的差异需切 advanced 用 diff_data(返回结构化 path→from/to)。"), r.push("在大数组里按条件筛选用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素 path/index;定位后用 write patch 改。找名字记不清的元素用 search_data(substring/regex/fuzzy)。批量过滤/映射/聚合/重写大数组用 eval_script(沙箱脚本,mode=query 只读/transform 落地)。")) : (r.push("改主数据前先 get_data({jsonPath}) 读其当前真实值与 hash(返回末尾 hash=xxx),基于真实值改,不要凭记忆。写入(set/edit/delete)时回传 expectedHash=该 hash 启用乐观锁——若主数据在你 get 之后被外部代码/其他 agent/用户手动改过,会触发冲突:集成方若开启人工介入,工具会挂起等用户决定(保留外部/强制覆盖/回退),你应等待工具返回后按结果继续(保留外部→重新 get 再改;强制覆盖→已写入,继续;回退→已回退到历史快照,基于回退值重写);未开启人工介入时返回 VERSION_CONFLICT 不写入,重新 get 拿最新值与 hash 再改。"), r.push("不确定主数据字段结构时用 describe_data 查看说明。"), r.push("修改大对象/数组优先用 edit_data 增量 patch(只发改动部分),避免 set_data 整体重传被 max_tokens 截断导致 JSON 不完整、校验失败。"), r.push("修改主数据出错时可用 restore_data 回退最近一次。"), r.push("在大数组里按条件筛选元素用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素的 path/index;定位后再 edit_data 改。"), r.push("找名字记不清的元素用 search_data(支持 substring/regex/fuzzy 模糊搜索)。"), r.push("需要过滤/映射/聚合/批量重写大数组时用 eval_script(沙箱脚本,入参 data);只读探查用 mode=query,批量重写用 mode=transform(返回值经校验后落地)。"), r.push("读大数组用 read({jsonPath,offset,limit}) 分页(返回 hasMore=true 时 offset+=limit 续读);一次读多个不相关子路径用 read({jsonPaths});复杂改动先 write({...,dryRun:true}) 预检不落盘。"), r.push("对比当前与历史快照(或一段 JSON against)的差异用 diff_data({snapshotId?,against?})(返回结构化 path→from/to,verify 自纠/操作审计/\"刚才改了啥\");只读查历史快照值用 history_data({id?,jsonPath?})。"))), a.subagent && r.push("独立子任务可 spawn_agent 委派(过程隔离,不占主上下文):默认只读,需要子 agent 写数据时传 writablePaths(路径前缀白名单,越界 PATH_OUT_OF_SCOPE)。多个独立子任务可 spawn_agents 并行委派(各子互不通信,结论由你汇总;并行委派不可授写权限,写操作由你收尾执行)。"), a.inspectEnv && r.push("排查页面环境(当前 URL/浏览器/视口/集成方调试变量)用 inspect_env——不传参返回环境摘要(location/navigator/viewport/document),传 key 读特定 window 属性(如 inspect_env({key:\"appConfig\"}) 读 window.appConfig)。改完数据看渲染、定位\"为何没生效\"时用它(只读,不改数据)。"), a.domInspect && r.push("改完数据想确认渲染是否生效(或定位元素/辅助 UI 设计问答)用 get_dom({selector?,depth?}) 读渲染后 DOM(结构化返回 tag/attrs/text/children,depth 控制深度防爆炸,只读)。配合宿主 actions(save_draft/publish 等)形成\"改数据→get_dom 看渲染→触发动作\"闭环。"), a.draftWrite && !o && (r.push("生成超大 JSON(如 50+ 组件页面,单次 write 受 max_tokens 限制装不下)用 draft_write 分块构建 → draft_commit 原子提交:draft_write({draftId, chunk, mode}) mode:\"start\" 新建/\"append\" 追加(拼 JSON 片段到 drafts 池);累积完 draft_commit({draftId}) 合并 + schema 校验 + 写主数据(失败草稿保留可修后重试,成功自动清草稿)。小改仍用 write patch,只在大 JSON 从零生成时用 draft。"), r.push("⚠️ 大 JSON 分块构建是典型多轮工具调用(draft_write×N + draft_commit + read 确认 + 调研 read/query),默认 maxToolRounds=10 可能触顶被 while 截断导致草稿写不完;目标组件数大时集成方应在 createChatSdk 配 maxToolRounds ≥ 20(或按 N+5 估算)。draft_commit 提交同样走乐观锁(改前 read 拿 hash,bind 被改过会触发冲突介入,不静默覆盖)。")), a.todoDeps && r.push("复杂任务可用 todos 层级依赖:write_todos 时给 todo 传 parentId(父任务 id,表达层级)+ deps(依赖的 todo id 数组,必须先完成)。有依赖的任务,deps 全 completed 后再标 in_progress;完成时 update_todo({id, status:\"completed\", evidence:\"完成证据\"}) 记证据。无依赖关系的任务不传 parentId/deps(扁平)。"), a.focus && !o && (r.push("【上下文聚焦】判断任务范围,用 set_focus/add_focus/remove_focus/clear_focus 自动收敛工作范围:"), r.push(" · 局部任务(只改某一组件/区域,如「调导航栏」「改 components.3 样式」)→ 先 read 定位 jsonPath,再 set_focus({path:\"该子树路径\"}) 聚焦;聚焦后每轮只看该子树结构,写其他位置会被 PATH_DENIED 拒绝。"), r.push(" · 多个相关组件(如「同时改导航栏和页脚」)→ set_focus 聚焦首个后用 add_focus({path}) 追加其余;聚焦后可写任一焦点子树,越界仍被拒;移除单个用 remove_focus({path})。"), r.push(" · 全局任务(多处/整体结构,如「重排所有组件」「换主题」)→ 不要聚焦,保持全量视野直接写。"), r.push(" · 完成局部精修、要转向其他区域或做整体改动 → 调 clear_focus 退出聚焦(清空全部焦点),恢复全部读写权限。"), r.push(" · set_focus/add_focus 的 path 必须在 schema 内(类型校验);不确定路径先 read/describe_data 查。")), e?.subagents?.length) {
9460
+ if (a.planning && (r.push("【自适应规划】按任务复杂度决定是否先规划,不要对简单任务过度编排:"), r.push(" · 简单/明确任务(改单字段、调样式、查值)→ 直接 read/write 执行,不必 write_todos。"), r.push(" · 复杂任务(多步、大改、有歧义、不可逆)→ 先 write_todos 拆解,首个任务标 in_progress,逐项推进。"), r.push(" · 执行中发现步骤要改/补/细分 → 用 update_todo({id, content?, status?}) 按 id 增量改单项,不必重传整个清单。"), e?.humanConfirm ? r.push(" · 规划出多步方案若需用户拍板 → 先 request_human_confirmation 给方案选项,确认后再执行。") : r.push(" · 规划出多步方案若需用户拍板 → 以文字列出方案选项等用户回复,勿自行拍板。"), r.push(" · 规划阶段有轮次预算(maxPlanRevisions,默认 5):勿反复调研/改计划而不执行,规划充分后即开始 write 落地。")), t && (o ? (r.push("读写主数据用 read/write(高层入口,自动乐观锁 + 自动快照)。read({jsonPath}) 读子路径当前值(返回含 hash,write 时自动比对,无需手动传);read() 不传读整个主数据 + 说明。write 改值两姿势:① 改单个字段/子路径用 write({patch:{op:\"set\", jsonPath:\"路径.字段\", value:新值}})——patch.value 就是该字段的新值(类型匹配:string 直传字符串、number 传数字、对象传对象),不要包成 {字段:值} 对象(字段名已在 jsonPath);也兼容 write({value:新值, patch:{op,jsonPath}}) 顶层 value(向后兼容,但优先 patch.value,避免与整体 set 的 value 混淆);② 替换整个对象用 write({value:{整个新对象}})。op:set 设值 / remove 删 / merge 合并对象 / append 追加数组 / move 移动数组元素(value=目标路径字符串:数组本身=追加到末尾、数组内下标=插到该位置;同数组即重排如组件调序,目标下标按移除源后解释,一步完成免双 set 交换);批量多改动 write({patches:[{op,jsonPath,value},...]});删子路径 write({patch:{jsonPath:\"路径\"}, del:true})。写入自动经 schema 校验(失败不写,按错误提示改值类型/形状后重试)+ 自动存快照" + (s ? "。" : "(出错可用 restore_data 回退)。")), r.push("修改大对象/数组优先用 write 的 patch 增量(只发改动部分),避免整体重传被 max_tokens 截断致 JSON 不完整。"), r.push("读大数组(read 返回 hasMore=true)用 read({jsonPath,offset,limit}) 分页(offset+=limit 续读,默认 limit=50);一次读多个不相关子路径用 read({jsonPaths:[...]}) 省轮次;复杂 patches 改动先 write({patches,dryRun:true}) 预检(走完整校验不落盘)。"), r.push("read/describe 返回按 schema 投影:仅 schema 声明的字段可见(未声明字段自动隐藏,防误操作);要操作某字段需集成方在 schema 声明。"), s || (r.push("查任意路径完整约束或对比快照差异需切 advanced 工具模式(schema_data/diff_data,当前未装载勿调用);查历史快照值(只读不改当前)用 history_data({id?,jsonPath?})。"), r.push("在大数组里按条件筛选用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素 path/index;定位后用 write patch 改。找名字记不清的元素用 search_data(substring/regex/fuzzy)。批量过滤/映射/聚合/重写大数组用 eval_script(沙箱脚本,mode=query 只读/transform 落地)。"))) : (r.push("改主数据前先 get_data({jsonPath}) 读其当前真实值与 hash(返回末尾 hash=xxx),基于真实值改,不要凭记忆。写入(set/edit/delete)时回传 expectedHash=该 hash 启用乐观锁——若主数据在你 get 之后被外部代码/其他 agent/用户手动改过,会触发冲突:集成方若开启人工介入,工具会挂起等用户决定(保留外部/强制覆盖/回退),你应等待工具返回后按结果继续(保留外部→重新 get 再改;强制覆盖→已写入,继续;回退→已回退到历史快照,基于回退值重写);未开启人工介入时返回 VERSION_CONFLICT 不写入,重新 get 拿最新值与 hash 再改。"), r.push("不确定主数据字段结构时用 describe_data 查看说明。"), r.push("修改大对象/数组优先用 edit_data 增量 patch(只发改动部分),避免 set_data 整体重传被 max_tokens 截断导致 JSON 不完整、校验失败。"), r.push("修改主数据出错时可用 restore_data 回退最近一次。"), r.push("在大数组里按条件筛选元素用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素的 path/index;定位后再 edit_data 改。"), r.push("找名字记不清的元素用 search_data(支持 substring/regex/fuzzy 模糊搜索)。"), r.push("需要过滤/映射/聚合/批量重写大数组时用 eval_script(沙箱脚本,入参 data);只读探查用 mode=query,批量重写用 mode=transform(返回值经校验后落地)。"), r.push("读大数组用 read({jsonPath,offset,limit}) 分页(返回 hasMore=true 时 offset+=limit 续读);一次读多个不相关子路径用 read({jsonPaths});复杂改动先 write({...,dryRun:true}) 预检不落盘。"), r.push("对比当前与历史快照(或一段 JSON against)的差异用 diff_data({snapshotId?,against?})(返回结构化 path→from/to,verify 自纠/操作审计/\"刚才改了啥\");只读查历史快照值用 history_data({id?,jsonPath?})。"))), a.subagent && r.push("独立子任务可 spawn_agent 委派(过程隔离,不占主上下文):默认只读,需要子 agent 写数据时传 writablePaths(路径前缀白名单,越界 PATH_OUT_OF_SCOPE)。多个独立子任务可 spawn_agents 并行委派(各子互不通信,结论由你汇总;并行委派不可授写权限,写操作由你收尾执行)。"), a.inspectEnv && r.push("排查页面环境(当前 URL/浏览器/视口/集成方调试变量)用 inspect_env——不传参返回环境摘要(location/navigator/viewport/document),传 key 读特定 window 属性(如 inspect_env({key:\"appConfig\"}) 读 window.appConfig)。改完数据看渲染、定位\"为何没生效\"时用它(只读,不改数据)。"), a.domInspect && r.push("改完数据想确认渲染是否生效(或定位元素/辅助 UI 设计问答)用 get_dom({selector?,depth?}) 读渲染后 DOM(结构化返回 tag/attrs/text/children,depth 控制深度防爆炸,只读)。配合宿主 actions(save_draft/publish 等)形成\"改数据→get_dom 看渲染→触发动作\"闭环。"), a.draftWrite && !o && (r.push("生成超大 JSON(如 50+ 组件页面,单次 write 受 max_tokens 限制装不下)用 draft_write 分块构建 → draft_commit 原子提交:draft_write({draftId, chunk, mode}) mode:\"start\" 新建/\"append\" 追加(拼 JSON 片段到 drafts 池);累积完 draft_commit({draftId}) 合并 + schema 校验 + 写主数据(失败草稿保留可修后重试,成功自动清草稿)。小改仍用 write patch,只在大 JSON 从零生成时用 draft。"), r.push("⚠️ 大 JSON 分块构建是典型多轮工具调用(draft_write×N + draft_commit + read 确认 + 调研 read/query),默认 maxToolRounds=10 可能触顶被 while 截断导致草稿写不完;目标组件数大时集成方应在 createChatSdk 配 maxToolRounds ≥ 20(或按 N+5 估算)。draft_commit 提交同样走乐观锁(改前 read 拿 hash,bind 被改过会触发冲突介入,不静默覆盖)。")), a.todoDeps && r.push("复杂任务可用 todos 层级依赖:write_todos 时给 todo 传 parentId(父任务 id,表达层级)+ deps(依赖的 todo id 数组,必须先完成)。有依赖的任务,deps 全 completed 后再标 in_progress;完成时 update_todo({id, status:\"completed\", evidence:\"完成证据\"}) 记证据。无依赖关系的任务不传 parentId/deps(扁平)。"), a.focus && !o && (r.push("【上下文聚焦】判断任务范围,用 set_focus/add_focus/remove_focus/clear_focus 自动收敛工作范围:"), r.push(" · 局部任务(只改某一组件/区域,如「调导航栏」「改 components.3 样式」)→ 先 read 定位 jsonPath,再 set_focus({path:\"该子树路径\"}) 聚焦;聚焦后每轮只看该子树结构,写其他位置会被 PATH_DENIED 拒绝。"), r.push(" · 多个相关组件(如「同时改导航栏和页脚」)→ set_focus 聚焦首个后用 add_focus({path}) 追加其余;聚焦后可写任一焦点子树,越界仍被拒;移除单个用 remove_focus({path})。"), r.push(" · 全局任务(多处/整体结构,如「重排所有组件」「换主题」)→ 不要聚焦,保持全量视野直接写。"), r.push(" · 完成局部精修、要转向其他区域或做整体改动 → 调 clear_focus 退出聚焦(清空全部焦点),恢复全部读写权限。"), r.push(" · set_focus/add_focus 的 path 必须在 schema 内(类型校验);不确定路径先 read/describe_data 查。")), e?.subagents?.length) {
9417
9461
  let t = e.subagents.filter((e) => (e.temperature ?? 0) >= qu || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), n = e.subagents.filter((e) => (e.temperature ?? 0) < qu && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
9418
- r.push("【规划-反思-执行·路由】按任务性质选模式,不要对简单任务过度编排:"), t.length && (r.push(` · 创作/设计/开放性需求(如"设计主题风格""换个感觉")→ 先调 ${t.map((e) => "use_" + e.id).join("/")} 出 2-3 套方案(高温创意),`), r.push(" 不要自己拍板;拿到方案后,若需用户拍板用 request_human_confirmation 弹选项。")), n.length && r.push(` · 严谨/易错/校验类 → 可先调 ${n.map((e) => "use_" + e.id).join("/")} 反思挑刺(低温审查),据反馈修订。`), r.push(o ? " · 方案定稿后,由你(主 agent)用 write 落地成 JSON(低温度执行 + schema 校验 + 写前确认)。" : " · 方案定稿后,由你(主 agent)用 edit_data 落地成 JSON(低温度执行 + schema 校验 + 写前确认)。"), r.push(" · 简单/明确任务(如\"标题改红色\")直接执行,不必走规划-反思。");
9462
+ r.push("【规划-反思-执行·路由】按任务性质选模式,不要对简单任务过度编排:"), t.length && (r.push(` · 创作/设计/开放性需求(如"设计主题风格""换个感觉")→ 先调 ${t.map((e) => "use_" + e.id).join("/")} 出 2-3 套方案(高温创意),`), r.push(e?.humanConfirm ? " 不要自己拍板;拿到方案后,若需用户拍板用 request_human_confirmation 弹选项。" : " 不要自己拍板;拿到方案后以文字列出选项等用户回复(humanConfirm 未开,勿调不存在工具)。")), n.length && r.push(` · 严谨/易错/校验类 → 可先调 ${n.map((e) => "use_" + e.id).join("/")} 反思挑刺(低温审查),据反馈修订。`), r.push(o ? " · 方案定稿后,由你(主 agent)用 write 落地成 JSON(低温度执行 + schema 校验 + 写前确认)。" : " · 方案定稿后,由你(主 agent)用 edit_data 落地成 JSON(低温度执行 + schema 校验 + 写前确认)。"), r.push(" · 简单/明确任务(如\"标题改红色\")直接执行,不必走规划-反思。");
9419
9463
  }
9420
9464
  e?.humanConfirm && (r.push("【人工确认·必读】以下情形必须先调 request_human_confirmation 征询用户、拿到答复后再继续,不要自行拍板:"), r.push(" 1) 用户让你「给方案/列选项/我来选/挑一个」时:把每个方案作为一个 option,调 request_human_confirmation(question=简述, options=[方案A,方案B,...], recommendation=你推荐的)。不要只回文字罗列方案让用户自己回复——要用工具把选项做成可点选按钮。"), r.push(" 2) 需求有歧义/不确定时:调工具问清楚(options 不传则用户答同意或拒绝)。"), r.push(" 3) 即将执行高风险不可逆操作(删除/覆盖/批量改动)前:调工具确认。"), r.push(" 4) 规划出多步方案需用户确认时:把整个方案(或关键分步)作为 option 调 request_human_confirmation,确认后再执行。"), r.push("用户在选项里选了哪个,就按那个方案继续;选「拒绝」则停止并询问如何调整。"));
9421
- let s = n?.loopProgress;
9422
- if (s) {
9423
- let e = s.invokeUsage.prompt_tokens || s.invokeUsage.total_tokens, t = i?.promptSoftCap ?? Infinity, n = s.maxToolRounds > 0 && s.rounds >= Math.ceil(s.maxToolRounds * .7), a = t !== Infinity && e >= t * .5;
9424
- !s.budgetHinted && (n || a) && (s.rounds > 0 || e > 0) && (s.budgetHinted = !0, r.push(`⏳ 预算提示:本任务已用 ${s.rounds}/${s.maxToolRounds} 工具轮、累计约 ${Math.max(1, Math.round(e / 1e3))}K prompt tokens。若已接近目标请收敛并给出总结;尚未接近请向用户汇报进度与剩余计划,勿默默继续。`));
9425
- let o = Object.entries(s.writeFailures).filter(([, e]) => e >= 2);
9465
+ let c = n?.loopProgress;
9466
+ if (c) {
9467
+ let e = c.invokeUsage.prompt_tokens || c.invokeUsage.total_tokens, t = i?.promptSoftCap ?? Infinity, n = c.maxToolRounds > 0 && c.rounds >= Math.ceil(c.maxToolRounds * .7), a = t !== Infinity && e >= t * .5;
9468
+ !c.budgetHinted && (n || a) && (c.rounds > 0 || e > 0) && (c.budgetHinted = !0, r.push(`⏳ 预算提示:本任务已用 ${c.rounds}/${c.maxToolRounds} 工具轮、累计约 ${Math.max(1, Math.round(e / 1e3))}K prompt tokens。若已接近目标请收敛并给出总结;尚未接近请向用户汇报进度与剩余计划,勿默默继续。`));
9469
+ let o = Object.entries(c.writeFailures).filter(([, e]) => e >= 2);
9426
9470
  if (o.length) {
9427
9471
  let e = o.map(([e, t]) => `${e || "(整体)"}×${t}`).join("、");
9428
9472
  r.push(`⚠️ 以下路径已连续写失败:${e}。连续失败常意味着方向错了——先 read 重新核对实际值/类型,或 restore_data 回退后再改;若确需继续,换思路而非原样重试。`);
@@ -9435,14 +9479,15 @@ function Ju(e, t, n = "simple", r, i) {
9435
9479
  //#endregion
9436
9480
  //#region src/core/harness/resourcesPin.ts
9437
9481
  function Yu(e) {
9482
+ let t = e.toolsExposed === !1 ? "读到 ⟦frozen:path⟧/⟦res:handle⟧ 占位符 = 精确值在冻结区/资源池(不入消息流);resource_get/resource_update 为 advanced 工具,当前模式未装载,勿尝试调用;freeze 字段不可写(撞 FROZEN_FIELD 即放弃);verbatim 字段保持原值,勿在当前模式下尝试改写(直接写新值会 VERBATIM_MISMATCH);撞 RESOURCE_EVICTED/RESOURCE_NOT_FOUND 重新 read 懒注册。" : "读到 ⟦frozen:path⟧/⟦res:handle⟧ 占位符 = 精确值在冻结区/资源池(不入消息流);需真值用 resource_get({path});freeze 字段不可写(撞 FROZEN_FIELD 即放弃);verbatim 直接写新值会 VERBATIM_MISMATCH,先 resource_update 再写回句柄;撞 RESOURCE_EVICTED/RESOURCE_NOT_FOUND 重新 read 懒注册。";
9438
9483
  return {
9439
9484
  name: "resourcesPin",
9440
9485
  augmentPrompt: () => {
9441
- let t = e.getResourcesSnapshot();
9442
- if (!t.length) return;
9443
- let n = ["## 受保护资源(跨压缩保留 · 精确值保护)"];
9444
- for (let e of t) e.mode === "freeze" ? n.push(`- ${e.path} (freeze 已冻结,不可改)`) : n.push(`- ${e.path} (verbatim 原样保留)${e.handle ? ` ⟦res:${e.handle}⟧` : ""}`);
9445
- return n.push("读到 ⟦frozen:path⟧/⟦res:handle⟧ 占位符 = 精确值在冻结区/资源池(不入消息流);需真值用 resource_get({path});freeze 字段不可写(撞 FROZEN_FIELD 即放弃);verbatim 直接写新值会 VERBATIM_MISMATCH,先 resource_update 再写回句柄;撞 RESOURCE_EVICTED/RESOURCE_NOT_FOUND 重新 read 懒注册。"), n.join("\n");
9486
+ let n = e.getResourcesSnapshot();
9487
+ if (!n.length) return;
9488
+ let r = ["## 受保护资源(跨压缩保留 · 精确值保护)"];
9489
+ for (let e of n) e.mode === "freeze" ? r.push(`- ${e.path} (freeze 已冻结,不可改)`) : r.push(`- ${e.path} (verbatim 原样保留)${e.handle ? ` ⟦res:${e.handle}⟧` : ""}`);
9490
+ return r.push(t), r.join("\n");
9446
9491
  }
9447
9492
  };
9448
9493
  }
@@ -9603,6 +9648,7 @@ function ud(e, n) {
9603
9648
  }), S = wa([], { maxPlanRevisions: e.maxPlanRevisions }), C = Oa(), w = Xa({
9604
9649
  getSchema: () => L()?.schema,
9605
9650
  getBind: () => L()?.bind,
9651
+ unfocusGuidance: e.toolMode === "advanced" ? "tool" : "ask-user",
9606
9652
  onChange: (e) => W({
9607
9653
  type: "focus_change",
9608
9654
  focuses: e
@@ -9618,7 +9664,7 @@ function ud(e, n) {
9618
9664
  for (let e of A) {
9619
9665
  if (e._codeAsset.writablePaths.length) continue;
9620
9666
  let t = Qi(O?.schema, e._codeAsset.codeField);
9621
- t.length ? (e._codeAsset.writablePaths = t, Array.isArray(e.writablePaths) && (e.writablePaths = t), console.info(`[page-agent-sdk][createHtmlSubagent] 未传 writablePaths,已从 schema 推断: [${t.map((e) => `'${e}'`).join(", ")}]`)) : (console.warn("[page-agent-sdk][createHtmlSubagent] 未能从 schema 推断 writablePaths(开放 schema(z.any()/z.record())/嵌套容器(如 sections[].children[])/点路径 codeField(如 props.html_code)不支持自动推断),已跳过该 html 子 agent(整体不受影响);如确需代码资产机制(vfs + 格式校验 + 增量 commit),请显式传 writablePaths(代码组件 data 区,如 ['components'])"), j.add(e));
9667
+ t.length ? (e._codeAsset.writablePaths = t, Array.isArray(e.writablePaths) && (e.writablePaths = t), e._rebuildCodeAssetPaths?.(t[0]), console.info(`[page-agent-sdk][createHtmlSubagent] 未传 writablePaths,已从 schema 推断: [${t.map((e) => `'${e}'`).join(", ")}]`)) : (console.warn("[page-agent-sdk][createHtmlSubagent] 未能从 schema 推断 writablePaths(开放 schema(z.any()/z.record())/嵌套容器(如 sections[].children[])/点路径 codeField(如 props.html_code)不支持自动推断),已跳过该 html 子 agent(整体不受影响);如确需代码资产机制(vfs + 格式校验 + 增量 commit),请显式传 writablePaths(代码组件 data 区,如 ['components'])"), j.add(e));
9622
9668
  }
9623
9669
  let te = j.size ? A.filter((e) => !j.has(e)) : A, M = j.size ? (ee ?? []).filter((e) => !j.has(e)) : ee, ne = te.length > 0, N = te.flatMap((e) => e._codeAsset.writablePaths), re = te.flatMap((e) => e._codeAsset.writablePaths.map((t) => `${t}.${e._codeAsset.codeField}`)), ie = e.checkpoint, ae = ie !== void 0 && ie !== !1, P = ae ? Ro({
9624
9670
  getData: () => L()?.bind,
@@ -9643,7 +9689,10 @@ function ud(e, n) {
9643
9689
  vfsStore: ce || O?.resources?.length ? x : void 0,
9644
9690
  ...N.length ? { pgIdPaths: N } : {},
9645
9691
  ...re.length ? { largeTextPaths: re } : {}
9646
- }) : [], pe = se ? pu(fe, e.toolMode) : [], I = se && O ? fe.controller ?? null : null, me = se && O?.resources?.length && I?.getResourcesSnapshot ? Yu({ getResourcesSnapshot: () => I?.getResourcesSnapshot?.() ?? [] }) : void 0, L = () => I?.get() ?? O, R = /* @__PURE__ */ new Map(), he = Gu(F, pe, wu, Au, Lu);
9692
+ }) : [], pe = se ? pu(fe, e.toolMode) : [], I = se && O ? fe.controller ?? null : null, me = se && O?.resources?.length && I?.getResourcesSnapshot ? Yu({
9693
+ getResourcesSnapshot: () => I?.getResourcesSnapshot?.() ?? [],
9694
+ toolsExposed: e.toolMode === "advanced"
9695
+ }) : void 0, L = () => I?.get() ?? O, R = /* @__PURE__ */ new Map(), he = Gu(F, pe, wu, Au, Lu);
9647
9696
  he.forEach((e) => R.set(e.name, "builtin"));
9648
9697
  let z = [...e.tools || []];
9649
9698
  z.forEach((e) => R.set(e.name, "user"));
@@ -9760,31 +9809,31 @@ function ud(e, n) {
9760
9809
  if (Oe) for (let e of S.tools ?? []) R.set(e.name, "builtin");
9761
9810
  let Ne = F.summarization, Pe = F.agentCompression && !!d;
9762
9811
  e.debug && F.agentCompression && !d && console.warn("[page-agent-sdk][agentCompression] agentCompression 开启但 summaryLlm 不可用(或缺 apiKey / 模型不支持工具),压缩决策不启用,回退静态压缩");
9763
- let Fe = F.memory, Ie = F.subagent, Le = Ie ? cs() : void 0, Re = e.verify?.maxAttempts ?? 2, ze = F.verify && e.verify?.enabled !== !1 && Re > 0, Be = F.contextInspector;
9764
- e.verify?.check && !F.verify && console.warn("[page-agent-sdk][verify] 检测到 verify.check 但 capabilities.verify 未开启,verify 未装载");
9765
- let U = e.subagent, Ve = U?.allowedTools ?? [], He = e.permissions?.length ? Eo(e.permissions) : void 0, Ue = e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? Do(e.approval) : void 0, We = [...He ? [He] : [], ...Ue ? [Ue] : []], Ge = !Ie || U?.enabled === !1 ? void 0 : ws({
9766
- llm: U?.llm ?? e.llm,
9812
+ let Fe = F.memory, Ie = F.subagent, Le = Ie ? cs() : void 0, Re = e.verify?.maxAttempts ?? 2, ze = !!(e.verify?.check || e.verify?.maxAttempts || e.verify?.adversarial), U = e.capabilities?.verify === !1, Be = (F.verify || ze && !U) && e.verify?.enabled !== !1 && Re > 0, Ve = F.contextInspector;
9813
+ ze && !Be && e.verify?.enabled !== !1 && console.warn("[page-agent-sdk][verify] 检测到 verify 配置(check/maxAttempts/adversarial)但未装载(capabilities.verify:false 显式关闭 或 maxAttempts≤0)");
9814
+ let He = e.subagent, Ue = He?.allowedTools ?? [], We = e.permissions?.length ? Eo(e.permissions) : void 0, Ge = e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? Do(e.approval) : void 0, Ke = [...We ? [We] : [], ...Ge ? [Ge] : []], qe = !Ie || He?.enabled === !1 ? void 0 : ws({
9815
+ llm: He?.llm ?? e.llm,
9767
9816
  allTools: () => G.agent?.allTools ?? V,
9768
- allowedTools: Ve.length ? Ve : void 0,
9769
- systemPrompt: U?.systemPrompt,
9770
- temperature: U?.temperature,
9771
- maxTokens: U?.maxTokens,
9772
- skills: U?.skills,
9773
- maxDepth: U?.maxDepth,
9774
- maxParallel: U?.maxParallel,
9817
+ allowedTools: Ue.length ? Ue : void 0,
9818
+ systemPrompt: He?.systemPrompt,
9819
+ temperature: He?.temperature,
9820
+ maxTokens: He?.maxTokens,
9821
+ skills: He?.skills,
9822
+ maxDepth: He?.maxDepth,
9823
+ maxParallel: He?.maxParallel,
9775
9824
  debug: e.debug,
9776
9825
  getFocuses: () => w.getFocuses(),
9777
9826
  getSchema: () => L()?.schema ?? null,
9778
9827
  tracker: Le,
9779
- guardMiddleware: We.length ? We : void 0,
9828
+ guardMiddleware: Ke.length ? Ke : void 0,
9780
9829
  getVfsFiles: Me ? () => x.files : void 0,
9781
9830
  enterDataScope: I?.enterScope ? (e) => I.enterScope(e) : void 0,
9782
9831
  exitDataScope: I?.exitScope ? (e) => I.exitScope(e) : void 0,
9783
9832
  onUsage: (e) => {
9784
9833
  i.prompt_tokens = (i.prompt_tokens ?? 0) + (e.prompt_tokens ?? 0), i.completion_tokens = (i.completion_tokens ?? 0) + (e.completion_tokens ?? 0), i.total_tokens = (i.total_tokens ?? 0) + (e.total_tokens ?? 0);
9785
9834
  },
9786
- timeoutMs: U?.timeoutMs
9787
- }), Ke = M?.map((e) => {
9835
+ timeoutMs: He?.timeoutMs
9836
+ }), Je = M?.map((e) => {
9788
9837
  if (!e._codeAsset) return e;
9789
9838
  let t = e._codeAsset, n = Oc({
9790
9839
  writablePaths: t.writablePaths,
@@ -9801,7 +9850,7 @@ function ud(e, n) {
9801
9850
  ...e,
9802
9851
  middleware: r
9803
9852
  };
9804
- }), qe = Ie && Ke !== void 0 ? Ds(Ke, {
9853
+ }), Ye = Ie && Je !== void 0 ? Ds(Je, {
9805
9854
  llm: e.llm,
9806
9855
  allTools: () => G.agent?.allTools ?? V,
9807
9856
  debug: e.debug,
@@ -9809,7 +9858,7 @@ function ud(e, n) {
9809
9858
  getSchema: () => L()?.schema ?? null,
9810
9859
  getBind: () => L()?.bind,
9811
9860
  tracker: Le,
9812
- guardMiddleware: We.length ? We : void 0,
9861
+ guardMiddleware: Ke.length ? Ke : void 0,
9813
9862
  getVfsFiles: Me ? () => x.files : void 0,
9814
9863
  enterDataScope: I?.enterScope ? (e) => I.enterScope(e) : void 0,
9815
9864
  exitDataScope: I?.exitScope ? (e) => I.exitScope(e) : void 0,
@@ -9817,24 +9866,24 @@ function ud(e, n) {
9817
9866
  i.prompt_tokens = (i.prompt_tokens ?? 0) + (e.prompt_tokens ?? 0), i.completion_tokens = (i.completion_tokens ?? 0) + (e.completion_tokens ?? 0), i.total_tokens = (i.total_tokens ?? 0) + (e.total_tokens ?? 0);
9818
9867
  },
9819
9868
  timeoutMs: e.subagent?.timeoutMs
9820
- }) : void 0, Je = qe ? qe.controller : null, Ye = [
9869
+ }) : void 0, Xe = Ye ? Ye.controller : null, Ze = [
9821
9870
  "get_data",
9822
9871
  "describe_data",
9823
9872
  "read",
9824
9873
  "fetch_document"
9825
- ], Xe = V.filter((e) => Ye.includes(e.name)), Ze = ze ? Os({
9874
+ ], Qe = V.filter((e) => Ze.includes(e.name)), $e = Be ? Os({
9826
9875
  check: e.verify.check ?? Ps({
9827
9876
  schemas: () => L() ? { "": L().schema } : {},
9828
9877
  root: () => L()?.bind
9829
9878
  }),
9830
9879
  adversarial: e.verify?.adversarial ? {
9831
9880
  llm: e.llm,
9832
- tools: Xe
9881
+ tools: Qe
9833
9882
  } : void 0
9834
- }) : void 0, Qe = Be ? Js({
9883
+ }) : void 0, et = Ve ? Js({
9835
9884
  contextWindow: f.contextWindow,
9836
9885
  thresholdRatio: Al(e, f.contextWindow).summaryThresholdRatio
9837
- }) : void 0, $e = Ju({
9886
+ }) : void 0, tt = Ju({
9838
9887
  ...F,
9839
9888
  humanConfirm: ve,
9840
9889
  subagents: M?.map((e) => ({
@@ -9842,10 +9891,10 @@ function ud(e, n) {
9842
9891
  description: e.description,
9843
9892
  temperature: e.temperature
9844
9893
  }))
9845
- }, se && !!O, e.toolMode, !!O?.resources?.length, { promptSoftCap: rs(f.contextWindow, h.promptSoftCapTokens) }), et = O ? {
9894
+ }, se && !!O, e.toolMode, !!O?.resources?.length, { promptSoftCap: rs(f.contextWindow, h.promptSoftCapTokens) }), nt = O ? {
9846
9895
  name: "dataHint",
9847
9896
  augmentPrompt: () => tc(L(), e.schemaHint) || void 0
9848
- } : null, tt = e.augmentSystem ? {
9897
+ } : null, rt = e.augmentSystem ? {
9849
9898
  name: "augmentSystem",
9850
9899
  augmentPrompt: (t) => {
9851
9900
  try {
@@ -9858,52 +9907,52 @@ function ud(e, n) {
9858
9907
  return;
9859
9908
  }
9860
9909
  }
9861
- } : null, nt = Dl(e.onEvent), W = nt.emit, rt, it = [], at = (e) => ({
9910
+ } : null, it = Dl(e.onEvent), W = it.emit, at, ot = [], st = (e) => ({
9862
9911
  name: e.name,
9863
9912
  description: e.description,
9864
9913
  content: typeof e.getContent == "function" ? e.getContent() : ""
9865
- }), ot = (e) => ({
9914
+ }), ct = (e) => ({
9866
9915
  name: e.name,
9867
9916
  description: e.description,
9868
9917
  getContent: () => e.content
9869
- }), st = e.skillStorage === !1 ? null : ed({
9918
+ }), lt = e.skillStorage === !1 ? null : ed({
9870
9919
  ...typeof e.skillStorage == "object" ? e.skillStorage : {},
9871
9920
  id: e.skillStorage && typeof e.skillStorage == "object" && e.skillStorage.id ? e.skillStorage.id : `agent::${n}`
9872
- }), ct = () => {
9873
- let t = rt ? rt.controller : null;
9921
+ }), ut = () => {
9922
+ let t = at ? at.controller : null;
9874
9923
  if (t) {
9875
- let n = (e.skills || []).filter((e) => !it.some((t) => t.name === e.name));
9876
- t.set([...n, ...it]);
9924
+ let n = (e.skills || []).filter((e) => !ot.some((t) => t.name === e.name));
9925
+ t.set([...n, ...ot]);
9877
9926
  }
9878
9927
  G.infoTick.value++;
9879
- }, lt = async () => {
9880
- if (st) try {
9881
- let t = await st.list();
9928
+ }, dt = async () => {
9929
+ if (lt) try {
9930
+ let t = await lt.list();
9882
9931
  if (t.length) {
9883
- it = t.map(ot);
9884
- let n = rt ? rt.controller : null;
9932
+ ot = t.map(ct);
9933
+ let n = at ? at.controller : null;
9885
9934
  if (n) {
9886
- let t = (e.skills || []).filter((e) => !it.some((t) => t.name === e.name));
9887
- n.set([...t, ...it]);
9935
+ let t = (e.skills || []).filter((e) => !ot.some((t) => t.name === e.name));
9936
+ n.set([...t, ...ot]);
9888
9937
  }
9889
9938
  G.infoTick.value++;
9890
9939
  }
9891
9940
  } catch {}
9892
- }, ut = Ne ? ss({
9941
+ }, ft = Ne ? ss({
9893
9942
  ...h,
9894
9943
  llmInvoke: l,
9895
9944
  getRegisteredData: () => L() ? [{ description: L().description ?? "主数据对象" }] : [],
9896
9945
  preserveLastToolResults: _,
9897
9946
  ...Pe ? {
9898
9947
  decideInvoke: d,
9899
- getSnapshot: () => Qe?.getSnapshot()
9948
+ getSnapshot: () => et?.getSnapshot()
9900
9949
  } : {}
9901
- }) : void 0, dt = Ml([
9902
- ...et ? [et] : [],
9903
- $e,
9950
+ }) : void 0, pt = Ml([
9951
+ ...nt ? [nt] : [],
9952
+ tt,
9904
9953
  ...ke ? [C] : [],
9905
9954
  ...Oe ? [S] : [],
9906
- ...je ? [rt = yo(e.skills || [], {
9955
+ ...je ? [at = yo(e.skills || [], {
9907
9956
  readVfs: Me ? (e) => x.files[e]?.content : void 0,
9908
9957
  hostScriptEnabled: F.skillHostScript,
9909
9958
  onToolsReady: (e, t) => {
@@ -9915,29 +9964,29 @@ function ud(e, n) {
9915
9964
  }
9916
9965
  })] : [],
9917
9966
  ...Me ? [hc(x)] : [],
9918
- ...ut ? [ut] : [],
9967
+ ...ft ? [ft] : [],
9919
9968
  ...Ae ? [T] : [],
9920
9969
  ...B ? [w] : [],
9921
9970
  ...me ? [me] : [],
9922
9971
  ...Fe ? [E] : [],
9923
- ...He ? [He] : [],
9972
+ ...We ? [We] : [],
9924
9973
  ...ae && oe && P ? [zo(P)] : [],
9925
9974
  ...ve ? [jo()] : [],
9926
- ...Ue ? [Ue] : [],
9927
- ...Ze ? [Ze] : [],
9928
9975
  ...Ge ? [Ge] : [],
9976
+ ...$e ? [$e] : [],
9929
9977
  ...qe ? [qe] : [],
9930
- ...tt ? [tt] : [],
9931
- ...Qe ? [Qe] : [],
9978
+ ...Ye ? [Ye] : [],
9979
+ ...rt ? [rt] : [],
9980
+ ...et ? [et] : [],
9932
9981
  ...e.middleware || [],
9933
9982
  ...ue ? [Ru(i, {
9934
9983
  tokenBudget: e.tokenBudget,
9935
9984
  timeBudgetMs: e.timeBudgetMs
9936
9985
  }, W)] : [],
9937
9986
  cd(W, b, L, i)
9938
- ]), ft = e.maxMemoryRounds ?? ad, pt = e.approval?.timeoutMs, mt = pt === void 0 || pt === 0 ? 3e4 : !Number.isFinite(pt) || pt < 0 ? 0 : pt;
9939
- function ht(e) {
9940
- if (mt) return (t) => {
9987
+ ]), mt = e.maxMemoryRounds ?? ad, ht = e.approval?.timeoutMs, gt = ht === void 0 || ht === 0 ? 3e4 : !Number.isFinite(ht) || ht < 0 ? 0 : ht;
9988
+ function _t(e) {
9989
+ if (gt) return (t) => {
9941
9990
  if (t.type !== "approval_request") return;
9942
9991
  let n = Date.now(), r = t.toolName;
9943
9992
  setTimeout(() => {
@@ -9951,37 +10000,37 @@ function ud(e, n) {
9951
10000
  waitedMs: Date.now() - n
9952
10001
  }
9953
10002
  }));
9954
- }, mt);
10003
+ }, gt);
9955
10004
  };
9956
10005
  }
9957
- function gt(e) {
9958
- let t = ht(e);
10006
+ function vt(e) {
10007
+ let t = _t(e);
9959
10008
  return (e) => {
9960
10009
  t?.(e), e.type === "error" && W(e);
9961
10010
  };
9962
10011
  }
9963
- let _t = /* @__PURE__ */ At([]);
9964
- async function vt() {
9965
- s && (_t.value = (await s.listSessions(n)).sort((e, t) => t.lastAccessed - e.lastAccessed));
10012
+ let yt = /* @__PURE__ */ At([]);
10013
+ async function xt() {
10014
+ s && (yt.value = (await s.listSessions(n)).sort((e, t) => t.lastAccessed - e.lastAccessed));
9966
10015
  }
9967
- let yt = id(), xt = /* @__PURE__ */ new Set();
9968
- function St(e) {
10016
+ let St = id(), Ct = /* @__PURE__ */ new Set();
10017
+ function wt(e) {
9969
10018
  let t = new AbortController();
9970
- return e && (e.aborted ? t.abort() : e.addEventListener("abort", () => t.abort(), { once: !0 })), xt.add(t), {
10019
+ return e && (e.aborted ? t.abort() : e.addEventListener("abort", () => t.abort(), { once: !0 })), Ct.add(t), {
9971
10020
  controller: t,
9972
- untrack: () => xt.delete(t)
10021
+ untrack: () => Ct.delete(t)
9973
10022
  };
9974
10023
  }
9975
- function Ct() {
9976
- for (let e of xt) e.abort();
9977
- xt.clear();
10024
+ function Tt() {
10025
+ for (let e of Ct) e.abort();
10026
+ Ct.clear();
9978
10027
  }
9979
10028
  let G = {
9980
10029
  agentId: n,
9981
10030
  store: s,
9982
10031
  messages: b,
9983
10032
  vfsStore: x,
9984
- listeners: nt.listeners,
10033
+ listeners: it.listeners,
9985
10034
  todosMw: S,
9986
10035
  memoryMw: E,
9987
10036
  missionMw: C,
@@ -9995,17 +10044,17 @@ function ud(e, n) {
9995
10044
  mcpServers: [],
9996
10045
  checkpoint: P,
9997
10046
  dataOpsController: I,
9998
- skillsController: rt ? rt.controller : null,
10047
+ skillsController: at ? at.controller : null,
9999
10048
  infoTick: o,
10000
10049
  pendingConflict: a.pendingConflict,
10001
- sessions: _t,
10002
- refreshSessions: vt,
10050
+ sessions: yt,
10051
+ refreshSessions: xt,
10003
10052
  liveData: L,
10004
10053
  usage: i,
10005
10054
  emit: W,
10006
- runSerial: yt,
10007
- trackActive: St,
10008
- abortAllActive: Ct,
10055
+ runSerial: St,
10056
+ trackActive: wt,
10057
+ abortAllActive: Tt,
10009
10058
  unloadSkillTools(e) {
10010
10059
  if (e) {
10011
10060
  let t = Ee.length;
@@ -10028,21 +10077,21 @@ function ud(e, n) {
10028
10077
  }
10029
10078
  }
10030
10079
  }
10031
- K();
10080
+ Ot();
10032
10081
  },
10033
10082
  addSkill(e) {
10034
- let t = it.findIndex((t) => t.name === e.name);
10035
- t >= 0 ? it[t] = e : it.push(e), ct(), st && st.put(at(e));
10083
+ let t = ot.findIndex((t) => t.name === e.name);
10084
+ t >= 0 ? ot[t] = e : ot.push(e), ut(), lt && lt.put(st(e));
10036
10085
  },
10037
10086
  removeSkill(e) {
10038
- let t = it.findIndex((t) => t.name === e);
10039
- return t < 0 ? !1 : (it.splice(t, 1), ct(), st && st.remove(e), !0);
10087
+ let t = ot.findIndex((t) => t.name === e);
10088
+ return t < 0 ? !1 : (ot.splice(t, 1), ut(), lt && lt.remove(e), !0);
10040
10089
  },
10041
10090
  listUserSkills() {
10042
- return it.map((e) => e.name);
10091
+ return ot.map((e) => e.name);
10043
10092
  },
10044
10093
  getUserSkill(e) {
10045
- let t = it.find((t) => t.name === e);
10094
+ let t = ot.find((t) => t.name === e);
10046
10095
  if (t) return {
10047
10096
  name: t.name,
10048
10097
  description: t.description,
@@ -10050,7 +10099,7 @@ function ud(e, n) {
10050
10099
  };
10051
10100
  },
10052
10101
  afterRound() {
10053
- Dt(), q();
10102
+ kt(), Mt();
10054
10103
  },
10055
10104
  async send(e, t) {
10056
10105
  await G.initDone, t ??= {}, t?.mission && ke && C.setMission(t.mission);
@@ -10059,7 +10108,7 @@ function ud(e, n) {
10059
10108
  let r = t.interceptors.input(e);
10060
10109
  typeof r == "string" && (n = r);
10061
10110
  } catch {}
10062
- let r = ue ? t.maxAutoRetries ?? 1 : 0, i = 0, a = !1, o = gt(t.signal);
10111
+ let r = ue ? t.maxAutoRetries ?? 1 : 0, i = 0, a = !1, o = vt(t.signal);
10063
10112
  for (;;) {
10064
10113
  a ||= (b.push({
10065
10114
  role: "user",
@@ -10105,7 +10154,7 @@ function ud(e, n) {
10105
10154
  },
10106
10155
  async batch(e, t, n) {
10107
10156
  if (await G.initDone, !e.length) return [];
10108
- let r = [], i = gt(n);
10157
+ let r = [], i = vt(n);
10109
10158
  for (let a = 0; a < e.length; a++) {
10110
10159
  if (n?.aborted) {
10111
10160
  for (let t = a; t < e.length; t++) r.push({
@@ -10204,14 +10253,14 @@ function ud(e, n) {
10204
10253
  type: "session_restored",
10205
10254
  sessionId: r,
10206
10255
  rounds: i.messages?.length ?? 0
10207
- })), e.memory && s.save(n, G.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), vt(), Ot = void 0, kt = !1, r;
10256
+ })), e.memory && s.save(n, G.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), xt(), q = void 0, jt = !1, G.infoTick.value++, r;
10208
10257
  },
10209
10258
  resetSession: () => {
10210
- Ct(), a.resolve("keep_external"), G.sessionId = Qc(), b.splice(0, b.length), x.clear?.(), S.reset([]), e.memory || E.reset(""), C.reset(), T.reset(), w.reset(), P && P.importStack([]), G.agent && (G.agent.debugLogs.value = []), s && s.createSession(G.agentId, e.session?.title, G.sessionId), W({
10259
+ Tt(), a.resolve("keep_external"), G.sessionId = Qc(), b.splice(0, b.length), x.clear?.(), S.reset([]), e.memory || E.reset(""), C.reset(), T.reset(), w.reset(), P && P.importStack([]), G.agent && (G.agent.debugLogs.value = []), s && s.createSession(G.agentId, e.session?.title, G.sessionId), W({
10211
10260
  type: "session_restored",
10212
10261
  sessionId: G.sessionId,
10213
10262
  rounds: 0
10214
- }), vt(), Ot = void 0, kt = !1;
10263
+ }), G.infoTick.value++, xt(), q = void 0, jt = !1;
10215
10264
  },
10216
10265
  stream: (e, t, n) => {
10217
10266
  if (!G.agent) throw Error("page-agent-sdk: agent 尚未初始化完成,请先 await mount()");
@@ -10223,12 +10272,12 @@ function ud(e, n) {
10223
10272
  let e = () => a.resolve("keep_external");
10224
10273
  n.aborted ? e() : n.addEventListener("abort", e, { once: !0 });
10225
10274
  }
10226
- let { controller: i, untrack: o } = St(n);
10275
+ let { controller: i, untrack: o } = wt(n);
10227
10276
  return G.agent.stream(e, r, i.signal).finally(o);
10228
10277
  },
10229
10278
  release() {
10230
10279
  if (G.refCount--, G.refCount <= 0) {
10231
- Ct(), s && (x.flush?.(), s.flush(), s.dispose()), st && st.dispose();
10280
+ Tt(), s && (x.flush?.(), s.flush(), s.dispose()), lt && lt.dispose();
10232
10281
  let e = G.mcpClosers.splice(0);
10233
10282
  e.length && Promise.allSettled(e.map((e) => e())), od.delete(n);
10234
10283
  }
@@ -10263,7 +10312,7 @@ function ud(e, n) {
10263
10312
  contextWindow: e.contextWindow ?? r?.contextWindow,
10264
10313
  maxOutputTokens: e.maxOutputTokens ?? r?.maxOutputTokens
10265
10314
  }), f.contextWindow < 2e5) throw Error(`[page-agent-sdk][setLlm] 新模型上下文窗口 ${f.contextWindow} 小于最小支持 ${ii}(需 ≥200K 窗口模型)`);
10266
- G.agent && (G.agent.setLlm(n), G.agent.setModelCaps?.(f)), ut?.setContextWindow?.(f.contextWindow), Qe?.setContextWindow?.(f.contextWindow), G.infoTick.value++, e.debug && console.log("[page-agent-sdk][setLlm] 重解析 modelCaps + 回灌:", f);
10315
+ G.agent && (G.agent.setLlm(n), G.agent.setModelCaps?.(f)), ft?.setContextWindow?.(f.contextWindow), et?.setContextWindow?.(f.contextWindow), G.infoTick.value++, e.debug && console.log("[page-agent-sdk][setLlm] 重解析 modelCaps + 回灌:", f);
10267
10316
  },
10268
10317
  setMemory(e) {
10269
10318
  E.reset(e), typeof e == "function" && E.refresh(), G.infoTick.value++;
@@ -10272,22 +10321,22 @@ function ud(e, n) {
10272
10321
  return E.refresh();
10273
10322
  },
10274
10323
  setSubagents(t) {
10275
- if (!Je) {
10324
+ if (!Xe) {
10276
10325
  e.debug && console.warn("[page-agent-sdk][setSubagents] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略");
10277
10326
  return;
10278
10327
  }
10279
- Je.set(t), G.infoTick.value++;
10328
+ Xe.set(t), G.infoTick.value++;
10280
10329
  },
10281
10330
  addSubagent(t) {
10282
- if (!Je) {
10331
+ if (!Xe) {
10283
10332
  e.debug && console.warn("[page-agent-sdk][addSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略");
10284
10333
  return;
10285
10334
  }
10286
- Je.add(t), G.infoTick.value++;
10335
+ Xe.add(t), G.infoTick.value++;
10287
10336
  },
10288
10337
  removeSubagent(t) {
10289
- if (!Je) return e.debug && console.warn("[page-agent-sdk][removeSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略"), !1;
10290
- let n = Je.remove(t);
10338
+ if (!Xe) return e.debug && console.warn("[page-agent-sdk][removeSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略"), !1;
10339
+ let n = Xe.remove(t);
10291
10340
  return n && G.infoTick.value++, n;
10292
10341
  },
10293
10342
  getActiveSubagents() {
@@ -10308,7 +10357,7 @@ function ud(e, n) {
10308
10357
  schema: e.schema,
10309
10358
  source: R.get(e.name) || "user"
10310
10359
  })),
10311
- skills: (rt ? rt.controller.get() : e.skills ?? []).map((e) => ({
10360
+ skills: (at ? at.controller.get() : e.skills ?? []).map((e) => ({
10312
10361
  name: e.name,
10313
10362
  description: e.description
10314
10363
  })),
@@ -10323,7 +10372,7 @@ function ud(e, n) {
10323
10372
  promptSoftCap: rs(f.contextWindow, h.promptSoftCapTokens)
10324
10373
  },
10325
10374
  memory: E.get(),
10326
- middleware: dt.map((e) => e.name),
10375
+ middleware: pt.map((e) => e.name),
10327
10376
  todos: (G.agent?.getState?.()?.todos ?? []).map((e) => ({
10328
10377
  id: e.id,
10329
10378
  content: e.content,
@@ -10344,21 +10393,21 @@ function ud(e, n) {
10344
10393
  } : void 0,
10345
10394
  actions: Vu(e.actions ?? {}),
10346
10395
  subagent: {
10347
- enabled: !!Ge,
10396
+ enabled: !!qe,
10348
10397
  maxDepth: e.subagent?.maxDepth ?? 1,
10349
10398
  maxParallel: e.subagent?.maxParallel ?? 4,
10350
10399
  allowedTools: e.subagent?.allowedTools ?? [],
10351
- subagents: Je?.get() ?? [],
10400
+ subagents: Xe?.get() ?? [],
10352
10401
  active: Le?.getActive() ?? [],
10353
10402
  history: Le?.getHistory() ?? []
10354
10403
  },
10355
10404
  verify: {
10356
- enabled: !!Ze,
10357
- maxAttempts: ze ? Re : 0,
10358
- adversarial: ze && !!e.verify?.adversarial
10405
+ enabled: !!$e,
10406
+ maxAttempts: Be ? Re : 0,
10407
+ adversarial: Be && !!e.verify?.adversarial
10359
10408
  },
10360
10409
  context: (() => {
10361
- let e = Qe?.getSnapshot();
10410
+ let e = et?.getSnapshot();
10362
10411
  if (e) {
10363
10412
  let t = G.agent?.getState?.()?.lastCompression;
10364
10413
  t && (e.compression = t);
@@ -10408,7 +10457,7 @@ function ud(e, n) {
10408
10457
  B && (w.clearFocus(), G.infoTick.value++);
10409
10458
  }
10410
10459
  };
10411
- async function wt() {
10460
+ async function Et() {
10412
10461
  if (!s) return;
10413
10462
  await s.ready;
10414
10463
  let t = e.session || {};
@@ -10432,12 +10481,12 @@ function ud(e, n) {
10432
10481
  }), e.debug && console.log("[page-agent-sdk][restore] 恢复会话", G.sessionId, `${t.messages?.length ?? 0} msgs`)) : e.debug && console.log("[page-agent-sdk][restore] 会话 meta 存在但快照为空", G.sessionId);
10433
10482
  } else G.sessionId = await s.createSession(n, t.title), e.debug && console.log("[page-agent-sdk][restore] 新建会话(无历史)", G.sessionId);
10434
10483
  } else G.sessionId = await s.createSession(n, t.title);
10435
- e.memory && s.save(n, G.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), vt();
10484
+ e.memory && s.save(n, G.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), xt();
10436
10485
  }
10437
- async function Tt() {
10438
- await lt();
10486
+ async function K() {
10487
+ await dt();
10439
10488
  }
10440
- function Et(e) {
10489
+ function Dt(e) {
10441
10490
  let t = {};
10442
10491
  for (let n of nd(e)) {
10443
10492
  let e = x.files[n];
@@ -10445,12 +10494,12 @@ function ud(e, n) {
10445
10494
  }
10446
10495
  return t;
10447
10496
  }
10448
- function K() {
10497
+ function Ot() {
10449
10498
  let e = rd(x.files, nd(b));
10450
10499
  for (let t of e) delete x.files[t];
10451
10500
  }
10452
- function Dt() {
10453
- let e = Jo(b, ft);
10501
+ function kt() {
10502
+ let e = Jo(b, mt);
10454
10503
  if (!e.trimmed) return;
10455
10504
  let { older: t, summary: n } = e;
10456
10505
  if (W({
@@ -10461,22 +10510,22 @@ function ud(e, n) {
10461
10510
  assistant: e.assistantMsgs.map((e) => e.content),
10462
10511
  steps: e.assistantMsgs.flatMap((e) => e.steps ?? [])
10463
10512
  })),
10464
- vfsResults: Et(t.flatMap((e) => [e.userMsg, ...e.assistantMsgs])),
10513
+ vfsResults: Dt(t.flatMap((e) => [e.userMsg, ...e.assistantMsgs])),
10465
10514
  summary: n.content,
10466
10515
  reason: "max_memory_rounds"
10467
- }), b.splice(e.deleteFrom, e.deleteCount, n), K(), g && l) {
10516
+ }), b.splice(e.deleteFrom, e.deleteCount, n), Ot(), g && l) {
10468
10517
  let n = e.summary, { prevSeg: r } = e;
10469
10518
  (async () => {
10470
10519
  try {
10471
10520
  let e = await l($o(t, v)), i = b.indexOf(n);
10472
10521
  if (i < 0) return;
10473
- b[i].content = qo(t, r, e), q();
10522
+ b[i].content = qo(t, r, e), Mt();
10474
10523
  } catch {}
10475
10524
  })();
10476
10525
  }
10477
10526
  }
10478
- let Ot, kt = !1;
10479
- function q() {
10527
+ let q, jt = !1;
10528
+ function Mt() {
10480
10529
  if (!G.sessionId || !s) return;
10481
10530
  let t = JSON.parse(JSON.stringify(b));
10482
10531
  s.save(n, G.sessionId, { messages: t });
@@ -10495,13 +10544,13 @@ function ud(e, n) {
10495
10544
  }
10496
10545
  ue && P && (s.save(n, G.sessionId, { checkpoints: P.exportStack() }), s.save(n, G.sessionId, { usage: i }));
10497
10546
  let a = Bc(b);
10498
- a && a !== Ot && (Ot = a, s.updateTitle(n, G.sessionId, a)), e.autoTitle !== !1 && u && !kt && b.some((e) => e.role === "user") && b.some((e) => e.role === "assistant") && (kt = !0, (async () => {
10547
+ a && a !== q && (q = a, s.updateTitle(n, G.sessionId, a)), e.autoTitle !== !1 && u && !jt && b.some((e) => e.role === "user") && b.some((e) => e.role === "assistant") && (jt = !0, (async () => {
10499
10548
  let e = await u(b);
10500
- e && (await s.updateTitle(n, G.sessionId, e), await vt());
10549
+ e && (await s.updateTitle(n, G.sessionId, e), await xt());
10501
10550
  })()), e.debug && console.log("[page-agent-sdk][persist] save", G.sessionId, `${b.length} msgs`);
10502
10551
  }
10503
10552
  return G.initDone = (async () => {
10504
- if (await wt(), await Tt(), e.mcp?.length) {
10553
+ if (await Et(), await K(), e.mcp?.length) {
10505
10554
  let t = await Promise.allSettled(e.mcp.map((e) => $s(e)));
10506
10555
  G.mcpClosers = t.flatMap((e) => e.status === "fulfilled" ? [e.value.close] : []), G.mcpServers = [], t.forEach((t, n) => {
10507
10556
  let r = e.mcp[n], i = r.name ?? r.url;
@@ -10517,14 +10566,14 @@ function ud(e, n) {
10517
10566
  llm: t,
10518
10567
  systemPrompt: de,
10519
10568
  tools: V,
10520
- middleware: dt,
10569
+ middleware: pt,
10521
10570
  maxToolRounds: e.maxToolRounds,
10522
10571
  maxRetries: e.maxRetries,
10523
10572
  stallMs: e.streamStallMs ?? 9e4,
10524
10573
  maxParallelTools: e.maxParallelTools,
10525
10574
  contextWindow: f.contextWindow,
10526
10575
  maxOutputTokens: f.maxOutputTokens,
10527
- maxVerifyAttempts: ze ? Re : 0,
10576
+ maxVerifyAttempts: Be ? Re : 0,
10528
10577
  roundTokenBudget: e.roundTokenBudget ?? 0,
10529
10578
  onLlmChange: (e) => {
10530
10579
  y = e;
@@ -10539,7 +10588,7 @@ function ud(e, n) {
10539
10588
  } catch {}
10540
10589
  } : void 0,
10541
10590
  debug: e.debug
10542
- }), D.current = G.agent, qe && qe.setReconfigureHook && qe.setReconfigureHook(() => {
10591
+ }), D.current = G.agent, Ye && Ye.setReconfigureHook && Ye.setReconfigureHook(() => {
10543
10592
  G.agent && G.agent.setTools(H());
10544
10593
  });
10545
10594
  })(), G;