page-agent-sdk 2.38.1 → 2.38.2

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