page-agent-sdk 1.3.12 → 1.3.13

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.
@@ -24,10 +24,10 @@ function _(e) {
24
24
  var v = process.env.NODE_ENV === "production" ? {} : Object.freeze({}), y = process.env.NODE_ENV === "production" ? [] : Object.freeze([]), b = () => {}, x = () => !1, S = (e) => e.charCodeAt(0) === 111 && e.charCodeAt(1) === 110 && (e.charCodeAt(2) > 122 || e.charCodeAt(2) < 97), C = (e) => e.startsWith("onUpdate:"), w = Object.assign, T = (e, t) => {
25
25
  let n = e.indexOf(t);
26
26
  n > -1 && e.splice(n, 1);
27
- }, E = Object.prototype.hasOwnProperty, D = (e, t) => E.call(e, t), O = Array.isArray, k = (e) => R(e) === "[object Map]", A = (e) => R(e) === "[object Set]", j = (e) => R(e) === "[object Date]", M = (e) => typeof e == "function", N = (e) => typeof e == "string", P = (e) => typeof e == "symbol", F = (e) => typeof e == "object" && !!e, I = (e) => (F(e) || M(e)) && M(e.then) && M(e.catch), L = Object.prototype.toString, R = (e) => L.call(e), ee = (e) => R(e).slice(8, -1), te = (e) => R(e) === "[object Object]", ne = (e) => N(e) && e !== "NaN" && e[0] !== "-" && "" + parseInt(e, 10) === e, re = /* @__PURE__ */ _(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"), ie = /* @__PURE__ */ _("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"), ae = (e) => {
27
+ }, E = Object.prototype.hasOwnProperty, D = (e, t) => E.call(e, t), O = Array.isArray, k = (e) => R(e) === "[object Map]", A = (e) => R(e) === "[object Set]", j = (e) => R(e) === "[object Date]", M = (e) => typeof e == "function", N = (e) => typeof e == "string", P = (e) => typeof e == "symbol", F = (e) => typeof e == "object" && !!e, I = (e) => (F(e) || M(e)) && M(e.then) && M(e.catch), L = Object.prototype.toString, R = (e) => L.call(e), z = (e) => R(e).slice(8, -1), ee = (e) => R(e) === "[object Object]", te = (e) => N(e) && e !== "NaN" && e[0] !== "-" && "" + parseInt(e, 10) === e, ne = /* @__PURE__ */ _(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"), re = /* @__PURE__ */ _("bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"), ie = (e) => {
28
28
  let t = /* @__PURE__ */ Object.create(null);
29
29
  return ((n) => t[n] || (t[n] = e(n)));
30
- }, oe = /-\w/g, se = ae((e) => e.replace(oe, (e) => e.slice(1).toUpperCase())), ce = /\B([A-Z])/g, z = ae((e) => e.replace(ce, "-$1").toLowerCase()), le = ae((e) => e.charAt(0).toUpperCase() + e.slice(1)), B = ae((e) => e ? `on${le(e)}` : ""), ue = (e, t) => !Object.is(e, t), de = (e, ...t) => {
30
+ }, ae = /-\w/g, oe = ie((e) => e.replace(ae, (e) => e.slice(1).toUpperCase())), se = /\B([A-Z])/g, ce = ie((e) => e.replace(se, "-$1").toLowerCase()), le = ie((e) => e.charAt(0).toUpperCase() + e.slice(1)), B = ie((e) => e ? `on${le(e)}` : ""), ue = (e, t) => !Object.is(e, t), de = (e, ...t) => {
31
31
  for (let n = 0; n < e.length; n++) e[n](...t);
32
32
  }, fe = (e, t, n, r = !1) => {
33
33
  Object.defineProperty(e, t, {
@@ -99,7 +99,7 @@ function Ne(e, t) {
99
99
  }
100
100
  return String(e) === String(t);
101
101
  }
102
- var Pe = (e) => !!(e && e.__v_isRef === !0), V = (e) => N(e) ? e : e == null ? "" : O(e) || F(e) && (e.toString === L || !M(e.toString)) ? Pe(e) ? V(e.value) : JSON.stringify(e, Fe, 2) : String(e), Fe = (e, t) => Pe(t) ? Fe(e, t.value) : k(t) ? { [`Map(${t.size})`]: [...t.entries()].reduce((e, [t, n], r) => (e[Ie(t, r) + " =>"] = n, e), {}) } : A(t) ? { [`Set(${t.size})`]: [...t.values()].map((e) => Ie(e)) } : P(t) ? Ie(t) : F(t) && !O(t) && !te(t) ? String(t) : t, Ie = (e, t = "") => P(e) ? `Symbol(${e.description ?? t})` : e;
102
+ var Pe = (e) => !!(e && e.__v_isRef === !0), V = (e) => N(e) ? e : e == null ? "" : O(e) || F(e) && (e.toString === L || !M(e.toString)) ? Pe(e) ? V(e.value) : JSON.stringify(e, Fe, 2) : String(e), Fe = (e, t) => Pe(t) ? Fe(e, t.value) : k(t) ? { [`Map(${t.size})`]: [...t.entries()].reduce((e, [t, n], r) => (e[Ie(t, r) + " =>"] = n, e), {}) } : A(t) ? { [`Set(${t.size})`]: [...t.values()].map((e) => Ie(e)) } : P(t) ? Ie(t) : F(t) && !O(t) && !ee(t) ? String(t) : t, Ie = (e, t = "") => P(e) ? `Symbol(${e.description ?? t})` : e;
103
103
  //#endregion
104
104
  //#region node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js
105
105
  function Le(e, ...t) {
@@ -387,7 +387,7 @@ function ht(e, t, n, r, i, a) {
387
387
  };
388
388
  if (qe(), t === "clear") o.forEach(s);
389
389
  else {
390
- let i = O(e), a = i && ne(n);
390
+ let i = O(e), a = i && te(n);
391
391
  if (i && n === "length") {
392
392
  let e = Number(r);
393
393
  o.forEach((t, n) => {
@@ -571,7 +571,7 @@ var kt = class {
571
571
  let o = Reflect.get(e, t, /* @__PURE__ */ dn(e) ? e : n);
572
572
  if ((P(t) ? Dt.has(t) : Et(t)) || (r || mt(e, "get", t), i)) return o;
573
573
  if (/* @__PURE__ */ dn(o)) {
574
- let e = a && ne(t) ? o : o.value;
574
+ let e = a && te(t) ? o : o.value;
575
575
  return r && F(e) ? /* @__PURE__ */ en(e) : e;
576
576
  }
577
577
  return F(o) ? r ? /* @__PURE__ */ en(o) : /* @__PURE__ */ Qt(o) : o;
@@ -581,7 +581,7 @@ var kt = class {
581
581
  super(!1, e);
582
582
  }
583
583
  set(e, t, n, r) {
584
- let i = e[t], a = O(e) && ne(t);
584
+ let i = e[t], a = O(e) && te(t);
585
585
  if (!this._isShallow) {
586
586
  let r = /* @__PURE__ */ an(i);
587
587
  if (!/* @__PURE__ */ on(n) && !/* @__PURE__ */ an(n) && (i = /* @__PURE__ */ U(i), n = /* @__PURE__ */ U(n)), !a && /* @__PURE__ */ dn(i) && !/* @__PURE__ */ dn(n)) return r ? (process.env.NODE_ENV !== "production" && Le(`Set operation on key "${String(t)}" failed: target is readonly.`, e[t]), !0) : (i.value = n, !0);
@@ -702,7 +702,7 @@ var Ht = { get: /* @__PURE__ */ Vt(!1, !1) }, Ut = { get: /* @__PURE__ */ Vt(!1,
702
702
  function Kt(e, t, n) {
703
703
  let r = /* @__PURE__ */ U(n);
704
704
  if (r !== n && t.call(e, r)) {
705
- let t = ee(e);
705
+ let t = z(e);
706
706
  Le(`Reactive ${t} contains both the raw and reactive versions of the same object${t === "Map" ? " as keys" : ""}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`);
707
707
  }
708
708
  }
@@ -739,7 +739,7 @@ function nn(e, t, n, r, i) {
739
739
  if (e.__v_raw && !(t && e.__v_isReactive) || e.__v_skip || !Object.isExtensible(e)) return e;
740
740
  let a = i.get(e);
741
741
  if (a) return a;
742
- let o = Zt(ee(e));
742
+ let o = Zt(z(e));
743
743
  if (o === 0) return e;
744
744
  let s = new Proxy(e, o === 2 ? r : n);
745
745
  return i.set(e, s), s;
@@ -936,7 +936,7 @@ function En(e, t = Infinity, n) {
936
936
  else if (A(e) || k(e)) e.forEach((e) => {
937
937
  En(e, t, n);
938
938
  });
939
- else if (te(e)) {
939
+ else if (ee(e)) {
940
940
  for (let r in e) En(e[r], t, n);
941
941
  for (let r of Object.getOwnPropertySymbols(e)) Object.prototype.propertyIsEnumerable.call(e, r) && En(e[r], t, n);
942
942
  }
@@ -1298,7 +1298,7 @@ function Lr(e, t = Pr, n) {
1298
1298
  return r._n = !0, r._c = !0, r._d = !0, r;
1299
1299
  }
1300
1300
  function Rr(e) {
1301
- ie(e) && G("Do not use built-in directive ids as custom directive id: " + e);
1301
+ re(e) && G("Do not use built-in directive ids as custom directive id: " + e);
1302
1302
  }
1303
1303
  function zr(e, t) {
1304
1304
  if (Pr === null) return process.env.NODE_ENV !== "production" && G("withDirectives can only be used inside render functions."), e;
@@ -2169,13 +2169,13 @@ function wa(e, t) {
2169
2169
  return c;
2170
2170
  };
2171
2171
  }
2172
- var Ta = null, Ea = (e, t) => t === "modelValue" || t === "model-value" ? e.modelModifiers : e[`${t}Modifiers`] || e[`${se(t)}Modifiers`] || e[`${z(t)}Modifiers`];
2172
+ var Ta = null, Ea = (e, t) => t === "modelValue" || t === "model-value" ? e.modelModifiers : e[`${t}Modifiers`] || e[`${oe(t)}Modifiers`] || e[`${ce(t)}Modifiers`];
2173
2173
  function Da(e, t, ...n) {
2174
2174
  if (e.isUnmounted) return;
2175
2175
  let r = e.vnode.props || v;
2176
2176
  if (process.env.NODE_ENV !== "production") {
2177
2177
  let { emitsOptions: r, propsOptions: [i] } = e;
2178
- if (r) if (!(t in r)) (!i || !(B(se(t)) in i)) && G(`Component emitted event "${t}" but it is neither declared in the emits option nor as an "${B(se(t))}" prop.`);
2178
+ if (r) if (!(t in r)) (!i || !(B(oe(t)) in i)) && G(`Component emitted event "${t}" but it is neither declared in the emits option nor as an "${B(oe(t))}" prop.`);
2179
2179
  else {
2180
2180
  let e = r[t];
2181
2181
  M(e) && (e(...n) || G(`Invalid event arguments: event validation failed for event "${t}".`));
@@ -2184,10 +2184,10 @@ function Da(e, t, ...n) {
2184
2184
  let i = n, a = t.startsWith("update:"), o = a && Ea(r, t.slice(7));
2185
2185
  if (o && (o.trim && (i = n.map((e) => N(e) ? e.trim() : e)), o.number && (i = n.map(pe))), process.env.NODE_ENV !== "production" && Nr(e, t, i), process.env.NODE_ENV !== "production") {
2186
2186
  let n = t.toLowerCase();
2187
- n !== t && r[B(n)] && G(`Event "${n}" is emitted in component ${Ls(e, e.type)} but the handler is registered for "${t}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${z(t)}" instead of "${t}".`);
2187
+ n !== t && r[B(n)] && G(`Event "${n}" is emitted in component ${Ls(e, e.type)} but the handler is registered for "${t}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${ce(t)}" instead of "${t}".`);
2188
2188
  }
2189
- let s, c = r[s = B(t)] || r[s = B(se(t))];
2190
- !c && a && (c = r[s = B(z(t))]), c && zn(c, e, 6, i);
2189
+ let s, c = r[s = B(t)] || r[s = B(oe(t))];
2190
+ !c && a && (c = r[s = B(ce(t))]), c && zn(c, e, 6, i);
2191
2191
  let l = r[s + "Once"];
2192
2192
  if (l) {
2193
2193
  if (!e.emitted) e.emitted = {};
@@ -2210,7 +2210,7 @@ function ka(e, t, n = !1) {
2210
2210
  return !a && !s ? (F(e) && r.set(e, null), null) : (O(a) ? a.forEach((e) => o[e] = null) : w(o, a), F(e) && r.set(e, o), o);
2211
2211
  }
2212
2212
  function Aa(e, t) {
2213
- return !e || !S(t) ? !1 : (t = t.slice(2), t = t === "Once" ? t : t.replace(/Once$/, ""), D(e, t[0].toLowerCase() + t.slice(1)) || D(e, z(t)) || D(e, t));
2213
+ return !e || !S(t) ? !1 : (t = t.slice(2), t = t === "Once" ? t : t.replace(/Once$/, ""), D(e, t[0].toLowerCase() + t.slice(1)) || D(e, ce(t)) || D(e, t));
2214
2214
  }
2215
2215
  var ja = !1;
2216
2216
  function Ma() {
@@ -2351,7 +2351,7 @@ function Ja(e, t, n, r) {
2351
2351
  let u = t[o];
2352
2352
  if (c) if (D(a, o)) u !== a[o] && (a[o] = u, l = !0);
2353
2353
  else {
2354
- let t = se(o);
2354
+ let t = oe(o);
2355
2355
  i[t] = Xa(c, s, t, u, e, !1);
2356
2356
  }
2357
2357
  else u !== a[o] && (a[o] = u, l = !0);
@@ -2360,7 +2360,7 @@ function Ja(e, t, n, r) {
2360
2360
  } else {
2361
2361
  Ya(e, t, i, a) && (l = !0);
2362
2362
  let r;
2363
- for (let a in s) (!t || !D(t, a) && ((r = z(a)) === a || !D(t, r))) && (c ? n && (n[a] !== void 0 || n[r] !== void 0) && (i[a] = Xa(c, s, a, void 0, e, !0)) : delete i[a]);
2363
+ for (let a in s) (!t || !D(t, a) && ((r = ce(a)) === a || !D(t, r))) && (c ? n && (n[a] !== void 0 || n[r] !== void 0) && (i[a] = Xa(c, s, a, void 0, e, !0)) : delete i[a]);
2364
2364
  if (a !== s) for (let e in a) (!t || !D(t, e)) && (delete a[e], l = !0);
2365
2365
  }
2366
2366
  l && ht(e.attrs, "set", ""), process.env.NODE_ENV !== "production" && to(t || {}, i, e);
@@ -2368,9 +2368,9 @@ function Ja(e, t, n, r) {
2368
2368
  function Ya(e, t, n, r) {
2369
2369
  let [i, a] = e.propsOptions, o = !1, s;
2370
2370
  if (t) for (let c in t) {
2371
- if (re(c)) continue;
2371
+ if (ne(c)) continue;
2372
2372
  let l = t[c], u;
2373
- i && D(i, u = se(c)) ? !a || !a.includes(u) ? n[u] = l : (s ||= {})[u] = l : Aa(e.emitsOptions, c) || (!(c in r) || l !== r[c]) && (r[c] = l, o = !0);
2373
+ i && D(i, u = oe(c)) ? !a || !a.includes(u) ? n[u] = l : (s ||= {})[u] = l : Aa(e.emitsOptions, c) || (!(c in r) || l !== r[c]) && (r[c] = l, o = !0);
2374
2374
  }
2375
2375
  if (a) {
2376
2376
  let t = /* @__PURE__ */ U(n), r = s || v;
@@ -2397,7 +2397,7 @@ function Xa(e, t, n, r, i, a) {
2397
2397
  } else r = e;
2398
2398
  i.ce && i.ce._setProp(n, r);
2399
2399
  }
2400
- o[0] && (a && !e ? r = !1 : o[1] && (r === "" || r === z(n)) && (r = !0));
2400
+ o[0] && (a && !e ? r = !1 : o[1] && (r === "" || r === ce(n)) && (r = !0));
2401
2401
  }
2402
2402
  return r;
2403
2403
  }
@@ -2417,13 +2417,13 @@ function Qa(e, t, n = !1) {
2417
2417
  if (!a && !c) return F(e) && r.set(e, y), y;
2418
2418
  if (O(a)) for (let e = 0; e < a.length; e++) {
2419
2419
  process.env.NODE_ENV !== "production" && !N(a[e]) && G("props must be strings when using array syntax.", a[e]);
2420
- let t = se(a[e]);
2420
+ let t = oe(a[e]);
2421
2421
  $a(t) && (o[t] = v);
2422
2422
  }
2423
2423
  else if (a) {
2424
2424
  process.env.NODE_ENV !== "production" && !F(a) && G("invalid props options", a);
2425
2425
  for (let e in a) {
2426
- let t = se(e);
2426
+ let t = oe(e);
2427
2427
  if ($a(t)) {
2428
2428
  let n = a[e], r = o[t] = O(n) || M(n) ? { type: n } : w({}, n), i = r.type, c = !1, l = !0;
2429
2429
  if (O(i)) for (let e = 0; e < i.length; ++e) {
@@ -2442,13 +2442,13 @@ function Qa(e, t, n = !1) {
2442
2442
  return F(e) && r.set(e, l), l;
2443
2443
  }
2444
2444
  function $a(e) {
2445
- return e[0] !== "$" && !re(e) ? !0 : (process.env.NODE_ENV !== "production" && G(`Invalid prop name: "${e}" is a reserved property.`), !1);
2445
+ return e[0] !== "$" && !ne(e) ? !0 : (process.env.NODE_ENV !== "production" && G(`Invalid prop name: "${e}" is a reserved property.`), !1);
2446
2446
  }
2447
2447
  function eo(e) {
2448
2448
  return e === null ? "null" : typeof e == "function" ? e.name || "" : typeof e == "object" && e.constructor && e.constructor.name || "";
2449
2449
  }
2450
2450
  function to(e, t, n) {
2451
- let r = /* @__PURE__ */ U(t), i = n.propsOptions[0], a = Object.keys(e).map((e) => se(e));
2451
+ let r = /* @__PURE__ */ U(t), i = n.propsOptions[0], a = Object.keys(e).map((e) => oe(e));
2452
2452
  for (let e in i) {
2453
2453
  let t = i[e];
2454
2454
  t != null && no(e, r[e], t, process.env.NODE_ENV === "production" ? r : /* @__PURE__ */ tn(r), !a.includes(e));
@@ -2490,7 +2490,7 @@ function io(e, t) {
2490
2490
  }
2491
2491
  function ao(e, t, n) {
2492
2492
  if (n.length === 0) return `Prop type [] for prop "${e}" won't match anything. Did you mean to use type Array instead?`;
2493
- let r = `Invalid prop: type check failed for prop "${e}". Expected ${n.map(le).join(" | ")}`, i = n[0], a = ee(t), o = oo(t, i), s = oo(t, a);
2493
+ let r = `Invalid prop: type check failed for prop "${e}". Expected ${n.map(le).join(" | ")}`, i = n[0], a = z(t), o = oo(t, i), s = oo(t, a);
2494
2494
  return n.length === 1 && so(i) && co(i, a) && (r += ` with value ${o}`), r += `, got ${a} `, so(a) && (r += `with value ${s}.`), r;
2495
2495
  }
2496
2496
  function oo(e, t) {
@@ -2577,7 +2577,7 @@ function Eo(e, t) {
2577
2577
  n.__VUE__ = !0, process.env.NODE_ENV !== "production" && Sr(n.__VUE_DEVTOOLS_GLOBAL_HOOK__, n);
2578
2578
  let { insert: r, remove: i, patchProp: a, createElement: o, createText: s, createComment: c, setText: l, setElementText: u, parentNode: d, nextSibling: f, setScopeId: p = b, insertStaticContent: m } = e, h = (e, t, n, r = null, i = null, a = null, o = void 0, s = null, c = process.env.NODE_ENV !== "production" && or ? !1 : !!t.dynamicChildren) => {
2579
2579
  if (e === t) return;
2580
- e && !Jo(e, t) && (r = z(e), ie(e, i, a, !0), e = null), t.patchFlag === -2 && (c = !1, t.dynamicChildren = null);
2580
+ e && !Jo(e, t) && (r = ce(e), re(e, i, a, !0), e = null), t.patchFlag === -2 && (c = !1, t.dynamicChildren = null);
2581
2581
  let { type: l, ref: u, shapeFlag: d } = t;
2582
2582
  switch (l) {
2583
2583
  case Lo:
@@ -2631,7 +2631,7 @@ function Eo(e, t) {
2631
2631
  }, E = (e, t, n, i, s, c, l, d) => {
2632
2632
  let f, p, { props: m, shapeFlag: h, transition: g, dirs: _ } = e;
2633
2633
  if (f = e.el = o(e.type, c, m && m.is, m), h & 8 ? u(f, e.children) : h & 16 && O(e.children, f, null, i, s, Do(e, c), l, d), _ && Br(e, null, i, "created"), D(f, e, e.scopeId, l, i), m) {
2634
- for (let e in m) e !== "value" && !re(e) && a(f, e, null, m[e], c, i);
2634
+ for (let e in m) e !== "value" && !ne(e) && a(f, e, null, m[e], c, i);
2635
2635
  "value" in m && a(f, "value", null, m.value, c), (p = m.onVnodeBeforeMount) && ls(p, i, e);
2636
2636
  }
2637
2637
  process.env.NODE_ENV !== "production" && (fe(f, "__vnode", e, !0), fe(f, "__vueParentComponent", i, !0)), _ && Br(e, null, i, "beforeMount");
@@ -2689,9 +2689,9 @@ function Eo(e, t) {
2689
2689
  }
2690
2690
  }, j = (e, t, n, r, i) => {
2691
2691
  if (t !== n) {
2692
- if (t !== v) for (let o in t) !re(o) && !(o in n) && a(e, o, t[o], null, i, r);
2692
+ if (t !== v) for (let o in t) !ne(o) && !(o in n) && a(e, o, t[o], null, i, r);
2693
2693
  for (let o in n) {
2694
- if (re(o)) continue;
2694
+ if (ne(o)) continue;
2695
2695
  let s = n[o], c = t[o];
2696
2696
  s !== c && o !== "value" && a(e, o, c, s, i, r);
2697
2697
  }
@@ -2738,7 +2738,7 @@ function Eo(e, t) {
2738
2738
  let p = Na(e);
2739
2739
  process.env.NODE_ENV !== "production" && xo(e, "render");
2740
2740
  let m = e.subTree;
2741
- e.subTree = p, process.env.NODE_ENV !== "production" && bo(e, "patch"), h(m, p, d(m.el), z(m), e, i, a), process.env.NODE_ENV !== "production" && xo(e, "patch"), t.el = p.el, u === null && Ha(e, p.el), r && wo(r, i), (f = t.props && t.props.onVnodeUpdated) && wo(() => ls(f, s, t, c), i), process.env.NODE_ENV !== "production" && Er(e), process.env.NODE_ENV !== "production" && kn();
2741
+ e.subTree = p, process.env.NODE_ENV !== "production" && bo(e, "patch"), h(m, p, d(m.el), ce(m), e, i, a), process.env.NODE_ENV !== "production" && xo(e, "patch"), t.el = p.el, u === null && Ha(e, p.el), r && wo(r, i), (f = t.props && t.props.onVnodeUpdated) && wo(() => ls(f, s, t, c), i), process.env.NODE_ENV !== "production" && Er(e), process.env.NODE_ENV !== "production" && kn();
2742
2742
  } else {
2743
2743
  let o, { el: s, props: c } = t, { bm: l, m: u, parent: d, root: f, type: p } = e, m = ji(t);
2744
2744
  if (Oo(e, !1), l && de(l), !m && (o = c && c.onVnodeBeforeMount) && ls(o, d, t), Oo(e, !0), s && me) {
@@ -2771,23 +2771,23 @@ function Eo(e, t) {
2771
2771
  let l = e && e.children, d = e ? e.shapeFlag : 0, f = t.children, { patchFlag: p, shapeFlag: m } = t;
2772
2772
  if (p > 0) {
2773
2773
  if (p & 128) {
2774
- te(l, f, n, r, i, a, o, s, c);
2774
+ ee(l, f, n, r, i, a, o, s, c);
2775
2775
  return;
2776
2776
  } else if (p & 256) {
2777
- ee(l, f, n, r, i, a, o, s, c);
2777
+ z(l, f, n, r, i, a, o, s, c);
2778
2778
  return;
2779
2779
  }
2780
2780
  }
2781
- m & 8 ? (d & 16 && ce(l, i, a), f !== l && u(n, f)) : d & 16 ? m & 16 ? te(l, f, n, r, i, a, o, s, c) : ce(l, i, a, !0) : (d & 8 && u(n, ""), m & 16 && O(f, n, r, i, a, o, s, c));
2782
- }, ee = (e, t, n, r, i, a, o, s, c) => {
2781
+ m & 8 ? (d & 16 && se(l, i, a), f !== l && u(n, f)) : d & 16 ? m & 16 ? ee(l, f, n, r, i, a, o, s, c) : se(l, i, a, !0) : (d & 8 && u(n, ""), m & 16 && O(f, n, r, i, a, o, s, c));
2782
+ }, z = (e, t, n, r, i, a, o, s, c) => {
2783
2783
  e ||= y, t ||= y;
2784
2784
  let l = e.length, u = t.length, d = Math.min(l, u), f;
2785
2785
  for (f = 0; f < d; f++) {
2786
2786
  let r = t[f] = c ? os(t[f]) : as(t[f]);
2787
2787
  h(e[f], r, n, null, i, a, o, s, c);
2788
2788
  }
2789
- l > u ? ce(e, i, a, !0, !1, d) : O(t, n, r, i, a, o, s, c, d);
2790
- }, te = (e, t, n, r, i, a, o, s, c) => {
2789
+ l > u ? se(e, i, a, !0, !1, d) : O(t, n, r, i, a, o, s, c, d);
2790
+ }, ee = (e, t, n, r, i, a, o, s, c) => {
2791
2791
  let l = 0, u = t.length, d = e.length - 1, f = u - 1;
2792
2792
  for (; l <= d && l <= f;) {
2793
2793
  let r = e[l], u = t[l] = c ? os(t[l]) : as(t[l]);
@@ -2806,7 +2806,7 @@ function Eo(e, t) {
2806
2806
  let e = f + 1, d = e < u ? t[e].el : r;
2807
2807
  for (; l <= f;) h(null, t[l] = c ? os(t[l]) : as(t[l]), n, d, i, a, o, s, c), l++;
2808
2808
  }
2809
- } else if (l > f) for (; l <= d;) ie(e[l], i, a, !0), l++;
2809
+ } else if (l > f) for (; l <= d;) re(e[l], i, a, !0), l++;
2810
2810
  else {
2811
2811
  let p = l, m = l, g = /* @__PURE__ */ new Map();
2812
2812
  for (l = m; l <= f; l++) {
@@ -2818,7 +2818,7 @@ function Eo(e, t) {
2818
2818
  for (l = p; l <= d; l++) {
2819
2819
  let r = e[l];
2820
2820
  if (v >= b) {
2821
- ie(r, i, a, !0);
2821
+ re(r, i, a, !0);
2822
2822
  continue;
2823
2823
  }
2824
2824
  let u;
@@ -2827,18 +2827,18 @@ function Eo(e, t) {
2827
2827
  u = _;
2828
2828
  break;
2829
2829
  }
2830
- u === void 0 ? ie(r, i, a, !0) : (C[u - m] = l + 1, u >= S ? S = u : x = !0, h(r, t[u], n, null, i, a, o, s, c), v++);
2830
+ u === void 0 ? re(r, i, a, !0) : (C[u - m] = l + 1, u >= S ? S = u : x = !0, h(r, t[u], n, null, i, a, o, s, c), v++);
2831
2831
  }
2832
2832
  let w = x ? jo(C) : y;
2833
2833
  for (_ = w.length - 1, l = b - 1; l >= 0; l--) {
2834
2834
  let e = m + l, d = t[e], f = t[e + 1], p = e + 1 < u ? f.el || Po(f) : r;
2835
- C[l] === 0 ? h(null, d, n, p, i, a, o, s, c) : x && (_ < 0 || l !== w[_] ? ne(d, n, p, 2) : _--);
2835
+ C[l] === 0 ? h(null, d, n, p, i, a, o, s, c) : x && (_ < 0 || l !== w[_] ? te(d, n, p, 2) : _--);
2836
2836
  }
2837
2837
  }
2838
- }, ne = (e, t, n, a, o = null) => {
2838
+ }, te = (e, t, n, a, o = null) => {
2839
2839
  let { el: s, type: c, transition: l, children: u, shapeFlag: d } = e;
2840
2840
  if (d & 6) {
2841
- ne(e.component.subTree, t, n, a);
2841
+ te(e.component.subTree, t, n, a);
2842
2842
  return;
2843
2843
  }
2844
2844
  if (d & 128) {
@@ -2851,7 +2851,7 @@ function Eo(e, t) {
2851
2851
  }
2852
2852
  if (c === K) {
2853
2853
  r(s, t, n);
2854
- for (let e = 0; e < u.length; e++) ne(u[e], t, n, a);
2854
+ for (let e = 0; e < u.length; e++) te(u[e], t, n, a);
2855
2855
  r(e.anchor, t, n);
2856
2856
  return;
2857
2857
  }
@@ -2872,31 +2872,31 @@ function Eo(e, t) {
2872
2872
  o ? o(s, u, d) : d();
2873
2873
  }
2874
2874
  else r(s, t, n);
2875
- }, ie = (e, t, n, r = !1, i = !1) => {
2875
+ }, re = (e, t, n, r = !1, i = !1) => {
2876
2876
  let { type: a, props: o, ref: s, children: c, dynamicChildren: l, shapeFlag: u, patchFlag: d, dirs: f, cacheIndex: p, memo: m } = e;
2877
2877
  if (d === -2 && (i = !1), s != null && (rt(), ki(s, null, n, e, !0), it()), p != null && (t.renderCache[p] = void 0), u & 256) {
2878
2878
  t.ctx.deactivate(e);
2879
2879
  return;
2880
2880
  }
2881
2881
  let h = u & 1 && f, g = !ji(e), _;
2882
- if (g && (_ = o && o.onVnodeBeforeUnmount) && ls(_, t, e), u & 6) se(e.component, n, r);
2882
+ if (g && (_ = o && o.onVnodeBeforeUnmount) && ls(_, t, e), u & 6) oe(e.component, n, r);
2883
2883
  else {
2884
2884
  if (u & 128) {
2885
2885
  e.suspense.unmount(n, r);
2886
2886
  return;
2887
2887
  }
2888
- h && Br(e, null, t, "beforeUnmount"), u & 64 ? e.type.remove(e, t, n, ue, r) : l && !l.hasOnce && (a !== K || d > 0 && d & 64) ? ce(l, t, n, !1, !0) : (a === K && d & 384 || !i && u & 16) && ce(c, t, n), r && ae(e);
2888
+ h && Br(e, null, t, "beforeUnmount"), u & 64 ? e.type.remove(e, t, n, ue, r) : l && !l.hasOnce && (a !== K || d > 0 && d & 64) ? se(l, t, n, !1, !0) : (a === K && d & 384 || !i && u & 16) && se(c, t, n), r && ie(e);
2889
2889
  }
2890
2890
  let v = m != null && p == null;
2891
2891
  (g && (_ = o && o.onVnodeUnmounted) || h || v) && wo(() => {
2892
2892
  _ && ls(_, t, e), h && Br(e, null, t, "unmounted"), v && (e.el = null);
2893
2893
  }, n);
2894
- }, ae = (e) => {
2894
+ }, ie = (e) => {
2895
2895
  let { type: t, el: n, anchor: r, transition: a } = e;
2896
2896
  if (t === K) {
2897
2897
  process.env.NODE_ENV !== "production" && e.patchFlag > 0 && e.patchFlag & 2048 && a && !a.persisted ? e.children.forEach((e) => {
2898
- e.type === Ro ? i(e.el) : ae(e);
2899
- }) : oe(n, r);
2898
+ e.type === Ro ? i(e.el) : ie(e);
2899
+ }) : ae(n, r);
2900
2900
  return;
2901
2901
  }
2902
2902
  if (t === zo) {
@@ -2910,36 +2910,36 @@ function Eo(e, t) {
2910
2910
  let { leave: t, delayLeave: r } = a, i = () => t(n, o);
2911
2911
  r ? r(e.el, o, i) : i();
2912
2912
  } else o();
2913
- }, oe = (e, t) => {
2913
+ }, ae = (e, t) => {
2914
2914
  let n;
2915
2915
  for (; e !== t;) n = f(e), i(e), e = n;
2916
2916
  i(t);
2917
- }, se = (e, t, n) => {
2917
+ }, oe = (e, t, n) => {
2918
2918
  process.env.NODE_ENV !== "production" && e.type.__hmrId && dr(e);
2919
2919
  let { bum: r, scope: i, job: a, subTree: o, um: s, m: c, a: l } = e;
2920
- No(c), No(l), r && de(r), i.stop(), a && (a.flags |= 8, ie(o, e, t, n)), s && wo(s, t), wo(() => {
2920
+ No(c), No(l), r && de(r), i.stop(), a && (a.flags |= 8, re(o, e, t, n)), s && wo(s, t), wo(() => {
2921
2921
  e.isUnmounted = !0;
2922
2922
  }, t), process.env.NODE_ENV !== "production" && Or(e);
2923
- }, ce = (e, t, n, r = !1, i = !1, a = 0) => {
2924
- for (let o = a; o < e.length; o++) ie(e[o], t, n, r, i);
2925
- }, z = (e) => {
2926
- if (e.shapeFlag & 6) return z(e.component.subTree);
2923
+ }, se = (e, t, n, r = !1, i = !1, a = 0) => {
2924
+ for (let o = a; o < e.length; o++) re(e[o], t, n, r, i);
2925
+ }, ce = (e) => {
2926
+ if (e.shapeFlag & 6) return ce(e.component.subTree);
2927
2927
  if (e.shapeFlag & 128) return e.suspense.next();
2928
2928
  let t = f(e.anchor || e.el), n = t && t[Xr];
2929
2929
  return n ? f(n) : t;
2930
2930
  }, le = !1, B = (e, t, n) => {
2931
2931
  let r;
2932
- e == null ? t._vnode && (ie(t._vnode, null, null, !0), r = t._vnode.component) : h(t._vnode || null, e, t, null, null, null, n), t._vnode = e, le ||= (le = !0, tr(r), nr(), !1);
2932
+ e == null ? t._vnode && (re(t._vnode, null, null, !0), r = t._vnode.component) : h(t._vnode || null, e, t, null, null, null, n), t._vnode = e, le ||= (le = !0, tr(r), nr(), !1);
2933
2933
  }, ue = {
2934
2934
  p: h,
2935
- um: ie,
2936
- m: ne,
2937
- r: ae,
2935
+ um: re,
2936
+ m: te,
2937
+ r: ie,
2938
2938
  mt: P,
2939
2939
  mc: O,
2940
2940
  pc: R,
2941
2941
  pbc: A,
2942
- n: z,
2942
+ n: ce,
2943
2943
  o: e
2944
2944
  }, pe, me;
2945
2945
  return t && ([pe, me] = t(ue)), {
@@ -3798,7 +3798,7 @@ function Oc(e, t, n) {
3798
3798
  else if (n ??= "", process.env.NODE_ENV !== "production" && Ec.test(n) && Us(`Unexpected semicolon at the end of '${t}' style value: '${n}'`), t.startsWith("--")) e.setProperty(t, n);
3799
3799
  else {
3800
3800
  let r = jc(e, t);
3801
- Dc.test(n) ? e.setProperty(z(r), n.replace(Dc, ""), "important") : e[r] = n;
3801
+ Dc.test(n) ? e.setProperty(ce(r), n.replace(Dc, ""), "important") : e[r] = n;
3802
3802
  }
3803
3803
  }
3804
3804
  var kc = [
@@ -3809,7 +3809,7 @@ var kc = [
3809
3809
  function jc(e, t) {
3810
3810
  let n = Ac[t];
3811
3811
  if (n) return n;
3812
- let r = se(t);
3812
+ let r = oe(t);
3813
3813
  if (r !== "filter" && r in e) return Ac[t] = r;
3814
3814
  r = le(r);
3815
3815
  for (let n = 0; n < kc.length; n++) {
@@ -3867,7 +3867,7 @@ var Bc = /(Once|Passive|Capture)$/, Vc = /^on:?(?:Once|Passive|Capture)$/;
3867
3867
  function Hc(e) {
3868
3868
  let t, n;
3869
3869
  for (; (n = e.match(Bc)) && !Vc.test(e);) t ||= {}, e = e.slice(0, e.length - n[1].length), t[n[1].toLowerCase()] = !0;
3870
- return [e[2] === ":" ? e.slice(3) : z(e.slice(2)), t];
3870
+ return [e[2] === ":" ? e.slice(3) : ce(e.slice(2)), t];
3871
3871
  }
3872
3872
  var Uc = 0, Wc = /* @__PURE__ */ Promise.resolve(), Gc = () => Uc ||= (Wc.then(() => Uc = 0), Date.now());
3873
3873
  function Kc(e, t) {
@@ -3895,7 +3895,7 @@ Expected function or array of functions, received type ${typeof e}.`), b);
3895
3895
  }
3896
3896
  var Jc = (e) => e.charCodeAt(0) === 111 && e.charCodeAt(1) === 110 && e.charCodeAt(2) > 96 && e.charCodeAt(2) < 123, Yc = (e, t, n, r, i, a) => {
3897
3897
  let o = i === "svg";
3898
- t === "class" ? vc(e, r, o) : t === "style" ? Tc(e, n, r) : S(t) ? C(t) || zc(e, t, n, r, a) : (t[0] === "." ? (t = t.slice(1), !0) : t[0] === "^" ? (t = t.slice(1), !1) : Xc(e, t, r, o)) ? (Fc(e, t, r), !e.tagName.includes("-") && (t === "value" || t === "checked" || t === "selected") && Pc(e, t, r, o, a, t !== "value")) : e._isVueCE && (Zc(e, t) || e._def.__asyncLoader && (/[A-Z]/.test(t) || !N(r))) ? Fc(e, se(t), r, a, t) : (t === "true-value" ? e._trueValue = r : t === "false-value" && (e._falseValue = r), Pc(e, t, r, o));
3898
+ t === "class" ? vc(e, r, o) : t === "style" ? Tc(e, n, r) : S(t) ? C(t) || zc(e, t, n, r, a) : (t[0] === "." ? (t = t.slice(1), !0) : t[0] === "^" ? (t = t.slice(1), !1) : Xc(e, t, r, o)) ? (Fc(e, t, r), !e.tagName.includes("-") && (t === "value" || t === "checked" || t === "selected") && Pc(e, t, r, o, a, t !== "value")) : e._isVueCE && (Zc(e, t) || e._def.__asyncLoader && (/[A-Z]/.test(t) || !N(r))) ? Fc(e, oe(t), r, a, t) : (t === "true-value" ? e._trueValue = r : t === "false-value" && (e._falseValue = r), Pc(e, t, r, o));
3899
3899
  };
3900
3900
  function Xc(e, t, n, r) {
3901
3901
  if (r) return !!(t === "innerHTML" || t === "textContent" || t in e && Jc(t) && M(n));
@@ -3909,8 +3909,8 @@ function Xc(e, t, n, r) {
3909
3909
  function Zc(e, t) {
3910
3910
  let n = e._def.props;
3911
3911
  if (!n) return !1;
3912
- let r = se(t);
3913
- return Array.isArray(n) ? n.some((e) => se(e) === r) : Object.keys(n).some((e) => se(e) === r);
3912
+ let r = oe(t);
3913
+ return Array.isArray(n) ? n.some((e) => oe(e) === r) : Object.keys(n).some((e) => oe(e) === r);
3914
3914
  }
3915
3915
  var Qc = (e) => {
3916
3916
  let t = e.props["onUpdate:modelValue"] || !1;
@@ -4090,19 +4090,23 @@ function xl(e = {}) {
4090
4090
  let e = o.value;
4091
4091
  e && (s.value = e.scrollHeight - e.scrollTop - e.clientHeight < 64);
4092
4092
  }
4093
- function d() {
4094
- Xn(() => {
4095
- o.value && s.value && (o.value.scrollTop = o.value.scrollHeight);
4093
+ function d(e) {
4094
+ e.deltaY < 0 && (s.value = !1);
4095
+ }
4096
+ function f() {
4097
+ o.value && requestAnimationFrame(() => {
4098
+ let e = o.value;
4099
+ !e || !s.value || (e.scrollTop = e.scrollHeight);
4096
4100
  });
4097
4101
  }
4098
- function f(e, t) {
4102
+ function p(e, t) {
4099
4103
  a.messages.push({
4100
4104
  role: e,
4101
4105
  content: t,
4102
4106
  timestamp: Date.now()
4103
- }), s.value = !0, d();
4107
+ }), s.value = !0, f();
4104
4108
  }
4105
- async function p(e) {
4109
+ async function m(e) {
4106
4110
  if (s.value = !0, n) {
4107
4111
  let t = /* @__PURE__ */ Qt({
4108
4112
  role: "assistant",
@@ -4161,7 +4165,7 @@ function xl(e = {}) {
4161
4165
  };
4162
4166
  break;
4163
4167
  }
4164
- d();
4168
+ f();
4165
4169
  }, e);
4166
4170
  } catch (n) {
4167
4171
  if (gl(n, e) || (a.error = n.message || "请求失败,请重试"), !t.content && !t.reasoning) {
@@ -4174,39 +4178,39 @@ function xl(e = {}) {
4174
4178
  return;
4175
4179
  }
4176
4180
  try {
4177
- f("assistant", await (t || g)(a.messages, e));
4181
+ p("assistant", await (t || _)(a.messages, e));
4178
4182
  } catch (t) {
4179
4183
  gl(t, e) || (a.error = t.message || "请求失败,请重试");
4180
4184
  } finally {
4181
4185
  await r?.(a.messages), a.loading = !1, c = null;
4182
4186
  }
4183
4187
  }
4184
- async function m(e) {
4185
- !e.trim() || a.loading || (f("user", e.trim()), a.loading = !0, a.error = null, c = new AbortController(), await p(c.signal));
4188
+ async function h(e) {
4189
+ !e.trim() || a.loading || (p("user", e.trim()), a.loading = !0, a.error = null, c = new AbortController(), await m(c.signal));
4186
4190
  }
4187
- async function h() {
4191
+ async function g() {
4188
4192
  if (a.loading) return;
4189
4193
  let e = a.messages;
4190
4194
  for (let t = e.length - 1; t >= 0; t--) if (e[t].role === "assistant") {
4191
4195
  e.splice(t);
4192
4196
  break;
4193
4197
  }
4194
- e.some((e) => e.role === "user") && (a.loading = !0, a.error = null, c = new AbortController(), await p(c.signal));
4198
+ e.some((e) => e.role === "user") && (a.loading = !0, a.error = null, c = new AbortController(), await m(c.signal));
4195
4199
  }
4196
- async function g(e) {
4200
+ async function _(e) {
4197
4201
  return await new Promise((e) => setTimeout(e, 800 + Math.random() * 1200)), `收到你的消息:"${e.filter((e) => e.role === "user").pop()?.content}"。这是一个模拟回复,请接入实际的 AI API。`;
4198
4202
  }
4199
- function _() {
4203
+ function v() {
4200
4204
  i?.(), a.messages.splice(0, a.messages.length), a.error = null;
4201
4205
  }
4202
- function v() {
4206
+ function y() {
4203
4207
  c?.abort();
4204
4208
  }
4205
- function y(e) {
4209
+ function b(e) {
4206
4210
  let t = l.value;
4207
4211
  t && (l.value = null, t.resolve(e));
4208
4212
  }
4209
- async function b() {
4213
+ async function x() {
4210
4214
  if (!a.error) return;
4211
4215
  let e = a.messages, t = -1;
4212
4216
  for (let n = e.length - 1; n >= 0; n--) if (e[n].role === "user") {
@@ -4215,19 +4219,20 @@ function xl(e = {}) {
4215
4219
  }
4216
4220
  if (t < 0) return;
4217
4221
  let n = e[t].content;
4218
- e.splice(t), a.error = null, await m(n);
4222
+ e.splice(t), a.error = null, await h(n);
4219
4223
  }
4220
4224
  return {
4221
4225
  state: a,
4222
4226
  scrollContainer: o,
4223
4227
  pendingApproval: l,
4224
- sendMessage: m,
4225
- clearMessages: _,
4226
- stop: v,
4227
- retry: b,
4228
- regenerate: h,
4229
- resolveApproval: y,
4230
- onScroll: u
4228
+ sendMessage: h,
4229
+ clearMessages: v,
4230
+ stop: y,
4231
+ retry: x,
4232
+ regenerate: g,
4233
+ resolveApproval: b,
4234
+ onScroll: u,
4235
+ onWheel: d
4231
4236
  };
4232
4237
  }
4233
4238
  //#endregion
@@ -5894,7 +5899,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
5894
5899
  });
5895
5900
  let i = y("I", "a", "is", "so", "us", "to", "at", "if", "in", "it", "on", /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, /[A-Za-z]+[-][a-z]+/, /[A-Za-z][a-z]{2,}/);
5896
5901
  return r.contains.push({ begin: _(/[ ]+/, "(", i, /[.]?[:]?([.][ ]|[ ])/, "){3}") }), r;
5897
- }, L = I("//", "$"), R = I("/\\*", "\\*/"), ee = I("#", "$"), te = /*#__PURE__*/ Object.freeze({
5902
+ }, L = I("//", "$"), R = I("/\\*", "\\*/"), z = I("#", "$"), ee = /*#__PURE__*/ Object.freeze({
5898
5903
  __proto__: null,
5899
5904
  APOS_STRING_MODE: N,
5900
5905
  BACKSLASH_ESCAPE: M,
@@ -5923,7 +5928,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
5923
5928
  }
5924
5929
  });
5925
5930
  },
5926
- HASH_COMMENT_MODE: ee,
5931
+ HASH_COMMENT_MODE: z,
5927
5932
  IDENT_RE: T,
5928
5933
  MATCH_NOTHING_RE: w,
5929
5934
  METHOD_GUARD: {
@@ -5963,28 +5968,28 @@ var ed = /* @__PURE__ */ m(((e, t) => {
5963
5968
  relevance: 0
5964
5969
  }
5965
5970
  });
5966
- function ne(e, t) {
5971
+ function te(e, t) {
5967
5972
  e.input[e.index - 1] === "." && t.ignoreMatch();
5968
5973
  }
5969
- function re(e, t) {
5974
+ function ne(e, t) {
5970
5975
  e.className !== void 0 && (e.scope = e.className, delete e.className);
5971
5976
  }
5972
- function ie(e, t) {
5973
- t && e.beginKeywords && (e.begin = "\\b(" + e.beginKeywords.split(" ").join("|") + ")(?!\\.)(?=\\b|\\s)", e.__beforeBegin = ne, e.keywords = e.keywords || e.beginKeywords, delete e.beginKeywords, e.relevance === void 0 && (e.relevance = 0));
5977
+ function re(e, t) {
5978
+ t && e.beginKeywords && (e.begin = "\\b(" + e.beginKeywords.split(" ").join("|") + ")(?!\\.)(?=\\b|\\s)", e.__beforeBegin = te, e.keywords = e.keywords || e.beginKeywords, delete e.beginKeywords, e.relevance === void 0 && (e.relevance = 0));
5974
5979
  }
5975
- function ae(e, t) {
5980
+ function ie(e, t) {
5976
5981
  Array.isArray(e.illegal) && (e.illegal = y(...e.illegal));
5977
5982
  }
5978
- function oe(e, t) {
5983
+ function ae(e, t) {
5979
5984
  if (e.match) {
5980
5985
  if (e.begin || e.end) throw Error("begin & end are not supported with match");
5981
5986
  e.begin = e.match, delete e.match;
5982
5987
  }
5983
5988
  }
5984
- function se(e, t) {
5989
+ function oe(e, t) {
5985
5990
  e.relevance === void 0 && (e.relevance = 1);
5986
5991
  }
5987
- var ce = (e, t) => {
5992
+ var se = (e, t) => {
5988
5993
  if (!e.beforeMatch) return;
5989
5994
  if (e.starts) throw Error("beforeMatch cannot be used with starts");
5990
5995
  let n = Object.assign({}, e);
@@ -5994,7 +5999,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
5994
5999
  relevance: 0,
5995
6000
  contains: [Object.assign(n, { endsParent: !0 })]
5996
6001
  }, e.relevance = 0, delete n.beforeMatch;
5997
- }, z = [
6002
+ }, ce = [
5998
6003
  "of",
5999
6004
  "and",
6000
6005
  "for",
@@ -6023,7 +6028,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
6023
6028
  return t ? Number(t) : +!de(e);
6024
6029
  }
6025
6030
  function de(e) {
6026
- return z.includes(e.toLowerCase());
6031
+ return ce.includes(e.toLowerCase());
6027
6032
  }
6028
6033
  var fe = {}, pe = (e) => {
6029
6034
  console.error(e);
@@ -6121,14 +6126,14 @@ var ed = /* @__PURE__ */ m(((e, t) => {
6121
6126
  let a = n;
6122
6127
  if (n.isCompiled) return a;
6123
6128
  [
6124
- re,
6125
- oe,
6129
+ ne,
6130
+ ae,
6126
6131
  xe,
6127
- ce
6132
+ se
6128
6133
  ].forEach((e) => e(n, r)), e.compilerExtensions.forEach((e) => e(n, r)), n.__beforeBegin = null, [
6134
+ re,
6129
6135
  ie,
6130
- ae,
6131
- se
6136
+ oe
6132
6137
  ].forEach((e) => e(n, r)), n.isCompiled = !0;
6133
6138
  let s = null;
6134
6139
  return typeof n.keywords == "object" && n.keywords.$pattern && (n.keywords = Object.assign({}, n.keywords), s = n.keywords.$pattern, delete n.keywords.$pattern), s ||= /\w+/, n.keywords &&= B(n.keywords, e.case_insensitive), a.keywordPatternRe = t(s, !0), r && (n.begin ||= /\B|\b/, a.beginRe = t(a.begin), !n.end && !n.endsWithParent && (n.end = /\B|\b/), n.end && (a.endRe = t(a.end)), a.terminatorEnd = p(a.end) || "", n.endsWithParent && r.terminatorEnd && (a.terminatorEnd += (n.end ? "|" : "") + r.terminatorEnd)), n.illegal && (a.illegalRe = t(n.illegal)), n.contains ||= [], n.contains = [].concat(...n.contains.map(function(e) {
@@ -6187,9 +6192,9 @@ var ed = /* @__PURE__ */ m(((e, t) => {
6187
6192
  code: r,
6188
6193
  language: i
6189
6194
  };
6190
- ee("before:highlight", a);
6195
+ z("before:highlight", a);
6191
6196
  let o = a.result ? a.result : v(a.language, a.code, n);
6192
- return o.code = a.code, ee("after:highlight", o), o;
6197
+ return o.code = a.code, z("after:highlight", o), o;
6193
6198
  }
6194
6199
  function v(e, n, i, a) {
6195
6200
  let c = Object.create(null);
@@ -6394,7 +6399,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
6394
6399
  function w(e) {
6395
6400
  let t = null, n = d(e);
6396
6401
  if (u(n)) return;
6397
- if (ee("before:highlightElement", {
6402
+ if (z("before:highlightElement", {
6398
6403
  el: e,
6399
6404
  language: n
6400
6405
  }), e.dataset.highlighted) {
@@ -6414,7 +6419,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
6414
6419
  }, i.secondBest && (e.secondBest = {
6415
6420
  language: i.secondBest.language,
6416
6421
  relevance: i.secondBest.relevance
6417
- }), ee("after:highlightElement", {
6422
+ }), z("after:highlightElement", {
6418
6423
  el: e,
6419
6424
  result: i,
6420
6425
  text: r
@@ -6484,13 +6489,13 @@ var ed = /* @__PURE__ */ m(((e, t) => {
6484
6489
  let t = a.indexOf(e);
6485
6490
  t !== -1 && a.splice(t, 1);
6486
6491
  }
6487
- function ee(e, t) {
6492
+ function z(e, t) {
6488
6493
  let n = e;
6489
6494
  a.forEach(function(e) {
6490
6495
  e[n] && e[n](t);
6491
6496
  });
6492
6497
  }
6493
- function ne(e) {
6498
+ function te(e) {
6494
6499
  return he("10.7.0", "highlightBlock will be removed entirely in v12.0"), he("10.7.0", "Please use highlightElement now."), w(e);
6495
6500
  }
6496
6501
  Object.assign(e, {
@@ -6498,7 +6503,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
6498
6503
  highlightAuto: S,
6499
6504
  highlightAll: k,
6500
6505
  highlightElement: w,
6501
- highlightBlock: ne,
6506
+ highlightBlock: te,
6502
6507
  configure: T,
6503
6508
  initHighlighting: E,
6504
6509
  initHighlightingOnLoad: D,
@@ -6522,8 +6527,8 @@ var ed = /* @__PURE__ */ m(((e, t) => {
6522
6527
  optional: g,
6523
6528
  anyNumberOfTimes: h
6524
6529
  };
6525
- for (let e in te) typeof te[e] == "object" && n(te[e]);
6526
- return Object.assign(e, te), e;
6530
+ for (let e in ee) typeof ee[e] == "object" && n(ee[e]);
6531
+ return Object.assign(e, ee), e;
6527
6532
  }, Me = je({});
6528
6533
  Me.newInstance = () => je({}), t.exports = Me, Me.HighlightJS = Me, Me.default = Me;
6529
6534
  })), td = /* @__PURE__ */ m(((e, t) => {
@@ -8876,7 +8881,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
8876
8881
  3: "title.function"
8877
8882
  },
8878
8883
  contains: [{ begin: /\(\)/ }, k]
8879
- }, ee = "(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|" + e.UNDERSCORE_IDENT_RE + ")\\s*=>", te = {
8884
+ }, z = "(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|" + e.UNDERSCORE_IDENT_RE + ")\\s*=>", ee = {
8880
8885
  match: [
8881
8886
  /const|var|let/,
8882
8887
  /\s+/,
@@ -8884,7 +8889,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
8884
8889
  /\s*/,
8885
8890
  /=\s*/,
8886
8891
  /(async\s*)?/,
8887
- t.lookahead(ee)
8892
+ t.lookahead(z)
8888
8893
  ],
8889
8894
  keywords: "async",
8890
8895
  className: {
@@ -8929,7 +8934,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
8929
8934
  match: d + t.lookahead(":"),
8930
8935
  relevance: 0
8931
8936
  },
8932
- te,
8937
+ ee,
8933
8938
  {
8934
8939
  begin: "(" + e.RE_STARTERS_RE + "|\\b(case|return|throw)\\b)\\s*",
8935
8940
  keywords: "return throw case",
@@ -8939,7 +8944,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
8939
8944
  e.REGEXP_MODE,
8940
8945
  {
8941
8946
  className: "function",
8942
- begin: ee,
8947
+ begin: z,
8943
8948
  returnBegin: !0,
8944
8949
  end: "\\s*=>",
8945
8950
  contains: [{
@@ -11306,52 +11311,52 @@ var ed = /* @__PURE__ */ m(((e, t) => {
11306
11311
  I(e),
11307
11312
  L(e)
11308
11313
  ]
11309
- }), ee = (e = "") => ({
11314
+ }), z = (e = "") => ({
11310
11315
  begin: i(e, /"/),
11311
11316
  end: i(/"/, e),
11312
11317
  contains: [F(e), L(e)]
11313
- }), te = {
11318
+ }), ee = {
11314
11319
  className: "string",
11315
11320
  variants: [
11316
11321
  R(),
11317
11322
  R("#"),
11318
11323
  R("##"),
11319
11324
  R("###"),
11320
- ee(),
11321
- ee("#"),
11322
- ee("##"),
11323
- ee("###")
11325
+ z(),
11326
+ z("#"),
11327
+ z("##"),
11328
+ z("###")
11324
11329
  ]
11325
- }, ne = [e.BACKSLASH_ESCAPE, {
11330
+ }, te = [e.BACKSLASH_ESCAPE, {
11326
11331
  begin: /\[/,
11327
11332
  end: /\]/,
11328
11333
  relevance: 0,
11329
11334
  contains: [e.BACKSLASH_ESCAPE]
11330
- }], re = {
11335
+ }], ne = {
11331
11336
  begin: /\/[^\s](?=[^/\n]*\/)/,
11332
11337
  end: /\//,
11333
- contains: ne
11334
- }, ie = (e) => {
11338
+ contains: te
11339
+ }, re = (e) => {
11335
11340
  let t = i(e, /\//), n = i(/\//, e);
11336
11341
  return {
11337
11342
  begin: t,
11338
11343
  end: n,
11339
- contains: [...ne, {
11344
+ contains: [...te, {
11340
11345
  scope: "comment",
11341
11346
  begin: `#(?!.*${n})`,
11342
11347
  end: /$/
11343
11348
  }]
11344
11349
  };
11345
- }, ae = {
11350
+ }, ie = {
11346
11351
  scope: "regexp",
11347
11352
  variants: [
11348
- ie("###"),
11349
- ie("##"),
11350
- ie("#"),
11351
- re
11353
+ re("###"),
11354
+ re("##"),
11355
+ re("#"),
11356
+ ne
11352
11357
  ]
11353
- }, oe = { match: i(/`/, x, /`/) }, se = [
11354
- oe,
11358
+ }, ae = { match: i(/`/, x, /`/) }, oe = [
11359
+ ae,
11355
11360
  {
11356
11361
  className: "variable",
11357
11362
  match: /\$\d+/
@@ -11360,7 +11365,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
11360
11365
  className: "variable",
11361
11366
  match: `\\$${b}+`
11362
11367
  }
11363
- ], ce = [
11368
+ ], se = [
11364
11369
  {
11365
11370
  match: /(@|#(un)?)available/,
11366
11371
  scope: "keyword",
@@ -11371,7 +11376,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
11371
11376
  contains: [
11372
11377
  ...j,
11373
11378
  P,
11374
- te
11379
+ ee
11375
11380
  ]
11376
11381
  }] }
11377
11382
  },
@@ -11383,7 +11388,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
11383
11388
  scope: "meta",
11384
11389
  match: i(/@/, x)
11385
11390
  }
11386
- ], z = {
11391
+ ], ce = {
11387
11392
  match: r(/\b[A-Z]/),
11388
11393
  relevance: 0,
11389
11394
  contains: [
@@ -11416,12 +11421,12 @@ var ed = /* @__PURE__ */ m(((e, t) => {
11416
11421
  contains: [
11417
11422
  ...a,
11418
11423
  ...O,
11419
- ...ce,
11424
+ ...se,
11420
11425
  A,
11421
- z
11426
+ ce
11422
11427
  ]
11423
11428
  };
11424
- z.contains.push(le);
11429
+ ce.contains.push(le);
11425
11430
  let B = {
11426
11431
  begin: /\(/,
11427
11432
  end: /\)/,
@@ -11435,21 +11440,21 @@ var ed = /* @__PURE__ */ m(((e, t) => {
11435
11440
  relevance: 0
11436
11441
  },
11437
11442
  ...a,
11438
- ae,
11443
+ ie,
11439
11444
  ...O,
11440
11445
  ...k,
11441
11446
  ...j,
11442
11447
  P,
11443
- te,
11448
+ ee,
11449
+ ...oe,
11444
11450
  ...se,
11445
- ...ce,
11446
- z
11451
+ ce
11447
11452
  ]
11448
11453
  }, ue = {
11449
11454
  begin: /</,
11450
11455
  end: />/,
11451
11456
  keywords: "repeat each",
11452
- contains: [...a, z]
11457
+ contains: [...a, ce]
11453
11458
  }, de = {
11454
11459
  begin: /\(/,
11455
11460
  end: /\)/,
@@ -11471,9 +11476,9 @@ var ed = /* @__PURE__ */ m(((e, t) => {
11471
11476
  ...O,
11472
11477
  ...j,
11473
11478
  P,
11474
- te,
11475
- ...ce,
11476
- z,
11479
+ ee,
11480
+ ...se,
11481
+ ce,
11477
11482
  B
11478
11483
  ],
11479
11484
  endsParent: !0,
@@ -11482,7 +11487,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
11482
11487
  match: [
11483
11488
  /(func|macro)/,
11484
11489
  /\s+/,
11485
- o(oe.match, x, v)
11490
+ o(ae.match, x, v)
11486
11491
  ],
11487
11492
  className: {
11488
11493
  1: "keyword",
@@ -11523,7 +11528,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
11523
11528
  1: "keyword",
11524
11529
  3: "title"
11525
11530
  },
11526
- contains: [z],
11531
+ contains: [ce],
11527
11532
  keywords: [...p, ...f],
11528
11533
  end: /}/
11529
11534
  }, ge = {
@@ -11576,7 +11581,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
11576
11581
  }
11577
11582
  ]
11578
11583
  };
11579
- for (let e of te.variants) {
11584
+ for (let e of ee.variants) {
11580
11585
  let t = e.contains.find((e) => e.label === "interpol");
11581
11586
  t.keywords = D;
11582
11587
  let n = [
@@ -11584,8 +11589,8 @@ var ed = /* @__PURE__ */ m(((e, t) => {
11584
11589
  ...k,
11585
11590
  ...j,
11586
11591
  P,
11587
- te,
11588
- ...se
11592
+ ee,
11593
+ ...oe
11589
11594
  ];
11590
11595
  t.contains = [...n, {
11591
11596
  begin: /\(/,
@@ -11611,15 +11616,15 @@ var ed = /* @__PURE__ */ m(((e, t) => {
11611
11616
  contains: [...a],
11612
11617
  relevance: 0
11613
11618
  },
11614
- ae,
11619
+ ie,
11615
11620
  ...O,
11616
11621
  ...k,
11617
11622
  ...j,
11618
11623
  P,
11619
- te,
11624
+ ee,
11625
+ ...oe,
11620
11626
  ...se,
11621
- ...ce,
11622
- z,
11627
+ ce,
11623
11628
  B
11624
11629
  ]
11625
11630
  };
@@ -12049,7 +12054,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
12049
12054
  3: "title.function"
12050
12055
  },
12051
12056
  contains: [{ begin: /\(\)/ }, k]
12052
- }, ee = "(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|" + e.UNDERSCORE_IDENT_RE + ")\\s*=>", te = {
12057
+ }, z = "(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|" + e.UNDERSCORE_IDENT_RE + ")\\s*=>", ee = {
12053
12058
  match: [
12054
12059
  /const|var|let/,
12055
12060
  /\s+/,
@@ -12057,7 +12062,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
12057
12062
  /\s*/,
12058
12063
  /=\s*/,
12059
12064
  /(async\s*)?/,
12060
- t.lookahead(ee)
12065
+ t.lookahead(z)
12061
12066
  ],
12062
12067
  keywords: "async",
12063
12068
  className: {
@@ -12102,7 +12107,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
12102
12107
  match: d + t.lookahead(":"),
12103
12108
  relevance: 0
12104
12109
  },
12105
- te,
12110
+ ee,
12106
12111
  {
12107
12112
  begin: "(" + e.RE_STARTERS_RE + "|\\b(case|return|throw)\\b)\\s*",
12108
12113
  keywords: "return throw case",
@@ -12112,7 +12117,7 @@ var ed = /* @__PURE__ */ m(((e, t) => {
12112
12117
  e.REGEXP_MODE,
12113
12118
  {
12114
12119
  className: "function",
12115
- begin: ee,
12120
+ begin: z,
12116
12121
  returnBegin: !0,
12117
12122
  end: "\\s*=>",
12118
12123
  contains: [{
@@ -13223,13 +13228,13 @@ app.mount('#app');
13223
13228
  }
13224
13229
  },
13225
13230
  setup(e) {
13226
- let t = e, { state: n, scrollContainer: r, pendingApproval: i, sendMessage: a, clearMessages: o, stop: s, retry: c, regenerate: l, resolveApproval: u, onScroll: d } = xl({
13231
+ let t = e, { state: n, scrollContainer: r, pendingApproval: i, sendMessage: a, clearMessages: o, stop: s, retry: c, regenerate: l, resolveApproval: u, onScroll: d, onWheel: f } = xl({
13227
13232
  fetchResponse: t.fetchResponse,
13228
13233
  fetchStream: t.fetchStream,
13229
13234
  messages: t.initialMessages,
13230
13235
  onPersist: t.onPersist,
13231
13236
  onClear: t.onClear
13232
- }), f = zs(() => {
13237
+ }), p = zs(() => {
13233
13238
  let e = i.value?.args;
13234
13239
  if (e == null) return "";
13235
13240
  try {
@@ -13238,25 +13243,25 @@ app.mount('#app');
13238
13243
  } catch {
13239
13244
  return String(e);
13240
13245
  }
13241
- }), p = zs(() => i.value?.toolName === "request_human_confirmation"), m = zs(() => {
13246
+ }), m = zs(() => i.value?.toolName === "request_human_confirmation"), h = zs(() => {
13242
13247
  let e = i.value?.args?.options;
13243
13248
  return Array.isArray(e) ? e.map(String) : [];
13244
- }), h = /* @__PURE__ */ fn(!1);
13249
+ }), g = /* @__PURE__ */ fn(!1);
13245
13250
  Gr(i, () => {
13246
- h.value = !1;
13251
+ g.value = !1;
13247
13252
  });
13248
- let g = zs(() => typeof t.canUndo == "function" && !!t.canUndo());
13249
- function _() {
13253
+ let _ = zs(() => typeof t.canUndo == "function" && !!t.canUndo());
13254
+ function v() {
13250
13255
  t.onUndo?.() && (n.error = null);
13251
13256
  }
13252
- let v = /* @__PURE__ */ fn(""), y = /* @__PURE__ */ fn(!0), b = /* @__PURE__ */ fn(!1), x = /* @__PURE__ */ fn({}), S = zs(() => n.messages.length > 0), C = zs(() => n.messages.some((e) => e.role === "user")), w = zs(() => (t.debugLogs?.length ?? 0) > 0);
13253
- function T(e) {
13254
- x.value[e] = !x.value[e];
13255
- }
13257
+ let y = /* @__PURE__ */ fn(""), b = /* @__PURE__ */ fn(!0), x = /* @__PURE__ */ fn(!1), S = /* @__PURE__ */ fn({}), C = zs(() => n.messages.length > 0), w = zs(() => n.messages.some((e) => e.role === "user")), T = zs(() => (t.debugLogs?.length ?? 0) > 0);
13256
13258
  function E(e) {
13257
- return e.status === "running" ? "⏳" : e.status === "error" ? "❌" : "✅";
13259
+ S.value[e] = !S.value[e];
13258
13260
  }
13259
13261
  function D(e) {
13262
+ return e.status === "running" ? "⏳" : e.status === "error" ? "❌" : "✅";
13263
+ }
13264
+ function O(e) {
13260
13265
  let t = [];
13261
13266
  for (let n of e) {
13262
13267
  let e = t.length ? t[t.length - 1] : null;
@@ -13275,46 +13280,46 @@ app.mount('#app');
13275
13280
  children: e.children
13276
13281
  }));
13277
13282
  }
13278
- function O(e) {
13283
+ function k(e) {
13279
13284
  return e === "running" ? "⏳" : e === "error" ? "❌" : "✅";
13280
13285
  }
13281
- function k(e) {
13286
+ function A(e) {
13282
13287
  let t = n.messages[e];
13283
13288
  return !!t && t.role === "assistant" && n.loading && e === n.messages.length - 1 && !t.content && !t.reasoning;
13284
13289
  }
13285
- function A() {
13286
- v.value.trim() && (a(v.value), v.value = "");
13287
- }
13288
- function j(e) {
13289
- e.key === "Enter" && !e.shiftKey && (e.preventDefault(), A());
13290
+ function j() {
13291
+ y.value.trim() && (a(y.value), y.value = "");
13290
13292
  }
13291
13293
  function M(e) {
13294
+ e.key === "Enter" && !e.shiftKey && (e.preventDefault(), j());
13295
+ }
13296
+ function N(e) {
13292
13297
  return new Date(e).toLocaleTimeString("zh-CN", {
13293
13298
  hour: "2-digit",
13294
13299
  minute: "2-digit"
13295
13300
  });
13296
13301
  }
13297
- let N = zs(() => {
13302
+ let P = zs(() => {
13298
13303
  let e = t.getInfo?.();
13299
13304
  return {
13300
13305
  mcp: e?.mcp?.servers?.length ?? 0,
13301
13306
  tools: e?.tools?.length ?? 0
13302
13307
  };
13303
13308
  });
13304
- function P(e) {
13309
+ function F(e) {
13305
13310
  navigator.clipboard.writeText(e);
13306
13311
  }
13307
- return (a, F) => (q(), J("div", { class: Se(["chat-dialog", { collapsed: !y.value }]) }, [
13312
+ return (a, I) => (q(), J("div", { class: Se(["chat-dialog", { collapsed: !b.value }]) }, [
13308
13313
  Y("div", Lm, [Y("div", Rm, [
13309
- F[14] ||= Y("span", { class: "header-icon" }, "🤖", -1),
13314
+ I[15] ||= Y("span", { class: "header-icon" }, "🤖", -1),
13310
13315
  Y("span", zm, V(e.title), 1),
13311
13316
  W(n).loading ? (q(), J("span", Bm)) : X("", !0)
13312
13317
  ]), Y("div", Vm, [
13313
13318
  Y("button", {
13314
- class: Se(["action-btn debug-btn", { active: b.value }]),
13319
+ class: Se(["action-btn debug-btn", { active: x.value }]),
13315
13320
  title: "日志 / 执行流程 / Agent 信息",
13316
- onClick: F[0] ||= (e) => b.value = !0
13317
- }, [F[15] ||= Y("svg", {
13321
+ onClick: I[0] ||= (e) => x.value = !0
13322
+ }, [I[16] ||= Y("svg", {
13318
13323
  width: "16",
13319
13324
  height: "16",
13320
13325
  viewBox: "0 0 24 24",
@@ -13325,13 +13330,13 @@ app.mount('#app');
13325
13330
  Y("path", { d: "M9 2v8l-3 3v2h12v-2l-3-3V2" }),
13326
13331
  Y("path", { d: "M9 2h6" }),
13327
13332
  Y("path", { d: "M9 18h6" })
13328
- ], -1), w.value ? (q(), J("span", Hm, V(e.debugLogs?.length), 1)) : X("", !0)], 2),
13333
+ ], -1), T.value ? (q(), J("span", Hm, V(e.debugLogs?.length), 1)) : X("", !0)], 2),
13329
13334
  Y("button", {
13330
13335
  class: "action-btn",
13331
13336
  title: "清空对话",
13332
- onClick: F[1] ||= (...e) => W(o) && W(o)(...e),
13333
- disabled: !S.value
13334
- }, [...F[16] ||= [Y("svg", {
13337
+ onClick: I[1] ||= (...e) => W(o) && W(o)(...e),
13338
+ disabled: !C.value
13339
+ }, [...I[17] ||= [Y("svg", {
13335
13340
  width: "16",
13336
13341
  height: "16",
13337
13342
  viewBox: "0 0 24 24",
@@ -13341,16 +13346,17 @@ app.mount('#app');
13341
13346
  }, [Y("polyline", { points: "3 6 5 6 21 6" }), Y("path", { d: "M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2" })], -1)]], 8, Um),
13342
13347
  Y("button", {
13343
13348
  class: "action-btn",
13344
- onClick: F[2] ||= (e) => y.value = !y.value
13345
- }, [(q(), J("svg", Wm, [y.value ? (q(), J("path", Gm)) : (q(), J("path", Km))]))])
13349
+ onClick: I[2] ||= (e) => b.value = !b.value
13350
+ }, [(q(), J("svg", Wm, [b.value ? (q(), J("path", Gm)) : (q(), J("path", Km))]))])
13346
13351
  ])]),
13347
13352
  zr(Y("div", {
13348
13353
  class: "chat-body",
13349
13354
  ref_key: "scrollContainer",
13350
13355
  ref: r,
13351
- onScroll: F[5] ||= (...e) => W(d) && W(d)(...e)
13356
+ onScroll: I[5] ||= (...e) => W(d) && W(d)(...e),
13357
+ onWheel: I[6] ||= (...e) => W(f) && W(f)(...e)
13352
13358
  }, [
13353
- S.value ? X("", !0) : (q(), J("div", qm, [...F[17] ||= [Y("div", { class: "empty-icon" }, "💬", -1), Y("p", null, "有什么可以帮你的?", -1)]])),
13359
+ C.value ? X("", !0) : (q(), J("div", qm, [...I[18] ||= [Y("div", { class: "empty-icon" }, "💬", -1), Y("p", null, "有什么可以帮你的?", -1)]])),
13354
13360
  (q(!0), J(K, null, Xi(W(n).messages, (t, r) => (q(), J("div", {
13355
13361
  key: r,
13356
13362
  class: Se(["message-row", t.role]),
@@ -13358,143 +13364,143 @@ app.mount('#app');
13358
13364
  }, [e.showAvatar ? (q(), J("div", Ym, V(t.role === "user" ? "👤" : "🤖"), 1)) : X("", !0), Y("div", Xm, [
13359
13365
  t.role === "assistant" && t.reasoning ? (q(), J("div", {
13360
13366
  key: 0,
13361
- class: Se(["reasoning-block", { expanded: x.value[r] }])
13367
+ class: Se(["reasoning-block", { expanded: S.value[r] }])
13362
13368
  }, [Y("div", {
13363
13369
  class: "reasoning-header",
13364
- onClick: (e) => T(r)
13370
+ onClick: (e) => E(r)
13365
13371
  }, [
13366
- F[18] ||= Y("span", { class: "reasoning-icon" }, "🧠", -1),
13367
- F[19] ||= Y("span", { class: "reasoning-title" }, "思考过程", -1),
13368
- Y("span", Qm, V(x.value[r] ? "▾" : "▸"), 1)
13369
- ], 8, Zm), x.value[r] ? (q(), J("div", $m, V(t.reasoning), 1)) : X("", !0)], 2)) : X("", !0),
13370
- t.role === "assistant" && t.steps && t.steps.length ? (q(), J("div", eh, [(q(!0), J(K, null, Xi(D(t.steps), (e, t) => (q(), J("div", {
13372
+ I[19] ||= Y("span", { class: "reasoning-icon" }, "🧠", -1),
13373
+ I[20] ||= Y("span", { class: "reasoning-title" }, "思考过程", -1),
13374
+ Y("span", Qm, V(S.value[r] ? "▾" : "▸"), 1)
13375
+ ], 8, Zm), S.value[r] ? (q(), J("div", $m, V(t.reasoning), 1)) : X("", !0)], 2)) : X("", !0),
13376
+ t.role === "assistant" && t.steps && t.steps.length ? (q(), J("div", eh, [(q(!0), J(K, null, Xi(O(t.steps), (e, t) => (q(), J("div", {
13371
13377
  key: t,
13372
13378
  class: "step-item"
13373
13379
  }, [Y("div", th, [
13374
- Y("span", nh, V(O(e.status)), 1),
13380
+ Y("span", nh, V(k(e.status)), 1),
13375
13381
  Y("span", rh, V(e.name), 1),
13376
13382
  e.count > 1 ? (q(), J("span", ih, "×" + V(e.count), 1)) : X("", !0),
13377
13383
  e.status === "running" ? (q(), J("span", ah, "执行中…")) : X("", !0)
13378
- ]), e.children && e.children.length ? (q(), J("div", oh, [F[20] ||= Y("div", { class: "step-children-label" }, "🧬 子 agent 进度", -1), (q(!0), J(K, null, Xi(e.children, (e, t) => (q(), J("div", {
13384
+ ]), e.children && e.children.length ? (q(), J("div", oh, [I[21] ||= Y("div", { class: "step-children-label" }, "🧬 子 agent 进度", -1), (q(!0), J(K, null, Xi(e.children, (e, t) => (q(), J("div", {
13379
13385
  key: t,
13380
13386
  class: "step-child"
13381
13387
  }, [
13382
- Y("span", sh, V(E(e)), 1),
13388
+ Y("span", sh, V(D(e)), 1),
13383
13389
  Y("span", ch, V(e.name), 1),
13384
13390
  e.status === "running" ? (q(), J("span", lh, "…")) : X("", !0)
13385
13391
  ]))), 128))])) : X("", !0)]))), 128))])) : X("", !0),
13386
- Y("div", { class: Se(["message-bubble", { typing: k(r) }]) }, [k(r) ? (q(), J(K, { key: 0 }, [e.showTyping ? (q(), J(K, { key: 0 }, [
13387
- F[21] ||= Y("span", { class: "dot" }, null, -1),
13388
- F[22] ||= Y("span", { class: "dot" }, null, -1),
13389
- F[23] ||= Y("span", { class: "dot" }, null, -1)
13392
+ Y("div", { class: Se(["message-bubble", { typing: A(r) }]) }, [A(r) ? (q(), J(K, { key: 0 }, [e.showTyping ? (q(), J(K, { key: 0 }, [
13393
+ I[22] ||= Y("span", { class: "dot" }, null, -1),
13394
+ I[23] ||= Y("span", { class: "dot" }, null, -1),
13395
+ I[24] ||= Y("span", { class: "dot" }, null, -1)
13390
13396
  ], 64)) : (q(), J("span", uh, "思考中…"))], 64)) : (q(), J(K, { key: 1 }, [t.role === "assistant" ? (q(), Ko(ef, {
13391
13397
  key: 0,
13392
13398
  content: t.content
13393
13399
  }, null, 8, ["content"])) : (q(), J(K, { key: 1 }, [is(V(t.content), 1)], 64))], 64))], 2),
13394
13400
  t.role === "assistant" && W(n).loading && r === W(n).messages.length - 1 && t.content ? (q(), J("span", dh)) : X("", !0),
13395
- Y("div", fh, V(M(t.timestamp)), 1),
13401
+ Y("div", fh, V(N(t.timestamp)), 1),
13396
13402
  t.role === "assistant" && t.content && !W(n).loading && r === W(n).messages.length - 1 ? (q(), J("div", ph, [Y("button", {
13397
13403
  class: "msg-action-btn",
13398
13404
  title: "复制",
13399
- onClick: (e) => P(t.content)
13405
+ onClick: (e) => F(t.content)
13400
13406
  }, "📋 复制", 8, mh), Y("button", {
13401
13407
  class: "msg-action-btn",
13402
13408
  title: "重新生成",
13403
- onClick: F[3] ||= (...e) => W(l) && W(l)(...e)
13409
+ onClick: I[3] ||= (...e) => W(l) && W(l)(...e)
13404
13410
  }, "🔄 重新生成")])) : X("", !0)
13405
13411
  ])], 10, Jm))), 128)),
13406
13412
  W(n).loading && W(n).messages[W(n).messages.length - 1]?.role !== "assistant" ? (q(), J("div", hh, [e.showAvatar ? (q(), J("div", gh, "🤖")) : X("", !0), Y("div", _h, [Y("div", vh, [e.showTyping ? (q(), J(K, { key: 0 }, [
13407
- F[24] ||= Y("span", { class: "dot" }, null, -1),
13408
- F[25] ||= Y("span", { class: "dot" }, null, -1),
13409
- F[26] ||= Y("span", { class: "dot" }, null, -1)
13413
+ I[25] ||= Y("span", { class: "dot" }, null, -1),
13414
+ I[26] ||= Y("span", { class: "dot" }, null, -1),
13415
+ I[27] ||= Y("span", { class: "dot" }, null, -1)
13410
13416
  ], 64)) : (q(), J("span", yh, "思考中…"))])])])) : X("", !0),
13411
13417
  W(n).error ? (q(), J("div", bh, [
13412
13418
  Y("span", xh, V(W(n).error), 1),
13413
- C.value ? (q(), J("button", {
13419
+ w.value ? (q(), J("button", {
13414
13420
  key: 0,
13415
13421
  class: "retry-btn",
13416
- onClick: F[4] ||= (...e) => W(c) && W(c)(...e)
13422
+ onClick: I[4] ||= (...e) => W(c) && W(c)(...e)
13417
13423
  }, "重试")) : X("", !0),
13418
- g.value ? (q(), J("button", {
13424
+ _.value ? (q(), J("button", {
13419
13425
  key: 1,
13420
13426
  class: "undo-btn",
13421
13427
  title: "回退到上次正常状态(还原对话历史 + 页面属性 + 工作区)",
13422
- onClick: _
13428
+ onClick: v
13423
13429
  }, "↩ 回退")) : X("", !0)
13424
13430
  ])) : X("", !0)
13425
- ], 544), [[xc, y.value]]),
13426
- W(i) ? (q(), J("div", Sh, [p.value ? (q(), J(K, { key: 0 }, [
13427
- F[27] ||= Y("div", { class: "approval-head" }, [Y("span", { class: "approval-icon" }, "❓"), Y("span", { class: "approval-title" }, "AI 需要你确认")], -1),
13431
+ ], 544), [[xc, b.value]]),
13432
+ W(i) ? (q(), J("div", Sh, [m.value ? (q(), J(K, { key: 0 }, [
13433
+ I[28] ||= Y("div", { class: "approval-head" }, [Y("span", { class: "approval-icon" }, "❓"), Y("span", { class: "approval-title" }, "AI 需要你确认")], -1),
13428
13434
  W(i).args?.question ? (q(), J("div", Ch, V(W(i).args.question), 1)) : X("", !0),
13429
13435
  W(i).args?.context ? (q(), J("div", wh, V(W(i).args.context), 1)) : X("", !0),
13430
13436
  W(i).args?.recommendation ? (q(), J("div", Th, "💡 推荐:" + V(W(i).args.recommendation), 1)) : X("", !0),
13431
13437
  Y("div", Eh, [Y("button", {
13432
13438
  class: "approval-deny",
13433
- onClick: F[6] ||= (e) => W(u)(!1)
13434
- }, "拒绝"), m.value.length ? (q(!0), J(K, { key: 0 }, Xi(m.value, (e) => (q(), J("button", {
13439
+ onClick: I[7] ||= (e) => W(u)(!1)
13440
+ }, "拒绝"), h.value.length ? (q(!0), J(K, { key: 0 }, Xi(h.value, (e) => (q(), J("button", {
13435
13441
  key: e,
13436
13442
  class: "approval-opt",
13437
13443
  onClick: (t) => W(u)(e)
13438
13444
  }, V(e), 9, Dh))), 128)) : (q(), J("button", {
13439
13445
  key: 1,
13440
13446
  class: "approval-allow",
13441
- onClick: F[7] ||= (e) => W(u)(!0)
13447
+ onClick: I[8] ||= (e) => W(u)(!0)
13442
13448
  }, "允许"))])
13443
13449
  ], 64)) : (q(), J(K, { key: 1 }, [
13444
13450
  Y("div", Oh, [
13445
- F[29] ||= Y("span", { class: "approval-icon" }, "✋", -1),
13446
- Y("span", kh, [F[28] ||= is("需确认工具调用:", -1), Y("code", null, V(W(i).toolName), 1)]),
13447
- f.value ? (q(), J("button", {
13451
+ I[30] ||= Y("span", { class: "approval-icon" }, "✋", -1),
13452
+ Y("span", kh, [I[29] ||= is("需确认工具调用:", -1), Y("code", null, V(W(i).toolName), 1)]),
13453
+ p.value ? (q(), J("button", {
13448
13454
  key: 0,
13449
13455
  class: "approval-toggle",
13450
- onClick: F[8] ||= (e) => h.value = !h.value
13451
- }, V(h.value ? "收起参数" : "查看参数") + V(h.value ? " ▴" : " ▾"), 1)) : X("", !0)
13456
+ onClick: I[9] ||= (e) => g.value = !g.value
13457
+ }, V(g.value ? "收起参数" : "查看参数") + V(g.value ? " ▴" : " ▾"), 1)) : X("", !0)
13452
13458
  ]),
13453
- f.value && h.value ? (q(), J("pre", Ah, V(f.value), 1)) : X("", !0),
13459
+ p.value && g.value ? (q(), J("pre", Ah, V(p.value), 1)) : X("", !0),
13454
13460
  Y("div", jh, [Y("button", {
13455
13461
  class: "approval-deny",
13456
- onClick: F[9] ||= (e) => W(u)(!1)
13462
+ onClick: I[10] ||= (e) => W(u)(!1)
13457
13463
  }, "拒绝"), Y("button", {
13458
13464
  class: "approval-allow",
13459
- onClick: F[10] ||= (e) => W(u)(!0)
13465
+ onClick: I[11] ||= (e) => W(u)(!0)
13460
13466
  }, "允许")])
13461
13467
  ], 64))])) : X("", !0),
13462
13468
  zr(Y("div", Mh, [
13463
- t.getInfo ? (q(), J("span", Nh, " 🔌" + V(N.value.mcp) + " · 🔧" + V(N.value.tools), 1)) : X("", !0),
13464
- g.value ? (q(), J("button", {
13469
+ t.getInfo ? (q(), J("span", Nh, " 🔌" + V(P.value.mcp) + " · 🔧" + V(P.value.tools), 1)) : X("", !0),
13470
+ _.value ? (q(), J("button", {
13465
13471
  key: 1,
13466
13472
  class: "undo-foot-btn",
13467
13473
  title: "回退到上次正常状态(还原对话历史 + 页面属性 + 工作区)",
13468
- onClick: _
13474
+ onClick: v
13469
13475
  }, "↩ 回退")) : X("", !0),
13470
13476
  zr(Y("textarea", {
13471
- "onUpdate:modelValue": F[11] ||= (e) => v.value = e,
13477
+ "onUpdate:modelValue": I[12] ||= (e) => y.value = e,
13472
13478
  class: "chat-input",
13473
13479
  placeholder: e.placeholder,
13474
13480
  rows: "1",
13475
- onKeydown: j
13476
- }, null, 40, Ph), [[rl, v.value]]),
13481
+ onKeydown: M
13482
+ }, null, 40, Ph), [[rl, y.value]]),
13477
13483
  Y("button", {
13478
13484
  class: Se(["send-btn", { "stop-btn": W(n).loading }]),
13479
- disabled: !W(n).loading && !v.value.trim(),
13485
+ disabled: !W(n).loading && !y.value.trim(),
13480
13486
  title: W(n).loading ? "停止生成" : "发送",
13481
- onClick: F[12] ||= (e) => W(n).loading ? W(s)() : A()
13482
- }, [W(n).loading ? (q(), J("svg", Ih, [...F[30] ||= [Y("rect", {
13487
+ onClick: I[13] ||= (e) => W(n).loading ? W(s)() : j()
13488
+ }, [W(n).loading ? (q(), J("svg", Ih, [...I[31] ||= [Y("rect", {
13483
13489
  x: "6",
13484
13490
  y: "6",
13485
13491
  width: "12",
13486
13492
  height: "12",
13487
13493
  rx: "2"
13488
- }, null, -1)]])) : (q(), J("svg", Lh, [...F[31] ||= [Y("line", {
13494
+ }, null, -1)]])) : (q(), J("svg", Lh, [...I[32] ||= [Y("line", {
13489
13495
  x1: "22",
13490
13496
  y1: "2",
13491
13497
  x2: "11",
13492
13498
  y2: "13"
13493
13499
  }, null, -1), Y("polygon", { points: "22 2 15 22 11 13 2 9 22 2" }, null, -1)]]))], 10, Fh)
13494
- ], 512), [[xc, y.value]]),
13500
+ ], 512), [[xc, b.value]]),
13495
13501
  $o(Im, {
13496
- visible: b.value,
13497
- "onUpdate:visible": F[13] ||= (e) => b.value = e,
13502
+ visible: x.value,
13503
+ "onUpdate:visible": I[14] ||= (e) => x.value = e,
13498
13504
  logs: e.debugLogs,
13499
13505
  "get-info": t.getInfo
13500
13506
  }, null, 8, [
@@ -13504,7 +13510,7 @@ app.mount('#app');
13504
13510
  ])
13505
13511
  ], 2));
13506
13512
  }
13507
- }), [["__scopeId", "data-v-5bd4b0f0"]]);
13513
+ }), [["__scopeId", "data-v-10d2a0a3"]]);
13508
13514
  function zh(e) {
13509
13515
  return e.replace(/^\/+/, "").replace(/\/+/g, "/");
13510
13516
  }
@@ -13798,8 +13804,11 @@ function ng(e, t) {
13798
13804
  }
13799
13805
  //#endregion
13800
13806
  //#region src/core/harness/createAgent.ts
13801
- var rg = 10, ig = 300, ag = 6e3;
13802
- function og(e, t) {
13807
+ function rg(e) {
13808
+ return e ? /<|tool_calls|>|<||[^>]*tool_call|<invoke\s+name=|<\/?tool_call>|<function_call>/i.test(e) : !1;
13809
+ }
13810
+ var ig = 10, ag = 300, og = 6e3;
13811
+ function sg(e, t) {
13803
13812
  let n = e.reduce((e, t) => e + (typeof t.content == "string" ? t.content.length : JSON.stringify(t.content).length), 0);
13804
13813
  if (n <= t) return e;
13805
13814
  let r = 0, i = n - t, a = Math.max(100, Math.min(400, Math.round(t / 500)));
@@ -13814,8 +13823,8 @@ function og(e, t) {
13814
13823
  });
13815
13824
  });
13816
13825
  }
13817
- function sg(e) {
13818
- let { apiKey: t, baseUrl: n, model: c = "gpt-3.5-turbo", temperature: l = .7, maxTokens: u, systemPrompt: d, tools: f = [], middleware: p = [], maxToolRounds: m = rg, maxRetries: h = 2, retryDelayMs: g = 500, maxParallelTools: _ = 1, maxVerifyAttempts: v = 0, onLog: y, debug: b = !1 } = e, x = Wh({
13826
+ function cg(e) {
13827
+ let { apiKey: t, baseUrl: n, model: c = "gpt-3.5-turbo", temperature: l = .7, maxTokens: u, systemPrompt: d, tools: f = [], middleware: p = [], maxToolRounds: m = ig, maxRetries: h = 2, retryDelayMs: g = 500, maxParallelTools: _ = 1, maxVerifyAttempts: v = 0, onLog: y, debug: b = !1 } = e, x = Wh({
13819
13828
  model: c,
13820
13829
  contextWindow: e.contextWindow,
13821
13830
  maxOutputTokens: e.maxOutputTokens
@@ -13826,10 +13835,10 @@ function sg(e) {
13826
13835
  type: e,
13827
13836
  data: t
13828
13837
  };
13829
- T.value.push(n), T.value.length > ig && T.value.splice(0, T.value.length - ig), gn(T), y?.(n), b && console.log(`%c[Agent] ${e}`, "color:#667eea;font-weight:bold", t);
13838
+ T.value.push(n), T.value.length > ag && T.value.splice(0, T.value.length - ag), gn(T), y?.(n), b && console.log(`%c[Agent] ${e}`, "color:#667eea;font-weight:bold", t);
13830
13839
  }
13831
13840
  let D = (e) => {
13832
- T.value.push(e), T.value.length > ig && T.value.splice(0, T.value.length - ig), gn(T);
13841
+ T.value.push(e), T.value.length > ag && T.value.splice(0, T.value.length - ag), gn(T);
13833
13842
  }, O = [...p.flatMap((e) => e.tools || []), ...f], k = e.llm ?? new s({
13834
13843
  apiKey: t,
13835
13844
  model: c,
@@ -13932,12 +13941,12 @@ function sg(e) {
13932
13941
  return e instanceof i ? "human" : e instanceof r ? "ai" : e instanceof a ? "system" : e instanceof o ? "tool" : "unknown";
13933
13942
  }
13934
13943
  function R(e, t) {
13935
- return og(e, t);
13944
+ return sg(e, t);
13936
13945
  }
13937
- function ee(e) {
13946
+ function z(e) {
13938
13947
  return e.map((e) => {
13939
13948
  let t = L(e), n = { role: t === "human" ? "user" : t === "ai" ? "assistant" : t }, r = typeof e.content == "string" ? e.content : JSON.stringify(e.content);
13940
- r && (n.content = r.length > ag ? r.slice(0, ag) + `…(截断 ${r.length - ag} 字符)` : r);
13949
+ r && (n.content = r.length > og ? r.slice(0, og) + `…(截断 ${r.length - og} 字符)` : r);
13941
13950
  let i = e.tool_calls;
13942
13951
  Array.isArray(i) && i.length && (n.tool_calls = i.map((e) => ({
13943
13952
  id: e.id,
@@ -13951,7 +13960,7 @@ function sg(e) {
13951
13960
  return a && (n.tool_call_id = a), n;
13952
13961
  });
13953
13962
  }
13954
- async function te(e, t, n) {
13963
+ async function ee(e, t, n) {
13955
13964
  T.value = [], j = Jh(), j.messages = e, j = await Xh(p, j);
13956
13965
  let r = e;
13957
13966
  for (let e of p) if (e.compressInput) {
@@ -13967,7 +13976,7 @@ function sg(e) {
13967
13976
  tools: O.map((e) => e.name),
13968
13977
  middleware: p.map((e) => e.name)
13969
13978
  });
13970
- let l = tg(p, (e) => F(e, t, n)), u = ng(p, I), d = 0, f = null;
13979
+ let l = tg(p, (e) => F(e, t, n)), u = ng(p, I), d = 0, f = null, h = 0;
13971
13980
  try {
13972
13981
  for (; d < m && !n?.aborted;) {
13973
13982
  t({
@@ -13980,7 +13989,7 @@ function sg(e) {
13980
13989
  round: d + 1,
13981
13990
  model: c,
13982
13991
  tools: O.map((e) => e.name),
13983
- messages: ee(s)
13992
+ messages: z(s)
13984
13993
  });
13985
13994
  let e = await l({
13986
13995
  messages: s,
@@ -13995,6 +14004,14 @@ function sg(e) {
13995
14004
  content: e.content
13996
14005
  }), e.content;
13997
14006
  if (!e.toolCalls.length) {
14007
+ if (h < 2 && rg(e.content)) {
14008
+ h += 1, E("middleware", {
14009
+ stage: "format_retry",
14010
+ attempt: h,
14011
+ content: e.content.slice(0, 200)
14012
+ }), s.push(new i("⚠️ 你刚才把工具调用写成了文本(伪 XML/标签,如 <|tool_calls|>、<invoke name=...>),未被系统识别为工具调用,因此未执行,页面无变化。请直接用标准 function calling(工具调用)格式重新发起工具调用,不要在回复正文里输出这些标签或 JSON 文本。")), d += 1;
14013
+ continue;
14014
+ }
13998
14015
  if (v > 0 && j.verifyAttempts < v) {
13999
14016
  let t = await eg(p, {
14000
14017
  messages: s,
@@ -14081,7 +14098,7 @@ function sg(e) {
14081
14098
  round: "wrap_up",
14082
14099
  model: c,
14083
14100
  tools: [],
14084
- messages: ee(r)
14101
+ messages: z(r)
14085
14102
  });
14086
14103
  let i = await F({
14087
14104
  messages: r,
@@ -14108,15 +14125,15 @@ function sg(e) {
14108
14125
  }
14109
14126
  }
14110
14127
  }
14111
- async function ne(e, t) {
14128
+ async function te(e, t) {
14112
14129
  let n = "";
14113
- return await te(e, (e) => {
14130
+ return await ee(e, (e) => {
14114
14131
  e.type === "done" && (n = e.content);
14115
14132
  }, t), n;
14116
14133
  }
14117
14134
  return {
14118
- invoke: ne,
14119
- stream: te,
14135
+ invoke: te,
14136
+ stream: ee,
14120
14137
  getState: () => j,
14121
14138
  allTools: O,
14122
14139
  debugLogs: T
@@ -14124,14 +14141,14 @@ function sg(e) {
14124
14141
  }
14125
14142
  //#endregion
14126
14143
  //#region src/core/harness/todos.ts
14127
- function cg(e) {
14144
+ function lg(e) {
14128
14145
  if (e.length) return [
14129
14146
  "## 当前任务清单(用 write_todos 工具管理)",
14130
14147
  e.map((e, t) => `${t + 1}. [${e.status}] ${e.content}`).join("\n"),
14131
14148
  "规则:开始前用 write_todos 拆解;首个任务标 in_progress;完成一个立即标 completed(不批量);保持至少一个 in_progress 直到全部完成。"
14132
14149
  ].join("\n");
14133
14150
  }
14134
- function lg(e = []) {
14151
+ function ug(e = []) {
14135
14152
  let r = e.map((e) => ({ ...e })), i = 0;
14136
14153
  return {
14137
14154
  name: "todos",
@@ -14149,7 +14166,7 @@ function lg(e = []) {
14149
14166
  })],
14150
14167
  beforeAgent: () => ({ todos: r }),
14151
14168
  beforeModel: () => (i = 0, { todos: r }),
14152
- augmentPrompt: () => cg(r),
14169
+ augmentPrompt: () => lg(r),
14153
14170
  wrapToolCall: async (e, t) => e.name === "write_todos" && (i++, i > 1) ? {
14154
14171
  content: "错误:write_todos 不应在一轮中并行多次调用(整表替换语义)。请串行使用。",
14155
14172
  status: "error"
@@ -14161,18 +14178,18 @@ function lg(e = []) {
14161
14178
  }
14162
14179
  //#endregion
14163
14180
  //#region src/core/harness/skills.ts
14164
- function ug(e) {
14181
+ function dg(e) {
14165
14182
  return e;
14166
14183
  }
14167
- var dg = /^https?:\/\//i;
14168
- function fg(e) {
14169
- return dg.test(e) || e.startsWith("//") ? "http" : "vfs";
14170
- }
14184
+ var fg = /^https?:\/\//i;
14171
14185
  function pg(e) {
14186
+ return fg.test(e) || e.startsWith("//") ? "http" : "vfs";
14187
+ }
14188
+ function mg(e) {
14172
14189
  return e.replace(/^vfs:\/\//, "").replace(/^\/+/, "").replace(/\/+/g, "/");
14173
14190
  }
14174
- async function mg(e, t) {
14175
- if (fg(e) === "http") try {
14191
+ async function hg(e, t) {
14192
+ if (pg(e) === "http") try {
14176
14193
  let t = await fetch(e);
14177
14194
  return t.ok ? {
14178
14195
  ok: !0,
@@ -14195,7 +14212,7 @@ async function mg(e, t) {
14195
14212
  ok: !1,
14196
14213
  error: `skill 文档 ${e} 是 vfs 路径,但 vfs 未启用`
14197
14214
  };
14198
- let n = t(pg(e));
14215
+ let n = t(mg(e));
14199
14216
  return n == null ? {
14200
14217
  ok: !1,
14201
14218
  error: `未找到 vfs 文档 ${e}(可用 vfs_ls 查看)`
@@ -14204,14 +14221,14 @@ async function mg(e, t) {
14204
14221
  content: n
14205
14222
  };
14206
14223
  }
14207
- function hg(e) {
14224
+ function gg(e) {
14208
14225
  if (e.length) return [
14209
14226
  "## 可用 Skills(渐进式披露)",
14210
14227
  e.map((e) => `- ${e.name}: ${e.description}`).join("\n"),
14211
14228
  "当某 skill 适用时,先调用 load_skill(name) 加载其完整指令,再按指令执行。不要凭记忆猜测 skill 内容。"
14212
14229
  ].join("\n");
14213
14230
  }
14214
- function gg(e, r) {
14231
+ function _g(e, r) {
14215
14232
  let i = new Map(e.map((e) => [e.name, e])), a = /* @__PURE__ */ new Set();
14216
14233
  return {
14217
14234
  name: "skills",
@@ -14221,7 +14238,7 @@ function gg(e, r) {
14221
14238
  if (a.has(e)) return `skill "${e}" 已在本轮加载,无需重复。`;
14222
14239
  let n;
14223
14240
  if (t.doc) {
14224
- let i = await mg(t.doc, r?.readVfs);
14241
+ let i = await hg(t.doc, r?.readVfs);
14225
14242
  if (!i.ok) return `加载 skill "${e}" 文档失败:${i.error}`;
14226
14243
  n = i.content;
14227
14244
  } else if (t.getContent) n = await t.getContent();
@@ -14239,13 +14256,13 @@ function gg(e, r) {
14239
14256
  })),
14240
14257
  skillsLoaded: []
14241
14258
  }),
14242
- augmentPrompt: () => hg(e),
14259
+ augmentPrompt: () => gg(e),
14243
14260
  afterModel: () => ({ skillsLoaded: [...a] })
14244
14261
  };
14245
14262
  }
14246
14263
  //#endregion
14247
14264
  //#region src/core/harness/memory.ts
14248
- function _g(e = "") {
14265
+ function vg(e = "") {
14249
14266
  let t = e;
14250
14267
  return {
14251
14268
  name: "memory",
@@ -14258,12 +14275,12 @@ function _g(e = "") {
14258
14275
  }
14259
14276
  //#endregion
14260
14277
  //#region src/core/harness/permissions.ts
14261
- var vg = /* @__PURE__ */ new Set([
14278
+ var yg = /* @__PURE__ */ new Set([
14262
14279
  "set_window_prop",
14263
14280
  "delete_window_prop",
14264
14281
  "vfs_write",
14265
14282
  "vfs_edit"
14266
- ]), yg = /* @__PURE__ */ new Set([
14283
+ ]), bg = /* @__PURE__ */ new Set([
14267
14284
  "get_window_prop",
14268
14285
  "describe_window_prop",
14269
14286
  "list_window_props",
@@ -14272,7 +14289,7 @@ var vg = /* @__PURE__ */ new Set([
14272
14289
  "vfs_glob",
14273
14290
  "vfs_grep"
14274
14291
  ]);
14275
- function bg(e) {
14292
+ function xg(e) {
14276
14293
  let t = "";
14277
14294
  for (let n = 0; n < e.length; n++) {
14278
14295
  let r = e[n];
@@ -14280,16 +14297,16 @@ function bg(e) {
14280
14297
  }
14281
14298
  return RegExp("^" + t + "$");
14282
14299
  }
14283
- function xg(e, t, n) {
14284
- for (let r of e) if (r.operations.includes(t) && r.scopes.some((e) => bg(e).test(n))) return r.mode;
14300
+ function Sg(e, t, n) {
14301
+ for (let r of e) if (r.operations.includes(t) && r.scopes.some((e) => xg(e).test(n))) return r.mode;
14285
14302
  return "allow";
14286
14303
  }
14287
- function Sg(e) {
14304
+ function Cg(e) {
14288
14305
  return {
14289
14306
  name: "permissions",
14290
14307
  wrapToolCall: async (t, n) => {
14291
- let r = vg.has(t.name) ? "write" : yg.has(t.name) ? "read" : null, i = t.args?.path || "";
14292
- return r && i && xg(e, r, i) === "deny" ? {
14308
+ let r = yg.has(t.name) ? "write" : bg.has(t.name) ? "read" : null, i = t.args?.path || "";
14309
+ return r && i && Sg(e, r, i) === "deny" ? {
14293
14310
  content: `权限拒绝:${r} 操作 "${i}" 被 permissions 规则禁止。`,
14294
14311
  status: "error"
14295
14312
  } : n(t);
@@ -14298,7 +14315,7 @@ function Sg(e) {
14298
14315
  }
14299
14316
  //#endregion
14300
14317
  //#region src/core/harness/approval.ts
14301
- function Cg(e = {}) {
14318
+ function wg(e = {}) {
14302
14319
  let t = (t, n) => e.confirm ? !!e.confirm(t, n) : e.tools === void 0 || e.tools.includes(t);
14303
14320
  return {
14304
14321
  name: "approval",
@@ -14332,15 +14349,15 @@ function Cg(e = {}) {
14332
14349
  }
14333
14350
  //#endregion
14334
14351
  //#region src/core/harness/humanConfirm.ts
14335
- var wg = "request_human_confirmation", Tg = t.object({
14352
+ var Tg = "request_human_confirmation", Eg = t.object({
14336
14353
  question: t.string().describe("要征询用户的问题/方案描述。清晰具体:说明当前情况、为什么需要确认、确认什么。"),
14337
14354
  options: t.array(t.string()).optional().describe("可选方案列表(2-4 个)。用户从中选一个。不传则用户只回答允许/拒绝。"),
14338
14355
  recommendation: t.string().optional().describe("你推荐的方案(优先在 options 中选一个)及推荐理由,帮用户快速决策。"),
14339
14356
  context: t.string().optional().describe("补充上下文:已做了什么、约束、影响范围等,帮用户判断。")
14340
14357
  });
14341
- function Eg() {
14358
+ function Dg() {
14342
14359
  return n(async () => "人工确认中间件未装载,无法征询用户。请直接向用户说明情况并等待回复。", {
14343
- name: wg,
14360
+ name: Tg,
14344
14361
  description: [
14345
14362
  "当遇到以下情况时,主动调用本工具征询用户确认后再继续(不要默默猜测后直接执行高风险动作):",
14346
14363
  "1) 不确定用户意图、需求有歧义;",
@@ -14350,10 +14367,10 @@ function Eg() {
14350
14367
  "入参:question=问题/方案描述;options=可选方案列表(多方案时给);recommendation=你推荐的方案及理由。",
14351
14368
  "用户选择后,据其回答继续;若用户拒绝,停止当前操作并询问如何调整。"
14352
14369
  ].join(""),
14353
- schema: Tg
14370
+ schema: Eg
14354
14371
  });
14355
14372
  }
14356
- function Dg() {
14373
+ function Og() {
14357
14374
  return {
14358
14375
  name: "humanConfirm",
14359
14376
  wrapToolCall: async (e, t) => e.name === "request_human_confirmation" ? new Promise((t) => {
@@ -14385,14 +14402,14 @@ function Dg() {
14385
14402
  }
14386
14403
  //#endregion
14387
14404
  //#region src/core/harness/checkpoint.ts
14388
- function Og(e) {
14405
+ function kg(e) {
14389
14406
  if (typeof e != "object" || !e) return e;
14390
14407
  if (typeof structuredClone == "function") try {
14391
14408
  return structuredClone(e);
14392
14409
  } catch {}
14393
14410
  return JSON.parse(JSON.stringify(e));
14394
14411
  }
14395
- function kg(e, t) {
14412
+ function Ag(e, t) {
14396
14413
  let n = t.split("."), r = e;
14397
14414
  for (let e of n) {
14398
14415
  if (r == null) return;
@@ -14400,12 +14417,12 @@ function kg(e, t) {
14400
14417
  }
14401
14418
  return r;
14402
14419
  }
14403
- function Ag(e, t, n) {
14420
+ function jg(e, t, n) {
14404
14421
  let r = t.split("."), i = e;
14405
14422
  for (let e = 0; e < r.length - 1; e++) i[r[e]] ?? (i[r[e]] = {}), i = i[r[e]];
14406
14423
  i[r[r.length - 1]] = n;
14407
14424
  }
14408
- function jg(e, t) {
14425
+ function Mg(e, t) {
14409
14426
  if (Array.isArray(e)) {
14410
14427
  e.length = 0, Array.isArray(t) && e.push(...t);
14411
14428
  return;
@@ -14414,11 +14431,11 @@ function jg(e, t) {
14414
14431
  for (let t of Object.keys(e)) t in n || delete e[t];
14415
14432
  for (let t of Object.keys(n)) e[t] = n[t];
14416
14433
  }
14417
- function Mg(e, t) {
14418
- let n = kg(window, e);
14419
- typeof n == "object" && n ? jg(n, t) : Ag(window, e, t);
14434
+ function Ng(e, t) {
14435
+ let n = Ag(window, e);
14436
+ typeof n == "object" && n ? Mg(n, t) : jg(window, e, t);
14420
14437
  }
14421
- function Ng(e) {
14438
+ function Pg(e) {
14422
14439
  let t = e.slice();
14423
14440
  for (; t.length;) {
14424
14441
  let e = t[t.length - 1];
@@ -14427,20 +14444,20 @@ function Ng(e) {
14427
14444
  }
14428
14445
  return t;
14429
14446
  }
14430
- function Pg(e) {
14447
+ function Fg(e) {
14431
14448
  let t = [], n = e.maxCheckpoints ?? 5, r = 1;
14432
14449
  return {
14433
14450
  save(i) {
14434
- let a = Ng(e.messages), o = {};
14435
- for (let t of e.windowPaths) o[t] = Og(kg(window, t));
14451
+ let a = Pg(e.messages), o = {};
14452
+ for (let t of e.windowPaths) o[t] = kg(Ag(window, t));
14436
14453
  let s = {
14437
14454
  id: r++,
14438
14455
  label: i,
14439
14456
  timestamp: Date.now(),
14440
- messages: Og(a),
14457
+ messages: kg(a),
14441
14458
  windowVals: o,
14442
- vfs: Og(e.vfsStore.files),
14443
- todos: Og(e.getTodos()),
14459
+ vfs: kg(e.vfsStore.files),
14460
+ todos: kg(e.getTodos()),
14444
14461
  messageCount: a.length
14445
14462
  };
14446
14463
  for (t.push(s); t.length > n;) t.shift();
@@ -14460,15 +14477,15 @@ function Pg(e) {
14460
14477
  restore(n) {
14461
14478
  let r = n == null ? t[t.length - 1] : t.find((e) => e.id === n);
14462
14479
  if (!r) return !1;
14463
- e.messages.splice(0, e.messages.length, ...Og(r.messages));
14464
- for (let [e, t] of Object.entries(r.windowVals)) Mg(e, Og(t));
14480
+ e.messages.splice(0, e.messages.length, ...kg(r.messages));
14481
+ for (let [e, t] of Object.entries(r.windowVals)) Ng(e, kg(t));
14465
14482
  let i = e.vfsStore.files;
14466
14483
  for (let e of Object.keys(i)) delete i[e];
14467
- return Object.assign(i, Og(r.vfs)), e.todosMw.reset(Og(r.todos)), !0;
14484
+ return Object.assign(i, kg(r.vfs)), e.todosMw.reset(kg(r.todos)), !0;
14468
14485
  }
14469
14486
  };
14470
14487
  }
14471
- function Fg(e) {
14488
+ function Ig(e) {
14472
14489
  let t = !1;
14473
14490
  return {
14474
14491
  name: "checkpoint",
@@ -14482,22 +14499,22 @@ function Fg(e) {
14482
14499
  }
14483
14500
  //#endregion
14484
14501
  //#region src/core/harness/subagent.ts
14485
- function Ig(e) {
14502
+ function Lg(e) {
14486
14503
  return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
14487
14504
  }
14488
- var Lg = [
14505
+ var Rg = [
14489
14506
  "get_window_prop",
14490
14507
  "get_window_paths",
14491
14508
  "list_window_props",
14492
14509
  "describe_window_prop",
14493
14510
  "fetch_document"
14494
- ], Rg = 1, zg = 4, Bg = 6, Vg = ["spawn_agent", "spawn_agents"];
14495
- async function Hg(e, t, n, r, i) {
14496
- let a = t.depth ?? 0, o = t.maxDepth ?? Rg, s = /* @__PURE__ */ new Set([...Lg, ...t.allowedTools ?? []]), c = [...t.allTools.filter((e) => s.has(e.name) && !Vg.includes(e.name)), ...t.extraTools ?? []], l = a + 1 < o ? [Ug({
14511
+ ], zg = 1, Bg = 4, Vg = 6, Hg = ["spawn_agent", "spawn_agents"];
14512
+ async function Ug(e, t, n, r, i) {
14513
+ let a = t.depth ?? 0, o = t.maxDepth ?? zg, s = /* @__PURE__ */ new Set([...Rg, ...t.allowedTools ?? []]), c = [...t.allTools.filter((e) => s.has(e.name) && !Hg.includes(e.name)), ...t.extraTools ?? []], l = a + 1 < o ? [Wg({
14497
14514
  ...t,
14498
14515
  depth: a + 1
14499
- })] : [], u = sg({
14500
- ...Ig(t.llm) ? { llm: t.llm } : {
14516
+ })] : [], u = cg({
14517
+ ...Lg(t.llm) ? { llm: t.llm } : {
14501
14518
  apiKey: t.llm.apiKey,
14502
14519
  baseUrl: t.llm.baseUrl,
14503
14520
  model: e.model ?? t.llm.model,
@@ -14506,8 +14523,8 @@ async function Hg(e, t, n, r, i) {
14506
14523
  },
14507
14524
  systemPrompt: e.role?.trim() || t.systemPrompt || "你是一个专注的子任务执行者。你只有只读工具(读 window / 抓文档),用它们完成给定任务,给出简洁结论,不要展开多余解释。",
14508
14525
  tools: c,
14509
- middleware: [...t.skills?.length ? [gg(t.skills)] : [], ...l],
14510
- maxToolRounds: t.maxToolRounds ?? Bg,
14526
+ middleware: [...t.skills?.length ? [_g(t.skills)] : [], ...l],
14527
+ maxToolRounds: t.maxToolRounds ?? Vg,
14511
14528
  onLog: i,
14512
14529
  debug: t.debug
14513
14530
  });
@@ -14519,8 +14536,8 @@ async function Hg(e, t, n, r, i) {
14519
14536
  r && (e.type === "tool_call" || e.type === "tool_result") && r(e);
14520
14537
  }, n);
14521
14538
  }
14522
- function Ug(e) {
14523
- let r = e.maxParallel ?? zg, i, a, o, s = (e, t) => (n) => {
14539
+ function Wg(e) {
14540
+ let r = e.maxParallel ?? Bg, i, a, o, s = (e, t) => (n) => {
14524
14541
  a && a({
14525
14542
  type: "subagent",
14526
14543
  taskId: e,
@@ -14539,7 +14556,7 @@ function Ug(e) {
14539
14556
  ...e,
14540
14557
  allowedTools: r
14541
14558
  } : e, l = `sub-${Math.random().toString(36).slice(2, 8)}`, u = n?.trim() || "子任务";
14542
- return await Hg({
14559
+ return await Ug({
14543
14560
  prompt: t,
14544
14561
  role: n,
14545
14562
  model: a
@@ -14558,7 +14575,7 @@ function Ug(e) {
14558
14575
  })
14559
14576
  }), n(async ({ tasks: t }) => (await Vh(t, r, async (t, n) => {
14560
14577
  let r = `sub-${n}-${Math.random().toString(36).slice(2, 6)}`, a = t.role?.trim() || `子任务${n + 1}`;
14561
- return Hg(t, e, i, s(r, a), (e) => o?.({
14578
+ return Ug(t, e, i, s(r, a), (e) => o?.({
14562
14579
  ...e,
14563
14580
  source: `子:${a}`
14564
14581
  }));
@@ -14573,8 +14590,8 @@ function Ug(e) {
14573
14590
  wrapToolCall: async (e, t) => (e.signal && (i = e.signal), e.emit && (a = e.emit), e.logSink && (o = e.logSink), t(e))
14574
14591
  };
14575
14592
  }
14576
- var Wg = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
14577
- function Gg(e, t) {
14593
+ var Gg = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
14594
+ function Kg(e, t) {
14578
14595
  let n = e.tools ?? [];
14579
14596
  return {
14580
14597
  llm: e.llm ?? t.llm,
@@ -14588,9 +14605,9 @@ function Gg(e, t) {
14588
14605
  debug: t.debug
14589
14606
  };
14590
14607
  }
14591
- function Kg(e, r) {
14608
+ function qg(e, r) {
14592
14609
  let i = /* @__PURE__ */ new Set(), a = e.filter((e) => {
14593
- if (!Wg.test(e.id)) return console.warn(`[subagents] id "${e.id}" 非合法工具名(须 [a-zA-Z_][a-zA-Z0-9_]*),已跳过`), !1;
14610
+ if (!Gg.test(e.id)) return console.warn(`[subagents] id "${e.id}" 非合法工具名(须 [a-zA-Z_][a-zA-Z0-9_]*),已跳过`), !1;
14594
14611
  let t = `use_${e.id}`;
14595
14612
  return i.has(t) ? (console.warn(`[subagents] id "${e.id}" 重复,已跳过`), !1) : (i.add(t), !0);
14596
14613
  }), o, s, c, l = (e, t) => (n) => {
@@ -14608,8 +14625,8 @@ function Kg(e, r) {
14608
14625
  return {
14609
14626
  name: "subagents",
14610
14627
  tools: a.map((e) => n(async ({ task: t }) => {
14611
- let n = Gg(e, r);
14612
- return Hg({ prompt: t }, n, o, l(`use_${e.id}`, e.id), (t) => c?.({
14628
+ let n = Kg(e, r);
14629
+ return Ug({ prompt: t }, n, o, l(`use_${e.id}`, e.id), (t) => c?.({
14613
14630
  ...t,
14614
14631
  source: `子:${e.id}`
14615
14632
  }));
@@ -14628,7 +14645,7 @@ function Kg(e, r) {
14628
14645
  }
14629
14646
  //#endregion
14630
14647
  //#region src/core/harness/verify.ts
14631
- function qg(e) {
14648
+ function Jg(e) {
14632
14649
  return {
14633
14650
  name: "verify",
14634
14651
  async beforeReturn({ messages: t, state: n, log: r }) {
@@ -14640,10 +14657,10 @@ function qg(e) {
14640
14657
  if (e.adversarial) {
14641
14658
  r?.("middleware", {
14642
14659
  stage: "adversarial_start",
14643
- model: t_(e.adversarial.llm),
14660
+ model: n_(e.adversarial.llm),
14644
14661
  tools: (e.adversarial.tools ?? []).length
14645
14662
  });
14646
- let n = await a_(t, e.adversarial.llm, r, e.adversarial.tools);
14663
+ let n = await o_(t, e.adversarial.llm, r, e.adversarial.tools);
14647
14664
  if (r?.("middleware", {
14648
14665
  stage: "adversarial_done",
14649
14666
  clean: n === null,
@@ -14654,16 +14671,16 @@ function qg(e) {
14654
14671
  }
14655
14672
  };
14656
14673
  }
14657
- var Jg = /* @__PURE__ */ new Set([
14674
+ var Yg = /* @__PURE__ */ new Set([
14658
14675
  "set_window_prop",
14659
14676
  "edit_window_prop",
14660
14677
  "delete_window_prop"
14661
- ]), Yg = /校验失败|未在注册表中声明|未注册|不存在|仅支持|必须是/;
14662
- function Xg(e) {
14678
+ ]), Xg = /校验失败|未在注册表中声明|未注册|不存在|仅支持|必须是/;
14679
+ function Zg(e) {
14663
14680
  let t = /* @__PURE__ */ new Map();
14664
14681
  for (let n of e) {
14665
14682
  let e = n?.tool_calls;
14666
- if (Array.isArray(e)) for (let n of e) Jg.has(n.name) && typeof n?.args?.path == "string" && t.set(n.args.path, {
14683
+ if (Array.isArray(e)) for (let n of e) Yg.has(n.name) && typeof n?.args?.path == "string" && t.set(n.args.path, {
14667
14684
  path: n.args.path,
14668
14685
  op: n.name,
14669
14686
  callId: n.id
@@ -14671,7 +14688,7 @@ function Xg(e) {
14671
14688
  }
14672
14689
  return [...t.values()];
14673
14690
  }
14674
- function Zg(e) {
14691
+ function Qg(e) {
14675
14692
  let t = /* @__PURE__ */ new Map();
14676
14693
  for (let n of e) {
14677
14694
  let e = n?.tool_call_id, r = n?.content;
@@ -14679,7 +14696,7 @@ function Zg(e) {
14679
14696
  }
14680
14697
  return t;
14681
14698
  }
14682
- function Qg(e, t) {
14699
+ function $g(e, t) {
14683
14700
  if (e == null) return;
14684
14701
  let n = e;
14685
14702
  for (let e of t.split(".")) {
@@ -14688,16 +14705,16 @@ function Qg(e, t) {
14688
14705
  }
14689
14706
  return n;
14690
14707
  }
14691
- function $g(e = {}) {
14708
+ function e_(e = {}) {
14692
14709
  let t = e.window ?? globalThis.window, n = typeof e.schemas == "function" ? e.schemas : () => e.schemas ?? {};
14693
14710
  return async ({ messages: e }) => {
14694
- let r = Xg(e);
14711
+ let r = Zg(e);
14695
14712
  if (!r.length) return { ok: !0 };
14696
- let i = Zg(e), a = n(), o = [];
14713
+ let i = Qg(e), a = n(), o = [];
14697
14714
  for (let { path: e, op: n, callId: s } of r) {
14698
14715
  let r = s ? i.get(s) : void 0;
14699
- if (r && Yg.test(r)) continue;
14700
- let c = Qg(t, e);
14716
+ if (r && Xg.test(r)) continue;
14717
+ let c = $g(t, e);
14701
14718
  if (n === "delete_window_prop") c !== void 0 && o.push(`${e} 删除后读回仍有值,疑似未生效`);
14702
14719
  else if (c == null) o.push(`写入 ${e} 后读回为空,疑似未生效`);
14703
14720
  else if (a[e]) {
@@ -14711,17 +14728,17 @@ function $g(e = {}) {
14711
14728
  } : { ok: !0 };
14712
14729
  };
14713
14730
  }
14714
- function e_(e) {
14715
- return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
14716
- }
14717
14731
  function t_(e) {
14718
- return e_(e) ? e.model ?? e.modelName ?? "<实例>" : e.model ?? "<配置>";
14732
+ return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
14719
14733
  }
14720
- var n_ = /无问题|没有问题|未发现问题|没有发现|没问题|未发现/;
14721
- function r_(e) {
14722
- return n_.test(e);
14734
+ function n_(e) {
14735
+ return t_(e) ? e.model ?? e.modelName ?? "<实例>" : e.model ?? "<配置>";
14723
14736
  }
14737
+ var r_ = /无问题|没有问题|未发现问题|没有发现|没问题|未发现/;
14724
14738
  function i_(e) {
14739
+ return r_.test(e);
14740
+ }
14741
+ function a_(e) {
14725
14742
  let t = "", n = "";
14726
14743
  for (let a of e) a instanceof i ? t = typeof a.content == "string" ? a.content : "" : a instanceof r && !(a.tool_calls?.length > 0) && (n = typeof a.content == "string" ? a.content : "");
14727
14744
  return {
@@ -14729,8 +14746,8 @@ function i_(e) {
14729
14746
  lastReply: n
14730
14747
  };
14731
14748
  }
14732
- async function a_(e, t, n, r) {
14733
- let { lastUser: i, lastReply: a } = i_(e);
14749
+ async function o_(e, t, n, r) {
14750
+ let { lastUser: i, lastReply: a } = a_(e);
14734
14751
  if (!a) return null;
14735
14752
  let o = Array.isArray(r) && r.length > 0, s = [
14736
14753
  "你是严格的对抗式审查者,目标是找出以下 AI 助手回复的错误并证明它有问题(事实错误 / 遗漏 / 逻辑矛盾 / 与需求不符)。",
@@ -14741,7 +14758,7 @@ async function a_(e, t, n, r) {
14741
14758
  ].join("\n"), c = "你是严格的对抗式审查者,只找问题不赞美。目标是反驳,不是改进。", l = n ? (e) => n(e.type, {
14742
14759
  ...e.data,
14743
14760
  source: "adversarial"
14744
- }) : void 0, u = await sg(e_(t) ? {
14761
+ }) : void 0, u = await cg(t_(t) ? {
14745
14762
  llm: t,
14746
14763
  tools: r,
14747
14764
  maxToolRounds: o ? 4 : 1,
@@ -14766,17 +14783,17 @@ async function a_(e, t, n, r) {
14766
14783
  stage: "adversarial_verdict",
14767
14784
  verdict: u,
14768
14785
  source: "adversarial"
14769
- }), r_(u) ? null : u.trim();
14786
+ }), i_(u) ? null : u.trim();
14770
14787
  }
14771
14788
  //#endregion
14772
14789
  //#region src/core/mcp/client.ts
14773
- function o_(e) {
14790
+ function s_(e) {
14774
14791
  let t = e?.content;
14775
14792
  if (!Array.isArray(t) || !t.length) return "";
14776
14793
  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");
14777
14794
  return e?.isError ? `工具错误:${n}` : n;
14778
14795
  }
14779
- async function s_(e) {
14796
+ async function c_(e) {
14780
14797
  let t = new URL(e.url), n = e.requestInit;
14781
14798
  if (e.transport === "http") {
14782
14799
  let { StreamableHTTPClientTransport: e } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
@@ -14789,8 +14806,8 @@ async function s_(e) {
14789
14806
  let { WebSocketClientTransport: r } = await import("@modelcontextprotocol/sdk/client/websocket.js");
14790
14807
  return new r(t);
14791
14808
  }
14792
- function c_(e, t) {
14793
- return n(async (n) => o_(await t.callTool({
14809
+ function l_(e, t) {
14810
+ return n(async (n) => s_(await t.callTool({
14794
14811
  name: e.name,
14795
14812
  arguments: n
14796
14813
  })), {
@@ -14799,21 +14816,21 @@ function c_(e, t) {
14799
14816
  schema: e.inputSchema
14800
14817
  });
14801
14818
  }
14802
- async function l_(e) {
14803
- let { Client: t } = await import("@modelcontextprotocol/sdk/client"), n = await s_(e), r = new t({
14819
+ async function u_(e) {
14820
+ let { Client: t } = await import("@modelcontextprotocol/sdk/client"), n = await c_(e), r = new t({
14804
14821
  name: "page-agent-sdk",
14805
14822
  version: "1.0"
14806
14823
  }, { capabilities: {} });
14807
14824
  await r.connect(n);
14808
14825
  let { tools: i } = await r.listTools();
14809
14826
  return {
14810
- tools: i.map((e) => c_(e, r)),
14827
+ tools: i.map((e) => l_(e, r)),
14811
14828
  close: () => r.close()
14812
14829
  };
14813
14830
  }
14814
14831
  //#endregion
14815
14832
  //#region src/core/utils/rounds.ts
14816
- function u_(e) {
14833
+ function d_(e) {
14817
14834
  let t = [], n = null, r = 0;
14818
14835
  for (let i = 0; i < e.length; i++) {
14819
14836
  let a = e[i];
@@ -14827,14 +14844,14 @@ function u_(e) {
14827
14844
  }
14828
14845
  return n && t.push(n), t;
14829
14846
  }
14830
- function d_(e, t) {
14847
+ function f_(e, t) {
14831
14848
  let n = (e || "").replace(/```[\s\S]*?```/g, "[代码]").replace(/`([^`]+)`/g, "$1").replace(/[#*_>\-]\s?/g, "").replace(/\[(代码)\]/g, "「代码」").replace(/\s+/g, " ").trim();
14832
14849
  return n.length > t ? n.slice(0, t) + "…" : n;
14833
14850
  }
14834
- var f_ = "【更早对话摘要";
14835
- function p_(e, t) {
14851
+ var p_ = "【更早对话摘要";
14852
+ function m_(e, t) {
14836
14853
  if (t <= 0) return { trimmed: !1 };
14837
- let n = u_(e);
14854
+ let n = d_(e);
14838
14855
  if (n.length <= t) return { trimmed: !1 };
14839
14856
  let r = n[n.length - t].startIdx, i = n.slice(0, n.length - t), a = n[0].startIdx, o = "";
14840
14857
  for (let t = 0; t < a; t++) {
@@ -14845,7 +14862,7 @@ function p_(e, t) {
14845
14862
  }
14846
14863
  }
14847
14864
  let s = i.map((e) => {
14848
- let t = d_(e.userMsg.content, 60) || "(空)", n = e.assistantMsgs[0] ? d_(e.assistantMsgs[0].content, 80) : "(无回复)";
14865
+ let t = f_(e.userMsg.content, 60) || "(空)", n = e.assistantMsgs[0] ? f_(e.assistantMsgs[0].content, 80) : "(无回复)";
14849
14866
  return `- 第${e.round}轮:${t} → ${n}`;
14850
14867
  }).join("\n"), c = o ? o.replace(/^【[^】]*】\n?/, "") : "";
14851
14868
  return {
@@ -14854,47 +14871,47 @@ function p_(e, t) {
14854
14871
  deleteCount: r,
14855
14872
  summary: {
14856
14873
  role: "system",
14857
- content: c ? `${f_}(${i.length} 轮,含累积)】\n${c}\n【续】\n${s}` : `${f_}(${i.length} 轮)】\n${s}`,
14874
+ content: c ? `${p_}(${i.length} 轮,含累积)】\n${c}\n【续】\n${s}` : `${p_}(${i.length} 轮)】\n${s}`,
14858
14875
  timestamp: i[0].userMsg.timestamp
14859
14876
  }
14860
14877
  };
14861
14878
  }
14862
14879
  //#endregion
14863
14880
  //#region src/core/composables/useContextManager.ts
14864
- var m_ = {
14881
+ var h_ = {
14865
14882
  windowRounds: 6,
14866
14883
  summaryThresholdRounds: 8,
14867
14884
  toolResultMaxChars: 800,
14868
14885
  enableRecall: !0,
14869
14886
  recallTopK: 3,
14870
14887
  enableLLMSummary: !1
14871
- }, h_ = /* @__PURE__ */ new Set(/* @__PURE__ */ "的.了.是.在.我.你.他.她.它.这.那.和.与.及.或.一个.什么.怎么.如何.为什么.可以.能.请.帮.一下.需要.想要.the.a.an.is.are.of.to.in.on".split("."));
14872
- function g_(e) {
14873
- return e.toLowerCase().split(/[^a-z0-9\u4e00-\u9fa5]+/i).map((e) => e.trim()).filter((e) => e.length >= 2 && !h_.has(e));
14874
- }
14888
+ }, g_ = /* @__PURE__ */ new Set(/* @__PURE__ */ "的.了.是.在.我.你.他.她.它.这.那.和.与.及.或.一个.什么.怎么.如何.为什么.可以.能.请.帮.一下.需要.想要.the.a.an.is.are.of.to.in.on".split("."));
14875
14889
  function __(e) {
14890
+ return e.toLowerCase().split(/[^a-z0-9\u4e00-\u9fa5]+/i).map((e) => e.trim()).filter((e) => e.length >= 2 && !g_.has(e));
14891
+ }
14892
+ function v_(e) {
14876
14893
  let t = typeof e.content == "string" ? e.content : "";
14877
14894
  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);
14878
14895
  return Gh(t);
14879
14896
  }
14880
- function v_(e) {
14881
- let t = __(e.userMsg);
14882
- for (let n of e.assistantMsgs) t += __(n);
14897
+ function y_(e) {
14898
+ let t = v_(e.userMsg);
14899
+ for (let n of e.assistantMsgs) t += v_(n);
14883
14900
  return t;
14884
14901
  }
14885
- function y_(e, t) {
14902
+ function b_(e, t) {
14886
14903
  return e.map((e) => {
14887
- let n = d_(e.userMsg.content, 60) || "(空)", r = e.assistantMsgs[0] ? d_(e.assistantMsgs[0].content, 80) : "(无回复)", i = e.assistantMsgs.flatMap((e) => (e.steps || []).map((e) => e.name)), a = i.length ? ` [工具: ${i.join(", ")}]` : "", o = "";
14904
+ let n = f_(e.userMsg.content, 60) || "(空)", r = e.assistantMsgs[0] ? f_(e.assistantMsgs[0].content, 80) : "(无回复)", i = e.assistantMsgs.flatMap((e) => (e.steps || []).map((e) => e.name)), a = i.length ? ` [工具: ${i.join(", ")}]` : "", o = "";
14888
14905
  if (t && t.size) {
14889
14906
  let n = [];
14890
- for (let r of e.assistantMsgs) for (let e of r.steps || []) e.name && t.has(e.name) && e.result && n.push(`${e.name}: ${d_(e.result, 120)}`);
14907
+ for (let r of e.assistantMsgs) for (let e of r.steps || []) e.name && t.has(e.name) && e.result && n.push(`${e.name}: ${f_(e.result, 120)}`);
14891
14908
  n.length && (o = `\n 字段提示: ${n.join(" | ")}`);
14892
14909
  }
14893
14910
  return `- 第${e.round}轮:${n} → ${r}${a}${o}`;
14894
14911
  }).join("\n");
14895
14912
  }
14896
- function b_(e, t, n) {
14897
- let r = g_(t);
14913
+ function x_(e, t, n) {
14914
+ let r = __(t);
14898
14915
  return r.length === 0 ? [] : e.map((e) => {
14899
14916
  let t = (e.userMsg.content + " " + e.assistantMsgs.map((e) => e.content).join(" ")).toLowerCase(), n = 0;
14900
14917
  for (let e of r) t.includes(e) && n++;
@@ -14904,13 +14921,13 @@ function b_(e, t, n) {
14904
14921
  };
14905
14922
  }).filter((e) => e.score > 0).sort((e, t) => t.score - e.score).slice(0, n).map((e) => e.r);
14906
14923
  }
14907
- function x_(e = {}) {
14924
+ function S_(e = {}) {
14908
14925
  let t = {
14909
- ...m_,
14926
+ ...h_,
14910
14927
  ...e
14911
14928
  };
14912
14929
  async function n(e) {
14913
- let n = u_(e), r = e.length, i = (t) => ({
14930
+ let n = d_(e), r = e.length, i = (t) => ({
14914
14931
  messages: e,
14915
14932
  stats: {
14916
14933
  triggered: !1,
@@ -14923,9 +14940,9 @@ function x_(e = {}) {
14923
14940
  }
14924
14941
  }), a, o, s;
14925
14942
  if (t.contextWindow && t.contextWindow > 0) {
14926
- if (n.reduce((e, t) => e + v_(t), 0) <= t.contextWindow * (t.summaryThresholdRatio ?? .5)) return i("none");
14943
+ if (n.reduce((e, t) => e + y_(t), 0) <= t.contextWindow * (t.summaryThresholdRatio ?? .5)) return i("none");
14927
14944
  let e = t.contextWindow * (t.windowRatio ?? .4), r = 0, c = 0;
14928
- for (let t = n.length - 1; t >= 0; t--) if (r += v_(n[t]), r >= e) {
14945
+ for (let t = n.length - 1; t >= 0; t--) if (r += y_(n[t]), r >= e) {
14929
14946
  c = t + 1;
14930
14947
  break;
14931
14948
  }
@@ -14938,12 +14955,12 @@ function x_(e = {}) {
14938
14955
  }
14939
14956
  let c = [...e].reverse().find((e) => e.role === "user")?.content || "", l = t.preserveLastToolResults?.length ? new Set(t.preserveLastToolResults) : void 0, u, d;
14940
14957
  if (t.enableLLMSummary && t.llmInvoke) try {
14941
- u = await t.llmInvoke(y_(o, l)), d = s + "llm_summary";
14958
+ u = await t.llmInvoke(b_(o, l)), d = s + "llm_summary";
14942
14959
  } catch {
14943
- u = y_(o, l), d = s + "index_summary(llm_fallback)";
14960
+ u = b_(o, l), d = s + "index_summary(llm_fallback)";
14944
14961
  }
14945
- else u = y_(o, l), d = s + "index_summary";
14946
- let f = t.enableRecall ? b_(o, c, t.recallTopK) : [], p = f.length ? f.map((e) => `- 第${e.round}轮:${d_(e.userMsg.content, 60)} → ${e.assistantMsgs[0] ? d_(e.assistantMsgs[0].content, 80) : ""}`).join("\n") : "", m = [`【对话历史摘要】以下是之前 ${o.length} 轮对话的要点(最新 ${a.length} 轮已完整保留):`, u];
14962
+ else u = b_(o, l), d = s + "index_summary";
14963
+ let f = t.enableRecall ? x_(o, c, t.recallTopK) : [], p = f.length ? f.map((e) => `- 第${e.round}轮:${f_(e.userMsg.content, 60)} → ${e.assistantMsgs[0] ? f_(e.assistantMsgs[0].content, 80) : ""}`).join("\n") : "", m = [`【对话历史摘要】以下是之前 ${o.length} 轮对话的要点(最新 ${a.length} 轮已完整保留):`, u];
14947
14964
  if (p && m.push("\n【与当前问题可能相关的早期对话】", p), t.getRegisteredProps) try {
14948
14965
  let e = t.getRegisteredProps();
14949
14966
  if (e.length) {
@@ -14974,10 +14991,10 @@ function x_(e = {}) {
14974
14991
  return {
14975
14992
  compress: n,
14976
14993
  config: t,
14977
- trimToolResults: S_
14994
+ trimToolResults: C_
14978
14995
  };
14979
14996
  }
14980
- function S_(e, t) {
14997
+ function C_(e, t) {
14981
14998
  let n = [];
14982
14999
  if (e.forEach((e, t) => {
14983
15000
  e instanceof o && n.push(t);
@@ -14996,8 +15013,8 @@ function S_(e, t) {
14996
15013
  }
14997
15014
  //#endregion
14998
15015
  //#region src/core/harness/summarization.ts
14999
- function C_(e = {}) {
15000
- let t = x_(e);
15016
+ function w_(e = {}) {
15017
+ let t = S_(e);
15001
15018
  return {
15002
15019
  name: "summarization",
15003
15020
  compressInput: async (e) => {
@@ -15011,7 +15028,7 @@ function C_(e = {}) {
15011
15028
  }
15012
15029
  //#endregion
15013
15030
  //#region src/core/presets.ts
15014
- var w_ = {
15031
+ var T_ = {
15015
15032
  pageBuilder: { systemPrompt: "你是页面构建助手。流程:get_window_prop 读取当前页面结构 → set_window_prop / edit_window_prop 修改属性 → 页面实时更新。多步任务先用 write_todos 拆解,逐步推进。" },
15016
15033
  researcher: {
15017
15034
  systemPrompt: "你是调研助手。多路调研用 spawn_agents 并行委派子 agent(各负责一个方向);单份资料用 fetch_document 抓取;最后结构化汇总,给出结论与依据。",
@@ -15025,14 +15042,14 @@ var w_ = {
15025
15042
  memory: !1,
15026
15043
  subagent: !1
15027
15044
  } }
15028
- }, T_ = { reliableWriteRules: [
15045
+ }, E_ = { reliableWriteRules: [
15029
15046
  "【可靠写入规则】",
15030
15047
  "1. 改任何属性前,先用 get_window_prop 读其当前真实值,基于真实值改,不要凭记忆;",
15031
15048
  "2. 若不确定可操作哪些属性,先 list_window_props 查看当前注册项(动态组件场景下注册表会增删,以工具返回为准,勿凭旧记忆);",
15032
15049
  "3. 不确定某属性字段结构时,先 describe_window_prop 看其说明,字段以 describe 返回为准;",
15033
15050
  "4. 写入若被 schema 校验拒绝(返回结构化错误含字段名与期望类型),按错误修正后重试,不要放弃;",
15034
15051
  "5. 优先用 edit_window_prop 增量 patch(只发改动),避免 set 整体重传大 JSON 被截断。"
15035
- ].join("\n") }, E_ = {
15052
+ ].join("\n") }, D_ = {
15036
15053
  auto: {
15037
15054
  summaryThresholdRatio: .5,
15038
15055
  windowRatio: .4,
@@ -15054,8 +15071,8 @@ var w_ = {
15054
15071
  enableLLMSummary: !0
15055
15072
  }
15056
15073
  };
15057
- function D_(e, t) {
15058
- let n = E_[e.contextPreset ?? "auto"] ?? {}, r = e.contextOptions === !1 ? {} : e.contextOptions ?? {};
15074
+ function O_(e, t) {
15075
+ let n = D_[e.contextPreset ?? "auto"] ?? {}, r = e.contextOptions === !1 ? {} : e.contextOptions ?? {};
15059
15076
  return {
15060
15077
  ...n,
15061
15078
  ...r,
@@ -15072,7 +15089,7 @@ function $(e) {
15072
15089
  };
15073
15090
  return e.path !== void 0 && (t.path = e.path), e.hint && (t.hint = e.hint), e.details !== void 0 && (t.details = e.details), `ERROR: ${JSON.stringify(t)}`;
15074
15091
  }
15075
- function O_(e) {
15092
+ function k_(e) {
15076
15093
  return e.slice(0, 10).map((e) => {
15077
15094
  let t = e, n = {
15078
15095
  path: (Array.isArray(t.path) ? t.path.join(".") : String(t.path ?? "")) || "(root)",
@@ -15081,16 +15098,16 @@ function O_(e) {
15081
15098
  return t.expected !== void 0 && (n.expected = t.expected), t.received !== void 0 && (n.received = t.received), t.code !== void 0 && (n.code = t.code), n;
15082
15099
  });
15083
15100
  }
15084
- function k_(e, t) {
15101
+ function A_(e, t) {
15085
15102
  return $({
15086
15103
  code: "SCHEMA_INVALID",
15087
15104
  path: e,
15088
15105
  message: `值不符合 "${e}" 的 schema(${t.length} 处问题)`,
15089
15106
  hint: `按 describe_window_prop("${e}") 查看格式,修正后重试;改大对象优先用 edit_window_prop 增量 patch(只发改动部分)`,
15090
- details: O_(t)
15107
+ details: k_(t)
15091
15108
  });
15092
15109
  }
15093
- function A_(e, t, n) {
15110
+ function j_(e, t, n) {
15094
15111
  let r = n?.message || String(n);
15095
15112
  return $({
15096
15113
  code: "JSON_PARSE",
@@ -15099,18 +15116,18 @@ function A_(e, t, n) {
15099
15116
  hint: `检查引号/逗号/括号是否闭合;字符串值需双引号包裹(如 '"dark"' 表示字符串 dark,数字直接写如 5);预览前 80 字符:${t.slice(0, 80)}`
15100
15117
  });
15101
15118
  }
15102
- var j_ = .9;
15103
- function M_(e, t = {}) {
15119
+ var M_ = .9;
15120
+ function N_(e, t = {}) {
15104
15121
  let n = Object.create(null);
15105
- if (e) for (let [t, r] of Object.entries(e)) n[F_(t)] = {
15122
+ if (e) for (let [t, r] of Object.entries(e)) n[I_(t)] = {
15106
15123
  content: r,
15107
- updatedAt: L_()
15124
+ updatedAt: R_()
15108
15125
  };
15109
15126
  let { persist: r } = t, i = t.maxBytes ?? 4194304;
15110
15127
  function a() {
15111
- if (P_(n) <= i) return;
15112
- let e = i * j_, t = Object.entries(n).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
15113
- for (let [r] of t) if (delete n[r], P_(n) <= e) break;
15128
+ if (F_(n) <= i) return;
15129
+ let e = i * M_, t = Object.entries(n).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
15130
+ for (let [r] of t) if (delete n[r], F_(n) <= e) break;
15114
15131
  }
15115
15132
  let o = null;
15116
15133
  function s() {
@@ -15135,7 +15152,7 @@ function M_(e, t = {}) {
15135
15152
  }
15136
15153
  }) };
15137
15154
  return r && (l.hydrate = (e) => {
15138
- for (let [t, r] of Object.entries(e)) n[F_(t)] = r;
15155
+ for (let [t, r] of Object.entries(e)) n[I_(t)] = r;
15139
15156
  a();
15140
15157
  }, l.flush = () => {
15141
15158
  o &&= (clearTimeout(o), null), s();
@@ -15144,17 +15161,17 @@ function M_(e, t = {}) {
15144
15161
  c();
15145
15162
  }), l;
15146
15163
  }
15147
- var N_ = null;
15148
- function P_(e) {
15149
- N_ ||= new TextEncoder();
15164
+ var P_ = null;
15165
+ function F_(e) {
15166
+ P_ ||= new TextEncoder();
15150
15167
  let t = 0;
15151
- for (let n of Object.values(e)) t += N_.encode(n.content).length;
15168
+ for (let n of Object.values(e)) t += P_.encode(n.content).length;
15152
15169
  return t;
15153
15170
  }
15154
- function F_(e) {
15171
+ function I_(e) {
15155
15172
  return e.replace(/^\/+/, "").replace(/\/+/g, "/");
15156
15173
  }
15157
- function I_(e) {
15174
+ function L_(e) {
15158
15175
  let t = "";
15159
15176
  for (let n = 0; n < e.length; n++) {
15160
15177
  let r = e[n];
@@ -15162,13 +15179,13 @@ function I_(e) {
15162
15179
  }
15163
15180
  return RegExp("^" + t + "$");
15164
15181
  }
15165
- function L_() {
15182
+ function R_() {
15166
15183
  return Date.now();
15167
15184
  }
15168
- function R_(e) {
15185
+ function z_(e) {
15169
15186
  return [
15170
15187
  n(async ({ path: t, offset: n, limit: r }) => {
15171
- let i = e.files[F_(t)];
15188
+ let i = e.files[I_(t)];
15172
15189
  if (!i) return $({
15173
15190
  code: "NOT_FOUND",
15174
15191
  path: t,
@@ -15186,9 +15203,9 @@ function R_(e) {
15186
15203
  limit: t.number().int().min(1).default(2e3).describe("读取行数")
15187
15204
  })
15188
15205
  }),
15189
- n(async ({ path: t, content: n }) => (e.files[F_(t)] = {
15206
+ n(async ({ path: t, content: n }) => (e.files[I_(t)] = {
15190
15207
  content: n,
15191
- updatedAt: L_()
15208
+ updatedAt: R_()
15192
15209
  }, `已写入 ${t}(${n.length} 字符)`), {
15193
15210
  name: "vfs_write",
15194
15211
  description: "写入/覆盖虚拟工作区文件,作为中间工作记忆。",
@@ -15198,7 +15215,7 @@ function R_(e) {
15198
15215
  })
15199
15216
  }),
15200
15217
  n(async ({ path: t, oldString: n, newString: r }) => {
15201
- let i = F_(t), a = e.files[i];
15218
+ let i = I_(t), a = e.files[i];
15202
15219
  if (!a) return $({
15203
15220
  code: "NOT_FOUND",
15204
15221
  path: t,
@@ -15228,7 +15245,7 @@ function R_(e) {
15228
15245
  }
15229
15246
  return e.files[i] = {
15230
15247
  content: a.content.replace(n, r),
15231
- updatedAt: L_()
15248
+ updatedAt: R_()
15232
15249
  }, `已替换 ${t} 中 1 处。`;
15233
15250
  }, {
15234
15251
  name: "vfs_edit",
@@ -15250,7 +15267,7 @@ function R_(e) {
15250
15267
  n(async ({ pattern: t }) => {
15251
15268
  let n;
15252
15269
  try {
15253
- n = I_(t);
15270
+ n = L_(t);
15254
15271
  } catch (e) {
15255
15272
  return $({
15256
15273
  code: "GLOB_INVALID",
@@ -15279,7 +15296,7 @@ function R_(e) {
15279
15296
  details: { pattern: t }
15280
15297
  });
15281
15298
  }
15282
- let i = n ? [F_(n)] : Object.keys(e.files), a = [];
15299
+ let i = n ? [I_(n)] : Object.keys(e.files), a = [];
15283
15300
  for (let t of i) {
15284
15301
  let n = e.files[t];
15285
15302
  n && n.content.split("\n").forEach((e, n) => {
@@ -15297,17 +15314,17 @@ function R_(e) {
15297
15314
  })
15298
15315
  ];
15299
15316
  }
15300
- function z_(e) {
15317
+ function B_(e) {
15301
15318
  return {
15302
15319
  name: "vfs",
15303
- tools: R_(e),
15320
+ tools: z_(e),
15304
15321
  beforeAgent: () => ({ files: e.files })
15305
15322
  };
15306
15323
  }
15307
15324
  //#endregion
15308
15325
  //#region src/core/tools/windowQuery.ts
15309
- var B_ = /[\w$-]/;
15310
- function V_(e) {
15326
+ var V_ = /[\w$-]/;
15327
+ function H_(e) {
15311
15328
  let t = [], n = e.trim(), r = +(n[0] === "$");
15312
15329
  for (; r < n.length;) {
15313
15330
  let e = n[r];
@@ -15318,7 +15335,7 @@ function V_(e) {
15318
15335
  continue;
15319
15336
  }
15320
15337
  let e = "";
15321
- for (; r < n.length && B_.test(n[r]);) e += n[r++];
15338
+ for (; r < n.length && V_.test(n[r]);) e += n[r++];
15322
15339
  if (!e) throw Error("JSONPath: .. 后缺属性名");
15323
15340
  t.push({
15324
15341
  type: "descendKey",
@@ -15331,7 +15348,7 @@ function V_(e) {
15331
15348
  continue;
15332
15349
  }
15333
15350
  let e = "";
15334
- for (; r < n.length && B_.test(n[r]);) e += n[r++];
15351
+ for (; r < n.length && V_.test(n[r]);) e += n[r++];
15335
15352
  if (!e) throw Error("JSONPath: . 后缺属性名");
15336
15353
  t.push({
15337
15354
  type: "key",
@@ -15387,7 +15404,7 @@ function V_(e) {
15387
15404
  }
15388
15405
  return t;
15389
15406
  }
15390
- function H_(e) {
15407
+ function U_(e) {
15391
15408
  let t = [], n = 0, r = e.trim();
15392
15409
  for (; n < r.length;) {
15393
15410
  let e = r[n];
@@ -15432,7 +15449,7 @@ function H_(e) {
15432
15449
  }
15433
15450
  return t;
15434
15451
  }
15435
- var U_ = class {
15452
+ var W_ = class {
15436
15453
  toks;
15437
15454
  item;
15438
15455
  pos = 0;
@@ -15468,12 +15485,12 @@ var U_ = class {
15468
15485
  return this.next(), e;
15469
15486
  }
15470
15487
  let e = this.operand(), t = this.peek();
15471
- return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(), K_(t, e, this.operand())) : W_(e);
15488
+ return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(), q_(t, e, this.operand())) : G_(e);
15472
15489
  }
15473
15490
  operand() {
15474
15491
  let e = this.next();
15475
15492
  if (e === void 0) throw Error("过滤表达式:缺操作数");
15476
- if (e.startsWith("@")) return G_(e, this.item);
15493
+ if (e.startsWith("@")) return K_(e, this.item);
15477
15494
  if (e[0] === "'" || e[0] === "\"") return e.slice(1, -1);
15478
15495
  if (e === "true") return !0;
15479
15496
  if (e === "false") return !1;
@@ -15483,10 +15500,10 @@ var U_ = class {
15483
15500
  throw Error(`过滤表达式:未知操作数 '${e}'`);
15484
15501
  }
15485
15502
  };
15486
- function W_(e) {
15503
+ function G_(e) {
15487
15504
  return !!e && e !== 0 && e !== "" && e !== null;
15488
15505
  }
15489
- function G_(e, t) {
15506
+ function K_(e, t) {
15490
15507
  let n = e.split(".").filter((e) => e && e !== "@"), r = t;
15491
15508
  for (let e of n) {
15492
15509
  if (typeof r != "object" || !r) return;
@@ -15494,7 +15511,7 @@ function G_(e, t) {
15494
15511
  }
15495
15512
  return r;
15496
15513
  }
15497
- function K_(e, t, n) {
15514
+ function q_(e, t, n) {
15498
15515
  switch (e) {
15499
15516
  case "==": return t === n;
15500
15517
  case "!=": return t !== n;
@@ -15505,47 +15522,47 @@ function K_(e, t, n) {
15505
15522
  default: return !1;
15506
15523
  }
15507
15524
  }
15508
- function q_(e, t) {
15509
- return new U_(H_(e), t).parse();
15510
- }
15511
15525
  function J_(e, t) {
15512
- return e ? `${e}.${t}` : String(t);
15526
+ return new W_(U_(e), t).parse();
15513
15527
  }
15514
15528
  function Y_(e, t) {
15529
+ return e ? `${e}.${t}` : String(t);
15530
+ }
15531
+ function X_(e, t) {
15515
15532
  let n = [{
15516
15533
  path: "",
15517
15534
  value: e
15518
15535
  }];
15519
- for (let e of V_(t)) {
15536
+ for (let e of H_(t)) {
15520
15537
  let t = [];
15521
15538
  if (e.type === "key") for (let r of n) r.value != null && typeof r.value == "object" && e.key in r.value && t.push({
15522
- path: J_(r.path, e.key),
15539
+ path: Y_(r.path, e.key),
15523
15540
  value: r.value[e.key]
15524
15541
  });
15525
15542
  else if (e.type === "index") {
15526
15543
  for (let r of n) if (Array.isArray(r.value)) {
15527
15544
  let n = r.value[e.index];
15528
15545
  e.index >= 0 && e.index < r.value.length && t.push({
15529
- path: J_(r.path, e.index),
15546
+ path: Y_(r.path, e.index),
15530
15547
  value: n,
15531
15548
  index: e.index
15532
15549
  });
15533
15550
  }
15534
15551
  } else if (e.type === "wildcard") {
15535
15552
  for (let e of n) if (Array.isArray(e.value)) e.value.forEach((n, r) => t.push({
15536
- path: J_(e.path, r),
15553
+ path: Y_(e.path, r),
15537
15554
  value: n,
15538
15555
  index: r
15539
15556
  }));
15540
15557
  else if (e.value != null && typeof e.value == "object") for (let n of Object.keys(e.value)) t.push({
15541
- path: J_(e.path, n),
15558
+ path: Y_(e.path, n),
15542
15559
  value: e.value[n]
15543
15560
  });
15544
15561
  } else if (e.type === "descendKey") {
15545
15562
  let r = e.key, i = (e) => {
15546
15563
  if (!(e.value == null || typeof e.value != "object")) for (let n of Object.keys(e.value)) {
15547
15564
  let a = {
15548
- path: J_(e.path, n),
15565
+ path: Y_(e.path, n),
15549
15566
  value: e.value[n]
15550
15567
  };
15551
15568
  n === r && t.push(a), i(a);
@@ -15556,7 +15573,7 @@ function Y_(e, t) {
15556
15573
  let e = (n) => {
15557
15574
  if (!(n.value == null || typeof n.value != "object")) for (let r of Object.keys(n.value)) {
15558
15575
  let i = {
15559
- path: J_(n.path, r),
15576
+ path: Y_(n.path, r),
15560
15577
  value: n.value[r]
15561
15578
  };
15562
15579
  t.push(i), e(i);
@@ -15565,16 +15582,16 @@ function Y_(e, t) {
15565
15582
  for (let t of n) e(t);
15566
15583
  } else if (e.type === "filter") {
15567
15584
  for (let r of n) if (Array.isArray(r.value)) r.value.forEach((n, i) => {
15568
- q_(e.filter, n) && t.push({
15569
- path: J_(r.path, i),
15585
+ J_(e.filter, n) && t.push({
15586
+ path: Y_(r.path, i),
15570
15587
  value: n,
15571
15588
  index: i
15572
15589
  });
15573
15590
  });
15574
15591
  else if (r.value != null && typeof r.value == "object") for (let n of Object.keys(r.value)) {
15575
15592
  let i = r.value[n];
15576
- q_(e.filter, i) && t.push({
15577
- path: J_(r.path, n),
15593
+ J_(e.filter, i) && t.push({
15594
+ path: Y_(r.path, n),
15578
15595
  value: i
15579
15596
  });
15580
15597
  }
@@ -15583,7 +15600,7 @@ function Y_(e, t) {
15583
15600
  }
15584
15601
  return n;
15585
15602
  }
15586
- function X_(e, t) {
15603
+ function Z_(e, t) {
15587
15604
  let n = e.length, r = t.length;
15588
15605
  if (!n) return r;
15589
15606
  if (!r) return n;
@@ -15599,7 +15616,7 @@ function X_(e, t) {
15599
15616
  }
15600
15617
  return i[r];
15601
15618
  }
15602
- function Z_(e, t, n = {}) {
15619
+ function Q_(e, t, n = {}) {
15603
15620
  let r = n.mode || "substring", i = n.limit ?? 50, a = n.matchKey !== !1, o = [], s = null;
15604
15621
  if (r === "regex") try {
15605
15622
  s = new RegExp(t, "i");
@@ -15609,11 +15626,11 @@ function Z_(e, t, n = {}) {
15609
15626
  let c = (e, l, u) => {
15610
15627
  if (o.length >= i || e == null) return;
15611
15628
  if (typeof e == "object") {
15612
- if (Array.isArray(e)) e.forEach((e, t) => c(e, J_(l, t), String(t)));
15613
- else for (let t of Object.keys(e)) c(e[t], J_(l, t), t);
15629
+ if (Array.isArray(e)) e.forEach((e, t) => c(e, Y_(l, t), String(t)));
15630
+ else for (let t of Object.keys(e)) c(e[t], Y_(l, t), t);
15614
15631
  return;
15615
15632
  }
15616
- let d = String(e), f = Q_(d, t, r, n.fuzzyThreshold ?? 2, s);
15633
+ let d = String(e), f = $_(d, t, r, n.fuzzyThreshold ?? 2, s);
15617
15634
  if (f) {
15618
15635
  o.push({
15619
15636
  path: l,
@@ -15624,7 +15641,7 @@ function Z_(e, t, n = {}) {
15624
15641
  return;
15625
15642
  }
15626
15643
  if (a && u) {
15627
- let e = Q_(u, t, r, n.fuzzyThreshold ?? 2, s);
15644
+ let e = $_(u, t, r, n.fuzzyThreshold ?? 2, s);
15628
15645
  e && o.push({
15629
15646
  path: l,
15630
15647
  key: u,
@@ -15635,18 +15652,18 @@ function Z_(e, t, n = {}) {
15635
15652
  };
15636
15653
  return c(e, ""), o;
15637
15654
  }
15638
- function Q_(e, t, n, r, i) {
15655
+ function $_(e, t, n, r, i) {
15639
15656
  let a = e.toLowerCase(), o = t.toLowerCase();
15640
15657
  if (n === "substring") return a.includes(o) ? 1 : null;
15641
15658
  if (n === "regex") return i && i.test(e) ? 1 : null;
15642
15659
  if (n === "fuzzy") {
15643
15660
  if (a.includes(o)) return 2;
15644
- let e = X_(a, o);
15661
+ let e = Z_(a, o);
15645
15662
  return e <= r ? r - e + 1 : null;
15646
15663
  }
15647
15664
  return null;
15648
15665
  }
15649
- var $_ = [
15666
+ var ev = [
15650
15667
  "self.fetch = () => { throw new Error('fetch 已被沙箱禁用') }",
15651
15668
  "self.XMLHttpRequest = function(){ throw new Error('XMLHttpRequest 已被沙箱禁用') }",
15652
15669
  "self.importScripts = () => { throw new Error('importScripts 已被沙箱禁用') }",
@@ -15659,7 +15676,7 @@ var $_ = [
15659
15676
  "try { self.BroadcastChannel = undefined } catch {}",
15660
15677
  "if (self.navigator && self.navigator.sendBeacon) self.navigator.sendBeacon = () => { throw new Error('sendBeacon 已被沙箱禁用') }"
15661
15678
  ].join("\n");
15662
- function ev(e, t, n = 3e3) {
15679
+ function tv(e, t, n = 3e3) {
15663
15680
  return new Promise((r) => {
15664
15681
  let i = Date.now(), a = !1, o = (e) => {
15665
15682
  if (!a) {
@@ -15672,7 +15689,7 @@ function ev(e, t, n = 3e3) {
15672
15689
  elapsedMs: Date.now() - i
15673
15690
  });
15674
15691
  }
15675
- }, s = $_ + "\nself.onmessage = async (e) => {\n try {\n const fn = new Function(\"data\", e.data.script);\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;
15692
+ }, s = ev + "\nself.onmessage = async (e) => {\n try {\n const fn = new Function(\"data\", e.data.script);\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;
15676
15693
  try {
15677
15694
  let e = new Blob([s], { type: "application/javascript" });
15678
15695
  c = URL.createObjectURL(e), l = new Worker(c);
@@ -15707,19 +15724,19 @@ function ev(e, t, n = 3e3) {
15707
15724
  }
15708
15725
  //#endregion
15709
15726
  //#region src/core/tools/windowOps.ts
15710
- var tv = /* @__PURE__ */ new Set([
15727
+ var nv = /* @__PURE__ */ new Set([
15711
15728
  "__proto__",
15712
15729
  "constructor",
15713
15730
  "prototype"
15714
15731
  ]);
15715
- function nv(e) {
15716
- return e.split(".").some((e) => tv.has(e));
15717
- }
15718
- function rv(e, t) {
15719
- if (!(!t || typeof t != "object" || Array.isArray(t))) for (let n of Object.keys(t)) tv.has(n) || (e[n] = t[n]);
15732
+ function rv(e) {
15733
+ return e.split(".").some((e) => nv.has(e));
15720
15734
  }
15721
15735
  function iv(e, t) {
15722
- if (nv(t)) return;
15736
+ if (!(!t || typeof t != "object" || Array.isArray(t))) for (let n of Object.keys(t)) nv.has(n) || (e[n] = t[n]);
15737
+ }
15738
+ function av(e, t) {
15739
+ if (rv(t)) return;
15723
15740
  let n = t.split("."), r = e;
15724
15741
  for (let e of n) {
15725
15742
  if (r == null) return;
@@ -15727,8 +15744,8 @@ function iv(e, t) {
15727
15744
  }
15728
15745
  return r;
15729
15746
  }
15730
- function av(e, t, n) {
15731
- if (nv(t)) return;
15747
+ function ov(e, t, n) {
15748
+ if (rv(t)) return;
15732
15749
  let r = t.split("."), i = e;
15733
15750
  for (let e = 0; e < r.length - 1; e++) {
15734
15751
  let t = r[e];
@@ -15736,8 +15753,8 @@ function av(e, t, n) {
15736
15753
  }
15737
15754
  i[r[r.length - 1]] = n;
15738
15755
  }
15739
- function ov(e, t) {
15740
- if (nv(t)) return !1;
15756
+ function sv(e, t) {
15757
+ if (rv(t)) return !1;
15741
15758
  let n = t.split("."), r = e;
15742
15759
  for (let e = 0; e < n.length - 1; e++) {
15743
15760
  if (r == null) return !1;
@@ -15746,10 +15763,10 @@ function ov(e, t) {
15746
15763
  let i = n[n.length - 1];
15747
15764
  return r == null || !(i in r) ? !1 : (delete r[i], !0);
15748
15765
  }
15749
- function sv(e) {
15766
+ function cv(e) {
15750
15767
  return e === void 0 ? void 0 : JSON.parse(JSON.stringify(e));
15751
15768
  }
15752
- function cv(e, t = Infinity) {
15769
+ function lv(e, t = Infinity) {
15753
15770
  let n = /* @__PURE__ */ new WeakSet(), r;
15754
15771
  try {
15755
15772
  r = JSON.stringify(e, (e, t) => {
@@ -15768,30 +15785,35 @@ function cv(e, t = Infinity) {
15768
15785
  }
15769
15786
  return r.length > t && (r = r.slice(0, t) + `\n…[已截断,原长度 ${r.length}]`), r;
15770
15787
  }
15771
- function lv(e, t, n, r) {
15772
- if (t === "set") return n ? (av(e, n, r), null) : "set 操作需要 jsonPath(整体替换请用 set_window_prop)";
15773
- if (t === "remove") return n ? (ov(e, n), null) : "remove 操作需要 jsonPath";
15788
+ function uv(e) {
15789
+ let t = lv(e), n = 5381;
15790
+ for (let e = 0; e < t.length; e++) n = (n << 5) + n + t.charCodeAt(e) >>> 0;
15791
+ return n.toString(36);
15792
+ }
15793
+ function dv(e, t, n, r) {
15794
+ if (t === "set") return n ? (ov(e, n, r), null) : "set 操作需要 jsonPath(整体替换请用 set_window_prop)";
15795
+ if (t === "remove") return n ? (sv(e, n), null) : "remove 操作需要 jsonPath";
15774
15796
  if (t === "merge") {
15775
- let t = n ? iv(e, n) : e;
15776
- return typeof t != "object" || !t || Array.isArray(t) ? `merge 目标${n ? `(${n})` : "(根)"}不是对象` : (rv(t, r), null);
15797
+ let t = n ? av(e, n) : e;
15798
+ return typeof t != "object" || !t || Array.isArray(t) ? `merge 目标${n ? `(${n})` : "(根)"}不是对象` : (iv(t, r), null);
15777
15799
  }
15778
- let i = n ? iv(e, n) : e;
15800
+ let i = n ? av(e, n) : e;
15779
15801
  return Array.isArray(i) ? (Array.isArray(r) ? i.push(...r) : i.push(r), null) : `append 目标${n ? `(${n})` : "(根)"}不是数组`;
15780
15802
  }
15781
- function uv(e, t, n, r) {
15782
- if (t === "set") av(window, `${e}.${n}`, r);
15783
- else if (t === "remove") ov(window, `${e}.${n}`);
15784
- else if (t === "merge") rv(n ? iv(window, `${e}.${n}`) : iv(window, e), r);
15803
+ function fv(e, t, n, r) {
15804
+ if (t === "set") ov(window, `${e}.${n}`, r);
15805
+ else if (t === "remove") sv(window, `${e}.${n}`);
15806
+ else if (t === "merge") iv(n ? av(window, `${e}.${n}`) : av(window, e), r);
15785
15807
  else {
15786
- let t = n ? iv(window, `${e}.${n}`) : iv(window, e);
15808
+ let t = n ? av(window, `${e}.${n}`) : av(window, e);
15787
15809
  Array.isArray(r) ? t.push(...r) : t.push(r);
15788
15810
  }
15789
15811
  }
15790
- function dv(e, t) {
15791
- let n = iv(window, e);
15792
- typeof n == "object" && n ? fv(n, t) : av(window, e, t);
15812
+ function pv(e, t) {
15813
+ let n = av(window, e);
15814
+ typeof n == "object" && n ? mv(n, t) : ov(window, e, t);
15793
15815
  }
15794
- function fv(e, t) {
15816
+ function mv(e, t) {
15795
15817
  if (Array.isArray(e)) {
15796
15818
  e.length = 0, Array.isArray(t) && e.push(...t);
15797
15819
  return;
@@ -15800,7 +15822,7 @@ function fv(e, t) {
15800
15822
  for (let t of Object.keys(e)) t in n || delete e[t];
15801
15823
  for (let t of Object.keys(n)) e[t] = n[t];
15802
15824
  }
15803
- function pv(e, r = {}) {
15825
+ function hv(e, r = {}) {
15804
15826
  let i = /* @__PURE__ */ new Map();
15805
15827
  for (let t of e) i.set(t.path, t);
15806
15828
  let a = /* @__PURE__ */ new Map(), o = r.maxSnapshots ?? 20, s = {
@@ -15827,7 +15849,7 @@ function pv(e, r = {}) {
15827
15849
  return r.allowRawRead ? !0 : [...i.keys()].some((t) => e === t || e.startsWith(t + ".") || u && t.startsWith(e + "."));
15828
15850
  }
15829
15851
  function f(e, t, n) {
15830
- let r = sv(iv(window, e)), i = a.get(e) || [], s = i.length ? i[i.length - 1].id + 1 : 1;
15852
+ let r = cv(av(window, e)), i = a.get(e) || [], s = i.length ? i[i.length - 1].id + 1 : 1;
15831
15853
  for (i.push({
15832
15854
  id: s,
15833
15855
  ts: Date.now(),
@@ -15868,59 +15890,85 @@ function pv(e, r = {}) {
15868
15890
  message: `属性 "${e}" 不可读取(未注册,且非已注册路径的后代)`,
15869
15891
  hint: "用 list_window_props 查看可操作字段;字段白名单读模式下未注册的祖先(整体大 JSON)不暴露,需读其声明子路径"
15870
15892
  });
15871
- let t = iv(window, e);
15872
- return t === void 0 ? `${e} = (undefined)` : `${e} = ${cv(t)}`;
15893
+ let t = av(window, e);
15894
+ return t === void 0 ? `${e} = (undefined)` : `${e} = ${lv(t)} (hash=${uv(t)})`;
15873
15895
  }, {
15874
15896
  name: "get_window_prop",
15875
- description: "读取一个已注册 window 属性的当前值(安全序列化:函数/DOM/循环引用做摘要;大结果由系统自动外存,提示用 vfs_read 回读)。字段白名单读模式(默认)下仅可读注册 path 自身/后代;未注册祖先(整体大 JSON)不可读,避免大 JSON 拉进上下文。",
15897
+ description: "读取一个已注册 window 属性的当前值(安全序列化:函数/DOM/循环引用做摘要;大结果由系统自动外存,提示用 vfs_read 回读)。返回含 hash(乐观锁):改属性前先 get 拿 hash,写入时(set/edit/delete)传 expectedHash 回传,系统对比当前 hash 防\"基于过期值覆盖\"(外部代码/其他 agent/用户手动改过会 CONFLICT,需重新 get 再改)。字段白名单读模式(默认)下仅可读注册 path 自身/后代;未注册祖先(整体大 JSON)不可读,避免大 JSON 拉进上下文。",
15876
15898
  schema: t.object({ path: t.string().describe("已注册的属性路径或其后代") })
15877
- }), g = n(async ({ path: e, value: t }) => {
15878
- let n = i.get(e);
15879
- if (!n) return $({
15899
+ }), g = n(async ({ path: e, value: t, expectedHash: n }) => {
15900
+ let r = i.get(e);
15901
+ if (!r) return $({
15880
15902
  code: "NOT_REGISTERED",
15881
15903
  path: e,
15882
15904
  message: `属性 "${e}" 未在注册表中声明,不可写`,
15883
15905
  hint: "用 list_window_props 查看可用属性;集成方需先在 windowProps 声明该 path"
15884
15906
  });
15885
- let r;
15907
+ if (n !== void 0 && n !== "") {
15908
+ let t = av(window, e), r = uv(t);
15909
+ if (r !== n) return $({
15910
+ code: "VERSION_CONFLICT",
15911
+ path: e,
15912
+ message: `乐观锁冲突:expectedHash=${n} 但当前 hash=${r},属性 "${e}" 在你 get 之后已被修改(外部代码/其他 agent/用户手动改)`,
15913
+ hint: `重新 get_window_prop("${e}") 拿最新值与 hash,基于最新值修改后再写入(传新的 expectedHash)。当前值:${lv(t, 400)}`
15914
+ });
15915
+ }
15916
+ let a;
15886
15917
  try {
15887
- r = JSON.parse(t);
15918
+ a = JSON.parse(t);
15888
15919
  } catch (n) {
15889
- return A_(e, t, n);
15920
+ return j_(e, t, n);
15890
15921
  }
15891
- let a = n.schema.safeParse(r);
15892
- if (!a.success) return k_(e, a.error.issues);
15922
+ let o = r.schema.safeParse(a);
15923
+ if (!o.success) return A_(e, o.error.issues);
15893
15924
  f(e, "set");
15894
- let o = iv(window, e);
15895
- return typeof o == "object" && o && a.data !== null && typeof a.data == "object" ? fv(o, a.data) : av(window, e, a.data), c({
15925
+ let s = av(window, e);
15926
+ return typeof s == "object" && s && o.data !== null && typeof o.data == "object" ? mv(s, o.data) : ov(window, e, o.data), c({
15896
15927
  op: "set",
15897
15928
  path: e,
15898
- value: a.data,
15929
+ value: o.data,
15899
15930
  timestamp: Date.now()
15900
- }), `已设置 ${e} = ${cv(a.data, 600)}${l()}`;
15931
+ }), `已设置 ${e} = ${lv(o.data, 600)} (新 hash=${uv(av(window, e))})${l()}`;
15901
15932
  }, {
15902
15933
  name: "set_window_prop",
15903
- description: "设置一个已注册 window 属性的值(整体替换)。仅能操作注册表内声明的属性;value 为 JSON 字符串,需通过该属性声明的 schema 校验。校验失败会返回错误而非写入。大对象/数组强烈建议改用 edit_window_prop 增量 patch —— 整体重传大 JSON 时输出可能被 max_tokens 截断,导致 JSON 不完整而校验失败,且浪费 token。",
15934
+ description: "设置一个已注册 window 属性的值(整体替换)。仅能操作注册表内声明的属性;value 为 JSON 字符串,需通过该属性声明的 schema 校验。校验失败会返回错误而非写入。expectedHash(可选):改前 get_window_prop 返回的 hash,传入则启用乐观锁——若属性已被改过(外部代码/其他 agent/用户手动)则返回 VERSION_CONFLICT 不写入,需重新 get 再改,防\"基于过期值覆盖\"。大对象/数组强烈建议改用 edit_window_prop 增量 patch。",
15904
15935
  schema: t.object({
15905
15936
  path: t.string().describe("已注册的属性路径"),
15906
- value: t.string().describe("JSON 字符串形式的值,需符合该属性 schema")
15937
+ value: t.string().describe("JSON 字符串形式的值,需符合该属性 schema"),
15938
+ expectedHash: t.string().optional().describe("乐观锁:改前 get_window_prop 返回的 hash;传入则校验,不一致拒绝写入防覆盖")
15907
15939
  })
15908
- }), _ = n(async ({ path: e, op: t, jsonPath: n, value: r }) => {
15909
- let a = i.get(e);
15910
- if (!a) return $({
15940
+ }), _ = n(async ({ path: e, op: t, jsonPath: n, value: r, expectedHash: a }) => {
15941
+ let o = i.get(e);
15942
+ if (!o) return $({
15911
15943
  code: "NOT_REGISTERED",
15912
15944
  path: e,
15913
15945
  message: `属性 "${e}" 未在注册表中声明,不可写`,
15914
15946
  hint: "用 list_window_props 查看可用属性"
15915
15947
  });
15916
- let o = n || "";
15917
- if (nv(o)) return $({
15948
+ let s = n || "";
15949
+ if (rv(s)) return $({
15918
15950
  code: "PATH_UNSAFE",
15919
15951
  path: e,
15920
- message: `jsonPath "${o}" 含非法段(__proto__/constructor/prototype)`,
15952
+ message: `jsonPath "${s}" 含非法段(__proto__/constructor/prototype)`,
15921
15953
  hint: "使用正常的属性路径,如 components.0.text(数组索引用数字)"
15922
15954
  });
15923
- let s;
15955
+ let u = av(window, e);
15956
+ if (a !== void 0 && a !== "") {
15957
+ let t = uv(u);
15958
+ if (t !== a) return $({
15959
+ code: "VERSION_CONFLICT",
15960
+ path: e,
15961
+ message: `乐观锁冲突:expectedHash=${a} 但当前 hash=${t},属性 "${e}" 在你 get 之后已被修改(外部代码/其他 agent/用户手动改)`,
15962
+ hint: `重新 get_window_prop("${e}") 拿最新值与 hash,基于最新值修改后再 edit(传新的 expectedHash)。当前值:${lv(u, 400)}`
15963
+ });
15964
+ }
15965
+ if (typeof u != "object" || !u) return $({
15966
+ code: "NOT_OBJECT",
15967
+ path: e,
15968
+ message: `edit 仅适用于对象/数组属性,"${e}" 当前是 ${u === void 0 ? "undefined" : typeof u}`,
15969
+ hint: "叶子属性(原始类型)请用 set_window_prop 整体设置"
15970
+ });
15971
+ let d;
15924
15972
  if (t !== "remove") {
15925
15973
  if (r === void 0 || r === "") return $({
15926
15974
  code: "MISSING_VALUE",
@@ -15929,36 +15977,29 @@ function pv(e, r = {}) {
15929
15977
  hint: `op 为 ${t} 时 value 必填;若想删除请用 op:'remove'`
15930
15978
  });
15931
15979
  try {
15932
- s = JSON.parse(r);
15980
+ d = JSON.parse(r);
15933
15981
  } catch (t) {
15934
- return A_(e, r, t);
15982
+ return j_(e, r, t);
15935
15983
  }
15936
15984
  }
15937
- let u = iv(window, e);
15938
- if (typeof u != "object" || !u) return $({
15939
- code: "NOT_OBJECT",
15940
- path: e,
15941
- message: `edit 仅适用于对象/数组属性,"${e}" 当前是 ${u === void 0 ? "undefined" : typeof u}`,
15942
- hint: "叶子属性(原始类型)请用 set_window_prop 整体设置"
15943
- });
15944
- let d = sv(u), p = lv(d, t, o, s);
15945
- if (p) return $({
15985
+ let p = cv(u), m = dv(p, t, s, d);
15986
+ if (m) return $({
15946
15987
  code: "PATCH_FAILED",
15947
15988
  path: e,
15948
- message: p,
15989
+ message: m,
15949
15990
  hint: "检查 op 与目标类型:merge 需目标为对象,append 需目标为数组;jsonPath 指向需存在"
15950
15991
  });
15951
- let m = a.schema.safeParse(d);
15952
- return m.success ? (f(e, "edit"), uv(e, t, o, s), c({
15992
+ let h = o.schema.safeParse(p);
15993
+ return h.success ? (f(e, "edit"), fv(e, t, s, d), c({
15953
15994
  op: "edit",
15954
15995
  path: e,
15955
- detail: `${t}${o ? "@" + o : ""}`,
15956
- value: s,
15996
+ detail: `${t}${s ? "@" + s : ""}`,
15997
+ value: d,
15957
15998
  timestamp: Date.now()
15958
- }), `已 edit ${e}(${t}${o ? " @ " + o : ""})。当前值:${cv(iv(window, e), 600)}${l()}`) : k_(e, m.error.issues);
15999
+ }), `已 edit ${e}(${t}${s ? " @ " + s : ""})。当前值:${lv(av(window, e), 600)} (新 hash=${uv(av(window, e))})${l()}`) : A_(e, h.error.issues);
15959
16000
  }, {
15960
16001
  name: "edit_window_prop",
15961
- description: "增量编辑一个已注册的「对象/数组」window 属性,只发改动的 patch,无需重传整个大对象。op:set(在 jsonPath 设值)、remove(删 jsonPath)、merge(把 value 合并到 jsonPath 指向的对象,默认根)、append(把 value 追加到 jsonPath 指向的数组,默认根)。jsonPath 为相对属性根的点号路径(数组索引用数字,如 components.0.text);value 为 JSON 字符串。整体仍经 schema 校验,失败不写入。",
16002
+ description: "增量编辑一个已注册的「对象/数组」window 属性,只发改动的 patch,无需重传整个大对象。op:set(在 jsonPath 设值)、remove(删 jsonPath)、merge(把 value 合并到 jsonPath 指向的对象,默认根)、append(把 value 追加到 jsonPath 指向的数组,默认根)。jsonPath 为相对属性根的点号路径(数组索引用数字,如 components.0.text);value 为 JSON 字符串。整体仍经 schema 校验,失败不写入。expectedHash(可选):改前 get_window_prop 返回的 hash,传入启用乐观锁防\"基于过期值覆盖\"。",
15962
16003
  schema: t.object({
15963
16004
  path: t.string().describe("已注册的对象/数组属性路径"),
15964
16005
  op: t.enum([
@@ -15968,26 +16009,39 @@ function pv(e, r = {}) {
15968
16009
  "append"
15969
16010
  ]),
15970
16011
  jsonPath: t.string().optional().describe("相对属性根的点号路径(数组索引用数字,如 components.0.text)。set/remove 必填;merge/append 不填则作用于根"),
15971
- value: t.string().optional().describe("JSON 字符串(set/merge/append 必填)")
16012
+ value: t.string().optional().describe("JSON 字符串(set/merge/append 必填)"),
16013
+ expectedHash: t.string().optional().describe("乐观锁:改前 get_window_prop 返回的 hash;传入则校验,不一致拒绝写入防覆盖")
15972
16014
  })
15973
- }), v = n(async ({ path: e }) => {
16015
+ }), v = n(async ({ path: e, expectedHash: t }) => {
15974
16016
  if (!i.has(e)) return $({
15975
16017
  code: "NOT_REGISTERED",
15976
16018
  path: e,
15977
16019
  message: `属性 "${e}" 未在注册表中声明,不可删除`,
15978
16020
  hint: "用 list_window_props 查看可用属性"
15979
16021
  });
16022
+ if (t !== void 0 && t !== "") {
16023
+ let n = av(window, e), r = uv(n);
16024
+ if (r !== t) return $({
16025
+ code: "VERSION_CONFLICT",
16026
+ path: e,
16027
+ message: `乐观锁冲突:expectedHash=${t} 但当前 hash=${r},属性 "${e}" 在你 get 之后已被修改`,
16028
+ hint: `重新 get_window_prop("${e}") 拿最新值与 hash 再决定是否删除。当前值:${lv(n, 400)}`
16029
+ });
16030
+ }
15980
16031
  f(e, "delete");
15981
- let t = ov(window, e);
16032
+ let n = sv(window, e);
15982
16033
  return c({
15983
16034
  op: "delete",
15984
16035
  path: e,
15985
16036
  timestamp: Date.now()
15986
- }), t ? `已删除 ${e}${l()}` : `${e} 不存在(无需删除)${l()}`;
16037
+ }), n ? `已删除 ${e}${l()}` : `${e} 不存在(无需删除)${l()}`;
15987
16038
  }, {
15988
16039
  name: "delete_window_prop",
15989
- description: "删除一个已注册 window 属性。",
15990
- schema: t.object({ path: t.string().describe("已注册的属性路径") })
16040
+ description: "删除一个已注册 window 属性。expectedHash(可选):改前 get_window_prop 返回的 hash,传入启用乐观锁防\"基于过期值删除\"。",
16041
+ schema: t.object({
16042
+ path: t.string().describe("已注册的属性路径"),
16043
+ expectedHash: t.string().optional().describe("乐观锁:改前 get_window_prop 返回的 hash;传入则校验,不一致拒绝删除防覆盖")
16044
+ })
15991
16045
  }), y = n(async ({ path: e, label: t }) => i.has(e) ? `已为 ${e} 创建快照 #${f(e, "manual", t)}${t ? `(${t})` : ""}。可用 list_window_snapshots 查看、restore_window_snapshot 回退。` : $({
15992
16046
  code: "NOT_REGISTERED",
15993
16047
  path: e,
@@ -16049,7 +16103,7 @@ function pv(e, r = {}) {
16049
16103
  hint: "用 list_window_snapshots 查看可用快照序号"
16050
16104
  });
16051
16105
  let s = n.schema.safeParse(o.value);
16052
- return s.success ? (dv(e, sv(o.value)), c({
16106
+ return s.success ? (pv(e, cv(o.value)), c({
16053
16107
  op: "restore",
16054
16108
  path: e,
16055
16109
  detail: `#${o.id}`,
@@ -16059,7 +16113,7 @@ function pv(e, r = {}) {
16059
16113
  path: e,
16060
16114
  message: `快照 #${o.id} 的值不符合当前 schema,无法回退`,
16061
16115
  hint: "schema 可能已变更;该快照已过期,选其他快照或重新设置",
16062
- details: O_(s.error.issues)
16116
+ details: k_(s.error.issues)
16063
16117
  });
16064
16118
  }, {
16065
16119
  name: "restore_window_snapshot",
@@ -16084,8 +16138,8 @@ function pv(e, r = {}) {
16084
16138
  })}`);
16085
16139
  continue;
16086
16140
  }
16087
- let e = iv(window, n);
16088
- t.push(`- ${n} = ${e === void 0 ? "(undefined)" : cv(e)}`);
16141
+ let e = av(window, n);
16142
+ t.push(`- ${n} = ${e === void 0 ? "(undefined)" : lv(e)}`);
16089
16143
  }
16090
16144
  return t.join("\n");
16091
16145
  }, {
@@ -16106,7 +16160,7 @@ function pv(e, r = {}) {
16106
16160
  message: `属性 "${e}" 未注册`,
16107
16161
  hint: "用 list_window_props 查看可用属性"
16108
16162
  });
16109
- let r = iv(window, e);
16163
+ let r = av(window, e);
16110
16164
  if (typeof r != "object" || !r) return $({
16111
16165
  code: "NOT_OBJECT",
16112
16166
  path: e,
@@ -16115,7 +16169,7 @@ function pv(e, r = {}) {
16115
16169
  });
16116
16170
  let a;
16117
16171
  try {
16118
- a = Y_(r, t);
16172
+ a = X_(r, t);
16119
16173
  } catch (n) {
16120
16174
  return $({
16121
16175
  code: "JSONPATH_SYNTAX",
@@ -16125,7 +16179,7 @@ function pv(e, r = {}) {
16125
16179
  details: { expr: t }
16126
16180
  });
16127
16181
  }
16128
- let o = n ?? 50, s = a.slice(0, o), c = s.map((e) => `{"path":${JSON.stringify(e.path)},"index":${e.index === void 0 ? "null" : e.index},"value":${cv(e.value)}}`);
16182
+ let o = n ?? 50, s = a.slice(0, o), c = s.map((e) => `{"path":${JSON.stringify(e.path)},"index":${e.index === void 0 ? "null" : e.index},"value":${lv(e.value)}}`);
16129
16183
  return `{"matched":${a.length},"returned":${s.length},"truncated":${a.length > o},"results":[${c.join(",")}]}`;
16130
16184
  }, {
16131
16185
  name: "query_window_prop",
@@ -16143,20 +16197,20 @@ function pv(e, r = {}) {
16143
16197
  message: `属性 "${e}" 未注册`,
16144
16198
  hint: "用 list_window_props 查看可用属性"
16145
16199
  });
16146
- let s = iv(window, e);
16200
+ let s = av(window, e);
16147
16201
  if (s == null) return $({
16148
16202
  code: "EMPTY",
16149
16203
  path: e,
16150
16204
  message: `"${e}" 为空,无可搜索内容`
16151
16205
  });
16152
16206
  try {
16153
- let e = Z_(s, t, {
16207
+ let e = Q_(s, t, {
16154
16208
  mode: n,
16155
16209
  fuzzyThreshold: r,
16156
16210
  matchKey: a,
16157
16211
  limit: o ?? 50
16158
16212
  });
16159
- return cv({
16213
+ return lv({
16160
16214
  matched: e.length,
16161
16215
  results: e
16162
16216
  });
@@ -16199,7 +16253,7 @@ function pv(e, r = {}) {
16199
16253
  message: `脚本过长(${t.length} 字符,上限 8000)`,
16200
16254
  hint: "精简脚本;复杂逻辑可分步(先 query 探查再 transform 改),或拆成多次 eval"
16201
16255
  });
16202
- let a = await ev(sv(iv(window, e)), t, 3e3);
16256
+ let a = await tv(cv(av(window, e)), t, 3e3);
16203
16257
  if (!a.ok) {
16204
16258
  let n = /超时/.test(a.error || "");
16205
16259
  return $({
@@ -16220,18 +16274,18 @@ function pv(e, r = {}) {
16220
16274
  path: e,
16221
16275
  message: "脚本返回值校验失败,未写入(transform 模式要求返回该属性的完整新值且符合 schema)",
16222
16276
  hint: `确认脚本 return 了完整新值(非部分);按 describe_window_prop("${e}") 查看格式`,
16223
- details: O_(t.error.issues)
16277
+ details: k_(t.error.issues)
16224
16278
  });
16225
16279
  f(e, "edit", "eval_transform");
16226
- let n = iv(window, e);
16227
- return typeof n == "object" && n && t.data !== null && typeof t.data == "object" ? fv(n, t.data) : av(window, e, t.data), c({
16280
+ let n = av(window, e);
16281
+ return typeof n == "object" && n && t.data !== null && typeof t.data == "object" ? mv(n, t.data) : ov(window, e, t.data), c({
16228
16282
  op: "edit",
16229
16283
  path: e,
16230
16284
  detail: "eval_transform",
16231
16285
  timestamp: Date.now()
16232
- }), `已通过脚本 transform 更新 ${e}(耗时 ${a.elapsedMs}ms)。当前值: ${cv(iv(window, e), 600)}`;
16286
+ }), `已通过脚本 transform 更新 ${e}(耗时 ${a.elapsedMs}ms)。当前值: ${lv(av(window, e), 600)}`;
16233
16287
  }
16234
- return cv({
16288
+ return lv({
16235
16289
  ok: !0,
16236
16290
  result: a.result,
16237
16291
  elapsedMs: a.elapsedMs
@@ -16255,8 +16309,8 @@ function pv(e, r = {}) {
16255
16309
  }
16256
16310
  //#endregion
16257
16311
  //#region src/core/tools/fetchDoc.ts
16258
- var mv = 3e4, hv = [n(async ({ url: e, as: t }) => {
16259
- let n = new AbortController(), r = setTimeout(() => n.abort(), mv);
16312
+ var gv = 3e4, _v = [n(async ({ url: e, as: t }) => {
16313
+ let n = new AbortController(), r = setTimeout(() => n.abort(), gv);
16260
16314
  try {
16261
16315
  let r = await fetch(e, {
16262
16316
  method: "GET",
@@ -16273,7 +16327,7 @@ var mv = 3e4, hv = [n(async ({ url: e, as: t }) => {
16273
16327
  ].join("\n");
16274
16328
  } catch (t) {
16275
16329
  let r = t?.message || String(t);
16276
- return n.signal.aborted ? `获取失败:请求超时(${mv}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
16330
+ return n.signal.aborted ? `获取失败:请求超时(${gv}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
16277
16331
  } finally {
16278
16332
  clearTimeout(r);
16279
16333
  }
@@ -16284,33 +16338,33 @@ var mv = 3e4, hv = [n(async ({ url: e, as: t }) => {
16284
16338
  url: t.string().describe("要抓取的 URL(同源或已配 CORS)"),
16285
16339
  as: t.enum(["text", "markdown"]).optional().describe("返回格式标签,默认 text")
16286
16340
  })
16287
- })], gv = hv;
16288
- function _v(e, t) {
16289
- return pv(e, t);
16341
+ })], vv = _v;
16342
+ function yv(e, t) {
16343
+ return hv(e, t);
16290
16344
  }
16291
- function vv(e, t, n) {
16345
+ function bv(e, t, n) {
16292
16346
  let r = e?.windowOps !== !1, i = e?.fetch !== !1;
16293
16347
  return [...r ? t : [], ...i ? n : []];
16294
16348
  }
16295
16349
  //#endregion
16296
16350
  //#region src/core/harness/usageHints.ts
16297
- var yv = .7;
16298
- function bv(e, t) {
16351
+ var xv = .7;
16352
+ function Sv(e, t) {
16299
16353
  return {
16300
16354
  name: "usageHints",
16301
16355
  augmentPrompt: () => {
16302
16356
  let n = [];
16303
- if (e?.planning !== !1 && n.push("多步任务建议先 write_todos 拆解为步骤并逐步推进。"), t && (n.push("不确定可操作哪些属性时用 list_window_props 查看(动态组件场景下注册表会增删,以工具返回为准,勿凭旧记忆);不确定某属性字段结构时用 describe_window_prop。"), n.push("改属性前先 get_window_prop 读其当前真实值,基于真实值改,不要凭记忆。"), n.push("修改大对象/数组属性优先用 edit_window_prop 增量 patch(只发改动部分),避免 set 整体重传被 max_tokens 截断导致 JSON 不完整、校验失败。"), n.push("修改属性出错时可用 restore_window_snapshot(path) 回退最近一次。"), n.push("在大数组里按条件筛选元素用 query_window_prop(JSONPath,如 $[?(@.type==\"card\" && @.price<100)]),返回匹配元素的 path/index;定位后再 edit_window_prop 改。"), n.push("找名字记不清的元素用 search_window_prop(支持 substring/regex/fuzzy 模糊搜索)。"), n.push("需要过滤/映射/聚合/批量重写大数组时用 eval_window_script(沙箱脚本,入参 data);只读探查用 mode=query,批量重写用 mode=transform(返回值经校验后落地)。")), e?.subagent !== !1 && n.push("独立子任务可 spawn_agent 委派(只读工具,过程不占主上下文)。"), e?.subagents?.length) {
16304
- let t = e.subagents.filter((e) => (e.temperature ?? 0) >= yv || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), r = e.subagents.filter((e) => (e.temperature ?? 0) < yv && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
16357
+ if (e?.planning !== !1 && n.push("多步任务建议先 write_todos 拆解为步骤并逐步推进。"), t && (n.push("改属性前先 get_window_prop(path) 读其当前真实值与 hash(返回末尾 hash=xxx),基于真实值改,不要凭记忆。写入(set/edit/delete)时回传 expectedHash=该 hash 启用乐观锁——若属性在你 get 之后被外部代码/其他 agent/用户手动改过,会返回 VERSION_CONFLICT 不写入,此时重新 get 拿最新值与 hash 再改,防\"基于过期值覆盖\"。"), n.push("不确定可操作哪些属性时用 list_window_props 查看(动态组件场景下注册表会增删,以工具返回为准,勿凭旧记忆);不确定某属性字段结构时用 describe_window_prop。"), n.push("修改大对象/数组属性优先用 edit_window_prop 增量 patch(只发改动部分),避免 set 整体重传被 max_tokens 截断导致 JSON 不完整、校验失败。"), n.push("修改属性出错时可用 restore_window_snapshot(path) 回退最近一次。"), n.push("在大数组里按条件筛选元素用 query_window_prop(JSONPath,如 $[?(@.type==\"card\" && @.price<100)]),返回匹配元素的 path/index;定位后再 edit_window_prop 改。"), n.push("找名字记不清的元素用 search_window_prop(支持 substring/regex/fuzzy 模糊搜索)。"), n.push("需要过滤/映射/聚合/批量重写大数组时用 eval_window_script(沙箱脚本,入参 data);只读探查用 mode=query,批量重写用 mode=transform(返回值经校验后落地)。")), e?.subagent !== !1 && n.push("独立子任务可 spawn_agent 委派(只读工具,过程不占主上下文)。"), e?.subagents?.length) {
16358
+ let t = e.subagents.filter((e) => (e.temperature ?? 0) >= xv || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), r = e.subagents.filter((e) => (e.temperature ?? 0) < xv && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
16305
16359
  n.push("【规划-反思-执行·路由】按任务性质选模式,不要对简单任务过度编排:"), t.length && (n.push(` · 创作/设计/开放性需求(如"设计主题风格""换个感觉")→ 先调 ${t.map((e) => "use_" + e.id).join("/")} 出 2-3 套方案(高温创意),`), n.push(" 不要自己拍板;拿到方案后,若需用户拍板用 request_human_confirmation 弹选项。")), r.length && n.push(` · 严谨/易错/校验类 → 可先调 ${r.map((e) => "use_" + e.id).join("/")} 反思挑刺(低温审查),据反馈修订。`), n.push(" · 方案定稿后,由你(主 agent)用 edit_window_prop 落地成 JSON(低温度执行 + schema 校验 + 写前确认)。"), n.push(" · 简单/明确任务(如\"标题改红色\")直接执行,不必走规划-反思。");
16306
16360
  }
16307
- return e?.humanConfirm && (n.push("【人工确认·必读】以下情形必须先调 request_human_confirmation 征询用户、拿到答复后再继续,不要自行拍板:"), n.push(" 1) 用户让你「给方案/列选项/我来选/挑一个」时:把每个方案作为一个 option,调 request_human_confirmation(question=简述, options=[方案A,方案B,...], recommendation=你推荐的)。不要只回文字罗列方案让用户自己回复——要用工具把选项做成可点选按钮。"), n.push(" 2) 需求有歧义/不确定时:调工具问清楚(options 不传则用户答同意或拒绝)。"), n.push(" 3) 即将执行高风险不可逆操作(删除/覆盖/批量改动)前:调工具确认。"), n.push("用户在选项里选了哪个,就按那个方案继续;选「拒绝」则停止并询问如何调整。")), n.length ? "## 能力使用提示\n" + n.join("\n") : void 0;
16361
+ return e?.humanConfirm && (n.push("【人工确认·必读】以下情形必须先调 request_human_confirmation 征询用户、拿到答复后再继续,不要自行拍板:"), n.push(" 1) 用户让你「给方案/列选项/我来选/挑一个」时:把每个方案作为一个 option,调 request_human_confirmation(question=简述, options=[方案A,方案B,...], recommendation=你推荐的)。不要只回文字罗列方案让用户自己回复——要用工具把选项做成可点选按钮。"), n.push(" 2) 需求有歧义/不确定时:调工具问清楚(options 不传则用户答同意或拒绝)。"), n.push(" 3) 即将执行高风险不可逆操作(删除/覆盖/批量改动)前:调工具确认。"), n.push("用户在选项里选了哪个,就按那个方案继续;选「拒绝」则停止并询问如何调整。")), n.length && n.unshift("调用工具务必用标准 function calling(工具调用)格式发起,不要在回复正文里输出伪 XML/标签(如 deepseek 的 tool_calls 标签、invoke、function_call、tool_call 等)或 JSON 文本——那不会被识别为工具调用,会被当普通文字,工具不执行。"), n.length ? "## 能力使用提示\n" + n.join("\n") : void 0;
16308
16362
  }
16309
16363
  };
16310
16364
  }
16311
16365
  //#endregion
16312
16366
  //#region src/core/utils/id.ts
16313
- function xv() {
16367
+ function Cv() {
16314
16368
  try {
16315
16369
  if (typeof crypto < "u" && typeof crypto.randomUUID == "function") return crypto.randomUUID();
16316
16370
  } catch {}
@@ -16318,57 +16372,57 @@ function xv() {
16318
16372
  }
16319
16373
  //#endregion
16320
16374
  //#region src/core/backends/storage.ts
16321
- var Sv = "chat-sdk", Cv = 50 * 1024 * 1024, wv = 4 * 1024 * 1024, Tv = 10 * 1024 * 1024, Ev = .9, Dv = 500, Ov = 300, kv = "__meta__", Av = "v:1", jv = [
16375
+ var wv = "chat-sdk", Tv = 50 * 1024 * 1024, Ev = 4 * 1024 * 1024, Dv = 10 * 1024 * 1024, Ov = .9, kv = 500, Av = 300, jv = "__meta__", Mv = "v:1", Nv = [
16322
16376
  "messages",
16323
16377
  "vfs",
16324
16378
  "todos",
16325
16379
  "memory"
16326
16380
  ];
16327
- function Mv(e) {
16328
- return e === "local" || e === "session" ? wv : Cv;
16381
+ function Pv(e) {
16382
+ return e === "local" || e === "session" ? Ev : Tv;
16329
16383
  }
16330
- function Nv(e) {
16384
+ function Fv(e) {
16331
16385
  if (typeof e != "object" || !e) return !1;
16332
16386
  let t = e;
16333
16387
  return t.name === "QuotaExceededError" || t.name === "NS_ERROR_DOM_QUOTA_REACHED" || t.code === 22 || t.code === 1014;
16334
16388
  }
16335
- function Pv(e, t, n, r) {
16389
+ function Iv(e, t, n, r) {
16336
16390
  return [
16337
- Av,
16391
+ Mv,
16338
16392
  e,
16339
16393
  t,
16340
16394
  n,
16341
16395
  r
16342
16396
  ].join("::");
16343
16397
  }
16344
- function Fv(e, t, n) {
16398
+ function Lv(e, t, n) {
16345
16399
  return [
16346
- Av,
16400
+ Mv,
16347
16401
  e,
16348
16402
  t,
16349
16403
  n
16350
16404
  ].join("::") + "::";
16351
16405
  }
16352
- function Iv(e, t) {
16406
+ function Rv(e, t) {
16353
16407
  return [
16354
- Av,
16408
+ Mv,
16355
16409
  e,
16356
16410
  t
16357
16411
  ].join("::") + "::";
16358
16412
  }
16359
- function Lv(e) {
16360
- return [Av, e].join("::") + "::";
16361
- }
16362
- var Rv = null;
16363
16413
  function zv(e) {
16364
- Rv ||= new TextEncoder();
16414
+ return [Mv, e].join("::") + "::";
16415
+ }
16416
+ var Bv = null;
16417
+ function Vv(e) {
16418
+ Bv ||= new TextEncoder();
16365
16419
  try {
16366
- return Rv.encode(JSON.stringify(e)).length;
16420
+ return Bv.encode(JSON.stringify(e)).length;
16367
16421
  } catch {
16368
16422
  return 0;
16369
16423
  }
16370
16424
  }
16371
- function Bv(e, t, n) {
16425
+ function Hv(e, t, n) {
16372
16426
  let r = e.reduce((e, t) => e + t.bytes, 0);
16373
16427
  if (r <= t) return [];
16374
16428
  let i = t * n, a = [...e].sort((e, t) => e.lastAccessed - t.lastAccessed), o = [];
@@ -16378,7 +16432,7 @@ function Bv(e, t, n) {
16378
16432
  }
16379
16433
  return o;
16380
16434
  }
16381
- function Vv() {
16435
+ function Uv() {
16382
16436
  let e = /* @__PURE__ */ new Map();
16383
16437
  return {
16384
16438
  async get(t) {
@@ -16398,7 +16452,7 @@ function Vv() {
16398
16452
  }
16399
16453
  };
16400
16454
  }
16401
- function Hv(e) {
16455
+ function Wv(e) {
16402
16456
  return new Promise((t, n) => {
16403
16457
  if (typeof indexedDB > "u") {
16404
16458
  n(/* @__PURE__ */ Error("indexedDB 不可用"));
@@ -16459,7 +16513,7 @@ function Hv(e) {
16459
16513
  }, r.onerror = () => n(r.error);
16460
16514
  });
16461
16515
  }
16462
- function Uv(e) {
16516
+ function Gv(e) {
16463
16517
  return {
16464
16518
  async get(t) {
16465
16519
  let n = e.getItem(t);
@@ -16493,12 +16547,12 @@ function Uv(e) {
16493
16547
  }
16494
16548
  };
16495
16549
  }
16496
- function Wv(e, t, n) {
16550
+ function Kv(e, t, n) {
16497
16551
  let r = (e.get(t) ?? Promise.resolve()).then(n, n);
16498
16552
  return e.set(t, r.then(() => void 0, () => void 0)), r;
16499
16553
  }
16500
- function Gv(e = {}) {
16501
- let t = e.dbName ?? Sv, n = e.backend ?? "indexed", r = e.maxBytes ?? Mv(n), i = e.maxBytesPerSession ?? Tv, a = e.evictionWatermark ?? Ev, o = e.debounceMs ?? Dv, s = /* @__PURE__ */ new Set();
16554
+ function qv(e = {}) {
16555
+ let t = e.dbName ?? wv, n = e.backend ?? "indexed", r = e.maxBytes ?? Pv(n), i = e.maxBytesPerSession ?? Dv, a = e.evictionWatermark ?? Ov, o = e.debounceMs ?? kv, s = /* @__PURE__ */ new Set();
16502
16556
  function c(e) {
16503
16557
  for (let t of s) try {
16504
16558
  t(e);
@@ -16511,16 +16565,16 @@ function Gv(e = {}) {
16511
16565
  try {
16512
16566
  if (n === "indexed") {
16513
16567
  if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
16514
- l = await Hv(t), d(!0);
16568
+ l = await Wv(t), d(!0);
16515
16569
  } else if (n === "session") {
16516
16570
  if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
16517
- l = Uv(sessionStorage), d(!0);
16571
+ l = Gv(sessionStorage), d(!0);
16518
16572
  } else if (n === "local") {
16519
16573
  if (typeof localStorage > "u") throw Error("localStorage 不可用");
16520
- l = Uv(localStorage), d(!0);
16521
- } else l = Vv(), d(!1);
16574
+ l = Gv(localStorage), d(!0);
16575
+ } else l = Uv(), d(!1);
16522
16576
  } catch (e) {
16523
- l = Vv();
16577
+ l = Uv();
16524
16578
  let t = e instanceof Error ? e.message : String(e);
16525
16579
  d(!1), Promise.resolve().then(() => c({
16526
16580
  type: "degraded",
@@ -16530,10 +16584,10 @@ function Gv(e = {}) {
16530
16584
  })();
16531
16585
  let p = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map();
16532
16586
  function g(e, n, r, a) {
16533
- let o = Pv(t, r, a, kv);
16534
- return Wv(h, o, async () => {
16587
+ let o = Iv(t, r, a, jv);
16588
+ return Kv(h, o, async () => {
16535
16589
  let t = async () => {
16536
- let t = await l.get(o), s = await l.get(e), u = s == null ? 0 : zv(s), d = zv(n), f = (t?.bytes ?? 0) + (d - u);
16590
+ let t = await l.get(o), s = await l.get(e), u = s == null ? 0 : Vv(s), d = Vv(n), f = (t?.bytes ?? 0) + (d - u);
16537
16591
  if (f > i) {
16538
16592
  c({
16539
16593
  type: "quota",
@@ -16555,12 +16609,12 @@ function Gv(e = {}) {
16555
16609
  try {
16556
16610
  await t();
16557
16611
  } catch (e) {
16558
- if (Nv(e) && !u) {
16612
+ if (Fv(e) && !u) {
16559
16613
  u = !0;
16560
16614
  try {
16561
16615
  await b();
16562
16616
  } catch {}
16563
- l = Vv(), Promise.resolve().then(() => c({
16617
+ l = Uv(), Promise.resolve().then(() => c({
16564
16618
  type: "degraded",
16565
16619
  reason: "存储配额超限(QuotaExceededError),已淘汰最旧会话并降级内存"
16566
16620
  }));
@@ -16572,7 +16626,7 @@ function Gv(e = {}) {
16572
16626
  });
16573
16627
  }
16574
16628
  function _(e, n, r, i) {
16575
- let a = Pv(t, e, n, r), s = p.get(a);
16629
+ let a = Iv(t, e, n, r), s = p.get(a);
16576
16630
  s && s.resolve();
16577
16631
  let c = m.get(a);
16578
16632
  return c && clearTimeout(c), new Promise((t) => {
@@ -16599,15 +16653,15 @@ function Gv(e = {}) {
16599
16653
  function y() {
16600
16654
  v ||= setTimeout(() => {
16601
16655
  v = null, b();
16602
- }, Ov);
16656
+ }, Av);
16603
16657
  }
16604
16658
  async function b() {
16605
16659
  let e = [];
16606
- await l.scan(Lv(t), (t, n) => {
16660
+ await l.scan(zv(t), (t, n) => {
16607
16661
  t.endsWith("::__meta__") && e.push(n);
16608
16662
  });
16609
- let n = Bv(e, r, a);
16610
- for (let e of n) await l.clearPrefix(Fv(t, e.agentId, e.sessionId)), c({
16663
+ let n = Hv(e, r, a);
16664
+ for (let e of n) await l.clearPrefix(Lv(t, e.agentId, e.sessionId)), c({
16611
16665
  type: "evicted",
16612
16666
  agentId: e.agentId,
16613
16667
  sessionId: e.sessionId,
@@ -16618,13 +16672,13 @@ function Gv(e = {}) {
16618
16672
  ready: f,
16619
16673
  async listSessions(e) {
16620
16674
  let n = [];
16621
- return await l.scan(Iv(t, e), (e, t) => {
16675
+ return await l.scan(Rv(t, e), (e, t) => {
16622
16676
  e.endsWith("::__meta__") && n.push(t);
16623
16677
  }), n.sort((e, t) => t.lastAccessed - e.lastAccessed);
16624
16678
  },
16625
16679
  async load(e, n) {
16626
- let r = Pv(t, e, n, kv);
16627
- return await Wv(h, r, async () => {
16680
+ let r = Iv(t, e, n, jv);
16681
+ return await Kv(h, r, async () => {
16628
16682
  let i = await l.get(r);
16629
16683
  if (!i) return;
16630
16684
  let a = {
@@ -16633,8 +16687,8 @@ function Gv(e = {}) {
16633
16687
  todos: [],
16634
16688
  memory: ""
16635
16689
  };
16636
- for (let r of jv) {
16637
- let i = await l.get(Pv(t, e, n, r));
16690
+ for (let r of Nv) {
16691
+ let i = await l.get(Iv(t, e, n, r));
16638
16692
  i != null && (a[r] = i);
16639
16693
  }
16640
16694
  return i.lastAccessed = Date.now(), await l.set(r, i), a;
@@ -16642,7 +16696,7 @@ function Gv(e = {}) {
16642
16696
  },
16643
16697
  async save(e, t, n) {
16644
16698
  let r = [];
16645
- for (let i of jv) n[i] !== void 0 && r.push(_(e, t, i, n[i]));
16699
+ for (let i of Nv) n[i] !== void 0 && r.push(_(e, t, i, n[i]));
16646
16700
  await Promise.all(r);
16647
16701
  },
16648
16702
  async flush() {
@@ -16656,10 +16710,10 @@ function Gv(e = {}) {
16656
16710
  })), c({ type: "flush" }), await b();
16657
16711
  },
16658
16712
  async deleteSession(e, n) {
16659
- await l.clearPrefix(Fv(t, e, n));
16713
+ await l.clearPrefix(Lv(t, e, n));
16660
16714
  },
16661
16715
  async createSession(e, n, r) {
16662
- let i = r ?? xv(), a = Date.now(), o = {
16716
+ let i = r ?? Cv(), a = Date.now(), o = {
16663
16717
  agentId: e,
16664
16718
  sessionId: i,
16665
16719
  createdAt: a,
@@ -16667,7 +16721,7 @@ function Gv(e = {}) {
16667
16721
  bytes: 0,
16668
16722
  title: n
16669
16723
  };
16670
- return await l.set(Pv(t, e, i, kv), o), i;
16724
+ return await l.set(Iv(t, e, i, jv), o), i;
16671
16725
  },
16672
16726
  onEvent(e) {
16673
16727
  s.add(e);
@@ -16682,28 +16736,28 @@ function Gv(e = {}) {
16682
16736
  }
16683
16737
  //#endregion
16684
16738
  //#region src/core/sdk/createChatSdk.ts
16685
- var Kv = [
16739
+ var Jv = [
16686
16740
  "你是一个页面操作助手。宿主页面在 window 对象上注册了可操作的属性,你通过专用工具安全地读写这些属性来操作页面。",
16687
16741
  "所有写操作都经范围控制(仅注册表内)与 schema 校验(不合法会返回结构化错误而非写入),并自动留快照可回退。",
16688
16742
  "大对象/数组优先用增量 patch(只发改动)而非整体重传,避免输出被截断。",
16689
- T_.reliableWriteRules
16690
- ].join("\n\n"), qv = 50;
16691
- function Jv(e) {
16692
- return e === void 0 || e === !1 ? null : typeof e == "string" ? Gv({ backend: e }) : e.enabled === !1 ? null : Gv(e);
16743
+ E_.reliableWriteRules
16744
+ ].join("\n\n"), Yv = 50;
16745
+ function Xv(e) {
16746
+ return e === void 0 || e === !1 ? null : typeof e == "string" ? qv({ backend: e }) : e.enabled === !1 ? null : qv(e);
16693
16747
  }
16694
- function Yv(e) {
16748
+ function Zv(e) {
16695
16749
  return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
16696
16750
  }
16697
- var Xv = /* @__PURE__ */ new Map();
16698
- function Zv(e) {
16751
+ var Qv = /* @__PURE__ */ new Map();
16752
+ function $v(e) {
16699
16753
  let t = e.content;
16700
16754
  return typeof t == "string" ? t : Array.isArray(t) ? t.map((e) => typeof e == "string" ? e : e?.text ?? "").join("") : String(t ?? "");
16701
16755
  }
16702
- function Qv(e) {
16756
+ function ey(e) {
16703
16757
  let t = e.summaryLlm ?? e.llm;
16704
16758
  if (!t) return;
16705
16759
  let n = e.summaryTemperature ?? .3, r = e.summaryMaxTokens ?? 1024, o = e.summaryTimeoutMs ?? 15e3, c;
16706
- if (Yv(t)) c = t;
16760
+ if (Zv(t)) c = t;
16707
16761
  else {
16708
16762
  let i = t;
16709
16763
  if (!i.apiKey) {
@@ -16721,16 +16775,16 @@ function Qv(e) {
16721
16775
  return async (e) => {
16722
16776
  let t = new AbortController(), n = setTimeout(() => t.abort(), o);
16723
16777
  try {
16724
- return Zv(await c.invoke([new a("你是对话历史压缩助手。把下面按轮次索引的对话要点,改写成一段连贯、紧凑的中文摘要,保留关键事实、用户意图与已用工具,不要编造。直接输出摘要正文。"), new i(e)], { signal: t.signal })).trim();
16778
+ return $v(await c.invoke([new a("你是对话历史压缩助手。把下面按轮次索引的对话要点,改写成一段连贯、紧凑的中文摘要,保留关键事实、用户意图与已用工具,不要编造。直接输出摘要正文。"), new i(e)], { signal: t.signal })).trim();
16725
16779
  } finally {
16726
16780
  clearTimeout(n);
16727
16781
  }
16728
16782
  };
16729
16783
  }
16730
- function $v(e) {
16784
+ function ty(e) {
16731
16785
  return e === "set_window_prop" ? "set" : e === "edit_window_prop" ? "edit" : e === "delete_window_prop" ? "delete" : e === "restore_window_snapshot" ? "restore" : null;
16732
16786
  }
16733
- function ey(e) {
16787
+ function ny(e) {
16734
16788
  let t = e.split("."), n = globalThis.window;
16735
16789
  for (let e of t) {
16736
16790
  if (n == null) return;
@@ -16738,18 +16792,18 @@ function ey(e) {
16738
16792
  }
16739
16793
  return n;
16740
16794
  }
16741
- function ty(e, t) {
16795
+ function ry(e, t) {
16742
16796
  return {
16743
16797
  name: "sdk-events",
16744
16798
  wrapToolCall: async (t, n) => {
16745
- let r = await n(t), i = $v(t.name);
16799
+ let r = await n(t), i = ty(t.name);
16746
16800
  if (i) {
16747
16801
  let n = String(t.args?.path ?? "");
16748
16802
  e({
16749
16803
  type: "window_prop_change",
16750
16804
  path: n,
16751
16805
  operation: i,
16752
- value: n ? ey(n) : void 0
16806
+ value: n ? ny(n) : void 0
16753
16807
  });
16754
16808
  }
16755
16809
  return r;
@@ -16762,38 +16816,38 @@ function ty(e, t) {
16762
16816
  }
16763
16817
  };
16764
16818
  }
16765
- function ny(e, r) {
16766
- let i = Jv(e.storage);
16819
+ function iy(e, r) {
16820
+ let i = Xv(e.storage);
16767
16821
  e.debug && i && i.onEvent((e) => console.log("[page-agent-sdk][storage]", e));
16768
- let a = Yv(e.llm) ? void 0 : e.llm, o = Wh({
16822
+ let a = Zv(e.llm) ? void 0 : e.llm, o = Wh({
16769
16823
  model: a?.model,
16770
16824
  contextWindow: e.contextWindow ?? a?.contextWindow,
16771
16825
  maxOutputTokens: e.maxOutputTokens ?? a?.maxOutputTokens
16772
16826
  });
16773
16827
  e.debug && console.log("[page-agent-sdk][modelCaps]", o);
16774
- let s = Qv(e);
16828
+ let s = ey(e);
16775
16829
  e.debug && !s && console.warn("[page-agent-sdk][summarization] 未构造 llmInvoke(apiKey 缺失?),摘要回退零成本索引摘要");
16776
- let c = /* @__PURE__ */ Qt([]), l = M_(e.vfs?.initialFiles, {
16830
+ let c = /* @__PURE__ */ Qt([]), l = N_(e.vfs?.initialFiles, {
16777
16831
  persist: i ? { save: (e) => {
16778
16832
  B.sessionId && i && i.save(r, B.sessionId, { vfs: e });
16779
16833
  } } : void 0,
16780
16834
  maxBytes: e.vfs?.maxBytes
16781
- }), u = lg(), d = _g(e.memory || ""), f = { current: null }, p = e.checkpoint, m = p !== void 0 && p !== !1, h = m ? Pg({
16835
+ }), u = ug(), d = vg(e.memory || ""), f = { current: null }, p = e.checkpoint, m = p !== void 0 && p !== !1, h = m ? Fg({
16782
16836
  windowPaths: (e.windowProps ?? []).map((e) => e.path),
16783
16837
  vfsStore: l,
16784
16838
  todosMw: u,
16785
16839
  getTodos: () => f.current?.getState?.()?.todos ?? [],
16786
16840
  messages: c,
16787
16841
  maxCheckpoints: p && typeof p == "object" ? p.maxCheckpoints : void 0
16788
- }) : null, g = !p || typeof p != "object" || p.auto !== !1, _ = e.capabilities, v = _?.windowOps !== !1, y = v ? pv(e.windowProps || [], {
16842
+ }) : null, g = !p || typeof p != "object" || p.auto !== !1, _ = e.capabilities, v = _?.windowOps !== !1, y = v ? hv(e.windowProps || [], {
16789
16843
  onAudit: e.debug ? (e) => console.log("[page-agent-sdk][window audit]", e) : void 0,
16790
16844
  maxSnapshots: e.maxSnapshots
16791
- }) : [], b = v ? y.controller ?? null : null, x = () => b?.list() ?? e.windowProps ?? [], S = /* @__PURE__ */ new Map(), C = vv(_, y, hv);
16845
+ }) : [], b = v ? y.controller ?? null : null, x = () => b?.list() ?? e.windowProps ?? [], S = /* @__PURE__ */ new Map(), C = bv(_, y, _v);
16792
16846
  C.forEach((e) => S.set(e.name, "builtin"));
16793
16847
  let w = [...e.tools || []];
16794
16848
  w.forEach((e) => S.set(e.name, "user"));
16795
- let T = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), E = T ? Eg() : null;
16796
- E && S.set(wg, "builtin");
16849
+ let T = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), E = T ? Dg() : null;
16850
+ E && S.set(Tg, "builtin");
16797
16851
  let D = m && h ? [n(async () => {
16798
16852
  let e = h.list();
16799
16853
  return e.length ? h.restore() ? `已回退到最近一次正常状态(checkpoint #${e[e.length - 1].id})。对话历史、window 注册属性、vfs、todos 已整体还原。请基于回退后的状态重新判断并继续。` : "回退失败:无可用 checkpoint。" : "无可用 checkpoint,无法回退。";
@@ -16817,7 +16871,7 @@ function ny(e, r) {
16817
16871
  ...D
16818
16872
  ], k = _?.planning !== !1, A = _?.skills !== !1, j = _?.vfs !== !1, M = _?.summarization !== !1, N = _?.memory !== !1, P = _?.subagent !== !1, F = e.verify?.maxAttempts ?? 2, I = _?.verify === !0 && e.verify?.enabled !== !1 && F > 0;
16819
16873
  e.verify?.check && _?.verify !== !0 && console.warn("[page-agent-sdk][verify] 检测到 verify.check 但 capabilities.verify 未开启,verify 未装载");
16820
- let L = e.subagent, R = L?.allowedTools ?? [], ee = !P || L?.enabled === !1 ? void 0 : Ug({
16874
+ let L = e.subagent, R = L?.allowedTools ?? [], z = !P || L?.enabled === !1 ? void 0 : Wg({
16821
16875
  llm: L?.llm ?? e.llm,
16822
16876
  allTools: O,
16823
16877
  allowedTools: R.length ? R : void 0,
@@ -16828,23 +16882,23 @@ function ny(e, r) {
16828
16882
  maxDepth: L?.maxDepth,
16829
16883
  maxParallel: L?.maxParallel,
16830
16884
  debug: e.debug
16831
- }), te = e.subagents?.length ? Kg(e.subagents, {
16885
+ }), ee = e.subagents?.length ? qg(e.subagents, {
16832
16886
  llm: e.llm,
16833
16887
  allTools: O,
16834
16888
  debug: e.debug
16835
- }) : void 0, ne = [
16889
+ }) : void 0, te = [
16836
16890
  "get_window_prop",
16837
16891
  "get_window_paths",
16838
16892
  "list_window_props",
16839
16893
  "describe_window_prop",
16840
16894
  "fetch_document"
16841
- ], re = O.filter((e) => ne.includes(e.name)), ie = I ? qg({
16842
- check: e.verify.check ?? $g({ schemas: () => Object.fromEntries(x().map((e) => [e.path, e.schema])) }),
16895
+ ], ne = O.filter((e) => te.includes(e.name)), re = I ? Jg({
16896
+ check: e.verify.check ?? e_({ schemas: () => Object.fromEntries(x().map((e) => [e.path, e.schema])) }),
16843
16897
  adversarial: e.verify?.adversarial ? {
16844
16898
  llm: e.llm,
16845
- tools: re
16899
+ tools: ne
16846
16900
  } : void 0
16847
- }) : void 0, ae = bv({
16901
+ }) : void 0, ie = Sv({
16848
16902
  ..._,
16849
16903
  humanConfirm: T,
16850
16904
  subagents: e.subagents?.map((e) => ({
@@ -16852,22 +16906,22 @@ function ny(e, r) {
16852
16906
  description: e.description,
16853
16907
  temperature: e.temperature
16854
16908
  }))
16855
- }, v && !!e.windowProps?.length), oe = e.onEvent, se = /* @__PURE__ */ new Set(), ce = (e) => {
16909
+ }, v && !!e.windowProps?.length), ae = e.onEvent, oe = /* @__PURE__ */ new Set(), se = (e) => {
16856
16910
  if (e.type !== "approval_request") {
16857
- if (oe) try {
16858
- oe(e);
16911
+ if (ae) try {
16912
+ ae(e);
16859
16913
  } catch {}
16860
- for (let t of se) try {
16914
+ for (let t of oe) try {
16861
16915
  t(e);
16862
16916
  } catch {}
16863
16917
  }
16864
- }, z = [
16865
- ae,
16918
+ }, ce = [
16919
+ ie,
16866
16920
  ...k ? [u] : [],
16867
- ...A ? [gg(e.skills || [], { readVfs: j ? (e) => l.files[e]?.content : void 0 })] : [],
16868
- ...j ? [z_(l)] : [],
16869
- ...M ? [C_({
16870
- ...D_(e, o.contextWindow),
16921
+ ...A ? [_g(e.skills || [], { readVfs: j ? (e) => l.files[e]?.content : void 0 })] : [],
16922
+ ...j ? [B_(l)] : [],
16923
+ ...M ? [w_({
16924
+ ...O_(e, o.contextWindow),
16871
16925
  llmInvoke: s,
16872
16926
  getRegisteredProps: () => x().map((e) => ({
16873
16927
  path: e.path,
@@ -16876,21 +16930,21 @@ function ny(e, r) {
16876
16930
  preserveLastToolResults: (e.contextOptions && e.contextOptions.preserveLastToolResults) ?? ["describe_window_prop", "list_window_props"]
16877
16931
  })] : [],
16878
16932
  ...N ? [d] : [],
16879
- ...e.permissions?.length ? [Sg(e.permissions)] : [],
16880
- ...m && g && h ? [Fg(h)] : [],
16881
- ...T ? [Dg()] : [],
16882
- ...e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? [Cg(e.approval)] : [],
16883
- ...ie ? [ie] : [],
16933
+ ...e.permissions?.length ? [Cg(e.permissions)] : [],
16934
+ ...m && g && h ? [Ig(h)] : [],
16935
+ ...T ? [Og()] : [],
16936
+ ...e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? [wg(e.approval)] : [],
16937
+ ...re ? [re] : [],
16938
+ ...z ? [z] : [],
16884
16939
  ...ee ? [ee] : [],
16885
- ...te ? [te] : [],
16886
16940
  ...e.middleware || [],
16887
- ty(ce, c)
16888
- ], le = e.maxMemoryRounds ?? qv, B = {
16941
+ ry(se, c)
16942
+ ], le = e.maxMemoryRounds ?? Yv, B = {
16889
16943
  agentId: r,
16890
16944
  store: i,
16891
16945
  messages: c,
16892
16946
  vfsStore: l,
16893
- listeners: se,
16947
+ listeners: oe,
16894
16948
  todosMw: u,
16895
16949
  memoryMw: d,
16896
16950
  agent: null,
@@ -16922,7 +16976,7 @@ function ny(e, r) {
16922
16976
  timestamp: Date.now()
16923
16977
  }), B.afterRound(), i && await i.flush(), e;
16924
16978
  } catch (e) {
16925
- throw ce({
16979
+ throw se({
16926
16980
  type: "error",
16927
16981
  message: e?.message || String(e)
16928
16982
  }), e;
@@ -16936,8 +16990,8 @@ function ny(e, r) {
16936
16990
  },
16937
16991
  stream: (e, t, n) => {
16938
16992
  if (!B.agent) throw Error("page-agent-sdk: agent 尚未初始化完成,请先 await mount()");
16939
- let r = oe ? (e) => {
16940
- t?.(e), ce(e);
16993
+ let r = ae ? (e) => {
16994
+ t?.(e), se(e);
16941
16995
  } : t;
16942
16996
  return B.agent.stream(e, r, n);
16943
16997
  },
@@ -16945,14 +16999,14 @@ function ny(e, r) {
16945
16999
  if (B.refCount--, B.refCount <= 0) {
16946
17000
  i && (l.flush?.(), i.flush(), i.dispose());
16947
17001
  let e = B.mcpClosers.splice(0);
16948
- e.length && Promise.allSettled(e.map((e) => e())), Xv.delete(r);
17002
+ e.length && Promise.allSettled(e.map((e) => e())), Qv.delete(r);
16949
17003
  }
16950
17004
  },
16951
17005
  getInfo() {
16952
17006
  return {
16953
17007
  id: r,
16954
- model: Yv(e.llm) ? e.llm.model ?? e.llm.modelName : e.llm.model,
16955
- systemPrompt: e.systemPrompt ?? Kv,
17008
+ model: Zv(e.llm) ? e.llm.model ?? e.llm.modelName : e.llm.model,
17009
+ systemPrompt: e.systemPrompt ?? Jv,
16956
17010
  tools: O.map((e) => ({
16957
17011
  name: e.name,
16958
17012
  description: e.description,
@@ -16969,19 +17023,19 @@ function ny(e, r) {
16969
17023
  schema: e.schema
16970
17024
  })),
16971
17025
  memory: e.memory ?? "",
16972
- middleware: z.map((e) => e.name),
17026
+ middleware: ce.map((e) => e.name),
16973
17027
  todos: (B.agent?.getState?.()?.todos ?? []).map((e) => ({
16974
17028
  content: e.content,
16975
17029
  status: e.status
16976
17030
  })),
16977
17031
  subagent: {
16978
- enabled: !!ee,
17032
+ enabled: !!z,
16979
17033
  maxDepth: e.subagent?.maxDepth ?? 1,
16980
17034
  maxParallel: e.subagent?.maxParallel ?? 4,
16981
17035
  allowedTools: e.subagent?.allowedTools ?? []
16982
17036
  },
16983
17037
  verify: {
16984
- enabled: !!ie,
17038
+ enabled: !!re,
16985
17039
  maxAttempts: I ? F : 0,
16986
17040
  adversarial: I && !!e.verify?.adversarial
16987
17041
  },
@@ -17014,7 +17068,7 @@ function ny(e, r) {
17014
17068
  e.memory && i.save(r, B.sessionId, { memory: e.memory });
17015
17069
  }
17016
17070
  function de() {
17017
- let e = p_(c, le);
17071
+ let e = m_(c, le);
17018
17072
  e.trimmed && c.splice(e.deleteFrom, e.deleteCount, e.summary);
17019
17073
  }
17020
17074
  function fe() {
@@ -17026,7 +17080,7 @@ function ny(e, r) {
17026
17080
  }
17027
17081
  return B.initDone = (async () => {
17028
17082
  if (await ue(), e.mcp?.length) {
17029
- let t = await Promise.allSettled(e.mcp.map((e) => l_(e)));
17083
+ let t = await Promise.allSettled(e.mcp.map((e) => u_(e)));
17030
17084
  B.mcpClosers = t.flatMap((e) => e.status === "fulfilled" ? [e.value.close] : []), B.mcpServers = [];
17031
17085
  let n = [];
17032
17086
  t.forEach((t, r) => {
@@ -17038,17 +17092,17 @@ function ny(e, r) {
17038
17092
  }), t.value.tools.forEach((e) => S.set(e.name, `mcp:${a}`)), n.push(...t.value.tools)) : console.warn(`[page-agent-sdk][mcp] server ${a} 连接失败:`, t.reason);
17039
17093
  }), O.push(...n), e.debug && console.log(`[page-agent-sdk][mcp] 注入 ${n.length} 个工具,${B.mcpServers.length} 个 server`);
17040
17094
  }
17041
- B.agent = sg({
17042
- ...Yv(e.llm) ? { llm: e.llm } : {
17095
+ B.agent = cg({
17096
+ ...Zv(e.llm) ? { llm: e.llm } : {
17043
17097
  apiKey: e.llm.apiKey,
17044
17098
  baseUrl: e.llm.baseUrl,
17045
17099
  model: e.llm.model,
17046
17100
  temperature: e.llm.temperature,
17047
17101
  maxTokens: e.llm.maxTokens
17048
17102
  },
17049
- systemPrompt: e.systemPrompt ?? Kv,
17103
+ systemPrompt: e.systemPrompt ?? Jv,
17050
17104
  tools: O,
17051
- middleware: z,
17105
+ middleware: ce,
17052
17106
  maxToolRounds: e.maxToolRounds,
17053
17107
  maxRetries: e.maxRetries,
17054
17108
  maxParallelTools: e.maxParallelTools,
@@ -17059,11 +17113,11 @@ function ny(e, r) {
17059
17113
  }), f.current = B.agent;
17060
17114
  })(), B;
17061
17115
  }
17062
- function ry(e) {
17063
- let t = e.id ?? xv();
17116
+ function ay(e) {
17117
+ let t = e.id ?? Cv();
17064
17118
  e.id || console.warn(`[page-agent-sdk] 未传 options.id,已生成随机 id "${t}"。刷新后持久化数据无法恢复,请传稳定 id。`);
17065
- let n = e.streaming ?? !0, r = e.ui ?? "default", i, a = e.shareContext ? Xv.get(t) : void 0;
17066
- a ? i = a : (i = ny(e, t), e.shareContext && Xv.set(t, i)), i.refCount++;
17119
+ let n = e.streaming ?? !0, r = e.ui ?? "default", i, a = e.shareContext ? Qv.get(t) : void 0;
17120
+ a ? i = a : (i = iy(e, t), e.shareContext && Qv.set(t, i)), i.refCount++;
17067
17121
  let o = null, s = null, c = null;
17068
17122
  async function l() {
17069
17123
  if (await i.initDone, r === !1) {
@@ -17092,7 +17146,7 @@ function ry(e) {
17092
17146
  i.afterRound(), i.store && await i.store.flush();
17093
17147
  },
17094
17148
  onClear: () => {
17095
- i.store && (i.sessionId = xv(), i.vfsStore.clear?.(), i.todosMw.reset([]), e.memory || i.memoryMw.reset(""), i.agent.debugLogs.value = [], i.store.createSession(i.agentId, e.session?.title, i.sessionId));
17149
+ i.store && (i.sessionId = Cv(), i.vfsStore.clear?.(), i.todosMw.reset([]), e.memory || i.memoryMw.reset(""), i.agent.debugLogs.value = [], i.store.createSession(i.agentId, e.session?.title, i.sessionId));
17096
17150
  }
17097
17151
  });
17098
17152
  } })), o.mount(t), i.store && (s = () => {
@@ -17128,7 +17182,7 @@ function ry(e) {
17128
17182
  }
17129
17183
  //#endregion
17130
17184
  //#region src/core/sdk/defineTool.ts
17131
- function iy(e) {
17185
+ function oy(e) {
17132
17186
  return n(async (t) => {
17133
17187
  let n = await e.handler(t);
17134
17188
  return typeof n == "string" ? n : JSON.stringify(n);
@@ -17139,4 +17193,4 @@ function iy(e) {
17139
17193
  });
17140
17194
  }
17141
17195
  //#endregion
17142
- export { E_ as CONTEXT_PRESETS, Rh as ChatDialog, Qd as CodePreview, wg as HUMAN_CONFIRM_TOOL_NAME, ef as MessageContent, l_ as connectMcp, sg as createAgent, Cg as createApprovalMiddleware, ry as createChatSdk, Pg as createCheckpointManager, Fg as createCheckpointMiddleware, Dg as createHumanConfirmMiddleware, Eg as createHumanConfirmTool, Vv as createMemoryBackend, Gv as createSessionStore, Ug as createSubagentMiddleware, Kg as createSubagentsMiddleware, bv as createUsageHintsMiddleware, qg as createVerifyMiddleware, M_ as createVfs, Uv as createWebStorageBackend, pv as createWindowOps, $g as createWriteBackCheck, ug as defineSkill, iy as defineTool, _v as defineWindowToolset, Gh as estimateTokens, o_ as extractText, hv as fetchDocTools, gv as fetchTools, O_ as formatZodIssues, Nv as isQuotaError, Y_ as jpEval, A_ as jsonParseError, qh as offloadPassThroughChars, Kh as offloadThresholdChars, w_ as presets, D_ as resolveContextOptions, Wh as resolveModelCaps, ev as runSandboxedScript, Z_ as searchJson, vv as selectBuiltinTools, T_ as systemPromptHelpers, $ as toolError, xl as useChat, e as z, k_ as zodError };
17196
+ export { D_ as CONTEXT_PRESETS, Rh as ChatDialog, Qd as CodePreview, Tg as HUMAN_CONFIRM_TOOL_NAME, ef as MessageContent, u_ as connectMcp, cg as createAgent, wg as createApprovalMiddleware, ay as createChatSdk, Fg as createCheckpointManager, Ig as createCheckpointMiddleware, Og as createHumanConfirmMiddleware, Dg as createHumanConfirmTool, Uv as createMemoryBackend, qv as createSessionStore, Wg as createSubagentMiddleware, qg as createSubagentsMiddleware, Sv as createUsageHintsMiddleware, Jg as createVerifyMiddleware, N_ as createVfs, Gv as createWebStorageBackend, hv as createWindowOps, e_ as createWriteBackCheck, dg as defineSkill, oy as defineTool, yv as defineWindowToolset, rg as detectGarbledToolCall, Gh as estimateTokens, s_ as extractText, _v as fetchDocTools, vv as fetchTools, k_ as formatZodIssues, Fv as isQuotaError, X_ as jpEval, j_ as jsonParseError, qh as offloadPassThroughChars, Kh as offloadThresholdChars, T_ as presets, O_ as resolveContextOptions, Wh as resolveModelCaps, tv as runSandboxedScript, Q_ as searchJson, bv as selectBuiltinTools, E_ as systemPromptHelpers, $ as toolError, xl as useChat, e as z, A_ as zodError };