page-agent-sdk 3.28.0 → 3.29.0

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