page-agent-sdk 2.38.0 → 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,47 +395,47 @@ 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 Ke(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 Ke(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 Ke(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 Ke(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 Ke(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 Ke(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 Ke(this, "forEach", e, t, void 0, arguments);
438
+ return Ge(this, "forEach", e, t, void 0, arguments);
439
439
  },
440
440
  includes(...e) {
441
441
  return qe(this, "includes", e);
@@ -444,13 +444,13 @@ var Ue = {
444
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
450
  return qe(this, "lastIndexOf", e);
451
451
  },
452
452
  map(e, t) {
453
- return Ke(this, "map", e, t, void 0, arguments);
453
+ return Ge(this, "map", e, t, void 0, arguments);
454
454
  },
455
455
  pop() {
456
456
  return U(this, "pop");
@@ -459,68 +459,68 @@ var Ue = {
459
459
  return U(this, "push", e);
460
460
  },
461
461
  reduce(e, ...t) {
462
- return H(this, "reduce", e, t);
462
+ return Ke(this, "reduce", e, t);
463
463
  },
464
464
  reduceRight(e, ...t) {
465
- return H(this, "reduceRight", e, t);
465
+ return Ke(this, "reduceRight", e, t);
466
466
  },
467
467
  shift() {
468
468
  return U(this, "shift");
469
469
  },
470
470
  some(e, t) {
471
- return Ke(this, "some", e, t, void 0, arguments);
471
+ return Ge(this, "some", e, t, void 0, arguments);
472
472
  },
473
473
  splice(...e) {
474
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
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 Ke(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
  }));
512
512
  let u = c.call(o, l, r);
513
513
  return s && i ? i(u) : u;
514
514
  }
515
- function H(e, t, n, r) {
516
- let i = Ve(e), a = i !== e && !/* @__PURE__ */ Ct(e), o = n, s = !1;
515
+ function Ke(e, t, n, r) {
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
525
  function qe(e, t, n) {
526
526
  let r = /* @__PURE__ */ G(e);
@@ -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,8 +598,8 @@ 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), rt = (e) => e, W = (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
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() {
@@ -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 } = W(i), s = t ? rt : 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);
@@ -647,31 +647,31 @@ function ot(e, t) {
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 = W(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 } = W(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 } = W(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) {
@@ -2769,8 +2769,10 @@ function Ni(e, t, n) {
2769
2769
  let e = typeof r.shape == "function" ? r.shape() : r.shape;
2770
2770
  if (!(t in e)) return !1;
2771
2771
  r = e[t];
2772
- } else if (r && (r._def?.type === "array" || r.constructor?.name === "ZodArray")) r = r.element;
2773
- else if (r && (r._def?.type === "union" || r._def?.type === "discriminatedUnion" || Array.isArray(r.options))) return !0;
2772
+ } else if (r && (r._def?.type === "array" || r.constructor?.name === "ZodArray")) {
2773
+ if (!/^\d+$/.test(t)) return !1;
2774
+ r = r.element;
2775
+ } else if (r && (r._def?.type === "union" || r._def?.type === "discriminatedUnion" || Array.isArray(r.options))) return !0;
2774
2776
  else return !1;
2775
2777
  }
2776
2778
  return !0;
@@ -2800,8 +2802,10 @@ function Fi(e, t) {
2800
2802
  for (let e of r) {
2801
2803
  if (!n) return null;
2802
2804
  if (n = Pi(n), n && n.shape && typeof n.shape == "object") n = (typeof n.shape == "function" ? n.shape() : n.shape)[e];
2803
- else if (n && (n._def?.type === "array" || n.constructor?.name === "ZodArray")) n = n.element;
2804
- else if (n && (n._def?.type === "union" || n._def?.type === "discriminatedUnion" || Array.isArray(n.options))) return null;
2805
+ else if (n && (n._def?.type === "array" || n.constructor?.name === "ZodArray")) {
2806
+ if (!/^\d+$/.test(e)) return null;
2807
+ n = n.element;
2808
+ } else if (n && (n._def?.type === "union" || n._def?.type === "discriminatedUnion" || Array.isArray(n.options))) return null;
2805
2809
  else return null;
2806
2810
  }
2807
2811
  return n ?? null;
@@ -3181,8 +3185,7 @@ var ua = /* @__PURE__ */ new Set([
3181
3185
  "edit_data",
3182
3186
  "delete_data",
3183
3187
  "write",
3184
- "vfs_write",
3185
- "vfs_edit"
3188
+ "draft_commit"
3186
3189
  ]);
3187
3190
  function da(e) {
3188
3191
  let t = e ?? {}, n = /* @__PURE__ */ new Set();
@@ -3217,12 +3220,23 @@ function pa(e) {
3217
3220
  return n.join("\n");
3218
3221
  },
3219
3222
  wrapToolCall: async (e, n) => {
3220
- if (t.length && ua.has(e.name)) {
3221
- let n = da(e.args);
3222
- for (let e of n) if (!t.some((t) => fa(e, t.path))) return {
3223
- 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 或换焦点后重试。`,
3224
3226
  status: "error"
3225
- };
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
+ }
3226
3240
  }
3227
3241
  return n(e);
3228
3242
  },
@@ -3678,7 +3692,9 @@ var Fa = /* @__PURE__ */ new Set([
3678
3692
  "delete_data",
3679
3693
  "write",
3680
3694
  "vfs_write",
3681
- "vfs_edit"
3695
+ "vfs_edit",
3696
+ "draft_commit",
3697
+ "eval_script"
3682
3698
  ]), Ia = /* @__PURE__ */ new Set([
3683
3699
  "get_data",
3684
3700
  "describe_data",
@@ -3711,8 +3727,10 @@ function Ba(e) {
3711
3727
  return {
3712
3728
  name: "permissions",
3713
3729
  wrapToolCall: async (t, n) => {
3714
- let r = Fa.has(t.name) ? "write" : Ia.has(t.name) ? "read" : null, i = za(t.args);
3715
- 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) {
3716
3734
  for (let t of i) if (Ra(e, r, t) === "deny") return {
3717
3735
  content: `权限拒绝:${r} 操作 "${t}" 被 permissions 规则禁止。`,
3718
3736
  status: "error"
@@ -4221,56 +4239,77 @@ var So = [
4221
4239
  "search_data",
4222
4240
  "fetch_document"
4223
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 = [
4224
4259
  "write",
4225
4260
  "set_data",
4226
4261
  "edit_data",
4227
4262
  "delete_data",
4228
4263
  "draft_commit"
4229
4264
  ];
4230
- function Oo(e) {
4265
+ function jo(e) {
4231
4266
  let t = [];
4232
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);
4233
4268
  return t;
4234
4269
  }
4235
- function ko(e, t) {
4270
+ function Mo(e, t) {
4236
4271
  return t.some((t) => e === t || e.startsWith(t + ".") || e.startsWith(t + "["));
4237
4272
  }
4238
- function Ao(e, t) {
4273
+ function No(e, t) {
4239
4274
  let n = e.invoke.bind(e), r = async (e) => {
4240
- 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);
4241
4277
  if (!r.length) return `PATH_OUT_OF_SCOPE:子 agent 仅可增量 patch(writablePaths: ${t.join(", ")}),不能整体替换(无 jsonPath)。用 write({patch:{jsonPath,...}}) 增量改。`;
4242
- 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(", ")})。`;
4243
4279
  return n(e);
4244
4280
  };
4245
4281
  return new Proxy(e, { get(e, t, n) {
4246
4282
  return t === "invoke" ? r : Reflect.get(e, t, n);
4247
4283
  } });
4248
4284
  }
4249
- async function jo(e, t, n, r, i) {
4250
- 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 ?? []);
4251
4287
  if (t.writablePaths?.length) {
4252
- l = l.filter((e) => !Do.includes(e.name));
4253
- let e = c().filter((e) => Do.includes(e.name) && !Eo.includes(e.name)).map((e) => Ao(e, t.writablePaths));
4254
- 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];
4255
4291
  }
4256
- let u = a + 1 < o ? [Mo({
4292
+ let d = o + 1 < s ? [Fo({
4257
4293
  ...t,
4258
- depth: a + 1
4259
- })] : [], d = t.getFocuses?.() ?? [], f = d.length ? pa({
4294
+ depth: o + 1
4295
+ })] : [], f = t.getFocuses?.() ?? [], p = f.length ? pa({
4260
4296
  getSchema: t.getSchema ?? (() => null),
4261
- initialFocuses: d
4262
- }) : 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({
4263
4302
  model: xo(t.llm) ? t.llm.model ?? t.llm.modelName : e.model ?? t.llm.model,
4264
4303
  contextWindow: t.llm.contextWindow,
4265
4304
  maxOutputTokens: t.llm.maxOutputTokens
4266
4305
  });
4267
- if (p.contextWindow < 2e5) throw Error(`[page-agent-sdk][subagent] 子 agent 模型上下文窗口 ${p.contextWindow} 小于最小支持 ${ti}(需 ≥200K 窗口模型)`);
4268
- let m = t.summarization === void 0 ? void 0 : yo(typeof t.summarization == "object" ? {
4269
- 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,
4270
4309
  ...t.summarization
4271
- } : { contextWindow: p.contextWindow }), h = ji({
4272
- contextWindow: p.contextWindow,
4273
- maxOutputTokens: p.maxOutputTokens,
4310
+ } : { contextWindow: h.contextWindow }), _ = ji({
4311
+ contextWindow: h.contextWindow,
4312
+ maxOutputTokens: h.maxOutputTokens,
4274
4313
  ...xo(t.llm) ? { llm: t.llm } : {
4275
4314
  apiKey: t.llm.apiKey,
4276
4315
  baseUrl: t.llm.baseUrl,
@@ -4279,27 +4318,33 @@ async function jo(e, t, n, r, i) {
4279
4318
  maxTokens: t.maxTokens ?? t.llm.maxTokens
4280
4319
  },
4281
4320
  systemPrompt: e.role?.trim() || t.systemPrompt || "你是一个专注的子任务执行者。你只有只读工具(读主数据 / 抓文档),用它们完成给定任务,给出简洁结论,不要展开多余解释。",
4282
- tools: l,
4321
+ tools: u,
4283
4322
  middleware: [
4284
4323
  ...t.skills?.length ? [Na(t.skills)] : [],
4324
+ ...g ? [g] : [],
4285
4325
  ...m ? [m] : [],
4286
- ...u,
4287
- ...f ? [f] : [],
4326
+ ...d,
4327
+ ...p ? [p] : [],
4328
+ ...t.guardMiddleware ?? [],
4288
4329
  ...t.middleware ?? []
4289
4330
  ],
4290
4331
  maxToolRounds: t.maxToolRounds ?? To,
4291
4332
  onLog: i,
4292
4333
  debug: t.debug
4293
4334
  });
4294
- 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([{
4295
4336
  role: "user",
4296
4337
  content: e.prompt,
4297
4338
  timestamp: Date.now()
4298
4339
  }], (e) => {
4340
+ if (e.type === "approval_request") {
4341
+ a?.(e);
4342
+ return;
4343
+ }
4299
4344
  r && (e.type === "tool_call" || e.type === "tool_result") && r(e);
4300
4345
  }, n);
4301
4346
  }
4302
- function Mo(e) {
4347
+ function Fo(e) {
4303
4348
  let n = e.maxParallel ?? wo, i, a, o, s = (t, n) => (r) => {
4304
4349
  e.tracker?.pushStep(t, {
4305
4350
  kind: r.type,
@@ -4318,25 +4363,25 @@ function Mo(e) {
4318
4363
  };
4319
4364
  return {
4320
4365
  name: "subagent",
4321
- tools: [r(async ({ prompt: t, role: n, tools: r, writablePaths: a, model: c }) => {
4322
- 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 ? {
4323
4368
  ...e,
4324
- ...r?.length ? { allowedTools: r } : {},
4325
- ...a?.length ? { writablePaths: a } : {}
4326
- } : 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?.({
4327
4372
  ...e,
4328
- source: `子:${d}`
4329
- }), p = Date.now();
4330
- e.tracker?.start(u, t, d, p);
4373
+ source: `子:${p}`
4374
+ }), h = Date.now();
4375
+ e.tracker?.start(f, t, p, h);
4331
4376
  try {
4332
- let r = await jo({
4377
+ let r = await Po({
4333
4378
  prompt: t,
4334
4379
  role: n,
4335
- model: c
4336
- }, l, i, s(u, d), f);
4337
- 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;
4338
4383
  } catch (t) {
4339
- throw e.tracker?.finish(u, "error", String(t?.message ?? t)), t;
4384
+ throw e.tracker?.finish(f, "error", String(t?.message ?? t)), t;
4340
4385
  }
4341
4386
  }, {
4342
4387
  name: "spawn_agent",
@@ -4344,18 +4389,18 @@ function Mo(e) {
4344
4389
  schema: t.object({
4345
4390
  prompt: t.string().describe("子任务描述(子 agent 的唯一输入)"),
4346
4391
  role: t.string().optional().describe("子 agent 身份(如\"你是代码审查专家\")"),
4347
- tools: t.array(t.string()).optional().describe("子 agent 可用工具名白名单(默认只读主数据 + fetch)"),
4392
+ tools: t.array(t.string()).optional().describe("子 agent 可用工具名白名单(默认只读主数据 + fetch)。写工具不可自授——写权限用 writablePaths;委派/框架类工具系统保留不可授"),
4348
4393
  writablePaths: t.array(t.string()).optional().describe("子 agent 可写路径前缀(给写权限;越界 PATH_OUT_OF_SCOPE;如 [\"components\"] 允许写 components.* )"),
4349
4394
  model: t.string().optional().describe("覆盖模型(默认同主)")
4350
4395
  })
4351
4396
  }), r(async ({ tasks: t }) => (await Qr(t, n, async (t, n) => {
4352
- 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?.({
4353
4398
  ...e,
4354
- source: `子:${a}`
4355
- }), l = Date.now();
4356
- e.tracker?.start(r, t.prompt, a, l);
4399
+ source: `子:${c}`
4400
+ }), u = Date.now();
4401
+ e.tracker?.start(r, t.prompt, c, u);
4357
4402
  try {
4358
- let n = await jo(t, e, i, s(r, a), c);
4403
+ let n = await Po(t, e, i, s(r, c), l, a);
4359
4404
  return e.tracker?.finish(r, "done", n ?? "(未完成)"), n;
4360
4405
  } catch (t) {
4361
4406
  throw e.tracker?.finish(r, "error", String(t?.message ?? t)), t;
@@ -4371,8 +4416,8 @@ function Mo(e) {
4371
4416
  wrapToolCall: async (e, t) => (e.signal && (i = e.signal), e.emit && (a = e.emit), e.logSink && (o = e.logSink), t(e))
4372
4417
  };
4373
4418
  }
4374
- var No = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
4375
- function Po(e, t) {
4419
+ var Io = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
4420
+ function Lo(e, t) {
4376
4421
  let n = e.tools ?? [];
4377
4422
  return {
4378
4423
  llm: e.llm ?? t.llm,
@@ -4390,10 +4435,12 @@ function Po(e, t) {
4390
4435
  ...e.summarization === void 0 ? {} : { summarization: e.summarization },
4391
4436
  ...t.getFocuses ? { getFocuses: t.getFocuses } : {},
4392
4437
  ...t.getSchema ? { getSchema: t.getSchema } : {},
4393
- ...t.tracker ? { tracker: t.tracker } : {}
4438
+ ...t.tracker ? { tracker: t.tracker } : {},
4439
+ ...t.guardMiddleware?.length ? { guardMiddleware: t.guardMiddleware } : {},
4440
+ ...t.getVfsFiles ? { getVfsFiles: t.getVfsFiles } : {}
4394
4441
  };
4395
4442
  }
4396
- function Fo(e, n) {
4443
+ function Ro(e, n) {
4397
4444
  let i, a, o, s = (e, t) => (n) => {
4398
4445
  a && a({
4399
4446
  type: "subagent",
@@ -4407,44 +4454,44 @@ function Fo(e, n) {
4407
4454
  });
4408
4455
  }, c = [], l = [], u;
4409
4456
  function d(e) {
4410
- let a = /* @__PURE__ */ new Set(), c = [], l = [];
4411
- for (let u of e) {
4412
- if (!No.test(u.id)) {
4413
- 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_]*),已跳过`);
4414
4461
  continue;
4415
4462
  }
4416
- let e = `use_${u.id}`;
4417
- if (a.has(e)) {
4418
- console.warn(`[subagents] id "${u.id}" 重复,已跳过`);
4463
+ let e = `use_${d.id}`;
4464
+ if (c.has(e)) {
4465
+ console.warn(`[subagents] id "${d.id}" 重复,已跳过`);
4419
4466
  continue;
4420
4467
  }
4421
- a.add(e), c.push(u), l.push(r(async ({ task: e }) => {
4422
- 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?.({
4423
4470
  ...e,
4424
- source: `子:${u.id}`
4425
- }), 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) => {
4426
- 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, {
4427
4474
  kind: e.type,
4428
4475
  name: e.name,
4429
4476
  ts: Date.now()
4430
- }), l(e);
4431
- } : l, f = Date.now();
4432
- a?.start(c, e, u.id, f);
4477
+ }), u(e);
4478
+ } : u, p = Date.now();
4479
+ c?.start(l, e, d.id, p);
4433
4480
  try {
4434
- let n = await jo({ prompt: e }, t, i, d, r);
4435
- 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;
4436
4483
  } catch (e) {
4437
- throw a?.finish(c, "error", String(e?.message ?? e)), e;
4484
+ throw c?.finish(l, "error", String(e?.message ?? e)), e;
4438
4485
  }
4439
4486
  }, {
4440
- name: `use_${u.id}`,
4441
- description: `委派给「${u.description}」子 agent 执行任务,返回其结论(过程隔离,不占主上下文)。`,
4487
+ name: `use_${d.id}`,
4488
+ description: `委派给「${d.description}」子 agent 执行任务,返回其结论(过程隔离,不占主上下文)。`,
4442
4489
  schema: t.object({ task: t.string().describe("委派给该子 agent 的任务描述") })
4443
4490
  }));
4444
4491
  }
4445
4492
  return {
4446
- valid: c,
4447
- tools: l
4493
+ valid: l,
4494
+ tools: u
4448
4495
  };
4449
4496
  }
4450
4497
  let f = d(e);
@@ -4492,7 +4539,7 @@ function Fo(e, n) {
4492
4539
  }
4493
4540
  //#endregion
4494
4541
  //#region src/core/harness/verify.ts
4495
- function Io(e) {
4542
+ function zo(e) {
4496
4543
  return {
4497
4544
  name: "verify",
4498
4545
  async beforeReturn({ messages: t, state: n, log: r }) {
@@ -4504,10 +4551,10 @@ function Io(e) {
4504
4551
  if (e.adversarial) {
4505
4552
  r?.("middleware", {
4506
4553
  stage: "adversarial_start",
4507
- model: Wo(e.adversarial.llm),
4554
+ model: qo(e.adversarial.llm),
4508
4555
  tools: (e.adversarial.tools ?? []).length
4509
4556
  });
4510
- 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);
4511
4558
  if (r?.("middleware", {
4512
4559
  stage: "adversarial_done",
4513
4560
  clean: n === null,
@@ -4518,18 +4565,18 @@ function Io(e) {
4518
4565
  }
4519
4566
  };
4520
4567
  }
4521
- var Lo = /* @__PURE__ */ new Set([
4568
+ var Bo = /* @__PURE__ */ new Set([
4522
4569
  "set_data",
4523
4570
  "edit_data",
4524
4571
  "delete_data",
4525
4572
  "write"
4526
- ]), Ro = /校验失败|SCHEMA_INVALID|未注册|不存在|仅支持|必须是|NOT_OBJECT|PATH_UNSAFE|VERSION_CONFLICT|WRITE_INTERCEPT/;
4527
- function zo(e) {
4573
+ ]), Vo = /校验失败|SCHEMA_INVALID|未注册|不存在|仅支持|必须是|NOT_OBJECT|PATH_UNSAFE|VERSION_CONFLICT|WRITE_INTERCEPT/;
4574
+ function Ho(e) {
4528
4575
  let t = /* @__PURE__ */ new Map();
4529
4576
  for (let n of e) {
4530
4577
  let e = n?.tool_calls;
4531
4578
  if (Array.isArray(e)) for (let n of e) {
4532
- if (!Lo.has(n.name)) continue;
4579
+ if (!Bo.has(n.name)) continue;
4533
4580
  let e = n.id, r = n?.args ?? {};
4534
4581
  if (n.name === "write") if (r.del && r.patch?.jsonPath) t.set(r.patch.jsonPath, {
4535
4582
  path: r.patch.jsonPath,
@@ -4568,7 +4615,7 @@ function zo(e) {
4568
4615
  }
4569
4616
  return [...t.values()];
4570
4617
  }
4571
- function Bo(e) {
4618
+ function Uo(e) {
4572
4619
  let t = /* @__PURE__ */ new Map();
4573
4620
  for (let n of e) {
4574
4621
  let e = n?.tool_call_id, r = n?.content;
@@ -4576,7 +4623,7 @@ function Bo(e) {
4576
4623
  }
4577
4624
  return t;
4578
4625
  }
4579
- function Vo(e, t) {
4626
+ function Wo(e, t) {
4580
4627
  if (t === "") return e;
4581
4628
  if (e == null) return;
4582
4629
  let n = e;
@@ -4586,16 +4633,16 @@ function Vo(e, t) {
4586
4633
  }
4587
4634
  return n;
4588
4635
  }
4589
- function Ho(e = {}) {
4636
+ function Go(e = {}) {
4590
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 ?? {};
4591
4638
  return async ({ messages: e }) => {
4592
- let r = zo(e);
4639
+ let r = Ho(e);
4593
4640
  if (!r.length) return { ok: !0 };
4594
- let i = Bo(e), a = n()[""], o = t(), s = [];
4641
+ let i = Uo(e), a = n()[""], o = t(), s = [];
4595
4642
  for (let { path: e, op: t, callId: n } of r) {
4596
4643
  let r = n ? i.get(n) : void 0;
4597
- if (r && Ro.test(r)) continue;
4598
- let c = Vo(o, e);
4644
+ if (r && Vo.test(r)) continue;
4645
+ let c = Wo(o, e);
4599
4646
  if (t === "delete_data") c !== void 0 && s.push(`${e} 删除后读回仍有值,疑似未生效`);
4600
4647
  else if (c == null) s.push(`写入 ${e} 后读回为空,疑似未生效`);
4601
4648
  else if (a) {
@@ -4609,17 +4656,17 @@ function Ho(e = {}) {
4609
4656
  } : { ok: !0 };
4610
4657
  };
4611
4658
  }
4612
- function Uo(e) {
4659
+ function Ko(e) {
4613
4660
  return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
4614
4661
  }
4615
- function Wo(e) {
4616
- return Uo(e) ? e.model ?? e.modelName ?? "<实例>" : e.model ?? "<配置>";
4662
+ function qo(e) {
4663
+ return Ko(e) ? e.model ?? e.modelName ?? "<实例>" : e.model ?? "<配置>";
4617
4664
  }
4618
- var Go = /无问题|没有问题|未发现问题|没有发现|没问题|未发现/;
4619
- function Ko(e) {
4620
- return Go.test(e);
4665
+ var Jo = /无问题|没有问题|未发现问题|没有发现|没问题|未发现/;
4666
+ function Yo(e) {
4667
+ return Jo.test(e);
4621
4668
  }
4622
- function qo(e) {
4669
+ function Xo(e) {
4623
4670
  let t = "", n = "";
4624
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 : "");
4625
4672
  return {
@@ -4627,8 +4674,8 @@ function qo(e) {
4627
4674
  lastReply: n
4628
4675
  };
4629
4676
  }
4630
- async function Jo(e, t, n, r) {
4631
- let { lastUser: i, lastReply: a } = qo(e);
4677
+ async function Zo(e, t, n, r) {
4678
+ let { lastUser: i, lastReply: a } = Xo(e);
4632
4679
  if (!a) return null;
4633
4680
  let o = Array.isArray(r) && r.length > 0, s = [
4634
4681
  "你是严格的对抗式审查者,目标是找出以下 AI 助手回复的错误并证明它有问题(事实错误 / 遗漏 / 逻辑矛盾 / 与需求不符)。",
@@ -4639,7 +4686,7 @@ async function Jo(e, t, n, r) {
4639
4686
  ].join("\n"), c = "你是严格的对抗式审查者,只找问题不赞美。目标是反驳,不是改进。", l = n ? (e) => n(e.type, {
4640
4687
  ...e.data,
4641
4688
  source: "adversarial"
4642
- }) : void 0, u = await ji(Uo(t) ? {
4689
+ }) : void 0, u = await ji(Ko(t) ? {
4643
4690
  llm: t,
4644
4691
  tools: r,
4645
4692
  maxToolRounds: o ? 4 : 1,
@@ -4664,11 +4711,11 @@ async function Jo(e, t, n, r) {
4664
4711
  stage: "adversarial_verdict",
4665
4712
  verdict: u,
4666
4713
  source: "adversarial"
4667
- }), Ko(u) ? null : u.trim();
4714
+ }), Yo(u) ? null : u.trim();
4668
4715
  }
4669
4716
  //#endregion
4670
4717
  //#region src/core/utils/contextAnalysis.ts
4671
- var Yo = [
4718
+ var Qo = [
4672
4719
  {
4673
4720
  prefix: "## 可操作数据",
4674
4721
  key: "dataHint"
@@ -4697,7 +4744,7 @@ var Yo = [
4697
4744
  prefix: "【与当前问题可能相关的早期对话】",
4698
4745
  key: "recall"
4699
4746
  }
4700
- ], Xo = [
4747
+ ], $o = [
4701
4748
  {
4702
4749
  key: "systemPrompt",
4703
4750
  label: "系统提示词(身份/规则)"
@@ -4751,9 +4798,9 @@ var Yo = [
4751
4798
  label: "其他"
4752
4799
  }
4753
4800
  ];
4754
- function Zo() {
4801
+ function es() {
4755
4802
  let e = {};
4756
- for (let t of Xo) e[t.key] = {
4803
+ for (let t of $o) e[t.key] = {
4757
4804
  key: t.key,
4758
4805
  label: t.label,
4759
4806
  tokens: 0,
@@ -4762,16 +4809,16 @@ function Zo() {
4762
4809
  };
4763
4810
  return e;
4764
4811
  }
4765
- function Qo(e, t) {
4812
+ function ts(e, t) {
4766
4813
  e.tokens += t, e.msgCount += 1;
4767
4814
  }
4768
- function $o(e) {
4815
+ function ns(e) {
4769
4816
  let t = e.content;
4770
4817
  return typeof t == "string" ? t : JSON.stringify(t ?? "");
4771
4818
  }
4772
- function es(e, t) {
4819
+ function rs(e, t) {
4773
4820
  let n = [];
4774
- for (let t of Yo) {
4821
+ for (let t of Qo) {
4775
4822
  let r = 0;
4776
4823
  for (;;) {
4777
4824
  let i = e.indexOf(t.prefix, r);
@@ -4784,35 +4831,35 @@ function es(e, t) {
4784
4831
  }
4785
4832
  if (n.sort((e, t) => e.idx - t.idx), !n.length) {
4786
4833
  let n = e.trim();
4787
- n && Qo(t.systemPrompt, X(n));
4834
+ n && ts(t.systemPrompt, X(n));
4788
4835
  return;
4789
4836
  }
4790
4837
  if (n[0].idx > 0) {
4791
4838
  let r = e.slice(0, n[0].idx).trim();
4792
- r && Qo(t.systemPrompt, X(r));
4839
+ r && ts(t.systemPrompt, X(r));
4793
4840
  }
4794
4841
  for (let r = 0; r < n.length; r++) {
4795
4842
  let i = n[r].idx, a = r + 1 < n.length ? n[r + 1].idx : e.length, o = e.slice(i, a).trim();
4796
- o && Qo(t[n[r].key], X(o));
4843
+ o && ts(t[n[r].key], X(o));
4797
4844
  }
4798
4845
  }
4799
- function ts(e, t = {}) {
4800
- let n = Zo(), r = -1;
4846
+ function is(e, t = {}) {
4847
+ let n = es(), r = -1;
4801
4848
  for (let t = e.length - 1; t >= 0; t--) if (e[t] instanceof a) {
4802
4849
  r = t;
4803
4850
  break;
4804
4851
  }
4805
4852
  for (let t = 0; t < e.length; t++) {
4806
4853
  let c = e[t];
4807
- if (c instanceof o) es($o(c), n);
4808
- 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)));
4809
4856
  else if (c instanceof i) {
4810
4857
  let e = c.tool_calls ?? [];
4811
4858
  if (e.length) {
4812
4859
  let t = e.map((e) => JSON.stringify(e.args ?? {})).join(" ");
4813
- Qo(n.toolResults, X(t));
4814
- } else Qo(n.assistant, X($o(c)));
4815
- } 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)));
4816
4863
  }
4817
4864
  let c = Object.values(n).filter((e) => e.tokens > 0);
4818
4865
  c.sort((e, t) => t.tokens - e.tokens);
@@ -4829,12 +4876,12 @@ function ts(e, t = {}) {
4829
4876
  }
4830
4877
  //#endregion
4831
4878
  //#region src/core/harness/contextInspector.ts
4832
- function ns(e = {}) {
4879
+ function as(e = {}) {
4833
4880
  let t, n = e.contextWindow;
4834
4881
  return {
4835
4882
  name: "context-inspector",
4836
4883
  async wrapModelCall(r, i) {
4837
- return t = ts(r.messages, {
4884
+ return t = is(r.messages, {
4838
4885
  contextWindow: n,
4839
4886
  thresholdRatio: e.thresholdRatio
4840
4887
  }), i(r);
@@ -4847,13 +4894,13 @@ function ns(e = {}) {
4847
4894
  }
4848
4895
  //#endregion
4849
4896
  //#region src/core/mcp/client.ts
4850
- function rs(e) {
4897
+ function os(e) {
4851
4898
  let t = e?.content;
4852
4899
  if (!Array.isArray(t) || !t.length) return "";
4853
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");
4854
4901
  return e?.isError ? `工具错误:${n}` : n;
4855
4902
  }
4856
- async function is(e) {
4903
+ async function ss(e) {
4857
4904
  let t = new URL(e.url), n = e.requestInit;
4858
4905
  if (e.transport === "http") {
4859
4906
  let { StreamableHTTPClientTransport: e } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
@@ -4866,8 +4913,8 @@ async function is(e) {
4866
4913
  let { WebSocketClientTransport: r } = await import("@modelcontextprotocol/sdk/client/websocket.js");
4867
4914
  return new r(t);
4868
4915
  }
4869
- function as(e, t) {
4870
- return r(async (n) => rs(await t.callTool({
4916
+ function cs(e, t) {
4917
+ return r(async (n) => os(await t.callTool({
4871
4918
  name: e.name,
4872
4919
  arguments: n
4873
4920
  })), {
@@ -4876,39 +4923,39 @@ function as(e, t) {
4876
4923
  schema: e.inputSchema
4877
4924
  });
4878
4925
  }
4879
- async function os(e) {
4880
- 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({
4881
4928
  name: "page-agent-sdk",
4882
4929
  version: "1.0"
4883
4930
  }, { capabilities: {} });
4884
4931
  await r.connect(n);
4885
4932
  let { tools: i } = await r.listTools();
4886
4933
  return {
4887
- tools: i.map((e) => as(e, r)),
4934
+ tools: i.map((e) => cs(e, r)),
4888
4935
  close: () => r.close()
4889
4936
  };
4890
4937
  }
4891
4938
  //#endregion
4892
4939
  //#region src/core/sdk/promptBuilder.ts
4893
- var ss = [
4940
+ var us = [
4894
4941
  "你是一个 JSON 操作助手。集成方声明了一个主数据对象(含 zod schema 校验),你通过专用工具安全地读写它来完成任务。",
4895
4942
  "所有写操作都经范围控制(仅 schema 声明字段内)与 schema 校验(不合法会返回结构化错误而非写入),并自动留快照可回退。",
4896
4943
  "大对象/数组优先用增量 patch(只发改动)而非整体重传,避免输出被截断。",
4897
4944
  "---",
4898
4945
  ia.reliableWriteRules
4899
4946
  ].join("\n\n");
4900
- function cs(e, t) {
4947
+ function ds(e, t) {
4901
4948
  if (!e) return "";
4902
4949
  let n = ca(e.schema, t);
4903
4950
  return `\n\n## 可操作数据(字段以 read 工具返回的实际值为准)\n${e.description ? e.description + "\n" : ""}${n}`;
4904
4951
  }
4905
- function ls(e) {
4952
+ function fs(e) {
4906
4953
  let t = e.appendReliableWriteRules !== !1;
4907
- 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;
4908
4955
  }
4909
4956
  //#endregion
4910
4957
  //#region src/core/sdk/defineTool.ts
4911
- function us(e) {
4958
+ function ps(e) {
4912
4959
  return r(async (t) => {
4913
4960
  let n = await e.handler(t);
4914
4961
  return typeof n == "string" ? n : JSON.stringify(n);
@@ -4920,7 +4967,7 @@ function us(e) {
4920
4967
  }
4921
4968
  //#endregion
4922
4969
  //#region src/core/sdk/inspectContextTool.ts
4923
- var ds = t.object({
4970
+ var ms = t.object({
4924
4971
  path: t.string().optional().describe("分类 key 过滤(如 toolResults/history/systemPrompt/dataHint);不传=全部分类"),
4925
4972
  role: t.enum([
4926
4973
  "user",
@@ -4930,11 +4977,11 @@ var ds = t.object({
4930
4977
  ]).optional().describe("聚焦每轮首句的角色(assistant→回复摘要,user→问题摘要);不影响工具列表"),
4931
4978
  limit: t.number().int().min(1).max(50).optional().describe("返回最近 N 轮(默认全部;超 50 自动截最近 50 防返回过大)")
4932
4979
  });
4933
- function fs(e) {
4934
- return us({
4980
+ function hs(e) {
4981
+ return ps({
4935
4982
  name: "inspect_context",
4936
4983
  description: "查看当前对话上下文的构成(供压缩决策)。返回:totalTokens(历史轮次 token 总和,与触发判断同口径)、occupancy(窗口占用比)、contextWindow、categories(分类占用)、rounds(每轮 token/工具/首句)。先调用本工具查看构成,再决定压缩策略。",
4937
- schema: ds,
4984
+ schema: ms,
4938
4985
  handler: (t) => {
4939
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) => {
4940
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);
@@ -4957,7 +5004,7 @@ function fs(e) {
4957
5004
  }
4958
5005
  //#endregion
4959
5006
  //#region src/core/sdk/compressDecision.ts
4960
- var ps = t.object({
5007
+ var gs = t.object({
4961
5008
  keepRounds: t.number().int().min(0).max(50).optional(),
4962
5009
  windowRatio: t.number().min(0).max(1).optional(),
4963
5010
  summarize: t.object({ mode: t.enum(["index", "llm"]) }),
@@ -4967,23 +5014,23 @@ var ps = t.object({
4967
5014
  }).refine((e) => e.keepRounds !== void 0 || e.windowRatio !== void 0, { message: "keepRounds 与 windowRatio 至少填一个(按当前触发模式)" });
4968
5015
  //#endregion
4969
5016
  //#region src/core/sdk/llmResolver.ts
4970
- function ms(e) {
5017
+ function _s(e) {
4971
5018
  let t = e.find((e) => e.role === "user");
4972
5019
  if (!t) return;
4973
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, " ");
4974
5021
  if (r) return r.length > 30 ? r.slice(0, 30) + "…" : r;
4975
5022
  }
4976
- function hs(e) {
5023
+ function vs(e) {
4977
5024
  return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
4978
5025
  }
4979
- function gs(e) {
5026
+ function ys(e) {
4980
5027
  let t = e.content;
4981
5028
  return typeof t == "string" ? t : Array.isArray(t) ? t.map((e) => typeof e == "string" ? e : e?.text ?? "").join("") : String(t ?? "");
4982
5029
  }
4983
- function _s(e) {
5030
+ function bs(e) {
4984
5031
  let t = e.summaryLlm ?? e.llm;
4985
5032
  if (!t) return;
4986
- 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;
4987
5034
  if (c && !c.apiKey) {
4988
5035
  e.summaryLlm && console.warn("[page-agent-sdk][summarization] summaryLlm 已配置但缺 apiKey,摘要回退主 agent 模型或零成本索引摘要");
4989
5036
  return;
@@ -4995,16 +5042,16 @@ function _s(e) {
4995
5042
  return !l && c && (l = await f(c, {
4996
5043
  temperature: n,
4997
5044
  maxTokens: r
4998
- })), 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();
4999
5046
  } finally {
5000
5047
  clearTimeout(s);
5001
5048
  }
5002
5049
  };
5003
5050
  }
5004
- function vs(e) {
5051
+ function xs(e) {
5005
5052
  let t = e.titleLlm ?? e.summaryLlm ?? e.llm;
5006
5053
  if (!t) return;
5007
- let n = hs(t) ? t : null, r = hs(t) ? null : t;
5054
+ let n = vs(t) ? t : null, r = vs(t) ? null : t;
5008
5055
  if (r && !r.apiKey) return;
5009
5056
  let i = n;
5010
5057
  return async (e) => {
@@ -5013,7 +5060,7 @@ function vs(e) {
5013
5060
  return !i && r && (i = await f(r, {
5014
5061
  temperature: 0,
5015
5062
  maxTokens: 30
5016
- })), 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);
5017
5064
  } catch {
5018
5065
  return "";
5019
5066
  } finally {
@@ -5021,10 +5068,10 @@ function vs(e) {
5021
5068
  }
5022
5069
  };
5023
5070
  }
5024
- function ys() {
5071
+ function Ss() {
5025
5072
  return `call_dec_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
5026
5073
  }
5027
- function bs(e) {
5074
+ function Cs(e) {
5028
5075
  let t = e.match(/```(?:json)?\s*([\s\S]*?)```/), n = t ? t[1] : e, r = n.indexOf("{"), i = n.lastIndexOf("}");
5029
5076
  if (r < 0 || i < 0 || i <= r) return null;
5030
5077
  try {
@@ -5033,21 +5080,21 @@ function bs(e) {
5033
5080
  return null;
5034
5081
  }
5035
5082
  }
5036
- function xs(e) {
5083
+ function ws(e) {
5037
5084
  if (!e) return null;
5038
- let t = bs(e);
5085
+ let t = Cs(e);
5039
5086
  if (t == null) return null;
5040
- let n = ps.safeParse(t);
5087
+ let n = gs.safeParse(t);
5041
5088
  return n.success ? n.data : null;
5042
5089
  }
5043
- async function Ss(e, t, n, r) {
5090
+ async function Ts(e, t, n, r) {
5044
5091
  let i = [...n];
5045
5092
  for (let n = 0; n < 3; n++) {
5046
5093
  let n = await e.invoke(i, { signal: r }), a = n?.tool_calls ?? [];
5047
- if (!a.length) return gs(n).trim();
5094
+ if (!a.length) return ys(n).trim();
5048
5095
  i = [...i, n];
5049
5096
  for (let e of a) {
5050
- let n = e.id ?? ys();
5097
+ let n = e.id ?? Ss();
5051
5098
  try {
5052
5099
  let r = await t.invoke(e.args ?? {}), a = typeof r == "string" ? r : r?.content ?? JSON.stringify(r);
5053
5100
  i = [...i, new s({
@@ -5064,10 +5111,10 @@ async function Ss(e, t, n, r) {
5064
5111
  }
5065
5112
  return "";
5066
5113
  }
5067
- function Cs(e) {
5114
+ function Es(e) {
5068
5115
  let t = e.summaryLlm ?? e.llm;
5069
5116
  if (!t) return;
5070
- let n = hs(t) ? t : null, r = hs(t) ? null : t;
5117
+ let n = vs(t) ? t : null, r = vs(t) ? null : t;
5071
5118
  if (r && !r.apiKey) return;
5072
5119
  let i = e.decisionTimeoutMs ?? 6e3, s = e.decisionMaxTokens ?? 2048, c = n;
5073
5120
  return async (e) => {
@@ -5079,12 +5126,12 @@ function Cs(e) {
5079
5126
  }));
5080
5127
  let n = c;
5081
5128
  if (typeof n.bindTools != "function") return null;
5082
- let i = fs({
5129
+ let i = hs({
5083
5130
  getMessages: e.getMessages,
5084
5131
  getSnapshot: e.getSnapshot,
5085
5132
  contextWindow: e.contextWindow
5086
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)。`)];
5087
- 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));
5088
5135
  } catch {
5089
5136
  return null;
5090
5137
  } finally {
@@ -5092,22 +5139,22 @@ function Cs(e) {
5092
5139
  }
5093
5140
  };
5094
5141
  }
5095
- function ws(e) {
5096
- 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;
5097
5144
  return {
5098
5145
  modelCaps: ni({
5099
5146
  model: n?.model ?? t?.model ?? t?.modelName,
5100
5147
  contextWindow: e.contextWindow ?? n?.contextWindow ?? t?.contextWindow,
5101
5148
  maxOutputTokens: e.maxOutputTokens ?? n?.maxOutputTokens ?? t?.maxOutputTokens
5102
5149
  }),
5103
- summaryLlmInvoke: _s(e),
5104
- titleLlmInvoke: vs(e),
5105
- compressDecisionInvoke: Cs(e)
5150
+ summaryLlmInvoke: bs(e),
5151
+ titleLlmInvoke: xs(e),
5152
+ compressDecisionInvoke: Es(e)
5106
5153
  };
5107
5154
  }
5108
5155
  //#endregion
5109
5156
  //#region src/core/sdk/conflictManager.ts
5110
- function Ts(e) {
5157
+ function Os(e) {
5111
5158
  let t = /* @__PURE__ */ Ot(null), n = 0;
5112
5159
  function r(r) {
5113
5160
  return new Promise((i) => {
@@ -5138,7 +5185,7 @@ function Ts(e) {
5138
5185
  }
5139
5186
  //#endregion
5140
5187
  //#region src/core/utils/id.ts
5141
- function Es() {
5188
+ function ks() {
5142
5189
  try {
5143
5190
  if (typeof crypto < "u" && typeof crypto.randomUUID == "function") return crypto.randomUUID();
5144
5191
  } catch {}
@@ -5146,7 +5193,7 @@ function Es() {
5146
5193
  }
5147
5194
  //#endregion
5148
5195
  //#region src/core/backends/storage.ts
5149
- 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 = [
5150
5197
  "messages",
5151
5198
  "vfs",
5152
5199
  "todos",
@@ -5157,51 +5204,51 @@ var Ds = "chat-sdk", Os = 50 * 1024 * 1024, ks = 4 * 1024 * 1024, As = 10 * 1024
5157
5204
  "workingMemory",
5158
5205
  "focus"
5159
5206
  ];
5160
- function Ls(e) {
5161
- return e === "local" || e === "session" ? ks : Os;
5207
+ function Bs(e) {
5208
+ return e === "local" || e === "session" ? Ms : js;
5162
5209
  }
5163
- function Rs(e) {
5210
+ function Vs(e) {
5164
5211
  if (typeof e != "object" || !e) return !1;
5165
5212
  let t = e;
5166
5213
  return t.name === "QuotaExceededError" || t.name === "NS_ERROR_DOM_QUOTA_REACHED" || t.code === 22 || t.code === 1014;
5167
5214
  }
5168
- function zs(e, t, n, r) {
5215
+ function Hs(e, t, n, r) {
5169
5216
  return [
5170
- Fs,
5217
+ Rs,
5171
5218
  e,
5172
5219
  t,
5173
5220
  n,
5174
5221
  r
5175
5222
  ].join("::");
5176
5223
  }
5177
- function Bs(e, t, n) {
5224
+ function Us(e, t, n) {
5178
5225
  return [
5179
- Fs,
5226
+ Rs,
5180
5227
  e,
5181
5228
  t,
5182
5229
  n
5183
5230
  ].join("::") + "::";
5184
5231
  }
5185
- function Vs(e, t) {
5232
+ function Ws(e, t) {
5186
5233
  return [
5187
- Fs,
5234
+ Rs,
5188
5235
  e,
5189
5236
  t
5190
5237
  ].join("::") + "::";
5191
5238
  }
5192
- function Hs(e) {
5193
- return [Fs, e].join("::") + "::";
5239
+ function Gs(e) {
5240
+ return [Rs, e].join("::") + "::";
5194
5241
  }
5195
- var Us = null;
5196
- function Ws(e) {
5197
- Us ||= new TextEncoder();
5242
+ var Ks = null;
5243
+ function qs(e) {
5244
+ Ks ||= new TextEncoder();
5198
5245
  try {
5199
- return Us.encode(JSON.stringify(e)).length;
5246
+ return Ks.encode(JSON.stringify(e)).length;
5200
5247
  } catch {
5201
5248
  return 0;
5202
5249
  }
5203
5250
  }
5204
- function Gs(e, t, n) {
5251
+ function Js(e, t, n) {
5205
5252
  let r = e.reduce((e, t) => e + t.bytes, 0);
5206
5253
  if (r <= t) return [];
5207
5254
  let i = t * n, a = [...e].sort((e, t) => e.lastAccessed - t.lastAccessed), o = [];
@@ -5211,7 +5258,7 @@ function Gs(e, t, n) {
5211
5258
  }
5212
5259
  return o;
5213
5260
  }
5214
- function Ks() {
5261
+ function Ys() {
5215
5262
  let e = /* @__PURE__ */ new Map();
5216
5263
  return {
5217
5264
  async get(t) {
@@ -5231,7 +5278,7 @@ function Ks() {
5231
5278
  }
5232
5279
  };
5233
5280
  }
5234
- function qs(e) {
5281
+ function Xs(e) {
5235
5282
  return new Promise((t, n) => {
5236
5283
  if (typeof indexedDB > "u") {
5237
5284
  n(/* @__PURE__ */ Error("indexedDB 不可用"));
@@ -5292,11 +5339,15 @@ function qs(e) {
5292
5339
  }, r.onerror = () => n(r.error);
5293
5340
  });
5294
5341
  }
5295
- function Js(e) {
5342
+ function Zs(e) {
5296
5343
  return {
5297
5344
  async get(t) {
5298
5345
  let n = e.getItem(t);
5299
- return n == null ? void 0 : JSON.parse(n);
5346
+ if (n != null) try {
5347
+ return JSON.parse(n);
5348
+ } catch {
5349
+ return;
5350
+ }
5300
5351
  },
5301
5352
  async set(t, n) {
5302
5353
  e.setItem(t, JSON.stringify(n));
@@ -5313,7 +5364,14 @@ function Js(e) {
5313
5364
  r.sort();
5314
5365
  for (let t of r) {
5315
5366
  let r = e.getItem(t);
5316
- if (r != null && n(t, JSON.parse(r)) === !1) return;
5367
+ if (r == null) continue;
5368
+ let i;
5369
+ try {
5370
+ i = JSON.parse(r);
5371
+ } catch {
5372
+ continue;
5373
+ }
5374
+ if (n(t, i) === !1) return;
5317
5375
  }
5318
5376
  },
5319
5377
  async clearPrefix(t) {
@@ -5326,12 +5384,12 @@ function Js(e) {
5326
5384
  }
5327
5385
  };
5328
5386
  }
5329
- function Ys(e, t, n) {
5387
+ function Qs(e, t, n) {
5330
5388
  let r = (e.get(t) ?? Promise.resolve()).then(n, n);
5331
5389
  return e.set(t, r.then(() => void 0, () => void 0)), r;
5332
5390
  }
5333
- function Xs(e = {}) {
5334
- 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();
5335
5393
  function c(e) {
5336
5394
  for (let t of s) try {
5337
5395
  t(e);
@@ -5344,16 +5402,16 @@ function Xs(e = {}) {
5344
5402
  try {
5345
5403
  if (n === "indexed") {
5346
5404
  if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
5347
- l = await qs(t), d(!0);
5405
+ l = await Xs(t), d(!0);
5348
5406
  } else if (n === "session") {
5349
5407
  if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
5350
- l = Js(sessionStorage), d(!0);
5408
+ l = Zs(sessionStorage), d(!0);
5351
5409
  } else if (n === "local") {
5352
5410
  if (typeof localStorage > "u") throw Error("localStorage 不可用");
5353
- l = Js(localStorage), d(!0);
5354
- } else l = Ks(), d(!1);
5411
+ l = Zs(localStorage), d(!0);
5412
+ } else l = Ys(), d(!1);
5355
5413
  } catch (e) {
5356
- l = Ks();
5414
+ l = Ys();
5357
5415
  let t = e instanceof Error ? e.message : String(e);
5358
5416
  d(!1), Promise.resolve().then(() => c({
5359
5417
  type: "degraded",
@@ -5363,10 +5421,10 @@ function Xs(e = {}) {
5363
5421
  })();
5364
5422
  let p = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map();
5365
5423
  function g(e, n, r, a) {
5366
- let o = zs(t, r, a, Ps);
5367
- return Ys(h, o, async () => {
5424
+ let o = Hs(t, r, a, Ls);
5425
+ return Qs(h, o, async () => {
5368
5426
  let t = async () => {
5369
- 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);
5370
5428
  if (f > i) {
5371
5429
  c({
5372
5430
  type: "quota",
@@ -5388,12 +5446,12 @@ function Xs(e = {}) {
5388
5446
  try {
5389
5447
  await t();
5390
5448
  } catch (e) {
5391
- if (Rs(e) && !u) {
5449
+ if (Vs(e) && !u) {
5392
5450
  u = !0;
5393
5451
  try {
5394
5452
  await b();
5395
5453
  } catch {}
5396
- l = Ks(), Promise.resolve().then(() => c({
5454
+ l = Ys(), Promise.resolve().then(() => c({
5397
5455
  type: "degraded",
5398
5456
  reason: "存储配额超限(QuotaExceededError),已淘汰最旧会话并降级内存"
5399
5457
  }));
@@ -5405,7 +5463,7 @@ function Xs(e = {}) {
5405
5463
  });
5406
5464
  }
5407
5465
  function _(e, n, r, i) {
5408
- let a = zs(t, e, n, r), s = p.get(a);
5466
+ let a = Hs(t, e, n, r), s = p.get(a);
5409
5467
  s && s.resolve();
5410
5468
  let c = m.get(a);
5411
5469
  return c && clearTimeout(c), new Promise((t) => {
@@ -5432,15 +5490,15 @@ function Xs(e = {}) {
5432
5490
  function y() {
5433
5491
  v ||= setTimeout(() => {
5434
5492
  v = null, b();
5435
- }, Ns);
5493
+ }, Is);
5436
5494
  }
5437
5495
  async function b() {
5438
5496
  let e = [];
5439
- await l.scan(Hs(t), (t, n) => {
5497
+ await l.scan(Gs(t), (t, n) => {
5440
5498
  t.endsWith("::__meta__") && e.push(n);
5441
5499
  });
5442
- let n = Gs(e, r, a);
5443
- 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({
5444
5502
  type: "evicted",
5445
5503
  agentId: e.agentId,
5446
5504
  sessionId: e.sessionId,
@@ -5451,13 +5509,13 @@ function Xs(e = {}) {
5451
5509
  ready: f,
5452
5510
  async listSessions(e) {
5453
5511
  let n = [];
5454
- return await l.scan(Vs(t, e), (e, t) => {
5512
+ return await l.scan(Ws(t, e), (e, t) => {
5455
5513
  e.endsWith("::__meta__") && n.push(t);
5456
5514
  }), n.sort((e, t) => t.lastAccessed - e.lastAccessed);
5457
5515
  },
5458
5516
  async load(e, n) {
5459
- let r = zs(t, e, n, Ps);
5460
- return await Ys(h, r, async () => {
5517
+ let r = Hs(t, e, n, Ls);
5518
+ return await Qs(h, r, async () => {
5461
5519
  let i = await l.get(r);
5462
5520
  if (!i) return;
5463
5521
  let a = {
@@ -5466,8 +5524,8 @@ function Xs(e = {}) {
5466
5524
  todos: [],
5467
5525
  memory: ""
5468
5526
  };
5469
- for (let r of Is) {
5470
- 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));
5471
5529
  i != null && (a[r] = i);
5472
5530
  }
5473
5531
  return i.lastAccessed = Date.now(), await l.set(r, i), a;
@@ -5475,12 +5533,12 @@ function Xs(e = {}) {
5475
5533
  },
5476
5534
  async save(e, t, n) {
5477
5535
  let r = [];
5478
- 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]));
5479
5537
  await Promise.all(r);
5480
5538
  },
5481
5539
  async updateTitle(e, n, r) {
5482
- let i = zs(t, e, n, Ps);
5483
- return Ys(h, i, async () => {
5540
+ let i = Hs(t, e, n, Ls);
5541
+ return Qs(h, i, async () => {
5484
5542
  let e = await l.get(i);
5485
5543
  e && (e.title = r, e.lastAccessed = Date.now(), await l.set(i, e));
5486
5544
  });
@@ -5496,10 +5554,10 @@ function Xs(e = {}) {
5496
5554
  })), c({ type: "flush" }), await b();
5497
5555
  },
5498
5556
  async deleteSession(e, n) {
5499
- await l.clearPrefix(Bs(t, e, n));
5557
+ await l.clearPrefix(Us(t, e, n));
5500
5558
  },
5501
5559
  async createSession(e, n, r) {
5502
- let i = r ?? Es(), a = Date.now(), o = {
5560
+ let i = r ?? ks(), a = Date.now(), o = {
5503
5561
  agentId: e,
5504
5562
  sessionId: i,
5505
5563
  createdAt: a,
@@ -5507,7 +5565,7 @@ function Xs(e = {}) {
5507
5565
  bytes: 0,
5508
5566
  title: n
5509
5567
  };
5510
- return await l.set(zs(t, e, i, Ps), o), i;
5568
+ return await l.set(Hs(t, e, i, Ls), o), i;
5511
5569
  },
5512
5570
  onEvent(e) {
5513
5571
  s.add(e);
@@ -5522,15 +5580,15 @@ function Xs(e = {}) {
5522
5580
  }
5523
5581
  //#endregion
5524
5582
  //#region src/core/sdk/optionsResolver.ts
5525
- function Zs(e) {
5526
- 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);
5527
5585
  }
5528
- function Qs(e) {
5586
+ function tc(e) {
5529
5587
  return e.dialog ?? {};
5530
5588
  }
5531
5589
  //#endregion
5532
5590
  //#region src/core/capabilities.ts
5533
- var $s = [
5591
+ var nc = [
5534
5592
  {
5535
5593
  name: "dataOps",
5536
5594
  defaultOn: !0
@@ -5619,13 +5677,13 @@ var $s = [
5619
5677
  requires: ["summarization"]
5620
5678
  }
5621
5679
  ];
5622
- function ec(e) {
5680
+ function rc(e) {
5623
5681
  let t = {};
5624
- for (let n of $s) {
5682
+ for (let n of nc) {
5625
5683
  let r = e?.[n.name];
5626
5684
  t[n.name] = n.defaultOn ? r !== !1 : r === !0;
5627
5685
  }
5628
- for (let e of $s) if (e.requires && t[e.name]) {
5686
+ for (let e of nc) if (e.requires && t[e.name]) {
5629
5687
  for (let n of e.requires) if (!t[n]) {
5630
5688
  t[e.name] = !1;
5631
5689
  break;
@@ -5635,7 +5693,7 @@ function ec(e) {
5635
5693
  }
5636
5694
  //#endregion
5637
5695
  //#region src/core/sdk/events.ts
5638
- function tc(e) {
5696
+ function ic(e) {
5639
5697
  let t = /* @__PURE__ */ new Set(), n = (n) => {
5640
5698
  if (n.type !== "approval_request") {
5641
5699
  if (e) try {
@@ -5661,7 +5719,7 @@ function tc(e) {
5661
5719
  }
5662
5720
  //#endregion
5663
5721
  //#region src/core/sdk/contextPreset.ts
5664
- var nc = {
5722
+ var ac = {
5665
5723
  auto: {
5666
5724
  summaryThresholdRatio: .5,
5667
5725
  windowRatio: .4,
@@ -5689,7 +5747,7 @@ var nc = {
5689
5747
  enableRecall: !0,
5690
5748
  enableLLMSummary: !0
5691
5749
  }
5692
- }, rc = {
5750
+ }, oc = {
5693
5751
  auto: ["describe_data", "read"],
5694
5752
  conservative: ["describe_data"],
5695
5753
  aggressive: ["describe_data", "read"],
@@ -5700,8 +5758,8 @@ var nc = {
5700
5758
  "search_data"
5701
5759
  ]
5702
5760
  };
5703
- function ic(e, t) {
5704
- 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 ?? {};
5705
5763
  return {
5706
5764
  ...n,
5707
5765
  ...r,
@@ -5711,7 +5769,7 @@ function ic(e, t) {
5711
5769
  }
5712
5770
  //#endregion
5713
5771
  //#region src/core/sdk/middlewareStack.ts
5714
- var ac = {
5772
+ var cc = {
5715
5773
  dataHint: 10,
5716
5774
  usageHints: 20,
5717
5775
  todos: 30,
@@ -5728,29 +5786,29 @@ var ac = {
5728
5786
  subagents: 140,
5729
5787
  augmentSystem: 150
5730
5788
  };
5731
- function oc(e) {
5789
+ function lc(e) {
5732
5790
  return e.map((e, t) => ({
5733
5791
  m: e,
5734
5792
  i: t,
5735
- p: ac[e.name] ?? Infinity
5793
+ p: cc[e.name] ?? Infinity
5736
5794
  })).sort((e, t) => e.p - t.p || e.i - t.i).map((e) => e.m);
5737
5795
  }
5738
5796
  //#endregion
5739
5797
  //#region src/core/tools/jsonUtils.ts
5740
- var sc = /* @__PURE__ */ new Set([
5798
+ var uc = /* @__PURE__ */ new Set([
5741
5799
  "__proto__",
5742
5800
  "constructor",
5743
5801
  "prototype"
5744
5802
  ]);
5745
- function cc(e) {
5746
- return e.split(".").some((e) => sc.has(e));
5803
+ function dc(e) {
5804
+ return e.split(".").some((e) => uc.has(e));
5747
5805
  }
5748
- function lc(e, t) {
5749
- 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]);
5750
5808
  }
5751
5809
  function Z(e, t) {
5752
5810
  if (!t) return e;
5753
- if (cc(t)) return;
5811
+ if (dc(t)) return;
5754
5812
  let n = t.split("."), r = e;
5755
5813
  for (let e of n) {
5756
5814
  if (r == null) return;
@@ -5758,8 +5816,8 @@ function Z(e, t) {
5758
5816
  }
5759
5817
  return r;
5760
5818
  }
5761
- function uc(e, t, n) {
5762
- if (!t || cc(t)) return;
5819
+ function pc(e, t, n) {
5820
+ if (!t || dc(t)) return;
5763
5821
  let r = t.split("."), i = e;
5764
5822
  for (let e = 0; e < r.length - 1; e++) {
5765
5823
  let t = r[e];
@@ -5767,8 +5825,8 @@ function uc(e, t, n) {
5767
5825
  }
5768
5826
  i[r[r.length - 1]] = n;
5769
5827
  }
5770
- function dc(e, t) {
5771
- if (!t || cc(t)) return !1;
5828
+ function mc(e, t) {
5829
+ if (!t || dc(t)) return !1;
5772
5830
  let n = t.split("."), r = e;
5773
5831
  for (let e = 0; e < n.length - 1; e++) {
5774
5832
  if (r == null) return !1;
@@ -5777,10 +5835,10 @@ function dc(e, t) {
5777
5835
  let i = n[n.length - 1];
5778
5836
  return r == null || !(i in r) ? !1 : (Array.isArray(r) && /^\d+$/.test(i) ? r.splice(Number(i), 1) : delete r[i], !0);
5779
5837
  }
5780
- function fc(e) {
5838
+ function hc(e) {
5781
5839
  return e === void 0 ? void 0 : JSON.parse(JSON.stringify(e));
5782
5840
  }
5783
- function pc(e) {
5841
+ function gc(e) {
5784
5842
  if (typeof e != "string") return { parsed: e };
5785
5843
  let t = e.trim();
5786
5844
  if (!t) return { parsed: e };
@@ -5791,20 +5849,20 @@ function pc(e) {
5791
5849
  return n ? { parseError: t } : { parsed: e };
5792
5850
  }
5793
5851
  }
5794
- function mc(e, t) {
5852
+ function _c(e, t) {
5795
5853
  if (typeof e != "object" || !e) return e;
5796
5854
  let n = new Set(t);
5797
- if (Array.isArray(e)) return e.map((e) => mc(e, t));
5855
+ if (Array.isArray(e)) return e.map((e) => _c(e, t));
5798
5856
  let r = {};
5799
5857
  for (let t of Object.keys(e)) n.has(t) && (r[t] = e[t]);
5800
5858
  return r;
5801
5859
  }
5802
- function hc(e, t) {
5860
+ function vc(e, t) {
5803
5861
  if (typeof e != "object" || !e) return e;
5804
5862
  if (t <= 0) return Array.isArray(e) ? `[...${e.length}]` : "{...}";
5805
- 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));
5806
5864
  let n = {};
5807
- 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);
5808
5866
  return n;
5809
5867
  }
5810
5868
  function Q(e, t = Infinity) {
@@ -5826,7 +5884,7 @@ function Q(e, t = Infinity) {
5826
5884
  }
5827
5885
  return r.length > t && (r = r.slice(0, t) + `\n…[已截断,原长度 ${r.length}]`), r;
5828
5886
  }
5829
- function gc(e, t = 0) {
5887
+ function yc(e, t = 0) {
5830
5888
  let n = 3735928559 ^ t, r = 1103547991 ^ t;
5831
5889
  for (let t = 0; t < e.length; t++) {
5832
5890
  let i = e.charCodeAt(t);
@@ -5835,31 +5893,31 @@ function gc(e, t = 0) {
5835
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);
5836
5894
  }
5837
5895
  function $(e) {
5838
- return gc(Q(e)).toString(36);
5896
+ return yc(Q(e)).toString(36);
5839
5897
  }
5840
- function _c(e, t, n, r) {
5841
- if (t === "set") return n ? (uc(e, n, r), null) : "set 操作需要 jsonPath(整体替换请用 set_data)";
5842
- 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";
5843
5901
  if (t === "merge") {
5844
5902
  let t = n ? Z(e, n) : e;
5845
- 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);
5846
5904
  }
5847
5905
  let i = n ? Z(e, n) : e;
5848
5906
  return Array.isArray(i) ? (Array.isArray(r) ? i.push(...r) : i.push(r), null) : `append 目标${n ? `(${n})` : "(根)"}不是数组`;
5849
5907
  }
5850
- function vc(e, t, n, r) {
5851
- if (t === "set") uc(e, n, r);
5852
- else if (t === "remove") dc(e, n);
5853
- 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);
5854
5912
  else {
5855
5913
  let t = n ? Z(e, n) : e;
5856
5914
  Array.isArray(r) ? t.push(...r) : t.push(r);
5857
5915
  }
5858
5916
  }
5859
- function yc(e, t) {
5860
- typeof e == "object" && e && bc(e, t);
5917
+ function Sc(e, t) {
5918
+ typeof e == "object" && e && Cc(e, t);
5861
5919
  }
5862
- function bc(e, t) {
5920
+ function Cc(e, t) {
5863
5921
  if (Array.isArray(e)) {
5864
5922
  e.length = 0, Array.isArray(t) && e.push(...t);
5865
5923
  return;
@@ -5868,7 +5926,7 @@ function bc(e, t) {
5868
5926
  for (let t of Object.keys(e)) t in n || delete e[t];
5869
5927
  for (let t of Object.keys(n)) e[t] = n[t];
5870
5928
  }
5871
- function xc(e, t, n = "") {
5929
+ function wc(e, t, n = "") {
5872
5930
  let r = [];
5873
5931
  if (!(typeof e == "object" && e) || !(typeof t == "object" && t) || Array.isArray(e) !== Array.isArray(t)) return e !== t && r.push({
5874
5932
  path: n || "(root)",
@@ -5887,14 +5945,14 @@ function xc(e, t, n = "") {
5887
5945
  path: i,
5888
5946
  from: e[a],
5889
5947
  to: void 0
5890
- }) : r.push(...xc(e[a], t[a], i));
5948
+ }) : r.push(...wc(e[a], t[a], i));
5891
5949
  }
5892
5950
  return r;
5893
5951
  }
5894
5952
  let i = e, a = t, o = /* @__PURE__ */ new Set([...Object.keys(i), ...Object.keys(a)]);
5895
5953
  for (let e of o) {
5896
5954
  let t = n ? `${n}.${e}` : e;
5897
- 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({
5898
5956
  path: t,
5899
5957
  from: i[e],
5900
5958
  to: void 0
@@ -5906,48 +5964,48 @@ function xc(e, t, n = "") {
5906
5964
  }
5907
5965
  return r;
5908
5966
  }
5909
- var Sc = {
5967
+ var Tc = {
5910
5968
  largeResults: 4 * 1024 * 1024,
5911
5969
  drafts: 2 * 1024 * 1024,
5912
5970
  userFiles: 2 * 1024 * 1024,
5913
5971
  resources: 4 * 1024 * 1024
5914
- }, Cc = [
5972
+ }, Ec = [
5915
5973
  "largeResults",
5916
5974
  "drafts",
5917
5975
  "userFiles",
5918
5976
  "resources"
5919
- ], wc = .9;
5920
- function Tc(e, t = {}) {
5977
+ ], Dc = .9;
5978
+ function Oc(e, t = {}) {
5921
5979
  let n = Object.create(null);
5922
- 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)] = {
5923
5981
  content: r,
5924
- updatedAt: jc()
5982
+ updatedAt: Pc()
5925
5983
  };
5926
5984
  let { persist: r } = t, i = t.maxBytes ?? 8388608, a = {
5927
- ...Sc,
5985
+ ...Tc,
5928
5986
  ...t.poolBytes ?? {}
5929
5987
  };
5930
5988
  function o(e) {
5931
- let t = kc(e);
5989
+ let t = Mc(e);
5932
5990
  return t.startsWith("large_results/") ? "largeResults" : t.startsWith("drafts/") ? "drafts" : t.startsWith("resources/") ? "resources" : "userFiles";
5933
5991
  }
5934
5992
  function s(e) {
5935
5993
  let t = 0;
5936
- 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));
5937
5995
  return t;
5938
5996
  }
5939
5997
  function c() {
5940
- for (let e of Cc) {
5998
+ for (let e of Ec) {
5941
5999
  let t = a[e];
5942
6000
  if (s(e) <= t) continue;
5943
- 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;
5944
6002
  c && console.warn(`[page-agent-sdk] vfs large_results 池 ${s(e)} > ${Math.round(t * 1.5)}(被引用撑爆)→ 无视 protectedRefs 强制删`);
5945
6003
  let l = Object.entries(n).filter(([t]) => o(t) === e).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
5946
6004
  for (let [t] of l) if (!(i && !c && u.has(t)) && (delete n[t], s(e) <= r)) break;
5947
6005
  }
5948
- if (Oc(n) > i) {
5949
- let e = i * wc, t = Oc(n) > i * 1.5, r = Object.entries(n).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
5950
- 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;
5951
6009
  }
5952
6010
  }
5953
6011
  let l = !0, u = /* @__PURE__ */ new Set(), d = null;
@@ -5983,7 +6041,7 @@ function Tc(e, t = {}) {
5983
6041
  }
5984
6042
  };
5985
6043
  return r && (m.hydrate = (e) => {
5986
- 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;
5987
6045
  c(), l = !0;
5988
6046
  }, m.flush = () => {
5989
6047
  d &&= (clearTimeout(d), null), f();
@@ -5992,19 +6050,19 @@ function Tc(e, t = {}) {
5992
6050
  p(), l = !0;
5993
6051
  }), m;
5994
6052
  }
5995
- var Ec = null;
5996
- function Dc(e) {
5997
- 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;
5998
6056
  }
5999
- function Oc(e) {
6057
+ function jc(e) {
6000
6058
  let t = 0;
6001
- for (let n of Object.values(e)) t += Dc(n.content);
6059
+ for (let n of Object.values(e)) t += Ac(n.content);
6002
6060
  return t;
6003
6061
  }
6004
- function kc(e) {
6062
+ function Mc(e) {
6005
6063
  return e.replace(/^\/+/, "").replace(/\/+/g, "/");
6006
6064
  }
6007
- function Ac(e) {
6065
+ function Nc(e) {
6008
6066
  let t = "";
6009
6067
  for (let n = 0; n < e.length; n++) {
6010
6068
  let r = e[n];
@@ -6012,10 +6070,10 @@ function Ac(e) {
6012
6070
  }
6013
6071
  return RegExp("^" + t + "$");
6014
6072
  }
6015
- function jc() {
6073
+ function Pc() {
6016
6074
  return Date.now();
6017
6075
  }
6018
- var Mc = [
6076
+ var Fc = [
6019
6077
  "vfs_read",
6020
6078
  "vfs_write",
6021
6079
  "vfs_edit",
@@ -6026,10 +6084,10 @@ var Mc = [
6026
6084
  "vfs_json_patch",
6027
6085
  "vfs_rm"
6028
6086
  ];
6029
- function Nc(e) {
6087
+ function Ic(e) {
6030
6088
  return [
6031
6089
  r(async ({ path: t, offset: n, limit: r }) => {
6032
- let i = e.files[kc(t)];
6090
+ let i = e.files[Mc(t)];
6033
6091
  if (!i) return Y({
6034
6092
  code: "NOT_FOUND",
6035
6093
  path: t,
@@ -6058,9 +6116,9 @@ function Nc(e) {
6058
6116
  hint: "jsonString=true 要求 content 是合法 JSON;检查引号/逗号/括号配对;或省略 jsonString 写纯文本"
6059
6117
  });
6060
6118
  }
6061
- return e.files[kc(t)] = {
6119
+ return e.files[Mc(t)] = {
6062
6120
  content: n,
6063
- updatedAt: jc()
6121
+ updatedAt: Pc()
6064
6122
  }, `已写入 ${t}(${n.length} 字符)${r ? "(JSON 校验通过)" : ""}`;
6065
6123
  }, {
6066
6124
  name: "vfs_write",
@@ -6072,7 +6130,7 @@ function Nc(e) {
6072
6130
  })
6073
6131
  }),
6074
6132
  r(async ({ path: t, oldString: n, newString: r }) => {
6075
- let i = kc(t), a = e.files[i];
6133
+ let i = Mc(t), a = e.files[i];
6076
6134
  if (!a) return Y({
6077
6135
  code: "NOT_FOUND",
6078
6136
  path: t,
@@ -6102,7 +6160,7 @@ function Nc(e) {
6102
6160
  }
6103
6161
  return e.files[i] = {
6104
6162
  content: a.content.replace(n, r),
6105
- updatedAt: jc()
6163
+ updatedAt: Pc()
6106
6164
  }, `已替换 ${t} 中 1 处。`;
6107
6165
  }, {
6108
6166
  name: "vfs_edit",
@@ -6124,7 +6182,7 @@ function Nc(e) {
6124
6182
  r(async ({ pattern: t }) => {
6125
6183
  let n;
6126
6184
  try {
6127
- n = Ac(t);
6185
+ n = Nc(t);
6128
6186
  } catch (e) {
6129
6187
  return Y({
6130
6188
  code: "GLOB_INVALID",
@@ -6153,7 +6211,7 @@ function Nc(e) {
6153
6211
  details: { pattern: t }
6154
6212
  });
6155
6213
  }
6156
- let i = n ? [kc(n)] : Object.keys(e.files), a = [];
6214
+ let i = n ? [Mc(n)] : Object.keys(e.files), a = [];
6157
6215
  for (let t of i) {
6158
6216
  let n = e.files[t];
6159
6217
  n && n.content.split("\n").forEach((e, n) => {
@@ -6170,7 +6228,7 @@ function Nc(e) {
6170
6228
  })
6171
6229
  }),
6172
6230
  r(async ({ path: t, jsonPath: n }) => {
6173
- let r = kc(t), i = e.files[r];
6231
+ let r = Mc(t), i = e.files[r];
6174
6232
  if (!i) return Y({
6175
6233
  code: "NOT_FOUND",
6176
6234
  path: t,
@@ -6207,7 +6265,7 @@ function Nc(e) {
6207
6265
  })
6208
6266
  }),
6209
6267
  r(async ({ path: t, patches: n }) => {
6210
- let r = kc(t), i = e.files[r];
6268
+ let r = Mc(t), i = e.files[r];
6211
6269
  if (!i) return Y({
6212
6270
  code: "NOT_FOUND",
6213
6271
  path: t,
@@ -6225,9 +6283,9 @@ function Nc(e) {
6225
6283
  hint: "vfs_json_patch 要求文件内容是合法 JSON"
6226
6284
  });
6227
6285
  }
6228
- let o = fc(a), s = [];
6286
+ let o = hc(a), s = [];
6229
6287
  for (let e of n) {
6230
- let n = _c(o, e.op, e.jsonPath, e.value);
6288
+ let n = bc(o, e.op, e.jsonPath, e.value);
6231
6289
  if (n) return Y({
6232
6290
  code: "PATCH_FAILED",
6233
6291
  path: t,
@@ -6240,7 +6298,7 @@ function Nc(e) {
6240
6298
  let c = JSON.stringify(o);
6241
6299
  return e.files[r] = {
6242
6300
  content: c,
6243
- updatedAt: jc()
6301
+ updatedAt: Pc()
6244
6302
  }, `已对 ${t} 应用 ${n.length} 个 patch(影响 ${s.length} 处:${s.join(", ")}),文件现 ${c.length} 字符`;
6245
6303
  }, {
6246
6304
  name: "vfs_json_patch",
@@ -6260,7 +6318,7 @@ function Nc(e) {
6260
6318
  })
6261
6319
  }),
6262
6320
  r(async ({ path: t }) => {
6263
- let n = kc(t);
6321
+ let n = Mc(t);
6264
6322
  return e.files[n] ? (delete e.files[n], `已删除 ${t}`) : Y({
6265
6323
  code: "NOT_FOUND",
6266
6324
  path: t,
@@ -6274,17 +6332,17 @@ function Nc(e) {
6274
6332
  })
6275
6333
  ];
6276
6334
  }
6277
- function Pc(e) {
6335
+ function Lc(e) {
6278
6336
  return {
6279
6337
  name: "vfs",
6280
- tools: Nc(e),
6338
+ tools: Ic(e),
6281
6339
  beforeAgent: () => ({ files: e.files })
6282
6340
  };
6283
6341
  }
6284
6342
  //#endregion
6285
6343
  //#region src/core/tools/dataSlotQuery.ts
6286
- var Fc = /[\w$-]/;
6287
- function Ic(e) {
6344
+ var Rc = /[\w$-]/;
6345
+ function zc(e) {
6288
6346
  let t = [], n = e.trim(), r = +(n[0] === "$");
6289
6347
  for (; r < n.length;) {
6290
6348
  let e = n[r];
@@ -6295,7 +6353,7 @@ function Ic(e) {
6295
6353
  continue;
6296
6354
  }
6297
6355
  let e = "";
6298
- for (; r < n.length && Fc.test(n[r]);) e += n[r++];
6356
+ for (; r < n.length && Rc.test(n[r]);) e += n[r++];
6299
6357
  if (!e) throw Error("JSONPath: .. 后缺属性名");
6300
6358
  t.push({
6301
6359
  type: "descendKey",
@@ -6308,7 +6366,7 @@ function Ic(e) {
6308
6366
  continue;
6309
6367
  }
6310
6368
  let e = "";
6311
- for (; r < n.length && Fc.test(n[r]);) e += n[r++];
6369
+ for (; r < n.length && Rc.test(n[r]);) e += n[r++];
6312
6370
  if (!e) throw Error("JSONPath: . 后缺属性名");
6313
6371
  t.push({
6314
6372
  type: "key",
@@ -6364,7 +6422,7 @@ function Ic(e) {
6364
6422
  }
6365
6423
  return t;
6366
6424
  }
6367
- function Lc(e) {
6425
+ function Bc(e) {
6368
6426
  let t = [], n = 0, r = e.trim();
6369
6427
  for (; n < r.length;) {
6370
6428
  let e = r[n];
@@ -6409,7 +6467,7 @@ function Lc(e) {
6409
6467
  }
6410
6468
  return t;
6411
6469
  }
6412
- var Rc = class {
6470
+ var Vc = class {
6413
6471
  toks;
6414
6472
  item;
6415
6473
  pos = 0;
@@ -6445,12 +6503,12 @@ var Rc = class {
6445
6503
  return this.next(), e;
6446
6504
  }
6447
6505
  let e = this.operand(), t = this.peek();
6448
- 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);
6449
6507
  }
6450
6508
  operand() {
6451
6509
  let e = this.next();
6452
6510
  if (e === void 0) throw Error("过滤表达式:缺操作数");
6453
- if (e.startsWith("@")) return Bc(e, this.item);
6511
+ if (e.startsWith("@")) return Uc(e, this.item);
6454
6512
  if (e[0] === "'" || e[0] === "\"") return e.slice(1, -1);
6455
6513
  if (e === "true") return !0;
6456
6514
  if (e === "false") return !1;
@@ -6460,10 +6518,10 @@ var Rc = class {
6460
6518
  throw Error(`过滤表达式:未知操作数 '${e}'`);
6461
6519
  }
6462
6520
  };
6463
- function zc(e) {
6521
+ function Hc(e) {
6464
6522
  return !!e && e !== 0 && e !== "" && e !== null;
6465
6523
  }
6466
- function Bc(e, t) {
6524
+ function Uc(e, t) {
6467
6525
  let n = e.split(".").filter((e) => e && e !== "@"), r = t;
6468
6526
  for (let e of n) {
6469
6527
  if (typeof r != "object" || !r) return;
@@ -6471,7 +6529,7 @@ function Bc(e, t) {
6471
6529
  }
6472
6530
  return r;
6473
6531
  }
6474
- function Vc(e, t, n) {
6532
+ function Wc(e, t, n) {
6475
6533
  switch (e) {
6476
6534
  case "==": return t === n;
6477
6535
  case "!=": return t !== n;
@@ -6482,47 +6540,47 @@ function Vc(e, t, n) {
6482
6540
  default: return !1;
6483
6541
  }
6484
6542
  }
6485
- function Hc(e, t) {
6486
- return new Rc(Lc(e), t).parse();
6543
+ function Gc(e, t) {
6544
+ return new Vc(Bc(e), t).parse();
6487
6545
  }
6488
- function Uc(e, t) {
6546
+ function Kc(e, t) {
6489
6547
  return e ? `${e}.${t}` : String(t);
6490
6548
  }
6491
- function Wc(e, t) {
6549
+ function qc(e, t) {
6492
6550
  let n = [{
6493
6551
  path: "",
6494
6552
  value: e
6495
6553
  }];
6496
- for (let e of Ic(t)) {
6554
+ for (let e of zc(t)) {
6497
6555
  let t = [];
6498
6556
  if (e.type === "key") for (let r of n) r.value != null && typeof r.value == "object" && e.key in r.value && t.push({
6499
- path: Uc(r.path, e.key),
6557
+ path: Kc(r.path, e.key),
6500
6558
  value: r.value[e.key]
6501
6559
  });
6502
6560
  else if (e.type === "index") {
6503
6561
  for (let r of n) if (Array.isArray(r.value)) {
6504
6562
  let n = r.value[e.index];
6505
6563
  e.index >= 0 && e.index < r.value.length && t.push({
6506
- path: Uc(r.path, e.index),
6564
+ path: Kc(r.path, e.index),
6507
6565
  value: n,
6508
6566
  index: e.index
6509
6567
  });
6510
6568
  }
6511
6569
  } else if (e.type === "wildcard") {
6512
6570
  for (let e of n) if (Array.isArray(e.value)) e.value.forEach((n, r) => t.push({
6513
- path: Uc(e.path, r),
6571
+ path: Kc(e.path, r),
6514
6572
  value: n,
6515
6573
  index: r
6516
6574
  }));
6517
6575
  else if (e.value != null && typeof e.value == "object") for (let n of Object.keys(e.value)) t.push({
6518
- path: Uc(e.path, n),
6576
+ path: Kc(e.path, n),
6519
6577
  value: e.value[n]
6520
6578
  });
6521
6579
  } else if (e.type === "descendKey") {
6522
6580
  let r = e.key, i = (e) => {
6523
6581
  if (!(e.value == null || typeof e.value != "object")) for (let n of Object.keys(e.value)) {
6524
6582
  let a = {
6525
- path: Uc(e.path, n),
6583
+ path: Kc(e.path, n),
6526
6584
  value: e.value[n]
6527
6585
  };
6528
6586
  n === r && t.push(a), i(a);
@@ -6533,7 +6591,7 @@ function Wc(e, t) {
6533
6591
  let e = (n) => {
6534
6592
  if (!(n.value == null || typeof n.value != "object")) for (let r of Object.keys(n.value)) {
6535
6593
  let i = {
6536
- path: Uc(n.path, r),
6594
+ path: Kc(n.path, r),
6537
6595
  value: n.value[r]
6538
6596
  };
6539
6597
  t.push(i), e(i);
@@ -6542,16 +6600,16 @@ function Wc(e, t) {
6542
6600
  for (let t of n) e(t);
6543
6601
  } else if (e.type === "filter") {
6544
6602
  for (let r of n) if (Array.isArray(r.value)) r.value.forEach((n, i) => {
6545
- Hc(e.filter, n) && t.push({
6546
- path: Uc(r.path, i),
6603
+ Gc(e.filter, n) && t.push({
6604
+ path: Kc(r.path, i),
6547
6605
  value: n,
6548
6606
  index: i
6549
6607
  });
6550
6608
  });
6551
6609
  else if (r.value != null && typeof r.value == "object") for (let n of Object.keys(r.value)) {
6552
6610
  let i = r.value[n];
6553
- Hc(e.filter, i) && t.push({
6554
- path: Uc(r.path, n),
6611
+ Gc(e.filter, i) && t.push({
6612
+ path: Kc(r.path, n),
6555
6613
  value: i
6556
6614
  });
6557
6615
  }
@@ -6560,7 +6618,7 @@ function Wc(e, t) {
6560
6618
  }
6561
6619
  return n;
6562
6620
  }
6563
- function Gc(e, t) {
6621
+ function Jc(e, t) {
6564
6622
  let n = e.length, r = t.length;
6565
6623
  if (!n) return r;
6566
6624
  if (!r) return n;
@@ -6576,7 +6634,7 @@ function Gc(e, t) {
6576
6634
  }
6577
6635
  return i[r];
6578
6636
  }
6579
- function Kc(e, t, n = {}) {
6637
+ function Yc(e, t, n = {}) {
6580
6638
  let r = n.mode || "substring", i = n.limit ?? 50, a = n.matchKey !== !1, o = [], s = null;
6581
6639
  if (r === "regex") try {
6582
6640
  s = new RegExp(t, "i");
@@ -6586,11 +6644,11 @@ function Kc(e, t, n = {}) {
6586
6644
  let c = (e, l, u) => {
6587
6645
  if (o.length >= i || e == null) return;
6588
6646
  if (typeof e == "object") {
6589
- if (Array.isArray(e)) e.forEach((e, t) => c(e, Uc(l, t), String(t)));
6590
- 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);
6591
6649
  return;
6592
6650
  }
6593
- 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);
6594
6652
  if (f) {
6595
6653
  o.push({
6596
6654
  path: l,
@@ -6601,7 +6659,7 @@ function Kc(e, t, n = {}) {
6601
6659
  return;
6602
6660
  }
6603
6661
  if (a && u) {
6604
- let e = qc(u, t, r, n.fuzzyThreshold ?? 2, s);
6662
+ let e = Xc(u, t, r, n.fuzzyThreshold ?? 2, s);
6605
6663
  e && o.push({
6606
6664
  path: l,
6607
6665
  key: u,
@@ -6612,51 +6670,51 @@ function Kc(e, t, n = {}) {
6612
6670
  };
6613
6671
  return c(e, ""), o;
6614
6672
  }
6615
- function qc(e, t, n, r, i) {
6673
+ function Xc(e, t, n, r, i) {
6616
6674
  let a = e.toLowerCase(), o = t.toLowerCase();
6617
6675
  if (n === "substring") return a.includes(o) ? 1 : null;
6618
6676
  if (n === "regex") return i && i.test(e) ? 1 : null;
6619
6677
  if (n === "fuzzy") {
6620
6678
  if (a.includes(o)) return 2;
6621
- let e = Gc(a, o);
6679
+ let e = Jc(a, o);
6622
6680
  return e <= r ? r - e + 1 : null;
6623
6681
  }
6624
6682
  return null;
6625
6683
  }
6626
- function Jc(e, t, n = 3e3) {
6684
+ function Zc(e, t, n = 3e3) {
6627
6685
  return ba(t, n)(e);
6628
6686
  }
6629
6687
  //#endregion
6630
6688
  //#region src/core/tools/resources.ts
6631
- var Yc = "⟦frozen:", Xc = "⟦res:", Zc = "⟧";
6632
- function Qc(e) {
6633
- return `${Yc}${e}${Zc}`;
6689
+ var Qc = "⟦frozen:", $c = "⟦res:", el = "⟧";
6690
+ function tl(e) {
6691
+ return `${Qc}${e}${el}`;
6634
6692
  }
6635
- function $c(e) {
6636
- return `${Xc}${e}${Zc}`;
6693
+ function nl(e) {
6694
+ return `${$c}${e}${el}`;
6637
6695
  }
6638
- function el(e) {
6639
- 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) ? {
6640
6698
  type: "frozen",
6641
6699
  path: e.slice(8, e.length - 1)
6642
- } : e.startsWith(Xc) && e.endsWith(Zc) ? {
6700
+ } : e.startsWith($c) && e.endsWith(el) ? {
6643
6701
  type: "res",
6644
6702
  handle: e.slice(5, e.length - 1)
6645
6703
  } : null : null;
6646
6704
  }
6647
- function tl(e) {
6705
+ function il(e) {
6648
6706
  return String(e ?? "").trim().replace(/^\.+/, "");
6649
6707
  }
6650
- function nl(e) {
6708
+ function al(e) {
6651
6709
  let t = 5381;
6652
6710
  for (let n = 0; n < e.length; n++) t = (t * 33 ^ e.charCodeAt(n)) >>> 0;
6653
6711
  return (t >>> 0).toString(16).padStart(8, "0").slice(0, 8);
6654
6712
  }
6655
- function rl(e, t) {
6713
+ function ol(e, t) {
6656
6714
  return e === t ? !0 : e && t && typeof e == "object" && typeof t == "object" ? JSON.stringify(e) === JSON.stringify(t) : !1;
6657
6715
  }
6658
- function il(e, t) {
6659
- let n = tl(e);
6716
+ function sl(e, t) {
6717
+ let n = il(e);
6660
6718
  if (!n) return;
6661
6719
  let r = t.get(n);
6662
6720
  if (r) return {
@@ -6676,7 +6734,7 @@ function il(e, t) {
6676
6734
  }));
6677
6735
  return i;
6678
6736
  }
6679
- var al = class {
6737
+ var cl = class {
6680
6738
  vfs;
6681
6739
  constructor(e) {
6682
6740
  this.vfs = e;
@@ -6685,7 +6743,7 @@ var al = class {
6685
6743
  return `resources/${e}.json`;
6686
6744
  }
6687
6745
  ensure(e, t, n) {
6688
- let r = nl(e), i = {
6746
+ let r = al(e), i = {
6689
6747
  path: e,
6690
6748
  mode: n,
6691
6749
  value: t,
@@ -6697,7 +6755,7 @@ var al = class {
6697
6755
  }, r;
6698
6756
  }
6699
6757
  get(e) {
6700
- 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)));
6701
6759
  }
6702
6760
  readEntry(e) {
6703
6761
  let t = this.vfs.files[e];
@@ -6713,7 +6771,7 @@ var al = class {
6713
6771
  this.ensure(e, t, n?.mode ?? "verbatim");
6714
6772
  }
6715
6773
  delete(e) {
6716
- 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];
6717
6775
  return r && delete this.vfs.files[n], r;
6718
6776
  }
6719
6777
  list() {
@@ -6733,7 +6791,7 @@ var al = class {
6733
6791
  for (let e of Object.keys(this.vfs.files)) e.startsWith("resources/") && delete this.vfs.files[e];
6734
6792
  }
6735
6793
  };
6736
- function ol(e) {
6794
+ function ll(e) {
6737
6795
  let { jp: t, resolved: n, resourcesByPath: r, resourceStore: i } = e;
6738
6796
  if (!r.size) return n;
6739
6797
  let a = !1;
@@ -6742,19 +6800,19 @@ function ol(e) {
6742
6800
  break;
6743
6801
  }
6744
6802
  if (!a) return n;
6745
- let o = fc(n);
6803
+ let o = hc(n);
6746
6804
  for (let [e, n] of r) {
6747
6805
  if (t !== "" && e !== t && !e.startsWith(t + ".")) continue;
6748
6806
  if (e === t) {
6749
6807
  if (o === void 0) continue;
6750
- 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;
6751
6809
  }
6752
6810
  let r = t === "" ? e : e.slice(t.length + 1), a = Z(o, r);
6753
- 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"))));
6754
6812
  }
6755
6813
  return o;
6756
6814
  }
6757
- function sl(e, t, n, r) {
6815
+ function ul(e, t, n, r) {
6758
6816
  if (!r) return {
6759
6817
  code: "RESOURCE_NOT_FOUND",
6760
6818
  message: `句柄 "${e}" 无法展开(资源池未启用)`,
@@ -6765,7 +6823,7 @@ function sl(e, t, n, r) {
6765
6823
  code: "RESOURCE_NOT_FOUND",
6766
6824
  message: `字段 "${t}" 在 bind 中已不存在,无法展开句柄 "${e}"`,
6767
6825
  hint: "该字段可能已被删除或 restore 到不含此字段的快照;重新 read 确认当前结构"
6768
- } : 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 ? {
6769
6827
  code: "RESOURCE_NOT_FOUND",
6770
6828
  message: `句柄 "${e}" 不存在(字段 "${t}" 可能未注册或已被删除)`,
6771
6829
  hint: "重新 read 该字段触发懒注册"
@@ -6775,20 +6833,20 @@ function sl(e, t, n, r) {
6775
6833
  hint: "重新 read 该字段触发懒注册重建句柄,再写回新句柄 ⟦res:<handle>⟧"
6776
6834
  };
6777
6835
  }
6778
- function cl(e, t) {
6836
+ function dl(e, t) {
6779
6837
  let n = t.getBind();
6780
6838
  for (let [r, i] of t.resourcesByPath) {
6781
6839
  let a = Z(n, r), o = Z(e, r);
6782
6840
  if (o === void 0) {
6783
- a !== void 0 && uc(e, r, a);
6841
+ a !== void 0 && pc(e, r, a);
6784
6842
  continue;
6785
6843
  }
6786
6844
  if (i.mode === "freeze") {
6787
- if (o === Qc(r)) {
6788
- uc(e, r, a);
6845
+ if (o === tl(r)) {
6846
+ pc(e, r, a);
6789
6847
  continue;
6790
6848
  }
6791
- if (!rl(o, a)) return {
6849
+ if (!ol(o, a)) return {
6792
6850
  ok: !1,
6793
6851
  code: "FROZEN_FIELD",
6794
6852
  path: r,
@@ -6796,11 +6854,11 @@ function cl(e, t) {
6796
6854
  hint: "该字段由系统/集成方维护,LLM 不得改动。如需展示其值用 resource_get({path}) 取真值"
6797
6855
  };
6798
6856
  } else {
6799
- let n = el(o);
6857
+ let n = rl(o);
6800
6858
  if (n && n.type === "res") {
6801
- let i = sl(n.handle, r, a, t.resourceStore);
6859
+ let i = ul(n.handle, r, a, t.resourceStore);
6802
6860
  if ("value" in i) {
6803
- uc(e, r, i.value);
6861
+ pc(e, r, i.value);
6804
6862
  continue;
6805
6863
  }
6806
6864
  return {
@@ -6811,7 +6869,7 @@ function cl(e, t) {
6811
6869
  hint: i.hint
6812
6870
  };
6813
6871
  }
6814
- if (!rl(o, a)) return {
6872
+ if (!ol(o, a)) return {
6815
6873
  ok: !1,
6816
6874
  code: "VERBATIM_MISMATCH",
6817
6875
  path: r,
@@ -6822,7 +6880,7 @@ function cl(e, t) {
6822
6880
  }
6823
6881
  return { ok: !0 };
6824
6882
  }
6825
- function ll(e, t, n) {
6883
+ function fl(e, t, n) {
6826
6884
  let r = t === void 0 ? e.message : `patches[${t}]${n ? ` @ "${n}"` : ""}: ${e.message}`;
6827
6885
  return Y({
6828
6886
  code: e.code,
@@ -6835,28 +6893,28 @@ function ll(e, t, n) {
6835
6893
  } }
6836
6894
  });
6837
6895
  }
6838
- function ul(e) {
6896
+ function pl(e) {
6839
6897
  let { value: t, ctx: n } = e;
6840
6898
  if (!n || !n.resourcesByPath.size) return {
6841
6899
  ok: !0,
6842
6900
  value: t
6843
6901
  };
6844
- let r = fc(t), i = cl(r, n);
6902
+ let r = hc(t), i = dl(r, n);
6845
6903
  return i.ok ? {
6846
6904
  ok: !0,
6847
6905
  value: r
6848
6906
  } : {
6849
6907
  ok: !1,
6850
- error: ll(i)
6908
+ error: fl(i)
6851
6909
  };
6852
6910
  }
6853
- function dl(e) {
6911
+ function ml(e) {
6854
6912
  let { patches: t, clone: n, ctx: r } = e;
6855
6913
  if (!r || !r.resourcesByPath.size) return { ok: !0 };
6856
6914
  for (let e = 0; e < t.length; e++) {
6857
6915
  let n = t[e];
6858
6916
  if (n.op === "remove") {
6859
- let t = il(n.jsonPath || "", r.resourcesByPath);
6917
+ let t = sl(n.jsonPath || "", r.resourcesByPath);
6860
6918
  if (t) {
6861
6919
  let r = t.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED", i = t.spec.mode === "freeze" ? "冻结字段不可删。如需移除请联系集成方调整 data.resources 配置" : "verbatim 字段不可直接删;先 resource_delete({path}) 释放资源保护后再删";
6862
6920
  return {
@@ -6875,27 +6933,27 @@ function dl(e) {
6875
6933
  }
6876
6934
  }
6877
6935
  }
6878
- let i = cl(n, r);
6936
+ let i = dl(n, r);
6879
6937
  if (!i.ok) {
6880
- let e = fl(i.path, t);
6938
+ let e = hl(i.path, t);
6881
6939
  return {
6882
6940
  ok: !1,
6883
- 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)
6884
6942
  };
6885
6943
  }
6886
6944
  return { ok: !0 };
6887
6945
  }
6888
- function fl(e, t) {
6889
- let n = tl(e);
6946
+ function hl(e, t) {
6947
+ let n = il(e);
6890
6948
  for (let e = 0; e < t.length; e++) {
6891
- let r = tl(t[e].jsonPath || "");
6949
+ let r = il(t[e].jsonPath || "");
6892
6950
  if (r && (r === n || n.startsWith(r + ".") || r.startsWith(n + "."))) return e;
6893
6951
  }
6894
6952
  return -1;
6895
6953
  }
6896
6954
  //#endregion
6897
6955
  //#region src/core/tools/dataOps.ts
6898
- var pl = /* @__PURE__ */ new Set([
6956
+ var gl = /* @__PURE__ */ new Set([
6899
6957
  "describe_data",
6900
6958
  "get_data",
6901
6959
  "set_data",
@@ -6909,14 +6967,14 @@ var pl = /* @__PURE__ */ new Set([
6909
6967
  "resource_update",
6910
6968
  "resource_list",
6911
6969
  "resource_delete"
6912
- ]), ml = /* @__PURE__ */ new Set(["read", "write"]);
6913
- function hl(e, t = "simple") {
6914
- 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));
6915
6973
  }
6916
- function gl(e) {
6974
+ function yl(e) {
6917
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;
6918
6976
  if (l) {
6919
- let e = ul({
6977
+ let e = pl({
6920
6978
  value: u,
6921
6979
  ctx: l
6922
6980
  });
@@ -6944,14 +7002,14 @@ function gl(e) {
6944
7002
  hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹(如 {value:\"x\"})或集成方通过 sdk.setData 替换 bind"
6945
7003
  })
6946
7004
  };
6947
- 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;
6948
7006
  for (i.push({
6949
7007
  id: p,
6950
7008
  ts: Date.now(),
6951
7009
  op: c,
6952
7010
  value: f
6953
7011
  }); i.length > a;) i.shift();
6954
- 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({
6955
7013
  op: c,
6956
7014
  value: d.data,
6957
7015
  timestamp: Date.now()
@@ -6961,11 +7019,11 @@ function gl(e) {
6961
7019
  data: d.data
6962
7020
  };
6963
7021
  }
6964
- function _l(e) {
6965
- 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 = [];
6966
7024
  for (let e = 0; e < n.length; e++) {
6967
7025
  let t = n[e], a = t.jsonPath || "";
6968
- if (cc(a)) return {
7026
+ if (dc(a)) return {
6969
7027
  ok: !1,
6970
7028
  error: Y({
6971
7029
  code: "PATH_UNSAFE",
@@ -6991,14 +7049,14 @@ function _l(e) {
6991
7049
  hint: `op 为 ${o} 时 value 必填;删除请用 op:'remove'`
6992
7050
  })
6993
7051
  };
6994
- let n = pc(t.value);
7052
+ let n = gc(t.value);
6995
7053
  if (n.parseError) return {
6996
7054
  ok: !1,
6997
7055
  error: Gr(`patches[${e}]`, t.value, n.parseError)
6998
7056
  };
6999
7057
  s = n.parsed;
7000
7058
  }
7001
- let c = _c(f, o, a, s);
7059
+ let c = bc(f, o, a, s);
7002
7060
  if (c) return {
7003
7061
  ok: !1,
7004
7062
  error: Y({
@@ -7014,7 +7072,7 @@ function _l(e) {
7014
7072
  });
7015
7073
  }
7016
7074
  if (d) {
7017
- let e = dl({
7075
+ let e = ml({
7018
7076
  patches: n,
7019
7077
  clone: f,
7020
7078
  ctx: d
@@ -7044,21 +7102,21 @@ function _l(e) {
7044
7102
  id: h,
7045
7103
  ts: Date.now(),
7046
7104
  op: "edit",
7047
- value: fc(t),
7105
+ value: hc(t),
7048
7106
  ...l ? { label: l } : {}
7049
7107
  }); a.length > o;) a.shift();
7050
- for (let e of p) e.op === "remove" && dc(t, e.jp);
7051
- 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?.(), {
7052
7110
  ok: !0,
7053
7111
  applied: p,
7054
7112
  clone: f
7055
7113
  };
7056
7114
  }
7057
- function vl(e, n = {}) {
7058
- 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;
7059
7117
  function u(e) {
7060
7118
  if (c.clear(), e) for (let t of e) {
7061
- let e = tl(t.path);
7119
+ let e = il(t.path);
7062
7120
  c.set(e, {
7063
7121
  path: e,
7064
7122
  mode: t.mode
@@ -7110,7 +7168,7 @@ function vl(e, n = {}) {
7110
7168
  return e;
7111
7169
  },
7112
7170
  createResource: l ? (e, t) => {
7113
- 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;
7114
7172
  return l.ensure(n, i, r?.mode ?? "verbatim");
7115
7173
  } : void 0,
7116
7174
  getResource: l ? (e) => {
@@ -7123,8 +7181,8 @@ function vl(e, n = {}) {
7123
7181
  } : void 0;
7124
7182
  } : void 0,
7125
7183
  updateResource: l ? (e, t) => {
7126
- let n = tl(e);
7127
- l.update(n, t), uc(a, n, t), _();
7184
+ let n = il(e);
7185
+ l.update(n, t), pc(a, n, t), _();
7128
7186
  } : void 0,
7129
7187
  deleteResource: l ? (e) => l.delete(e) : void 0,
7130
7188
  listResources: l ? () => l.list() : void 0
@@ -7132,7 +7190,7 @@ function vl(e, n = {}) {
7132
7190
  n.onAudit?.(e);
7133
7191
  };
7134
7192
  function b(e, t) {
7135
- 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;
7136
7194
  for (f.push({
7137
7195
  id: r,
7138
7196
  ts: Date.now(),
@@ -7163,7 +7221,7 @@ function vl(e, n = {}) {
7163
7221
  if (o.action === "restore") {
7164
7222
  if (!f.length) return `无历史快照可回退(本次为首次操作)。当前值:${Q(a, 400)} (hash=${i})。请重新 read 再改或选「强制覆盖」。`;
7165
7223
  let e = f[f.length - 1];
7166
- 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)})。请基于回退后的值重写或停止。`;
7167
7225
  }
7168
7226
  return null;
7169
7227
  }
@@ -7173,7 +7231,7 @@ function vl(e, n = {}) {
7173
7231
  schema: t.object({})
7174
7232
  }), C = r(async ({ jsonPath: e }) => {
7175
7233
  let t = e || "";
7176
- if (cc(t)) return Y({
7234
+ if (dc(t)) return Y({
7177
7235
  code: "PATH_UNSAFE",
7178
7236
  message: `jsonPath "${t}" 含非法段(__proto__/constructor/prototype)`,
7179
7237
  hint: "使用正常属性路径,如 components.0.text(数组索引用数字)"
@@ -7184,7 +7242,7 @@ function vl(e, n = {}) {
7184
7242
  hint: "主数据仅暴露 schema 声明的字段;若需操作该字段,集成方需在 schema 中声明它"
7185
7243
  });
7186
7244
  let n = t ? Z(a, t) : a;
7187
- t || (n = Li(n, s)), d && (n = ol({
7245
+ t || (n = Li(n, s)), d && (n = ll({
7188
7246
  jp: t,
7189
7247
  resolved: n,
7190
7248
  resourcesByPath: d.resourcesByPath,
@@ -7199,9 +7257,9 @@ function vl(e, n = {}) {
7199
7257
  }), w = r(async ({ value: e, expectedHash: t }) => {
7200
7258
  let n = await x("set", t || (h ? m : void 0));
7201
7259
  if (n !== null) return n;
7202
- let r = pc(e);
7260
+ let r = gc(e);
7203
7261
  if (r.parseError) return Gr("", e, r.parseError);
7204
- let o = gl({
7262
+ let o = yl({
7205
7263
  bindRef: a,
7206
7264
  value: r.parsed,
7207
7265
  schema: i,
@@ -7228,7 +7286,7 @@ function vl(e, n = {}) {
7228
7286
  hint: "顶层 op 或 patch.op 至少传一个"
7229
7287
  });
7230
7288
  let c = n || "";
7231
- if (cc(c)) return Y({
7289
+ if (dc(c)) return Y({
7232
7290
  code: "PATH_UNSAFE",
7233
7291
  message: `jsonPath "${c}" 含非法段(__proto__/constructor/prototype)`,
7234
7292
  hint: "使用正常的属性路径,如 components.0.text(数组索引用数字)"
@@ -7245,7 +7303,7 @@ function vl(e, n = {}) {
7245
7303
  message: `edit 仅适用于对象/数组主数据,当前是 ${a === void 0 ? "undefined" : typeof a}`,
7246
7304
  hint: "叶子(原始类型)请用 set_data 整体设置"
7247
7305
  });
7248
- let u = _l({
7306
+ let u = bl({
7249
7307
  bindRef: a,
7250
7308
  patches: [{
7251
7309
  op: t,
@@ -7298,7 +7356,7 @@ function vl(e, n = {}) {
7298
7356
  message: "delete_data 需要 jsonPath 指定要删的子路径(主数据整体不可删,用 set_data 整体替换)",
7299
7357
  hint: "如 jsonPath:\"components.0\" 删数组首项"
7300
7358
  });
7301
- if (cc(e)) return Y({
7359
+ if (dc(e)) return Y({
7302
7360
  code: "PATH_UNSAFE",
7303
7361
  message: `jsonPath "${e}" 含非法段`,
7304
7362
  hint: "使用正常属性路径"
@@ -7309,7 +7367,7 @@ function vl(e, n = {}) {
7309
7367
  hint: "仅 schema 声明的 key 可删"
7310
7368
  });
7311
7369
  if (d) {
7312
- let t = il(e, d.resourcesByPath);
7370
+ let t = sl(e, d.resourcesByPath);
7313
7371
  if (t) return Y({
7314
7372
  code: t.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED",
7315
7373
  message: `delete_data @ "${e}" 命中受保护字段 "${t.protectedPath}"(${t.spec.mode}),不可删除`,
@@ -7319,7 +7377,7 @@ function vl(e, n = {}) {
7319
7377
  let n = await x("delete", t || (h ? m : void 0));
7320
7378
  if (n !== null) return n;
7321
7379
  b("delete");
7322
- let r = dc(a, e);
7380
+ let r = mc(a, e);
7323
7381
  return _(), y({
7324
7382
  op: "delete",
7325
7383
  detail: e,
@@ -7345,7 +7403,7 @@ function vl(e, n = {}) {
7345
7403
  hint: "用 history_data({list:true}) 查看可用快照序号"
7346
7404
  });
7347
7405
  let n = i.safeParse(t.value);
7348
- return n.success ? (yc(a, fc(t.value)), _(), y({
7406
+ return n.success ? (Sc(a, hc(t.value)), _(), y({
7349
7407
  op: "restore",
7350
7408
  detail: `#${t.id}`,
7351
7409
  timestamp: Date.now()
@@ -7379,9 +7437,9 @@ function vl(e, n = {}) {
7379
7437
  message: `未找到快照 #${e}`,
7380
7438
  hint: "不传 id 查看最近一次;或 history_data({list:true}) 查看可用序号"
7381
7439
  });
7382
- let a = fc(r.value), o = t || "";
7440
+ let a = hc(r.value), o = t || "";
7383
7441
  if (o) {
7384
- if (cc(o)) return Y({
7442
+ if (dc(o)) return Y({
7385
7443
  code: "PATH_UNSAFE",
7386
7444
  message: `jsonPath "${o}" 含非法段`,
7387
7445
  hint: "使用正常属性路径"
@@ -7412,7 +7470,7 @@ function vl(e, n = {}) {
7412
7470
  });
7413
7471
  let n = s ? Li(a, s) : a, r;
7414
7472
  try {
7415
- r = Wc(n, e);
7473
+ r = qc(n, e);
7416
7474
  } catch (t) {
7417
7475
  return Y({
7418
7476
  code: "JSONPATH_SYNTAX",
@@ -7436,7 +7494,7 @@ function vl(e, n = {}) {
7436
7494
  message: "主数据为空,无可搜索内容"
7437
7495
  });
7438
7496
  try {
7439
- let o = Kc(s ? Li(a, s) : a, e, {
7497
+ let o = Yc(s ? Li(a, s) : a, e, {
7440
7498
  mode: t,
7441
7499
  fuzzyThreshold: n,
7442
7500
  matchKey: r,
@@ -7486,7 +7544,7 @@ function vl(e, n = {}) {
7486
7544
  e && (o = Ii(o, e));
7487
7545
  }
7488
7546
  } else o = s ? Li(a, s) : a;
7489
- 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);
7490
7548
  if (!l.ok) {
7491
7549
  let t = /超时/.test(l.error || "");
7492
7550
  return Y({
@@ -7502,7 +7560,7 @@ function vl(e, n = {}) {
7502
7560
  if (t === "transform") {
7503
7561
  let e = l.result;
7504
7562
  if (r) {
7505
- let t = _l({
7563
+ let t = bl({
7506
7564
  bindRef: a,
7507
7565
  patches: [{
7508
7566
  op: "set",
@@ -7530,7 +7588,7 @@ function vl(e, n = {}) {
7530
7588
  message: `主数据 bind 为原始类型(${a === null ? "null" : typeof a}),eval transform(patches) 无法就地替换`,
7531
7589
  hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹或集成方通过 sdk.setData 替换 bind"
7532
7590
  });
7533
- let t = _l({
7591
+ let t = bl({
7534
7592
  bindRef: a,
7535
7593
  patches: e.patches,
7536
7594
  schema: i,
@@ -7550,7 +7608,7 @@ function vl(e, n = {}) {
7550
7608
  }
7551
7609
  let t = e;
7552
7610
  if (d) {
7553
- let e = ul({
7611
+ let e = pl({
7554
7612
  value: t,
7555
7613
  ctx: d
7556
7614
  });
@@ -7562,7 +7620,7 @@ function vl(e, n = {}) {
7562
7620
  code: "LEAF_BIND",
7563
7621
  message: `主数据 bind 为原始类型(${a === null ? "null" : typeof a}),eval transform 无法就地替换外部持有的值引用`,
7564
7622
  hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹或集成方通过 sdk.setData 替换 bind"
7565
- }) : (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({
7566
7624
  op: "edit",
7567
7625
  detail: "eval_transform",
7568
7626
  timestamp: Date.now()
@@ -7599,7 +7657,7 @@ function vl(e, n = {}) {
7599
7657
  e && (o = Ii(o, e));
7600
7658
  }
7601
7659
  let l = o;
7602
- if (d && (l = ol({
7660
+ if (d && (l = ll({
7603
7661
  jp: t,
7604
7662
  resolved: l,
7605
7663
  resourcesByPath: d.resourcesByPath,
@@ -7609,12 +7667,12 @@ function vl(e, n = {}) {
7609
7667
  } catch (e) {
7610
7668
  return `- ${t}: [READ_INTERCEPT: ${e.message}]`;
7611
7669
  }
7612
- 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)}`;
7613
7671
  });
7614
7672
  return `多路径读取(共 ${t.length} 项,hash=${f}):\n${e.join("\n")}`;
7615
7673
  }
7616
7674
  let p = e || "";
7617
- if (cc(p)) return Y({
7675
+ if (dc(p)) return Y({
7618
7676
  code: "PATH_UNSAFE",
7619
7677
  message: `jsonPath "${p}" 含非法段(__proto__/constructor/prototype)`,
7620
7678
  hint: "使用正常属性路径,如 components.0.text(数组索引数字)"
@@ -7631,7 +7689,7 @@ function vl(e, n = {}) {
7631
7689
  e && (h = Ii(h, e));
7632
7690
  }
7633
7691
  let g = h;
7634
- if (d && (g = ol({
7692
+ if (d && (g = ll({
7635
7693
  jp: p,
7636
7694
  resolved: g,
7637
7695
  resourcesByPath: d.resourcesByPath,
@@ -7644,7 +7702,7 @@ function vl(e, n = {}) {
7644
7702
  message: `read 拦截器抛错: ${e.message}`
7645
7703
  });
7646
7704
  }
7647
- 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));
7648
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}` : "";
7649
7707
  if ((l !== void 0 || u !== void 0) && Array.isArray(g)) {
7650
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;
@@ -7706,7 +7764,7 @@ function vl(e, n = {}) {
7706
7764
  message: "delete 需要 patch.jsonPath 指定要删的子路径(主数据整体不可删,用 write(value) 整体替换)",
7707
7765
  hint: "如 patch:{jsonPath:\"components.0\"}, del:true"
7708
7766
  });
7709
- if (cc(t.jsonPath)) return Y({
7767
+ if (dc(t.jsonPath)) return Y({
7710
7768
  code: "PATH_UNSAFE",
7711
7769
  message: `jsonPath "${t.jsonPath}" 含非法段`,
7712
7770
  hint: "使用正常属性路径"
@@ -7717,7 +7775,7 @@ function vl(e, n = {}) {
7717
7775
  hint: "仅 schema 声明的 key 可删"
7718
7776
  });
7719
7777
  if (d) {
7720
- let e = il(t.jsonPath, d.resourcesByPath);
7778
+ let e = sl(t.jsonPath, d.resourcesByPath);
7721
7779
  if (e) return Y({
7722
7780
  code: e.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED",
7723
7781
  message: `write delete @ "${t.jsonPath}" 命中受保护字段 "${e.protectedPath}"(${e.spec.mode}),不可删除`,
@@ -7727,11 +7785,11 @@ function vl(e, n = {}) {
7727
7785
  let e = await x("delete", v);
7728
7786
  if (e !== null) return e;
7729
7787
  if (c) {
7730
- let e = fc(a);
7731
- 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} 不存在(无需删除)。未实际写入。`;
7732
7790
  }
7733
7791
  b("delete");
7734
- let n = dc(a, t.jsonPath);
7792
+ let n = mc(a, t.jsonPath);
7735
7793
  return _(), y({
7736
7794
  op: "delete",
7737
7795
  detail: t.jsonPath,
@@ -7750,7 +7808,7 @@ function vl(e, n = {}) {
7750
7808
  op: t.op ?? "set",
7751
7809
  jsonPath: t.jsonPath || "",
7752
7810
  value: u
7753
- }]), o = _l({
7811
+ }]), o = bl({
7754
7812
  bindRef: a,
7755
7813
  patches: n,
7756
7814
  schema: i,
@@ -7769,11 +7827,11 @@ function vl(e, n = {}) {
7769
7827
  timestamp: Date.now()
7770
7828
  }), m = $(a), `已 write(edit) 主数据(${o.applied.length} 个 patch)。当前值:${Q(a, 600)} (新 hash=${$(a)})`) : o.error;
7771
7829
  }
7772
- let S = pc(u);
7830
+ let S = gc(u);
7773
7831
  if (S.parseError) return Gr("", u, S.parseError);
7774
7832
  let C = await x("set", v);
7775
7833
  if (C !== null) return C;
7776
- let w = gl({
7834
+ let w = yl({
7777
7835
  bindRef: a,
7778
7836
  value: S.parsed,
7779
7837
  schema: i,
@@ -7830,7 +7888,7 @@ function vl(e, n = {}) {
7830
7888
  if (n) {
7831
7889
  let e = t;
7832
7890
  if (typeof e == "string") {
7833
- let t = pc(e);
7891
+ let t = gc(e);
7834
7892
  t.parseError || (e = t.parsed);
7835
7893
  }
7836
7894
  r = e, i = "against";
@@ -7848,7 +7906,7 @@ function vl(e, n = {}) {
7848
7906
  });
7849
7907
  r = t.value, i = `快照 #${t.id}`;
7850
7908
  }
7851
- 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));
7852
7910
  return c.length ? `差异(当前 vs ${i},共 ${c.length} 处):\n${c.map((e) => ` ${e.path}: ${Q(e.from)} → ${Q(e.to)}`).join("\n")}` : `无差异:当前主数据与 ${i} 完全相同。`;
7853
7911
  }, {
7854
7912
  name: "diff_data",
@@ -7900,7 +7958,7 @@ function vl(e, n = {}) {
7900
7958
  }
7901
7959
  let u = await x("set", n || (h ? m : void 0));
7902
7960
  if (u !== null) return u;
7903
- let g = gl({
7961
+ let g = yl({
7904
7962
  bindRef: a,
7905
7963
  value: l,
7906
7964
  schema: i,
@@ -7932,7 +7990,7 @@ function vl(e, n = {}) {
7932
7990
  message: "未提供 path 或有效 handle",
7933
7991
  hint: "传 path(受保护字段)或 handle(占位符 ⟦res:handle⟧ 里的句柄)"
7934
7992
  });
7935
- let r = tl(n);
7993
+ let r = il(n);
7936
7994
  if (!c.has(r)) return Y({
7937
7995
  code: "RESOURCE_NOT_FOUND",
7938
7996
  message: `"${n}" 不是受保护字段`,
@@ -7971,7 +8029,7 @@ function vl(e, n = {}) {
7971
8029
  message: "resource_update 需要 path",
7972
8030
  hint: "传要更新的 verbatim 受保护字段路径"
7973
8031
  });
7974
- let n = tl(e), r = c.get(n);
8032
+ let n = il(e), r = c.get(n);
7975
8033
  if (!r) return Y({
7976
8034
  code: "RESOURCE_NOT_FOUND",
7977
8035
  message: `"${e}" 不是受保护字段`,
@@ -7992,7 +8050,7 @@ function vl(e, n = {}) {
7992
8050
  details: Ur(n.error.issues)
7993
8051
  });
7994
8052
  }
7995
- l.update(n, t), uc(a, n, t), m = $(a), _();
8053
+ l.update(n, t), pc(a, n, t), m = $(a), _();
7996
8054
  let s = l.get(n)?.handle;
7997
8055
  return `已更新 verbatim 资源 "${e}" = ${Q(t, 200)}(handle ${s ?? "(未知)"} 不变)。后续 write 该字段写回句柄 ⟦res:${s}⟧ 或新值`;
7998
8056
  }, {
@@ -8053,8 +8111,8 @@ function vl(e, n = {}) {
8053
8111
  }
8054
8112
  //#endregion
8055
8113
  //#region src/core/tools/fetchDoc.ts
8056
- var yl = 3e4, bl = [r(async ({ url: e, as: t }) => {
8057
- 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);
8058
8116
  try {
8059
8117
  let r = await fetch(e, {
8060
8118
  method: "GET",
@@ -8071,7 +8129,7 @@ var yl = 3e4, bl = [r(async ({ url: e, as: t }) => {
8071
8129
  ].join("\n");
8072
8130
  } catch (t) {
8073
8131
  let r = t?.message || String(t);
8074
- 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}`;
8075
8133
  } finally {
8076
8134
  clearTimeout(r);
8077
8135
  }
@@ -8082,7 +8140,7 @@ var yl = 3e4, bl = [r(async ({ url: e, as: t }) => {
8082
8140
  url: t.string().describe("要抓取的 URL(同源或已配 CORS)"),
8083
8141
  as: t.enum(["text", "markdown"]).optional().describe("返回格式标签,默认 text")
8084
8142
  })
8085
- })], xl = [
8143
+ })], wl = [
8086
8144
  "id",
8087
8145
  "class",
8088
8146
  "href",
@@ -8094,12 +8152,12 @@ var yl = 3e4, bl = [r(async ({ url: e, as: t }) => {
8094
8152
  "aria-label",
8095
8153
  "name",
8096
8154
  "type"
8097
- ], Sl = /^(value|srcdoc|formaction|on\w+)$/i, Cl = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session/i;
8098
- 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) {
8099
8157
  if (!e) return null;
8100
- 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) => {
8101
8159
  let t = {};
8102
- 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));
8103
8161
  return t;
8104
8162
  }, c = (e, t) => {
8105
8163
  let n = {
@@ -8115,10 +8173,10 @@ function wl(e, t) {
8115
8173
  };
8116
8174
  return c(e, n);
8117
8175
  }
8118
- var Tl = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
8176
+ var Ol = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
8119
8177
  let i = e ? document.querySelector(e) : document.body;
8120
8178
  if (!i) return `未找到匹配元素:selector="${e}"`;
8121
- let a = wl(i, {
8179
+ let a = Dl(i, {
8122
8180
  depth: t ?? 3,
8123
8181
  attrs: n,
8124
8182
  includeText: r ?? !0
@@ -8133,14 +8191,14 @@ var Tl = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
8133
8191
  attrs: t.array(t.string()).optional().describe("属性白名单(传了 = 严格白名单;不传 = 默认常用 + data-*)"),
8134
8192
  includeText: t.boolean().optional().describe("是否包含直接文本(默认 true)")
8135
8193
  })
8136
- }), El = [Tl];
8194
+ }), kl = [Ol];
8137
8195
  //#endregion
8138
8196
  //#region src/core/tools/envTool.ts
8139
- function Dl(e) {
8197
+ function Al(e) {
8140
8198
  let t = e;
8141
8199
  return typeof t.tagName == "string" || typeof t.nodeType == "number" && typeof t.nodeName == "string";
8142
8200
  }
8143
- function Ol(e, t = 3, n = 2e3, r) {
8201
+ function jl(e, t = 3, n = 2e3, r) {
8144
8202
  if (e == null) return e;
8145
8203
  if (typeof e == "string") return e.length > n ? e.slice(0, n) + "…(已截断)" : e;
8146
8204
  if (typeof e == "number" || typeof e == "boolean") return e;
@@ -8149,14 +8207,14 @@ function Ol(e, t = 3, n = 2e3, r) {
8149
8207
  if (typeof e == "bigint") return `${e.toString()}n`;
8150
8208
  if (typeof e != "object") return String(e);
8151
8209
  let i = e;
8152
- if (Dl(i)) {
8210
+ if (Al(i)) {
8153
8211
  let e = i;
8154
8212
  return e.tagName ? `[Element: <${e.tagName.toLowerCase()}>]` : `[Node: ${e.nodeName}]`;
8155
8213
  }
8156
8214
  if (r?.has(i)) return "[Circular]";
8157
8215
  let a = r ?? /* @__PURE__ */ new WeakSet();
8158
8216
  if (a.add(i), Array.isArray(e)) {
8159
- 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));
8160
8218
  return e.length > 100 && r.push(`…(共 ${e.length} 项,已截断)`), r;
8161
8219
  }
8162
8220
  if (t < 0) return "(对象,已截断)";
@@ -8168,14 +8226,14 @@ function Ol(e, t = 3, n = 2e3, r) {
8168
8226
  break;
8169
8227
  }
8170
8228
  try {
8171
- o[r] = Ol(i[r], t - 1, n, a);
8229
+ o[r] = jl(i[r], t - 1, n, a);
8172
8230
  } catch {
8173
8231
  o[r] = "(getter 抛错)";
8174
8232
  }
8175
8233
  }
8176
8234
  return o;
8177
8235
  }
8178
- function kl(e) {
8236
+ function Ml(e) {
8179
8237
  let t = e ?? (typeof window < "u" ? window : {}), n = t.navigator, r = t.location, i = t.document;
8180
8238
  return {
8181
8239
  location: {
@@ -8208,9 +8266,9 @@ function kl(e) {
8208
8266
  } : "(无 document)"
8209
8267
  };
8210
8268
  }
8211
- 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 }) => {
8212
8270
  if (e) {
8213
- if (Al.test(e) || jl.test(e)) return JSON.stringify({
8271
+ if (Nl.test(e) || Pl.test(e)) return JSON.stringify({
8214
8272
  key: e,
8215
8273
  denied: !0,
8216
8274
  reason: "安全:该 key 在 denylist(localStorage/sessionStorage/cookie/document 或敏感命名 token/secret/key/auth),不读取防泄漏"
@@ -8220,18 +8278,18 @@ var Al = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|open
8220
8278
  key: e,
8221
8279
  exists: t !== void 0,
8222
8280
  type: typeof t,
8223
- value: Ol(t)
8281
+ value: jl(t)
8224
8282
  }, null, 2);
8225
8283
  }
8226
- return JSON.stringify(kl(), null, 2);
8284
+ return JSON.stringify(Ml(), null, 2);
8227
8285
  }, {
8228
8286
  name: "inspect_env",
8229
8287
  description: "读取宿主页面环境信息(排查调试用,默认开启)。不传参 = 返回环境摘要(location 的 URL/origin/path、navigator 的浏览器/语言、viewport 视口尺寸、document 的 title/readyState);传 key = 读取指定 window 属性值(如 inspect_env({key:\"appConfig\"}) 读集成方挂的调试变量 window.appConfig)。用于排查「当前页面在哪/什么浏览器/视口多大/调试变量值是什么」。轻量只读,大结果自动外存 vfs。",
8230
8288
  schema: t.object({ key: t.string().optional().describe("要读取的 window 属性名(如 \"appConfig\"/\"__DEBUG__\");不传 = 返回环境摘要") })
8231
- }), Nl = [Ml];
8289
+ }), Il = [Fl];
8232
8290
  //#endregion
8233
8291
  //#region src/core/harness/budget.ts
8234
- function Pl(e, t, n) {
8292
+ function Ll(e, t, n) {
8235
8293
  let r = 0;
8236
8294
  return {
8237
8295
  name: "budget",
@@ -8256,12 +8314,12 @@ function Pl(e, t, n) {
8256
8314
  }
8257
8315
  //#endregion
8258
8316
  //#region src/core/sdk/actions.ts
8259
- var Fl = /^[a-zA-Z][a-zA-Z0-9_]*$/;
8260
- function Il(e) {
8317
+ var Rl = /^[a-zA-Z][a-zA-Z0-9_]*$/;
8318
+ function zl(e) {
8261
8319
  let n = [];
8262
8320
  for (let [i, a] of Object.entries(e)) {
8263
- if (!Fl.test(i)) {
8264
- console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${Fl}),已跳过`);
8321
+ if (!Rl.test(i)) {
8322
+ console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${Rl}),已跳过`);
8265
8323
  continue;
8266
8324
  }
8267
8325
  let e = a.description || `宿主动作 ${i}`;
@@ -8281,9 +8339,9 @@ function Il(e) {
8281
8339
  }
8282
8340
  return n;
8283
8341
  }
8284
- function Ll(e) {
8342
+ function Bl(e) {
8285
8343
  let t = {};
8286
- 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] = {
8287
8345
  description: r.description,
8288
8346
  hasParams: !!r.params
8289
8347
  });
@@ -8291,12 +8349,12 @@ function Ll(e) {
8291
8349
  }
8292
8350
  //#endregion
8293
8351
  //#region src/core/toolsets.ts
8294
- var Rl = bl, zl = El;
8295
- function Bl(e, t) {
8296
- return vl(e, t);
8352
+ var Vl = Cl, Hl = kl;
8353
+ function Ul(e, t) {
8354
+ return xl(e, t);
8297
8355
  }
8298
- function Vl(e, t, n, r, i) {
8299
- let a = ec(e);
8356
+ function Wl(e, t, n, r, i) {
8357
+ let a = rc(e);
8300
8358
  return [
8301
8359
  ...a.dataOps ? t : [],
8302
8360
  ...a.fetch ? n : [],
@@ -8306,7 +8364,7 @@ function Vl(e, t, n, r, i) {
8306
8364
  }
8307
8365
  //#endregion
8308
8366
  //#region src/core/sdk/toolRegistry.ts
8309
- function Hl(e) {
8367
+ function Gl(e) {
8310
8368
  let t = /* @__PURE__ */ new Map(), n = [];
8311
8369
  for (let r of e) for (let e of r.tools) {
8312
8370
  let i = t.get(e.name);
@@ -8326,15 +8384,15 @@ function Hl(e) {
8326
8384
  }
8327
8385
  //#endregion
8328
8386
  //#region src/core/harness/usageHints.ts
8329
- var Ul = .7;
8330
- function Wl(e, t, n = "simple", r = !1) {
8331
- 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";
8332
8390
  return {
8333
8391
  name: "usageHints",
8334
8392
  augmentPrompt: () => {
8335
8393
  let n = [];
8336
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) {
8337
- 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));
8338
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(" · 简单/明确任务(如\"标题改红色\")直接执行,不必走规划-反思。");
8339
8397
  }
8340
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;
@@ -8343,7 +8401,7 @@ function Wl(e, t, n = "simple", r = !1) {
8343
8401
  }
8344
8402
  //#endregion
8345
8403
  //#region src/core/harness/resourcesPin.ts
8346
- function Gl(e) {
8404
+ function Jl(e) {
8347
8405
  return {
8348
8406
  name: "resourcesPin",
8349
8407
  augmentPrompt: () => {
@@ -8357,78 +8415,78 @@ function Gl(e) {
8357
8415
  }
8358
8416
  //#endregion
8359
8417
  //#region src/core/backends/skillStore.ts
8360
- var Kl = "v:1::skill-store", ql = "chat-sdk";
8361
- function Jl(e, t, n) {
8362
- 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}`;
8363
8421
  }
8364
- function Yl(e, t) {
8365
- return `${Kl}::${e}::${t}::`;
8422
+ function Ql(e, t) {
8423
+ return `${Yl}::${e}::${t}::`;
8366
8424
  }
8367
- function Xl(e = {}) {
8368
- 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) => {
8369
8427
  a = e;
8370
8428
  });
8371
8429
  return (async () => {
8372
8430
  try {
8373
8431
  if (n === "indexed") {
8374
8432
  if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
8375
- i = await qs(t), a(!0);
8433
+ i = await Xs(t), a(!0);
8376
8434
  } else if (n === "session") {
8377
8435
  if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
8378
- i = Js(sessionStorage), a(!0);
8436
+ i = Zs(sessionStorage), a(!0);
8379
8437
  } else if (n === "local") {
8380
8438
  if (typeof localStorage > "u") throw Error("localStorage 不可用");
8381
- i = Js(localStorage), a(!0);
8382
- } else i = Ks(), a(!1);
8439
+ i = Zs(localStorage), a(!0);
8440
+ } else i = Ys(), a(!1);
8383
8441
  } catch {
8384
- i = Ks(), a(!1);
8442
+ i = Ys(), a(!1);
8385
8443
  }
8386
8444
  })(), {
8387
8445
  ready: o,
8388
8446
  async list() {
8389
8447
  let e = [];
8390
- return await i.scan(Yl(t, r), (t, n) => {
8448
+ return await i.scan(Ql(t, r), (t, n) => {
8391
8449
  e.push(n);
8392
8450
  }), e;
8393
8451
  },
8394
8452
  async get(e) {
8395
- return await i.get(Jl(t, r, e));
8453
+ return await i.get(Zl(t, r, e));
8396
8454
  },
8397
8455
  async put(e) {
8398
8456
  try {
8399
- await i.set(Jl(t, r, e.name), e);
8457
+ await i.set(Zl(t, r, e.name), e);
8400
8458
  } catch (e) {
8401
- Rs(e) && (i = Ks());
8459
+ Vs(e) && (i = Ys());
8402
8460
  }
8403
8461
  },
8404
8462
  async remove(e) {
8405
- let n = Jl(t, r, e);
8463
+ let n = Zl(t, r, e);
8406
8464
  return await i.get(n) == null ? !1 : (await i.del(n), !0);
8407
8465
  },
8408
8466
  async clear() {
8409
- await i.clearPrefix(Yl(t, r));
8467
+ await i.clearPrefix(Ql(t, r));
8410
8468
  },
8411
8469
  dispose() {}
8412
8470
  };
8413
8471
  }
8414
- var Zl = /large_results\/[^\s"'`),]+\.txt/g;
8415
- function Ql(e) {
8472
+ var eu = /large_results\/[^\s"'`),]+\.txt/g;
8473
+ function tu(e) {
8416
8474
  let t = /* @__PURE__ */ new Set(), n = (e) => {
8417
8475
  if (typeof e != "string" || !e) return;
8418
8476
  let n;
8419
- 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]);
8420
8478
  };
8421
8479
  for (let t of e) if (n(t.content), t.steps) for (let e of t.steps) n(e.result);
8422
8480
  return t;
8423
8481
  }
8424
- function $l(e, t) {
8482
+ function nu(e, t) {
8425
8483
  let n = [];
8426
8484
  for (let r of Object.keys(e)) r.startsWith("large_results/") && !t.has(r) && n.push(r);
8427
8485
  return n;
8428
8486
  }
8429
8487
  //#endregion
8430
8488
  //#region src/core/utils/serialRunner.ts
8431
- function eu() {
8489
+ function ru() {
8432
8490
  let e = Promise.resolve();
8433
8491
  return function(t) {
8434
8492
  let n = e.then(t, t);
@@ -8437,16 +8495,16 @@ function eu() {
8437
8495
  }
8438
8496
  //#endregion
8439
8497
  //#region src/core/sdk/createChatSdk.ts
8440
- var tu = 30, nu = /* @__PURE__ */ new Map();
8441
- function ru(e, t) {
8498
+ var iu = 30, au = /* @__PURE__ */ new Map();
8499
+ function ou(e, t) {
8442
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;
8443
8501
  }
8444
- function iu(e, t, n, r) {
8502
+ function su(e, t, n, r) {
8445
8503
  let i = 0;
8446
8504
  return {
8447
8505
  name: "sdk-events",
8448
8506
  wrapToolCall: async (t, r) => {
8449
- let i = await r(t), a = ru(t.name, t.args);
8507
+ let i = await r(t), a = ou(t.name, t.args);
8450
8508
  return a && e({
8451
8509
  type: "data_change",
8452
8510
  operation: a,
@@ -8481,7 +8539,7 @@ function iu(e, t, n, r) {
8481
8539
  }
8482
8540
  };
8483
8541
  }
8484
- function au(e, t, n, r, i) {
8542
+ function cu(e, t, n, r, i) {
8485
8543
  if (!n) return i && console.warn(`[page-agent-sdk][focus] capabilities.focus 关闭,${t} 忽略`), {
8486
8544
  ok: !1,
8487
8545
  error: "capabilities.focus 关闭"
@@ -8499,18 +8557,18 @@ function au(e, t, n, r, i) {
8499
8557
  error: "当前无主数据 schema,无法聚焦"
8500
8558
  });
8501
8559
  }
8502
- function ou(e, n) {
8560
+ function lu(e, n) {
8503
8561
  let i = {
8504
8562
  prompt_tokens: 0,
8505
8563
  completion_tokens: 0,
8506
8564
  total_tokens: 0
8507
- }, a = Ts(() => H), o = /* @__PURE__ */ Ot(0), s = Zs(e.storage);
8565
+ }, a = Os(() => U), o = /* @__PURE__ */ Ot(0), s = ec(e.storage);
8508
8566
  e.debug && s && s.onEvent((e) => console.log("[page-agent-sdk][storage]", e));
8509
- 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;
8510
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)`);
8511
- 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;
8512
8570
  e.debug && !l && console.warn("[page-agent-sdk][summarization] 未构造 llmInvoke(apiKey 缺失?),摘要回退零成本索引摘要");
8513
- let b = /* @__PURE__ */ _t([]), x = Tc(e.vfs?.initialFiles, {
8571
+ let b = /* @__PURE__ */ _t([]), x = Oc(e.vfs?.initialFiles, {
8514
8572
  persist: s ? { save: (e) => {
8515
8573
  W.sessionId && s && s.save(n, W.sessionId, { vfs: e });
8516
8574
  } } : void 0,
@@ -8530,18 +8588,18 @@ function ou(e, n) {
8530
8588
  getTodos: () => ee.current?.getState?.()?.todos ?? [],
8531
8589
  messages: b,
8532
8590
  maxCheckpoints: O && typeof O == "object" ? O.maxCheckpoints : void 0
8533
- }) : 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, {
8534
8592
  onAudit: e.onAudit ?? (e.debug ? (e) => console.log("[page-agent-sdk][data audit]", e) : void 0),
8535
8593
  maxSnapshots: e.maxSnapshots,
8536
8594
  onConflict: a.set,
8537
8595
  autoLock: e.autoLock,
8538
8596
  interceptors: e.interceptors,
8539
8597
  vfsStore: M || D?.resources?.length ? x : void 0
8540
- }) : [], 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);
8541
8599
  ce.forEach((e) => I.set(e.name, "builtin"));
8542
8600
  let le = [...e.tools || []];
8543
8601
  le.forEach((e) => I.set(e.name, "user"));
8544
- let L = Il(e.actions ?? {});
8602
+ let L = zl(e.actions ?? {});
8545
8603
  L.forEach((e) => I.set(e.name, "action"));
8546
8604
  let ue = [], de = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), fe = de ? Wa() : null;
8547
8605
  fe && I.set(Ha, "builtin");
@@ -8613,7 +8671,7 @@ function ou(e, n) {
8613
8671
  ve.forEach((e) => I.set(e.name, "builtin"));
8614
8672
  let z = [], ye = /* @__PURE__ */ new Map(), B = be();
8615
8673
  function be() {
8616
- let { tools: e, collisions: t } = Hl([
8674
+ let { tools: e, collisions: t } = Gl([
8617
8675
  {
8618
8676
  label: "builtin",
8619
8677
  tools: ce
@@ -8650,15 +8708,15 @@ function ou(e, n) {
8650
8708
  return t.length && console.warn("[page-agent-sdk] 工具重名,后注册覆盖先注册:", t.map((e) => `${e.name}(${e.loser}→${e.winner})`).join(", ")), e;
8651
8709
  }
8652
8710
  let xe = j.planning, Se = j.missionAnchor, Ce = j.workingMemory, we = j.skills, Te = j.vfs;
8653
- if (Te) for (let e of Mc) I.set(e, "builtin");
8711
+ if (Te) for (let e of Fc) I.set(e, "builtin");
8654
8712
  if (xe) for (let e of S.tools ?? []) I.set(e.name, "builtin");
8655
8713
  let Ee = j.summarization, De = j.agentCompression && !!p;
8656
8714
  e.debug && j.agentCompression && !p && console.warn("[page-agent-sdk][agentCompression] agentCompression 开启但 summaryLlm 不可用(或缺 apiKey / 模型不支持工具),压缩决策不启用,回退静态压缩");
8657
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;
8658
8716
  e.verify?.check && !j.verify && console.warn("[page-agent-sdk][verify] 检测到 verify.check 但 capabilities.verify 未开启,verify 未装载");
8659
- 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({
8660
8718
  llm: Pe?.llm ?? e.llm,
8661
- allTools: () => B,
8719
+ allTools: () => W.agent?.allTools ?? B,
8662
8720
  allowedTools: Fe.length ? Fe : void 0,
8663
8721
  systemPrompt: Pe?.systemPrompt,
8664
8722
  temperature: Pe?.temperature,
@@ -8669,32 +8727,36 @@ function ou(e, n) {
8669
8727
  debug: e.debug,
8670
8728
  getFocuses: () => w.getFocuses(),
8671
8729
  getSchema: () => F()?.schema ?? null,
8672
- tracker: Ae
8673
- }), 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, {
8674
8734
  llm: e.llm,
8675
- allTools: () => B,
8735
+ allTools: () => W.agent?.allTools ?? B,
8676
8736
  debug: e.debug,
8677
8737
  getFocuses: () => w.getFocuses(),
8678
8738
  getSchema: () => F()?.schema ?? null,
8679
- tracker: Ae
8680
- }) : 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 = [
8681
8743
  "get_data",
8682
8744
  "describe_data",
8683
8745
  "read",
8684
8746
  "fetch_document"
8685
- ], ze = B.filter((e) => V.includes(e.name)), Be = Me ? Io({
8686
- check: e.verify.check ?? Ho({
8747
+ ], Ve = B.filter((e) => Be.includes(e.name)), He = Me ? zo({
8748
+ check: e.verify.check ?? Go({
8687
8749
  schemas: () => F() ? { "": F().schema } : {},
8688
8750
  root: () => F()?.bind
8689
8751
  }),
8690
8752
  adversarial: e.verify?.adversarial ? {
8691
8753
  llm: e.llm,
8692
- tools: ze
8754
+ tools: Ve
8693
8755
  } : void 0
8694
- }) : void 0, Ve = Ne ? ns({
8756
+ }) : void 0, Ue = Ne ? as({
8695
8757
  contextWindow: m.contextWindow,
8696
- thresholdRatio: ic(e, m.contextWindow).summaryThresholdRatio
8697
- }) : void 0, He = Wl({
8758
+ thresholdRatio: sc(e, m.contextWindow).summaryThresholdRatio
8759
+ }) : void 0, We = ql({
8698
8760
  ...j,
8699
8761
  humanConfirm: de,
8700
8762
  subagents: e.subagents?.map((e) => ({
@@ -8702,10 +8764,10 @@ function ou(e, n) {
8702
8764
  description: e.description,
8703
8765
  temperature: e.temperature
8704
8766
  }))
8705
- }, ne && !!D, e.toolMode, !!D?.resources?.length), Ue = D ? {
8767
+ }, ne && !!D, e.toolMode, !!D?.resources?.length), Ge = D ? {
8706
8768
  name: "dataHint",
8707
- augmentPrompt: () => cs(F(), e.schemaHint) || void 0
8708
- } : null, We = e.augmentSystem ? {
8769
+ augmentPrompt: () => ds(F(), e.schemaHint) || void 0
8770
+ } : null, Ke = e.augmentSystem ? {
8709
8771
  name: "augmentSystem",
8710
8772
  augmentPrompt: (t) => {
8711
8773
  try {
@@ -8718,52 +8780,52 @@ function ou(e, n) {
8718
8780
  return;
8719
8781
  }
8720
8782
  }
8721
- } : null, Ge = e.onEvent, Ke = tc(e.onEvent), H = Ke.emit, qe, U = [], Je = (e) => ({
8783
+ } : null, qe = ic(e.onEvent), U = qe.emit, Je, Ye = [], Xe = (e) => ({
8722
8784
  name: e.name,
8723
8785
  description: e.description,
8724
8786
  content: typeof e.getContent == "function" ? e.getContent() : ""
8725
- }), Ye = (e) => ({
8787
+ }), Ze = (e) => ({
8726
8788
  name: e.name,
8727
8789
  description: e.description,
8728
8790
  getContent: () => e.content
8729
- }), Xe = e.skillStorage === !1 ? null : Xl({
8791
+ }), Qe = e.skillStorage === !1 ? null : $l({
8730
8792
  ...typeof e.skillStorage == "object" ? e.skillStorage : {},
8731
8793
  id: e.skillStorage && typeof e.skillStorage == "object" && e.skillStorage.id ? e.skillStorage.id : `agent::${n}`
8732
- }), Ze = () => {
8733
- let t = qe ? qe.controller : null;
8794
+ }), $e = () => {
8795
+ let t = Je ? Je.controller : null;
8734
8796
  if (t) {
8735
- let n = (e.skills || []).filter((e) => !U.some((t) => t.name === e.name));
8736
- t.set([...n, ...U]);
8797
+ let n = (e.skills || []).filter((e) => !Ye.some((t) => t.name === e.name));
8798
+ t.set([...n, ...Ye]);
8737
8799
  }
8738
8800
  W.infoTick.value++;
8739
- }, Qe = async () => {
8740
- if (Xe) try {
8741
- let t = await Xe.list();
8801
+ }, et = async () => {
8802
+ if (Qe) try {
8803
+ let t = await Qe.list();
8742
8804
  if (t.length) {
8743
- U = t.map(Ye);
8744
- let n = qe ? qe.controller : null;
8805
+ Ye = t.map(Ze);
8806
+ let n = Je ? Je.controller : null;
8745
8807
  if (n) {
8746
- let t = (e.skills || []).filter((e) => !U.some((t) => t.name === e.name));
8747
- n.set([...t, ...U]);
8808
+ let t = (e.skills || []).filter((e) => !Ye.some((t) => t.name === e.name));
8809
+ n.set([...t, ...Ye]);
8748
8810
  }
8749
8811
  W.infoTick.value++;
8750
8812
  }
8751
8813
  } catch {}
8752
- }, $e = Ee ? yo({
8814
+ }, tt = Ee ? yo({
8753
8815
  ...h,
8754
8816
  llmInvoke: l,
8755
8817
  getRegisteredData: () => F() ? [{ description: F().description ?? "主数据对象" }] : [],
8756
8818
  preserveLastToolResults: _,
8757
8819
  ...De ? {
8758
8820
  decideInvoke: p,
8759
- getSnapshot: () => Ve?.getSnapshot()
8821
+ getSnapshot: () => Ue?.getSnapshot()
8760
8822
  } : {}
8761
- }) : void 0, et = oc([
8762
- ...Ue ? [Ue] : [],
8763
- He,
8823
+ }) : void 0, nt = lc([
8824
+ ...Ge ? [Ge] : [],
8825
+ We,
8764
8826
  ...Se ? [C] : [],
8765
8827
  ...xe ? [S] : [],
8766
- ...we ? [qe = Na(e.skills || [], {
8828
+ ...we ? [Je = Na(e.skills || [], {
8767
8829
  readVfs: Te ? (e) => x.files[e]?.content : void 0,
8768
8830
  hostScriptEnabled: j.skillHostScript,
8769
8831
  onToolsReady: (e, t) => {
@@ -8774,37 +8836,37 @@ function ou(e, n) {
8774
8836
  B = be(), W.agent && W.agent.setTools(B), W.infoTick.value++;
8775
8837
  }
8776
8838
  })] : [],
8777
- ...Te ? [Pc(x)] : [],
8778
- ...$e ? [$e] : [],
8839
+ ...Te ? [Lc(x)] : [],
8840
+ ...tt ? [tt] : [],
8779
8841
  ...Ce ? [T] : [],
8780
8842
  ...R ? [w] : [],
8781
8843
  ...se ? [se] : [],
8782
8844
  ...Oe ? [E] : [],
8783
- ...e.permissions?.length ? [Ba(e.permissions)] : [],
8845
+ ...Ie ? [Ie] : [],
8784
8846
  ...k && te && A ? [$a(A)] : [],
8785
8847
  ...de ? [Ga()] : [],
8786
- ...e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? [Va(e.approval)] : [],
8787
- ...Be ? [Be] : [],
8788
- ...Ie ? [Ie] : [],
8789
8848
  ...Le ? [Le] : [],
8790
- ...We ? [We] : [],
8791
- ...Ve ? [Ve] : [],
8849
+ ...He ? [He] : [],
8850
+ ...V ? [V] : [],
8851
+ ...H ? [H] : [],
8852
+ ...Ke ? [Ke] : [],
8853
+ ...Ue ? [Ue] : [],
8792
8854
  ...e.middleware || [],
8793
- ...re ? [Pl(i, {
8855
+ ...re ? [Ll(i, {
8794
8856
  tokenBudget: e.tokenBudget,
8795
8857
  timeBudgetMs: e.timeBudgetMs
8796
- }, H)] : [],
8797
- iu(H, b, F, i)
8798
- ]), tt = e.maxMemoryRounds ?? tu, nt = /* @__PURE__ */ Ot([]);
8799
- async function rt() {
8800
- s && (nt.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));
8801
8863
  }
8802
8864
  let W = {
8803
8865
  agentId: n,
8804
8866
  store: s,
8805
8867
  messages: b,
8806
8868
  vfsStore: x,
8807
- listeners: Ke.listeners,
8869
+ listeners: qe.listeners,
8808
8870
  todosMw: S,
8809
8871
  memoryMw: E,
8810
8872
  missionMw: C,
@@ -8818,14 +8880,14 @@ function ou(e, n) {
8818
8880
  mcpServers: [],
8819
8881
  checkpoint: A,
8820
8882
  dataOpsController: oe,
8821
- skillsController: qe ? qe.controller : null,
8883
+ skillsController: Je ? Je.controller : null,
8822
8884
  infoTick: o,
8823
8885
  pendingConflict: a.pendingConflict,
8824
- sessions: nt,
8825
- refreshSessions: rt,
8886
+ sessions: it,
8887
+ refreshSessions: at,
8826
8888
  liveData: F,
8827
8889
  usage: i,
8828
- emit: H,
8890
+ emit: U,
8829
8891
  unloadSkillTools(e) {
8830
8892
  if (e) {
8831
8893
  let t = z.length;
@@ -8848,21 +8910,21 @@ function ou(e, n) {
8848
8910
  }
8849
8911
  }
8850
8912
  }
8851
- st();
8913
+ lt();
8852
8914
  },
8853
8915
  addSkill(e) {
8854
- let t = U.findIndex((t) => t.name === e.name);
8855
- t >= 0 ? U[t] = e : U.push(e), Ze(), Xe && Xe.put(Je(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));
8856
8918
  },
8857
8919
  removeSkill(e) {
8858
- let t = U.findIndex((t) => t.name === e);
8859
- return t < 0 ? !1 : (U.splice(t, 1), Ze(), Xe && Xe.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);
8860
8922
  },
8861
8923
  listUserSkills() {
8862
- return U.map((e) => e.name);
8924
+ return Ye.map((e) => e.name);
8863
8925
  },
8864
8926
  getUserSkill(e) {
8865
- let t = U.find((t) => t.name === e);
8927
+ let t = Ye.find((t) => t.name === e);
8866
8928
  if (t) return {
8867
8929
  name: t.name,
8868
8930
  description: t.description,
@@ -8870,7 +8932,7 @@ function ou(e, n) {
8870
8932
  };
8871
8933
  },
8872
8934
  afterRound() {
8873
- ct(), dt();
8935
+ ut(), pt();
8874
8936
  },
8875
8937
  async send(e, t) {
8876
8938
  await W.initDone, t ??= {}, t?.mission && Se && C.setMission(t.mission);
@@ -8900,7 +8962,7 @@ function ou(e, n) {
8900
8962
  } catch (e) {
8901
8963
  let t = qr(e, "fatal");
8902
8964
  if (i < r && A?.canRestore()) {
8903
- i += 1, A.restore(), a = !0, H({
8965
+ i += 1, A.restore(), a = !0, U({
8904
8966
  type: "error",
8905
8967
  message: `致命错误自动恢复(${i}/${r}):${t.message},已回退 checkpoint 重试`,
8906
8968
  severity: "observable",
@@ -8912,7 +8974,7 @@ function ou(e, n) {
8912
8974
  });
8913
8975
  continue;
8914
8976
  }
8915
- throw H({
8977
+ throw U({
8916
8978
  type: "error",
8917
8979
  message: t.message,
8918
8980
  severity: t.severity,
@@ -8954,7 +9016,7 @@ function ou(e, n) {
8954
9016
  } catch (o) {
8955
9017
  b.length > a && b.splice(a);
8956
9018
  let s = qr(o, "fatal");
8957
- H({
9019
+ U({
8958
9020
  type: "error",
8959
9021
  message: `批量任务 ${r + 1}/${e.length} 失败:${s.message}`,
8960
9022
  severity: "observable",
@@ -8996,25 +9058,25 @@ function ou(e, n) {
8996
9058
  }
8997
9059
  x.flush?.(), await s.flush();
8998
9060
  let r = t ?? "", i;
8999
- 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({
9000
9062
  type: "session_restored",
9001
9063
  sessionId: r,
9002
9064
  rounds: i.messages?.length ?? 0
9003
- })), e.memory && s.save(n, W.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), rt(), lt = void 0, ut = !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;
9004
9066
  },
9005
9067
  resetSession: () => {
9006
- 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({
9007
9069
  type: "session_restored",
9008
9070
  sessionId: W.sessionId,
9009
9071
  rounds: 0
9010
- }), rt(), lt = void 0, ut = !1);
9072
+ }), at(), dt = void 0, ft = !1);
9011
9073
  },
9012
9074
  stream: (e, t, n) => {
9013
9075
  if (!W.agent) throw Error("page-agent-sdk: agent 尚未初始化完成,请先 await mount()");
9014
- x?.setProtectedRefs?.(Ql(e));
9015
- let r = Ge ? (e) => {
9016
- t?.(e), H(e);
9017
- } : t;
9076
+ x?.setProtectedRefs?.(tu(e));
9077
+ let r = (e) => {
9078
+ t?.(e), U(e);
9079
+ };
9018
9080
  if (n) {
9019
9081
  let e = () => a.resolve("keep_external");
9020
9082
  n.aborted ? e() : n.addEventListener("abort", e, { once: !0 });
@@ -9023,9 +9085,9 @@ function ou(e, n) {
9023
9085
  },
9024
9086
  release() {
9025
9087
  if (W.refCount--, W.refCount <= 0) {
9026
- s && (x.flush?.(), s.flush(), s.dispose()), Xe && Xe.dispose();
9088
+ s && (x.flush?.(), s.flush(), s.dispose()), Qe && Qe.dispose();
9027
9089
  let e = W.mcpClosers.splice(0);
9028
- e.length && Promise.allSettled(e.map((e) => e())), nu.delete(n);
9090
+ e.length && Promise.allSettled(e.map((e) => e())), au.delete(n);
9029
9091
  }
9030
9092
  },
9031
9093
  resolveConflict: a.resolve,
@@ -9045,20 +9107,20 @@ function ou(e, n) {
9045
9107
  },
9046
9108
  setLlm(t) {
9047
9109
  let n;
9048
- if (hs(t)) n = t;
9110
+ if (vs(t)) n = t;
9049
9111
  else {
9050
9112
  let e = t;
9051
9113
  if ((e.provider ?? "openai") === "anthropic") throw Error("[page-agent-sdk][setLlm] 切换到 Anthropic 需传 BaseChatModel 实例(动态 import 无法同步);请先 const { ChatAnthropic } = await import(\"@langchain/anthropic\") 构造实例后传入");
9052
9114
  n = d(e);
9053
9115
  }
9054
9116
  typeof n.bindTools != "function" && e.debug && console.warn("[page-agent-sdk][setLlm] 新模型不支持 bindTools(tool calling 会失效)"), y = t;
9055
- let r = hs(t) ? void 0 : t;
9117
+ let r = vs(t) ? void 0 : t;
9056
9118
  if (m = ni({
9057
9119
  model: r?.model ?? t.model ?? t.modelName,
9058
9120
  contextWindow: e.contextWindow ?? r?.contextWindow,
9059
9121
  maxOutputTokens: e.maxOutputTokens ?? r?.maxOutputTokens
9060
9122
  }), m.contextWindow < 2e5) throw Error(`[page-agent-sdk][setLlm] 新模型上下文窗口 ${m.contextWindow} 小于最小支持 ${ti}(需 ≥200K 窗口模型)`);
9061
- W.agent && (W.agent.setLlm(n), W.agent.setModelCaps?.(m)), $e?.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);
9062
9124
  },
9063
9125
  setMemory(e) {
9064
9126
  E.reset(e), typeof e == "function" && E.refresh(), W.infoTick.value++;
@@ -9067,22 +9129,22 @@ function ou(e, n) {
9067
9129
  return E.refresh();
9068
9130
  },
9069
9131
  setSubagents(t) {
9070
- if (!Re) {
9132
+ if (!ze) {
9071
9133
  e.debug && console.warn("[page-agent-sdk][setSubagents] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略");
9072
9134
  return;
9073
9135
  }
9074
- Re.set(t), W.infoTick.value++;
9136
+ ze.set(t), W.infoTick.value++;
9075
9137
  },
9076
9138
  addSubagent(t) {
9077
- if (!Re) {
9139
+ if (!ze) {
9078
9140
  e.debug && console.warn("[page-agent-sdk][addSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略");
9079
9141
  return;
9080
9142
  }
9081
- Re.add(t), W.infoTick.value++;
9143
+ ze.add(t), W.infoTick.value++;
9082
9144
  },
9083
9145
  removeSubagent(t) {
9084
- if (!Re) return e.debug && console.warn("[page-agent-sdk][removeSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略"), !1;
9085
- 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);
9086
9148
  return n && W.infoTick.value++, n;
9087
9149
  },
9088
9150
  getActiveSubagents() {
@@ -9095,15 +9157,15 @@ function ou(e, n) {
9095
9157
  return {
9096
9158
  id: n,
9097
9159
  sessionId: W.sessionId,
9098
- model: hs(y) ? y.model ?? y.modelName : y.model,
9099
- 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),
9100
9162
  tools: (W.agent?.allTools ?? B).map((e) => ({
9101
9163
  name: e.name,
9102
9164
  description: e.description,
9103
9165
  schema: e.schema,
9104
9166
  source: I.get(e.name) || "user"
9105
9167
  })),
9106
- skills: (qe ? qe.controller.get() : e.skills ?? []).map((e) => ({
9168
+ skills: (Je ? Je.controller.get() : e.skills ?? []).map((e) => ({
9107
9169
  name: e.name,
9108
9170
  description: e.description
9109
9171
  })),
@@ -9113,7 +9175,7 @@ function ou(e, n) {
9113
9175
  } : void 0,
9114
9176
  contextPreset: e.contextPreset ?? "auto",
9115
9177
  memory: E.get(),
9116
- middleware: et.map((e) => e.name),
9178
+ middleware: nt.map((e) => e.name),
9117
9179
  todos: (W.agent?.getState?.()?.todos ?? []).map((e) => ({
9118
9180
  id: e.id,
9119
9181
  content: e.content,
@@ -9132,23 +9194,23 @@ function ou(e, n) {
9132
9194
  spans: W.agent.spans.value,
9133
9195
  metrics: ai(W.agent.spans.value)
9134
9196
  } : void 0,
9135
- actions: Ll(e.actions ?? {}),
9197
+ actions: Bl(e.actions ?? {}),
9136
9198
  subagent: {
9137
- enabled: !!Ie,
9199
+ enabled: !!V,
9138
9200
  maxDepth: e.subagent?.maxDepth ?? 1,
9139
9201
  maxParallel: e.subagent?.maxParallel ?? 4,
9140
9202
  allowedTools: e.subagent?.allowedTools ?? [],
9141
- subagents: Re?.get() ?? [],
9203
+ subagents: ze?.get() ?? [],
9142
9204
  active: Ae?.getActive() ?? [],
9143
9205
  history: Ae?.getHistory() ?? []
9144
9206
  },
9145
9207
  verify: {
9146
- enabled: !!Be,
9208
+ enabled: !!He,
9147
9209
  maxAttempts: Me ? je : 0,
9148
9210
  adversarial: Me && !!e.verify?.adversarial
9149
9211
  },
9150
9212
  context: (() => {
9151
- let e = Ve?.getSnapshot();
9213
+ let e = Ue?.getSnapshot();
9152
9214
  if (e) {
9153
9215
  let t = W.agent?.getState?.()?.lastCompression;
9154
9216
  t && (e.compression = t);
@@ -9181,11 +9243,11 @@ function ou(e, n) {
9181
9243
  return R ? w.getFocuses() : [];
9182
9244
  },
9183
9245
  setFocus(t) {
9184
- let n = au(t, "setFocus", R, () => F()?.schema, e.debug);
9246
+ let n = cu(t, "setFocus", R, () => F()?.schema, e.debug);
9185
9247
  return n.ok ? (w.setFocus(t), W.infoTick.value++, { ok: !0 }) : n;
9186
9248
  },
9187
9249
  addFocus(t) {
9188
- let n = au(t, "addFocus", R, () => F()?.schema, e.debug);
9250
+ let n = cu(t, "addFocus", R, () => F()?.schema, e.debug);
9189
9251
  return n.ok ? w.getFocuses().length >= 8 ? (e.debug && console.warn("[page-agent-sdk][focus] addFocus 拒绝:焦点数已达上限 8(augmentPrompt 注入每焦点子树 schema,过多致 system prompt 超预算)"), {
9190
9252
  ok: !1,
9191
9253
  error: "焦点数上限 8(避免 system prompt 撑爆)"
@@ -9198,14 +9260,14 @@ function ou(e, n) {
9198
9260
  R && (w.clearFocus(), W.infoTick.value++);
9199
9261
  }
9200
9262
  };
9201
- async function it() {
9263
+ async function ot() {
9202
9264
  if (!s) return;
9203
9265
  await s.ready;
9204
9266
  let t = e.session || {};
9205
9267
  if (t.id) {
9206
9268
  W.sessionId = t.id;
9207
9269
  let e = await s.load(n, W.sessionId);
9208
- e ? (W.applySnapshot(e), H({
9270
+ e ? (W.applySnapshot(e), U({
9209
9271
  type: "session_restored",
9210
9272
  sessionId: W.sessionId,
9211
9273
  rounds: e.messages?.length ?? 0
@@ -9215,35 +9277,35 @@ function ou(e, n) {
9215
9277
  if (e.debug && console.log("[page-agent-sdk][restore] listSessions", n, r.length, r.map((e) => e.sessionId)), r.length) {
9216
9278
  W.sessionId = r[0].sessionId;
9217
9279
  let t = await s.load(n, W.sessionId);
9218
- t ? (W.applySnapshot(t), H({
9280
+ t ? (W.applySnapshot(t), U({
9219
9281
  type: "session_restored",
9220
9282
  sessionId: W.sessionId,
9221
9283
  rounds: t.messages?.length ?? 0
9222
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);
9223
9285
  } else W.sessionId = await s.createSession(n, t.title), e.debug && console.log("[page-agent-sdk][restore] 新建会话(无历史)", W.sessionId);
9224
9286
  } else W.sessionId = await s.createSession(n, t.title);
9225
- e.memory && s.save(n, W.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), rt();
9287
+ e.memory && s.save(n, W.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), at();
9226
9288
  }
9227
- async function at() {
9228
- await Qe();
9289
+ async function st() {
9290
+ await et();
9229
9291
  }
9230
- function ot(e) {
9292
+ function ct(e) {
9231
9293
  let t = {};
9232
- for (let n of Ql(e)) {
9294
+ for (let n of tu(e)) {
9233
9295
  let e = x.files[n];
9234
9296
  e && (t[n] = e.content);
9235
9297
  }
9236
9298
  return t;
9237
9299
  }
9238
- function st() {
9239
- let e = $l(x.files, Ql(b));
9300
+ function lt() {
9301
+ let e = nu(x.files, tu(b));
9240
9302
  for (let t of e) delete x.files[t];
9241
9303
  }
9242
- function ct() {
9243
- let e = co(b, tt);
9304
+ function ut() {
9305
+ let e = co(b, rt);
9244
9306
  if (!e.trimmed) return;
9245
9307
  let { older: t, summary: n } = e;
9246
- if (H({
9308
+ if (U({
9247
9309
  type: "context_trimmed",
9248
9310
  dropped: t.map((e) => ({
9249
9311
  round: e.round,
@@ -9251,22 +9313,22 @@ function ou(e, n) {
9251
9313
  assistant: e.assistantMsgs.map((e) => e.content),
9252
9314
  steps: e.assistantMsgs.flatMap((e) => e.steps ?? [])
9253
9315
  })),
9254
- vfsResults: ot(t.flatMap((e) => [e.userMsg, ...e.assistantMsgs])),
9316
+ vfsResults: ct(t.flatMap((e) => [e.userMsg, ...e.assistantMsgs])),
9255
9317
  summary: n.content,
9256
9318
  reason: "max_memory_rounds"
9257
- }), b.splice(e.deleteFrom, e.deleteCount, n), st(), g && l) {
9319
+ }), b.splice(e.deleteFrom, e.deleteCount, n), lt(), g && l) {
9258
9320
  let n = e.summary, { prevSeg: r } = e;
9259
9321
  (async () => {
9260
9322
  try {
9261
9323
  let e = await l(mo(t, v)), i = b.indexOf(n);
9262
9324
  if (i < 0) return;
9263
- b[i].content = so(t, r, e), dt();
9325
+ b[i].content = so(t, r, e), pt();
9264
9326
  } catch {}
9265
9327
  })();
9266
9328
  }
9267
9329
  }
9268
- let lt, ut = !1;
9269
- function dt() {
9330
+ let dt, ft = !1;
9331
+ function pt() {
9270
9332
  if (!W.sessionId || !s) return;
9271
9333
  let t = JSON.parse(JSON.stringify(b));
9272
9334
  s.save(n, W.sessionId, { messages: t });
@@ -9284,15 +9346,15 @@ function ou(e, n) {
9284
9346
  s.save(n, W.sessionId, { focus: e.length ? e : null });
9285
9347
  }
9286
9348
  re && A && (s.save(n, W.sessionId, { checkpoints: A.exportStack() }), s.save(n, W.sessionId, { usage: i }));
9287
- let a = ms(b);
9288
- a && a !== lt && (lt = a, s.updateTitle(n, W.sessionId, a)), e.autoTitle !== !1 && u && !ut && b.some((e) => e.role === "user") && b.some((e) => e.role === "assistant") && (ut = !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 () => {
9289
9351
  let e = await u(b);
9290
- e && (await s.updateTitle(n, W.sessionId, e), await rt());
9352
+ e && (await s.updateTitle(n, W.sessionId, e), await at());
9291
9353
  })()), e.debug && console.log("[page-agent-sdk][persist] save", W.sessionId, `${b.length} msgs`);
9292
9354
  }
9293
9355
  return W.initDone = (async () => {
9294
- if (await it(), await at(), e.mcp?.length) {
9295
- 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)));
9296
9358
  W.mcpClosers = t.flatMap((e) => e.status === "fulfilled" ? [e.value.close] : []), W.mcpServers = [], t.forEach((t, n) => {
9297
9359
  let r = e.mcp[n], i = r.name ?? r.url;
9298
9360
  t.status === "fulfilled" ? (W.mcpServers.push({
@@ -9302,12 +9364,12 @@ function ou(e, n) {
9302
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);
9303
9365
  }), B = be(), e.debug && console.log(`[page-agent-sdk][mcp] 注入 ${ue.length} 个工具,${W.mcpServers.length} 个 server`);
9304
9366
  }
9305
- let t = hs(e.llm) ? e.llm : await f(e.llm);
9367
+ let t = vs(e.llm) ? e.llm : await f(e.llm);
9306
9368
  W.agent = ji({
9307
9369
  llm: t,
9308
9370
  systemPrompt: P,
9309
9371
  tools: B,
9310
- middleware: et,
9372
+ middleware: nt,
9311
9373
  maxToolRounds: e.maxToolRounds,
9312
9374
  maxRetries: e.maxRetries,
9313
9375
  maxParallelTools: e.maxParallelTools,
@@ -9319,7 +9381,7 @@ function ou(e, n) {
9319
9381
  },
9320
9382
  onTrace: N ? (e, t) => {
9321
9383
  try {
9322
- H({
9384
+ U({
9323
9385
  type: "trace",
9324
9386
  spans: e,
9325
9387
  metrics: t
@@ -9327,17 +9389,17 @@ function ou(e, n) {
9327
9389
  } catch {}
9328
9390
  } : void 0,
9329
9391
  debug: e.debug
9330
- }), ee.current = W.agent, Le && Le.setReconfigureHook && Le.setReconfigureHook(() => {
9392
+ }), ee.current = W.agent, H && H.setReconfigureHook && H.setReconfigureHook(() => {
9331
9393
  W.agent && W.agent.setTools(be());
9332
9394
  });
9333
9395
  })(), W;
9334
9396
  }
9335
- function su(e, t) {
9336
- let n = e.id ?? Es();
9397
+ function uu(e, t) {
9398
+ let n = e.id ?? ks();
9337
9399
  e.id || console.warn(`[page-agent-sdk] 未传 options.id,已生成随机 id "${n}"。刷新后持久化数据无法恢复,请传稳定 id。`);
9338
- let r = e.streaming ?? !0, i = e.ui ?? "default", a, o = e.shareContext ? nu.get(n) : void 0;
9339
- o ? a = o : (a = ou(e, n), e.shareContext && nu.set(n, a)), a.refCount++;
9340
- 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;
9341
9403
  async function d(n) {
9342
9404
  if (await a.initDone, s) {
9343
9405
  s.show();
@@ -9379,7 +9441,7 @@ function su(e, t) {
9379
9441
  function m() {
9380
9442
  s?.show();
9381
9443
  }
9382
- let h = eu();
9444
+ let h = ru();
9383
9445
  return {
9384
9446
  mount: d,
9385
9447
  unmount: f,
@@ -9492,7 +9554,7 @@ function su(e, t) {
9492
9554
  },
9493
9555
  vfsWrite: (e, t) => {
9494
9556
  let n = typeof t == "string" ? t : JSON.stringify(t);
9495
- a.vfsStore.files[kc(e)] = {
9557
+ a.vfsStore.files[Mc(e)] = {
9496
9558
  content: n,
9497
9559
  updatedAt: Date.now()
9498
9560
  };
@@ -9535,12 +9597,12 @@ function su(e, t) {
9535
9597
  }
9536
9598
  //#endregion
9537
9599
  //#region src/core/sdk/ragSubagent.ts
9538
- 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 = {
9539
9601
  name: "rag-search",
9540
9602
  description: "多源知识检索策略:vfs 预注入文档 → 语义检索 → 指定文档加载 → 公网;综合结构化结论 + 溯源",
9541
- getContent: () => lu
9603
+ getContent: () => fu
9542
9604
  };
9543
- function du(e, n, i) {
9605
+ function mu(e, n, i) {
9544
9606
  return r(async ({ query: e, topK: t }) => {
9545
9607
  try {
9546
9608
  let r = await n(e, { topK: t ?? i });
@@ -9557,7 +9619,7 @@ function du(e, n, i) {
9557
9619
  })
9558
9620
  });
9559
9621
  }
9560
- function fu(e, n) {
9622
+ function hu(e, n) {
9561
9623
  return r(async ({ source: e }) => {
9562
9624
  try {
9563
9625
  let t = await n(e), r = Array.isArray(t) ? t : [t];
@@ -9571,11 +9633,11 @@ function fu(e, n) {
9571
9633
  schema: t.object({ source: t.string().describe("文档标识(id/URL/key)") })
9572
9634
  });
9573
9635
  }
9574
- function pu(e) {
9636
+ function gu(e) {
9575
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;
9576
9638
  if (!t && !n && r === !1) throw Error("[page-agent-sdk][createRagSubagent] 至少配一种知识源:retriever / loader / useVfs(true)");
9577
9639
  let p = [];
9578
- 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);
9579
9641
  let m = r ? [
9580
9642
  "vfs_grep",
9581
9643
  "vfs_read",
@@ -9584,17 +9646,17 @@ function pu(e) {
9584
9646
  return {
9585
9647
  id: i,
9586
9648
  description: a ?? "检索知识库(组件文档/UI 规范/业务规则),返回有依据的结构化结论。需要查阅文档才能回答或决定如何配置时委派",
9587
- systemPrompt: cu,
9649
+ systemPrompt: du,
9588
9650
  tools: p.length ? p : void 0,
9589
9651
  allowedTools: m,
9590
- skills: d ?? [uu],
9652
+ skills: d ?? [pu],
9591
9653
  maxToolRounds: l,
9592
9654
  ...u === void 0 ? {} : { summarization: u }
9593
9655
  };
9594
9656
  }
9595
9657
  //#endregion
9596
9658
  //#region src/core/sdk/htmlSubagent.ts
9597
- function mu(e) {
9659
+ function _u(e) {
9598
9660
  return `你是纯代码组件生成专家。可用工具:vfs_write / vfs_edit / vfs_rm(写/改/删代码到 vfs ${e}) / vfs_grep + vfs_read(读 vfs) / write + set(写 data 引用,writablePaths 限定) / read / write_todos + update_todo(规划)。
9599
9661
 
9600
9662
  代码存储约定(重要):
@@ -9608,12 +9670,12 @@ function mu(e) {
9608
9670
  3. 小段代码 vfs_write 整体写;大段用 vfs_edit 增量拼(避免单次输出超限);
9609
9671
  4. 生成后 read(vfs 文件 + data 引用)确认结构正确;只写 writablePaths 内 data + ${e} 下 vfs。`;
9610
9672
  }
9611
- 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 = {
9612
9674
  name: "html-builder",
9613
9675
  description: "纯代码组件(custom Vue SFC)生成规范:代码存 vfs+data 引用 / SFC 规范 / 安全底线 / props / 组件库引用 / 可访问性",
9614
- getContent: () => hu
9676
+ getContent: () => vu
9615
9677
  };
9616
- function _u(e) {
9678
+ function bu(e) {
9617
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;
9618
9680
  if (!t?.length) throw Error("[page-agent-sdk][createHtmlSubagent] writablePaths 必填(代码组件 data 区,如 [\"components\"])");
9619
9681
  let d = [];
@@ -9622,7 +9684,7 @@ function _u(e) {
9622
9684
  return {
9623
9685
  id: r,
9624
9686
  description: i ?? "生成/修改纯代码组件(custom Vue SFC)。代码写 vfs,data 存引用;能规划(write_todos)+ 执行。需写代码组件或灵活定制时委派",
9625
- systemPrompt: mu(n),
9687
+ systemPrompt: _u(n),
9626
9688
  writablePaths: t,
9627
9689
  allowedTools: [
9628
9690
  "vfs_write",
@@ -9634,14 +9696,14 @@ function _u(e) {
9634
9696
  middleware: d.length ? d : void 0,
9635
9697
  summarization: o === !1 ? void 0 : o,
9636
9698
  temperature: c,
9637
- skills: l ?? [gu],
9699
+ skills: l ?? [yu],
9638
9700
  maxToolRounds: s,
9639
9701
  tools: f.length ? f : void 0
9640
9702
  };
9641
9703
  }
9642
9704
  //#endregion
9643
9705
  //#region src/core/utils/clipboard.ts
9644
- async function vu(e) {
9706
+ async function xu(e) {
9645
9707
  try {
9646
9708
  let t = globalThis.navigator?.clipboard;
9647
9709
  if (t && typeof t.writeText == "function") return await t.writeText(e), !0;
@@ -9659,7 +9721,7 @@ async function vu(e) {
9659
9721
  }
9660
9722
  //#endregion
9661
9723
  //#region src/core/composables/useChat.ts
9662
- function yu(e = {}) {
9724
+ function Su(e = {}) {
9663
9725
  let { fetchResponse: t, fetchStream: n, onPersist: r, onClear: i } = e, a = /* @__PURE__ */ _t({
9664
9726
  messages: e.messages ?? [],
9665
9727
  loading: !1,
@@ -9838,9 +9900,9 @@ function yu(e = {}) {
9838
9900
  }
9839
9901
  //#endregion
9840
9902
  //#region src/core/composables/chatContext.ts
9841
- var bu = Symbol("chatContext");
9842
- function xu(e = {}) {
9843
- let t = yu({
9903
+ var Cu = Symbol("chatContext");
9904
+ function wu(e = {}) {
9905
+ let t = Su({
9844
9906
  fetchResponse: e.fetchResponse,
9845
9907
  fetchStream: e.fetchStream,
9846
9908
  messages: e.messages,
@@ -9859,7 +9921,7 @@ function xu(e = {}) {
9859
9921
  }, h = /* @__PURE__ */ Ot({}), g = (e) => h.value[e] !== !1, _ = (e) => {
9860
9922
  h.value[e] = !g(e);
9861
9923
  }, v = /* @__PURE__ */ Ot(!1), y = (e) => {
9862
- vu(e).then((e) => {
9924
+ xu(e).then((e) => {
9863
9925
  e && (v.value = !0, setTimeout(() => {
9864
9926
  v.value = !1;
9865
9927
  }, 1500));
@@ -9927,15 +9989,15 @@ function xu(e = {}) {
9927
9989
  }
9928
9990
  };
9929
9991
  }
9930
- function Su() {
9931
- let e = Fn(bu);
9992
+ function Tu() {
9993
+ let e = Fn(Cu);
9932
9994
  if (!e) throw Error("useChatContext 必须在 provide(chatContextKey) 的组件子树内调用");
9933
9995
  return e;
9934
9996
  }
9935
9997
  //#endregion
9936
9998
  //#region src/core/index.headless.ts
9937
- function Cu(e) {
9938
- return su(e);
9999
+ function Eu(e) {
10000
+ return uu(e);
9939
10001
  }
9940
10002
  //#endregion
9941
- 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 };