page-agent-sdk 3.11.1 → 3.12.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.
@@ -2976,14 +2976,17 @@ function Ki(e) {
2976
2976
  function qi(e, t) {
2977
2977
  if (!t) return e;
2978
2978
  let n = Ki(e), r = t.split(".");
2979
- for (let e of r) {
2979
+ for (let e = 0; e < r.length; e++) {
2980
+ let t = r[e];
2980
2981
  if (!n) return null;
2981
- if (n = Ki(n), n && n.shape && typeof n.shape == "object") n = (typeof n.shape == "function" ? n.shape() : n.shape)[e];
2982
+ if (n = Ki(n), n && n.shape && typeof n.shape == "object") n = (typeof n.shape == "function" ? n.shape() : n.shape)[t];
2982
2983
  else if (n && (n._def?.type === "array" || n.constructor?.name === "ZodArray")) {
2983
- if (!/^\d+$/.test(e)) return null;
2984
+ if (!/^\d+$/.test(t)) return null;
2984
2985
  n = n.element;
2985
- } else if (n && (n._def?.type === "union" || n._def?.type === "discriminatedUnion" || Array.isArray(n.options))) return null;
2986
- else return null;
2986
+ } else if (n && (n._def?.type === "union" || n._def?.type === "discriminatedUnion" || Array.isArray(n.options))) {
2987
+ let t = r.slice(e).join("."), i = (n.options ?? []).map((e) => qi(e, t)).filter((e) => e != null);
2988
+ return i.length ? i[0] : null;
2989
+ } else return null;
2987
2990
  }
2988
2991
  return n ?? null;
2989
2992
  }
@@ -3034,6 +3037,13 @@ function $i(e, t) {
3034
3037
  let t = n.element ?? n._def?.type;
3035
3038
  return e.map((e) => $i(e, t));
3036
3039
  }
3040
+ if (!Array.isArray(e)) {
3041
+ let t = e, n = Object.keys(t);
3042
+ if (!n.some((e) => e.startsWith("__pg"))) return e;
3043
+ let r = {};
3044
+ for (let e of n) e.startsWith("__pg") || (r[e] = t[e]);
3045
+ return r;
3046
+ }
3037
3047
  return e;
3038
3048
  }
3039
3049
  let r = typeof n.shape == "function" ? n.shape() : n.shape, i = {};
@@ -3570,7 +3580,7 @@ function $(e) {
3570
3580
  }
3571
3581
  function za(e, t, n, r) {
3572
3582
  if (t === "set") return n ? (Ma(e, n, r), null) : "set 操作需要 jsonPath(整体替换请用 set_data)";
3573
- if (t === "remove") return n ? (Na(e, n), null) : "remove 操作需要 jsonPath";
3583
+ if (t === "remove") return n ? Na(e, n) ? null : `remove 路径不存在: ${n}(数组索引越界或字段缺失;请先 read 最新结构确认索引)` : "remove 操作需要 jsonPath";
3574
3584
  if (t === "merge") {
3575
3585
  let t = n ? Z(e, n) : e;
3576
3586
  return typeof t != "object" || !t || Array.isArray(t) ? `merge 目标${n ? `(${n})` : "(根)"}不是对象` : (ja(t, r), null);
@@ -3632,7 +3642,23 @@ function Wa(e, t) {
3632
3642
  for (let t of Object.keys(e)) t in n || delete e[t];
3633
3643
  for (let t of Object.keys(n)) e[t] = n[t];
3634
3644
  }
3635
- function Ga(e, t, n = "") {
3645
+ function Ga(e, t, n, r = "") {
3646
+ let i = [], a = (e) => typeof e == "object" && !!e;
3647
+ if (!a(t)) return i;
3648
+ if (Array.isArray(t)) {
3649
+ let a = Array.isArray(e) ? e : [], o = Array.isArray(n) ? n : [], s = new Set(a.map((e) => JSON.stringify(e)));
3650
+ return t.forEach((e, t) => {
3651
+ s.has(JSON.stringify(e)) || i.push(...Ga(a[t], e, o[t], r ? `${r}.${t}` : String(t)));
3652
+ }), i;
3653
+ }
3654
+ let o = t, s = a(n) && !Array.isArray(n) ? n : null, c = a(e) && !Array.isArray(e) ? e : null;
3655
+ for (let e of Object.keys(o)) {
3656
+ let t = r ? `${r}.${e}` : e;
3657
+ e.startsWith("__pg") || (s && !(e in s) ? (!c || !(e in c)) && i.push(t) : s && e in s && i.push(...Ga(c?.[e], o[e], s[e], t)));
3658
+ }
3659
+ return i;
3660
+ }
3661
+ function Ka(e, t, n = "") {
3636
3662
  let r = [];
3637
3663
  if (!(typeof e == "object" && e) || !(typeof t == "object" && t) || Array.isArray(e) !== Array.isArray(t)) return e !== t && r.push({
3638
3664
  path: n || "(root)",
@@ -3651,14 +3677,14 @@ function Ga(e, t, n = "") {
3651
3677
  path: i,
3652
3678
  from: e[a],
3653
3679
  to: void 0
3654
- }) : r.push(...Ga(e[a], t[a], i));
3680
+ }) : r.push(...Ka(e[a], t[a], i));
3655
3681
  }
3656
3682
  return r;
3657
3683
  }
3658
3684
  let i = e, a = t, o = /* @__PURE__ */ new Set([...Object.keys(i), ...Object.keys(a)]);
3659
3685
  for (let e of o) {
3660
3686
  let t = n ? `${n}.${e}` : e;
3661
- e in i ? e in a ? r.push(...Ga(i[e], a[e], t)) : r.push({
3687
+ e in i ? e in a ? r.push(...Ka(i[e], a[e], t)) : r.push({
3662
3688
  path: t,
3663
3689
  from: i[e],
3664
3690
  to: void 0
@@ -3672,22 +3698,22 @@ function Ga(e, t, n = "") {
3672
3698
  }
3673
3699
  //#endregion
3674
3700
  //#region src/core/harness/focus.ts
3675
- var Ka = /* @__PURE__ */ new Set([
3701
+ var qa = /* @__PURE__ */ new Set([
3676
3702
  "set_data",
3677
3703
  "edit_data",
3678
3704
  "delete_data",
3679
3705
  "write",
3680
3706
  "draft_commit"
3681
3707
  ]);
3682
- function qa(e) {
3708
+ function Ja(e) {
3683
3709
  let t = e ?? {}, n = /* @__PURE__ */ new Set();
3684
3710
  if (typeof t.jsonPath == "string" && t.jsonPath && n.add(t.jsonPath), typeof t.path == "string" && t.path && n.add(t.path), t.patch && typeof t.patch.jsonPath == "string" && t.patch.jsonPath && n.add(t.patch.jsonPath), Array.isArray(t.patches)) for (let e of t.patches) e && typeof e.jsonPath == "string" && e.jsonPath && n.add(e.jsonPath);
3685
3711
  return [...n];
3686
3712
  }
3687
- function Ja(e, t) {
3713
+ function Ya(e, t) {
3688
3714
  return e === t || e.startsWith(t + ".");
3689
3715
  }
3690
- function Ya(e, t) {
3716
+ function Xa(e, t) {
3691
3717
  if (!t || typeof t != "object") return !1;
3692
3718
  let n = e.lastIndexOf(".");
3693
3719
  if (n < 0) return !1;
@@ -3696,7 +3722,7 @@ function Ya(e, t) {
3696
3722
  let a = Z(t, r);
3697
3723
  return Array.isArray(a) && Number(i) >= a.length;
3698
3724
  }
3699
- function Xa(e) {
3725
+ function Za(e) {
3700
3726
  let t = e.initialFocuses ? [...e.initialFocuses] : [], n = () => e.onChange?.([...t]), r = e.unfocusGuidance ?? "tool", i = r === "tool" ? "需改其他组件请先 remove_focus / clear_focus 或换焦点。" : r === "ask-user" ? "焦点由用户在输入框设定与移除(聚焦 chip ✕);用户要求改其他组件时,提示用户移除聚焦后重试,勿尝试写焦点外(会被拒)。" : "需改其他组件时,在收口回复中说明需先取消焦点(焦点由主会话管理),勿尝试越界写。", a = r === "tool" ? "请先 remove_focus / clear_focus 或换焦点后重试。" : r === "ask-user" ? "焦点由用户在输入框管理,请提示用户移除输入框中的聚焦 chip 后重试(当前模式无 focus 工具)。" : "请只改焦点子树;需改其他组件时,在收口回复中说明需先取消焦点。";
3701
3727
  return {
3702
3728
  name: "focus",
@@ -3728,15 +3754,15 @@ function Xa(e) {
3728
3754
  });
3729
3755
  if (n.name === "eval_script") {
3730
3756
  if (n.args?.mode !== "transform") return r(n);
3731
- let i = qa(n.args);
3757
+ let i = Ja(n.args);
3732
3758
  if (!i.length) return o("(整体数据)");
3733
- for (let n of i) if (!t.some((e) => Ja(n, e.path)) && !Ya(n, e.getBind?.())) return o(n);
3759
+ for (let n of i) if (!t.some((e) => Ya(n, e.path)) && !Xa(n, e.getBind?.())) return o(n);
3734
3760
  return r(n);
3735
3761
  }
3736
- if (Ka.has(n.name)) {
3737
- let r = qa(n.args);
3762
+ if (qa.has(n.name)) {
3763
+ let r = Ja(n.args);
3738
3764
  if (!r.length) return o("(整体数据)");
3739
- for (let n of r) if (!t.some((e) => Ja(n, e.path)) && !Ya(n, e.getBind?.())) return o(n);
3765
+ for (let n of r) if (!t.some((e) => Ya(n, e.path)) && !Xa(n, e.getBind?.())) return o(n);
3740
3766
  }
3741
3767
  }
3742
3768
  return r(n);
@@ -3763,12 +3789,12 @@ function Xa(e) {
3763
3789
  }
3764
3790
  //#endregion
3765
3791
  //#region src/core/harness/workingMemory.ts
3766
- var Za = 10, Qa = /* @__PURE__ */ new Set([
3792
+ var Qa = 10, $a = /* @__PURE__ */ new Set([
3767
3793
  "read",
3768
3794
  "query_data",
3769
3795
  "search_data"
3770
3796
  ]);
3771
- function $a() {
3797
+ function eo() {
3772
3798
  let e = [], t = {}, n = () => e.length === 0 && Object.keys(t).length === 0, r = () => ({
3773
3799
  locatedPaths: [...e],
3774
3800
  lastHashes: { ...t }
@@ -3776,13 +3802,13 @@ function $a() {
3776
3802
  function i(t) {
3777
3803
  if (!t) return;
3778
3804
  let n = e.indexOf(t);
3779
- for (n >= 0 && e.splice(n, 1), e.unshift(t); e.length > Za;) e.pop();
3805
+ for (n >= 0 && e.splice(n, 1), e.unshift(t); e.length > Qa;) e.pop();
3780
3806
  }
3781
3807
  function a(e, n) {
3782
3808
  if (t[e] === n) return;
3783
3809
  delete t[e], t[e] = n;
3784
3810
  let r = Object.keys(t);
3785
- for (; r.length > Za;) {
3811
+ for (; r.length > Qa;) {
3786
3812
  let e = r.shift();
3787
3813
  delete t[e];
3788
3814
  }
@@ -3793,7 +3819,7 @@ function $a() {
3793
3819
  beforeModel: () => n() ? void 0 : { workingMemory: r() },
3794
3820
  wrapToolCall: async (e, t) => {
3795
3821
  let n = await t(e);
3796
- if (n.status === "done" && Qa.has(e.name)) {
3822
+ if (n.status === "done" && $a.has(e.name)) {
3797
3823
  let t = typeof n.content == "string" ? n.content : "";
3798
3824
  if (e.name === "read") {
3799
3825
  let n = e.args?.jsonPath || "(root)";
@@ -3821,7 +3847,7 @@ function $a() {
3821
3847
  for (let e of Object.keys(t)) delete t[e];
3822
3848
  },
3823
3849
  restore: (n) => {
3824
- e.length = 0, Array.isArray(n?.locatedPaths) && e.push(...n.locatedPaths.slice(0, Za));
3850
+ e.length = 0, Array.isArray(n?.locatedPaths) && e.push(...n.locatedPaths.slice(0, Qa));
3825
3851
  for (let e of Object.keys(t)) delete t[e];
3826
3852
  n?.lastHashes && typeof n.lastHashes == "object" && Object.assign(t, n.lastHashes);
3827
3853
  }
@@ -3829,7 +3855,7 @@ function $a() {
3829
3855
  }
3830
3856
  //#endregion
3831
3857
  //#region src/core/tools/sandbox.ts
3832
- function eo(e) {
3858
+ function to(e) {
3833
3859
  let t = (t, n) => {
3834
3860
  try {
3835
3861
  Object.defineProperty(e, t, {
@@ -3857,7 +3883,7 @@ function eo(e) {
3857
3883
  });
3858
3884
  } catch {}
3859
3885
  }
3860
- var to = `(${eo.toString()})(self);`, no = [
3886
+ var no = `(${to.toString()})(self);`, ro = [
3861
3887
  {
3862
3888
  re: /\bimport\s*\(/,
3863
3889
  msg: "动态 import() 拉外网模块"
@@ -3883,9 +3909,9 @@ var to = `(${eo.toString()})(self);`, no = [
3883
3909
  msg: "require() 拉模块"
3884
3910
  }
3885
3911
  ];
3886
- function ro(e, t = 3e3) {
3912
+ function io(e, t = 3e3) {
3887
3913
  return async (n) => {
3888
- for (let { re: t, msg: n } of no) if (t.test(e)) return {
3914
+ for (let { re: t, msg: n } of ro) if (t.test(e)) return {
3889
3915
  ok: !1,
3890
3916
  error: `沙箱拒绝执行:脚本含禁用模式(${n})`,
3891
3917
  elapsedMs: 0
@@ -3902,7 +3928,7 @@ function ro(e, t = 3e3) {
3902
3928
  elapsedMs: Date.now() - i
3903
3929
  });
3904
3930
  }
3905
- }, s = to + "\nself.onmessage = async (e) => {\n try {\n const fn = new Function(\"data\", e.data.script);\n try { self.eval = undefined; self.Function = undefined; } catch {}\n let result = fn(e.data.data);\n if (result && typeof result.then === \"function\") result = await result;\n self.postMessage({ ok: true, result });\n } catch (err) {\n self.postMessage({ ok: false, error: String((err && err.message) || err) });\n }\n};", c = "", l;
3931
+ }, s = no + "\nself.onmessage = async (e) => {\n try {\n const fn = new Function(\"data\", e.data.script);\n try { self.eval = undefined; self.Function = undefined; } catch {}\n let result = fn(e.data.data);\n if (result && typeof result.then === \"function\") result = await result;\n self.postMessage({ ok: true, result });\n } catch (err) {\n self.postMessage({ ok: false, error: String((err && err.message) || err) });\n }\n};", c = "", l;
3906
3932
  try {
3907
3933
  let e = new Blob([s], { type: "application/javascript" });
3908
3934
  c = URL.createObjectURL(e), l = new Worker(c);
@@ -3938,7 +3964,7 @@ function ro(e, t = 3e3) {
3938
3964
  }
3939
3965
  //#endregion
3940
3966
  //#region src/core/tools/hostScript.ts
3941
- async function io(e, t = 3e3) {
3967
+ async function ao(e, t = 3e3) {
3942
3968
  let n = Date.now(), r;
3943
3969
  try {
3944
3970
  let i = Object.getPrototypeOf(async function() {}).constructor, a = new i(e), o = Promise.resolve(a());
@@ -3961,28 +3987,28 @@ async function io(e, t = 3e3) {
3961
3987
  }
3962
3988
  //#endregion
3963
3989
  //#region src/core/harness/skills.ts
3964
- function ao(e) {
3990
+ function oo(e) {
3965
3991
  return e;
3966
3992
  }
3967
- var oo = /^https?:\/\//i;
3968
- function so(e) {
3969
- return oo.test(e) || e.startsWith("//") ? "http" : "vfs";
3970
- }
3993
+ var so = /^https?:\/\//i;
3971
3994
  function co(e) {
3995
+ return so.test(e) || e.startsWith("//") ? "http" : "vfs";
3996
+ }
3997
+ function lo(e) {
3972
3998
  return e.replace(/^vfs:\/\//, "").replace(/^\/+/, "").replace(/\/+/g, "/");
3973
3999
  }
3974
- var lo = 3e4;
3975
- async function uo(e) {
3976
- let t = new AbortController(), n = setTimeout(() => t.abort(), lo);
4000
+ var uo = 3e4;
4001
+ async function fo(e) {
4002
+ let t = new AbortController(), n = setTimeout(() => t.abort(), uo);
3977
4003
  try {
3978
4004
  return await fetch(e, { signal: t.signal });
3979
4005
  } finally {
3980
4006
  clearTimeout(n);
3981
4007
  }
3982
4008
  }
3983
- async function fo(e, t) {
3984
- if (so(e) === "http") try {
3985
- let t = await uo(e);
4009
+ async function po(e, t) {
4010
+ if (co(e) === "http") try {
4011
+ let t = await fo(e);
3986
4012
  return t.ok ? {
3987
4013
  ok: !0,
3988
4014
  content: await t.text()
@@ -3993,7 +4019,7 @@ async function fo(e, t) {
3993
4019
  } catch (t) {
3994
4020
  if (t?.name === "AbortError") return {
3995
4021
  ok: !1,
3996
- error: `读取超时(${lo / 1e3}s):${e}`
4022
+ error: `读取超时(${uo / 1e3}s):${e}`
3997
4023
  };
3998
4024
  let n = t?.message || String(t);
3999
4025
  return /Failed to fetch|NetworkError|CORS|blocked/i.test(n) ? {
@@ -4008,7 +4034,7 @@ async function fo(e, t) {
4008
4034
  ok: !1,
4009
4035
  error: `skill 文档 ${e} 是 vfs 路径,但 vfs 未启用`
4010
4036
  };
4011
- let n = t(co(e));
4037
+ let n = t(lo(e));
4012
4038
  return n == null ? {
4013
4039
  ok: !1,
4014
4040
  error: `未找到 vfs 文档 ${e}(可用 vfs_ls 查看)`
@@ -4017,14 +4043,14 @@ async function fo(e, t) {
4017
4043
  content: n
4018
4044
  };
4019
4045
  }
4020
- function po(e) {
4046
+ function mo(e) {
4021
4047
  if (e.length) return [
4022
4048
  "## 可用 Skills(渐进式披露)",
4023
4049
  e.map((e) => `- ${e.name}: ${e.description}`).join("\n"),
4024
4050
  "当某 skill 适用时,先调用 load_skill(name) 加载其完整指令,再按指令执行。不要凭记忆猜测 skill 内容。"
4025
4051
  ].join("\n");
4026
4052
  }
4027
- function mo(e) {
4053
+ function ho(e) {
4028
4054
  if (typeof e == "string") return e;
4029
4055
  if (e == null) return "";
4030
4056
  try {
@@ -4033,15 +4059,15 @@ function mo(e) {
4033
4059
  return String(e);
4034
4060
  }
4035
4061
  }
4036
- async function ho(e) {
4062
+ async function go(e) {
4037
4063
  try {
4038
- let t = await uo(e);
4064
+ let t = await fo(e);
4039
4065
  return t.ok ? await t.text() : null;
4040
4066
  } catch {
4041
4067
  return null;
4042
4068
  }
4043
4069
  }
4044
- async function go(e, t) {
4070
+ async function _o(e, t) {
4045
4071
  let n = e.context ?? "sandbox", r = !!e.code, i = !!e.url;
4046
4072
  if (!r && !i) return {
4047
4073
  ok: !1,
@@ -4060,10 +4086,10 @@ async function go(e, t) {
4060
4086
  ok: !1,
4061
4087
  error: "skill 含宿主权限脚本(context:\"host\"),需 capabilities.skillHostScript:true 开启"
4062
4088
  };
4063
- let n = await io(e.code);
4089
+ let n = await ao(e.code);
4064
4090
  return n.ok ? {
4065
4091
  ok: !0,
4066
- text: mo(n.result)
4092
+ text: ho(n.result)
4067
4093
  } : {
4068
4094
  ok: !1,
4069
4095
  error: n.error || "宿主脚本执行失败"
@@ -4071,31 +4097,31 @@ async function go(e, t) {
4071
4097
  }
4072
4098
  let a;
4073
4099
  if (i) {
4074
- let t = await ho(e.url);
4100
+ let t = await go(e.url);
4075
4101
  if (t == null) return {
4076
4102
  ok: !1,
4077
4103
  error: `远程脚本拉取失败(${e.url};CORS/网络错误)`
4078
4104
  };
4079
4105
  a = t;
4080
4106
  } else a = e.code;
4081
- let o = await ro(a)(void 0);
4107
+ let o = await io(a)(void 0);
4082
4108
  return o.ok ? {
4083
4109
  ok: !0,
4084
- text: mo(o.result)
4110
+ text: ho(o.result)
4085
4111
  } : {
4086
4112
  ok: !1,
4087
4113
  error: o.error || "沙箱脚本执行失败"
4088
4114
  };
4089
4115
  }
4090
- async function _o(e, t) {
4116
+ async function vo(e, t) {
4091
4117
  let n = null;
4092
4118
  if (e.doc) {
4093
- let r = await fo(e.doc, t?.readVfs);
4119
+ let r = await po(e.doc, t?.readVfs);
4094
4120
  r.ok && (n = r.content);
4095
4121
  } else e.getContent && (n = await e.getContent());
4096
4122
  let r = n ?? "", i = !0;
4097
4123
  if (e.exec) {
4098
- let n = await go(e.exec, t?.hostScriptEnabled);
4124
+ let n = await _o(e.exec, t?.hostScriptEnabled);
4099
4125
  n.ok && n.text ? r = e.exec.inject === "prepend" ? n.text + "\n\n" + r : (r ? r + "\n\n" : "") + n.text : (n.ok || (r = (r ? r + "\n\n" : "") + `(skill 脚本执行失败:${n.error})`), i = !1);
4100
4126
  }
4101
4127
  return {
@@ -4103,7 +4129,7 @@ async function _o(e, t) {
4103
4129
  cacheable: i
4104
4130
  };
4105
4131
  }
4106
- async function vo(e) {
4132
+ async function yo(e) {
4107
4133
  if (!e.tools?.length) return [];
4108
4134
  let t = [];
4109
4135
  for (let n of e.tools) try {
@@ -4114,7 +4140,7 @@ async function vo(e) {
4114
4140
  }
4115
4141
  return t;
4116
4142
  }
4117
- function yo(e, n) {
4143
+ function bo(e, n) {
4118
4144
  let i = [...e], a = new Map(i.map((e) => [e.name, e])), o = /* @__PURE__ */ new Set(), s = /* @__PURE__ */ new Map(), c = {
4119
4145
  set(e) {
4120
4146
  i = [...e], a = new Map(i.map((e) => [e.name, e])), s.clear(), o.clear();
@@ -4130,7 +4156,7 @@ function yo(e, n) {
4130
4156
  if (!t) return null;
4131
4157
  let r = s.get(e);
4132
4158
  if (r != null) return r;
4133
- let i = await _o(t, n);
4159
+ let i = await vo(t, n);
4134
4160
  return r = i.content, i.cacheable && s.set(e, r), r;
4135
4161
  }
4136
4162
  }, l = {
@@ -4141,12 +4167,12 @@ function yo(e, n) {
4141
4167
  if (o.has(e)) return `skill "${e}" 已在本轮加载,无需重复。`;
4142
4168
  let r = s.get(e);
4143
4169
  if (r == null) {
4144
- let i = await _o(t, n);
4170
+ let i = await vo(t, n);
4145
4171
  if (r = i.content, !r) return `skill "${e}" 未配置内容(doc / getContent / exec 任选其一)。`;
4146
4172
  i.cacheable && s.set(e, r);
4147
4173
  }
4148
4174
  if (o.add(e), t.tools?.length && n?.onToolsReady && a.get(e) === t) try {
4149
- let e = await vo(t);
4175
+ let e = await yo(t);
4150
4176
  e.length && n.onToolsReady(t.name, e);
4151
4177
  } catch (t) {
4152
4178
  console.warn(`skill "${e}" 工具加载失败:`, t);
@@ -4164,7 +4190,7 @@ function yo(e, n) {
4164
4190
  })),
4165
4191
  skillsLoaded: []
4166
4192
  }),
4167
- augmentPrompt: () => po(i),
4193
+ augmentPrompt: () => mo(i),
4168
4194
  afterModel: () => ({ skillsLoaded: [...o] })
4169
4195
  };
4170
4196
  return Object.defineProperty(l, "controller", {
@@ -4176,7 +4202,7 @@ function yo(e, n) {
4176
4202
  }
4177
4203
  //#endregion
4178
4204
  //#region src/core/harness/memory.ts
4179
- function bo(e = "") {
4205
+ function xo(e = "") {
4180
4206
  let t = e, n = typeof e == "string" ? e : void 0;
4181
4207
  async function r() {
4182
4208
  if (typeof t == "string") return n = t, t;
@@ -4200,7 +4226,7 @@ function bo(e = "") {
4200
4226
  }
4201
4227
  //#endregion
4202
4228
  //#region src/core/harness/permissions.ts
4203
- var xo = /* @__PURE__ */ new Set([
4229
+ var So = /* @__PURE__ */ new Set([
4204
4230
  "set_data",
4205
4231
  "edit_data",
4206
4232
  "delete_data",
@@ -4209,7 +4235,7 @@ var xo = /* @__PURE__ */ new Set([
4209
4235
  "vfs_edit",
4210
4236
  "draft_commit",
4211
4237
  "eval_script"
4212
- ]), So = /* @__PURE__ */ new Set([
4238
+ ]), Co = /* @__PURE__ */ new Set([
4213
4239
  "get_data",
4214
4240
  "describe_data",
4215
4241
  "read",
@@ -4220,7 +4246,7 @@ var xo = /* @__PURE__ */ new Set([
4220
4246
  "vfs_glob",
4221
4247
  "vfs_grep"
4222
4248
  ]);
4223
- function Co(e) {
4249
+ function wo(e) {
4224
4250
  let t = "";
4225
4251
  for (let n = 0; n < e.length; n++) {
4226
4252
  let r = e[n];
@@ -4228,24 +4254,24 @@ function Co(e) {
4228
4254
  }
4229
4255
  return RegExp("^" + t + "$");
4230
4256
  }
4231
- function wo(e, t, n) {
4232
- for (let r of e) if (r.operations.includes(t) && r.scopes.some((e) => Co(e).test(n))) return r.mode;
4257
+ function To(e, t, n) {
4258
+ for (let r of e) if (r.operations.includes(t) && r.scopes.some((e) => wo(e).test(n))) return r.mode;
4233
4259
  return "allow";
4234
4260
  }
4235
- function To(e) {
4261
+ function Eo(e) {
4236
4262
  let t = e ?? {}, n = /* @__PURE__ */ new Set();
4237
4263
  if (typeof t.jsonPath == "string" && t.jsonPath && n.add(t.jsonPath), typeof t.path == "string" && t.path && n.add(t.path), t.patch && typeof t.patch.jsonPath == "string" && t.patch.jsonPath && n.add(t.patch.jsonPath), Array.isArray(t.patches)) for (let e of t.patches) e && typeof e.jsonPath == "string" && e.jsonPath && n.add(e.jsonPath);
4238
4264
  return [...n];
4239
4265
  }
4240
- function Eo(e) {
4266
+ function Do(e) {
4241
4267
  return {
4242
4268
  name: "permissions",
4243
4269
  wrapToolCall: async (t, n) => {
4244
- let r = xo.has(t.name) ? "write" : So.has(t.name) ? "read" : null;
4270
+ let r = So.has(t.name) ? "write" : Co.has(t.name) ? "read" : null;
4245
4271
  t.name === "eval_script" && t.args?.mode !== "transform" && (r = null);
4246
- let i = To(t.args);
4272
+ let i = Eo(t.args);
4247
4273
  if (r === "write" && !i.length && (i = [""]), r && i.length) {
4248
- for (let t of i) if (wo(e, r, t) === "deny") return {
4274
+ for (let t of i) if (To(e, r, t) === "deny") return {
4249
4275
  content: `权限拒绝:${r} 操作 "${t}" 被 permissions 规则禁止。`,
4250
4276
  status: "error"
4251
4277
  };
@@ -4256,7 +4282,7 @@ function Eo(e) {
4256
4282
  }
4257
4283
  //#endregion
4258
4284
  //#region src/core/harness/approval.ts
4259
- function Do(e = {}) {
4285
+ function Oo(e = {}) {
4260
4286
  let t = (t, n) => e.confirm ? !!e.confirm(t, n) : e.tools === void 0 || e.tools.includes(t);
4261
4287
  return {
4262
4288
  name: "approval",
@@ -4293,15 +4319,15 @@ function Do(e = {}) {
4293
4319
  }
4294
4320
  //#endregion
4295
4321
  //#region src/core/harness/humanConfirm.ts
4296
- var Oo = "request_human_confirmation", ko = t.object({
4322
+ var ko = "request_human_confirmation", Ao = t.object({
4297
4323
  question: t.string().describe("要征询用户的问题/方案描述。清晰具体:说明当前情况、为什么需要确认、确认什么。"),
4298
4324
  options: t.array(t.string()).optional().describe("可选方案列表(2-4 个)。用户从中选一个。不传则用户只回答允许/拒绝。"),
4299
4325
  recommendation: t.string().optional().describe("你推荐的方案(优先在 options 中选一个)及推荐理由,帮用户快速决策。"),
4300
4326
  context: t.string().optional().describe("补充上下文:已做了什么、约束、影响范围等,帮用户判断。")
4301
4327
  });
4302
- function Ao() {
4328
+ function jo() {
4303
4329
  return r(async () => "人工确认中间件未装载,无法征询用户。请直接向用户说明情况并等待回复。", {
4304
- name: Oo,
4330
+ name: ko,
4305
4331
  description: [
4306
4332
  "当遇到以下情况时,主动调用本工具征询用户确认后再继续(不要默默猜测后直接执行高风险动作):",
4307
4333
  "1) 不确定用户意图、需求有歧义;",
@@ -4311,10 +4337,10 @@ function Ao() {
4311
4337
  "入参:question=问题/方案描述;options=可选方案列表(多方案时给);recommendation=你推荐的方案及理由。",
4312
4338
  "用户选择后,据其回答继续;若用户拒绝,停止当前操作并询问如何调整。"
4313
4339
  ].join(""),
4314
- schema: ko
4340
+ schema: Ao
4315
4341
  });
4316
4342
  }
4317
- function jo() {
4343
+ function Mo() {
4318
4344
  return {
4319
4345
  name: "humanConfirm",
4320
4346
  wrapToolCall: async (e, t) => e.name === "request_human_confirmation" ? new Promise((t) => {
@@ -4346,14 +4372,14 @@ function jo() {
4346
4372
  }
4347
4373
  //#endregion
4348
4374
  //#region src/core/harness/checkpoint.ts
4349
- function Mo(e) {
4375
+ function No(e) {
4350
4376
  if (typeof e != "object" || !e) return e;
4351
4377
  if (typeof structuredClone == "function") try {
4352
4378
  return structuredClone(e);
4353
4379
  } catch {}
4354
4380
  return JSON.parse(JSON.stringify(e));
4355
4381
  }
4356
- function No(e, t) {
4382
+ function Po(e, t) {
4357
4383
  let n = t.split("."), r = e;
4358
4384
  for (let e of n) {
4359
4385
  if (r == null) return;
@@ -4361,12 +4387,12 @@ function No(e, t) {
4361
4387
  }
4362
4388
  return r;
4363
4389
  }
4364
- function Po(e, t, n) {
4390
+ function Fo(e, t, n) {
4365
4391
  let r = t.split("."), i = e;
4366
4392
  for (let e = 0; e < r.length - 1; e++) i[r[e]] ?? (i[r[e]] = {}), i = i[r[e]];
4367
4393
  i[r[r.length - 1]] = n;
4368
4394
  }
4369
- function Fo(e, t) {
4395
+ function Io(e, t) {
4370
4396
  if (Array.isArray(e)) {
4371
4397
  e.length = 0, Array.isArray(t) && e.push(...t);
4372
4398
  return;
@@ -4375,11 +4401,11 @@ function Fo(e, t) {
4375
4401
  for (let t of Object.keys(e)) t in n || delete e[t];
4376
4402
  for (let t of Object.keys(n)) e[t] = n[t];
4377
4403
  }
4378
- function Io(e, t) {
4379
- let n = No(window, e);
4380
- typeof n == "object" && n ? Fo(n, t) : Po(window, e, t);
4404
+ function Lo(e, t) {
4405
+ let n = Po(window, e);
4406
+ typeof n == "object" && n ? Io(n, t) : Fo(window, e, t);
4381
4407
  }
4382
- function Lo(e) {
4408
+ function Ro(e) {
4383
4409
  let t = e.slice();
4384
4410
  for (; t.length;) {
4385
4411
  let e = t[t.length - 1];
@@ -4388,22 +4414,22 @@ function Lo(e) {
4388
4414
  }
4389
4415
  return t;
4390
4416
  }
4391
- function Ro(e) {
4417
+ function zo(e) {
4392
4418
  let t = [], n = e.maxCheckpoints ?? 5, r = 1, i, a;
4393
4419
  return {
4394
4420
  save(o) {
4395
- let s = Lo(e.messages), c = {};
4396
- if (e.getData) ((e.consumeDataDirty?.() ?? !0) || a === void 0) && (a = Mo(e.getData())), c[""] = a;
4397
- else for (let t of e.slotPaths ?? []) c[t] = Mo(No(window, t));
4398
- ((e.vfsStore.consumeDirty?.() ?? !0) || i === void 0) && (i = Mo(e.vfsStore.files));
4421
+ let s = Ro(e.messages), c = {};
4422
+ if (e.getData) ((e.consumeDataDirty?.() ?? !0) || a === void 0) && (a = No(e.getData())), c[""] = a;
4423
+ else for (let t of e.slotPaths ?? []) c[t] = No(Po(window, t));
4424
+ ((e.vfsStore.consumeDirty?.() ?? !0) || i === void 0) && (i = No(e.vfsStore.files));
4399
4425
  let l = {
4400
4426
  id: r++,
4401
4427
  label: o,
4402
4428
  timestamp: Date.now(),
4403
- messages: Mo(s),
4429
+ messages: No(s),
4404
4430
  windowVals: c,
4405
4431
  vfs: i,
4406
- todos: Mo(e.getTodos()),
4432
+ todos: No(e.getTodos()),
4407
4433
  messageCount: s.length
4408
4434
  };
4409
4435
  for (t.push(l); t.length > n;) t.shift();
@@ -4423,19 +4449,19 @@ function Ro(e) {
4423
4449
  restore(n) {
4424
4450
  let r = n == null ? t[t.length - 1] : t.find((e) => e.id === n);
4425
4451
  if (!r) return !1;
4426
- if (e.messages.splice(0, e.messages.length, ...Mo(r.messages)), e.getData) {
4452
+ if (e.messages.splice(0, e.messages.length, ...No(r.messages)), e.getData) {
4427
4453
  let t = r.windowVals[""];
4428
4454
  if (t !== void 0) {
4429
4455
  let n = e.getData();
4430
- typeof n == "object" && n && Fo(n, Mo(t));
4456
+ typeof n == "object" && n && Io(n, No(t));
4431
4457
  }
4432
- } else for (let [e, t] of Object.entries(r.windowVals)) Io(e, Mo(t));
4458
+ } else for (let [e, t] of Object.entries(r.windowVals)) Lo(e, No(t));
4433
4459
  let o = e.vfsStore.files;
4434
4460
  for (let e of Object.keys(o)) delete o[e];
4435
- return Object.assign(o, Mo(r.vfs)), e.todosMw.reset(Mo(r.todos)), a = void 0, i = void 0, !0;
4461
+ return Object.assign(o, No(r.vfs)), e.todosMw.reset(No(r.todos)), a = void 0, i = void 0, !0;
4436
4462
  },
4437
4463
  exportStack() {
4438
- return Mo(t);
4464
+ return No(t);
4439
4465
  },
4440
4466
  importStack(e) {
4441
4467
  t.length = 0, i = void 0, a = void 0;
@@ -4445,7 +4471,7 @@ function Ro(e) {
4445
4471
  }
4446
4472
  };
4447
4473
  }
4448
- function zo(e) {
4474
+ function Bo(e) {
4449
4475
  let t = !1;
4450
4476
  return {
4451
4477
  name: "checkpoint",
@@ -4459,7 +4485,7 @@ function zo(e) {
4459
4485
  }
4460
4486
  //#endregion
4461
4487
  //#region src/core/utils/rounds.ts
4462
- function Bo(e) {
4488
+ function Vo(e) {
4463
4489
  let t = [], n = null, r = 0;
4464
4490
  for (let i = 0; i < e.length; i++) {
4465
4491
  let a = e[i];
@@ -4473,43 +4499,43 @@ function Bo(e) {
4473
4499
  }
4474
4500
  return n && t.push(n), t;
4475
4501
  }
4476
- function Vo(e, t) {
4502
+ function Ho(e, t) {
4477
4503
  let n = (e || "").replace(/```[\s\S]*?```/g, "[代码]").replace(/`([^`]+)`/g, "$1").replace(/[#*_>\-]\s?/g, "").replace(/\[(代码)\]/g, "「代码」").replace(/\s+/g, " ").trim();
4478
4504
  return n.length > t ? n.slice(0, t) + "…" : n;
4479
4505
  }
4480
- function Ho(e) {
4506
+ function Uo(e) {
4481
4507
  let t = [];
4482
4508
  for (let n of e.assistantMsgs) for (let e of n.steps || []) t.push(e.name);
4483
4509
  return t;
4484
4510
  }
4485
- var Uo = "【更早对话摘要";
4486
- function Wo(e, t) {
4511
+ var Wo = "【更早对话摘要";
4512
+ function Go(e, t) {
4487
4513
  return !t || !t.body ? e : {
4488
4514
  body: `${t.body}\n【续】\n${e.body}`,
4489
4515
  rounds: (t.rounds ?? 0) + (e.rounds ?? 0),
4490
4516
  cumulative: !0
4491
4517
  };
4492
4518
  }
4493
- function Go(e) {
4519
+ function Ko(e) {
4494
4520
  return typeof e != "string" || !e.startsWith("【更早对话摘要") ? null : { body: e.replace(/^【[^】]*】\n?/, "") };
4495
4521
  }
4496
- function Ko(e) {
4497
- return `${Uo}${e.cumulative ? `(${e.rounds ?? 0} 轮,含累积)` : e.rounds ? `(${e.rounds} 轮)` : ""}】\n${e.body}`;
4522
+ function qo(e) {
4523
+ return `${Wo}${e.cumulative ? `(${e.rounds ?? 0} 轮,含累积)` : e.rounds ? `(${e.rounds} 轮)` : ""}】\n${e.body}`;
4498
4524
  }
4499
- function qo(e, t, n) {
4500
- return Ko(Wo({
4525
+ function Jo(e, t, n) {
4526
+ return qo(Go({
4501
4527
  body: n,
4502
4528
  rounds: e.length
4503
4529
  }, t ?? void 0));
4504
4530
  }
4505
- function Jo(e, t) {
4531
+ function Yo(e, t) {
4506
4532
  if (t <= 0) return { trimmed: !1 };
4507
- let n = Bo(e);
4533
+ let n = Vo(e);
4508
4534
  if (n.length <= t) return { trimmed: !1 };
4509
4535
  let r = n[n.length - t].startIdx, i = n.slice(0, n.length - t), a = n[0].startIdx, o = null;
4510
4536
  for (let t = 0; t < a; t++) {
4511
4537
  let n = e[t];
4512
- if (n.role === "system" && (o = Go(n.content), o)) break;
4538
+ if (n.role === "system" && (o = Ko(n.content), o)) break;
4513
4539
  }
4514
4540
  return {
4515
4541
  trimmed: !0,
@@ -4517,9 +4543,9 @@ function Jo(e, t) {
4517
4543
  deleteCount: r,
4518
4544
  summary: {
4519
4545
  role: "system",
4520
- content: Ko(Wo({
4546
+ content: qo(Go({
4521
4547
  body: i.map((e) => {
4522
- let t = Vo(e.userMsg.content, 60) || "(空)", n = e.assistantMsgs[0] ? Vo(e.assistantMsgs[0].content, 80) : "(无回复)";
4548
+ let t = Ho(e.userMsg.content, 60) || "(空)", n = e.assistantMsgs[0] ? Ho(e.assistantMsgs[0].content, 80) : "(无回复)";
4523
4549
  return `- 第${e.round}轮:${t} → ${n}`;
4524
4550
  }).join("\n"),
4525
4551
  rounds: i.length
@@ -4532,35 +4558,35 @@ function Jo(e, t) {
4532
4558
  }
4533
4559
  //#endregion
4534
4560
  //#region src/core/composables/contextIndex.ts
4535
- var Yo = /* @__PURE__ */ new Set(/* @__PURE__ */ "的.了.是.在.我.你.他.她.它.这.那.和.与.及.或.一个.什么.怎么.如何.为什么.可以.能.请.帮.一下.需要.想要.the.a.an.is.are.of.to.in.on".split("."));
4536
- function Xo(e) {
4537
- return e.toLowerCase().split(/[^a-z0-9一-龥]+/i).map((e) => e.trim()).filter((e) => e.length >= 2 && !Yo.has(e));
4538
- }
4561
+ var Xo = /* @__PURE__ */ new Set(/* @__PURE__ */ "的.了.是.在.我.你.他.她.它.这.那.和.与.及.或.一个.什么.怎么.如何.为什么.可以.能.请.帮.一下.需要.想要.the.a.an.is.are.of.to.in.on".split("."));
4539
4562
  function Zo(e) {
4563
+ return e.toLowerCase().split(/[^a-z0-9一-龥]+/i).map((e) => e.trim()).filter((e) => e.length >= 2 && !Xo.has(e));
4564
+ }
4565
+ function Qo(e) {
4540
4566
  let t = typeof e.content == "string" ? e.content : "";
4541
4567
  if (e.reasoning && (t += e.reasoning), e.steps) for (let n of e.steps) t += " " + (n.name || ""), n.args != null && (t += " " + (typeof n.args == "string" ? n.args : JSON.stringify(n.args))), n.result && (t += " " + n.result);
4542
4568
  return X(t);
4543
4569
  }
4544
- function Qo(e) {
4545
- let t = Zo(e.userMsg);
4546
- for (let n of e.assistantMsgs) t += Zo(n);
4570
+ function $o(e) {
4571
+ let t = Qo(e.userMsg);
4572
+ for (let n of e.assistantMsgs) t += Qo(n);
4547
4573
  return t;
4548
4574
  }
4549
- function $o(e, t) {
4575
+ function es(e, t) {
4550
4576
  return e.map((e) => {
4551
- let n = Vo(e.userMsg.content, 60) || "(空)", r = e.assistantMsgs[0] ? Vo(e.assistantMsgs[0].content, 80) : "(无回复)", i = e.assistantMsgs.flatMap((e) => (e.steps || []).map((e) => e.name)), a = i.length ? ` [工具: ${i.join(", ")}]` : "", o = "";
4577
+ let n = Ho(e.userMsg.content, 60) || "(空)", r = e.assistantMsgs[0] ? Ho(e.assistantMsgs[0].content, 80) : "(无回复)", i = e.assistantMsgs.flatMap((e) => (e.steps || []).map((e) => e.name)), a = i.length ? ` [工具: ${i.join(", ")}]` : "", o = "";
4552
4578
  if (t && t.size) {
4553
4579
  let n = [];
4554
- for (let r of e.assistantMsgs) for (let e of r.steps || []) e.name && t.has(e.name) && e.result && n.push(`${e.name}: ${Vo(e.result, 120)}`);
4580
+ for (let r of e.assistantMsgs) for (let e of r.steps || []) e.name && t.has(e.name) && e.result && n.push(`${e.name}: ${Ho(e.result, 120)}`);
4555
4581
  n.length && (o = `\n 字段提示: ${n.join(" | ")}`);
4556
4582
  }
4557
4583
  return `- 第${e.round}轮:${n} → ${r}${a}${o}`;
4558
4584
  }).join("\n");
4559
4585
  }
4560
- function es(e, t, n) {
4561
- let r = Xo(t);
4586
+ function ts(e, t, n) {
4587
+ let r = Zo(t);
4562
4588
  return r.length === 0 ? [] : e.map((e) => {
4563
- let t = (e.userMsg.content + " " + e.assistantMsgs.map((e) => e.content).join(" ") + " " + e.assistantMsgs.flatMap((e) => (e.steps || []).map((e) => Vo(e.result || "", 120))).join(" ")).toLowerCase(), n = 0;
4589
+ let t = (e.userMsg.content + " " + e.assistantMsgs.map((e) => e.content).join(" ") + " " + e.assistantMsgs.flatMap((e) => (e.steps || []).map((e) => Ho(e.result || "", 120))).join(" ")).toLowerCase(), n = 0;
4564
4590
  for (let e of r) t.includes(e) && n++;
4565
4591
  return {
4566
4592
  r: e,
@@ -4568,16 +4594,16 @@ function es(e, t, n) {
4568
4594
  };
4569
4595
  }).filter((e) => e.score > 0).sort((e, t) => t.score - e.score).slice(0, n).map((e) => e.r);
4570
4596
  }
4571
- var ts = 32e4, ns = 16e4;
4572
- function rs(e, t) {
4573
- return t == null ? e && e >= 32e4 ? ns : Infinity : t > 0 ? t : Infinity;
4574
- }
4597
+ var ns = 32e4, rs = 16e4;
4575
4598
  function is(e, t) {
4576
- return t.contextWindow && t.contextWindow > 0 ? e.reduce((e, t) => e + Qo(t), 0) > Math.min(t.contextWindow * (t.summaryThresholdRatio ?? .5), rs(t.contextWindow, t.promptSoftCapTokens)) : e.length > (t.summaryThresholdRounds ?? 8);
4599
+ return t == null ? e && e >= 32e4 ? rs : Infinity : t > 0 ? t : Infinity;
4600
+ }
4601
+ function as(e, t) {
4602
+ return t.contextWindow && t.contextWindow > 0 ? e.reduce((e, t) => e + $o(t), 0) > Math.min(t.contextWindow * (t.summaryThresholdRatio ?? .5), is(t.contextWindow, t.promptSoftCapTokens)) : e.length > (t.summaryThresholdRounds ?? 8);
4577
4603
  }
4578
4604
  //#endregion
4579
4605
  //#region src/core/composables/useContextManager.ts
4580
- var as = {
4606
+ var os = {
4581
4607
  windowRounds: 6,
4582
4608
  summaryThresholdRounds: 8,
4583
4609
  toolResultMaxChars: 800,
@@ -4585,9 +4611,9 @@ var as = {
4585
4611
  recallTopK: 3,
4586
4612
  enableLLMSummary: !1
4587
4613
  };
4588
- function os(e = {}) {
4614
+ function ss(e = {}) {
4589
4615
  let t = {
4590
- ...as,
4616
+ ...os,
4591
4617
  ...e
4592
4618
  }, n = null, r = !1;
4593
4619
  function i(e, i) {
@@ -4601,13 +4627,13 @@ function os(e = {}) {
4601
4627
  }));
4602
4628
  }
4603
4629
  async function a(e, r) {
4604
- let a = Bo(e), o = e.length, s = "";
4630
+ let a = Vo(e), o = e.length, s = "";
4605
4631
  if (a.length) {
4606
4632
  let t = a[0].startIdx;
4607
4633
  for (let n = 0; n < t; n++) {
4608
4634
  let t = e[n];
4609
4635
  if (t.role === "system") {
4610
- let e = Go(t.content);
4636
+ let e = Ko(t.content);
4611
4637
  if (e) {
4612
4638
  s = e.body;
4613
4639
  break;
@@ -4627,11 +4653,11 @@ function os(e = {}) {
4627
4653
  strategy: t
4628
4654
  }
4629
4655
  });
4630
- if (!is(a, t)) return c("none");
4656
+ if (!as(a, t)) return c("none");
4631
4657
  let l, u, d;
4632
4658
  if (t.contextWindow && t.contextWindow > 0) {
4633
4659
  let e = t.contextWindow * (r?.windowRatio ?? t.windowRatio ?? .4), n = 0, i = 0;
4634
- for (let t = a.length - 1; t >= 0; t--) if (n += Qo(a[t]), n >= e) {
4660
+ for (let t = a.length - 1; t >= 0; t--) if (n += $o(a[t]), n >= e) {
4635
4661
  i = t + 1;
4636
4662
  break;
4637
4663
  }
@@ -4644,10 +4670,10 @@ function os(e = {}) {
4644
4670
  }
4645
4671
  let f = [...e].reverse().find((e) => e.role === "user")?.content || "", p = r?.summarize?.mode ?? (t.enableLLMSummary ? "llm" : "index"), m = /* @__PURE__ */ new Set([...t.preserveLastToolResults ?? [], ...r?.preserveTools ?? []]), h = m.size ? m : void 0, g, _;
4646
4672
  if (p === "llm" && t.llmInvoke) {
4647
- let e = $o(u, h), t = u.length;
4648
- n && n.coveredCount >= t ? (g = n.text, _ = d + "llm_summary(cached)") : n && n.coveredCount > 0 ? (g = n.text + "\n" + $o(u.slice(n.coveredCount), h), _ = d + "llm_summary(prefix)+index_tail", i(t, e)) : (g = e, _ = d + "index_summary(llm_background)", i(t, e));
4649
- } else g = $o(u, h), _ = d + "index_summary";
4650
- let v = r?.recallTopK == null ? t.enableRecall ? t.recallTopK : 0 : r.recallTopK, y = v > 0 ? es(u, f, v) : [], b = y.length ? y.map((e) => `- 第${e.round}轮:${Vo(e.userMsg.content, 60)} → ${e.assistantMsgs[0] ? Vo(e.assistantMsgs[0].content, 80) : ""}`).join("\n") : "", x = s ? `${g}\n【更早累积摘要】\n${s}` : g, S = [`【对话历史摘要】以下是之前 ${u.length} 轮对话的要点(最新 ${l.length} 轮已完整保留):`, x];
4673
+ let e = es(u, h), t = u.length;
4674
+ n && n.coveredCount >= t ? (g = n.text, _ = d + "llm_summary(cached)") : n && n.coveredCount > 0 ? (g = n.text + "\n" + es(u.slice(n.coveredCount), h), _ = d + "llm_summary(prefix)+index_tail", i(t, e)) : (g = e, _ = d + "index_summary(llm_background)", i(t, e));
4675
+ } else g = es(u, h), _ = d + "index_summary";
4676
+ let v = r?.recallTopK == null ? t.enableRecall ? t.recallTopK : 0 : r.recallTopK, y = v > 0 ? ts(u, f, v) : [], b = y.length ? y.map((e) => `- 第${e.round}轮:${Ho(e.userMsg.content, 60)} → ${e.assistantMsgs[0] ? Ho(e.assistantMsgs[0].content, 80) : ""}`).join("\n") : "", x = s ? `${g}\n【更早累积摘要】\n${s}` : g, S = [`【对话历史摘要】以下是之前 ${u.length} 轮对话的要点(最新 ${l.length} 轮已完整保留):`, x];
4651
4677
  if (r) {
4652
4678
  let e = t.contextWindow && t.contextWindow > 0 ? `windowRatio=${r.windowRatio ?? t.windowRatio}` : `keepRounds=${r.keepRounds ?? t.windowRounds}`;
4653
4679
  S.push(`\n(压缩决策:${e} · 摘要=${r.summarize.mode} · 召回=${v}${r.reason ? " · " + r.reason : ""})`);
@@ -4689,16 +4715,16 @@ function os(e = {}) {
4689
4715
  }
4690
4716
  //#endregion
4691
4717
  //#region src/core/harness/summarization.ts
4692
- function ss(e = {}) {
4693
- let t = os(e);
4718
+ function cs(e = {}) {
4719
+ let t = ss(e);
4694
4720
  return Object.assign({
4695
4721
  name: "summarization",
4696
4722
  compressInput: async (n) => {
4697
4723
  let r;
4698
4724
  if (e.decideInvoke) {
4699
- let i = Bo(n);
4700
- if (is(i, t.config)) {
4701
- let a = t.config.contextWindow && t.config.contextWindow > 0 ? "token" : "rounds", o = a === "token" ? `历史 token 超阈值 ${Math.round(Math.min((t.config.contextWindow ?? 0) * (t.config.summaryThresholdRatio ?? .5), rs(t.config.contextWindow, t.config.promptSoftCapTokens)))}` : `轮数 ${i.length} 超阈值 ${t.config.summaryThresholdRounds}`;
4725
+ let i = Vo(n);
4726
+ if (as(i, t.config)) {
4727
+ let a = t.config.contextWindow && t.config.contextWindow > 0 ? "token" : "rounds", o = a === "token" ? `历史 token 超阈值 ${Math.round(Math.min((t.config.contextWindow ?? 0) * (t.config.summaryThresholdRatio ?? .5), is(t.config.contextWindow, t.config.promptSoftCapTokens)))}` : `轮数 ${i.length} 超阈值 ${t.config.summaryThresholdRounds}`;
4702
4728
  try {
4703
4729
  r = await e.decideInvoke({
4704
4730
  getMessages: () => n,
@@ -4725,7 +4751,7 @@ function ss(e = {}) {
4725
4751
  }
4726
4752
  //#endregion
4727
4753
  //#region src/core/harness/subagent.ts
4728
- function cs(e = 20) {
4754
+ function ls(e = 20) {
4729
4755
  let t = /* @__PURE__ */ new Map(), n = [];
4730
4756
  return {
4731
4757
  start(e, n, r, i) {
@@ -4754,17 +4780,17 @@ function cs(e = 20) {
4754
4780
  }
4755
4781
  };
4756
4782
  }
4757
- function ls(e) {
4783
+ function us(e) {
4758
4784
  return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
4759
4785
  }
4760
- var us = [
4786
+ var ds = [
4761
4787
  "describe_data",
4762
4788
  "get_data",
4763
4789
  "read",
4764
4790
  "query_data",
4765
4791
  "search_data",
4766
4792
  "fetch_document"
4767
- ], ds = 1, fs = 4, ps = 6, ms = ["spawn_agent", "spawn_agents"], hs = [
4793
+ ], fs = 1, ps = 4, ms = 6, hs = ["spawn_agent", "spawn_agents"], gs = [
4768
4794
  "load_skill",
4769
4795
  "write_todos",
4770
4796
  "update_todo",
@@ -4775,40 +4801,40 @@ var us = [
4775
4801
  "remove_focus",
4776
4802
  "clear_focus"
4777
4803
  ];
4778
- function gs(e) {
4779
- return ms.includes(e) || hs.includes(e) || e.startsWith("use_");
4804
+ function _s(e) {
4805
+ return hs.includes(e) || gs.includes(e) || e.startsWith("use_");
4780
4806
  }
4781
- function _s(e, t, n = []) {
4782
- return [...e.filter((e) => t.has(e.name) && !gs(e.name)), ...n];
4807
+ function vs(e, t, n = []) {
4808
+ return [...e.filter((e) => t.has(e.name) && !_s(e.name)), ...n];
4783
4809
  }
4784
- var vs = [
4810
+ var ys = [
4785
4811
  "write",
4786
4812
  "set_data",
4787
4813
  "edit_data",
4788
4814
  "delete_data",
4789
4815
  "draft_commit"
4790
4816
  ];
4791
- function ys(e) {
4817
+ function bs(e) {
4792
4818
  let t = [];
4793
4819
  if (typeof e.jsonPath == "string" && e.jsonPath && t.push(e.jsonPath), typeof e.path == "string" && e.path && t.push(e.path), e.patch && typeof e.patch.jsonPath == "string" && t.push(e.patch.jsonPath), Array.isArray(e.patches)) for (let n of e.patches) n && typeof n.jsonPath == "string" && t.push(n.jsonPath);
4794
4820
  return t;
4795
4821
  }
4796
- function bs(e, t) {
4822
+ function xs(e, t) {
4797
4823
  return t.some((t) => e === t || e.startsWith(t + ".") || e.startsWith(t + "["));
4798
4824
  }
4799
- function xs(e, t) {
4825
+ function Ss(e, t) {
4800
4826
  let n = e.invoke.bind(e), r = async (e) => {
4801
4827
  if (Array.isArray(e?.patches) && e.patches.some((e) => !e || typeof e.jsonPath != "string" || !e.jsonPath)) return `PATH_OUT_OF_SCOPE:patches 含无 jsonPath 项(作用于根),子 agent 仅可写 ${t.join(", ")} 范围内子路径。请为每个 patch 指定 jsonPath。`;
4802
- let r = ys(e);
4828
+ let r = bs(e);
4803
4829
  if (!r.length) return `PATH_OUT_OF_SCOPE:子 agent 仅可增量 patch(writablePaths: ${t.join(", ")}),不能整体替换(无 jsonPath)。用 write({patch:{jsonPath,...}}) 增量改。`;
4804
- for (let e of r) if (!bs(e, t)) return `PATH_OUT_OF_SCOPE:子 agent 写 "${e}" 越界(仅可写 ${t.join(", ")})。`;
4830
+ for (let e of r) if (!xs(e, t)) return `PATH_OUT_OF_SCOPE:子 agent 写 "${e}" 越界(仅可写 ${t.join(", ")})。`;
4805
4831
  return n(e);
4806
4832
  };
4807
4833
  return new Proxy(e, { get(e, t, n) {
4808
4834
  return t === "invoke" ? r : Reflect.get(e, t, n);
4809
4835
  } });
4810
4836
  }
4811
- function Ss(e, t, n) {
4837
+ function Cs(e, t, n) {
4812
4838
  return new Proxy(e, { get(e, r, i) {
4813
4839
  return r === "invoke" ? async (r, i) => {
4814
4840
  let a = n(t);
@@ -4826,19 +4852,19 @@ function Ss(e, t, n) {
4826
4852
  } : Reflect.get(e, r, i);
4827
4853
  } });
4828
4854
  }
4829
- async function Cs(e, t, n, r, i, a) {
4830
- let o = t.depth ?? 0, s = t.maxDepth ?? ds, c = /* @__PURE__ */ new Set([...us, ...t.allowedTools ?? []]), l = () => typeof t.allTools == "function" ? t.allTools() : t.allTools, u = _s(l(), c, t.extraTools ?? []);
4855
+ async function ws(e, t, n, r, i, a) {
4856
+ let o = t.depth ?? 0, s = t.maxDepth ?? fs, c = /* @__PURE__ */ new Set([...ds, ...t.allowedTools ?? []]), l = () => typeof t.allTools == "function" ? t.allTools() : t.allTools, u = vs(l(), c, t.extraTools ?? []);
4831
4857
  if (t.writablePaths?.length) {
4832
- u = u.filter((e) => !vs.includes(e.name));
4833
- let e = l().filter((e) => vs.includes(e.name) && !gs(e.name)).map((e) => xs(e, t.writablePaths));
4858
+ u = u.filter((e) => !ys.includes(e.name));
4859
+ let e = l().filter((e) => ys.includes(e.name) && !_s(e.name)).map((e) => Ss(e, t.writablePaths));
4834
4860
  u = [...u, ...e];
4835
4861
  }
4836
4862
  let d = `sub-${o}-${Math.random().toString(36).slice(2, 10)}`;
4837
- t.enterDataScope && (u = u.map((e) => e.__dataOpsScoped ? Ss(e, d, t.enterDataScope) : e));
4838
- let f = o + 1 < s ? [ws({
4863
+ t.enterDataScope && (u = u.map((e) => e.__dataOpsScoped ? Cs(e, d, t.enterDataScope) : e));
4864
+ let f = o + 1 < s ? [Ts({
4839
4865
  ...t,
4840
4866
  depth: o + 1
4841
- })] : [], p = t.getFocuses?.() ?? [], m = p.length ? Xa({
4867
+ })] : [], p = t.getFocuses?.() ?? [], m = p.length ? Za({
4842
4868
  getSchema: t.getSchema ?? (() => null),
4843
4869
  getBind: t.getBind,
4844
4870
  initialFocuses: p,
@@ -4847,12 +4873,12 @@ async function Cs(e, t, n, r, i, a) {
4847
4873
  name: "vfs-bridge",
4848
4874
  beforeAgent: () => ({ files: t.getVfsFiles() })
4849
4875
  } : void 0, g = ai({
4850
- model: ls(t.llm) ? t.llm.model ?? t.llm.modelName : e.model ?? t.llm.model,
4876
+ model: us(t.llm) ? t.llm.model ?? t.llm.modelName : e.model ?? t.llm.model,
4851
4877
  contextWindow: t.llm.contextWindow,
4852
4878
  maxOutputTokens: t.llm.maxOutputTokens
4853
4879
  });
4854
4880
  if (g.contextWindow < 2e5) throw Error(`[page-agent-sdk][subagent] 子 agent 模型上下文窗口 ${g.contextWindow} 小于最小支持 ${ii}(需 ≥200K 窗口模型)`);
4855
- let _ = t.summarization === void 0 ? void 0 : ss(typeof t.summarization == "object" ? {
4881
+ let _ = t.summarization === void 0 ? void 0 : cs(typeof t.summarization == "object" ? {
4856
4882
  contextWindow: g.contextWindow,
4857
4883
  ...t.summarization
4858
4884
  } : { contextWindow: g.contextWindow }), y = t.onUsage ? {
@@ -4864,7 +4890,7 @@ async function Cs(e, t, n, r, i, a) {
4864
4890
  } : void 0, b = Ui({
4865
4891
  contextWindow: g.contextWindow,
4866
4892
  maxOutputTokens: g.maxOutputTokens,
4867
- ...ls(t.llm) ? { llm: t.llm } : {
4893
+ ...us(t.llm) ? { llm: t.llm } : {
4868
4894
  apiKey: t.llm.apiKey,
4869
4895
  baseUrl: t.llm.baseUrl,
4870
4896
  model: e.model ?? t.llm.model,
@@ -4876,7 +4902,7 @@ async function Cs(e, t, n, r, i, a) {
4876
4902
  systemPrompt: e.role?.trim() || t.systemPrompt || "你是一个专注的子任务执行者。你只有只读工具(读主数据 / 抓文档),用它们完成给定任务,给出简洁结论,不要展开多余解释。",
4877
4903
  tools: u,
4878
4904
  middleware: [
4879
- ...t.skills?.length ? [yo(t.skills)] : [],
4905
+ ...t.skills?.length ? [bo(t.skills)] : [],
4880
4906
  ..._ ? [_] : [],
4881
4907
  ...h ? [h] : [],
4882
4908
  ...f,
@@ -4885,7 +4911,7 @@ async function Cs(e, t, n, r, i, a) {
4885
4911
  ...t.guardMiddleware ?? [],
4886
4912
  ...t.middleware ?? []
4887
4913
  ],
4888
- maxToolRounds: t.maxToolRounds ?? ps,
4914
+ maxToolRounds: t.maxToolRounds ?? ms,
4889
4915
  maxVerifyAttempts: t.maxVerifyAttempts ?? 0,
4890
4916
  onLog: i,
4891
4917
  debug: t.debug
@@ -4923,8 +4949,8 @@ async function Cs(e, t, n, r, i, a) {
4923
4949
  clearTimeout(T), C();
4924
4950
  }
4925
4951
  }
4926
- function ws(e) {
4927
- let n = e.maxParallel ?? fs, i, a, o, s = (e) => e?.configurable?.__pgSubagentCall ?? {
4952
+ function Ts(e) {
4953
+ let n = e.maxParallel ?? ps, i, a, o, s = (e) => e?.configurable?.__pgSubagentCall ?? {
4928
4954
  signal: i,
4929
4955
  emit: a,
4930
4956
  logSink: o
@@ -4958,7 +4984,7 @@ function ws(e) {
4958
4984
  return {
4959
4985
  name: "subagent",
4960
4986
  tools: [r(async ({ prompt: t, role: n, tools: r, writablePaths: i, model: a }, o) => {
4961
- let l = s(o), u = (r ?? []).filter((e) => !vs.includes(e)), d = u.length || i?.length ? {
4987
+ let l = s(o), u = (r ?? []).filter((e) => !ys.includes(e)), d = u.length || i?.length ? {
4962
4988
  ...e,
4963
4989
  ...u.length ? { allowedTools: u } : {},
4964
4990
  ...i?.length ? { writablePaths: i } : {}
@@ -4968,7 +4994,7 @@ function ws(e) {
4968
4994
  }), h = Date.now();
4969
4995
  e.tracker?.start(f, t, p, h);
4970
4996
  try {
4971
- let r = await Cs({
4997
+ let r = await ws({
4972
4998
  prompt: t,
4973
4999
  role: n,
4974
5000
  model: a
@@ -4996,7 +5022,7 @@ function ws(e) {
4996
5022
  }), s = Date.now();
4997
5023
  e.tracker?.start(r, t.prompt, a, s);
4998
5024
  try {
4999
- let n = await Cs(t, e, i.signal, c(r, a, i.emit), o, i.emit);
5025
+ let n = await ws(t, e, i.signal, c(r, a, i.emit), o, i.emit);
5000
5026
  return e.tracker?.finish(r, "done", n ?? "(未完成)"), {
5001
5027
  ok: !0,
5002
5028
  text: n ?? "(未完成)"
@@ -5027,8 +5053,8 @@ function ws(e) {
5027
5053
  }, t(e))
5028
5054
  };
5029
5055
  }
5030
- var Ts = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
5031
- function Es(e, t) {
5056
+ var Es = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
5057
+ function Ds(e, t) {
5032
5058
  let n = e.tools ?? [];
5033
5059
  return {
5034
5060
  llm: e.llm ?? t.llm,
@@ -5056,7 +5082,7 @@ function Es(e, t) {
5056
5082
  ...t.timeoutMs === void 0 ? {} : { timeoutMs: t.timeoutMs }
5057
5083
  };
5058
5084
  }
5059
- function Ds(e, n) {
5085
+ function Os(e, n) {
5060
5086
  let i, a, o, s = (e) => e?.configurable?.__pgSubagentCall ?? {
5061
5087
  signal: i,
5062
5088
  emit: a,
@@ -5087,7 +5113,7 @@ function Ds(e, n) {
5087
5113
  function f(e) {
5088
5114
  let i = /* @__PURE__ */ new Set(), a = [], o = [];
5089
5115
  for (let l of e) {
5090
- if (!Ts.test(l.id)) {
5116
+ if (!Es.test(l.id)) {
5091
5117
  console.warn(`[subagents] id "${l.id}" 非合法工具名(须 [a-zA-Z_][a-zA-Z0-9_]*),已跳过`);
5092
5118
  continue;
5093
5119
  }
@@ -5097,7 +5123,7 @@ function Ds(e, n) {
5097
5123
  continue;
5098
5124
  }
5099
5125
  i.add(e), a.push(l), o.push(r(async ({ task: e }, t) => {
5100
- let r = s(t), i = Es(l, n), a = (e) => r.logSink?.({
5126
+ let r = s(t), i = Ds(l, n), a = (e) => r.logSink?.({
5101
5127
  ...e,
5102
5128
  source: `子:${l.id}`
5103
5129
  }), o = n.tracker, u = o ? `use_${l.id}-${Math.random().toString(36).slice(2, 6)}` : `use_${l.id}`, d = c(`use_${l.id}`, l.id, r.emit), f = o ? (e) => {
@@ -5109,7 +5135,7 @@ function Ds(e, n) {
5109
5135
  } : d, p = Date.now();
5110
5136
  o?.start(u, e, l.id, p);
5111
5137
  try {
5112
- let t = await Cs({ prompt: e }, i, r.signal, f, a, r.emit);
5138
+ let t = await ws({ prompt: e }, i, r.signal, f, a, r.emit);
5113
5139
  return o?.finish(u, "done", t), t;
5114
5140
  } catch (e) {
5115
5141
  throw o?.finish(u, "error", String(e?.message ?? e)), e;
@@ -5177,7 +5203,7 @@ function Ds(e, n) {
5177
5203
  }
5178
5204
  //#endregion
5179
5205
  //#region src/core/harness/verify.ts
5180
- function Os(e) {
5206
+ function ks(e) {
5181
5207
  return {
5182
5208
  name: "verify",
5183
5209
  async beforeReturn({ messages: t, state: n, log: r }) {
@@ -5189,10 +5215,10 @@ function Os(e) {
5189
5215
  if (e.adversarial) {
5190
5216
  r?.("middleware", {
5191
5217
  stage: "adversarial_start",
5192
- model: Is(e.adversarial.llm),
5218
+ model: Ls(e.adversarial.llm),
5193
5219
  tools: (e.adversarial.tools ?? []).length
5194
5220
  });
5195
- let n = await Bs(t, e.adversarial.llm, r, e.adversarial.tools);
5221
+ let n = await Vs(t, e.adversarial.llm, r, e.adversarial.tools);
5196
5222
  if (r?.("middleware", {
5197
5223
  stage: "adversarial_done",
5198
5224
  clean: n === null,
@@ -5203,18 +5229,18 @@ function Os(e) {
5203
5229
  }
5204
5230
  };
5205
5231
  }
5206
- var ks = /* @__PURE__ */ new Set([
5232
+ var As = /* @__PURE__ */ new Set([
5207
5233
  "set_data",
5208
5234
  "edit_data",
5209
5235
  "delete_data",
5210
5236
  "write"
5211
- ]), As = /校验失败|SCHEMA_INVALID|未注册|不存在|仅支持|必须是|NOT_OBJECT|PATH_UNSAFE|VERSION_CONFLICT|WRITE_INTERCEPT/;
5212
- function js(e) {
5237
+ ]), js = /校验失败|SCHEMA_INVALID|未注册|不存在|仅支持|必须是|NOT_OBJECT|PATH_UNSAFE|VERSION_CONFLICT|WRITE_INTERCEPT/;
5238
+ function Ms(e) {
5213
5239
  let t = /* @__PURE__ */ new Map();
5214
5240
  for (let n of e) {
5215
5241
  let e = n?.tool_calls;
5216
5242
  if (Array.isArray(e)) for (let n of e) {
5217
- if (!ks.has(n.name)) continue;
5243
+ if (!As.has(n.name)) continue;
5218
5244
  let e = n.id, r = n?.args ?? {};
5219
5245
  if (n.name === "write") if (r.del && r.patch?.jsonPath) t.set(r.patch.jsonPath, {
5220
5246
  path: r.patch.jsonPath,
@@ -5253,7 +5279,7 @@ function js(e) {
5253
5279
  }
5254
5280
  return [...t.values()];
5255
5281
  }
5256
- function Ms(e) {
5282
+ function Ns(e) {
5257
5283
  let t = /* @__PURE__ */ new Map();
5258
5284
  for (let n of e) {
5259
5285
  let e = n?.tool_call_id, r = n?.content;
@@ -5261,7 +5287,7 @@ function Ms(e) {
5261
5287
  }
5262
5288
  return t;
5263
5289
  }
5264
- function Ns(e, t) {
5290
+ function Ps(e, t) {
5265
5291
  if (t === "") return e;
5266
5292
  if (e == null) return;
5267
5293
  let n = e;
@@ -5271,16 +5297,16 @@ function Ns(e, t) {
5271
5297
  }
5272
5298
  return n;
5273
5299
  }
5274
- function Ps(e = {}) {
5300
+ function Fs(e = {}) {
5275
5301
  let t = typeof e.root == "function" ? e.root : e.root === void 0 ? () => e.window ?? globalThis.window : () => e.root, n = typeof e.schemas == "function" ? e.schemas : () => e.schemas ?? {};
5276
5302
  return async ({ messages: e }) => {
5277
- let r = js(e);
5303
+ let r = Ms(e);
5278
5304
  if (!r.length) return { ok: !0 };
5279
- let i = Ms(e), a = n()[""], o = t(), s = [];
5305
+ let i = Ns(e), a = n()[""], o = t(), s = [];
5280
5306
  for (let { path: e, op: t, callId: n } of r) {
5281
5307
  let r = n ? i.get(n) : void 0;
5282
- if (r && As.test(r)) continue;
5283
- let c = Ns(o, e);
5308
+ if (r && js.test(r)) continue;
5309
+ let c = Ps(o, e);
5284
5310
  if (t === "delete_data") c !== void 0 && s.push(`${e} 删除后读回仍有值,疑似未生效`);
5285
5311
  else if (c == null) s.push(`写入 ${e} 后读回为空,疑似未生效`);
5286
5312
  else if (a) {
@@ -5294,17 +5320,17 @@ function Ps(e = {}) {
5294
5320
  } : { ok: !0 };
5295
5321
  };
5296
5322
  }
5297
- function Fs(e) {
5298
- return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
5299
- }
5300
5323
  function Is(e) {
5301
- return Fs(e) ? e.model ?? e.modelName ?? "<实例>" : e.model ?? "<配置>";
5324
+ return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
5302
5325
  }
5303
- var Ls = /无问题|没有问题|未发现问题|没有发现|没问题|未发现/;
5304
- function Rs(e) {
5305
- return Ls.test(e);
5326
+ function Ls(e) {
5327
+ return Is(e) ? e.model ?? e.modelName ?? "<实例>" : e.model ?? "<配置>";
5306
5328
  }
5329
+ var Rs = /无问题|没有问题|未发现问题|没有发现|没问题|未发现/;
5307
5330
  function zs(e) {
5331
+ return Rs.test(e);
5332
+ }
5333
+ function Bs(e) {
5308
5334
  let t = "", n = "";
5309
5335
  for (let r of e) r instanceof a ? t = typeof r.content == "string" ? r.content : "" : r instanceof i && !(r.tool_calls?.length > 0) && (n = typeof r.content == "string" ? r.content : "");
5310
5336
  return {
@@ -5312,8 +5338,8 @@ function zs(e) {
5312
5338
  lastReply: n
5313
5339
  };
5314
5340
  }
5315
- async function Bs(e, t, n, r) {
5316
- let { lastUser: i, lastReply: a } = zs(e);
5341
+ async function Vs(e, t, n, r) {
5342
+ let { lastUser: i, lastReply: a } = Bs(e);
5317
5343
  if (!a) return null;
5318
5344
  let o = Array.isArray(r) && r.length > 0, s = [
5319
5345
  "你是严格的对抗式审查者,目标是找出以下 AI 助手回复的错误并证明它有问题(事实错误 / 遗漏 / 逻辑矛盾 / 与需求不符)。",
@@ -5324,7 +5350,7 @@ async function Bs(e, t, n, r) {
5324
5350
  ].join("\n"), c = "你是严格的对抗式审查者,只找问题不赞美。目标是反驳,不是改进。", l = n ? (e) => n(e.type, {
5325
5351
  ...e.data,
5326
5352
  source: "adversarial"
5327
- }) : void 0, u = await Ui(Fs(t) ? {
5353
+ }) : void 0, u = await Ui(Is(t) ? {
5328
5354
  llm: t,
5329
5355
  tools: r,
5330
5356
  maxToolRounds: o ? 4 : 1,
@@ -5349,11 +5375,11 @@ async function Bs(e, t, n, r) {
5349
5375
  stage: "adversarial_verdict",
5350
5376
  verdict: u,
5351
5377
  source: "adversarial"
5352
- }), Rs(u) ? null : u.trim();
5378
+ }), zs(u) ? null : u.trim();
5353
5379
  }
5354
5380
  //#endregion
5355
5381
  //#region src/core/utils/contextAnalysis.ts
5356
- var Vs = [
5382
+ var Hs = [
5357
5383
  {
5358
5384
  prefix: "## 可操作数据",
5359
5385
  key: "dataHint"
@@ -5382,7 +5408,7 @@ var Vs = [
5382
5408
  prefix: "【与当前问题可能相关的早期对话】",
5383
5409
  key: "recall"
5384
5410
  }
5385
- ], Hs = [
5411
+ ], Us = [
5386
5412
  {
5387
5413
  key: "systemPrompt",
5388
5414
  label: "系统提示词(身份/规则)"
@@ -5436,9 +5462,9 @@ var Vs = [
5436
5462
  label: "其他"
5437
5463
  }
5438
5464
  ];
5439
- function Us() {
5465
+ function Ws() {
5440
5466
  let e = {};
5441
- for (let t of Hs) e[t.key] = {
5467
+ for (let t of Us) e[t.key] = {
5442
5468
  key: t.key,
5443
5469
  label: t.label,
5444
5470
  tokens: 0,
@@ -5447,16 +5473,16 @@ function Us() {
5447
5473
  };
5448
5474
  return e;
5449
5475
  }
5450
- function Ws(e, t) {
5476
+ function Gs(e, t) {
5451
5477
  e.tokens += t, e.msgCount += 1;
5452
5478
  }
5453
- function Gs(e) {
5479
+ function Ks(e) {
5454
5480
  let t = e.content;
5455
5481
  return typeof t == "string" ? t : JSON.stringify(t ?? "");
5456
5482
  }
5457
- function Ks(e, t) {
5483
+ function qs(e, t) {
5458
5484
  let n = [];
5459
- for (let t of Vs) {
5485
+ for (let t of Hs) {
5460
5486
  let r = 0;
5461
5487
  for (;;) {
5462
5488
  let i = e.indexOf(t.prefix, r);
@@ -5469,35 +5495,35 @@ function Ks(e, t) {
5469
5495
  }
5470
5496
  if (n.sort((e, t) => e.idx - t.idx), !n.length) {
5471
5497
  let n = e.trim();
5472
- n && Ws(t.systemPrompt, X(n));
5498
+ n && Gs(t.systemPrompt, X(n));
5473
5499
  return;
5474
5500
  }
5475
5501
  if (n[0].idx > 0) {
5476
5502
  let r = e.slice(0, n[0].idx).trim();
5477
- r && Ws(t.systemPrompt, X(r));
5503
+ r && Gs(t.systemPrompt, X(r));
5478
5504
  }
5479
5505
  for (let r = 0; r < n.length; r++) {
5480
5506
  let i = n[r].idx, a = r + 1 < n.length ? n[r + 1].idx : e.length, o = e.slice(i, a).trim();
5481
- o && Ws(t[n[r].key], X(o));
5507
+ o && Gs(t[n[r].key], X(o));
5482
5508
  }
5483
5509
  }
5484
- function qs(e, t = {}) {
5485
- let n = Us(), r = -1;
5510
+ function Js(e, t = {}) {
5511
+ let n = Ws(), r = -1;
5486
5512
  for (let t = e.length - 1; t >= 0; t--) if (e[t] instanceof a) {
5487
5513
  r = t;
5488
5514
  break;
5489
5515
  }
5490
5516
  for (let t = 0; t < e.length; t++) {
5491
5517
  let c = e[t];
5492
- if (c instanceof o) Ks(Gs(c), n);
5493
- else if (c instanceof a) Ws(n[t === r ? "current" : "history"], X(Gs(c)));
5518
+ if (c instanceof o) qs(Ks(c), n);
5519
+ else if (c instanceof a) Gs(n[t === r ? "current" : "history"], X(Ks(c)));
5494
5520
  else if (c instanceof i) {
5495
5521
  let e = c.tool_calls ?? [];
5496
5522
  if (e.length) {
5497
5523
  let t = e.map((e) => JSON.stringify(e.args ?? {})).join(" ");
5498
- Ws(n.toolResults, X(t));
5499
- } else Ws(n.assistant, X(Gs(c)));
5500
- } else c instanceof s ? Ws(n.toolResults, X(Gs(c))) : Ws(n.other, X(Gs(c)));
5524
+ Gs(n.toolResults, X(t));
5525
+ } else Gs(n.assistant, X(Ks(c)));
5526
+ } else c instanceof s ? Gs(n.toolResults, X(Ks(c))) : Gs(n.other, X(Ks(c)));
5501
5527
  }
5502
5528
  let c = Object.values(n).filter((e) => e.tokens > 0);
5503
5529
  c.sort((e, t) => t.tokens - e.tokens);
@@ -5514,12 +5540,12 @@ function qs(e, t = {}) {
5514
5540
  }
5515
5541
  //#endregion
5516
5542
  //#region src/core/harness/contextInspector.ts
5517
- function Js(e = {}) {
5543
+ function Ys(e = {}) {
5518
5544
  let t, n = e.contextWindow;
5519
5545
  return {
5520
5546
  name: "context-inspector",
5521
5547
  async wrapModelCall(r, i) {
5522
- return t = qs(r.messages, {
5548
+ return t = Js(r.messages, {
5523
5549
  contextWindow: n,
5524
5550
  thresholdRatio: e.thresholdRatio
5525
5551
  }), i(r);
@@ -5530,13 +5556,13 @@ function Js(e = {}) {
5530
5556
  }
5531
5557
  };
5532
5558
  }
5533
- function Ys(e) {
5559
+ function Xs(e) {
5534
5560
  let t = e?.content;
5535
5561
  if (!Array.isArray(t) || !t.length) return "";
5536
5562
  let n = t.map((e) => e.type === "text" && e.text ? e.text : e.type === "image" && e.data ? `[image:${String(e.data).slice(0, 32)}…]` : e.type === "audio" && e.data ? "[audio]" : e.type === "resource" && e.resource ? e.resource.text ?? e.resource.blob ?? "" : "").filter(Boolean).join("\n");
5537
5563
  return e?.isError ? `工具错误:${n}` : n;
5538
5564
  }
5539
- async function Xs(e) {
5565
+ async function Zs(e) {
5540
5566
  let t = new URL(e.url), n = e.requestInit;
5541
5567
  if (e.transport === "http") {
5542
5568
  let { StreamableHTTPClientTransport: e } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
@@ -5549,7 +5575,7 @@ async function Xs(e) {
5549
5575
  let { WebSocketClientTransport: r } = await import("@modelcontextprotocol/sdk/client/websocket.js");
5550
5576
  return new r(t);
5551
5577
  }
5552
- async function Zs(e, t, n) {
5578
+ async function Qs(e, t, n) {
5553
5579
  let r;
5554
5580
  try {
5555
5581
  return await Promise.race([e, new Promise((e, i) => {
@@ -5559,8 +5585,8 @@ async function Zs(e, t, n) {
5559
5585
  clearTimeout(r);
5560
5586
  }
5561
5587
  }
5562
- function Qs(e, t, n) {
5563
- return r(async (r) => Ys(await Zs(t.callTool({
5588
+ function $s(e, t, n) {
5589
+ return r(async (r) => Xs(await Qs(t.callTool({
5564
5590
  name: e.name,
5565
5591
  arguments: r
5566
5592
  }), e.name, n)), {
@@ -5569,8 +5595,8 @@ function Qs(e, t, n) {
5569
5595
  schema: e.inputSchema
5570
5596
  });
5571
5597
  }
5572
- async function $s(e) {
5573
- let { Client: t } = await import("@modelcontextprotocol/sdk/client"), n = await Xs(e), r = new t({
5598
+ async function ec(e) {
5599
+ let { Client: t } = await import("@modelcontextprotocol/sdk/client"), n = await Zs(e), r = new t({
5574
5600
  name: "page-agent-sdk",
5575
5601
  version: "1.0"
5576
5602
  }, { capabilities: {} }), i = e.timeoutMs ?? 15e3, a;
@@ -5588,70 +5614,70 @@ async function $s(e) {
5588
5614
  }
5589
5615
  let { tools: o } = await r.listTools();
5590
5616
  return {
5591
- tools: o.map((t) => Qs(t, r, e.callTimeoutMs ?? 6e4)),
5617
+ tools: o.map((t) => $s(t, r, e.callTimeoutMs ?? 6e4)),
5592
5618
  close: () => r.close()
5593
5619
  };
5594
5620
  }
5595
5621
  //#endregion
5596
5622
  //#region src/core/sdk/promptBuilder.ts
5597
- var ec = [
5623
+ var tc = [
5598
5624
  "你是一个 JSON 操作助手。集成方声明了一个主数据对象(含 zod schema 校验),你通过专用工具安全地读写它来完成任务。",
5599
5625
  "所有写操作都经范围控制(仅 schema 声明字段内)与 schema 校验(不合法会返回结构化错误而非写入),并自动留快照可回退。",
5600
5626
  "大对象/数组优先用增量 patch(只发改动)而非整体重传,避免输出被截断。",
5601
5627
  "---",
5602
5628
  ha.reliableWriteRules
5603
5629
  ].join("\n\n");
5604
- function tc(e, t) {
5630
+ function nc(e, t) {
5605
5631
  if (!e) return "";
5606
5632
  let n = ya(e.schema, t);
5607
5633
  return `\n\n## 可操作数据(字段以 read 工具返回的实际值为准)\n${e.description ? e.description + "\n" : ""}${n}`;
5608
5634
  }
5609
- function nc(e) {
5635
+ function rc(e) {
5610
5636
  let t = e.appendReliableWriteRules !== !1;
5611
- return e.systemPrompt ? t ? e.systemPrompt + "\n\n---\n\n" + ha.reliableWriteRules : e.systemPrompt : ec;
5637
+ return e.systemPrompt ? t ? e.systemPrompt + "\n\n---\n\n" + ha.reliableWriteRules : e.systemPrompt : tc;
5612
5638
  }
5613
- var rc = {
5639
+ var ic = {
5614
5640
  largeResults: 4 * 1024 * 1024,
5615
5641
  drafts: 2 * 1024 * 1024,
5616
5642
  userFiles: 2 * 1024 * 1024,
5617
5643
  resources: 4 * 1024 * 1024
5618
- }, ic = [
5644
+ }, ac = [
5619
5645
  "largeResults",
5620
5646
  "drafts",
5621
5647
  "userFiles",
5622
5648
  "resources"
5623
- ], ac = .9;
5624
- function oc(e, t = {}) {
5649
+ ], oc = .9;
5650
+ function sc(e, t = {}) {
5625
5651
  let n = Object.create(null);
5626
- if (e) for (let [t, r] of Object.entries(e)) n[uc(t)] = {
5652
+ if (e) for (let [t, r] of Object.entries(e)) n[dc(t)] = {
5627
5653
  content: r,
5628
- updatedAt: fc()
5654
+ updatedAt: pc()
5629
5655
  };
5630
5656
  let { persist: r } = t, i = t.maxBytes ?? 8388608, a = {
5631
- ...rc,
5657
+ ...ic,
5632
5658
  ...t.poolBytes ?? {}
5633
5659
  };
5634
5660
  function o(e) {
5635
- let t = uc(e);
5661
+ let t = dc(e);
5636
5662
  return t.startsWith("large_results/") ? "largeResults" : t.startsWith("drafts/") ? "drafts" : t.startsWith("resources/") ? "resources" : "userFiles";
5637
5663
  }
5638
5664
  function s(e) {
5639
5665
  let t = 0;
5640
- for (let [r, i] of Object.entries(n)) o(r) === e && (t += cc(i.content));
5666
+ for (let [r, i] of Object.entries(n)) o(r) === e && (t += lc(i.content));
5641
5667
  return t;
5642
5668
  }
5643
5669
  function c() {
5644
- for (let e of ic) {
5670
+ for (let e of ac) {
5645
5671
  let t = a[e];
5646
5672
  if (s(e) <= t) continue;
5647
- let r = t * ac, i = e === "largeResults", c = i && s(e) > t * 1.5;
5673
+ let r = t * oc, i = e === "largeResults", c = i && s(e) > t * 1.5;
5648
5674
  c && console.warn(`[page-agent-sdk] vfs large_results 池 ${s(e)} > ${Math.round(t * 1.5)}(被引用撑爆)→ 无视 protectedRefs 强制删`);
5649
5675
  let l = Object.entries(n).filter(([t]) => o(t) === e).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
5650
5676
  for (let [t] of l) if (!(i && !c && u.has(t)) && (delete n[t], s(e) <= r)) break;
5651
5677
  }
5652
- if (lc(n) > i) {
5653
- let e = i * ac, t = lc(n) > i * 1.5, r = Object.entries(n).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
5654
- for (let [i] of r) if (!(o(i) === "largeResults" && !t && u.has(i)) && (delete n[i], lc(n) <= e)) break;
5678
+ if (uc(n) > i) {
5679
+ let e = i * oc, t = uc(n) > i * 1.5, r = Object.entries(n).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
5680
+ for (let [i] of r) if (!(o(i) === "largeResults" && !t && u.has(i)) && (delete n[i], uc(n) <= e)) break;
5655
5681
  }
5656
5682
  }
5657
5683
  let l = !0, u = /* @__PURE__ */ new Set(), d = null;
@@ -5687,7 +5713,7 @@ function oc(e, t = {}) {
5687
5713
  }
5688
5714
  };
5689
5715
  return r && (m.hydrate = (e) => {
5690
- for (let [t, r] of Object.entries(e)) n[uc(t)] = r;
5716
+ for (let [t, r] of Object.entries(e)) n[dc(t)] = r;
5691
5717
  c(), l = !0;
5692
5718
  }, m.flush = () => {
5693
5719
  d &&= (clearTimeout(d), null), f();
@@ -5696,19 +5722,19 @@ function oc(e, t = {}) {
5696
5722
  p(), l = !0;
5697
5723
  }), m;
5698
5724
  }
5699
- var sc = null;
5700
- function cc(e) {
5701
- return sc ||= new TextEncoder(), sc.encode(e).length;
5702
- }
5725
+ var cc = null;
5703
5726
  function lc(e) {
5727
+ return cc ||= new TextEncoder(), cc.encode(e).length;
5728
+ }
5729
+ function uc(e) {
5704
5730
  let t = 0;
5705
- for (let n of Object.values(e)) t += cc(n.content);
5731
+ for (let n of Object.values(e)) t += lc(n.content);
5706
5732
  return t;
5707
5733
  }
5708
- function uc(e) {
5734
+ function dc(e) {
5709
5735
  return e.replace(/^\/+/, "").replace(/\/+/g, "/");
5710
5736
  }
5711
- function dc(e) {
5737
+ function fc(e) {
5712
5738
  let t = "";
5713
5739
  for (let n = 0; n < e.length; n++) {
5714
5740
  let r = e[n];
@@ -5716,10 +5742,10 @@ function dc(e) {
5716
5742
  }
5717
5743
  return RegExp("^" + t + "$");
5718
5744
  }
5719
- function fc() {
5745
+ function pc() {
5720
5746
  return Date.now();
5721
5747
  }
5722
- var pc = [
5748
+ var mc = [
5723
5749
  "vfs_read",
5724
5750
  "vfs_write",
5725
5751
  "vfs_edit",
@@ -5730,10 +5756,10 @@ var pc = [
5730
5756
  "vfs_json_patch",
5731
5757
  "vfs_rm"
5732
5758
  ];
5733
- function mc(e) {
5759
+ function hc(e) {
5734
5760
  return [
5735
5761
  r(async ({ path: t, offset: n, limit: r }) => {
5736
- let i = e.files[uc(t)];
5762
+ let i = e.files[dc(t)];
5737
5763
  if (!i) return Y({
5738
5764
  code: "NOT_FOUND",
5739
5765
  path: t,
@@ -5762,9 +5788,9 @@ function mc(e) {
5762
5788
  hint: "jsonString=true 要求 content 是合法 JSON;检查引号/逗号/括号配对;或省略 jsonString 写纯文本"
5763
5789
  });
5764
5790
  }
5765
- return e.files[uc(t)] = {
5791
+ return e.files[dc(t)] = {
5766
5792
  content: n,
5767
- updatedAt: fc()
5793
+ updatedAt: pc()
5768
5794
  }, `已写入 ${t}(${n.length} 字符)${r ? "(JSON 校验通过)" : ""}`;
5769
5795
  }, {
5770
5796
  name: "vfs_write",
@@ -5776,7 +5802,7 @@ function mc(e) {
5776
5802
  })
5777
5803
  }),
5778
5804
  r(async ({ path: t, oldString: n, newString: r }) => {
5779
- let i = uc(t), a = e.files[i];
5805
+ let i = dc(t), a = e.files[i];
5780
5806
  if (!a) return Y({
5781
5807
  code: "NOT_FOUND",
5782
5808
  path: t,
@@ -5806,7 +5832,7 @@ function mc(e) {
5806
5832
  }
5807
5833
  return e.files[i] = {
5808
5834
  content: a.content.replace(n, r),
5809
- updatedAt: fc()
5835
+ updatedAt: pc()
5810
5836
  }, `已替换 ${t} 中 1 处。`;
5811
5837
  }, {
5812
5838
  name: "vfs_edit",
@@ -5828,7 +5854,7 @@ function mc(e) {
5828
5854
  r(async ({ pattern: t }) => {
5829
5855
  let n;
5830
5856
  try {
5831
- n = dc(t);
5857
+ n = fc(t);
5832
5858
  } catch (e) {
5833
5859
  return Y({
5834
5860
  code: "GLOB_INVALID",
@@ -5857,7 +5883,7 @@ function mc(e) {
5857
5883
  details: { pattern: t }
5858
5884
  });
5859
5885
  }
5860
- let i = n ? [uc(n)] : Object.keys(e.files), a = [];
5886
+ let i = n ? [dc(n)] : Object.keys(e.files), a = [];
5861
5887
  for (let t of i) {
5862
5888
  let n = e.files[t];
5863
5889
  n && n.content.split("\n").forEach((e, n) => {
@@ -5874,7 +5900,7 @@ function mc(e) {
5874
5900
  })
5875
5901
  }),
5876
5902
  r(async ({ path: t, jsonPath: n }) => {
5877
- let r = uc(t), i = e.files[r];
5903
+ let r = dc(t), i = e.files[r];
5878
5904
  if (!i) return Y({
5879
5905
  code: "NOT_FOUND",
5880
5906
  path: t,
@@ -5911,7 +5937,7 @@ function mc(e) {
5911
5937
  })
5912
5938
  }),
5913
5939
  r(async ({ path: t, patches: n }) => {
5914
- let r = uc(t), i = e.files[r];
5940
+ let r = dc(t), i = e.files[r];
5915
5941
  if (!i) return Y({
5916
5942
  code: "NOT_FOUND",
5917
5943
  path: t,
@@ -5944,7 +5970,7 @@ function mc(e) {
5944
5970
  let c = JSON.stringify(o);
5945
5971
  return e.files[r] = {
5946
5972
  content: c,
5947
- updatedAt: fc()
5973
+ updatedAt: pc()
5948
5974
  }, `已对 ${t} 应用 ${n.length} 个 patch(影响 ${s.length} 处:${s.join(", ")}),文件现 ${c.length} 字符`;
5949
5975
  }, {
5950
5976
  name: "vfs_json_patch",
@@ -5964,7 +5990,7 @@ function mc(e) {
5964
5990
  })
5965
5991
  }),
5966
5992
  r(async ({ path: t }) => {
5967
- let n = uc(t);
5993
+ let n = dc(t);
5968
5994
  return e.files[n] ? (delete e.files[n], `已删除 ${t}`) : Y({
5969
5995
  code: "NOT_FOUND",
5970
5996
  path: t,
@@ -5978,16 +6004,16 @@ function mc(e) {
5978
6004
  })
5979
6005
  ];
5980
6006
  }
5981
- function hc(e) {
6007
+ function gc(e) {
5982
6008
  return {
5983
6009
  name: "vfs",
5984
- tools: mc(e),
6010
+ tools: hc(e),
5985
6011
  beforeAgent: () => ({ files: e.files })
5986
6012
  };
5987
6013
  }
5988
6014
  //#endregion
5989
6015
  //#region src/core/tools/htmlValidate.ts
5990
- var gc = /* @__PURE__ */ new Set([
6016
+ var _c = /* @__PURE__ */ new Set([
5991
6017
  "area",
5992
6018
  "base",
5993
6019
  "br",
@@ -6002,8 +6028,8 @@ var gc = /* @__PURE__ */ new Set([
6002
6028
  "source",
6003
6029
  "track",
6004
6030
  "wbr"
6005
- ]), _c = /* @__PURE__ */ new Set(["script", "style"]);
6006
- function vc(e) {
6031
+ ]), vc = /* @__PURE__ */ new Set(["script", "style"]);
6032
+ function yc(e) {
6007
6033
  let t = [], n = e.length;
6008
6034
  if (!e.trim()) return t;
6009
6035
  let r = [0];
@@ -6080,8 +6106,8 @@ function vc(e) {
6080
6106
  }
6081
6107
  continue;
6082
6108
  }
6083
- if (!(gc.has(p) || m)) {
6084
- if (_c.has(p)) {
6109
+ if (!(_c.has(p) || m)) {
6110
+ if (vc.has(p)) {
6085
6111
  let n = RegExp(`</${p}\\s*>`, "i").exec(e.slice(o));
6086
6112
  if (!n) {
6087
6113
  t.push({
@@ -6110,8 +6136,8 @@ function vc(e) {
6110
6136
  }
6111
6137
  //#endregion
6112
6138
  //#region src/core/sdk/codeAssetMiddleware.ts
6113
- var yc = "__pgTouched", bc = "__pgFinalText", xc = "__pgNotes", Sc = 200;
6114
- function Cc(e) {
6139
+ var bc = "__pgTouched", xc = "__pgFinalText", Sc = "__pgNotes", Cc = 200;
6140
+ function wc(e) {
6115
6141
  let t = [];
6116
6142
  for (let n of e.split("\n")) {
6117
6143
  let e = n.match(/^\s*[-*]?\s*\[note\]\s*(.*)$/i);
@@ -6119,16 +6145,16 @@ function Cc(e) {
6119
6145
  }
6120
6146
  return [...new Set(t)];
6121
6147
  }
6122
- function wc(e, t) {
6123
- let n = Array.isArray(e[xc]) ? e[xc].filter((e) => typeof e == "string") : [];
6124
- e[xc] = [.../* @__PURE__ */ new Set([...n, ...t])].map((e) => e.length > Sc ? e.slice(0, Sc) + "…" : e).slice(-5);
6125
- }
6126
6148
  function Tc(e, t) {
6149
+ let n = Array.isArray(e[Sc]) ? e[Sc].filter((e) => typeof e == "string") : [];
6150
+ e[Sc] = [.../* @__PURE__ */ new Set([...n, ...t])].map((e) => e.length > Cc ? e.slice(0, Cc) + "…" : e).slice(-5);
6151
+ }
6152
+ function Ec(e, t) {
6127
6153
  if (!e.startsWith(t)) return null;
6128
6154
  let n = e.slice(t.length), r = n.lastIndexOf(".");
6129
6155
  return (r > 0 ? n.slice(0, r) : r === 0 ? "" : n) || null;
6130
6156
  }
6131
- function Ec(e, t, n) {
6157
+ function Dc(e, t, n) {
6132
6158
  if (!(!e || typeof e != "object")) for (let r of t) {
6133
6159
  let t = Z(e, r);
6134
6160
  if (Array.isArray(t)) for (let e = 0; e < t.length; e++) {
@@ -6137,7 +6163,7 @@ function Ec(e, t, n) {
6137
6163
  }
6138
6164
  }
6139
6165
  }
6140
- function Dc(e, t, n) {
6166
+ function Oc(e, t, n) {
6141
6167
  let r = /* @__PURE__ */ new Set();
6142
6168
  if (!e || typeof e != "object") return r;
6143
6169
  for (let i of t) {
@@ -6156,13 +6182,13 @@ function Dc(e, t, n) {
6156
6182
  }
6157
6183
  return r;
6158
6184
  }
6159
- function Oc(e) {
6185
+ function kc(e) {
6160
6186
  let { writablePaths: t, codeVfsPrefix: n, ext: r, codeField: i = "code", onWarning: a, getController: o, vfsStore: s, craftNotes: c = !0 } = e;
6161
6187
  return {
6162
6188
  name: "code-asset-checkout-commit",
6163
6189
  beforeAgent: (e) => {
6164
6190
  let c = o()?.get?.().bind, l = 0, u = 0;
6165
- if (Ec(c, t, (e) => {
6191
+ if (Dc(c, t, (e) => {
6166
6192
  l++;
6167
6193
  let t = Z(e, i);
6168
6194
  if (typeof t == "string") {
@@ -6186,21 +6212,21 @@ function Oc(e) {
6186
6212
  }
6187
6213
  return {
6188
6214
  files: s.files,
6189
- [yc]: /* @__PURE__ */ new Set(),
6190
- [bc]: { text: "" }
6215
+ [bc]: /* @__PURE__ */ new Set(),
6216
+ [xc]: { text: "" }
6191
6217
  };
6192
6218
  },
6193
6219
  wrapModelCall: async (e, t) => {
6194
- let n = await t(e), r = e.state[bc];
6220
+ let n = await t(e), r = e.state[xc];
6195
6221
  return r && !(n.toolCalls && n.toolCalls.length) && typeof n.content == "string" && n.content && (r.text = n.content), n;
6196
6222
  },
6197
6223
  augmentPrompt: () => {
6198
6224
  let e = o()?.get?.().bind, i = [], a = 0;
6199
- if (Ec(e, t, (e, t, o) => {
6225
+ if (Dc(e, t, (e, t, o) => {
6200
6226
  a++;
6201
6227
  let l = typeof e.name == "string" && e.name ? e.name : "", u = l ? `${l} [${o}]` : `(未命名 [${o}])`, d = `${n}${e.__pgId}.${r}`, f = !!s.files[d];
6202
6228
  if (i.push(`- ${u} → ${d}${f ? "" : "(尚未检出,先 vfs_write 创建)"}`), c) {
6203
- let t = Array.isArray(e[xc]) ? e[xc].filter((e) => typeof e == "string") : [];
6229
+ let t = Array.isArray(e[Sc]) ? e[Sc].filter((e) => typeof e == "string") : [];
6204
6230
  if (t.length) {
6205
6231
  let e = t[t.length - 1];
6206
6232
  i.push(` 📝 笔记×${t.length}(最近):${e.length > 120 ? e.slice(0, 120) + "…" : e}`);
@@ -6218,13 +6244,13 @@ function Oc(e) {
6218
6244
  return `## 组件代码文件地图(改组件时按 name 直接改对应 vfs 文件;框架自动 checkout/commit)${c ? "\n📝 笔记 = 前任维护者交接(设计决策/用户反馈/踩坑),改该组件时遵循;收口回复末行必须附一行 [note] 交接笔记(本组件本次的实现要点),框架存进组件转交下任" : ""}\n${i.join("\n")}${l}`;
6219
6245
  },
6220
6246
  wrapToolCall: async (e, i) => {
6221
- let a = e.name === "vfs_write" || e.name === "vfs_edit" || e.name === "vfs_rm" ? e.args?.path : void 0, s = typeof a == "string" ? uc(a) : void 0, c = typeof s == "string" && s.startsWith(n);
6247
+ let a = e.name === "vfs_write" || e.name === "vfs_edit" || e.name === "vfs_rm" ? e.args?.path : void 0, s = typeof a == "string" ? dc(a) : void 0, c = typeof s == "string" && s.startsWith(n);
6222
6248
  if (c) {
6223
6249
  let i = e.state.focuses;
6224
6250
  if (i && i.length) {
6225
- let e = Dc(o()?.get?.().bind, t, i);
6251
+ let e = Oc(o()?.get?.().bind, t, i);
6226
6252
  if (e.size) {
6227
- let t = Tc(s, n);
6253
+ let t = Ec(s, n);
6228
6254
  if (t && !e.has(t)) return {
6229
6255
  content: `PATH_DENIED · vfs 越界:当前聚焦代码文件 [${[...e].map((e) => `${n}${e}.${r}`).join(", ")}],你要改的 "${s}" 不在其中。请只改焦点组件的代码文件;如需改其他组件,请在收口回复中说明需先取消聚焦(焦点由主会话/用户管理,你无 focus 工具)后重试。`,
6230
6256
  status: "error"
@@ -6234,7 +6260,7 @@ function Oc(e) {
6234
6260
  }
6235
6261
  let l = await i(e);
6236
6262
  if (c) {
6237
- let t = e.state[yc];
6263
+ let t = e.state[bc];
6238
6264
  t && t.add(s);
6239
6265
  }
6240
6266
  return l;
@@ -6242,17 +6268,17 @@ function Oc(e) {
6242
6268
  afterAgent: (e) => {
6243
6269
  let a = o(), l = a?.get?.().bind;
6244
6270
  if (!l) return;
6245
- let u = e[yc] ?? /* @__PURE__ */ new Set();
6271
+ let u = e[bc] ?? /* @__PURE__ */ new Set();
6246
6272
  if (u.size) {
6247
6273
  let e = /* @__PURE__ */ new Set();
6248
- Ec(l, t, (t) => {
6274
+ Dc(l, t, (t) => {
6249
6275
  let a = t.__pgId;
6250
6276
  e.add(a);
6251
6277
  let o = `${n}${a}.${r}`;
6252
6278
  if (u.has(o)) {
6253
6279
  let e = s.files[o];
6254
6280
  if (e && typeof e.content == "string") {
6255
- let n = vc(e.content);
6281
+ let n = yc(e.content);
6256
6282
  if (n.length) {
6257
6283
  console.warn(`[page-agent-sdk][code-asset] 跳过 commit 未通过校验的半成品(可能 abort/timeout 未跑完 verify):${o} - ${n[0].message}(${n[0].code})`);
6258
6284
  return;
@@ -6262,22 +6288,22 @@ function Oc(e) {
6262
6288
  }
6263
6289
  });
6264
6290
  for (let t of u) {
6265
- let r = Tc(t, n);
6291
+ let r = Ec(t, n);
6266
6292
  r && !e.has(r) && delete s.files[t];
6267
6293
  }
6268
6294
  a?.markDataDirty?.(), a?.recomputeBaseline?.();
6269
6295
  }
6270
6296
  if (!c) return;
6271
- let d = Cc(e[bc]?.text ?? "");
6297
+ let d = wc(e[xc]?.text ?? "");
6272
6298
  if (!d.length) return;
6273
6299
  let f = [];
6274
- if (Ec(l, t, (e) => {
6300
+ if (Dc(l, t, (e) => {
6275
6301
  (u.size === 0 || u.has(`${n}${e.__pgId}.${r}`)) && f.push(e);
6276
6302
  }), !f.length) return;
6277
6303
  let p = !1;
6278
6304
  for (let e of d) {
6279
6305
  let t = f.length === 1 ? f[0] : f.find((t) => typeof t.name == "string" && !!t.name && e.includes(t.name));
6280
- t && (wc(t, [e]), p = !0);
6306
+ t && (Tc(t, [e]), p = !0);
6281
6307
  }
6282
6308
  p && a?.markDataDirty?.();
6283
6309
  }
@@ -6285,7 +6311,7 @@ function Oc(e) {
6285
6311
  }
6286
6312
  //#endregion
6287
6313
  //#region src/core/sdk/htmlSubagent.ts
6288
- function kc(e, t, n) {
6314
+ function Ac(e, t, n) {
6289
6315
  let r = "html";
6290
6316
  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(规划)。
6291
6317
 
@@ -6337,7 +6363,7 @@ ${`- 输出形态:完整、自包含的 HTML 页面(.${r},可独立成页)`}
6337
6363
  - 一次想清楚 → 动手 → 验证 → 收口。**思考是手段不是目的,产出代码才是**。
6338
6364
  8. **收口格式(必守,最后一行)**:收口回复 = 简短结果总结 + **末行交接笔记** \`[note] <一句话实现要点>\` —— 关键设计决策 / 用户偏好 / 踩坑(如「[note] 液面用 height keyframes 4.2s 循环;装饰仅灯串+光斑 2 类」)。框架只识别末尾 [note] 行存进组件、自动转交下次维护该组件的子 agent;**漏写 = 下任失去交接**(真 LLM 实测漏写率 3/4,务必末行带上)。一行内,只写可复用结论。`;
6339
6365
  }
6340
- function Ac(e, t) {
6366
+ function jc(e, t) {
6341
6367
  return `# HTML 完整页面生成规范
6342
6368
 
6343
6369
  ## 代码资产模型(重要)
@@ -6375,14 +6401,14 @@ function Ac(e, t) {
6375
6401
  - 语义化标签(button / nav / section);图片 alt;交互可键盘聚焦
6376
6402
  - 颜色对比达标;不只用颜色传达信息`;
6377
6403
  }
6378
- function jc(e = "components", t = "code") {
6404
+ function Mc(e = "components", t = "code") {
6379
6405
  return {
6380
6406
  name: "html-fragment",
6381
6407
  description: "完整 HTML 页面生成规范:代码作为 data 资产 / vfs 工作副本 / 完整自包含可独立成页 / script+CSS 集中放置 / 可引外部 JS/CSS / validate_code 自检 / 安全底线 / 可访问性",
6382
- getContent: () => Ac(e, t)
6408
+ getContent: () => jc(e, t)
6383
6409
  };
6384
6410
  }
6385
- function Mc(e = {}) {
6411
+ function Nc(e = {}) {
6386
6412
  let t = e.vfsPrefix ?? "html/";
6387
6413
  return ({ state: e }) => {
6388
6414
  let n = e.files;
@@ -6390,7 +6416,7 @@ function Mc(e = {}) {
6390
6416
  let r = [];
6391
6417
  for (let [e, i] of Object.entries(n)) {
6392
6418
  if (!e.startsWith(t)) continue;
6393
- let n = vc(i.content);
6419
+ let n = yc(i.content);
6394
6420
  for (let t of n) r.push(`${e} 第 ${t.line} 行:${t.message}(${t.code})`);
6395
6421
  }
6396
6422
  return r.length ? {
@@ -6399,7 +6425,7 @@ function Mc(e = {}) {
6399
6425
  } : { ok: !0 };
6400
6426
  };
6401
6427
  }
6402
- function Nc(e) {
6428
+ function Pc(e) {
6403
6429
  let n, i, a = {
6404
6430
  name: "html-validate-tools",
6405
6431
  beforeAgent: (e) => {
@@ -6434,7 +6460,7 @@ function Nc(e) {
6434
6460
  }
6435
6461
  let s = [];
6436
6462
  for (let e of o) {
6437
- let t = vc(e.content);
6463
+ let t = yc(e.content);
6438
6464
  t.length && s.push(`${e.path}:\n${t.map((e) => ` 第 ${e.line} 行 ${e.message}(${e.code})`).join("\n")}`);
6439
6465
  }
6440
6466
  return s.length ? `❌ 格式校验未通过:\n${s.join("\n")}\n请用 vfs_edit 修正后重新调用 validate_code 复查。` : `✅ 格式校验通过(${o.map((e) => e.path).join(", ")}:标签闭合等结构合法)。`;
@@ -6452,16 +6478,16 @@ function Nc(e) {
6452
6478
  i = e;
6453
6479
  }, a;
6454
6480
  }
6455
- var Pc = 2;
6456
- function Fc(e = {}) {
6481
+ var Fc = 2;
6482
+ function Ic(e = {}) {
6457
6483
  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;
6458
6484
  if (t !== void 0 && !Array.isArray(t)) throw Error("[page-agent-sdk][createHtmlSubagent] writablePaths 须为字符串数组(代码组件 data 区,如 [\"components\"])/ 省略以从 schema 自动推断");
6459
6485
  let h = [];
6460
- a && h.push(wa()), d && (h.push(Nc(n)), h.push(Os({ check: Mc({ vfsPrefix: n }) })));
6486
+ a && h.push(wa()), d && (h.push(Pc(n)), h.push(ks({ check: Nc({ vfsPrefix: n }) })));
6461
6487
  let g = u ?? [], _ = t?.[0] ?? "components", v = l === void 0, y = {
6462
6488
  id: r,
6463
6489
  description: i ?? `生成/修改纯代码组件(代码作为 data 资产,代码字段 ${f} 随 data 持久化;vfs 作工作副本;能规划(write_todos)+ 执行)。需写代码组件或灵活定制时委派`,
6464
- systemPrompt: kc(n, f, _),
6490
+ systemPrompt: Ac(n, f, _),
6465
6491
  writablePaths: t ?? [],
6466
6492
  allowedTools: [
6467
6493
  "vfs_write",
@@ -6472,9 +6498,9 @@ function Fc(e = {}) {
6472
6498
  ],
6473
6499
  middleware: h.length ? h : void 0,
6474
6500
  summarization: o === !1 ? void 0 : o,
6475
- maxVerifyAttempts: d ? Pc : void 0,
6501
+ maxVerifyAttempts: d ? Fc : void 0,
6476
6502
  temperature: c,
6477
- skills: v ? [jc(_, f)] : l,
6503
+ skills: v ? [Mc(_, f)] : l,
6478
6504
  maxToolRounds: s,
6479
6505
  tools: g.length ? g : void 0,
6480
6506
  _codeAsset: {
@@ -6487,12 +6513,12 @@ function Fc(e = {}) {
6487
6513
  }
6488
6514
  };
6489
6515
  return y._rebuildCodeAssetPaths = (e) => {
6490
- y.systemPrompt = kc(n, f, e), v && (y.skills = [jc(e, f)]);
6516
+ y.systemPrompt = Ac(n, f, e), v && (y.skills = [Mc(e, f)]);
6491
6517
  }, y;
6492
6518
  }
6493
6519
  //#endregion
6494
6520
  //#region src/core/sdk/defineTool.ts
6495
- function Ic(e) {
6521
+ function Lc(e) {
6496
6522
  return r(async (t) => {
6497
6523
  let n = await e.handler(t);
6498
6524
  return typeof n == "string" ? n : JSON.stringify(n);
@@ -6504,7 +6530,7 @@ function Ic(e) {
6504
6530
  }
6505
6531
  //#endregion
6506
6532
  //#region src/core/sdk/inspectContextTool.ts
6507
- var Lc = t.object({
6533
+ var Rc = t.object({
6508
6534
  path: t.string().optional().describe("分类 key 过滤(如 toolResults/history/systemPrompt/dataHint);不传=全部分类"),
6509
6535
  role: t.enum([
6510
6536
  "user",
@@ -6514,14 +6540,14 @@ var Lc = t.object({
6514
6540
  ]).optional().describe("聚焦每轮首句的角色(assistant→回复摘要,user→问题摘要);不影响工具列表"),
6515
6541
  limit: t.number().int().min(1).max(50).optional().describe("返回最近 N 轮(默认全部;超 50 自动截最近 50 防返回过大)")
6516
6542
  });
6517
- function Rc(e) {
6518
- return Ic({
6543
+ function zc(e) {
6544
+ return Lc({
6519
6545
  name: "inspect_context",
6520
6546
  description: "查看当前对话上下文的构成(供压缩决策)。返回:totalTokens(历史轮次 token 总和,与触发判断同口径)、occupancy(窗口占用比)、contextWindow、categories(分类占用)、rounds(每轮 token/工具/首句)。先调用本工具查看构成,再决定压缩策略。",
6521
- schema: Lc,
6547
+ schema: Rc,
6522
6548
  handler: (t) => {
6523
- let n = Bo(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) => {
6524
- let n = Qo(e), r = Ho(e), i = t.role === "assistant" ? e.assistantMsgs[0] ?? e.userMsg : e.userMsg, a = Vo(typeof i.content == "string" ? i.content : "", 60);
6549
+ let n = Vo(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) => {
6550
+ let n = $o(e), r = Uo(e), i = t.role === "assistant" ? e.assistantMsgs[0] ?? e.userMsg : e.userMsg, a = Ho(typeof i.content == "string" ? i.content : "", 60);
6525
6551
  return {
6526
6552
  round: e.round,
6527
6553
  tokens: n,
@@ -6541,7 +6567,7 @@ function Rc(e) {
6541
6567
  }
6542
6568
  //#endregion
6543
6569
  //#region src/core/sdk/compressDecision.ts
6544
- var zc = t.object({
6570
+ var Bc = t.object({
6545
6571
  keepRounds: t.number().int().min(0).max(50).optional(),
6546
6572
  windowRatio: t.number().min(0).max(1).optional(),
6547
6573
  summarize: t.object({ mode: t.enum(["index", "llm"]) }),
@@ -6551,23 +6577,23 @@ var zc = t.object({
6551
6577
  }).refine((e) => e.keepRounds !== void 0 || e.windowRatio !== void 0, { message: "keepRounds 与 windowRatio 至少填一个(按当前触发模式)" });
6552
6578
  //#endregion
6553
6579
  //#region src/core/sdk/llmResolver.ts
6554
- function Bc(e) {
6580
+ function Vc(e) {
6555
6581
  let t = e.find((e) => e.role === "user");
6556
6582
  if (!t) return;
6557
6583
  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, " ");
6558
6584
  if (r) return r.length > 30 ? r.slice(0, 30) + "…" : r;
6559
6585
  }
6560
- function Vc(e) {
6586
+ function Hc(e) {
6561
6587
  return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
6562
6588
  }
6563
- function Hc(e) {
6589
+ function Uc(e) {
6564
6590
  let t = e.content;
6565
6591
  return typeof t == "string" ? t : Array.isArray(t) ? t.map((e) => typeof e == "string" ? e : e?.text ?? "").join("") : String(t ?? "");
6566
6592
  }
6567
- function Uc(e) {
6593
+ function Wc(e) {
6568
6594
  let t = e.summaryLlm ?? e.llm;
6569
6595
  if (!t) return;
6570
- let n = e.summaryTemperature ?? .3, r = e.summaryMaxTokens ?? 1024, i = e.summaryTimeoutMs ?? 15e3, s = Vc(t) ? t : null, c = Vc(t) ? null : t;
6596
+ let n = e.summaryTemperature ?? .3, r = e.summaryMaxTokens ?? 1024, i = e.summaryTimeoutMs ?? 15e3, s = Hc(t) ? t : null, c = Hc(t) ? null : t;
6571
6597
  if (c && !c.apiKey) {
6572
6598
  e.summaryLlm && console.warn("[page-agent-sdk][summarization] summaryLlm 已配置但缺 apiKey,摘要回退主 agent 模型或零成本索引摘要");
6573
6599
  return;
@@ -6579,16 +6605,16 @@ function Uc(e) {
6579
6605
  return !l && c && (l = await m(c, {
6580
6606
  temperature: n,
6581
6607
  maxTokens: r
6582
- })), Hc(await l.invoke([new o("你是对话历史压缩助手。把下面按轮次索引的对话要点,改写成一段连贯、紧凑的中文摘要,保留关键事实、用户意图与已用工具,不要编造。直接输出摘要正文。"), new a(e)], { signal: t.signal })).trim();
6608
+ })), Uc(await l.invoke([new o("你是对话历史压缩助手。把下面按轮次索引的对话要点,改写成一段连贯、紧凑的中文摘要,保留关键事实、用户意图与已用工具,不要编造。直接输出摘要正文。"), new a(e)], { signal: t.signal })).trim();
6583
6609
  } finally {
6584
6610
  clearTimeout(s);
6585
6611
  }
6586
6612
  };
6587
6613
  }
6588
- function Wc(e) {
6614
+ function Gc(e) {
6589
6615
  let t = e.titleLlm ?? e.summaryLlm ?? e.llm;
6590
6616
  if (!t) return;
6591
- let n = Vc(t) ? t : null, r = Vc(t) ? null : t;
6617
+ let n = Hc(t) ? t : null, r = Hc(t) ? null : t;
6592
6618
  if (r && !r.apiKey) return;
6593
6619
  let i = n;
6594
6620
  return async (e) => {
@@ -6597,7 +6623,7 @@ function Wc(e) {
6597
6623
  return !i && r && (i = await m(r, {
6598
6624
  temperature: 0,
6599
6625
  maxTokens: 30
6600
- })), Hc(await i.invoke([new o("根据以下对话的主旨,生成一个简短的中文标题(不超过15个字,不要标点和引号,直接输出标题文字)。"), new a(t)], { signal: n.signal })).trim().replace(/^["'""「『]|["'""」』]$/g, "").split("\n")[0].slice(0, 20);
6626
+ })), Uc(await i.invoke([new o("根据以下对话的主旨,生成一个简短的中文标题(不超过15个字,不要标点和引号,直接输出标题文字)。"), new a(t)], { signal: n.signal })).trim().replace(/^["'""「『]|["'""」』]$/g, "").split("\n")[0].slice(0, 20);
6601
6627
  } catch {
6602
6628
  return "";
6603
6629
  } finally {
@@ -6605,10 +6631,10 @@ function Wc(e) {
6605
6631
  }
6606
6632
  };
6607
6633
  }
6608
- function Gc() {
6634
+ function Kc() {
6609
6635
  return `call_dec_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
6610
6636
  }
6611
- function Kc(e) {
6637
+ function qc(e) {
6612
6638
  let t = e.match(/```(?:json)?\s*([\s\S]*?)```/), n = t ? t[1] : e, r = n.indexOf("{"), i = n.lastIndexOf("}");
6613
6639
  if (r < 0 || i < 0 || i <= r) return null;
6614
6640
  try {
@@ -6617,21 +6643,21 @@ function Kc(e) {
6617
6643
  return null;
6618
6644
  }
6619
6645
  }
6620
- function qc(e) {
6646
+ function Jc(e) {
6621
6647
  if (!e) return null;
6622
- let t = Kc(e);
6648
+ let t = qc(e);
6623
6649
  if (t == null) return null;
6624
- let n = zc.safeParse(t);
6650
+ let n = Bc.safeParse(t);
6625
6651
  return n.success ? n.data : null;
6626
6652
  }
6627
- async function Jc(e, t, n, r) {
6653
+ async function Yc(e, t, n, r) {
6628
6654
  let i = [...n];
6629
6655
  for (let n = 0; n < 3; n++) {
6630
6656
  let n = await e.invoke(i, { signal: r }), a = n?.tool_calls ?? [];
6631
- if (!a.length) return Hc(n).trim();
6657
+ if (!a.length) return Uc(n).trim();
6632
6658
  i = [...i, n];
6633
6659
  for (let e of a) {
6634
- let n = e.id ?? Gc();
6660
+ let n = e.id ?? Kc();
6635
6661
  try {
6636
6662
  let r = await t.invoke(e.args ?? {}), a = typeof r == "string" ? r : r?.content ?? JSON.stringify(r);
6637
6663
  i = [...i, new s({
@@ -6648,10 +6674,10 @@ async function Jc(e, t, n, r) {
6648
6674
  }
6649
6675
  return "";
6650
6676
  }
6651
- function Yc(e) {
6677
+ function Xc(e) {
6652
6678
  let t = e.summaryLlm ?? e.llm;
6653
6679
  if (!t) return;
6654
- let n = Vc(t) ? t : null, r = Vc(t) ? null : t;
6680
+ let n = Hc(t) ? t : null, r = Hc(t) ? null : t;
6655
6681
  if (r && !r.apiKey) return;
6656
6682
  let i = e.decisionTimeoutMs ?? 6e3, s = e.decisionMaxTokens ?? 2048, c = n;
6657
6683
  return async (e) => {
@@ -6663,12 +6689,12 @@ function Yc(e) {
6663
6689
  }));
6664
6690
  let n = c;
6665
6691
  if (typeof n.bindTools != "function") return null;
6666
- let i = Rc({
6692
+ let i = zc({
6667
6693
  getMessages: e.getMessages,
6668
6694
  getSnapshot: e.getSnapshot,
6669
6695
  contextWindow: e.contextWindow
6670
6696
  }), 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)。`)];
6671
- return qc(await Jc(l, i, d, t.signal)) || qc(await Jc(l, i, [...d, new a("上一次输出无效(JSON 解析失败或 schema 校验不通过)。请只输出符合 schema 的压缩决策 JSON,不要多余文字/markdown 代码块。")], t.signal));
6697
+ return Jc(await Yc(l, i, d, t.signal)) || Jc(await Yc(l, i, [...d, new a("上一次输出无效(JSON 解析失败或 schema 校验不通过)。请只输出符合 schema 的压缩决策 JSON,不要多余文字/markdown 代码块。")], t.signal));
6672
6698
  } catch {
6673
6699
  return null;
6674
6700
  } finally {
@@ -6676,22 +6702,22 @@ function Yc(e) {
6676
6702
  }
6677
6703
  };
6678
6704
  }
6679
- function Xc(e) {
6680
- let t = e.llm, n = Vc(e.llm) ? void 0 : e.llm;
6705
+ function Zc(e) {
6706
+ let t = e.llm, n = Hc(e.llm) ? void 0 : e.llm;
6681
6707
  return {
6682
6708
  modelCaps: ai({
6683
6709
  model: n?.model ?? t?.model ?? t?.modelName,
6684
6710
  contextWindow: e.contextWindow ?? n?.contextWindow ?? t?.contextWindow,
6685
6711
  maxOutputTokens: e.maxOutputTokens ?? n?.maxOutputTokens ?? t?.maxOutputTokens
6686
6712
  }),
6687
- summaryLlmInvoke: Uc(e),
6688
- titleLlmInvoke: Wc(e),
6689
- compressDecisionInvoke: Yc(e)
6713
+ summaryLlmInvoke: Wc(e),
6714
+ titleLlmInvoke: Gc(e),
6715
+ compressDecisionInvoke: Xc(e)
6690
6716
  };
6691
6717
  }
6692
6718
  //#endregion
6693
6719
  //#region src/core/sdk/conflictManager.ts
6694
- function Zc(e) {
6720
+ function Qc(e) {
6695
6721
  let t = /* @__PURE__ */ At(null), n = 0;
6696
6722
  function r(r) {
6697
6723
  return new Promise((i) => {
@@ -6722,7 +6748,7 @@ function Zc(e) {
6722
6748
  }
6723
6749
  //#endregion
6724
6750
  //#region src/core/utils/id.ts
6725
- function Qc() {
6751
+ function $c() {
6726
6752
  try {
6727
6753
  if (typeof crypto < "u" && typeof crypto.randomUUID == "function") return crypto.randomUUID();
6728
6754
  } catch {}
@@ -6730,7 +6756,7 @@ function Qc() {
6730
6756
  }
6731
6757
  //#endregion
6732
6758
  //#region src/core/backends/storage.ts
6733
- var $c = "chat-sdk", el = 50 * 1024 * 1024, tl = 4 * 1024 * 1024, nl = 10 * 1024 * 1024, rl = .9, il = 500, al = 300, ol = "__meta__", sl = "v:1", cl = [
6759
+ var el = "chat-sdk", tl = 50 * 1024 * 1024, nl = 4 * 1024 * 1024, rl = 10 * 1024 * 1024, il = .9, al = 500, ol = 300, sl = "__meta__", cl = "v:1", ll = [
6734
6760
  "messages",
6735
6761
  "vfs",
6736
6762
  "todos",
@@ -6741,51 +6767,51 @@ var $c = "chat-sdk", el = 50 * 1024 * 1024, tl = 4 * 1024 * 1024, nl = 10 * 1024
6741
6767
  "workingMemory",
6742
6768
  "focus"
6743
6769
  ];
6744
- function ll(e) {
6745
- return e === "local" || e === "session" ? tl : el;
6746
- }
6747
6770
  function ul(e) {
6771
+ return e === "local" || e === "session" ? nl : tl;
6772
+ }
6773
+ function dl(e) {
6748
6774
  if (typeof e != "object" || !e) return !1;
6749
6775
  let t = e;
6750
6776
  return t.name === "QuotaExceededError" || t.name === "NS_ERROR_DOM_QUOTA_REACHED" || t.code === 22 || t.code === 1014;
6751
6777
  }
6752
- function dl(e, t, n, r) {
6778
+ function fl(e, t, n, r) {
6753
6779
  return [
6754
- sl,
6780
+ cl,
6755
6781
  e,
6756
6782
  t,
6757
6783
  n,
6758
6784
  r
6759
6785
  ].join("::");
6760
6786
  }
6761
- function fl(e, t, n) {
6787
+ function pl(e, t, n) {
6762
6788
  return [
6763
- sl,
6789
+ cl,
6764
6790
  e,
6765
6791
  t,
6766
6792
  n
6767
6793
  ].join("::") + "::";
6768
6794
  }
6769
- function pl(e, t) {
6795
+ function ml(e, t) {
6770
6796
  return [
6771
- sl,
6797
+ cl,
6772
6798
  e,
6773
6799
  t
6774
6800
  ].join("::") + "::";
6775
6801
  }
6776
- function ml(e) {
6777
- return [sl, e].join("::") + "::";
6802
+ function hl(e) {
6803
+ return [cl, e].join("::") + "::";
6778
6804
  }
6779
- var hl = null;
6780
- function gl(e) {
6781
- hl ||= new TextEncoder();
6805
+ var gl = null;
6806
+ function _l(e) {
6807
+ gl ||= new TextEncoder();
6782
6808
  try {
6783
- return hl.encode(JSON.stringify(e)).length;
6809
+ return gl.encode(JSON.stringify(e)).length;
6784
6810
  } catch {
6785
6811
  return 0;
6786
6812
  }
6787
6813
  }
6788
- function _l(e, t, n) {
6814
+ function vl(e, t, n) {
6789
6815
  let r = e.reduce((e, t) => e + t.bytes, 0);
6790
6816
  if (r <= t) return [];
6791
6817
  let i = t * n, a = [...e].sort((e, t) => e.lastAccessed - t.lastAccessed), o = [];
@@ -6795,7 +6821,7 @@ function _l(e, t, n) {
6795
6821
  }
6796
6822
  return o;
6797
6823
  }
6798
- function vl() {
6824
+ function yl() {
6799
6825
  let e = /* @__PURE__ */ new Map();
6800
6826
  return {
6801
6827
  async get(t) {
@@ -6815,7 +6841,7 @@ function vl() {
6815
6841
  }
6816
6842
  };
6817
6843
  }
6818
- function yl(e) {
6844
+ function bl(e) {
6819
6845
  return new Promise((t, n) => {
6820
6846
  if (typeof indexedDB > "u") {
6821
6847
  n(/* @__PURE__ */ Error("indexedDB 不可用"));
@@ -6876,7 +6902,7 @@ function yl(e) {
6876
6902
  }, r.onerror = () => n(r.error);
6877
6903
  });
6878
6904
  }
6879
- function bl(e) {
6905
+ function xl(e) {
6880
6906
  return {
6881
6907
  async get(t) {
6882
6908
  let n = e.getItem(t);
@@ -6921,12 +6947,12 @@ function bl(e) {
6921
6947
  }
6922
6948
  };
6923
6949
  }
6924
- function xl(e, t, n) {
6950
+ function Sl(e, t, n) {
6925
6951
  let r = (e.get(t) ?? Promise.resolve()).then(n, n);
6926
6952
  return e.set(t, r.then(() => void 0, () => void 0)), r;
6927
6953
  }
6928
- function Sl(e = {}) {
6929
- let t = e.dbName ?? $c, n = e.backend ?? "indexed", r = e.maxBytes ?? ll(n), i = e.maxBytesPerSession ?? nl, a = e.evictionWatermark ?? rl, o = e.debounceMs ?? il, s = /* @__PURE__ */ new Set();
6954
+ function Cl(e = {}) {
6955
+ let t = e.dbName ?? el, n = e.backend ?? "indexed", r = e.maxBytes ?? ul(n), i = e.maxBytesPerSession ?? rl, a = e.evictionWatermark ?? il, o = e.debounceMs ?? al, s = /* @__PURE__ */ new Set();
6930
6956
  function c(e) {
6931
6957
  for (let t of s) try {
6932
6958
  t(e);
@@ -6939,16 +6965,16 @@ function Sl(e = {}) {
6939
6965
  try {
6940
6966
  if (n === "indexed") {
6941
6967
  if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
6942
- l = await yl(t), d(!0);
6968
+ l = await bl(t), d(!0);
6943
6969
  } else if (n === "session") {
6944
6970
  if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
6945
- l = bl(sessionStorage), d(!0);
6971
+ l = xl(sessionStorage), d(!0);
6946
6972
  } else if (n === "local") {
6947
6973
  if (typeof localStorage > "u") throw Error("localStorage 不可用");
6948
- l = bl(localStorage), d(!0);
6949
- } else l = vl(), d(!1);
6974
+ l = xl(localStorage), d(!0);
6975
+ } else l = yl(), d(!1);
6950
6976
  } catch (e) {
6951
- l = vl();
6977
+ l = yl();
6952
6978
  let t = e instanceof Error ? e.message : String(e);
6953
6979
  d(!1), Promise.resolve().then(() => c({
6954
6980
  type: "degraded",
@@ -6958,10 +6984,10 @@ function Sl(e = {}) {
6958
6984
  })();
6959
6985
  let p = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map();
6960
6986
  function g(e, n, r, a) {
6961
- let o = dl(t, r, a, ol);
6962
- return xl(h, o, async () => {
6987
+ let o = fl(t, r, a, sl);
6988
+ return Sl(h, o, async () => {
6963
6989
  let t = async () => {
6964
- let t = await l.get(o), s = await l.get(e), u = s == null ? 0 : gl(s), d = gl(n), f = (t?.bytes ?? 0) + (d - u);
6990
+ let t = await l.get(o), s = await l.get(e), u = s == null ? 0 : _l(s), d = _l(n), f = (t?.bytes ?? 0) + (d - u);
6965
6991
  if (f > i) {
6966
6992
  c({
6967
6993
  type: "quota",
@@ -6983,12 +7009,12 @@ function Sl(e = {}) {
6983
7009
  try {
6984
7010
  await t();
6985
7011
  } catch (e) {
6986
- if (ul(e) && !u) {
7012
+ if (dl(e) && !u) {
6987
7013
  u = !0;
6988
7014
  try {
6989
7015
  await b();
6990
7016
  } catch {}
6991
- l = vl(), Promise.resolve().then(() => c({
7017
+ l = yl(), Promise.resolve().then(() => c({
6992
7018
  type: "degraded",
6993
7019
  reason: "存储配额超限(QuotaExceededError),已淘汰最旧会话并降级内存"
6994
7020
  }));
@@ -7000,7 +7026,7 @@ function Sl(e = {}) {
7000
7026
  });
7001
7027
  }
7002
7028
  function _(e, n, r, i) {
7003
- let a = dl(t, e, n, r), s = p.get(a);
7029
+ let a = fl(t, e, n, r), s = p.get(a);
7004
7030
  s && s.resolve();
7005
7031
  let c = m.get(a);
7006
7032
  return c && clearTimeout(c), new Promise((t) => {
@@ -7027,15 +7053,15 @@ function Sl(e = {}) {
7027
7053
  function y() {
7028
7054
  v ||= setTimeout(() => {
7029
7055
  v = null, b();
7030
- }, al);
7056
+ }, ol);
7031
7057
  }
7032
7058
  async function b() {
7033
7059
  let e = [];
7034
- await l.scan(ml(t), (t, n) => {
7060
+ await l.scan(hl(t), (t, n) => {
7035
7061
  t.endsWith("::__meta__") && e.push(n);
7036
7062
  });
7037
- let n = _l(e, r, a);
7038
- for (let e of n) await l.clearPrefix(fl(t, e.agentId, e.sessionId)), c({
7063
+ let n = vl(e, r, a);
7064
+ for (let e of n) await l.clearPrefix(pl(t, e.agentId, e.sessionId)), c({
7039
7065
  type: "evicted",
7040
7066
  agentId: e.agentId,
7041
7067
  sessionId: e.sessionId,
@@ -7046,13 +7072,13 @@ function Sl(e = {}) {
7046
7072
  ready: f,
7047
7073
  async listSessions(e) {
7048
7074
  let n = [];
7049
- return await l.scan(pl(t, e), (e, t) => {
7075
+ return await l.scan(ml(t, e), (e, t) => {
7050
7076
  e.endsWith("::__meta__") && n.push(t);
7051
7077
  }), n.sort((e, t) => t.lastAccessed - e.lastAccessed);
7052
7078
  },
7053
7079
  async load(e, n) {
7054
- let r = dl(t, e, n, ol);
7055
- return await xl(h, r, async () => {
7080
+ let r = fl(t, e, n, sl);
7081
+ return await Sl(h, r, async () => {
7056
7082
  let i = await l.get(r);
7057
7083
  if (!i) return;
7058
7084
  let a = {
@@ -7061,8 +7087,8 @@ function Sl(e = {}) {
7061
7087
  todos: [],
7062
7088
  memory: ""
7063
7089
  };
7064
- for (let r of cl) {
7065
- let i = await l.get(dl(t, e, n, r));
7090
+ for (let r of ll) {
7091
+ let i = await l.get(fl(t, e, n, r));
7066
7092
  i != null && (a[r] = i);
7067
7093
  }
7068
7094
  return i.lastAccessed = Date.now(), await l.set(r, i), a;
@@ -7070,12 +7096,12 @@ function Sl(e = {}) {
7070
7096
  },
7071
7097
  async save(e, t, n) {
7072
7098
  let r = [];
7073
- for (let i of cl) n[i] !== void 0 && r.push(_(e, t, i, n[i]));
7099
+ for (let i of ll) n[i] !== void 0 && r.push(_(e, t, i, n[i]));
7074
7100
  await Promise.all(r);
7075
7101
  },
7076
7102
  async updateTitle(e, n, r) {
7077
- let i = dl(t, e, n, ol);
7078
- return xl(h, i, async () => {
7103
+ let i = fl(t, e, n, sl);
7104
+ return Sl(h, i, async () => {
7079
7105
  let e = await l.get(i);
7080
7106
  e && (e.title = r, e.lastAccessed = Date.now(), await l.set(i, e));
7081
7107
  });
@@ -7091,10 +7117,10 @@ function Sl(e = {}) {
7091
7117
  })), c({ type: "flush" }), await b();
7092
7118
  },
7093
7119
  async deleteSession(e, n) {
7094
- await l.clearPrefix(fl(t, e, n));
7120
+ await l.clearPrefix(pl(t, e, n));
7095
7121
  },
7096
7122
  async createSession(e, n, r) {
7097
- let i = r ?? Qc(), a = Date.now(), o = {
7123
+ let i = r ?? $c(), a = Date.now(), o = {
7098
7124
  agentId: e,
7099
7125
  sessionId: i,
7100
7126
  createdAt: a,
@@ -7102,7 +7128,7 @@ function Sl(e = {}) {
7102
7128
  bytes: 0,
7103
7129
  title: n
7104
7130
  };
7105
- return await l.set(dl(t, e, i, ol), o), i;
7131
+ return await l.set(fl(t, e, i, sl), o), i;
7106
7132
  },
7107
7133
  onEvent(e) {
7108
7134
  s.add(e);
@@ -7117,15 +7143,15 @@ function Sl(e = {}) {
7117
7143
  }
7118
7144
  //#endregion
7119
7145
  //#region src/core/sdk/optionsResolver.ts
7120
- function Cl(e) {
7121
- return e === void 0 ? Sl({ backend: "memory" }) : e === !1 ? null : typeof e == "string" ? Sl({ backend: e }) : e.enabled === !1 ? null : Sl(e);
7122
- }
7123
7146
  function wl(e) {
7147
+ return e === void 0 ? Cl({ backend: "memory" }) : e === !1 ? null : typeof e == "string" ? Cl({ backend: e }) : e.enabled === !1 ? null : Cl(e);
7148
+ }
7149
+ function Tl(e) {
7124
7150
  return e.dialog ?? {};
7125
7151
  }
7126
7152
  //#endregion
7127
7153
  //#region src/core/capabilities.ts
7128
- var Tl = [
7154
+ var El = [
7129
7155
  {
7130
7156
  name: "dataOps",
7131
7157
  defaultOn: !0
@@ -7214,13 +7240,13 @@ var Tl = [
7214
7240
  requires: ["summarization"]
7215
7241
  }
7216
7242
  ];
7217
- function El(e) {
7243
+ function Dl(e) {
7218
7244
  let t = {};
7219
- for (let n of Tl) {
7245
+ for (let n of El) {
7220
7246
  let r = e?.[n.name];
7221
7247
  t[n.name] = n.defaultOn ? r !== !1 : r === !0;
7222
7248
  }
7223
- for (let e of Tl) if (e.requires && t[e.name]) {
7249
+ for (let e of El) if (e.requires && t[e.name]) {
7224
7250
  for (let n of e.requires) if (!t[n]) {
7225
7251
  t[e.name] = !1;
7226
7252
  break;
@@ -7230,7 +7256,7 @@ function El(e) {
7230
7256
  }
7231
7257
  //#endregion
7232
7258
  //#region src/core/sdk/events.ts
7233
- function Dl(e) {
7259
+ function Ol(e) {
7234
7260
  let t = /* @__PURE__ */ new Set(), n = (n) => {
7235
7261
  if (n.type !== "approval_request") {
7236
7262
  if (e) try {
@@ -7256,7 +7282,7 @@ function Dl(e) {
7256
7282
  }
7257
7283
  //#endregion
7258
7284
  //#region src/core/sdk/contextPreset.ts
7259
- var Ol = {
7285
+ var kl = {
7260
7286
  auto: {
7261
7287
  summaryThresholdRatio: .5,
7262
7288
  windowRatio: .4,
@@ -7284,7 +7310,7 @@ var Ol = {
7284
7310
  enableRecall: !0,
7285
7311
  enableLLMSummary: !0
7286
7312
  }
7287
- }, kl = {
7313
+ }, Al = {
7288
7314
  auto: ["describe_data", "read"],
7289
7315
  conservative: ["describe_data"],
7290
7316
  aggressive: ["describe_data", "read"],
@@ -7295,8 +7321,8 @@ var Ol = {
7295
7321
  "search_data"
7296
7322
  ]
7297
7323
  };
7298
- function Al(e, t) {
7299
- let n = Ol[e.contextPreset ?? "auto"] ?? {}, r = e.contextOptions === !1 ? {} : e.contextOptions ?? {};
7324
+ function jl(e, t) {
7325
+ let n = kl[e.contextPreset ?? "auto"] ?? {}, r = e.contextOptions === !1 ? {} : e.contextOptions ?? {};
7300
7326
  return {
7301
7327
  ...n,
7302
7328
  ...r,
@@ -7306,7 +7332,7 @@ function Al(e, t) {
7306
7332
  }
7307
7333
  //#endregion
7308
7334
  //#region src/core/sdk/middlewareStack.ts
7309
- var jl = {
7335
+ var Ml = {
7310
7336
  dataHint: 10,
7311
7337
  usageHints: 20,
7312
7338
  todos: 30,
@@ -7323,17 +7349,17 @@ var jl = {
7323
7349
  subagents: 140,
7324
7350
  augmentSystem: 150
7325
7351
  };
7326
- function Ml(e) {
7352
+ function Nl(e) {
7327
7353
  return e.map((e, t) => ({
7328
7354
  m: e,
7329
7355
  i: t,
7330
- p: jl[e.name] ?? Infinity
7356
+ p: Ml[e.name] ?? Infinity
7331
7357
  })).sort((e, t) => e.p - t.p || e.i - t.i).map((e) => e.m);
7332
7358
  }
7333
7359
  //#endregion
7334
7360
  //#region src/core/tools/dataSlotQuery.ts
7335
- var Nl = /[\w$-]/;
7336
- function Pl(e) {
7361
+ var Pl = /[\w$-]/;
7362
+ function Fl(e) {
7337
7363
  let t = [], n = e.trim(), r = +(n[0] === "$");
7338
7364
  for (; r < n.length;) {
7339
7365
  let e = n[r];
@@ -7344,7 +7370,7 @@ function Pl(e) {
7344
7370
  continue;
7345
7371
  }
7346
7372
  let e = "";
7347
- for (; r < n.length && Nl.test(n[r]);) e += n[r++];
7373
+ for (; r < n.length && Pl.test(n[r]);) e += n[r++];
7348
7374
  if (!e) throw Error("JSONPath: .. 后缺属性名");
7349
7375
  t.push({
7350
7376
  type: "descendKey",
@@ -7357,7 +7383,7 @@ function Pl(e) {
7357
7383
  continue;
7358
7384
  }
7359
7385
  let e = "";
7360
- for (; r < n.length && Nl.test(n[r]);) e += n[r++];
7386
+ for (; r < n.length && Pl.test(n[r]);) e += n[r++];
7361
7387
  if (!e) throw Error("JSONPath: . 后缺属性名");
7362
7388
  t.push({
7363
7389
  type: "key",
@@ -7413,7 +7439,7 @@ function Pl(e) {
7413
7439
  }
7414
7440
  return t;
7415
7441
  }
7416
- function Fl(e) {
7442
+ function Il(e) {
7417
7443
  let t = [], n = 0, r = e.trim();
7418
7444
  for (; n < r.length;) {
7419
7445
  let e = r[n];
@@ -7458,7 +7484,7 @@ function Fl(e) {
7458
7484
  }
7459
7485
  return t;
7460
7486
  }
7461
- var Il = class {
7487
+ var Ll = class {
7462
7488
  toks;
7463
7489
  item;
7464
7490
  pos = 0;
@@ -7494,12 +7520,12 @@ var Il = class {
7494
7520
  return this.next(), e;
7495
7521
  }
7496
7522
  let e = this.operand(), t = this.peek();
7497
- return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(), zl(t, e, this.operand())) : Ll(e);
7523
+ return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(), Bl(t, e, this.operand())) : Rl(e);
7498
7524
  }
7499
7525
  operand() {
7500
7526
  let e = this.next();
7501
7527
  if (e === void 0) throw Error("过滤表达式:缺操作数");
7502
- if (e.startsWith("@")) return Rl(e, this.item);
7528
+ if (e.startsWith("@")) return zl(e, this.item);
7503
7529
  if (e[0] === "'" || e[0] === "\"") return e.slice(1, -1);
7504
7530
  if (e === "true") return !0;
7505
7531
  if (e === "false") return !1;
@@ -7509,10 +7535,10 @@ var Il = class {
7509
7535
  throw Error(`过滤表达式:未知操作数 '${e}'`);
7510
7536
  }
7511
7537
  };
7512
- function Ll(e) {
7538
+ function Rl(e) {
7513
7539
  return !!e && e !== 0 && e !== "" && e !== null;
7514
7540
  }
7515
- function Rl(e, t) {
7541
+ function zl(e, t) {
7516
7542
  let n = e.split(".").filter((e) => e && e !== "@"), r = t;
7517
7543
  for (let e of n) {
7518
7544
  if (typeof r != "object" || !r) return;
@@ -7520,7 +7546,7 @@ function Rl(e, t) {
7520
7546
  }
7521
7547
  return r;
7522
7548
  }
7523
- function zl(e, t, n) {
7549
+ function Bl(e, t, n) {
7524
7550
  switch (e) {
7525
7551
  case "==": return t === n;
7526
7552
  case "!=": return t !== n;
@@ -7531,47 +7557,47 @@ function zl(e, t, n) {
7531
7557
  default: return !1;
7532
7558
  }
7533
7559
  }
7534
- function Bl(e, t) {
7535
- return new Il(Fl(e), t).parse();
7536
- }
7537
7560
  function Vl(e, t) {
7538
- return e ? `${e}.${t}` : String(t);
7561
+ return new Ll(Il(e), t).parse();
7539
7562
  }
7540
7563
  function Hl(e, t) {
7564
+ return e ? `${e}.${t}` : String(t);
7565
+ }
7566
+ function Ul(e, t) {
7541
7567
  let n = [{
7542
7568
  path: "",
7543
7569
  value: e
7544
7570
  }];
7545
- for (let e of Pl(t)) {
7571
+ for (let e of Fl(t)) {
7546
7572
  let t = [];
7547
7573
  if (e.type === "key") for (let r of n) r.value != null && typeof r.value == "object" && e.key in r.value && t.push({
7548
- path: Vl(r.path, e.key),
7574
+ path: Hl(r.path, e.key),
7549
7575
  value: r.value[e.key]
7550
7576
  });
7551
7577
  else if (e.type === "index") {
7552
7578
  for (let r of n) if (Array.isArray(r.value)) {
7553
7579
  let n = r.value[e.index];
7554
7580
  e.index >= 0 && e.index < r.value.length && t.push({
7555
- path: Vl(r.path, e.index),
7581
+ path: Hl(r.path, e.index),
7556
7582
  value: n,
7557
7583
  index: e.index
7558
7584
  });
7559
7585
  }
7560
7586
  } else if (e.type === "wildcard") {
7561
7587
  for (let e of n) if (Array.isArray(e.value)) e.value.forEach((n, r) => t.push({
7562
- path: Vl(e.path, r),
7588
+ path: Hl(e.path, r),
7563
7589
  value: n,
7564
7590
  index: r
7565
7591
  }));
7566
7592
  else if (e.value != null && typeof e.value == "object") for (let n of Object.keys(e.value)) t.push({
7567
- path: Vl(e.path, n),
7593
+ path: Hl(e.path, n),
7568
7594
  value: e.value[n]
7569
7595
  });
7570
7596
  } else if (e.type === "descendKey") {
7571
7597
  let r = e.key, i = (e) => {
7572
7598
  if (!(e.value == null || typeof e.value != "object")) for (let n of Object.keys(e.value)) {
7573
7599
  let a = {
7574
- path: Vl(e.path, n),
7600
+ path: Hl(e.path, n),
7575
7601
  value: e.value[n]
7576
7602
  };
7577
7603
  n === r && t.push(a), i(a);
@@ -7582,7 +7608,7 @@ function Hl(e, t) {
7582
7608
  let e = (n) => {
7583
7609
  if (!(n.value == null || typeof n.value != "object")) for (let r of Object.keys(n.value)) {
7584
7610
  let i = {
7585
- path: Vl(n.path, r),
7611
+ path: Hl(n.path, r),
7586
7612
  value: n.value[r]
7587
7613
  };
7588
7614
  t.push(i), e(i);
@@ -7591,16 +7617,16 @@ function Hl(e, t) {
7591
7617
  for (let t of n) e(t);
7592
7618
  } else if (e.type === "filter") {
7593
7619
  for (let r of n) if (Array.isArray(r.value)) r.value.forEach((n, i) => {
7594
- Bl(e.filter, n) && t.push({
7595
- path: Vl(r.path, i),
7620
+ Vl(e.filter, n) && t.push({
7621
+ path: Hl(r.path, i),
7596
7622
  value: n,
7597
7623
  index: i
7598
7624
  });
7599
7625
  });
7600
7626
  else if (r.value != null && typeof r.value == "object") for (let n of Object.keys(r.value)) {
7601
7627
  let i = r.value[n];
7602
- Bl(e.filter, i) && t.push({
7603
- path: Vl(r.path, n),
7628
+ Vl(e.filter, i) && t.push({
7629
+ path: Hl(r.path, n),
7604
7630
  value: i
7605
7631
  });
7606
7632
  }
@@ -7609,7 +7635,7 @@ function Hl(e, t) {
7609
7635
  }
7610
7636
  return n;
7611
7637
  }
7612
- function Ul(e, t) {
7638
+ function Wl(e, t) {
7613
7639
  let n = e.length, r = t.length;
7614
7640
  if (!n) return r;
7615
7641
  if (!r) return n;
@@ -7625,7 +7651,7 @@ function Ul(e, t) {
7625
7651
  }
7626
7652
  return i[r];
7627
7653
  }
7628
- function Wl(e, t, n = {}) {
7654
+ function Gl(e, t, n = {}) {
7629
7655
  let r = n.mode || "substring", i = n.limit ?? 50, a = n.matchKey !== !1, o = [], s = null;
7630
7656
  if (r === "regex") try {
7631
7657
  s = new RegExp(t, "i");
@@ -7635,11 +7661,11 @@ function Wl(e, t, n = {}) {
7635
7661
  let c = (e, l, u) => {
7636
7662
  if (o.length >= i || e == null) return;
7637
7663
  if (typeof e == "object") {
7638
- if (Array.isArray(e)) e.forEach((e, t) => c(e, Vl(l, t), String(t)));
7639
- else for (let t of Object.keys(e)) c(e[t], Vl(l, t), t);
7664
+ if (Array.isArray(e)) e.forEach((e, t) => c(e, Hl(l, t), String(t)));
7665
+ else for (let t of Object.keys(e)) c(e[t], Hl(l, t), t);
7640
7666
  return;
7641
7667
  }
7642
- let d = String(e), f = Gl(d, t, r, n.fuzzyThreshold ?? 2, s);
7668
+ let d = String(e), f = Kl(d, t, r, n.fuzzyThreshold ?? 2, s);
7643
7669
  if (f) {
7644
7670
  o.push({
7645
7671
  path: l,
@@ -7650,7 +7676,7 @@ function Wl(e, t, n = {}) {
7650
7676
  return;
7651
7677
  }
7652
7678
  if (a && u) {
7653
- let e = Gl(u, t, r, n.fuzzyThreshold ?? 2, s);
7679
+ let e = Kl(u, t, r, n.fuzzyThreshold ?? 2, s);
7654
7680
  e && o.push({
7655
7681
  path: l,
7656
7682
  key: u,
@@ -7661,51 +7687,51 @@ function Wl(e, t, n = {}) {
7661
7687
  };
7662
7688
  return c(e, ""), o;
7663
7689
  }
7664
- function Gl(e, t, n, r, i) {
7690
+ function Kl(e, t, n, r, i) {
7665
7691
  let a = e.toLowerCase(), o = t.toLowerCase();
7666
7692
  if (n === "substring") return a.includes(o) ? 1 : null;
7667
7693
  if (n === "regex") return i && i.test(e) ? 1 : null;
7668
7694
  if (n === "fuzzy") {
7669
7695
  if (a.includes(o)) return 2;
7670
- let e = Ul(a, o);
7696
+ let e = Wl(a, o);
7671
7697
  return e <= r ? r - e + 1 : null;
7672
7698
  }
7673
7699
  return null;
7674
7700
  }
7675
- function Kl(e, t, n = 3e3) {
7676
- return ro(t, n)(e);
7701
+ function ql(e, t, n = 3e3) {
7702
+ return io(t, n)(e);
7677
7703
  }
7678
7704
  //#endregion
7679
7705
  //#region src/core/tools/resources.ts
7680
- var ql = "⟦frozen:", Jl = "⟦res:", Yl = "⟧";
7681
- function Xl(e) {
7682
- return `${ql}${e}${Yl}`;
7683
- }
7706
+ var Jl = "⟦frozen:", Yl = "⟦res:", Xl = "⟧";
7684
7707
  function Zl(e) {
7685
- return `${Jl}${e}${Yl}`;
7708
+ return `${Jl}${e}${Xl}`;
7686
7709
  }
7687
7710
  function Ql(e) {
7688
- return typeof e == "string" ? e.startsWith(ql) && e.endsWith(Yl) ? {
7711
+ return `${Yl}${e}${Xl}`;
7712
+ }
7713
+ function $l(e) {
7714
+ return typeof e == "string" ? e.startsWith(Jl) && e.endsWith(Xl) ? {
7689
7715
  type: "frozen",
7690
7716
  path: e.slice(8, e.length - 1)
7691
- } : e.startsWith(Jl) && e.endsWith(Yl) ? {
7717
+ } : e.startsWith(Yl) && e.endsWith(Xl) ? {
7692
7718
  type: "res",
7693
7719
  handle: e.slice(5, e.length - 1)
7694
7720
  } : null : null;
7695
7721
  }
7696
- function $l(e) {
7722
+ function eu(e) {
7697
7723
  return String(e ?? "").trim().replace(/^\.+/, "");
7698
7724
  }
7699
- function eu(e) {
7725
+ function tu(e) {
7700
7726
  let t = 5381;
7701
7727
  for (let n = 0; n < e.length; n++) t = (t * 33 ^ e.charCodeAt(n)) >>> 0;
7702
7728
  return (t >>> 0).toString(16).padStart(8, "0").slice(0, 8);
7703
7729
  }
7704
- function tu(e, t) {
7730
+ function nu(e, t) {
7705
7731
  return e === t ? !0 : e && t && typeof e == "object" && typeof t == "object" ? JSON.stringify(e) === JSON.stringify(t) : !1;
7706
7732
  }
7707
- function nu(e, t) {
7708
- let n = $l(e);
7733
+ function ru(e, t) {
7734
+ let n = eu(e);
7709
7735
  if (!n) return;
7710
7736
  let r = t.get(n);
7711
7737
  if (r) return {
@@ -7725,7 +7751,7 @@ function nu(e, t) {
7725
7751
  }));
7726
7752
  return i;
7727
7753
  }
7728
- var ru = class {
7754
+ var iu = class {
7729
7755
  vfs;
7730
7756
  constructor(e) {
7731
7757
  this.vfs = e;
@@ -7734,7 +7760,7 @@ var ru = class {
7734
7760
  return `resources/${e}.json`;
7735
7761
  }
7736
7762
  ensure(e, t, n) {
7737
- let r = eu(e), i = {
7763
+ let r = tu(e), i = {
7738
7764
  path: e,
7739
7765
  mode: n,
7740
7766
  value: t,
@@ -7746,7 +7772,7 @@ var ru = class {
7746
7772
  }, r;
7747
7773
  }
7748
7774
  get(e) {
7749
- return this.readEntry(this.key(e)) || this.readEntry(this.key(eu(e)));
7775
+ return this.readEntry(this.key(e)) || this.readEntry(this.key(tu(e)));
7750
7776
  }
7751
7777
  readEntry(e) {
7752
7778
  let t = this.vfs.files[e];
@@ -7762,7 +7788,7 @@ var ru = class {
7762
7788
  this.ensure(e, t, n?.mode ?? "verbatim");
7763
7789
  }
7764
7790
  delete(e) {
7765
- let t = this.get(e)?.handle ?? eu(e), n = this.key(t), r = !!this.vfs.files[n];
7791
+ let t = this.get(e)?.handle ?? tu(e), n = this.key(t), r = !!this.vfs.files[n];
7766
7792
  return r && delete this.vfs.files[n], r;
7767
7793
  }
7768
7794
  list() {
@@ -7782,7 +7808,7 @@ var ru = class {
7782
7808
  for (let e of Object.keys(this.vfs.files)) e.startsWith("resources/") && delete this.vfs.files[e];
7783
7809
  }
7784
7810
  };
7785
- function iu(e) {
7811
+ function au(e) {
7786
7812
  let { jp: t, resolved: n, resourcesByPath: r, resourceStore: i } = e;
7787
7813
  if (!r.size) return n;
7788
7814
  let a = !1;
@@ -7796,14 +7822,14 @@ function iu(e) {
7796
7822
  if (t !== "" && e !== t && !e.startsWith(t + ".")) continue;
7797
7823
  if (e === t) {
7798
7824
  if (o === void 0) continue;
7799
- return n.mode === "freeze" ? Xl(e) : i ? Zl(i.ensure(e, o, "verbatim")) : o;
7825
+ return n.mode === "freeze" ? Zl(e) : i ? Ql(i.ensure(e, o, "verbatim")) : o;
7800
7826
  }
7801
7827
  let r = t === "" ? e : e.slice(t.length + 1), a = Z(o, r);
7802
- a !== void 0 && (n.mode === "freeze" ? Ma(o, r, Xl(e)) : i && Ma(o, r, Zl(i.ensure(e, a, "verbatim"))));
7828
+ a !== void 0 && (n.mode === "freeze" ? Ma(o, r, Zl(e)) : i && Ma(o, r, Ql(i.ensure(e, a, "verbatim"))));
7803
7829
  }
7804
7830
  return o;
7805
7831
  }
7806
- function au(e, t, n, r) {
7832
+ function ou(e, t, n, r) {
7807
7833
  if (!r) return {
7808
7834
  code: "RESOURCE_NOT_FOUND",
7809
7835
  message: `句柄 "${e}" 无法展开(资源池未启用)`,
@@ -7814,7 +7840,7 @@ function au(e, t, n, r) {
7814
7840
  code: "RESOURCE_NOT_FOUND",
7815
7841
  message: `字段 "${t}" 在 bind 中已不存在,无法展开句柄 "${e}"`,
7816
7842
  hint: "该字段可能已被删除或 restore 到不含此字段的快照;重新 read 确认当前结构"
7817
- } : tu(i.value, n) ? { value: i.value } : (r.update(t, n), { value: n }) : n === void 0 ? {
7843
+ } : nu(i.value, n) ? { value: i.value } : (r.update(t, n), { value: n }) : n === void 0 ? {
7818
7844
  code: "RESOURCE_NOT_FOUND",
7819
7845
  message: `句柄 "${e}" 不存在(字段 "${t}" 可能未注册或已被删除)`,
7820
7846
  hint: "重新 read 该字段触发懒注册"
@@ -7824,7 +7850,7 @@ function au(e, t, n, r) {
7824
7850
  hint: "重新 read 该字段触发懒注册重建句柄,再写回新句柄 ⟦res:<handle>⟧"
7825
7851
  };
7826
7852
  }
7827
- function ou(e, t) {
7853
+ function su(e, t) {
7828
7854
  let n = t.getBind();
7829
7855
  for (let [r, i] of t.resourcesByPath) {
7830
7856
  let a = Z(n, r), o = Z(e, r);
@@ -7833,11 +7859,11 @@ function ou(e, t) {
7833
7859
  continue;
7834
7860
  }
7835
7861
  if (i.mode === "freeze") {
7836
- if (o === Xl(r)) {
7862
+ if (o === Zl(r)) {
7837
7863
  Ma(e, r, a);
7838
7864
  continue;
7839
7865
  }
7840
- if (!tu(o, a)) return {
7866
+ if (!nu(o, a)) return {
7841
7867
  ok: !1,
7842
7868
  code: "FROZEN_FIELD",
7843
7869
  path: r,
@@ -7845,9 +7871,9 @@ function ou(e, t) {
7845
7871
  hint: "该字段由系统/集成方维护,LLM 不得改动。如需展示其值用 resource_get({path}) 取真值"
7846
7872
  };
7847
7873
  } else {
7848
- let n = Ql(o);
7874
+ let n = $l(o);
7849
7875
  if (n && n.type === "res") {
7850
- let i = au(n.handle, r, a, t.resourceStore);
7876
+ let i = ou(n.handle, r, a, t.resourceStore);
7851
7877
  if ("value" in i) {
7852
7878
  Ma(e, r, i.value);
7853
7879
  continue;
@@ -7860,7 +7886,7 @@ function ou(e, t) {
7860
7886
  hint: i.hint
7861
7887
  };
7862
7888
  }
7863
- if (!tu(o, a)) return {
7889
+ if (!nu(o, a)) return {
7864
7890
  ok: !1,
7865
7891
  code: "VERBATIM_MISMATCH",
7866
7892
  path: r,
@@ -7871,7 +7897,7 @@ function ou(e, t) {
7871
7897
  }
7872
7898
  return { ok: !0 };
7873
7899
  }
7874
- function su(e, t, n) {
7900
+ function cu(e, t, n) {
7875
7901
  let r = t === void 0 ? e.message : `patches[${t}]${n ? ` @ "${n}"` : ""}: ${e.message}`;
7876
7902
  return Y({
7877
7903
  code: e.code,
@@ -7884,28 +7910,28 @@ function su(e, t, n) {
7884
7910
  } }
7885
7911
  });
7886
7912
  }
7887
- function cu(e) {
7913
+ function lu(e) {
7888
7914
  let { value: t, ctx: n } = e;
7889
7915
  if (!n || !n.resourcesByPath.size) return {
7890
7916
  ok: !0,
7891
7917
  value: t
7892
7918
  };
7893
- let r = Pa(t), i = ou(r, n);
7919
+ let r = Pa(t), i = su(r, n);
7894
7920
  return i.ok ? {
7895
7921
  ok: !0,
7896
7922
  value: r
7897
7923
  } : {
7898
7924
  ok: !1,
7899
- error: su(i)
7925
+ error: cu(i)
7900
7926
  };
7901
7927
  }
7902
- function lu(e) {
7928
+ function uu(e) {
7903
7929
  let { patches: t, clone: n, ctx: r } = e;
7904
7930
  if (!r || !r.resourcesByPath.size) return { ok: !0 };
7905
7931
  for (let e = 0; e < t.length; e++) {
7906
7932
  let n = t[e];
7907
7933
  if (n.op === "remove") {
7908
- let t = nu(n.jsonPath || "", r.resourcesByPath);
7934
+ let t = ru(n.jsonPath || "", r.resourcesByPath);
7909
7935
  if (t) {
7910
7936
  let r = t.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED", i = t.spec.mode === "freeze" ? "冻结字段不可删。如需移除请联系集成方调整 data.resources 配置" : "verbatim 字段不可直接删;先 resource_delete({path}) 释放资源保护后再删";
7911
7937
  return {
@@ -7924,27 +7950,27 @@ function lu(e) {
7924
7950
  }
7925
7951
  }
7926
7952
  }
7927
- let i = ou(n, r);
7953
+ let i = su(n, r);
7928
7954
  if (!i.ok) {
7929
- let e = uu(i.path, t);
7955
+ let e = du(i.path, t);
7930
7956
  return {
7931
7957
  ok: !1,
7932
- error: su(i, e >= 0 ? e : void 0, e >= 0 ? t[e].jsonPath : void 0)
7958
+ error: cu(i, e >= 0 ? e : void 0, e >= 0 ? t[e].jsonPath : void 0)
7933
7959
  };
7934
7960
  }
7935
7961
  return { ok: !0 };
7936
7962
  }
7937
- function uu(e, t) {
7938
- let n = $l(e);
7963
+ function du(e, t) {
7964
+ let n = eu(e);
7939
7965
  for (let e = 0; e < t.length; e++) {
7940
- let r = $l(t[e].jsonPath || "");
7966
+ let r = eu(t[e].jsonPath || "");
7941
7967
  if (r && (r === n || n.startsWith(r + ".") || r.startsWith(n + "."))) return e;
7942
7968
  }
7943
7969
  return -1;
7944
7970
  }
7945
7971
  //#endregion
7946
7972
  //#region src/core/tools/dataOps.ts
7947
- var du = /* @__PURE__ */ new Set([
7973
+ var fu = /* @__PURE__ */ new Set([
7948
7974
  "describe_data",
7949
7975
  "get_data",
7950
7976
  "set_data",
@@ -7958,14 +7984,14 @@ var du = /* @__PURE__ */ new Set([
7958
7984
  "resource_update",
7959
7985
  "resource_list",
7960
7986
  "resource_delete"
7961
- ]), fu = /* @__PURE__ */ new Set(["read", "write"]);
7962
- function pu(e, t = "simple") {
7963
- return t === "advanced" ? e : t === "minimal" ? e.filter((e) => fu.has(e.name)) : e.filter((e) => !du.has(e.name));
7987
+ ]), pu = /* @__PURE__ */ new Set(["read", "write"]);
7988
+ function mu(e, t = "simple") {
7989
+ return t === "advanced" ? e : t === "minimal" ? e.filter((e) => pu.has(e.name)) : e.filter((e) => !fu.has(e.name));
7964
7990
  }
7965
- function mu(e) {
7991
+ function hu(e) {
7966
7992
  let { bindRef: t, schema: n, allowKeys: r, snapshots: i, maxSnapshots: a, audit: o, dryRun: s, op: c = "set", protectedCtx: l } = e, u = e.value;
7967
7993
  if (l) {
7968
- let e = cu({
7994
+ let e = lu({
7969
7995
  value: u,
7970
7996
  ctx: l
7971
7997
  });
@@ -7980,6 +8006,17 @@ function mu(e) {
7980
8006
  ok: !1,
7981
8007
  error: qr("", d.error.issues)
7982
8008
  };
8009
+ let f = Ga(t, u, d.data);
8010
+ if (f.length) return {
8011
+ ok: !1,
8012
+ error: Y({
8013
+ code: "SCHEMA_STRIP",
8014
+ message: `字段 ${f.join(", ")} 不在 schema 声明内,写入被拒绝(防静默丢失)`,
8015
+ hint: "该数据结构不支持这些字段;请只用 schema 声明的字段,或在 data.schema 中声明后重试",
8016
+ path: f[0],
8017
+ details: { stripped: f }
8018
+ })
8019
+ };
7983
8020
  if (s) return {
7984
8021
  ok: !0,
7985
8022
  hash: "",
@@ -7993,12 +8030,12 @@ function mu(e) {
7993
8030
  hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹(如 {value:\"x\"})或集成方通过 sdk.setData 替换 bind"
7994
8031
  })
7995
8032
  };
7996
- let f = Pa(t), p = i.length ? i[i.length - 1].id + 1 : 1;
8033
+ let p = Pa(t), m = i.length ? i[i.length - 1].id + 1 : 1;
7997
8034
  for (i.push({
7998
- id: p,
8035
+ id: m,
7999
8036
  ts: Date.now(),
8000
8037
  op: c,
8001
- value: f
8038
+ value: p
8002
8039
  }); i.length > a;) i.shift();
8003
8040
  return d.data !== null && typeof d.data == "object" && (r ? ja(t, d.data) : Wa(t, d.data)), o({
8004
8041
  op: c,
@@ -8010,7 +8047,7 @@ function mu(e) {
8010
8047
  data: d.data
8011
8048
  };
8012
8049
  }
8013
- function hu(e) {
8050
+ function gu(e) {
8014
8051
  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 = Pa(t), p = [];
8015
8052
  for (let e = 0; e < n.length; e++) {
8016
8053
  let t = n[e], a = t.jsonPath || "";
@@ -8070,7 +8107,7 @@ function hu(e) {
8070
8107
  });
8071
8108
  }
8072
8109
  if (d) {
8073
- let e = lu({
8110
+ let e = uu({
8074
8111
  patches: n,
8075
8112
  clone: f,
8076
8113
  ctx: d
@@ -8090,14 +8127,25 @@ function hu(e) {
8090
8127
  details: Kr(m.error.issues)
8091
8128
  }) : qr("", m.error.issues)
8092
8129
  };
8130
+ let h = Ga(t, f, m.data);
8131
+ if (h.length) return {
8132
+ ok: !1,
8133
+ error: Y({
8134
+ code: "SCHEMA_STRIP",
8135
+ message: `字段 ${h.join(", ")} 不在 schema 声明内,写入被拒绝(防静默丢失)`,
8136
+ hint: "该数据结构不支持这些字段;请只用 schema 声明的字段,或在 data.schema 中声明后重试",
8137
+ path: h[0],
8138
+ details: { stripped: h }
8139
+ })
8140
+ };
8093
8141
  if (u) return {
8094
8142
  ok: !0,
8095
8143
  applied: p,
8096
8144
  clone: f
8097
8145
  };
8098
- let h = a.length ? a[a.length - 1].id + 1 : 1;
8146
+ let g = a.length ? a[a.length - 1].id + 1 : 1;
8099
8147
  for (a.push({
8100
- id: h,
8148
+ id: g,
8101
8149
  ts: Date.now(),
8102
8150
  op: "edit",
8103
8151
  value: Pa(t),
@@ -8110,41 +8158,41 @@ function hu(e) {
8110
8158
  clone: f
8111
8159
  };
8112
8160
  }
8113
- function gu(e) {
8161
+ function _u(e) {
8114
8162
  return e < 1024 ? `${e}B` : e < 1024 * 1024 ? `${(e / 1024).toFixed(1)}KB` : `${(e / (1024 * 1024)).toFixed(1)}MB`;
8115
8163
  }
8116
- function _u(e, t, n, r) {
8164
+ function vu(e, t, n, r) {
8117
8165
  if (!t || !n.length || typeof e != "object" || !e) return e;
8118
8166
  let i = new Set(n.map((e) => e.field)), a = Pa(e);
8119
8167
  return (function e(t) {
8120
8168
  if (Array.isArray(t)) for (let n of t) e(n);
8121
8169
  else if (t && typeof t == "object") for (let n of Object.keys(t)) {
8122
8170
  let a = t[n];
8123
- typeof a == "string" && i.has(n) && a.length >= r ? t[n] = `<${n} ${gu(a.length)}>` : e(a);
8171
+ typeof a == "string" && i.has(n) && a.length >= r ? t[n] = `<${n} ${_u(a.length)}>` : e(a);
8124
8172
  }
8125
8173
  })(a), a;
8126
8174
  }
8127
- var vu = 0;
8128
- function yu() {
8129
- return vu++, "c_" + Math.random().toString(36).slice(2, 8) + vu.toString(36);
8175
+ var yu = 0;
8176
+ function bu() {
8177
+ return yu++, "c_" + Math.random().toString(36).slice(2, 8) + yu.toString(36);
8130
8178
  }
8131
- function bu(e, t) {
8179
+ function xu(e, t) {
8132
8180
  if (!(!e || typeof e != "object")) for (let n of t) {
8133
8181
  let t = Z(e, n);
8134
- if (Array.isArray(t)) for (let e of t) e && typeof e == "object" && !("__pgId" in e) && (e.__pgId = yu());
8182
+ if (Array.isArray(t)) for (let e of t) e && typeof e == "object" && !("__pgId" in e) && (e.__pgId = bu());
8135
8183
  }
8136
8184
  }
8137
- function xu(e) {
8185
+ function Su(e) {
8138
8186
  (function e(t) {
8139
8187
  if (Array.isArray(t)) t.forEach(e);
8140
8188
  else if (t && typeof t == "object") for (let n of Object.keys(t)) n.startsWith("__pg") ? delete t[n] : e(t[n]);
8141
8189
  })(e);
8142
8190
  }
8143
- function Su(e, n = {}) {
8144
- let i = n.pgIdPaths ?? [], a = i.length ? (e) => bu(e, i) : void 0, o = i.length ? da(e.schema, i).schema : e.schema, s = e.bind, c = e.description ?? "主数据对象", l = Wi(o), u = /* @__PURE__ */ new Map(), d = n.vfsStore ? new ru(n.vfsStore) : void 0;
8191
+ function Cu(e, n = {}) {
8192
+ let i = n.pgIdPaths ?? [], a = i.length ? (e) => xu(e, i) : void 0, o = i.length ? da(e.schema, i).schema : e.schema, s = e.bind, c = e.description ?? "主数据对象", l = Wi(o), u = /* @__PURE__ */ new Map(), d = n.vfsStore ? new iu(n.vfsStore) : void 0;
8145
8193
  function f(e) {
8146
8194
  if (u.clear(), e) for (let t of e) {
8147
- let e = $l(t.path);
8195
+ let e = eu(t.path);
8148
8196
  u.set(e, {
8149
8197
  path: e,
8150
8198
  mode: t.mode
@@ -8217,7 +8265,7 @@ function Su(e, n = {}) {
8217
8265
  return e;
8218
8266
  },
8219
8267
  createResource: d ? (e, t) => {
8220
- let n = $l(e), r = u.get(n), i = t === void 0 ? Z(s, n) : t;
8268
+ let n = eu(e), r = u.get(n), i = t === void 0 ? Z(s, n) : t;
8221
8269
  return d.ensure(n, i, r?.mode ?? "verbatim");
8222
8270
  } : void 0,
8223
8271
  getResource: d ? (e) => {
@@ -8230,7 +8278,7 @@ function Su(e, n = {}) {
8230
8278
  } : void 0;
8231
8279
  } : void 0,
8232
8280
  updateResource: d ? (e, t) => {
8233
- let n = $l(e);
8281
+ let n = eu(e);
8234
8282
  d.update(n, t), Ma(s, n, t), T();
8235
8283
  } : void 0,
8236
8284
  deleteResource: d ? (e) => d.delete(e) : void 0,
@@ -8291,7 +8339,7 @@ function Su(e, n = {}) {
8291
8339
  hint: "主数据仅暴露 schema 声明的字段;若需操作该字段,集成方需在 schema 中声明它"
8292
8340
  });
8293
8341
  let i = r ? Z(s, r) : s;
8294
- !r && l && (i = $i(i, o)), p && (i = iu({
8342
+ !r && l && (i = $i(i, o)), p && (i = au({
8295
8343
  jp: r,
8296
8344
  resolved: i,
8297
8345
  resourcesByPath: p.resourcesByPath,
@@ -8308,7 +8356,7 @@ function Su(e, n = {}) {
8308
8356
  if (i !== null) return i;
8309
8357
  let a = Fa(e);
8310
8358
  if (a.parseError) return Jr("", e, a.parseError);
8311
- let c = mu({
8359
+ let c = hu({
8312
8360
  bindRef: s,
8313
8361
  value: a.parsed,
8314
8362
  schema: o,
@@ -8352,7 +8400,7 @@ function Su(e, n = {}) {
8352
8400
  message: `edit 仅适用于对象/数组主数据,当前是 ${s === void 0 ? "undefined" : typeof s}`,
8353
8401
  hint: "叶子(原始类型)请用 set_data 整体设置"
8354
8402
  });
8355
- let f = hu({
8403
+ let f = gu({
8356
8404
  bindRef: s,
8357
8405
  patches: [{
8358
8406
  op: r,
@@ -8418,7 +8466,7 @@ function Su(e, n = {}) {
8418
8466
  hint: "仅 schema 声明的 key 可删"
8419
8467
  });
8420
8468
  if (p) {
8421
- let t = nu(e, p.resourcesByPath);
8469
+ let t = ru(e, p.resourcesByPath);
8422
8470
  if (t) return Y({
8423
8471
  code: t.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED",
8424
8472
  message: `delete_data @ "${e}" 命中受保护字段 "${t.protectedPath}"(${t.spec.mode}),不可删除`,
@@ -8522,7 +8570,7 @@ function Su(e, n = {}) {
8522
8570
  });
8523
8571
  let n = l ? $i(s, o) : s, r;
8524
8572
  try {
8525
- r = Hl(n, e);
8573
+ r = Ul(n, e);
8526
8574
  } catch (t) {
8527
8575
  return Y({
8528
8576
  code: "JSONPATH_SYNTAX",
@@ -8546,7 +8594,7 @@ function Su(e, n = {}) {
8546
8594
  message: "主数据为空,无可搜索内容"
8547
8595
  });
8548
8596
  try {
8549
- let a = Wl(l ? $i(s, o) : s, e, {
8597
+ let a = Gl(l ? $i(s, o) : s, e, {
8550
8598
  mode: t,
8551
8599
  fuzzyThreshold: n,
8552
8600
  matchKey: r,
@@ -8597,7 +8645,7 @@ function Su(e, n = {}) {
8597
8645
  e && (c = $i(c, e));
8598
8646
  }
8599
8647
  } else c = l ? $i(s, o) : s;
8600
- let u = Pa(c), d = await Kl(u, e, a && JSON.stringify(u).length > 1e5 ? 8e3 : 3e3);
8648
+ let u = Pa(c), d = await ql(u, e, a && JSON.stringify(u).length > 1e5 ? 8e3 : 3e3);
8601
8649
  if (!d.ok) {
8602
8650
  let t = /超时/.test(d.error || "");
8603
8651
  return Y({
@@ -8613,7 +8661,7 @@ function Su(e, n = {}) {
8613
8661
  if (t === "transform") {
8614
8662
  let e = d.result;
8615
8663
  if (a) {
8616
- let t = hu({
8664
+ let t = gu({
8617
8665
  bindRef: s,
8618
8666
  patches: [{
8619
8667
  op: "set",
@@ -8641,7 +8689,7 @@ function Su(e, n = {}) {
8641
8689
  message: `主数据 bind 为原始类型(${s === null ? "null" : typeof s}),eval transform(patches) 无法就地替换`,
8642
8690
  hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹或集成方通过 sdk.setData 替换 bind"
8643
8691
  });
8644
- let t = hu({
8692
+ let t = gu({
8645
8693
  bindRef: s,
8646
8694
  patches: e.patches,
8647
8695
  schema: o,
@@ -8661,7 +8709,7 @@ function Su(e, n = {}) {
8661
8709
  }
8662
8710
  let t = e;
8663
8711
  if (p) {
8664
- let e = cu({
8712
+ let e = lu({
8665
8713
  value: t,
8666
8714
  ctx: p
8667
8715
  });
@@ -8710,7 +8758,7 @@ function Su(e, n = {}) {
8710
8758
  e && (a = $i(a, e));
8711
8759
  }
8712
8760
  let c = a;
8713
- if (p && (c = iu({
8761
+ if (p && (c = au({
8714
8762
  jp: t,
8715
8763
  resolved: c,
8716
8764
  resourcesByPath: p.resourcesByPath,
@@ -8720,7 +8768,7 @@ function Su(e, n = {}) {
8720
8768
  } catch (e) {
8721
8769
  return `- ${t}: [READ_INTERCEPT: ${e.message}]`;
8722
8770
  }
8723
- return r && r.length && (c = Ia(c, r)), i != null && (c = La(c, i)), c = _u(c, f === "", C, S), c === void 0 ? `- ${t} = (undefined)` : `- ${t} = ${Q(c)}`;
8771
+ return r && r.length && (c = Ia(c, r)), i != null && (c = La(c, i)), c = vu(c, f === "", C, S), c === void 0 ? `- ${t} = (undefined)` : `- ${t} = ${Q(c)}`;
8724
8772
  });
8725
8773
  return `多路径读取(共 ${t.length} 项,hash=${m}):\n${e.join("\n")}`;
8726
8774
  }
@@ -8742,7 +8790,7 @@ function Su(e, n = {}) {
8742
8790
  e && (g = $i(g, e));
8743
8791
  }
8744
8792
  let _ = g;
8745
- if (p && (_ = iu({
8793
+ if (p && (_ = au({
8746
8794
  jp: h,
8747
8795
  resolved: _,
8748
8796
  resourcesByPath: p.resourcesByPath,
@@ -8755,7 +8803,7 @@ function Su(e, n = {}) {
8755
8803
  message: `read 拦截器抛错: ${e.message}`
8756
8804
  });
8757
8805
  }
8758
- r && r.length && (_ = Ia(_, r)), i != null && (_ = La(_, i)), _ = _u(_, f === "", C, S);
8806
+ r && r.length && (_ = Ia(_, r)), i != null && (_ = La(_, i)), _ = vu(_, f === "", C, S);
8759
8807
  let y = e ? "" : `主数据说明: ${c}\n格式: 写入值需为 JSON,且通过声明的 schema 校验(校验失败时 write 会返回结构化错误)。字段约束(类型/min/max/enum/必填/默认)见 systemPrompt「可操作数据」段,或用 schema_data({ jsonPath }) 按需查。\n\n`, x = r && r.length ? `(字段裁剪:${r.join(",")})` : "", w = i == null ? "" : `(深度≤${i})`, T = x || w ? ` ${x}${w}` : "";
8760
8808
  if ((a !== void 0 || u !== void 0) && Array.isArray(_)) {
8761
8809
  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;
@@ -8828,7 +8876,7 @@ function Su(e, n = {}) {
8828
8876
  hint: "仅 schema 声明的 key 可删"
8829
8877
  });
8830
8878
  if (p) {
8831
- let e = nu(t.jsonPath, p.resourcesByPath);
8879
+ let e = ru(t.jsonPath, p.resourcesByPath);
8832
8880
  if (e) return Y({
8833
8881
  code: e.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED",
8834
8882
  message: `write delete @ "${t.jsonPath}" 命中受保护字段 "${e.protectedPath}"(${e.spec.mode}),不可删除`,
@@ -8861,7 +8909,7 @@ function Su(e, n = {}) {
8861
8909
  op: t.op ?? "set",
8862
8910
  jsonPath: t.jsonPath || "",
8863
8911
  value: g
8864
- }]), i = hu({
8912
+ }]), i = gu({
8865
8913
  bindRef: s,
8866
8914
  patches: n,
8867
8915
  schema: o,
@@ -8878,13 +8926,13 @@ function Su(e, n = {}) {
8878
8926
  detail: `${i.applied.length} 个 patch${i.applied.length > 1 ? "(批量)" : ""}`,
8879
8927
  value: i.applied.map((e) => `${e.op}@${e.jp}`),
8880
8928
  timestamp: Date.now()
8881
- }), a && (a(s), T()), b($(s), d), xu(i.clone), `已 write(edit) 主数据(${i.applied.length} 个 patch)。当前值:${Q(i.clone, 600)} (新 hash=${$(s)})`) : i.error;
8929
+ }), a && (a(s), T()), b($(s), d), Su(i.clone), `已 write(edit) 主数据(${i.applied.length} 个 patch)。当前值:${Q(i.clone, 600)} (新 hash=${$(s)})`) : i.error;
8882
8930
  }
8883
8931
  let C = Fa(g);
8884
8932
  if (C.parseError) return Jr("", g, C.parseError);
8885
8933
  let w = await k("set", S);
8886
8934
  if (w !== null) return w;
8887
- let E = mu({
8935
+ let E = hu({
8888
8936
  bindRef: s,
8889
8937
  value: C.parsed,
8890
8938
  schema: o,
@@ -8900,7 +8948,7 @@ function Su(e, n = {}) {
8900
8948
  if (c) return `dryRun(set): schema 校验通过。预览新值:${Q(E.data, 600)}。未实际写入、未入快照。`;
8901
8949
  a && (a(s), T());
8902
8950
  let ee = $(s);
8903
- return b(ee, d), xu(E.data), `已 write(set) 主数据 = ${Q(E.data, 600)} (新 hash=${ee})${l ? "(白名单模式:仅更新 schema 声明字段,未声明字段保留)" : ""}`;
8951
+ return b(ee, d), Su(E.data), `已 write(set) 主数据 = ${Q(E.data, 600)} (新 hash=${ee})${l ? "(白名单模式:仅更新 schema 声明字段,未声明字段保留)" : ""}`;
8904
8952
  }, {
8905
8953
  name: "write",
8906
8954
  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 校验(失败不写,按错误修正重试)+ 自动快照。详细用法见系统提示「能力使用提示」。",
@@ -8965,7 +9013,7 @@ function Su(e, n = {}) {
8965
9013
  });
8966
9014
  r = t.value, i = `快照 #${t.id}`;
8967
9015
  }
8968
- let a = l ? $i(s, o) : s, c = Ga(r, Pa(a));
9016
+ let a = l ? $i(s, o) : s, c = Ka(r, Pa(a));
8969
9017
  return c.length ? `差异(当前 vs ${i},共 ${c.length} 处):\n${c.map((e) => ` ${e.path}: ${Q(e.from)} → ${Q(e.to)}`).join("\n")}` : `无差异:当前主数据与 ${i} 完全相同。`;
8970
9018
  }, {
8971
9019
  name: "diff_data",
@@ -9017,7 +9065,7 @@ function Su(e, n = {}) {
9017
9065
  }
9018
9066
  let f = await k("set", n || (x ? y(a) : void 0));
9019
9067
  if (f !== null) return f;
9020
- let g = mu({
9068
+ let g = hu({
9021
9069
  bindRef: s,
9022
9070
  value: d,
9023
9071
  schema: o,
@@ -9049,7 +9097,7 @@ function Su(e, n = {}) {
9049
9097
  message: "未提供 path 或有效 handle",
9050
9098
  hint: "传 path(受保护字段)或 handle(占位符 ⟦res:handle⟧ 里的句柄)"
9051
9099
  });
9052
- let r = $l(n);
9100
+ let r = eu(n);
9053
9101
  if (!u.has(r)) return Y({
9054
9102
  code: "RESOURCE_NOT_FOUND",
9055
9103
  message: `"${n}" 不是受保护字段`,
@@ -9089,7 +9137,7 @@ function Su(e, n = {}) {
9089
9137
  message: "resource_update 需要 path",
9090
9138
  hint: "传要更新的 verbatim 受保护字段路径"
9091
9139
  });
9092
- let i = $l(e), a = u.get(i);
9140
+ let i = eu(e), a = u.get(i);
9093
9141
  if (!a) return Y({
9094
9142
  code: "RESOURCE_NOT_FOUND",
9095
9143
  message: `"${e}" 不是受保护字段`,
@@ -9177,8 +9225,8 @@ function Su(e, n = {}) {
9177
9225
  }
9178
9226
  //#endregion
9179
9227
  //#region src/core/tools/fetchDoc.ts
9180
- var Cu = 3e4, wu = [r(async ({ url: e, as: t }) => {
9181
- let n = new AbortController(), r = setTimeout(() => n.abort(), Cu);
9228
+ var wu = 3e4, Tu = [r(async ({ url: e, as: t }) => {
9229
+ let n = new AbortController(), r = setTimeout(() => n.abort(), wu);
9182
9230
  try {
9183
9231
  let r = await fetch(e, {
9184
9232
  method: "GET",
@@ -9195,7 +9243,7 @@ var Cu = 3e4, wu = [r(async ({ url: e, as: t }) => {
9195
9243
  ].join("\n");
9196
9244
  } catch (t) {
9197
9245
  let r = t?.message || String(t);
9198
- return n.signal.aborted ? `获取失败:请求超时(${Cu}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
9246
+ return n.signal.aborted ? `获取失败:请求超时(${wu}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
9199
9247
  } finally {
9200
9248
  clearTimeout(r);
9201
9249
  }
@@ -9206,7 +9254,7 @@ var Cu = 3e4, wu = [r(async ({ url: e, as: t }) => {
9206
9254
  url: t.string().describe("要抓取的 URL(同源或已配 CORS)"),
9207
9255
  as: t.enum(["text", "markdown"]).optional().describe("返回格式标签,默认 text")
9208
9256
  })
9209
- })], Tu = [
9257
+ })], Eu = [
9210
9258
  "id",
9211
9259
  "class",
9212
9260
  "href",
@@ -9218,12 +9266,12 @@ var Cu = 3e4, wu = [r(async ({ url: e, as: t }) => {
9218
9266
  "aria-label",
9219
9267
  "name",
9220
9268
  "type"
9221
- ], Eu = /^(value|srcdoc|formaction|on\w+)$/i, Du = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session/i;
9222
- function Ou(e, t) {
9269
+ ], Du = /^(value|srcdoc|formaction|on\w+)$/i, Ou = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session/i;
9270
+ function ku(e, t) {
9223
9271
  if (!e) return null;
9224
- let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ?? Tu, s = (e) => {
9272
+ let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ?? Eu, s = (e) => {
9225
9273
  let t = {};
9226
- for (let n of Array.from(e.attributes)) (a ? o.includes(n.name) : o.includes(n.name) || n.name.startsWith("data-")) && (Eu.test(n.name) || Du.test(n.name) || (t[n.name] = n.value));
9274
+ for (let n of Array.from(e.attributes)) (a ? o.includes(n.name) : o.includes(n.name) || n.name.startsWith("data-")) && (Du.test(n.name) || Ou.test(n.name) || (t[n.name] = n.value));
9227
9275
  return t;
9228
9276
  }, c = (e, t) => {
9229
9277
  let n = {
@@ -9239,10 +9287,10 @@ function Ou(e, t) {
9239
9287
  };
9240
9288
  return c(e, n);
9241
9289
  }
9242
- var ku = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
9290
+ var Au = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
9243
9291
  let i = e ? document.querySelector(e) : document.body;
9244
9292
  if (!i) return `未找到匹配元素:selector="${e}"`;
9245
- let a = Ou(i, {
9293
+ let a = ku(i, {
9246
9294
  depth: t ?? 3,
9247
9295
  attrs: n,
9248
9296
  includeText: r ?? !0
@@ -9257,14 +9305,14 @@ var ku = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
9257
9305
  attrs: t.array(t.string()).optional().describe("属性白名单(传了 = 严格白名单;不传 = 默认常用 + data-*)"),
9258
9306
  includeText: t.boolean().optional().describe("是否包含直接文本(默认 true)")
9259
9307
  })
9260
- }), Au = [ku];
9308
+ }), ju = [Au];
9261
9309
  //#endregion
9262
9310
  //#region src/core/tools/envTool.ts
9263
- function ju(e) {
9311
+ function Mu(e) {
9264
9312
  let t = e;
9265
9313
  return typeof t.tagName == "string" || typeof t.nodeType == "number" && typeof t.nodeName == "string";
9266
9314
  }
9267
- function Mu(e, t = 3, n = 2e3, r) {
9315
+ function Nu(e, t = 3, n = 2e3, r) {
9268
9316
  if (e == null) return e;
9269
9317
  if (typeof e == "string") return e.length > n ? e.slice(0, n) + "…(已截断)" : e;
9270
9318
  if (typeof e == "number" || typeof e == "boolean") return e;
@@ -9273,14 +9321,14 @@ function Mu(e, t = 3, n = 2e3, r) {
9273
9321
  if (typeof e == "bigint") return `${e.toString()}n`;
9274
9322
  if (typeof e != "object") return String(e);
9275
9323
  let i = e;
9276
- if (ju(i)) {
9324
+ if (Mu(i)) {
9277
9325
  let e = i;
9278
9326
  return e.tagName ? `[Element: <${e.tagName.toLowerCase()}>]` : `[Node: ${e.nodeName}]`;
9279
9327
  }
9280
9328
  if (r?.has(i)) return "[Circular]";
9281
9329
  let a = r ?? /* @__PURE__ */ new WeakSet();
9282
9330
  if (a.add(i), Array.isArray(e)) {
9283
- let r = e.slice(0, 100).map((e) => Mu(e, t - 1, n, a));
9331
+ let r = e.slice(0, 100).map((e) => Nu(e, t - 1, n, a));
9284
9332
  return e.length > 100 && r.push(`…(共 ${e.length} 项,已截断)`), r;
9285
9333
  }
9286
9334
  if (t < 0) return "(对象,已截断)";
@@ -9292,14 +9340,14 @@ function Mu(e, t = 3, n = 2e3, r) {
9292
9340
  break;
9293
9341
  }
9294
9342
  try {
9295
- o[r] = Mu(i[r], t - 1, n, a);
9343
+ o[r] = Nu(i[r], t - 1, n, a);
9296
9344
  } catch {
9297
9345
  o[r] = "(getter 抛错)";
9298
9346
  }
9299
9347
  }
9300
9348
  return o;
9301
9349
  }
9302
- function Nu(e) {
9350
+ function Pu(e) {
9303
9351
  let t = e ?? (typeof window < "u" ? window : {}), n = t.navigator, r = t.location, i = t.document;
9304
9352
  return {
9305
9353
  location: {
@@ -9332,9 +9380,9 @@ function Nu(e) {
9332
9380
  } : "(无 document)"
9333
9381
  };
9334
9382
  }
9335
- var Pu = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|opener|parent|top|self|window|globalThis|closed|history|navigation|trustedTypes|origin|crossOriginIsolated)$/, Fu = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session|ticket/i, Iu = r(({ key: e }) => {
9383
+ var Fu = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|opener|parent|top|self|window|globalThis|closed|history|navigation|trustedTypes|origin|crossOriginIsolated)$/, Iu = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session|ticket/i, Lu = r(({ key: e }) => {
9336
9384
  if (e) {
9337
- if (Pu.test(e) || Fu.test(e)) return JSON.stringify({
9385
+ if (Fu.test(e) || Iu.test(e)) return JSON.stringify({
9338
9386
  key: e,
9339
9387
  denied: !0,
9340
9388
  reason: "安全:该 key 在 denylist(localStorage/sessionStorage/cookie/document 或敏感命名 token/secret/key/auth),不读取防泄漏"
@@ -9344,18 +9392,18 @@ var Pu = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|open
9344
9392
  key: e,
9345
9393
  exists: t !== void 0,
9346
9394
  type: typeof t,
9347
- value: Mu(t)
9395
+ value: Nu(t)
9348
9396
  }, null, 2);
9349
9397
  }
9350
- return JSON.stringify(Nu(), null, 2);
9398
+ return JSON.stringify(Pu(), null, 2);
9351
9399
  }, {
9352
9400
  name: "inspect_env",
9353
9401
  description: "读宿主页面环境信息(排查调试)。不传参返回摘要(URL/origin、浏览器/语言、viewport、title/readyState);传 key 读指定 window 属性值(如 key:\"appConfig\")。只读,大结果自动外存 vfs。",
9354
9402
  schema: t.object({ key: t.string().optional().describe("要读取的 window 属性名(如 \"appConfig\"/\"__DEBUG__\");不传 = 返回环境摘要") })
9355
- }), Lu = [Iu];
9403
+ }), Ru = [Lu];
9356
9404
  //#endregion
9357
9405
  //#region src/core/harness/budget.ts
9358
- function Ru(e, t, n) {
9406
+ function zu(e, t, n) {
9359
9407
  let r = 0;
9360
9408
  return {
9361
9409
  name: "budget",
@@ -9380,12 +9428,12 @@ function Ru(e, t, n) {
9380
9428
  }
9381
9429
  //#endregion
9382
9430
  //#region src/core/sdk/actions.ts
9383
- var zu = /^[a-zA-Z][a-zA-Z0-9_]*$/;
9384
- function Bu(e) {
9431
+ var Bu = /^[a-zA-Z][a-zA-Z0-9_]*$/;
9432
+ function Vu(e) {
9385
9433
  let n = [];
9386
9434
  for (let [i, a] of Object.entries(e)) {
9387
- if (!zu.test(i)) {
9388
- console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${zu}),已跳过`);
9435
+ if (!Bu.test(i)) {
9436
+ console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${Bu}),已跳过`);
9389
9437
  continue;
9390
9438
  }
9391
9439
  let e = a.description || `宿主动作 ${i}`;
@@ -9405,9 +9453,9 @@ function Bu(e) {
9405
9453
  }
9406
9454
  return n;
9407
9455
  }
9408
- function Vu(e) {
9456
+ function Hu(e) {
9409
9457
  let t = {};
9410
- for (let [n, r] of Object.entries(e)) zu.test(n) && (t[n] = {
9458
+ for (let [n, r] of Object.entries(e)) Bu.test(n) && (t[n] = {
9411
9459
  description: r.description,
9412
9460
  hasParams: !!r.params
9413
9461
  });
@@ -9415,12 +9463,12 @@ function Vu(e) {
9415
9463
  }
9416
9464
  //#endregion
9417
9465
  //#region src/core/toolsets.ts
9418
- var Hu = wu, Uu = Au;
9419
- function Wu(e, t) {
9420
- return Su(e, t);
9466
+ var Uu = Tu, Wu = ju;
9467
+ function Gu(e, t) {
9468
+ return Cu(e, t);
9421
9469
  }
9422
- function Gu(e, t, n, r, i) {
9423
- let a = El(e);
9470
+ function Ku(e, t, n, r, i) {
9471
+ let a = Dl(e);
9424
9472
  return [
9425
9473
  ...a.dataOps ? t : [],
9426
9474
  ...a.fetch ? n : [],
@@ -9430,7 +9478,7 @@ function Gu(e, t, n, r, i) {
9430
9478
  }
9431
9479
  //#endregion
9432
9480
  //#region src/core/sdk/toolRegistry.ts
9433
- function Ku(e) {
9481
+ function qu(e) {
9434
9482
  let t = /* @__PURE__ */ new Map(), n = [];
9435
9483
  for (let r of e) for (let e of r.tools) {
9436
9484
  let i = t.get(e.name);
@@ -9450,15 +9498,15 @@ function Ku(e) {
9450
9498
  }
9451
9499
  //#endregion
9452
9500
  //#region src/core/harness/usageHints.ts
9453
- var qu = .7;
9454
- function Ju(e, t, n = "simple", r, i) {
9455
- let a = El(e), o = n !== "advanced", s = n === "minimal";
9501
+ var Ju = .7;
9502
+ function Yu(e, t, n = "simple", r, i) {
9503
+ let a = Dl(e), o = n !== "advanced", s = n === "minimal";
9456
9504
  return {
9457
9505
  name: "usageHints",
9458
9506
  augmentPrompt: (n) => {
9459
9507
  let r = [];
9460
9508
  if (a.planning && (r.push("【自适应规划】按任务复杂度决定是否先规划,不要对简单任务过度编排:"), r.push(" · 简单/明确任务(改单字段、调样式、查值)→ 直接 read/write 执行,不必 write_todos。"), r.push(" · 复杂任务(多步、大改、有歧义、不可逆)→ 先 write_todos 拆解,首个任务标 in_progress,逐项推进。"), r.push(" · 执行中发现步骤要改/补/细分 → 用 update_todo({id, content?, status?}) 按 id 增量改单项,不必重传整个清单。"), e?.humanConfirm ? r.push(" · 规划出多步方案若需用户拍板 → 先 request_human_confirmation 给方案选项,确认后再执行。") : r.push(" · 规划出多步方案若需用户拍板 → 以文字列出方案选项等用户回复,勿自行拍板。"), r.push(" · 规划阶段有轮次预算(maxPlanRevisions,默认 5):勿反复调研/改计划而不执行,规划充分后即开始 write 落地。")), t && (o ? (r.push("读写主数据用 read/write(高层入口,自动乐观锁 + 自动快照)。read({jsonPath}) 读子路径当前值(返回含 hash,write 时自动比对,无需手动传);read() 不传读整个主数据 + 说明。write 改值两姿势:① 改单个字段/子路径用 write({patch:{op:\"set\", jsonPath:\"路径.字段\", value:新值}})——patch.value 就是该字段的新值(类型匹配:string 直传字符串、number 传数字、对象传对象),不要包成 {字段:值} 对象(字段名已在 jsonPath);也兼容 write({value:新值, patch:{op,jsonPath}}) 顶层 value(向后兼容,但优先 patch.value,避免与整体 set 的 value 混淆);② 替换整个对象用 write({value:{整个新对象}})。op:set 设值 / remove 删 / merge 合并对象 / append 追加数组 / move 移动数组元素(value=目标路径字符串:数组本身=追加到末尾、数组内下标=插到该位置;同数组即重排如组件调序,目标下标按移除源后解释,一步完成免双 set 交换);批量多改动 write({patches:[{op,jsonPath,value},...]});删子路径 write({patch:{jsonPath:\"路径\"}, del:true})。写入自动经 schema 校验(失败不写,按错误提示改值类型/形状后重试)+ 自动存快照" + (s ? "。" : "(出错可用 restore_data 回退)。")), r.push("修改大对象/数组优先用 write 的 patch 增量(只发改动部分),避免整体重传被 max_tokens 截断致 JSON 不完整。"), r.push("读大数组(read 返回 hasMore=true)用 read({jsonPath,offset,limit}) 分页(offset+=limit 续读,默认 limit=50);一次读多个不相关子路径用 read({jsonPaths:[...]}) 省轮次;复杂 patches 改动先 write({patches,dryRun:true}) 预检(走完整校验不落盘)。"), r.push("read/describe 返回按 schema 投影:仅 schema 声明的字段可见(未声明字段自动隐藏,防误操作);要操作某字段需集成方在 schema 声明。"), s || (r.push("查任意路径完整约束或对比快照差异需切 advanced 工具模式(schema_data/diff_data,当前未装载勿调用);查历史快照值(只读不改当前)用 history_data({id?,jsonPath?})。"), r.push("在大数组里按条件筛选用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素 path/index;定位后用 write patch 改。找名字记不清的元素用 search_data(substring/regex/fuzzy)。批量过滤/映射/聚合/重写大数组用 eval_script(沙箱脚本,mode=query 只读/transform 落地)。"))) : (r.push("改主数据前先 get_data({jsonPath}) 读其当前真实值与 hash(返回末尾 hash=xxx),基于真实值改,不要凭记忆。写入(set/edit/delete)时回传 expectedHash=该 hash 启用乐观锁——若主数据在你 get 之后被外部代码/其他 agent/用户手动改过,会触发冲突:集成方若开启人工介入,工具会挂起等用户决定(保留外部/强制覆盖/回退),你应等待工具返回后按结果继续(保留外部→重新 get 再改;强制覆盖→已写入,继续;回退→已回退到历史快照,基于回退值重写);未开启人工介入时返回 VERSION_CONFLICT 不写入,重新 get 拿最新值与 hash 再改。"), r.push("不确定主数据字段结构时用 describe_data 查看说明。"), r.push("修改大对象/数组优先用 edit_data 增量 patch(只发改动部分),避免 set_data 整体重传被 max_tokens 截断导致 JSON 不完整、校验失败。"), r.push("修改主数据出错时可用 restore_data 回退最近一次。"), r.push("在大数组里按条件筛选元素用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素的 path/index;定位后再 edit_data 改。"), r.push("找名字记不清的元素用 search_data(支持 substring/regex/fuzzy 模糊搜索)。"), r.push("需要过滤/映射/聚合/批量重写大数组时用 eval_script(沙箱脚本,入参 data);只读探查用 mode=query,批量重写用 mode=transform(返回值经校验后落地)。"), r.push("读大数组用 read({jsonPath,offset,limit}) 分页(返回 hasMore=true 时 offset+=limit 续读);一次读多个不相关子路径用 read({jsonPaths});复杂改动先 write({...,dryRun:true}) 预检不落盘。"), r.push("对比当前与历史快照(或一段 JSON against)的差异用 diff_data({snapshotId?,against?})(返回结构化 path→from/to,verify 自纠/操作审计/\"刚才改了啥\");只读查历史快照值用 history_data({id?,jsonPath?})。"))), a.subagent && r.push("独立子任务可 spawn_agent 委派(过程隔离,不占主上下文):默认只读,需要子 agent 写数据时传 writablePaths(路径前缀白名单,越界 PATH_OUT_OF_SCOPE)。多个独立子任务可 spawn_agents 并行委派(各子互不通信,结论由你汇总;并行委派不可授写权限,写操作由你收尾执行)。"), a.inspectEnv && r.push("排查页面环境(当前 URL/浏览器/视口/集成方调试变量)用 inspect_env——不传参返回环境摘要(location/navigator/viewport/document),传 key 读特定 window 属性(如 inspect_env({key:\"appConfig\"}) 读 window.appConfig)。改完数据看渲染、定位\"为何没生效\"时用它(只读,不改数据)。"), a.domInspect && r.push("改完数据想确认渲染是否生效(或定位元素/辅助 UI 设计问答)用 get_dom({selector?,depth?}) 读渲染后 DOM(结构化返回 tag/attrs/text/children,depth 控制深度防爆炸,只读)。配合宿主 actions(save_draft/publish 等)形成\"改数据→get_dom 看渲染→触发动作\"闭环。"), a.draftWrite && !o && (r.push("生成超大 JSON(如 50+ 组件页面,单次 write 受 max_tokens 限制装不下)用 draft_write 分块构建 → draft_commit 原子提交:draft_write({draftId, chunk, mode}) mode:\"start\" 新建/\"append\" 追加(拼 JSON 片段到 drafts 池);累积完 draft_commit({draftId}) 合并 + schema 校验 + 写主数据(失败草稿保留可修后重试,成功自动清草稿)。小改仍用 write patch,只在大 JSON 从零生成时用 draft。"), r.push("⚠️ 大 JSON 分块构建是典型多轮工具调用(draft_write×N + draft_commit + read 确认 + 调研 read/query),默认 maxToolRounds=10 可能触顶被 while 截断导致草稿写不完;目标组件数大时集成方应在 createChatSdk 配 maxToolRounds ≥ 20(或按 N+5 估算)。draft_commit 提交同样走乐观锁(改前 read 拿 hash,bind 被改过会触发冲突介入,不静默覆盖)。")), a.todoDeps && r.push("复杂任务可用 todos 层级依赖:write_todos 时给 todo 传 parentId(父任务 id,表达层级)+ deps(依赖的 todo id 数组,必须先完成)。有依赖的任务,deps 全 completed 后再标 in_progress;完成时 update_todo({id, status:\"completed\", evidence:\"完成证据\"}) 记证据。无依赖关系的任务不传 parentId/deps(扁平)。"), a.focus && !o && (r.push("【上下文聚焦】判断任务范围,用 set_focus/add_focus/remove_focus/clear_focus 自动收敛工作范围:"), r.push(" · 局部任务(只改某一组件/区域,如「调导航栏」「改 components.3 样式」)→ 先 read 定位 jsonPath,再 set_focus({path:\"该子树路径\"}) 聚焦;聚焦后每轮只看该子树结构,写其他位置会被 PATH_DENIED 拒绝。"), r.push(" · 多个相关组件(如「同时改导航栏和页脚」)→ set_focus 聚焦首个后用 add_focus({path}) 追加其余;聚焦后可写任一焦点子树,越界仍被拒;移除单个用 remove_focus({path})。"), r.push(" · 全局任务(多处/整体结构,如「重排所有组件」「换主题」)→ 不要聚焦,保持全量视野直接写。"), r.push(" · 完成局部精修、要转向其他区域或做整体改动 → 调 clear_focus 退出聚焦(清空全部焦点),恢复全部读写权限。"), r.push(" · set_focus/add_focus 的 path 必须在 schema 内(类型校验);不确定路径先 read/describe_data 查。")), e?.subagents?.length) {
9461
- let t = e.subagents.filter((e) => (e.temperature ?? 0) >= qu || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), n = e.subagents.filter((e) => (e.temperature ?? 0) < qu && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
9509
+ let t = e.subagents.filter((e) => (e.temperature ?? 0) >= Ju || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), n = e.subagents.filter((e) => (e.temperature ?? 0) < Ju && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
9462
9510
  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(" · 简单/明确任务(如\"标题改红色\")直接执行,不必走规划-反思。");
9463
9511
  }
9464
9512
  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("用户在选项里选了哪个,就按那个方案继续;选「拒绝」则停止并询问如何调整。"));
@@ -9478,7 +9526,7 @@ function Ju(e, t, n = "simple", r, i) {
9478
9526
  }
9479
9527
  //#endregion
9480
9528
  //#region src/core/harness/resourcesPin.ts
9481
- function Yu(e) {
9529
+ function Xu(e) {
9482
9530
  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 懒注册。";
9483
9531
  return {
9484
9532
  name: "resourcesPin",
@@ -9493,78 +9541,78 @@ function Yu(e) {
9493
9541
  }
9494
9542
  //#endregion
9495
9543
  //#region src/core/backends/skillStore.ts
9496
- var Xu = "v:1::skill-store", Zu = "chat-sdk";
9497
- function Qu(e, t, n) {
9498
- return `${Xu}::${e}::${t}::${n}`;
9544
+ var Zu = "v:1::skill-store", Qu = "chat-sdk";
9545
+ function $u(e, t, n) {
9546
+ return `${Zu}::${e}::${t}::${n}`;
9499
9547
  }
9500
- function $u(e, t) {
9501
- return `${Xu}::${e}::${t}::`;
9548
+ function ed(e, t) {
9549
+ return `${Zu}::${e}::${t}::`;
9502
9550
  }
9503
- function ed(e = {}) {
9504
- let t = e.dbName ?? Zu, n = e.backend ?? "indexed", r = e.id ?? "", i, a, o = new Promise((e) => {
9551
+ function td(e = {}) {
9552
+ let t = e.dbName ?? Qu, n = e.backend ?? "indexed", r = e.id ?? "", i, a, o = new Promise((e) => {
9505
9553
  a = e;
9506
9554
  });
9507
9555
  return (async () => {
9508
9556
  try {
9509
9557
  if (n === "indexed") {
9510
9558
  if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
9511
- i = await yl(t), a(!0);
9559
+ i = await bl(t), a(!0);
9512
9560
  } else if (n === "session") {
9513
9561
  if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
9514
- i = bl(sessionStorage), a(!0);
9562
+ i = xl(sessionStorage), a(!0);
9515
9563
  } else if (n === "local") {
9516
9564
  if (typeof localStorage > "u") throw Error("localStorage 不可用");
9517
- i = bl(localStorage), a(!0);
9518
- } else i = vl(), a(!1);
9565
+ i = xl(localStorage), a(!0);
9566
+ } else i = yl(), a(!1);
9519
9567
  } catch {
9520
- i = vl(), a(!1);
9568
+ i = yl(), a(!1);
9521
9569
  }
9522
9570
  })(), {
9523
9571
  ready: o,
9524
9572
  async list() {
9525
9573
  let e = [];
9526
- return await i.scan($u(t, r), (t, n) => {
9574
+ return await i.scan(ed(t, r), (t, n) => {
9527
9575
  e.push(n);
9528
9576
  }), e;
9529
9577
  },
9530
9578
  async get(e) {
9531
- return await i.get(Qu(t, r, e));
9579
+ return await i.get($u(t, r, e));
9532
9580
  },
9533
9581
  async put(e) {
9534
9582
  try {
9535
- await i.set(Qu(t, r, e.name), e);
9583
+ await i.set($u(t, r, e.name), e);
9536
9584
  } catch (e) {
9537
- ul(e) && (i = vl());
9585
+ dl(e) && (i = yl());
9538
9586
  }
9539
9587
  },
9540
9588
  async remove(e) {
9541
- let n = Qu(t, r, e);
9589
+ let n = $u(t, r, e);
9542
9590
  return await i.get(n) == null ? !1 : (await i.del(n), !0);
9543
9591
  },
9544
9592
  async clear() {
9545
- await i.clearPrefix($u(t, r));
9593
+ await i.clearPrefix(ed(t, r));
9546
9594
  },
9547
9595
  dispose() {}
9548
9596
  };
9549
9597
  }
9550
- var td = /large_results\/[^\s"'`),]+\.txt/g;
9551
- function nd(e) {
9598
+ var nd = /large_results\/[^\s"'`),]+\.txt/g;
9599
+ function rd(e) {
9552
9600
  let t = /* @__PURE__ */ new Set(), n = (e) => {
9553
9601
  if (typeof e != "string" || !e) return;
9554
9602
  let n;
9555
- for (td.lastIndex = 0; (n = td.exec(e)) !== null;) t.add(n[0]);
9603
+ for (nd.lastIndex = 0; (n = nd.exec(e)) !== null;) t.add(n[0]);
9556
9604
  };
9557
9605
  for (let t of e) if (n(t.content), t.steps) for (let e of t.steps) n(e.result);
9558
9606
  return t;
9559
9607
  }
9560
- function rd(e, t) {
9608
+ function id(e, t) {
9561
9609
  let n = [];
9562
9610
  for (let r of Object.keys(e)) r.startsWith("large_results/") && !t.has(r) && n.push(r);
9563
9611
  return n;
9564
9612
  }
9565
9613
  //#endregion
9566
9614
  //#region src/core/utils/serialRunner.ts
9567
- function id() {
9615
+ function ad() {
9568
9616
  let e = Promise.resolve();
9569
9617
  return function(t) {
9570
9618
  let n = e.then(t, t);
@@ -9573,20 +9621,27 @@ function id() {
9573
9621
  }
9574
9622
  //#endregion
9575
9623
  //#region src/core/sdk/createChatSdk.ts
9576
- var ad = 30, od = /* @__PURE__ */ new Map();
9577
- function sd(e, t) {
9624
+ var od = 30, sd = /* @__PURE__ */ new Map();
9625
+ function cd(e, t) {
9578
9626
  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;
9579
9627
  }
9580
- function cd(e, t, n, r) {
9628
+ function ld(e) {
9629
+ return e === "spawn_agent" || e === "spawn_agents" || e.startsWith("use_");
9630
+ }
9631
+ function ud(e, t, n, r) {
9581
9632
  let i = 0;
9582
9633
  return {
9583
9634
  name: "sdk-events",
9584
9635
  wrapToolCall: async (t, r) => {
9585
- let i = await r(t), a = sd(t.name, t.args);
9586
- return a && e({
9636
+ let i = await r(t), a = cd(t.name, t.args);
9637
+ return a ? e({
9587
9638
  type: "data_change",
9588
9639
  operation: a,
9589
9640
  value: n()?.bind
9641
+ }) : i.status === "done" && ld(t.name) && e({
9642
+ type: "data_change",
9643
+ operation: "edit",
9644
+ value: n()?.bind
9590
9645
  }), i;
9591
9646
  },
9592
9647
  afterModel: (t) => {
@@ -9610,7 +9665,7 @@ function cd(e, t, n, r) {
9610
9665
  }
9611
9666
  };
9612
9667
  }
9613
- function ld(e, t, n, r, i) {
9668
+ function dd(e, t, n, r, i) {
9614
9669
  if (!n) return i && console.warn(`[page-agent-sdk][focus] capabilities.focus 关闭,${t} 忽略`), {
9615
9670
  ok: !1,
9616
9671
  error: "capabilities.focus 关闭"
@@ -9628,24 +9683,24 @@ function ld(e, t, n, r, i) {
9628
9683
  error: "当前无主数据 schema,无法聚焦"
9629
9684
  });
9630
9685
  }
9631
- function ud(e, n) {
9686
+ function fd(e, n) {
9632
9687
  let i = {
9633
9688
  prompt_tokens: 0,
9634
9689
  completion_tokens: 0,
9635
9690
  total_tokens: 0
9636
- }, a = Zc(() => W), o = /* @__PURE__ */ At(0), s = Cl(e.storage);
9691
+ }, a = Qc(() => W), o = /* @__PURE__ */ At(0), s = wl(e.storage);
9637
9692
  e.debug && s && s.onEvent((e) => console.log("[page-agent-sdk][storage]", e));
9638
- let { modelCaps: c, summaryLlmInvoke: l, titleLlmInvoke: u, compressDecisionInvoke: d } = Xc(e), f = c;
9693
+ let { modelCaps: c, summaryLlmInvoke: l, titleLlmInvoke: u, compressDecisionInvoke: d } = Zc(e), f = c;
9639
9694
  if (e.debug && console.log("[page-agent-sdk][modelCaps]", f), f.contextWindow < 2e5) throw Error(`[page-agent-sdk] 模型上下文窗口 ${f.contextWindow} 小于最小支持 ${ii}(需 ≥200K 窗口模型,如 GLM-5.2/Claude/Kimi/Qwen-1M/DeepSeek-v4)`);
9640
- let h = Al(e, f.contextWindow), g = h.enableLLMSummary !== !1, _ = (e.contextOptions && e.contextOptions.preserveLastToolResults) ?? kl[e.contextPreset ?? "auto"], v = new Set(_), y = e.llm;
9695
+ let h = jl(e, f.contextWindow), g = h.enableLLMSummary !== !1, _ = (e.contextOptions && e.contextOptions.preserveLastToolResults) ?? Al[e.contextPreset ?? "auto"], v = new Set(_), y = e.llm;
9641
9696
  e.debug && !l && console.warn("[page-agent-sdk][summarization] 未构造 llmInvoke(apiKey 缺失?),摘要回退零成本索引摘要");
9642
- let b = /* @__PURE__ */ bt([]), x = oc(e.vfs?.initialFiles, {
9697
+ let b = /* @__PURE__ */ bt([]), x = sc(e.vfs?.initialFiles, {
9643
9698
  persist: s ? { save: (e) => {
9644
9699
  G.sessionId && s && s.save(n, G.sessionId, { vfs: e });
9645
9700
  } } : void 0,
9646
9701
  maxBytes: e.vfs?.maxBytes,
9647
9702
  poolBytes: e.vfs?.poolBytes
9648
- }), S = wa([], { maxPlanRevisions: e.maxPlanRevisions }), C = Oa(), w = Xa({
9703
+ }), S = wa([], { maxPlanRevisions: e.maxPlanRevisions }), C = Oa(), w = Za({
9649
9704
  getSchema: () => L()?.schema,
9650
9705
  getBind: () => L()?.bind,
9651
9706
  unfocusGuidance: e.toolMode === "advanced" ? "tool" : "ask-user",
@@ -9653,20 +9708,20 @@ function ud(e, n) {
9653
9708
  type: "focus_change",
9654
9709
  focuses: e
9655
9710
  })
9656
- }), T = $a(), E = bo(e.memory || "");
9711
+ }), T = eo(), E = xo(e.memory || "");
9657
9712
  typeof e.memory == "function" && E.refresh();
9658
9713
  let D = { current: null }, O = e.data ? {
9659
9714
  ...e.data,
9660
9715
  description: e.data.description ?? "主数据对象"
9661
- } : void 0, k = !(e.subagents ?? []).some((e) => e._codeAsset) && El(e.capabilities).subagent, ee = e.subagents;
9662
- k && O?.schema && Qi(O.schema).length && (ee = [...e.subagents ?? [], Fc()], console.info("[page-agent-sdk] 检测到 schema 含代码组件数组(如 components[].code),已自动装配 HTML 代码子 agent(委派编排 + vfs 工作副本 + 格式校验 + 增量 commit)。需定制(codeField/formatCheck/craftNotes 等)请显式传 createHtmlSubagent(...)"));
9716
+ } : void 0, k = !(e.subagents ?? []).some((e) => e._codeAsset) && Dl(e.capabilities).subagent, ee = e.subagents;
9717
+ k && O?.schema && Qi(O.schema).length && (ee = [...e.subagents ?? [], Ic()], console.info("[page-agent-sdk] 检测到 schema 含代码组件数组(如 components[].code),已自动装配 HTML 代码子 agent(委派编排 + vfs 工作副本 + 格式校验 + 增量 commit)。需定制(codeField/formatCheck/craftNotes 等)请显式传 createHtmlSubagent(...)"));
9663
9718
  let A = (ee ?? []).filter((e) => !!e._codeAsset), j = /* @__PURE__ */ new Set();
9664
9719
  for (let e of A) {
9665
9720
  if (e._codeAsset.writablePaths.length) continue;
9666
9721
  let t = Qi(O?.schema, e._codeAsset.codeField);
9667
9722
  t.length ? (e._codeAsset.writablePaths = t, Array.isArray(e.writablePaths) && (e.writablePaths = t), e._rebuildCodeAssetPaths?.(t[0]), console.info(`[page-agent-sdk][createHtmlSubagent] 未传 writablePaths,已从 schema 推断: [${t.map((e) => `'${e}'`).join(", ")}]`)) : (console.warn("[page-agent-sdk][createHtmlSubagent] 未能从 schema 推断 writablePaths(开放 schema(z.any()/z.record())/嵌套容器(如 sections[].children[])/点路径 codeField(如 props.html_code)不支持自动推断),已跳过该 html 子 agent(整体不受影响);如确需代码资产机制(vfs + 格式校验 + 增量 commit),请显式传 writablePaths(代码组件 data 区,如 ['components'])"), j.add(e));
9668
9723
  }
9669
- let te = j.size ? A.filter((e) => !j.has(e)) : A, M = j.size ? (ee ?? []).filter((e) => !j.has(e)) : ee, ne = te.length > 0, N = te.flatMap((e) => e._codeAsset.writablePaths), re = te.flatMap((e) => e._codeAsset.writablePaths.map((t) => `${t}.${e._codeAsset.codeField}`)), ie = e.checkpoint, ae = ie !== void 0 && ie !== !1, P = ae ? Ro({
9724
+ let te = j.size ? A.filter((e) => !j.has(e)) : A, M = j.size ? (ee ?? []).filter((e) => !j.has(e)) : ee, ne = te.length > 0, N = te.flatMap((e) => e._codeAsset.writablePaths), re = te.flatMap((e) => e._codeAsset.writablePaths.map((t) => `${t}.${e._codeAsset.codeField}`)), ie = e.checkpoint, ae = ie !== void 0 && ie !== !1, P = ae ? zo({
9670
9725
  getData: () => L()?.bind,
9671
9726
  consumeDataDirty: () => I?.consumeDataDirty?.() ?? !0,
9672
9727
  slotPaths: O ? [""] : [],
@@ -9675,12 +9730,12 @@ function ud(e, n) {
9675
9730
  getTodos: () => D.current?.getState?.()?.todos ?? [],
9676
9731
  messages: b,
9677
9732
  maxCheckpoints: ie && typeof ie == "object" ? ie.maxCheckpoints : void 0
9678
- }) : null, oe = !ie || typeof ie != "object" || ie.auto !== !1, F = El(e.capabilities), se = F.dataOps, ce = F.draftWrite, le = F.tracing, ue = F.automation, de = nc(e);
9733
+ }) : null, oe = !ie || typeof ie != "object" || ie.auto !== !1, F = Dl(e.capabilities), se = F.dataOps, ce = F.draftWrite, le = F.tracing, ue = F.automation, de = rc(e);
9679
9734
  if (ne) {
9680
9735
  let e = te.map((e) => e._codeAsset.orchestratorPrompt).filter(Boolean).join("\n\n");
9681
9736
  e && (de += "\n\n" + e);
9682
9737
  } else O?.schema && Zi(O.schema) && (de += "\n\n" + ha.htmlDirectWriteFallback, console.warn("[page-agent-sdk] 检测到 schema 含 code 字段但未注册 html 子 agent:已自动注入「主 agent 自己写 HTML」编排(code 作普通字段直接 write,无 vfs 工作副本 / 无格式校验门禁)。如需代码资产机制(vfs + 格式校验 + 增量 commit + 主上下文 code 摘要),注册 createHtmlSubagent;若确为降级意图可忽略。"));
9683
- let fe = se && O ? Su(O, {
9738
+ let fe = se && O ? Cu(O, {
9684
9739
  onAudit: e.onAudit ?? (e.debug ? (e) => console.log("[page-agent-sdk][data audit]", e) : void 0),
9685
9740
  maxSnapshots: e.maxSnapshots,
9686
9741
  onConflict: a.set,
@@ -9689,17 +9744,17 @@ function ud(e, n) {
9689
9744
  vfsStore: ce || O?.resources?.length ? x : void 0,
9690
9745
  ...N.length ? { pgIdPaths: N } : {},
9691
9746
  ...re.length ? { largeTextPaths: re } : {}
9692
- }) : [], pe = se ? pu(fe, e.toolMode) : [], I = se && O ? fe.controller ?? null : null, me = se && O?.resources?.length && I?.getResourcesSnapshot ? Yu({
9747
+ }) : [], pe = se ? mu(fe, e.toolMode) : [], I = se && O ? fe.controller ?? null : null, me = se && O?.resources?.length && I?.getResourcesSnapshot ? Xu({
9693
9748
  getResourcesSnapshot: () => I?.getResourcesSnapshot?.() ?? [],
9694
9749
  toolsExposed: e.toolMode === "advanced"
9695
- }) : void 0, L = () => I?.get() ?? O, R = /* @__PURE__ */ new Map(), he = Gu(F, pe, wu, Au, Lu);
9750
+ }) : void 0, L = () => I?.get() ?? O, R = /* @__PURE__ */ new Map(), he = Ku(F, pe, Tu, ju, Ru);
9696
9751
  he.forEach((e) => R.set(e.name, "builtin"));
9697
9752
  let z = [...e.tools || []];
9698
9753
  z.forEach((e) => R.set(e.name, "user"));
9699
- let ge = Bu(e.actions ?? {});
9754
+ let ge = Vu(e.actions ?? {});
9700
9755
  ge.forEach((e) => R.set(e.name, "action"));
9701
- let _e = [], ve = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), ye = ve ? Ao() : null;
9702
- ye && R.set(Oo, "builtin");
9756
+ let _e = [], ve = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), ye = ve ? jo() : null;
9757
+ ye && R.set(ko, "builtin");
9703
9758
  let be = ae && P ? [r(async () => {
9704
9759
  let e = P.list();
9705
9760
  return e.length ? P.restore() ? `已回退到最近一次正常状态(checkpoint #${e[e.length - 1].id})。对话历史、主数据、vfs、todos 已整体还原。请基于回退后的状态重新判断并继续。` : "回退失败:无可用 checkpoint。" : "无可用 checkpoint,无法回退。";
@@ -9768,7 +9823,7 @@ function ud(e, n) {
9768
9823
  Te.forEach((e) => R.set(e.name, "builtin"));
9769
9824
  let Ee = [], De = /* @__PURE__ */ new Map(), V = H();
9770
9825
  function H() {
9771
- let { tools: e, collisions: t } = Ku([
9826
+ let { tools: e, collisions: t } = qu([
9772
9827
  {
9773
9828
  label: "builtin",
9774
9829
  tools: he
@@ -9805,13 +9860,13 @@ function ud(e, n) {
9805
9860
  return t.length && console.warn("[page-agent-sdk] 工具重名,后注册覆盖先注册:", t.map((e) => `${e.name}(${e.loser}→${e.winner})`).join(", ")), e;
9806
9861
  }
9807
9862
  let Oe = F.planning, ke = F.missionAnchor, Ae = F.workingMemory, je = F.skills, Me = F.vfs || ne;
9808
- if (Me) for (let e of pc) R.set(e, "builtin");
9863
+ if (Me) for (let e of mc) R.set(e, "builtin");
9809
9864
  if (Oe) for (let e of S.tools ?? []) R.set(e.name, "builtin");
9810
9865
  let Ne = F.summarization, Pe = F.agentCompression && !!d;
9811
9866
  e.debug && F.agentCompression && !d && console.warn("[page-agent-sdk][agentCompression] agentCompression 开启但 summaryLlm 不可用(或缺 apiKey / 模型不支持工具),压缩决策不启用,回退静态压缩");
9812
- let Fe = F.memory, Ie = F.subagent, Le = Ie ? cs() : void 0, Re = e.verify?.maxAttempts ?? 2, ze = !!(e.verify?.check || e.verify?.maxAttempts || e.verify?.adversarial), U = e.capabilities?.verify === !1, Be = (F.verify || ze && !U) && e.verify?.enabled !== !1 && Re > 0, Ve = F.contextInspector;
9867
+ let Fe = F.memory, Ie = F.subagent, Le = Ie ? ls() : void 0, Re = e.verify?.maxAttempts ?? 2, ze = !!(e.verify?.check || e.verify?.maxAttempts || e.verify?.adversarial), U = e.capabilities?.verify === !1, Be = (F.verify || ze && !U) && e.verify?.enabled !== !1 && Re > 0, Ve = F.contextInspector;
9813
9868
  ze && !Be && e.verify?.enabled !== !1 && console.warn("[page-agent-sdk][verify] 检测到 verify 配置(check/maxAttempts/adversarial)但未装载(capabilities.verify:false 显式关闭 或 maxAttempts≤0)");
9814
- let He = e.subagent, Ue = He?.allowedTools ?? [], We = e.permissions?.length ? Eo(e.permissions) : void 0, Ge = e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? Do(e.approval) : void 0, Ke = [...We ? [We] : [], ...Ge ? [Ge] : []], qe = !Ie || He?.enabled === !1 ? void 0 : ws({
9869
+ let He = e.subagent, Ue = He?.allowedTools ?? [], We = e.permissions?.length ? Do(e.permissions) : void 0, Ge = e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? Oo(e.approval) : void 0, Ke = [...We ? [We] : [], ...Ge ? [Ge] : []], qe = !Ie || He?.enabled === !1 ? void 0 : Ts({
9815
9870
  llm: He?.llm ?? e.llm,
9816
9871
  allTools: () => G.agent?.allTools ?? V,
9817
9872
  allowedTools: Ue.length ? Ue : void 0,
@@ -9835,7 +9890,7 @@ function ud(e, n) {
9835
9890
  timeoutMs: He?.timeoutMs
9836
9891
  }), Je = M?.map((e) => {
9837
9892
  if (!e._codeAsset) return e;
9838
- let t = e._codeAsset, n = Oc({
9893
+ let t = e._codeAsset, n = kc({
9839
9894
  writablePaths: t.writablePaths,
9840
9895
  codeVfsPrefix: t.codeVfsPrefix,
9841
9896
  ext: t.ext,
@@ -9850,7 +9905,7 @@ function ud(e, n) {
9850
9905
  ...e,
9851
9906
  middleware: r
9852
9907
  };
9853
- }), Ye = Ie && Je !== void 0 ? Ds(Je, {
9908
+ }), Ye = Ie && Je !== void 0 ? Os(Je, {
9854
9909
  llm: e.llm,
9855
9910
  allTools: () => G.agent?.allTools ?? V,
9856
9911
  debug: e.debug,
@@ -9871,8 +9926,8 @@ function ud(e, n) {
9871
9926
  "describe_data",
9872
9927
  "read",
9873
9928
  "fetch_document"
9874
- ], Qe = V.filter((e) => Ze.includes(e.name)), $e = Be ? Os({
9875
- check: e.verify.check ?? Ps({
9929
+ ], Qe = V.filter((e) => Ze.includes(e.name)), $e = Be ? ks({
9930
+ check: e.verify.check ?? Fs({
9876
9931
  schemas: () => L() ? { "": L().schema } : {},
9877
9932
  root: () => L()?.bind
9878
9933
  }),
@@ -9880,10 +9935,10 @@ function ud(e, n) {
9880
9935
  llm: e.llm,
9881
9936
  tools: Qe
9882
9937
  } : void 0
9883
- }) : void 0, et = Ve ? Js({
9938
+ }) : void 0, et = Ve ? Ys({
9884
9939
  contextWindow: f.contextWindow,
9885
- thresholdRatio: Al(e, f.contextWindow).summaryThresholdRatio
9886
- }) : void 0, tt = Ju({
9940
+ thresholdRatio: jl(e, f.contextWindow).summaryThresholdRatio
9941
+ }) : void 0, tt = Yu({
9887
9942
  ...F,
9888
9943
  humanConfirm: ve,
9889
9944
  subagents: M?.map((e) => ({
@@ -9891,9 +9946,9 @@ function ud(e, n) {
9891
9946
  description: e.description,
9892
9947
  temperature: e.temperature
9893
9948
  }))
9894
- }, se && !!O, e.toolMode, !!O?.resources?.length, { promptSoftCap: rs(f.contextWindow, h.promptSoftCapTokens) }), nt = O ? {
9949
+ }, se && !!O, e.toolMode, !!O?.resources?.length, { promptSoftCap: is(f.contextWindow, h.promptSoftCapTokens) }), nt = O ? {
9895
9950
  name: "dataHint",
9896
- augmentPrompt: () => tc(L(), e.schemaHint) || void 0
9951
+ augmentPrompt: () => nc(L(), e.schemaHint) || void 0
9897
9952
  } : null, rt = e.augmentSystem ? {
9898
9953
  name: "augmentSystem",
9899
9954
  augmentPrompt: (t) => {
@@ -9907,7 +9962,7 @@ function ud(e, n) {
9907
9962
  return;
9908
9963
  }
9909
9964
  }
9910
- } : null, it = Dl(e.onEvent), W = it.emit, at, ot = [], st = (e) => ({
9965
+ } : null, it = Ol(e.onEvent), W = it.emit, at, ot = [], st = (e) => ({
9911
9966
  name: e.name,
9912
9967
  description: e.description,
9913
9968
  content: typeof e.getContent == "function" ? e.getContent() : ""
@@ -9915,7 +9970,7 @@ function ud(e, n) {
9915
9970
  name: e.name,
9916
9971
  description: e.description,
9917
9972
  getContent: () => e.content
9918
- }), lt = e.skillStorage === !1 ? null : ed({
9973
+ }), lt = e.skillStorage === !1 ? null : td({
9919
9974
  ...typeof e.skillStorage == "object" ? e.skillStorage : {},
9920
9975
  id: e.skillStorage && typeof e.skillStorage == "object" && e.skillStorage.id ? e.skillStorage.id : `agent::${n}`
9921
9976
  }), ut = () => {
@@ -9938,7 +9993,7 @@ function ud(e, n) {
9938
9993
  G.infoTick.value++;
9939
9994
  }
9940
9995
  } catch {}
9941
- }, ft = Ne ? ss({
9996
+ }, ft = Ne ? cs({
9942
9997
  ...h,
9943
9998
  llmInvoke: l,
9944
9999
  getRegisteredData: () => L() ? [{ description: L().description ?? "主数据对象" }] : [],
@@ -9947,12 +10002,12 @@ function ud(e, n) {
9947
10002
  decideInvoke: d,
9948
10003
  getSnapshot: () => et?.getSnapshot()
9949
10004
  } : {}
9950
- }) : void 0, pt = Ml([
10005
+ }) : void 0, pt = Nl([
9951
10006
  ...nt ? [nt] : [],
9952
10007
  tt,
9953
10008
  ...ke ? [C] : [],
9954
10009
  ...Oe ? [S] : [],
9955
- ...je ? [at = yo(e.skills || [], {
10010
+ ...je ? [at = bo(e.skills || [], {
9956
10011
  readVfs: Me ? (e) => x.files[e]?.content : void 0,
9957
10012
  hostScriptEnabled: F.skillHostScript,
9958
10013
  onToolsReady: (e, t) => {
@@ -9963,15 +10018,15 @@ function ud(e, n) {
9963
10018
  V = H(), G.agent && G.agent.setTools(V), G.infoTick.value++;
9964
10019
  }
9965
10020
  })] : [],
9966
- ...Me ? [hc(x)] : [],
10021
+ ...Me ? [gc(x)] : [],
9967
10022
  ...ft ? [ft] : [],
9968
10023
  ...Ae ? [T] : [],
9969
10024
  ...B ? [w] : [],
9970
10025
  ...me ? [me] : [],
9971
10026
  ...Fe ? [E] : [],
9972
10027
  ...We ? [We] : [],
9973
- ...ae && oe && P ? [zo(P)] : [],
9974
- ...ve ? [jo()] : [],
10028
+ ...ae && oe && P ? [Bo(P)] : [],
10029
+ ...ve ? [Mo()] : [],
9975
10030
  ...Ge ? [Ge] : [],
9976
10031
  ...$e ? [$e] : [],
9977
10032
  ...qe ? [qe] : [],
@@ -9979,12 +10034,12 @@ function ud(e, n) {
9979
10034
  ...rt ? [rt] : [],
9980
10035
  ...et ? [et] : [],
9981
10036
  ...e.middleware || [],
9982
- ...ue ? [Ru(i, {
10037
+ ...ue ? [zu(i, {
9983
10038
  tokenBudget: e.tokenBudget,
9984
10039
  timeBudgetMs: e.timeBudgetMs
9985
10040
  }, W)] : [],
9986
- cd(W, b, L, i)
9987
- ]), mt = e.maxMemoryRounds ?? ad, ht = e.approval?.timeoutMs, gt = ht === void 0 || ht === 0 ? 3e4 : !Number.isFinite(ht) || ht < 0 ? 0 : ht;
10041
+ ud(W, b, L, i)
10042
+ ]), mt = e.maxMemoryRounds ?? od, ht = e.approval?.timeoutMs, gt = ht === void 0 || ht === 0 ? 3e4 : !Number.isFinite(ht) || ht < 0 ? 0 : ht;
9988
10043
  function _t(e) {
9989
10044
  if (gt) return (t) => {
9990
10045
  if (t.type !== "approval_request") return;
@@ -10013,7 +10068,7 @@ function ud(e, n) {
10013
10068
  async function xt() {
10014
10069
  s && (yt.value = (await s.listSessions(n)).sort((e, t) => t.lastAccessed - e.lastAccessed));
10015
10070
  }
10016
- let St = id(), Ct = /* @__PURE__ */ new Set();
10071
+ let St = ad(), Ct = /* @__PURE__ */ new Set();
10017
10072
  function wt(e) {
10018
10073
  let t = new AbortController();
10019
10074
  return e && (e.aborted ? t.abort() : e.addEventListener("abort", () => t.abort(), { once: !0 })), Ct.add(t), {
@@ -10256,7 +10311,7 @@ function ud(e, n) {
10256
10311
  })), e.memory && s.save(n, G.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), xt(), q = void 0, jt = !1, G.infoTick.value++, r;
10257
10312
  },
10258
10313
  resetSession: () => {
10259
- Tt(), a.resolve("keep_external"), G.sessionId = Qc(), b.splice(0, b.length), x.clear?.(), S.reset([]), e.memory || E.reset(""), C.reset(), T.reset(), w.reset(), P && P.importStack([]), G.agent && (G.agent.debugLogs.value = []), s && s.createSession(G.agentId, e.session?.title, G.sessionId), W({
10314
+ Tt(), a.resolve("keep_external"), G.sessionId = $c(), b.splice(0, b.length), x.clear?.(), S.reset([]), e.memory || E.reset(""), C.reset(), T.reset(), w.reset(), P && P.importStack([]), G.agent && (G.agent.debugLogs.value = []), s && s.createSession(G.agentId, e.session?.title, G.sessionId), W({
10260
10315
  type: "session_restored",
10261
10316
  sessionId: G.sessionId,
10262
10317
  rounds: 0
@@ -10264,7 +10319,7 @@ function ud(e, n) {
10264
10319
  },
10265
10320
  stream: (e, t, n) => {
10266
10321
  if (!G.agent) throw Error("page-agent-sdk: agent 尚未初始化完成,请先 await mount()");
10267
- x?.setProtectedRefs?.(nd(e));
10322
+ x?.setProtectedRefs?.(rd(e));
10268
10323
  let r = (e) => {
10269
10324
  t?.(e), W(e), e.type === "subagent" && (e.kind === "tool_call" || e.kind === "tool_result") && G.infoTick.value++;
10270
10325
  };
@@ -10279,7 +10334,7 @@ function ud(e, n) {
10279
10334
  if (G.refCount--, G.refCount <= 0) {
10280
10335
  Tt(), s && (x.flush?.(), s.flush(), s.dispose()), lt && lt.dispose();
10281
10336
  let e = G.mcpClosers.splice(0);
10282
- e.length && Promise.allSettled(e.map((e) => e())), od.delete(n);
10337
+ e.length && Promise.allSettled(e.map((e) => e())), sd.delete(n);
10283
10338
  }
10284
10339
  },
10285
10340
  resolveConflict: a.resolve,
@@ -10299,14 +10354,14 @@ function ud(e, n) {
10299
10354
  },
10300
10355
  setLlm(t) {
10301
10356
  let n;
10302
- if (Vc(t)) n = t;
10357
+ if (Hc(t)) n = t;
10303
10358
  else {
10304
10359
  let e = t;
10305
10360
  if ((e.provider ?? "openai") === "anthropic") throw Error("[page-agent-sdk][setLlm] 切换到 Anthropic 需传 BaseChatModel 实例(动态 import 无法同步);请先 const { ChatAnthropic } = await import(\"@langchain/anthropic\") 构造实例后传入");
10306
10361
  n = p(e);
10307
10362
  }
10308
10363
  typeof n.bindTools != "function" && e.debug && console.warn("[page-agent-sdk][setLlm] 新模型不支持 bindTools(tool calling 会失效)"), y = t;
10309
- let r = Vc(t) ? void 0 : t;
10364
+ let r = Hc(t) ? void 0 : t;
10310
10365
  if (f = ai({
10311
10366
  model: r?.model ?? t.model ?? t.modelName,
10312
10367
  contextWindow: e.contextWindow ?? r?.contextWindow,
@@ -10349,8 +10404,8 @@ function ud(e, n) {
10349
10404
  return {
10350
10405
  id: n,
10351
10406
  sessionId: G.sessionId,
10352
- model: Vc(y) ? y.model ?? y.modelName : y.model,
10353
- systemPrompt: G.agent?.getEffectiveSystemPrompt?.() ?? de + tc(L(), e.schemaHint),
10407
+ model: Hc(y) ? y.model ?? y.modelName : y.model,
10408
+ systemPrompt: G.agent?.getEffectiveSystemPrompt?.() ?? de + nc(L(), e.schemaHint),
10354
10409
  tools: (G.agent?.allTools ?? V).map((e) => ({
10355
10410
  name: e.name,
10356
10411
  description: e.description,
@@ -10369,7 +10424,7 @@ function ud(e, n) {
10369
10424
  compression: {
10370
10425
  contextWindow: f.contextWindow,
10371
10426
  summaryThresholdRatio: h.summaryThresholdRatio ?? .5,
10372
- promptSoftCap: rs(f.contextWindow, h.promptSoftCapTokens)
10427
+ promptSoftCap: is(f.contextWindow, h.promptSoftCapTokens)
10373
10428
  },
10374
10429
  memory: E.get(),
10375
10430
  middleware: pt.map((e) => e.name),
@@ -10391,7 +10446,7 @@ function ud(e, n) {
10391
10446
  spans: G.agent.spans.value,
10392
10447
  metrics: ci(G.agent.spans.value)
10393
10448
  } : void 0,
10394
- actions: Vu(e.actions ?? {}),
10449
+ actions: Hu(e.actions ?? {}),
10395
10450
  subagent: {
10396
10451
  enabled: !!qe,
10397
10452
  maxDepth: e.subagent?.maxDepth ?? 1,
@@ -10440,11 +10495,11 @@ function ud(e, n) {
10440
10495
  return B ? w.getFocuses() : [];
10441
10496
  },
10442
10497
  setFocus(t) {
10443
- let n = ld(t, "setFocus", B, () => L()?.schema, e.debug);
10498
+ let n = dd(t, "setFocus", B, () => L()?.schema, e.debug);
10444
10499
  return n.ok ? (w.setFocus(t), G.infoTick.value++, { ok: !0 }) : n;
10445
10500
  },
10446
10501
  addFocus(t) {
10447
- let n = ld(t, "addFocus", B, () => L()?.schema, e.debug);
10502
+ let n = dd(t, "addFocus", B, () => L()?.schema, e.debug);
10448
10503
  return n.ok ? w.getFocuses().length >= 8 ? (e.debug && console.warn("[page-agent-sdk][focus] addFocus 拒绝:焦点数已达上限 8(augmentPrompt 注入每焦点子树 schema,过多致 system prompt 超预算)"), {
10449
10504
  ok: !1,
10450
10505
  error: "焦点数上限 8(避免 system prompt 撑爆)"
@@ -10488,18 +10543,18 @@ function ud(e, n) {
10488
10543
  }
10489
10544
  function Dt(e) {
10490
10545
  let t = {};
10491
- for (let n of nd(e)) {
10546
+ for (let n of rd(e)) {
10492
10547
  let e = x.files[n];
10493
10548
  e && (t[n] = e.content);
10494
10549
  }
10495
10550
  return t;
10496
10551
  }
10497
10552
  function Ot() {
10498
- let e = rd(x.files, nd(b));
10553
+ let e = id(x.files, rd(b));
10499
10554
  for (let t of e) delete x.files[t];
10500
10555
  }
10501
10556
  function kt() {
10502
- let e = Jo(b, mt);
10557
+ let e = Yo(b, mt);
10503
10558
  if (!e.trimmed) return;
10504
10559
  let { older: t, summary: n } = e;
10505
10560
  if (W({
@@ -10517,9 +10572,9 @@ function ud(e, n) {
10517
10572
  let n = e.summary, { prevSeg: r } = e;
10518
10573
  (async () => {
10519
10574
  try {
10520
- let e = await l($o(t, v)), i = b.indexOf(n);
10575
+ let e = await l(es(t, v)), i = b.indexOf(n);
10521
10576
  if (i < 0) return;
10522
- b[i].content = qo(t, r, e), Mt();
10577
+ b[i].content = Jo(t, r, e), Mt();
10523
10578
  } catch {}
10524
10579
  })();
10525
10580
  }
@@ -10543,7 +10598,7 @@ function ud(e, n) {
10543
10598
  s.save(n, G.sessionId, { focus: e.length ? e : null });
10544
10599
  }
10545
10600
  ue && P && (s.save(n, G.sessionId, { checkpoints: P.exportStack() }), s.save(n, G.sessionId, { usage: i }));
10546
- let a = Bc(b);
10601
+ let a = Vc(b);
10547
10602
  a && a !== q && (q = a, s.updateTitle(n, G.sessionId, a)), e.autoTitle !== !1 && u && !jt && b.some((e) => e.role === "user") && b.some((e) => e.role === "assistant") && (jt = !0, (async () => {
10548
10603
  let e = await u(b);
10549
10604
  e && (await s.updateTitle(n, G.sessionId, e), await xt());
@@ -10551,7 +10606,7 @@ function ud(e, n) {
10551
10606
  }
10552
10607
  return G.initDone = (async () => {
10553
10608
  if (await Et(), await K(), e.mcp?.length) {
10554
- let t = await Promise.allSettled(e.mcp.map((e) => $s(e)));
10609
+ let t = await Promise.allSettled(e.mcp.map((e) => ec(e)));
10555
10610
  G.mcpClosers = t.flatMap((e) => e.status === "fulfilled" ? [e.value.close] : []), G.mcpServers = [], t.forEach((t, n) => {
10556
10611
  let r = e.mcp[n], i = r.name ?? r.url;
10557
10612
  t.status === "fulfilled" ? (G.mcpServers.push({
@@ -10561,7 +10616,7 @@ function ud(e, n) {
10561
10616
  }), t.value.tools.forEach((e) => R.set(e.name, `mcp:${i}`)), _e.push(...t.value.tools)) : console.warn(`[page-agent-sdk][mcp] server ${i} 连接失败:`, t.reason);
10562
10617
  }), V = H(), e.debug && console.log(`[page-agent-sdk][mcp] 注入 ${_e.length} 个工具,${G.mcpServers.length} 个 server`);
10563
10618
  }
10564
- let t = Vc(e.llm) ? e.llm : await m(e.llm);
10619
+ let t = Hc(e.llm) ? e.llm : await m(e.llm);
10565
10620
  G.agent = Ui({
10566
10621
  llm: t,
10567
10622
  systemPrompt: de,
@@ -10593,12 +10648,12 @@ function ud(e, n) {
10593
10648
  });
10594
10649
  })(), G;
10595
10650
  }
10596
- function dd(e, t) {
10597
- let n = e.id ?? Qc();
10651
+ function pd(e, t) {
10652
+ let n = e.id ?? $c();
10598
10653
  e.id || console.warn(`[page-agent-sdk] 未传 options.id,已生成随机 id "${n}"。刷新后持久化数据无法恢复,请传稳定 id。`);
10599
- let r = e.streaming ?? !0, i = e.ui ?? "default", a, o = e.shareContext ? od.get(n) : void 0;
10600
- o ? a = o : (a = ud(e, n), e.shareContext && od.set(n, a)), a.refCount++;
10601
- let s = null, c = wl(e), l = null, u = null;
10654
+ let r = e.streaming ?? !0, i = e.ui ?? "default", a, o = e.shareContext ? sd.get(n) : void 0;
10655
+ o ? a = o : (a = fd(e, n), e.shareContext && sd.set(n, a)), a.refCount++;
10656
+ let s = null, c = Tl(e), l = null, u = null;
10602
10657
  async function d(n) {
10603
10658
  if (await a.initDone, s) {
10604
10659
  s.show();
@@ -10762,7 +10817,7 @@ function dd(e, t) {
10762
10817
  error: "schema 校验失败:" + (t.error?.message ?? "未知错误")
10763
10818
  };
10764
10819
  }
10765
- return Fo(r, e), a.dataOpsController?.markDataDirty?.(), t?.emit !== !1 && a.emit({
10820
+ return Io(r, e), a.dataOpsController?.markDataDirty?.(), t?.emit !== !1 && a.emit({
10766
10821
  type: "data_change",
10767
10822
  operation: "set",
10768
10823
  value: r
@@ -10770,12 +10825,12 @@ function dd(e, t) {
10770
10825
  },
10771
10826
  vfsWrite: (e, t) => {
10772
10827
  let n = typeof t == "string" ? t : JSON.stringify(t);
10773
- a.vfsStore.files[uc(e)] = {
10828
+ a.vfsStore.files[dc(e)] = {
10774
10829
  content: n,
10775
10830
  updatedAt: Date.now()
10776
10831
  };
10777
10832
  },
10778
- vfsRead: (e) => a.vfsStore.files[uc(e)]?.content,
10833
+ vfsRead: (e) => a.vfsStore.files[dc(e)]?.content,
10779
10834
  createResource: (e, t) => {
10780
10835
  let n = a.dataOpsController;
10781
10836
  if (!n?.createResource) throw Error("[page-agent-sdk] createResource 不可用:需配 data.resources + vfsStore(capabilities.vfs 默认开)");
@@ -10814,12 +10869,12 @@ function dd(e, t) {
10814
10869
  }
10815
10870
  //#endregion
10816
10871
  //#region src/core/sdk/ragSubagent.ts
10817
- var fd = "你是知识检索专家。可用工具:search_docs(语义检索)/ load_doc(按 source 加载)/ vfs_grep+vfs_read(搜预注入文档)/ fetch_document(公网 URL)。\n\n工作方式:\n1. 分析任务,拆出需查证的要点(如:需要哪些组件、各自的 props 约束、UI 规范要求);\n2. 多源检索:先 vfs_grep 搜预注入文档(快、静态)→ 不够用 search_docs 语义检索 → 需特定文档用 load_doc → 公网用 fetch_document;\n3. 检索结果不足时换关键词、扩大 topK、或换源重试;\n4. 综合成结构化、可执行结论(不堆原文,提炼成可直接用于决策/配置的信息);\n5. 标注关键信息来源(文档名/段落),便于溯源;检索不到明确说「未检索到」,不编造。\n\n你是只读检索角色,不要尝试修改任何数据。", pd = "# 知识检索策略(RAG)\n\n## 多源决策树\n- vfs_grep / vfs_read:搜集成方预注入 vfs 的文档(组件文档 / UI 规范)—— 快、静态,先查\n- search_docs:语义检索(retriever 向量库)—— 模糊匹配,关键词不确定 / 语义相似时用\n- load_doc:按 source 精确加载(已知文档 id / URL / key)—— 精确取特定文档\n- fetch_document:公网 URL —— 查公开资料\n\n## 综合规范\n- 多源交叉验证(关键结论优先 ≥2 源印证,或单一权威源)\n- 标注来源(文档名 / URL / 段落),便于溯源\n- 结构化、可执行结论(组件清单 + 各自 props 约束 + 适用场景),不堆原文\n- 未检索到明确说「未检索到」,不编造;建议替代方案(改关键词 / 建议写代码组件等)\n\n## 何时用何源\n- 静态文档(组件库文档 / UI 规范):vfs_grep\n- 语义相似(「瀑布流组件」「倒计时」「拼团」):search_docs\n- 已知文档 id / URL:load_doc\n- 公开 URL(设计规范网站 / 第三方文档):fetch_document", md = {
10872
+ var md = "你是知识检索专家。可用工具:search_docs(语义检索)/ load_doc(按 source 加载)/ vfs_grep+vfs_read(搜预注入文档)/ fetch_document(公网 URL)。\n\n工作方式:\n1. 分析任务,拆出需查证的要点(如:需要哪些组件、各自的 props 约束、UI 规范要求);\n2. 多源检索:先 vfs_grep 搜预注入文档(快、静态)→ 不够用 search_docs 语义检索 → 需特定文档用 load_doc → 公网用 fetch_document;\n3. 检索结果不足时换关键词、扩大 topK、或换源重试;\n4. 综合成结构化、可执行结论(不堆原文,提炼成可直接用于决策/配置的信息);\n5. 标注关键信息来源(文档名/段落),便于溯源;检索不到明确说「未检索到」,不编造。\n\n你是只读检索角色,不要尝试修改任何数据。", hd = "# 知识检索策略(RAG)\n\n## 多源决策树\n- vfs_grep / vfs_read:搜集成方预注入 vfs 的文档(组件文档 / UI 规范)—— 快、静态,先查\n- search_docs:语义检索(retriever 向量库)—— 模糊匹配,关键词不确定 / 语义相似时用\n- load_doc:按 source 精确加载(已知文档 id / URL / key)—— 精确取特定文档\n- fetch_document:公网 URL —— 查公开资料\n\n## 综合规范\n- 多源交叉验证(关键结论优先 ≥2 源印证,或单一权威源)\n- 标注来源(文档名 / URL / 段落),便于溯源\n- 结构化、可执行结论(组件清单 + 各自 props 约束 + 适用场景),不堆原文\n- 未检索到明确说「未检索到」,不编造;建议替代方案(改关键词 / 建议写代码组件等)\n\n## 何时用何源\n- 静态文档(组件库文档 / UI 规范):vfs_grep\n- 语义相似(「瀑布流组件」「倒计时」「拼团」):search_docs\n- 已知文档 id / URL:load_doc\n- 公开 URL(设计规范网站 / 第三方文档):fetch_document", gd = {
10818
10873
  name: "rag-search",
10819
10874
  description: "多源知识检索策略:vfs 预注入文档 → 语义检索 → 指定文档加载 → 公网;综合结构化结论 + 溯源",
10820
- getContent: () => pd
10875
+ getContent: () => hd
10821
10876
  };
10822
- function hd(e, n, i) {
10877
+ function _d(e, n, i) {
10823
10878
  return r(async ({ query: e, topK: t }) => {
10824
10879
  try {
10825
10880
  let r = await n(e, { topK: t ?? i });
@@ -10836,7 +10891,7 @@ function hd(e, n, i) {
10836
10891
  })
10837
10892
  });
10838
10893
  }
10839
- function gd(e, n) {
10894
+ function vd(e, n) {
10840
10895
  return r(async ({ source: e }) => {
10841
10896
  try {
10842
10897
  let t = await n(e), r = Array.isArray(t) ? t : [t];
@@ -10850,11 +10905,11 @@ function gd(e, n) {
10850
10905
  schema: t.object({ source: t.string().describe("文档标识(id/URL/key)") })
10851
10906
  });
10852
10907
  }
10853
- function _d(e) {
10908
+ function yd(e) {
10854
10909
  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;
10855
10910
  if (!t && !n && r === !1) throw Error("[page-agent-sdk][createRagSubagent] 至少配一种知识源:retriever / loader / useVfs(true)");
10856
10911
  let p = [];
10857
- t && p.push(hd(s, t, o)), n && p.push(gd(c, n)), f && p.push(...f);
10912
+ t && p.push(_d(s, t, o)), n && p.push(vd(c, n)), f && p.push(...f);
10858
10913
  let m = r ? [
10859
10914
  "vfs_grep",
10860
10915
  "vfs_read",
@@ -10863,17 +10918,17 @@ function _d(e) {
10863
10918
  return {
10864
10919
  id: i,
10865
10920
  description: a ?? "检索知识库(组件文档/UI 规范/业务规则),返回有依据的结构化结论。需要查阅文档才能回答或决定如何配置时委派",
10866
- systemPrompt: fd,
10921
+ systemPrompt: md,
10867
10922
  tools: p.length ? p : void 0,
10868
10923
  allowedTools: m,
10869
- skills: d ?? [md],
10924
+ skills: d ?? [gd],
10870
10925
  maxToolRounds: l,
10871
10926
  ...u === void 0 ? {} : { summarization: u }
10872
10927
  };
10873
10928
  }
10874
10929
  //#endregion
10875
10930
  //#region src/core/utils/clipboard.ts
10876
- async function vd(e) {
10931
+ async function bd(e) {
10877
10932
  try {
10878
10933
  let t = globalThis.navigator?.clipboard;
10879
10934
  if (t && typeof t.writeText == "function") return await t.writeText(e), !0;
@@ -10891,8 +10946,8 @@ async function vd(e) {
10891
10946
  }
10892
10947
  //#endregion
10893
10948
  //#region src/core/composables/useChat.ts
10894
- var yd = 4e3;
10895
- function bd(e = {}) {
10949
+ var xd = 4e3;
10950
+ function Sd(e = {}) {
10896
10951
  let { fetchResponse: t, fetchStream: n, onPersist: r, onClear: i, onQueuedCleared: a } = e, o = /* @__PURE__ */ bt({
10897
10952
  messages: e.messages ?? [],
10898
10953
  loading: !1,
@@ -10961,7 +11016,7 @@ function bd(e = {}) {
10961
11016
  let t = e.delta || "";
10962
11017
  n.subReasonFull = (n.subReasonFull || "") + t;
10963
11018
  let r = (n.subReason || "") + t;
10964
- n.subReason = r.length > yd ? r.slice(-4e3) : r;
11019
+ n.subReason = r.length > xd ? r.slice(-4e3) : r;
10965
11020
  break;
10966
11021
  }
10967
11022
  n.children ||= [];
@@ -11090,9 +11145,9 @@ function bd(e = {}) {
11090
11145
  }
11091
11146
  //#endregion
11092
11147
  //#region src/core/composables/chatContext.ts
11093
- var xd = Symbol("chatContext");
11094
- function Sd(e = {}) {
11095
- let t = bd({
11148
+ var Cd = Symbol("chatContext");
11149
+ function wd(e = {}) {
11150
+ let t = Sd({
11096
11151
  fetchResponse: e.fetchResponse,
11097
11152
  fetchStream: e.fetchStream,
11098
11153
  messages: e.messages,
@@ -11112,7 +11167,7 @@ function Sd(e = {}) {
11112
11167
  }, h = /* @__PURE__ */ At({}), g = (e) => h.value[e] === !0, _ = (e) => {
11113
11168
  h.value[e] = !g(e);
11114
11169
  }, v = /* @__PURE__ */ At(!1), y = (e) => {
11115
- vd(e).then((e) => {
11170
+ bd(e).then((e) => {
11116
11171
  e && (v.value = !0, setTimeout(() => {
11117
11172
  v.value = !1;
11118
11173
  }, 1500));
@@ -11180,15 +11235,15 @@ function Sd(e = {}) {
11180
11235
  }
11181
11236
  };
11182
11237
  }
11183
- function Cd() {
11184
- let e = Ln(xd);
11238
+ function Td() {
11239
+ let e = Ln(Cd);
11185
11240
  if (!e) throw Error("useChatContext 必须在 provide(chatContextKey) 的组件子树内调用");
11186
11241
  return e;
11187
11242
  }
11188
11243
  //#endregion
11189
11244
  //#region src/core/index.headless.ts
11190
- function wd(e) {
11191
- return dd(e);
11245
+ function Ed(e) {
11246
+ return pd(e);
11192
11247
  }
11193
11248
  //#endregion
11194
- export { Tl as CAPABILITIES, Ol as CONTEXT_PRESETS, zc as CompressDecisionSchema, ns as DEFAULT_PROMPT_SOFT_CAP, ec as DEFAULT_SYSTEM_PROMPT, gc as HTML_VOID_TAGS, Oo as HUMAN_CONFIRM_TOOL_NAME, ii as MIN_CONTEXT_WINDOW, ts as SOFT_CAP_MIN_WINDOW, Yo as STOP_WORDS, ka as UNSAFE_KEYS, Vu as actionsToInspectInfo, Bu as actionsToTools, Zr as agentError, qs as analyzeContext, za as applyPatchToClone, Ha as applyPatchToLive, Xr as asAgentError, tc as buildDataPrompt, nc as buildSystemPrompt, xd as chatContextKey, mu as commitSetToBind, $s as connectMcp, m as constructLlmFromConfig, p as constructOpenLlmSync, vd as copyText, Ui as createAgent, Do as createApprovalMiddleware, Sd as createChatContext, wd as createChatSdk, Ro as createCheckpointManager, zo as createCheckpointMiddleware, Zc as createConflictManager, Js as createContextInspectorMiddleware, Su as createDataOps, Mc as createHtmlFormatCheck, Fc as createHtmlSubagent, jo as createHumanConfirmMiddleware, Ao as createHumanConfirmTool, vl as createMemoryBackend, bo as createMemoryMiddleware, u as createProxyLlm, _d as createRagSubagent, ro as createSandboxRunner, Dl as createSdkEvents, id as createSerialRunner, Sl as createSessionStore, ed as createSkillStore, ws as createSubagentMiddleware, cs as createSubagentTracker, Ds as createSubagentsMiddleware, Ju as createUsageHintsMiddleware, Os as createVerifyMiddleware, oc as createVfs, bl as createWebStorageBackend, Ps as createWriteBackCheck, Pa as deepClone, Wu as defineDataToolset, ao as defineSkill, Ic as defineTool, Na as deleteByPath, Bc as deriveTitle, oa as describeSchemaNode, Di as detectGarbledToolCall, Ga as diffObjects, Ou as domToStructure, Au as domTools, Uu as domToolsStatic, Zo as estimateMessageTokens, Qo as estimateRoundTokens, X as estimateTokens, g as extractReasoningDelta, ya as extractSchemaHint, Ys as extractText, h as extractTextDelta, _ as extractUsage, wu as fetchDocTools, Hu as fetchTools, pu as filterByToolMode, sa as formatConstraints, Kr as formatZodIssues, Z as getByPath, ku as getDomTool, Nu as getEnvSummary, qi as getSchemaAtPath, Wi as getSchemaTopKeys, ci as getTraceMetrics, $ as hashValue, ma as htmlOrchestratorPrompt, $o as indexSummarize, Iu as inspectEnvTool, Lu as inspectTools, Vc as isChatModel, vi as isContextLengthError, Gi as isPathAllowed, ul as isQuotaError, Aa as isUnsafePath, Hl as jpEval, Jr as jsonParseError, La as limitDepth, Fa as maybeParseValue, v as normalizeUsage, si as offloadPassThroughChars, oi as offloadThresholdChars, pa as presets, ea as projectBySchema, $i as projectBySchemaDeep, Ia as projectFields, es as recallRounds, ca as renderSchemaHint, la as renderSchemaOverview, fa as renderSchemaShallow, El as resolveCapabilities, Al as resolveContextOptions, wl as resolveDialogConfig, Xc as resolveLlm, ai as resolveModelCaps, rs as resolvePromptSoftCap, Cl as resolveStorage, Wa as restoreInPlace, Ua as restoreLive, Yr as routeError, io as runHostScript, Kl as runSandboxedScript, ja as safeMerge, Mu as safeSerialize, Q as safeStringify, Wl as searchJson, Gu as selectBuiltinTools, Ma as setByPath, is as shouldTriggerCompression, ha as systemPromptHelpers, Xo as tokenize, Y as toolError, Ki as unwrapSchema, bd as useChat, Cd as useChatContext, vc as validateHtmlFormat, e as z, qr as zodError };
11249
+ export { El as CAPABILITIES, kl as CONTEXT_PRESETS, Bc as CompressDecisionSchema, rs as DEFAULT_PROMPT_SOFT_CAP, tc as DEFAULT_SYSTEM_PROMPT, _c as HTML_VOID_TAGS, ko as HUMAN_CONFIRM_TOOL_NAME, ii as MIN_CONTEXT_WINDOW, ns as SOFT_CAP_MIN_WINDOW, Xo as STOP_WORDS, ka as UNSAFE_KEYS, Hu as actionsToInspectInfo, Vu as actionsToTools, Zr as agentError, Js as analyzeContext, za as applyPatchToClone, Ha as applyPatchToLive, Xr as asAgentError, nc as buildDataPrompt, rc as buildSystemPrompt, Cd as chatContextKey, hu as commitSetToBind, ec as connectMcp, m as constructLlmFromConfig, p as constructOpenLlmSync, bd as copyText, Ui as createAgent, Oo as createApprovalMiddleware, wd as createChatContext, Ed as createChatSdk, zo as createCheckpointManager, Bo as createCheckpointMiddleware, Qc as createConflictManager, Ys as createContextInspectorMiddleware, Cu as createDataOps, Nc as createHtmlFormatCheck, Ic as createHtmlSubagent, Mo as createHumanConfirmMiddleware, jo as createHumanConfirmTool, yl as createMemoryBackend, xo as createMemoryMiddleware, u as createProxyLlm, yd as createRagSubagent, io as createSandboxRunner, Ol as createSdkEvents, ad as createSerialRunner, Cl as createSessionStore, td as createSkillStore, Ts as createSubagentMiddleware, ls as createSubagentTracker, Os as createSubagentsMiddleware, Yu as createUsageHintsMiddleware, ks as createVerifyMiddleware, sc as createVfs, xl as createWebStorageBackend, Fs as createWriteBackCheck, Pa as deepClone, Gu as defineDataToolset, oo as defineSkill, Lc as defineTool, Na as deleteByPath, Vc as deriveTitle, oa as describeSchemaNode, Di as detectGarbledToolCall, Ka as diffObjects, ku as domToStructure, ju as domTools, Wu as domToolsStatic, Qo as estimateMessageTokens, $o as estimateRoundTokens, X as estimateTokens, g as extractReasoningDelta, ya as extractSchemaHint, Xs as extractText, h as extractTextDelta, _ as extractUsage, Tu as fetchDocTools, Uu as fetchTools, mu as filterByToolMode, Ga as findStrippedKeys, sa as formatConstraints, Kr as formatZodIssues, Z as getByPath, Au as getDomTool, Pu as getEnvSummary, qi as getSchemaAtPath, Wi as getSchemaTopKeys, ci as getTraceMetrics, $ as hashValue, ma as htmlOrchestratorPrompt, es as indexSummarize, Lu as inspectEnvTool, Ru as inspectTools, Hc as isChatModel, vi as isContextLengthError, Gi as isPathAllowed, dl as isQuotaError, Aa as isUnsafePath, Ul as jpEval, Jr as jsonParseError, La as limitDepth, Fa as maybeParseValue, v as normalizeUsage, si as offloadPassThroughChars, oi as offloadThresholdChars, pa as presets, ea as projectBySchema, $i as projectBySchemaDeep, Ia as projectFields, ts as recallRounds, ca as renderSchemaHint, la as renderSchemaOverview, fa as renderSchemaShallow, Dl as resolveCapabilities, jl as resolveContextOptions, Tl as resolveDialogConfig, Zc as resolveLlm, ai as resolveModelCaps, is as resolvePromptSoftCap, wl as resolveStorage, Wa as restoreInPlace, Ua as restoreLive, Yr as routeError, ao as runHostScript, ql as runSandboxedScript, ja as safeMerge, Nu as safeSerialize, Q as safeStringify, Gl as searchJson, Ku as selectBuiltinTools, Ma as setByPath, as as shouldTriggerCompression, ha as systemPromptHelpers, Zo as tokenize, Y as toolError, Ki as unwrapSchema, Sd as useChat, Td as useChatContext, yc as validateHtmlFormat, e as z, qr as zodError };