page-agent-sdk 2.37.0 → 2.38.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -417,61 +417,61 @@ var Ue = {
417
417
  return We(this, "entries", (e) => (e[1] = He(this, e[1]), e));
418
418
  },
419
419
  every(e, t) {
420
- return H(this, "every", e, t, void 0, arguments);
420
+ return Ke(this, "every", e, t, void 0, arguments);
421
421
  },
422
422
  filter(e, t) {
423
- return H(this, "filter", e, t, (e) => e.map((e) => He(this, e)), arguments);
423
+ return Ke(this, "filter", e, t, (e) => e.map((e) => He(this, e)), arguments);
424
424
  },
425
425
  find(e, t) {
426
- return H(this, "find", e, t, (e) => He(this, e), arguments);
426
+ return Ke(this, "find", e, t, (e) => He(this, e), arguments);
427
427
  },
428
428
  findIndex(e, t) {
429
- return H(this, "findIndex", e, t, void 0, arguments);
429
+ return Ke(this, "findIndex", e, t, void 0, arguments);
430
430
  },
431
431
  findLast(e, t) {
432
- return H(this, "findLast", e, t, (e) => He(this, e), arguments);
432
+ return Ke(this, "findLast", e, t, (e) => He(this, e), arguments);
433
433
  },
434
434
  findLastIndex(e, t) {
435
- return H(this, "findLastIndex", e, t, void 0, arguments);
435
+ return Ke(this, "findLastIndex", e, t, void 0, arguments);
436
436
  },
437
437
  forEach(e, t) {
438
- return H(this, "forEach", e, t, void 0, arguments);
438
+ return Ke(this, "forEach", e, t, void 0, arguments);
439
439
  },
440
440
  includes(...e) {
441
- return U(this, "includes", e);
441
+ return qe(this, "includes", e);
442
442
  },
443
443
  indexOf(...e) {
444
- return U(this, "indexOf", e);
444
+ return qe(this, "indexOf", e);
445
445
  },
446
446
  join(e) {
447
447
  return Be(this).join(e);
448
448
  },
449
449
  lastIndexOf(...e) {
450
- return U(this, "lastIndexOf", e);
450
+ return qe(this, "lastIndexOf", e);
451
451
  },
452
452
  map(e, t) {
453
- return H(this, "map", e, t, void 0, arguments);
453
+ return Ke(this, "map", e, t, void 0, arguments);
454
454
  },
455
455
  pop() {
456
- return qe(this, "pop");
456
+ return U(this, "pop");
457
457
  },
458
458
  push(...e) {
459
- return qe(this, "push", e);
459
+ return U(this, "push", e);
460
460
  },
461
461
  reduce(e, ...t) {
462
- return Ke(this, "reduce", e, t);
462
+ return H(this, "reduce", e, t);
463
463
  },
464
464
  reduceRight(e, ...t) {
465
- return Ke(this, "reduceRight", e, t);
465
+ return H(this, "reduceRight", e, t);
466
466
  },
467
467
  shift() {
468
- return qe(this, "shift");
468
+ return U(this, "shift");
469
469
  },
470
470
  some(e, t) {
471
- return H(this, "some", e, t, void 0, arguments);
471
+ return Ke(this, "some", e, t, void 0, arguments);
472
472
  },
473
473
  splice(...e) {
474
- return qe(this, "splice", e);
474
+ return U(this, "splice", e);
475
475
  },
476
476
  toReversed() {
477
477
  return Be(this).toReversed();
@@ -483,7 +483,7 @@ var Ue = {
483
483
  return Be(this).toSpliced(...e);
484
484
  },
485
485
  unshift(...e) {
486
- return qe(this, "unshift", e);
486
+ return U(this, "unshift", e);
487
487
  },
488
488
  values() {
489
489
  return We(this, "values", (e) => He(this, e));
@@ -497,7 +497,7 @@ function We(e, t, n) {
497
497
  }), i;
498
498
  }
499
499
  var Ge = Array.prototype;
500
- function H(e, t, n, r, i, a) {
500
+ function Ke(e, t, n, r, i, a) {
501
501
  let o = Ve(e), s = o !== e && !/* @__PURE__ */ Ct(e), c = o[t];
502
502
  if (c !== Ge[t]) {
503
503
  let t = c.apply(e, a);
@@ -512,7 +512,7 @@ function H(e, t, n, r, i, a) {
512
512
  let u = c.call(o, l, r);
513
513
  return s && i ? i(u) : u;
514
514
  }
515
- function Ke(e, t, n, r) {
515
+ function H(e, t, n, r) {
516
516
  let i = Ve(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
518
  return s && (s = !1, t = He(e, t)), n.call(this, t, He(e, r), i, e);
@@ -522,13 +522,13 @@ function Ke(e, t, n, r) {
522
522
  let c = i[t](o, ...r);
523
523
  return s ? He(e, c) : c;
524
524
  }
525
- function U(e, t, n) {
525
+ function qe(e, t, n) {
526
526
  let r = /* @__PURE__ */ G(e);
527
527
  V(r, "iterate", Re);
528
528
  let i = r[t](...n);
529
529
  return (i === -1 || i === !1) && /* @__PURE__ */ wt(n[0]) ? (n[0] = /* @__PURE__ */ G(n[0]), r[t](...n)) : i;
530
530
  }
531
- function qe(e, t, n = []) {
531
+ function U(e, t, n = []) {
532
532
  Oe(), ye();
533
533
  let r = (/* @__PURE__ */ G(e))[t].apply(e, n);
534
534
  return B(), ke(), r;
@@ -598,10 +598,10 @@ var Ze = class {
598
598
  deleteProperty(e, t) {
599
599
  return process.env.NODE_ENV !== "production" && de(`Delete operation on key "${String(t)}" failed: target is readonly.`, e), !0;
600
600
  }
601
- }, et = /* @__PURE__ */ new Qe(), tt = /* @__PURE__ */ new $e(), nt = /* @__PURE__ */ new $e(!0), W = (e) => e, rt = (e) => Reflect.getPrototypeOf(e);
601
+ }, et = /* @__PURE__ */ new Qe(), tt = /* @__PURE__ */ new $e(), nt = /* @__PURE__ */ new $e(!0), rt = (e) => e, W = (e) => Reflect.getPrototypeOf(e);
602
602
  function it(e, t, n) {
603
603
  return function(...r) {
604
- let i = this.__v_raw, a = /* @__PURE__ */ G(i), o = E(a), s = e === "entries" || e === Symbol.iterator && o, c = e === "keys" && o, l = i[e](...r), u = n ? W : t ? Dt : Et;
604
+ let i = this.__v_raw, a = /* @__PURE__ */ G(i), o = E(a), s = e === "entries" || e === Symbol.iterator && o, c = e === "keys" && o, l = i[e](...r), u = n ? rt : t ? Dt : Et;
605
605
  return !t && V(a, "iterate", c ? Le : Ie), x(Object.create(l), { next() {
606
606
  let { value: e, done: t } = l.next();
607
607
  return t ? {
@@ -628,7 +628,7 @@ function ot(e, t) {
628
628
  get(n) {
629
629
  let r = this.__v_raw, i = /* @__PURE__ */ G(r), a = /* @__PURE__ */ G(n);
630
630
  e || (ie(n, a) && V(i, "get", n), V(i, "get", a));
631
- let { has: o } = rt(i), s = t ? W : e ? Dt : Et;
631
+ let { has: o } = W(i), s = t ? rt : e ? Dt : Et;
632
632
  if (o.call(i, n)) return s(r.get(n));
633
633
  if (o.call(i, a)) return s(r.get(a));
634
634
  r !== i && r.get(n);
@@ -642,7 +642,7 @@ function ot(e, t) {
642
642
  return e || (ie(t, i) && V(r, "has", t), V(r, "has", i)), t === i ? n.has(t) : n.has(t) || n.has(i);
643
643
  },
644
644
  forEach(n, r) {
645
- let i = this, a = i.__v_raw, o = /* @__PURE__ */ G(a), s = t ? W : e ? Dt : Et;
645
+ let i = this, a = i.__v_raw, o = /* @__PURE__ */ G(a), s = t ? rt : e ? Dt : Et;
646
646
  return !e && V(o, "iterate", Ie), a.forEach((e, t) => n.call(r, s(e), s(t), i));
647
647
  }
648
648
  };
@@ -653,18 +653,18 @@ function ot(e, t) {
653
653
  clear: at("clear")
654
654
  } : {
655
655
  add(e) {
656
- let n = /* @__PURE__ */ G(this), r = rt(n), i = /* @__PURE__ */ G(e), a = !t && !/* @__PURE__ */ Ct(e) && !/* @__PURE__ */ St(e) ? i : e;
656
+ let n = /* @__PURE__ */ G(this), r = W(n), i = /* @__PURE__ */ G(e), a = !t && !/* @__PURE__ */ Ct(e) && !/* @__PURE__ */ St(e) ? i : e;
657
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;
658
658
  },
659
659
  set(e, n) {
660
660
  !t && !/* @__PURE__ */ Ct(n) && !/* @__PURE__ */ St(n) && (n = /* @__PURE__ */ G(n));
661
- let r = /* @__PURE__ */ G(this), { has: i, get: a } = rt(r), o = i.call(r, e);
661
+ let r = /* @__PURE__ */ G(this), { has: i, get: a } = W(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
664
  return r.set(e, n), o ? ie(n, s) && ze(r, "set", e, n, s) : ze(r, "add", e, n), this;
665
665
  },
666
666
  delete(e) {
667
- let t = /* @__PURE__ */ G(this), { has: n, get: r } = rt(t), i = n.call(t, e);
667
+ let t = /* @__PURE__ */ G(this), { has: n, get: r } = W(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
670
  return i && ze(t, "delete", e, void 0, a), o;
@@ -4181,57 +4181,86 @@ function yo(e = {}) {
4181
4181
  }
4182
4182
  //#endregion
4183
4183
  //#region src/core/harness/subagent.ts
4184
- function bo(e) {
4184
+ function bo(e = 20) {
4185
+ let t = /* @__PURE__ */ new Map(), n = [];
4186
+ return {
4187
+ start(e, n, r, i) {
4188
+ t.set(e, {
4189
+ taskId: e,
4190
+ task: n,
4191
+ label: r,
4192
+ status: "running",
4193
+ steps: [],
4194
+ startedAt: i
4195
+ });
4196
+ },
4197
+ pushStep(e, n) {
4198
+ let r = t.get(e);
4199
+ r && r.steps.push(n);
4200
+ },
4201
+ finish(r, i, a) {
4202
+ let o = t.get(r);
4203
+ if (o) for (o.status = i, o.durationMs = Date.now() - o.startedAt, o.resultPreview = a.length > 120 ? a.slice(0, 120) + "…" : a, t.delete(r), n.unshift(o); n.length > e;) n.pop();
4204
+ },
4205
+ getActive() {
4206
+ return [...t.values()];
4207
+ },
4208
+ getHistory() {
4209
+ return [...n];
4210
+ }
4211
+ };
4212
+ }
4213
+ function xo(e) {
4185
4214
  return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
4186
4215
  }
4187
- var xo = [
4216
+ var So = [
4188
4217
  "describe_data",
4189
4218
  "get_data",
4190
4219
  "read",
4191
4220
  "query_data",
4192
4221
  "search_data",
4193
4222
  "fetch_document"
4194
- ], So = 1, Co = 4, wo = 6, To = ["spawn_agent", "spawn_agents"], Eo = [
4223
+ ], Co = 1, wo = 4, To = 6, Eo = ["spawn_agent", "spawn_agents"], Do = [
4195
4224
  "write",
4196
4225
  "set_data",
4197
4226
  "edit_data",
4198
4227
  "delete_data",
4199
4228
  "draft_commit"
4200
4229
  ];
4201
- function Do(e) {
4230
+ function Oo(e) {
4202
4231
  let t = [];
4203
4232
  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);
4204
4233
  return t;
4205
4234
  }
4206
- function Oo(e, t) {
4235
+ function ko(e, t) {
4207
4236
  return t.some((t) => e === t || e.startsWith(t + ".") || e.startsWith(t + "["));
4208
4237
  }
4209
- function ko(e, t) {
4238
+ function Ao(e, t) {
4210
4239
  let n = e.invoke.bind(e), r = async (e) => {
4211
- let r = Do(e);
4240
+ let r = Oo(e);
4212
4241
  if (!r.length) return `PATH_OUT_OF_SCOPE:子 agent 仅可增量 patch(writablePaths: ${t.join(", ")}),不能整体替换(无 jsonPath)。用 write({patch:{jsonPath,...}}) 增量改。`;
4213
- for (let e of r) if (!Oo(e, t)) return `PATH_OUT_OF_SCOPE:子 agent 写 "${e}" 越界(仅可写 ${t.join(", ")})。`;
4242
+ for (let e of r) if (!ko(e, t)) return `PATH_OUT_OF_SCOPE:子 agent 写 "${e}" 越界(仅可写 ${t.join(", ")})。`;
4214
4243
  return n(e);
4215
4244
  };
4216
4245
  return new Proxy(e, { get(e, t, n) {
4217
4246
  return t === "invoke" ? r : Reflect.get(e, t, n);
4218
4247
  } });
4219
4248
  }
4220
- async function Ao(e, t, n, r, i) {
4221
- let a = t.depth ?? 0, o = t.maxDepth ?? So, s = /* @__PURE__ */ new Set([...xo, ...t.allowedTools ?? []]), c = () => typeof t.allTools == "function" ? t.allTools() : t.allTools, l = [...c().filter((e) => s.has(e.name) && !To.includes(e.name)), ...t.extraTools ?? []];
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 ?? []];
4222
4251
  if (t.writablePaths?.length) {
4223
- l = l.filter((e) => !Eo.includes(e.name));
4224
- let e = c().filter((e) => Eo.includes(e.name) && !To.includes(e.name)).map((e) => ko(e, t.writablePaths));
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));
4225
4254
  l = [...l, ...e];
4226
4255
  }
4227
- let u = a + 1 < o ? [jo({
4256
+ let u = a + 1 < o ? [Mo({
4228
4257
  ...t,
4229
4258
  depth: a + 1
4230
4259
  })] : [], d = t.getFocuses?.() ?? [], f = d.length ? pa({
4231
4260
  getSchema: t.getSchema ?? (() => null),
4232
4261
  initialFocuses: d
4233
4262
  }) : void 0, p = ni({
4234
- model: bo(t.llm) ? t.llm.model ?? t.llm.modelName : e.model ?? t.llm.model,
4263
+ model: xo(t.llm) ? t.llm.model ?? t.llm.modelName : e.model ?? t.llm.model,
4235
4264
  contextWindow: t.llm.contextWindow,
4236
4265
  maxOutputTokens: t.llm.maxOutputTokens
4237
4266
  });
@@ -4242,7 +4271,7 @@ async function Ao(e, t, n, r, i) {
4242
4271
  } : { contextWindow: p.contextWindow }), h = ji({
4243
4272
  contextWindow: p.contextWindow,
4244
4273
  maxOutputTokens: p.maxOutputTokens,
4245
- ...bo(t.llm) ? { llm: t.llm } : {
4274
+ ...xo(t.llm) ? { llm: t.llm } : {
4246
4275
  apiKey: t.llm.apiKey,
4247
4276
  baseUrl: t.llm.baseUrl,
4248
4277
  model: e.model ?? t.llm.model,
@@ -4258,7 +4287,7 @@ async function Ao(e, t, n, r, i) {
4258
4287
  ...f ? [f] : [],
4259
4288
  ...t.middleware ?? []
4260
4289
  ],
4261
- maxToolRounds: t.maxToolRounds ?? wo,
4290
+ maxToolRounds: t.maxToolRounds ?? To,
4262
4291
  onLog: i,
4263
4292
  debug: t.debug
4264
4293
  });
@@ -4270,17 +4299,21 @@ async function Ao(e, t, n, r, i) {
4270
4299
  r && (e.type === "tool_call" || e.type === "tool_result") && r(e);
4271
4300
  }, n);
4272
4301
  }
4273
- function jo(e) {
4274
- let n = e.maxParallel ?? Co, i, a, o, s = (e, t) => (n) => {
4275
- a && a({
4302
+ function Mo(e) {
4303
+ let n = e.maxParallel ?? wo, i, a, o, s = (t, n) => (r) => {
4304
+ e.tracker?.pushStep(t, {
4305
+ kind: r.type,
4306
+ name: r.name,
4307
+ ts: Date.now()
4308
+ }), a && a({
4276
4309
  type: "subagent",
4277
- taskId: e,
4278
- label: t,
4279
- kind: n.type,
4280
- name: n.name,
4281
- args: n.type === "tool_call" ? n.args : void 0,
4282
- result: n.type === "tool_result" ? n.result : void 0,
4283
- status: n.type === "tool_result" ? n.status : void 0
4310
+ taskId: t,
4311
+ label: n,
4312
+ kind: r.type,
4313
+ name: r.name,
4314
+ args: r.type === "tool_call" ? r.args : void 0,
4315
+ result: r.type === "tool_result" ? r.result : void 0,
4316
+ status: r.type === "tool_result" ? r.status : void 0
4284
4317
  });
4285
4318
  };
4286
4319
  return {
@@ -4290,15 +4323,21 @@ function jo(e) {
4290
4323
  ...e,
4291
4324
  ...r?.length ? { allowedTools: r } : {},
4292
4325
  ...a?.length ? { writablePaths: a } : {}
4293
- } : e, u = `sub-${Math.random().toString(36).slice(2, 8)}`, d = n?.trim() || "子任务";
4294
- return await Ao({
4295
- prompt: t,
4296
- role: n,
4297
- model: c
4298
- }, l, i, s(u, d), (e) => o?.({
4326
+ } : e, u = `sub-${Math.random().toString(36).slice(2, 8)}`, d = n?.trim() || "子任务", f = (e) => o?.({
4299
4327
  ...e,
4300
4328
  source: `子:${d}`
4301
- }));
4329
+ }), p = Date.now();
4330
+ e.tracker?.start(u, t, d, p);
4331
+ try {
4332
+ let r = await jo({
4333
+ prompt: t,
4334
+ role: n,
4335
+ model: c
4336
+ }, l, i, s(u, d), f);
4337
+ return e.tracker?.finish(u, "done", r), r;
4338
+ } catch (t) {
4339
+ throw e.tracker?.finish(u, "error", String(t?.message ?? t)), t;
4340
+ }
4302
4341
  }, {
4303
4342
  name: "spawn_agent",
4304
4343
  description: "委派一个独立子 agent 执行子任务,返回其最终结论(过程隔离,不占主上下文)。用于:分治大任务、专项调研、独立验证。子 agent 默认只读(不改页面)。",
@@ -4310,11 +4349,17 @@ function jo(e) {
4310
4349
  model: t.string().optional().describe("覆盖模型(默认同主)")
4311
4350
  })
4312
4351
  }), r(async ({ tasks: t }) => (await Qr(t, n, async (t, n) => {
4313
- let r = `sub-${n}-${Math.random().toString(36).slice(2, 6)}`, a = t.role?.trim() || `子任务${n + 1}`;
4314
- return Ao(t, e, i, s(r, a), (e) => o?.({
4352
+ let r = `sub-${n}-${Math.random().toString(36).slice(2, 6)}`, a = t.role?.trim() || `子任务${n + 1}`, c = (e) => o?.({
4315
4353
  ...e,
4316
4354
  source: `子:${a}`
4317
- }));
4355
+ }), l = Date.now();
4356
+ e.tracker?.start(r, t.prompt, a, l);
4357
+ try {
4358
+ let n = await jo(t, e, i, s(r, a), c);
4359
+ return e.tracker?.finish(r, "done", n ?? "(未完成)"), n;
4360
+ } catch (t) {
4361
+ throw e.tracker?.finish(r, "error", String(t?.message ?? t)), t;
4362
+ }
4318
4363
  }, i)).map((e, t) => `【子任务 ${t + 1}】\n${e ?? "(未完成)"}`).join("\n\n"), {
4319
4364
  name: "spawn_agents",
4320
4365
  description: "并行委派多个独立子 agent,聚合各自结论(子 agent 间互不通信,由你汇总)。适合:多路调研、多视角审查、批量处理。",
@@ -4326,8 +4371,8 @@ function jo(e) {
4326
4371
  wrapToolCall: async (e, t) => (e.signal && (i = e.signal), e.emit && (a = e.emit), e.logSink && (o = e.logSink), t(e))
4327
4372
  };
4328
4373
  }
4329
- var Mo = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
4330
- function No(e, t) {
4374
+ var No = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
4375
+ function Po(e, t) {
4331
4376
  let n = e.tools ?? [];
4332
4377
  return {
4333
4378
  llm: e.llm ?? t.llm,
@@ -4344,10 +4389,11 @@ function No(e, t) {
4344
4389
  ...e.middleware?.length ? { middleware: e.middleware } : {},
4345
4390
  ...e.summarization === void 0 ? {} : { summarization: e.summarization },
4346
4391
  ...t.getFocuses ? { getFocuses: t.getFocuses } : {},
4347
- ...t.getSchema ? { getSchema: t.getSchema } : {}
4392
+ ...t.getSchema ? { getSchema: t.getSchema } : {},
4393
+ ...t.tracker ? { tracker: t.tracker } : {}
4348
4394
  };
4349
4395
  }
4350
- function Po(e, n) {
4396
+ function Fo(e, n) {
4351
4397
  let i, a, o, s = (e, t) => (n) => {
4352
4398
  a && a({
4353
4399
  type: "subagent",
@@ -4363,7 +4409,7 @@ function Po(e, n) {
4363
4409
  function d(e) {
4364
4410
  let a = /* @__PURE__ */ new Set(), c = [], l = [];
4365
4411
  for (let u of e) {
4366
- if (!Mo.test(u.id)) {
4412
+ if (!No.test(u.id)) {
4367
4413
  console.warn(`[subagents] id "${u.id}" 非合法工具名(须 [a-zA-Z_][a-zA-Z0-9_]*),已跳过`);
4368
4414
  continue;
4369
4415
  }
@@ -4373,11 +4419,23 @@ function Po(e, n) {
4373
4419
  continue;
4374
4420
  }
4375
4421
  a.add(e), c.push(u), l.push(r(async ({ task: e }) => {
4376
- let t = No(u, n);
4377
- return Ao({ prompt: e }, t, i, s(`use_${u.id}`, u.id), (e) => o?.({
4422
+ let t = Po(u, n), r = (e) => o?.({
4378
4423
  ...e,
4379
4424
  source: `子:${u.id}`
4380
- }));
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, {
4427
+ kind: e.type,
4428
+ name: e.name,
4429
+ ts: Date.now()
4430
+ }), l(e);
4431
+ } : l, f = Date.now();
4432
+ a?.start(c, e, u.id, f);
4433
+ try {
4434
+ let n = await jo({ prompt: e }, t, i, d, r);
4435
+ return a?.finish(c, "done", n), n;
4436
+ } catch (e) {
4437
+ throw a?.finish(c, "error", String(e?.message ?? e)), e;
4438
+ }
4381
4439
  }, {
4382
4440
  name: `use_${u.id}`,
4383
4441
  description: `委派给「${u.description}」子 agent 执行任务,返回其结论(过程隔离,不占主上下文)。`,
@@ -4434,7 +4492,7 @@ function Po(e, n) {
4434
4492
  }
4435
4493
  //#endregion
4436
4494
  //#region src/core/harness/verify.ts
4437
- function Fo(e) {
4495
+ function Io(e) {
4438
4496
  return {
4439
4497
  name: "verify",
4440
4498
  async beforeReturn({ messages: t, state: n, log: r }) {
@@ -4446,10 +4504,10 @@ function Fo(e) {
4446
4504
  if (e.adversarial) {
4447
4505
  r?.("middleware", {
4448
4506
  stage: "adversarial_start",
4449
- model: Uo(e.adversarial.llm),
4507
+ model: Wo(e.adversarial.llm),
4450
4508
  tools: (e.adversarial.tools ?? []).length
4451
4509
  });
4452
- let n = await qo(t, e.adversarial.llm, r, e.adversarial.tools);
4510
+ let n = await Jo(t, e.adversarial.llm, r, e.adversarial.tools);
4453
4511
  if (r?.("middleware", {
4454
4512
  stage: "adversarial_done",
4455
4513
  clean: n === null,
@@ -4460,18 +4518,18 @@ function Fo(e) {
4460
4518
  }
4461
4519
  };
4462
4520
  }
4463
- var Io = /* @__PURE__ */ new Set([
4521
+ var Lo = /* @__PURE__ */ new Set([
4464
4522
  "set_data",
4465
4523
  "edit_data",
4466
4524
  "delete_data",
4467
4525
  "write"
4468
- ]), Lo = /校验失败|SCHEMA_INVALID|未注册|不存在|仅支持|必须是|NOT_OBJECT|PATH_UNSAFE|VERSION_CONFLICT|WRITE_INTERCEPT/;
4469
- function Ro(e) {
4526
+ ]), Ro = /校验失败|SCHEMA_INVALID|未注册|不存在|仅支持|必须是|NOT_OBJECT|PATH_UNSAFE|VERSION_CONFLICT|WRITE_INTERCEPT/;
4527
+ function zo(e) {
4470
4528
  let t = /* @__PURE__ */ new Map();
4471
4529
  for (let n of e) {
4472
4530
  let e = n?.tool_calls;
4473
4531
  if (Array.isArray(e)) for (let n of e) {
4474
- if (!Io.has(n.name)) continue;
4532
+ if (!Lo.has(n.name)) continue;
4475
4533
  let e = n.id, r = n?.args ?? {};
4476
4534
  if (n.name === "write") if (r.del && r.patch?.jsonPath) t.set(r.patch.jsonPath, {
4477
4535
  path: r.patch.jsonPath,
@@ -4510,7 +4568,7 @@ function Ro(e) {
4510
4568
  }
4511
4569
  return [...t.values()];
4512
4570
  }
4513
- function zo(e) {
4571
+ function Bo(e) {
4514
4572
  let t = /* @__PURE__ */ new Map();
4515
4573
  for (let n of e) {
4516
4574
  let e = n?.tool_call_id, r = n?.content;
@@ -4518,7 +4576,7 @@ function zo(e) {
4518
4576
  }
4519
4577
  return t;
4520
4578
  }
4521
- function Bo(e, t) {
4579
+ function Vo(e, t) {
4522
4580
  if (t === "") return e;
4523
4581
  if (e == null) return;
4524
4582
  let n = e;
@@ -4528,16 +4586,16 @@ function Bo(e, t) {
4528
4586
  }
4529
4587
  return n;
4530
4588
  }
4531
- function Vo(e = {}) {
4589
+ function Ho(e = {}) {
4532
4590
  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 ?? {};
4533
4591
  return async ({ messages: e }) => {
4534
- let r = Ro(e);
4592
+ let r = zo(e);
4535
4593
  if (!r.length) return { ok: !0 };
4536
- let i = zo(e), a = n()[""], o = t(), s = [];
4594
+ let i = Bo(e), a = n()[""], o = t(), s = [];
4537
4595
  for (let { path: e, op: t, callId: n } of r) {
4538
4596
  let r = n ? i.get(n) : void 0;
4539
- if (r && Lo.test(r)) continue;
4540
- let c = Bo(o, e);
4597
+ if (r && Ro.test(r)) continue;
4598
+ let c = Vo(o, e);
4541
4599
  if (t === "delete_data") c !== void 0 && s.push(`${e} 删除后读回仍有值,疑似未生效`);
4542
4600
  else if (c == null) s.push(`写入 ${e} 后读回为空,疑似未生效`);
4543
4601
  else if (a) {
@@ -4551,17 +4609,17 @@ function Vo(e = {}) {
4551
4609
  } : { ok: !0 };
4552
4610
  };
4553
4611
  }
4554
- function Ho(e) {
4555
- return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
4556
- }
4557
4612
  function Uo(e) {
4558
- return Ho(e) ? e.model ?? e.modelName ?? "<实例>" : e.model ?? "<配置>";
4613
+ return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
4559
4614
  }
4560
- var Wo = /无问题|没有问题|未发现问题|没有发现|没问题|未发现/;
4561
- function Go(e) {
4562
- return Wo.test(e);
4615
+ function Wo(e) {
4616
+ return Uo(e) ? e.model ?? e.modelName ?? "<实例>" : e.model ?? "<配置>";
4563
4617
  }
4618
+ var Go = /无问题|没有问题|未发现问题|没有发现|没问题|未发现/;
4564
4619
  function Ko(e) {
4620
+ return Go.test(e);
4621
+ }
4622
+ function qo(e) {
4565
4623
  let t = "", n = "";
4566
4624
  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 : "");
4567
4625
  return {
@@ -4569,8 +4627,8 @@ function Ko(e) {
4569
4627
  lastReply: n
4570
4628
  };
4571
4629
  }
4572
- async function qo(e, t, n, r) {
4573
- let { lastUser: i, lastReply: a } = Ko(e);
4630
+ async function Jo(e, t, n, r) {
4631
+ let { lastUser: i, lastReply: a } = qo(e);
4574
4632
  if (!a) return null;
4575
4633
  let o = Array.isArray(r) && r.length > 0, s = [
4576
4634
  "你是严格的对抗式审查者,目标是找出以下 AI 助手回复的错误并证明它有问题(事实错误 / 遗漏 / 逻辑矛盾 / 与需求不符)。",
@@ -4581,7 +4639,7 @@ async function qo(e, t, n, r) {
4581
4639
  ].join("\n"), c = "你是严格的对抗式审查者,只找问题不赞美。目标是反驳,不是改进。", l = n ? (e) => n(e.type, {
4582
4640
  ...e.data,
4583
4641
  source: "adversarial"
4584
- }) : void 0, u = await ji(Ho(t) ? {
4642
+ }) : void 0, u = await ji(Uo(t) ? {
4585
4643
  llm: t,
4586
4644
  tools: r,
4587
4645
  maxToolRounds: o ? 4 : 1,
@@ -4606,11 +4664,11 @@ async function qo(e, t, n, r) {
4606
4664
  stage: "adversarial_verdict",
4607
4665
  verdict: u,
4608
4666
  source: "adversarial"
4609
- }), Go(u) ? null : u.trim();
4667
+ }), Ko(u) ? null : u.trim();
4610
4668
  }
4611
4669
  //#endregion
4612
4670
  //#region src/core/utils/contextAnalysis.ts
4613
- var Jo = [
4671
+ var Yo = [
4614
4672
  {
4615
4673
  prefix: "## 可操作数据",
4616
4674
  key: "dataHint"
@@ -4639,7 +4697,7 @@ var Jo = [
4639
4697
  prefix: "【与当前问题可能相关的早期对话】",
4640
4698
  key: "recall"
4641
4699
  }
4642
- ], Yo = [
4700
+ ], Xo = [
4643
4701
  {
4644
4702
  key: "systemPrompt",
4645
4703
  label: "系统提示词(身份/规则)"
@@ -4693,9 +4751,9 @@ var Jo = [
4693
4751
  label: "其他"
4694
4752
  }
4695
4753
  ];
4696
- function Xo() {
4754
+ function Zo() {
4697
4755
  let e = {};
4698
- for (let t of Yo) e[t.key] = {
4756
+ for (let t of Xo) e[t.key] = {
4699
4757
  key: t.key,
4700
4758
  label: t.label,
4701
4759
  tokens: 0,
@@ -4704,16 +4762,16 @@ function Xo() {
4704
4762
  };
4705
4763
  return e;
4706
4764
  }
4707
- function Zo(e, t) {
4765
+ function Qo(e, t) {
4708
4766
  e.tokens += t, e.msgCount += 1;
4709
4767
  }
4710
- function Qo(e) {
4768
+ function $o(e) {
4711
4769
  let t = e.content;
4712
4770
  return typeof t == "string" ? t : JSON.stringify(t ?? "");
4713
4771
  }
4714
- function $o(e, t) {
4772
+ function es(e, t) {
4715
4773
  let n = [];
4716
- for (let t of Jo) {
4774
+ for (let t of Yo) {
4717
4775
  let r = 0;
4718
4776
  for (;;) {
4719
4777
  let i = e.indexOf(t.prefix, r);
@@ -4726,35 +4784,35 @@ function $o(e, t) {
4726
4784
  }
4727
4785
  if (n.sort((e, t) => e.idx - t.idx), !n.length) {
4728
4786
  let n = e.trim();
4729
- n && Zo(t.systemPrompt, X(n));
4787
+ n && Qo(t.systemPrompt, X(n));
4730
4788
  return;
4731
4789
  }
4732
4790
  if (n[0].idx > 0) {
4733
4791
  let r = e.slice(0, n[0].idx).trim();
4734
- r && Zo(t.systemPrompt, X(r));
4792
+ r && Qo(t.systemPrompt, X(r));
4735
4793
  }
4736
4794
  for (let r = 0; r < n.length; r++) {
4737
4795
  let i = n[r].idx, a = r + 1 < n.length ? n[r + 1].idx : e.length, o = e.slice(i, a).trim();
4738
- o && Zo(t[n[r].key], X(o));
4796
+ o && Qo(t[n[r].key], X(o));
4739
4797
  }
4740
4798
  }
4741
- function es(e, t = {}) {
4742
- let n = Xo(), r = -1;
4799
+ function ts(e, t = {}) {
4800
+ let n = Zo(), r = -1;
4743
4801
  for (let t = e.length - 1; t >= 0; t--) if (e[t] instanceof a) {
4744
4802
  r = t;
4745
4803
  break;
4746
4804
  }
4747
4805
  for (let t = 0; t < e.length; t++) {
4748
4806
  let c = e[t];
4749
- if (c instanceof o) $o(Qo(c), n);
4750
- else if (c instanceof a) Zo(n[t === r ? "current" : "history"], X(Qo(c)));
4807
+ if (c instanceof o) es($o(c), n);
4808
+ else if (c instanceof a) Qo(n[t === r ? "current" : "history"], X($o(c)));
4751
4809
  else if (c instanceof i) {
4752
4810
  let e = c.tool_calls ?? [];
4753
4811
  if (e.length) {
4754
4812
  let t = e.map((e) => JSON.stringify(e.args ?? {})).join(" ");
4755
- Zo(n.toolResults, X(t));
4756
- } else Zo(n.assistant, X(Qo(c)));
4757
- } else c instanceof s ? Zo(n.toolResults, X(Qo(c))) : Zo(n.other, X(Qo(c)));
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)));
4758
4816
  }
4759
4817
  let c = Object.values(n).filter((e) => e.tokens > 0);
4760
4818
  c.sort((e, t) => t.tokens - e.tokens);
@@ -4771,12 +4829,12 @@ function es(e, t = {}) {
4771
4829
  }
4772
4830
  //#endregion
4773
4831
  //#region src/core/harness/contextInspector.ts
4774
- function ts(e = {}) {
4832
+ function ns(e = {}) {
4775
4833
  let t, n = e.contextWindow;
4776
4834
  return {
4777
4835
  name: "context-inspector",
4778
4836
  async wrapModelCall(r, i) {
4779
- return t = es(r.messages, {
4837
+ return t = ts(r.messages, {
4780
4838
  contextWindow: n,
4781
4839
  thresholdRatio: e.thresholdRatio
4782
4840
  }), i(r);
@@ -4789,13 +4847,13 @@ function ts(e = {}) {
4789
4847
  }
4790
4848
  //#endregion
4791
4849
  //#region src/core/mcp/client.ts
4792
- function ns(e) {
4850
+ function rs(e) {
4793
4851
  let t = e?.content;
4794
4852
  if (!Array.isArray(t) || !t.length) return "";
4795
4853
  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");
4796
4854
  return e?.isError ? `工具错误:${n}` : n;
4797
4855
  }
4798
- async function rs(e) {
4856
+ async function is(e) {
4799
4857
  let t = new URL(e.url), n = e.requestInit;
4800
4858
  if (e.transport === "http") {
4801
4859
  let { StreamableHTTPClientTransport: e } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
@@ -4808,8 +4866,8 @@ async function rs(e) {
4808
4866
  let { WebSocketClientTransport: r } = await import("@modelcontextprotocol/sdk/client/websocket.js");
4809
4867
  return new r(t);
4810
4868
  }
4811
- function is(e, t) {
4812
- return r(async (n) => ns(await t.callTool({
4869
+ function as(e, t) {
4870
+ return r(async (n) => rs(await t.callTool({
4813
4871
  name: e.name,
4814
4872
  arguments: n
4815
4873
  })), {
@@ -4818,39 +4876,39 @@ function is(e, t) {
4818
4876
  schema: e.inputSchema
4819
4877
  });
4820
4878
  }
4821
- async function as(e) {
4822
- let { Client: t } = await import("@modelcontextprotocol/sdk/client"), n = await rs(e), r = new t({
4879
+ async function os(e) {
4880
+ let { Client: t } = await import("@modelcontextprotocol/sdk/client"), n = await is(e), r = new t({
4823
4881
  name: "page-agent-sdk",
4824
4882
  version: "1.0"
4825
4883
  }, { capabilities: {} });
4826
4884
  await r.connect(n);
4827
4885
  let { tools: i } = await r.listTools();
4828
4886
  return {
4829
- tools: i.map((e) => is(e, r)),
4887
+ tools: i.map((e) => as(e, r)),
4830
4888
  close: () => r.close()
4831
4889
  };
4832
4890
  }
4833
4891
  //#endregion
4834
4892
  //#region src/core/sdk/promptBuilder.ts
4835
- var os = [
4893
+ var ss = [
4836
4894
  "你是一个 JSON 操作助手。集成方声明了一个主数据对象(含 zod schema 校验),你通过专用工具安全地读写它来完成任务。",
4837
4895
  "所有写操作都经范围控制(仅 schema 声明字段内)与 schema 校验(不合法会返回结构化错误而非写入),并自动留快照可回退。",
4838
4896
  "大对象/数组优先用增量 patch(只发改动)而非整体重传,避免输出被截断。",
4839
4897
  "---",
4840
4898
  ia.reliableWriteRules
4841
4899
  ].join("\n\n");
4842
- function ss(e, t) {
4900
+ function cs(e, t) {
4843
4901
  if (!e) return "";
4844
4902
  let n = ca(e.schema, t);
4845
4903
  return `\n\n## 可操作数据(字段以 read 工具返回的实际值为准)\n${e.description ? e.description + "\n" : ""}${n}`;
4846
4904
  }
4847
- function cs(e) {
4905
+ function ls(e) {
4848
4906
  let t = e.appendReliableWriteRules !== !1;
4849
- return e.systemPrompt ? t ? e.systemPrompt + "\n\n---\n\n" + ia.reliableWriteRules : e.systemPrompt : os;
4907
+ return e.systemPrompt ? t ? e.systemPrompt + "\n\n---\n\n" + ia.reliableWriteRules : e.systemPrompt : ss;
4850
4908
  }
4851
4909
  //#endregion
4852
4910
  //#region src/core/sdk/defineTool.ts
4853
- function ls(e) {
4911
+ function us(e) {
4854
4912
  return r(async (t) => {
4855
4913
  let n = await e.handler(t);
4856
4914
  return typeof n == "string" ? n : JSON.stringify(n);
@@ -4862,7 +4920,7 @@ function ls(e) {
4862
4920
  }
4863
4921
  //#endregion
4864
4922
  //#region src/core/sdk/inspectContextTool.ts
4865
- var us = t.object({
4923
+ var ds = t.object({
4866
4924
  path: t.string().optional().describe("分类 key 过滤(如 toolResults/history/systemPrompt/dataHint);不传=全部分类"),
4867
4925
  role: t.enum([
4868
4926
  "user",
@@ -4872,11 +4930,11 @@ var us = t.object({
4872
4930
  ]).optional().describe("聚焦每轮首句的角色(assistant→回复摘要,user→问题摘要);不影响工具列表"),
4873
4931
  limit: t.number().int().min(1).max(50).optional().describe("返回最近 N 轮(默认全部;超 50 自动截最近 50 防返回过大)")
4874
4932
  });
4875
- function ds(e) {
4876
- return ls({
4933
+ function fs(e) {
4934
+ return us({
4877
4935
  name: "inspect_context",
4878
4936
  description: "查看当前对话上下文的构成(供压缩决策)。返回:totalTokens(历史轮次 token 总和,与触发判断同口径)、occupancy(窗口占用比)、contextWindow、categories(分类占用)、rounds(每轮 token/工具/首句)。先调用本工具查看构成,再决定压缩策略。",
4879
- schema: us,
4937
+ schema: ds,
4880
4938
  handler: (t) => {
4881
4939
  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) => {
4882
4940
  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);
@@ -4899,7 +4957,7 @@ function ds(e) {
4899
4957
  }
4900
4958
  //#endregion
4901
4959
  //#region src/core/sdk/compressDecision.ts
4902
- var fs = t.object({
4960
+ var ps = t.object({
4903
4961
  keepRounds: t.number().int().min(0).max(50).optional(),
4904
4962
  windowRatio: t.number().min(0).max(1).optional(),
4905
4963
  summarize: t.object({ mode: t.enum(["index", "llm"]) }),
@@ -4909,23 +4967,23 @@ var fs = t.object({
4909
4967
  }).refine((e) => e.keepRounds !== void 0 || e.windowRatio !== void 0, { message: "keepRounds 与 windowRatio 至少填一个(按当前触发模式)" });
4910
4968
  //#endregion
4911
4969
  //#region src/core/sdk/llmResolver.ts
4912
- function ps(e) {
4970
+ function ms(e) {
4913
4971
  let t = e.find((e) => e.role === "user");
4914
4972
  if (!t) return;
4915
4973
  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, " ");
4916
4974
  if (r) return r.length > 30 ? r.slice(0, 30) + "…" : r;
4917
4975
  }
4918
- function ms(e) {
4976
+ function hs(e) {
4919
4977
  return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
4920
4978
  }
4921
- function hs(e) {
4979
+ function gs(e) {
4922
4980
  let t = e.content;
4923
4981
  return typeof t == "string" ? t : Array.isArray(t) ? t.map((e) => typeof e == "string" ? e : e?.text ?? "").join("") : String(t ?? "");
4924
4982
  }
4925
- function gs(e) {
4983
+ function _s(e) {
4926
4984
  let t = e.summaryLlm ?? e.llm;
4927
4985
  if (!t) return;
4928
- let n = e.summaryTemperature ?? .3, r = e.summaryMaxTokens ?? 1024, i = e.summaryTimeoutMs ?? 15e3, s = ms(t) ? t : null, c = ms(t) ? null : t;
4986
+ let n = e.summaryTemperature ?? .3, r = e.summaryMaxTokens ?? 1024, i = e.summaryTimeoutMs ?? 15e3, s = hs(t) ? t : null, c = hs(t) ? null : t;
4929
4987
  if (c && !c.apiKey) {
4930
4988
  e.summaryLlm && console.warn("[page-agent-sdk][summarization] summaryLlm 已配置但缺 apiKey,摘要回退主 agent 模型或零成本索引摘要");
4931
4989
  return;
@@ -4937,16 +4995,16 @@ function gs(e) {
4937
4995
  return !l && c && (l = await f(c, {
4938
4996
  temperature: n,
4939
4997
  maxTokens: r
4940
- })), hs(await l.invoke([new o("你是对话历史压缩助手。把下面按轮次索引的对话要点,改写成一段连贯、紧凑的中文摘要,保留关键事实、用户意图与已用工具,不要编造。直接输出摘要正文。"), new a(e)], { signal: t.signal })).trim();
4998
+ })), gs(await l.invoke([new o("你是对话历史压缩助手。把下面按轮次索引的对话要点,改写成一段连贯、紧凑的中文摘要,保留关键事实、用户意图与已用工具,不要编造。直接输出摘要正文。"), new a(e)], { signal: t.signal })).trim();
4941
4999
  } finally {
4942
5000
  clearTimeout(s);
4943
5001
  }
4944
5002
  };
4945
5003
  }
4946
- function _s(e) {
5004
+ function vs(e) {
4947
5005
  let t = e.titleLlm ?? e.summaryLlm ?? e.llm;
4948
5006
  if (!t) return;
4949
- let n = ms(t) ? t : null, r = ms(t) ? null : t;
5007
+ let n = hs(t) ? t : null, r = hs(t) ? null : t;
4950
5008
  if (r && !r.apiKey) return;
4951
5009
  let i = n;
4952
5010
  return async (e) => {
@@ -4955,7 +5013,7 @@ function _s(e) {
4955
5013
  return !i && r && (i = await f(r, {
4956
5014
  temperature: 0,
4957
5015
  maxTokens: 30
4958
- })), hs(await i.invoke([new o("根据以下对话的主旨,生成一个简短的中文标题(不超过15个字,不要标点和引号,直接输出标题文字)。"), new a(t)], { signal: n.signal })).trim().replace(/^["'""「『]|["'""」』]$/g, "").split("\n")[0].slice(0, 20);
5016
+ })), gs(await i.invoke([new o("根据以下对话的主旨,生成一个简短的中文标题(不超过15个字,不要标点和引号,直接输出标题文字)。"), new a(t)], { signal: n.signal })).trim().replace(/^["'""「『]|["'""」』]$/g, "").split("\n")[0].slice(0, 20);
4959
5017
  } catch {
4960
5018
  return "";
4961
5019
  } finally {
@@ -4963,10 +5021,10 @@ function _s(e) {
4963
5021
  }
4964
5022
  };
4965
5023
  }
4966
- function vs() {
5024
+ function ys() {
4967
5025
  return `call_dec_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
4968
5026
  }
4969
- function ys(e) {
5027
+ function bs(e) {
4970
5028
  let t = e.match(/```(?:json)?\s*([\s\S]*?)```/), n = t ? t[1] : e, r = n.indexOf("{"), i = n.lastIndexOf("}");
4971
5029
  if (r < 0 || i < 0 || i <= r) return null;
4972
5030
  try {
@@ -4975,21 +5033,21 @@ function ys(e) {
4975
5033
  return null;
4976
5034
  }
4977
5035
  }
4978
- function bs(e) {
5036
+ function xs(e) {
4979
5037
  if (!e) return null;
4980
- let t = ys(e);
5038
+ let t = bs(e);
4981
5039
  if (t == null) return null;
4982
- let n = fs.safeParse(t);
5040
+ let n = ps.safeParse(t);
4983
5041
  return n.success ? n.data : null;
4984
5042
  }
4985
- async function xs(e, t, n, r) {
5043
+ async function Ss(e, t, n, r) {
4986
5044
  let i = [...n];
4987
5045
  for (let n = 0; n < 3; n++) {
4988
5046
  let n = await e.invoke(i, { signal: r }), a = n?.tool_calls ?? [];
4989
- if (!a.length) return hs(n).trim();
5047
+ if (!a.length) return gs(n).trim();
4990
5048
  i = [...i, n];
4991
5049
  for (let e of a) {
4992
- let n = e.id ?? vs();
5050
+ let n = e.id ?? ys();
4993
5051
  try {
4994
5052
  let r = await t.invoke(e.args ?? {}), a = typeof r == "string" ? r : r?.content ?? JSON.stringify(r);
4995
5053
  i = [...i, new s({
@@ -5006,10 +5064,10 @@ async function xs(e, t, n, r) {
5006
5064
  }
5007
5065
  return "";
5008
5066
  }
5009
- function Ss(e) {
5067
+ function Cs(e) {
5010
5068
  let t = e.summaryLlm ?? e.llm;
5011
5069
  if (!t) return;
5012
- let n = ms(t) ? t : null, r = ms(t) ? null : t;
5070
+ let n = hs(t) ? t : null, r = hs(t) ? null : t;
5013
5071
  if (r && !r.apiKey) return;
5014
5072
  let i = e.decisionTimeoutMs ?? 6e3, s = e.decisionMaxTokens ?? 2048, c = n;
5015
5073
  return async (e) => {
@@ -5021,12 +5079,12 @@ function Ss(e) {
5021
5079
  }));
5022
5080
  let n = c;
5023
5081
  if (typeof n.bindTools != "function") return null;
5024
- let i = ds({
5082
+ let i = fs({
5025
5083
  getMessages: e.getMessages,
5026
5084
  getSnapshot: e.getSnapshot,
5027
5085
  contextWindow: e.contextWindow
5028
5086
  }), 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)。`)];
5029
- return bs(await xs(l, i, d, t.signal)) || bs(await xs(l, i, [...d, new a("上一次输出无效(JSON 解析失败或 schema 校验不通过)。请只输出符合 schema 的压缩决策 JSON,不要多余文字/markdown 代码块。")], t.signal));
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));
5030
5088
  } catch {
5031
5089
  return null;
5032
5090
  } finally {
@@ -5034,22 +5092,22 @@ function Ss(e) {
5034
5092
  }
5035
5093
  };
5036
5094
  }
5037
- function Cs(e) {
5038
- let t = e.llm, n = ms(e.llm) ? void 0 : e.llm;
5095
+ function ws(e) {
5096
+ let t = e.llm, n = hs(e.llm) ? void 0 : e.llm;
5039
5097
  return {
5040
5098
  modelCaps: ni({
5041
5099
  model: n?.model ?? t?.model ?? t?.modelName,
5042
5100
  contextWindow: e.contextWindow ?? n?.contextWindow ?? t?.contextWindow,
5043
5101
  maxOutputTokens: e.maxOutputTokens ?? n?.maxOutputTokens ?? t?.maxOutputTokens
5044
5102
  }),
5045
- summaryLlmInvoke: gs(e),
5046
- titleLlmInvoke: _s(e),
5047
- compressDecisionInvoke: Ss(e)
5103
+ summaryLlmInvoke: _s(e),
5104
+ titleLlmInvoke: vs(e),
5105
+ compressDecisionInvoke: Cs(e)
5048
5106
  };
5049
5107
  }
5050
5108
  //#endregion
5051
5109
  //#region src/core/sdk/conflictManager.ts
5052
- function ws(e) {
5110
+ function Ts(e) {
5053
5111
  let t = /* @__PURE__ */ Ot(null), n = 0;
5054
5112
  function r(r) {
5055
5113
  return new Promise((i) => {
@@ -5080,7 +5138,7 @@ function ws(e) {
5080
5138
  }
5081
5139
  //#endregion
5082
5140
  //#region src/core/utils/id.ts
5083
- function Ts() {
5141
+ function Es() {
5084
5142
  try {
5085
5143
  if (typeof crypto < "u" && typeof crypto.randomUUID == "function") return crypto.randomUUID();
5086
5144
  } catch {}
@@ -5088,7 +5146,7 @@ function Ts() {
5088
5146
  }
5089
5147
  //#endregion
5090
5148
  //#region src/core/backends/storage.ts
5091
- var Es = "chat-sdk", Ds = 50 * 1024 * 1024, Os = 4 * 1024 * 1024, ks = 10 * 1024 * 1024, As = .9, js = 500, Ms = 300, Ns = "__meta__", Ps = "v:1", Fs = [
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 = [
5092
5150
  "messages",
5093
5151
  "vfs",
5094
5152
  "todos",
@@ -5099,51 +5157,51 @@ var Es = "chat-sdk", Ds = 50 * 1024 * 1024, Os = 4 * 1024 * 1024, ks = 10 * 1024
5099
5157
  "workingMemory",
5100
5158
  "focus"
5101
5159
  ];
5102
- function Is(e) {
5103
- return e === "local" || e === "session" ? Os : Ds;
5104
- }
5105
5160
  function Ls(e) {
5161
+ return e === "local" || e === "session" ? ks : Os;
5162
+ }
5163
+ function Rs(e) {
5106
5164
  if (typeof e != "object" || !e) return !1;
5107
5165
  let t = e;
5108
5166
  return t.name === "QuotaExceededError" || t.name === "NS_ERROR_DOM_QUOTA_REACHED" || t.code === 22 || t.code === 1014;
5109
5167
  }
5110
- function Rs(e, t, n, r) {
5168
+ function zs(e, t, n, r) {
5111
5169
  return [
5112
- Ps,
5170
+ Fs,
5113
5171
  e,
5114
5172
  t,
5115
5173
  n,
5116
5174
  r
5117
5175
  ].join("::");
5118
5176
  }
5119
- function zs(e, t, n) {
5177
+ function Bs(e, t, n) {
5120
5178
  return [
5121
- Ps,
5179
+ Fs,
5122
5180
  e,
5123
5181
  t,
5124
5182
  n
5125
5183
  ].join("::") + "::";
5126
5184
  }
5127
- function Bs(e, t) {
5185
+ function Vs(e, t) {
5128
5186
  return [
5129
- Ps,
5187
+ Fs,
5130
5188
  e,
5131
5189
  t
5132
5190
  ].join("::") + "::";
5133
5191
  }
5134
- function Vs(e) {
5135
- return [Ps, e].join("::") + "::";
5192
+ function Hs(e) {
5193
+ return [Fs, e].join("::") + "::";
5136
5194
  }
5137
- var Hs = null;
5138
- function Us(e) {
5139
- Hs ||= new TextEncoder();
5195
+ var Us = null;
5196
+ function Ws(e) {
5197
+ Us ||= new TextEncoder();
5140
5198
  try {
5141
- return Hs.encode(JSON.stringify(e)).length;
5199
+ return Us.encode(JSON.stringify(e)).length;
5142
5200
  } catch {
5143
5201
  return 0;
5144
5202
  }
5145
5203
  }
5146
- function Ws(e, t, n) {
5204
+ function Gs(e, t, n) {
5147
5205
  let r = e.reduce((e, t) => e + t.bytes, 0);
5148
5206
  if (r <= t) return [];
5149
5207
  let i = t * n, a = [...e].sort((e, t) => e.lastAccessed - t.lastAccessed), o = [];
@@ -5153,7 +5211,7 @@ function Ws(e, t, n) {
5153
5211
  }
5154
5212
  return o;
5155
5213
  }
5156
- function Gs() {
5214
+ function Ks() {
5157
5215
  let e = /* @__PURE__ */ new Map();
5158
5216
  return {
5159
5217
  async get(t) {
@@ -5173,7 +5231,7 @@ function Gs() {
5173
5231
  }
5174
5232
  };
5175
5233
  }
5176
- function Ks(e) {
5234
+ function qs(e) {
5177
5235
  return new Promise((t, n) => {
5178
5236
  if (typeof indexedDB > "u") {
5179
5237
  n(/* @__PURE__ */ Error("indexedDB 不可用"));
@@ -5234,7 +5292,7 @@ function Ks(e) {
5234
5292
  }, r.onerror = () => n(r.error);
5235
5293
  });
5236
5294
  }
5237
- function qs(e) {
5295
+ function Js(e) {
5238
5296
  return {
5239
5297
  async get(t) {
5240
5298
  let n = e.getItem(t);
@@ -5268,12 +5326,12 @@ function qs(e) {
5268
5326
  }
5269
5327
  };
5270
5328
  }
5271
- function Js(e, t, n) {
5329
+ function Ys(e, t, n) {
5272
5330
  let r = (e.get(t) ?? Promise.resolve()).then(n, n);
5273
5331
  return e.set(t, r.then(() => void 0, () => void 0)), r;
5274
5332
  }
5275
- function Ys(e = {}) {
5276
- let t = e.dbName ?? Es, n = e.backend ?? "indexed", r = e.maxBytes ?? Is(n), i = e.maxBytesPerSession ?? ks, a = e.evictionWatermark ?? As, o = e.debounceMs ?? js, s = /* @__PURE__ */ new Set();
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();
5277
5335
  function c(e) {
5278
5336
  for (let t of s) try {
5279
5337
  t(e);
@@ -5286,16 +5344,16 @@ function Ys(e = {}) {
5286
5344
  try {
5287
5345
  if (n === "indexed") {
5288
5346
  if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
5289
- l = await Ks(t), d(!0);
5347
+ l = await qs(t), d(!0);
5290
5348
  } else if (n === "session") {
5291
5349
  if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
5292
- l = qs(sessionStorage), d(!0);
5350
+ l = Js(sessionStorage), d(!0);
5293
5351
  } else if (n === "local") {
5294
5352
  if (typeof localStorage > "u") throw Error("localStorage 不可用");
5295
- l = qs(localStorage), d(!0);
5296
- } else l = Gs(), d(!1);
5353
+ l = Js(localStorage), d(!0);
5354
+ } else l = Ks(), d(!1);
5297
5355
  } catch (e) {
5298
- l = Gs();
5356
+ l = Ks();
5299
5357
  let t = e instanceof Error ? e.message : String(e);
5300
5358
  d(!1), Promise.resolve().then(() => c({
5301
5359
  type: "degraded",
@@ -5305,10 +5363,10 @@ function Ys(e = {}) {
5305
5363
  })();
5306
5364
  let p = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map();
5307
5365
  function g(e, n, r, a) {
5308
- let o = Rs(t, r, a, Ns);
5309
- return Js(h, o, async () => {
5366
+ let o = zs(t, r, a, Ps);
5367
+ return Ys(h, o, async () => {
5310
5368
  let t = async () => {
5311
- let t = await l.get(o), s = await l.get(e), u = s == null ? 0 : Us(s), d = Us(n), f = (t?.bytes ?? 0) + (d - u);
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);
5312
5370
  if (f > i) {
5313
5371
  c({
5314
5372
  type: "quota",
@@ -5330,12 +5388,12 @@ function Ys(e = {}) {
5330
5388
  try {
5331
5389
  await t();
5332
5390
  } catch (e) {
5333
- if (Ls(e) && !u) {
5391
+ if (Rs(e) && !u) {
5334
5392
  u = !0;
5335
5393
  try {
5336
5394
  await b();
5337
5395
  } catch {}
5338
- l = Gs(), Promise.resolve().then(() => c({
5396
+ l = Ks(), Promise.resolve().then(() => c({
5339
5397
  type: "degraded",
5340
5398
  reason: "存储配额超限(QuotaExceededError),已淘汰最旧会话并降级内存"
5341
5399
  }));
@@ -5347,7 +5405,7 @@ function Ys(e = {}) {
5347
5405
  });
5348
5406
  }
5349
5407
  function _(e, n, r, i) {
5350
- let a = Rs(t, e, n, r), s = p.get(a);
5408
+ let a = zs(t, e, n, r), s = p.get(a);
5351
5409
  s && s.resolve();
5352
5410
  let c = m.get(a);
5353
5411
  return c && clearTimeout(c), new Promise((t) => {
@@ -5374,15 +5432,15 @@ function Ys(e = {}) {
5374
5432
  function y() {
5375
5433
  v ||= setTimeout(() => {
5376
5434
  v = null, b();
5377
- }, Ms);
5435
+ }, Ns);
5378
5436
  }
5379
5437
  async function b() {
5380
5438
  let e = [];
5381
- await l.scan(Vs(t), (t, n) => {
5439
+ await l.scan(Hs(t), (t, n) => {
5382
5440
  t.endsWith("::__meta__") && e.push(n);
5383
5441
  });
5384
- let n = Ws(e, r, a);
5385
- for (let e of n) await l.clearPrefix(zs(t, e.agentId, e.sessionId)), c({
5442
+ let n = Gs(e, r, a);
5443
+ for (let e of n) await l.clearPrefix(Bs(t, e.agentId, e.sessionId)), c({
5386
5444
  type: "evicted",
5387
5445
  agentId: e.agentId,
5388
5446
  sessionId: e.sessionId,
@@ -5393,13 +5451,13 @@ function Ys(e = {}) {
5393
5451
  ready: f,
5394
5452
  async listSessions(e) {
5395
5453
  let n = [];
5396
- return await l.scan(Bs(t, e), (e, t) => {
5454
+ return await l.scan(Vs(t, e), (e, t) => {
5397
5455
  e.endsWith("::__meta__") && n.push(t);
5398
5456
  }), n.sort((e, t) => t.lastAccessed - e.lastAccessed);
5399
5457
  },
5400
5458
  async load(e, n) {
5401
- let r = Rs(t, e, n, Ns);
5402
- return await Js(h, r, async () => {
5459
+ let r = zs(t, e, n, Ps);
5460
+ return await Ys(h, r, async () => {
5403
5461
  let i = await l.get(r);
5404
5462
  if (!i) return;
5405
5463
  let a = {
@@ -5408,8 +5466,8 @@ function Ys(e = {}) {
5408
5466
  todos: [],
5409
5467
  memory: ""
5410
5468
  };
5411
- for (let r of Fs) {
5412
- let i = await l.get(Rs(t, e, n, r));
5469
+ for (let r of Is) {
5470
+ let i = await l.get(zs(t, e, n, r));
5413
5471
  i != null && (a[r] = i);
5414
5472
  }
5415
5473
  return i.lastAccessed = Date.now(), await l.set(r, i), a;
@@ -5417,12 +5475,12 @@ function Ys(e = {}) {
5417
5475
  },
5418
5476
  async save(e, t, n) {
5419
5477
  let r = [];
5420
- for (let i of Fs) n[i] !== void 0 && r.push(_(e, t, i, n[i]));
5478
+ for (let i of Is) n[i] !== void 0 && r.push(_(e, t, i, n[i]));
5421
5479
  await Promise.all(r);
5422
5480
  },
5423
5481
  async updateTitle(e, n, r) {
5424
- let i = Rs(t, e, n, Ns);
5425
- return Js(h, i, async () => {
5482
+ let i = zs(t, e, n, Ps);
5483
+ return Ys(h, i, async () => {
5426
5484
  let e = await l.get(i);
5427
5485
  e && (e.title = r, e.lastAccessed = Date.now(), await l.set(i, e));
5428
5486
  });
@@ -5438,10 +5496,10 @@ function Ys(e = {}) {
5438
5496
  })), c({ type: "flush" }), await b();
5439
5497
  },
5440
5498
  async deleteSession(e, n) {
5441
- await l.clearPrefix(zs(t, e, n));
5499
+ await l.clearPrefix(Bs(t, e, n));
5442
5500
  },
5443
5501
  async createSession(e, n, r) {
5444
- let i = r ?? Ts(), a = Date.now(), o = {
5502
+ let i = r ?? Es(), a = Date.now(), o = {
5445
5503
  agentId: e,
5446
5504
  sessionId: i,
5447
5505
  createdAt: a,
@@ -5449,7 +5507,7 @@ function Ys(e = {}) {
5449
5507
  bytes: 0,
5450
5508
  title: n
5451
5509
  };
5452
- return await l.set(Rs(t, e, i, Ns), o), i;
5510
+ return await l.set(zs(t, e, i, Ps), o), i;
5453
5511
  },
5454
5512
  onEvent(e) {
5455
5513
  s.add(e);
@@ -5464,15 +5522,15 @@ function Ys(e = {}) {
5464
5522
  }
5465
5523
  //#endregion
5466
5524
  //#region src/core/sdk/optionsResolver.ts
5467
- function Xs(e) {
5468
- return e === void 0 || e === !1 ? null : typeof e == "string" ? Ys({ backend: e }) : e.enabled === !1 ? null : Ys(e);
5469
- }
5470
5525
  function Zs(e) {
5526
+ return e === void 0 || e === !1 ? null : typeof e == "string" ? Xs({ backend: e }) : e.enabled === !1 ? null : Xs(e);
5527
+ }
5528
+ function Qs(e) {
5471
5529
  return e.dialog ?? {};
5472
5530
  }
5473
5531
  //#endregion
5474
5532
  //#region src/core/capabilities.ts
5475
- var Qs = [
5533
+ var $s = [
5476
5534
  {
5477
5535
  name: "dataOps",
5478
5536
  defaultOn: !0
@@ -5561,13 +5619,13 @@ var Qs = [
5561
5619
  requires: ["summarization"]
5562
5620
  }
5563
5621
  ];
5564
- function $s(e) {
5622
+ function ec(e) {
5565
5623
  let t = {};
5566
- for (let n of Qs) {
5624
+ for (let n of $s) {
5567
5625
  let r = e?.[n.name];
5568
5626
  t[n.name] = n.defaultOn ? r !== !1 : r === !0;
5569
5627
  }
5570
- for (let e of Qs) if (e.requires && t[e.name]) {
5628
+ for (let e of $s) if (e.requires && t[e.name]) {
5571
5629
  for (let n of e.requires) if (!t[n]) {
5572
5630
  t[e.name] = !1;
5573
5631
  break;
@@ -5577,7 +5635,7 @@ function $s(e) {
5577
5635
  }
5578
5636
  //#endregion
5579
5637
  //#region src/core/sdk/events.ts
5580
- function ec(e) {
5638
+ function tc(e) {
5581
5639
  let t = /* @__PURE__ */ new Set(), n = (n) => {
5582
5640
  if (n.type !== "approval_request") {
5583
5641
  if (e) try {
@@ -5603,7 +5661,7 @@ function ec(e) {
5603
5661
  }
5604
5662
  //#endregion
5605
5663
  //#region src/core/sdk/contextPreset.ts
5606
- var tc = {
5664
+ var nc = {
5607
5665
  auto: {
5608
5666
  summaryThresholdRatio: .5,
5609
5667
  windowRatio: .4,
@@ -5631,7 +5689,7 @@ var tc = {
5631
5689
  enableRecall: !0,
5632
5690
  enableLLMSummary: !0
5633
5691
  }
5634
- }, nc = {
5692
+ }, rc = {
5635
5693
  auto: ["describe_data", "read"],
5636
5694
  conservative: ["describe_data"],
5637
5695
  aggressive: ["describe_data", "read"],
@@ -5642,8 +5700,8 @@ var tc = {
5642
5700
  "search_data"
5643
5701
  ]
5644
5702
  };
5645
- function rc(e, t) {
5646
- let n = tc[e.contextPreset ?? "auto"] ?? {}, r = e.contextOptions === !1 ? {} : e.contextOptions ?? {};
5703
+ function ic(e, t) {
5704
+ let n = nc[e.contextPreset ?? "auto"] ?? {}, r = e.contextOptions === !1 ? {} : e.contextOptions ?? {};
5647
5705
  return {
5648
5706
  ...n,
5649
5707
  ...r,
@@ -5653,7 +5711,7 @@ function rc(e, t) {
5653
5711
  }
5654
5712
  //#endregion
5655
5713
  //#region src/core/sdk/middlewareStack.ts
5656
- var ic = {
5714
+ var ac = {
5657
5715
  dataHint: 10,
5658
5716
  usageHints: 20,
5659
5717
  todos: 30,
@@ -5670,29 +5728,29 @@ var ic = {
5670
5728
  subagents: 140,
5671
5729
  augmentSystem: 150
5672
5730
  };
5673
- function ac(e) {
5731
+ function oc(e) {
5674
5732
  return e.map((e, t) => ({
5675
5733
  m: e,
5676
5734
  i: t,
5677
- p: ic[e.name] ?? Infinity
5735
+ p: ac[e.name] ?? Infinity
5678
5736
  })).sort((e, t) => e.p - t.p || e.i - t.i).map((e) => e.m);
5679
5737
  }
5680
5738
  //#endregion
5681
5739
  //#region src/core/tools/jsonUtils.ts
5682
- var oc = /* @__PURE__ */ new Set([
5740
+ var sc = /* @__PURE__ */ new Set([
5683
5741
  "__proto__",
5684
5742
  "constructor",
5685
5743
  "prototype"
5686
5744
  ]);
5687
- function sc(e) {
5688
- return e.split(".").some((e) => oc.has(e));
5745
+ function cc(e) {
5746
+ return e.split(".").some((e) => sc.has(e));
5689
5747
  }
5690
- function cc(e, t) {
5691
- if (!(!t || typeof t != "object" || Array.isArray(t))) for (let n of Object.keys(t)) oc.has(n) || (e[n] = t[n]);
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]);
5692
5750
  }
5693
5751
  function Z(e, t) {
5694
5752
  if (!t) return e;
5695
- if (sc(t)) return;
5753
+ if (cc(t)) return;
5696
5754
  let n = t.split("."), r = e;
5697
5755
  for (let e of n) {
5698
5756
  if (r == null) return;
@@ -5700,8 +5758,8 @@ function Z(e, t) {
5700
5758
  }
5701
5759
  return r;
5702
5760
  }
5703
- function lc(e, t, n) {
5704
- if (!t || sc(t)) return;
5761
+ function uc(e, t, n) {
5762
+ if (!t || cc(t)) return;
5705
5763
  let r = t.split("."), i = e;
5706
5764
  for (let e = 0; e < r.length - 1; e++) {
5707
5765
  let t = r[e];
@@ -5709,8 +5767,8 @@ function lc(e, t, n) {
5709
5767
  }
5710
5768
  i[r[r.length - 1]] = n;
5711
5769
  }
5712
- function uc(e, t) {
5713
- if (!t || sc(t)) return !1;
5770
+ function dc(e, t) {
5771
+ if (!t || cc(t)) return !1;
5714
5772
  let n = t.split("."), r = e;
5715
5773
  for (let e = 0; e < n.length - 1; e++) {
5716
5774
  if (r == null) return !1;
@@ -5719,10 +5777,10 @@ function uc(e, t) {
5719
5777
  let i = n[n.length - 1];
5720
5778
  return r == null || !(i in r) ? !1 : (Array.isArray(r) && /^\d+$/.test(i) ? r.splice(Number(i), 1) : delete r[i], !0);
5721
5779
  }
5722
- function dc(e) {
5780
+ function fc(e) {
5723
5781
  return e === void 0 ? void 0 : JSON.parse(JSON.stringify(e));
5724
5782
  }
5725
- function fc(e) {
5783
+ function pc(e) {
5726
5784
  if (typeof e != "string") return { parsed: e };
5727
5785
  let t = e.trim();
5728
5786
  if (!t) return { parsed: e };
@@ -5733,20 +5791,20 @@ function fc(e) {
5733
5791
  return n ? { parseError: t } : { parsed: e };
5734
5792
  }
5735
5793
  }
5736
- function pc(e, t) {
5794
+ function mc(e, t) {
5737
5795
  if (typeof e != "object" || !e) return e;
5738
5796
  let n = new Set(t);
5739
- if (Array.isArray(e)) return e.map((e) => pc(e, t));
5797
+ if (Array.isArray(e)) return e.map((e) => mc(e, t));
5740
5798
  let r = {};
5741
5799
  for (let t of Object.keys(e)) n.has(t) && (r[t] = e[t]);
5742
5800
  return r;
5743
5801
  }
5744
- function mc(e, t) {
5802
+ function hc(e, t) {
5745
5803
  if (typeof e != "object" || !e) return e;
5746
5804
  if (t <= 0) return Array.isArray(e) ? `[...${e.length}]` : "{...}";
5747
- if (Array.isArray(e)) return e.map((e) => mc(e, t - 1));
5805
+ if (Array.isArray(e)) return e.map((e) => hc(e, t - 1));
5748
5806
  let n = {};
5749
- for (let r of Object.keys(e)) n[r] = mc(e[r], t - 1);
5807
+ for (let r of Object.keys(e)) n[r] = hc(e[r], t - 1);
5750
5808
  return n;
5751
5809
  }
5752
5810
  function Q(e, t = Infinity) {
@@ -5768,7 +5826,7 @@ function Q(e, t = Infinity) {
5768
5826
  }
5769
5827
  return r.length > t && (r = r.slice(0, t) + `\n…[已截断,原长度 ${r.length}]`), r;
5770
5828
  }
5771
- function hc(e, t = 0) {
5829
+ function gc(e, t = 0) {
5772
5830
  let n = 3735928559 ^ t, r = 1103547991 ^ t;
5773
5831
  for (let t = 0; t < e.length; t++) {
5774
5832
  let i = e.charCodeAt(t);
@@ -5777,31 +5835,31 @@ function hc(e, t = 0) {
5777
5835
  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);
5778
5836
  }
5779
5837
  function $(e) {
5780
- return hc(Q(e)).toString(36);
5838
+ return gc(Q(e)).toString(36);
5781
5839
  }
5782
- function gc(e, t, n, r) {
5783
- if (t === "set") return n ? (lc(e, n, r), null) : "set 操作需要 jsonPath(整体替换请用 set_data)";
5784
- if (t === "remove") return n ? (uc(e, n), null) : "remove 操作需要 jsonPath";
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";
5785
5843
  if (t === "merge") {
5786
5844
  let t = n ? Z(e, n) : e;
5787
- return typeof t != "object" || !t || Array.isArray(t) ? `merge 目标${n ? `(${n})` : "(根)"}不是对象` : (cc(t, r), null);
5845
+ return typeof t != "object" || !t || Array.isArray(t) ? `merge 目标${n ? `(${n})` : "(根)"}不是对象` : (lc(t, r), null);
5788
5846
  }
5789
5847
  let i = n ? Z(e, n) : e;
5790
5848
  return Array.isArray(i) ? (Array.isArray(r) ? i.push(...r) : i.push(r), null) : `append 目标${n ? `(${n})` : "(根)"}不是数组`;
5791
5849
  }
5792
- function _c(e, t, n, r) {
5793
- if (t === "set") lc(e, n, r);
5794
- else if (t === "remove") uc(e, n);
5795
- else if (t === "merge") cc(n ? Z(e, n) : e, r);
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);
5796
5854
  else {
5797
5855
  let t = n ? Z(e, n) : e;
5798
5856
  Array.isArray(r) ? t.push(...r) : t.push(r);
5799
5857
  }
5800
5858
  }
5801
- function vc(e, t) {
5802
- typeof e == "object" && e && yc(e, t);
5803
- }
5804
5859
  function yc(e, t) {
5860
+ typeof e == "object" && e && bc(e, t);
5861
+ }
5862
+ function bc(e, t) {
5805
5863
  if (Array.isArray(e)) {
5806
5864
  e.length = 0, Array.isArray(t) && e.push(...t);
5807
5865
  return;
@@ -5810,7 +5868,7 @@ function yc(e, t) {
5810
5868
  for (let t of Object.keys(e)) t in n || delete e[t];
5811
5869
  for (let t of Object.keys(n)) e[t] = n[t];
5812
5870
  }
5813
- function bc(e, t, n = "") {
5871
+ function xc(e, t, n = "") {
5814
5872
  let r = [];
5815
5873
  if (!(typeof e == "object" && e) || !(typeof t == "object" && t) || Array.isArray(e) !== Array.isArray(t)) return e !== t && r.push({
5816
5874
  path: n || "(root)",
@@ -5829,14 +5887,14 @@ function bc(e, t, n = "") {
5829
5887
  path: i,
5830
5888
  from: e[a],
5831
5889
  to: void 0
5832
- }) : r.push(...bc(e[a], t[a], i));
5890
+ }) : r.push(...xc(e[a], t[a], i));
5833
5891
  }
5834
5892
  return r;
5835
5893
  }
5836
5894
  let i = e, a = t, o = /* @__PURE__ */ new Set([...Object.keys(i), ...Object.keys(a)]);
5837
5895
  for (let e of o) {
5838
5896
  let t = n ? `${n}.${e}` : e;
5839
- e in i ? e in a ? r.push(...bc(i[e], a[e], t)) : r.push({
5897
+ e in i ? e in a ? r.push(...xc(i[e], a[e], t)) : r.push({
5840
5898
  path: t,
5841
5899
  from: i[e],
5842
5900
  to: void 0
@@ -5848,48 +5906,48 @@ function bc(e, t, n = "") {
5848
5906
  }
5849
5907
  return r;
5850
5908
  }
5851
- var xc = {
5909
+ var Sc = {
5852
5910
  largeResults: 4 * 1024 * 1024,
5853
5911
  drafts: 2 * 1024 * 1024,
5854
5912
  userFiles: 2 * 1024 * 1024,
5855
5913
  resources: 4 * 1024 * 1024
5856
- }, Sc = [
5914
+ }, Cc = [
5857
5915
  "largeResults",
5858
5916
  "drafts",
5859
5917
  "userFiles",
5860
5918
  "resources"
5861
- ], Cc = .9;
5862
- function wc(e, t = {}) {
5919
+ ], wc = .9;
5920
+ function Tc(e, t = {}) {
5863
5921
  let n = Object.create(null);
5864
- if (e) for (let [t, r] of Object.entries(e)) n[Oc(t)] = {
5922
+ if (e) for (let [t, r] of Object.entries(e)) n[kc(t)] = {
5865
5923
  content: r,
5866
- updatedAt: Ac()
5924
+ updatedAt: jc()
5867
5925
  };
5868
5926
  let { persist: r } = t, i = t.maxBytes ?? 8388608, a = {
5869
- ...xc,
5927
+ ...Sc,
5870
5928
  ...t.poolBytes ?? {}
5871
5929
  };
5872
5930
  function o(e) {
5873
- let t = Oc(e);
5931
+ let t = kc(e);
5874
5932
  return t.startsWith("large_results/") ? "largeResults" : t.startsWith("drafts/") ? "drafts" : t.startsWith("resources/") ? "resources" : "userFiles";
5875
5933
  }
5876
5934
  function s(e) {
5877
5935
  let t = 0;
5878
- for (let [r, i] of Object.entries(n)) o(r) === e && (t += Ec(i.content));
5936
+ for (let [r, i] of Object.entries(n)) o(r) === e && (t += Dc(i.content));
5879
5937
  return t;
5880
5938
  }
5881
5939
  function c() {
5882
- for (let e of Sc) {
5940
+ for (let e of Cc) {
5883
5941
  let t = a[e];
5884
5942
  if (s(e) <= t) continue;
5885
- let r = t * Cc, i = e === "largeResults", c = i && s(e) > t * 1.5;
5943
+ let r = t * wc, i = e === "largeResults", c = i && s(e) > t * 1.5;
5886
5944
  c && console.warn(`[page-agent-sdk] vfs large_results 池 ${s(e)} > ${Math.round(t * 1.5)}(被引用撑爆)→ 无视 protectedRefs 强制删`);
5887
5945
  let l = Object.entries(n).filter(([t]) => o(t) === e).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
5888
5946
  for (let [t] of l) if (!(i && !c && u.has(t)) && (delete n[t], s(e) <= r)) break;
5889
5947
  }
5890
- if (Dc(n) > i) {
5891
- let e = i * Cc, t = Dc(n) > i * 1.5, r = Object.entries(n).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
5892
- for (let [i] of r) if (!(o(i) === "largeResults" && !t && u.has(i)) && (delete n[i], Dc(n) <= e)) break;
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;
5893
5951
  }
5894
5952
  }
5895
5953
  let l = !0, u = /* @__PURE__ */ new Set(), d = null;
@@ -5925,7 +5983,7 @@ function wc(e, t = {}) {
5925
5983
  }
5926
5984
  };
5927
5985
  return r && (m.hydrate = (e) => {
5928
- for (let [t, r] of Object.entries(e)) n[Oc(t)] = r;
5986
+ for (let [t, r] of Object.entries(e)) n[kc(t)] = r;
5929
5987
  c(), l = !0;
5930
5988
  }, m.flush = () => {
5931
5989
  d &&= (clearTimeout(d), null), f();
@@ -5934,19 +5992,19 @@ function wc(e, t = {}) {
5934
5992
  p(), l = !0;
5935
5993
  }), m;
5936
5994
  }
5937
- var Tc = null;
5938
- function Ec(e) {
5939
- return Tc ||= new TextEncoder(), Tc.encode(e).length;
5940
- }
5995
+ var Ec = null;
5941
5996
  function Dc(e) {
5997
+ return Ec ||= new TextEncoder(), Ec.encode(e).length;
5998
+ }
5999
+ function Oc(e) {
5942
6000
  let t = 0;
5943
- for (let n of Object.values(e)) t += Ec(n.content);
6001
+ for (let n of Object.values(e)) t += Dc(n.content);
5944
6002
  return t;
5945
6003
  }
5946
- function Oc(e) {
6004
+ function kc(e) {
5947
6005
  return e.replace(/^\/+/, "").replace(/\/+/g, "/");
5948
6006
  }
5949
- function kc(e) {
6007
+ function Ac(e) {
5950
6008
  let t = "";
5951
6009
  for (let n = 0; n < e.length; n++) {
5952
6010
  let r = e[n];
@@ -5954,10 +6012,10 @@ function kc(e) {
5954
6012
  }
5955
6013
  return RegExp("^" + t + "$");
5956
6014
  }
5957
- function Ac() {
6015
+ function jc() {
5958
6016
  return Date.now();
5959
6017
  }
5960
- var jc = [
6018
+ var Mc = [
5961
6019
  "vfs_read",
5962
6020
  "vfs_write",
5963
6021
  "vfs_edit",
@@ -5968,10 +6026,10 @@ var jc = [
5968
6026
  "vfs_json_patch",
5969
6027
  "vfs_rm"
5970
6028
  ];
5971
- function Mc(e) {
6029
+ function Nc(e) {
5972
6030
  return [
5973
6031
  r(async ({ path: t, offset: n, limit: r }) => {
5974
- let i = e.files[Oc(t)];
6032
+ let i = e.files[kc(t)];
5975
6033
  if (!i) return Y({
5976
6034
  code: "NOT_FOUND",
5977
6035
  path: t,
@@ -6000,9 +6058,9 @@ function Mc(e) {
6000
6058
  hint: "jsonString=true 要求 content 是合法 JSON;检查引号/逗号/括号配对;或省略 jsonString 写纯文本"
6001
6059
  });
6002
6060
  }
6003
- return e.files[Oc(t)] = {
6061
+ return e.files[kc(t)] = {
6004
6062
  content: n,
6005
- updatedAt: Ac()
6063
+ updatedAt: jc()
6006
6064
  }, `已写入 ${t}(${n.length} 字符)${r ? "(JSON 校验通过)" : ""}`;
6007
6065
  }, {
6008
6066
  name: "vfs_write",
@@ -6014,7 +6072,7 @@ function Mc(e) {
6014
6072
  })
6015
6073
  }),
6016
6074
  r(async ({ path: t, oldString: n, newString: r }) => {
6017
- let i = Oc(t), a = e.files[i];
6075
+ let i = kc(t), a = e.files[i];
6018
6076
  if (!a) return Y({
6019
6077
  code: "NOT_FOUND",
6020
6078
  path: t,
@@ -6044,7 +6102,7 @@ function Mc(e) {
6044
6102
  }
6045
6103
  return e.files[i] = {
6046
6104
  content: a.content.replace(n, r),
6047
- updatedAt: Ac()
6105
+ updatedAt: jc()
6048
6106
  }, `已替换 ${t} 中 1 处。`;
6049
6107
  }, {
6050
6108
  name: "vfs_edit",
@@ -6066,7 +6124,7 @@ function Mc(e) {
6066
6124
  r(async ({ pattern: t }) => {
6067
6125
  let n;
6068
6126
  try {
6069
- n = kc(t);
6127
+ n = Ac(t);
6070
6128
  } catch (e) {
6071
6129
  return Y({
6072
6130
  code: "GLOB_INVALID",
@@ -6095,7 +6153,7 @@ function Mc(e) {
6095
6153
  details: { pattern: t }
6096
6154
  });
6097
6155
  }
6098
- let i = n ? [Oc(n)] : Object.keys(e.files), a = [];
6156
+ let i = n ? [kc(n)] : Object.keys(e.files), a = [];
6099
6157
  for (let t of i) {
6100
6158
  let n = e.files[t];
6101
6159
  n && n.content.split("\n").forEach((e, n) => {
@@ -6112,7 +6170,7 @@ function Mc(e) {
6112
6170
  })
6113
6171
  }),
6114
6172
  r(async ({ path: t, jsonPath: n }) => {
6115
- let r = Oc(t), i = e.files[r];
6173
+ let r = kc(t), i = e.files[r];
6116
6174
  if (!i) return Y({
6117
6175
  code: "NOT_FOUND",
6118
6176
  path: t,
@@ -6149,7 +6207,7 @@ function Mc(e) {
6149
6207
  })
6150
6208
  }),
6151
6209
  r(async ({ path: t, patches: n }) => {
6152
- let r = Oc(t), i = e.files[r];
6210
+ let r = kc(t), i = e.files[r];
6153
6211
  if (!i) return Y({
6154
6212
  code: "NOT_FOUND",
6155
6213
  path: t,
@@ -6167,9 +6225,9 @@ function Mc(e) {
6167
6225
  hint: "vfs_json_patch 要求文件内容是合法 JSON"
6168
6226
  });
6169
6227
  }
6170
- let o = dc(a), s = [];
6228
+ let o = fc(a), s = [];
6171
6229
  for (let e of n) {
6172
- let n = gc(o, e.op, e.jsonPath, e.value);
6230
+ let n = _c(o, e.op, e.jsonPath, e.value);
6173
6231
  if (n) return Y({
6174
6232
  code: "PATCH_FAILED",
6175
6233
  path: t,
@@ -6182,7 +6240,7 @@ function Mc(e) {
6182
6240
  let c = JSON.stringify(o);
6183
6241
  return e.files[r] = {
6184
6242
  content: c,
6185
- updatedAt: Ac()
6243
+ updatedAt: jc()
6186
6244
  }, `已对 ${t} 应用 ${n.length} 个 patch(影响 ${s.length} 处:${s.join(", ")}),文件现 ${c.length} 字符`;
6187
6245
  }, {
6188
6246
  name: "vfs_json_patch",
@@ -6202,7 +6260,7 @@ function Mc(e) {
6202
6260
  })
6203
6261
  }),
6204
6262
  r(async ({ path: t }) => {
6205
- let n = Oc(t);
6263
+ let n = kc(t);
6206
6264
  return e.files[n] ? (delete e.files[n], `已删除 ${t}`) : Y({
6207
6265
  code: "NOT_FOUND",
6208
6266
  path: t,
@@ -6216,17 +6274,17 @@ function Mc(e) {
6216
6274
  })
6217
6275
  ];
6218
6276
  }
6219
- function Nc(e) {
6277
+ function Pc(e) {
6220
6278
  return {
6221
6279
  name: "vfs",
6222
- tools: Mc(e),
6280
+ tools: Nc(e),
6223
6281
  beforeAgent: () => ({ files: e.files })
6224
6282
  };
6225
6283
  }
6226
6284
  //#endregion
6227
6285
  //#region src/core/tools/dataSlotQuery.ts
6228
- var Pc = /[\w$-]/;
6229
- function Fc(e) {
6286
+ var Fc = /[\w$-]/;
6287
+ function Ic(e) {
6230
6288
  let t = [], n = e.trim(), r = +(n[0] === "$");
6231
6289
  for (; r < n.length;) {
6232
6290
  let e = n[r];
@@ -6237,7 +6295,7 @@ function Fc(e) {
6237
6295
  continue;
6238
6296
  }
6239
6297
  let e = "";
6240
- for (; r < n.length && Pc.test(n[r]);) e += n[r++];
6298
+ for (; r < n.length && Fc.test(n[r]);) e += n[r++];
6241
6299
  if (!e) throw Error("JSONPath: .. 后缺属性名");
6242
6300
  t.push({
6243
6301
  type: "descendKey",
@@ -6250,7 +6308,7 @@ function Fc(e) {
6250
6308
  continue;
6251
6309
  }
6252
6310
  let e = "";
6253
- for (; r < n.length && Pc.test(n[r]);) e += n[r++];
6311
+ for (; r < n.length && Fc.test(n[r]);) e += n[r++];
6254
6312
  if (!e) throw Error("JSONPath: . 后缺属性名");
6255
6313
  t.push({
6256
6314
  type: "key",
@@ -6306,7 +6364,7 @@ function Fc(e) {
6306
6364
  }
6307
6365
  return t;
6308
6366
  }
6309
- function Ic(e) {
6367
+ function Lc(e) {
6310
6368
  let t = [], n = 0, r = e.trim();
6311
6369
  for (; n < r.length;) {
6312
6370
  let e = r[n];
@@ -6351,7 +6409,7 @@ function Ic(e) {
6351
6409
  }
6352
6410
  return t;
6353
6411
  }
6354
- var Lc = class {
6412
+ var Rc = class {
6355
6413
  toks;
6356
6414
  item;
6357
6415
  pos = 0;
@@ -6387,12 +6445,12 @@ var Lc = class {
6387
6445
  return this.next(), e;
6388
6446
  }
6389
6447
  let e = this.operand(), t = this.peek();
6390
- return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(), Bc(t, e, this.operand())) : Rc(e);
6448
+ return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(), Vc(t, e, this.operand())) : zc(e);
6391
6449
  }
6392
6450
  operand() {
6393
6451
  let e = this.next();
6394
6452
  if (e === void 0) throw Error("过滤表达式:缺操作数");
6395
- if (e.startsWith("@")) return zc(e, this.item);
6453
+ if (e.startsWith("@")) return Bc(e, this.item);
6396
6454
  if (e[0] === "'" || e[0] === "\"") return e.slice(1, -1);
6397
6455
  if (e === "true") return !0;
6398
6456
  if (e === "false") return !1;
@@ -6402,10 +6460,10 @@ var Lc = class {
6402
6460
  throw Error(`过滤表达式:未知操作数 '${e}'`);
6403
6461
  }
6404
6462
  };
6405
- function Rc(e) {
6463
+ function zc(e) {
6406
6464
  return !!e && e !== 0 && e !== "" && e !== null;
6407
6465
  }
6408
- function zc(e, t) {
6466
+ function Bc(e, t) {
6409
6467
  let n = e.split(".").filter((e) => e && e !== "@"), r = t;
6410
6468
  for (let e of n) {
6411
6469
  if (typeof r != "object" || !r) return;
@@ -6413,7 +6471,7 @@ function zc(e, t) {
6413
6471
  }
6414
6472
  return r;
6415
6473
  }
6416
- function Bc(e, t, n) {
6474
+ function Vc(e, t, n) {
6417
6475
  switch (e) {
6418
6476
  case "==": return t === n;
6419
6477
  case "!=": return t !== n;
@@ -6424,47 +6482,47 @@ function Bc(e, t, n) {
6424
6482
  default: return !1;
6425
6483
  }
6426
6484
  }
6427
- function Vc(e, t) {
6428
- return new Lc(Ic(e), t).parse();
6429
- }
6430
6485
  function Hc(e, t) {
6431
- return e ? `${e}.${t}` : String(t);
6486
+ return new Rc(Lc(e), t).parse();
6432
6487
  }
6433
6488
  function Uc(e, t) {
6489
+ return e ? `${e}.${t}` : String(t);
6490
+ }
6491
+ function Wc(e, t) {
6434
6492
  let n = [{
6435
6493
  path: "",
6436
6494
  value: e
6437
6495
  }];
6438
- for (let e of Fc(t)) {
6496
+ for (let e of Ic(t)) {
6439
6497
  let t = [];
6440
6498
  if (e.type === "key") for (let r of n) r.value != null && typeof r.value == "object" && e.key in r.value && t.push({
6441
- path: Hc(r.path, e.key),
6499
+ path: Uc(r.path, e.key),
6442
6500
  value: r.value[e.key]
6443
6501
  });
6444
6502
  else if (e.type === "index") {
6445
6503
  for (let r of n) if (Array.isArray(r.value)) {
6446
6504
  let n = r.value[e.index];
6447
6505
  e.index >= 0 && e.index < r.value.length && t.push({
6448
- path: Hc(r.path, e.index),
6506
+ path: Uc(r.path, e.index),
6449
6507
  value: n,
6450
6508
  index: e.index
6451
6509
  });
6452
6510
  }
6453
6511
  } else if (e.type === "wildcard") {
6454
6512
  for (let e of n) if (Array.isArray(e.value)) e.value.forEach((n, r) => t.push({
6455
- path: Hc(e.path, r),
6513
+ path: Uc(e.path, r),
6456
6514
  value: n,
6457
6515
  index: r
6458
6516
  }));
6459
6517
  else if (e.value != null && typeof e.value == "object") for (let n of Object.keys(e.value)) t.push({
6460
- path: Hc(e.path, n),
6518
+ path: Uc(e.path, n),
6461
6519
  value: e.value[n]
6462
6520
  });
6463
6521
  } else if (e.type === "descendKey") {
6464
6522
  let r = e.key, i = (e) => {
6465
6523
  if (!(e.value == null || typeof e.value != "object")) for (let n of Object.keys(e.value)) {
6466
6524
  let a = {
6467
- path: Hc(e.path, n),
6525
+ path: Uc(e.path, n),
6468
6526
  value: e.value[n]
6469
6527
  };
6470
6528
  n === r && t.push(a), i(a);
@@ -6475,7 +6533,7 @@ function Uc(e, t) {
6475
6533
  let e = (n) => {
6476
6534
  if (!(n.value == null || typeof n.value != "object")) for (let r of Object.keys(n.value)) {
6477
6535
  let i = {
6478
- path: Hc(n.path, r),
6536
+ path: Uc(n.path, r),
6479
6537
  value: n.value[r]
6480
6538
  };
6481
6539
  t.push(i), e(i);
@@ -6484,16 +6542,16 @@ function Uc(e, t) {
6484
6542
  for (let t of n) e(t);
6485
6543
  } else if (e.type === "filter") {
6486
6544
  for (let r of n) if (Array.isArray(r.value)) r.value.forEach((n, i) => {
6487
- Vc(e.filter, n) && t.push({
6488
- path: Hc(r.path, i),
6545
+ Hc(e.filter, n) && t.push({
6546
+ path: Uc(r.path, i),
6489
6547
  value: n,
6490
6548
  index: i
6491
6549
  });
6492
6550
  });
6493
6551
  else if (r.value != null && typeof r.value == "object") for (let n of Object.keys(r.value)) {
6494
6552
  let i = r.value[n];
6495
- Vc(e.filter, i) && t.push({
6496
- path: Hc(r.path, n),
6553
+ Hc(e.filter, i) && t.push({
6554
+ path: Uc(r.path, n),
6497
6555
  value: i
6498
6556
  });
6499
6557
  }
@@ -6502,7 +6560,7 @@ function Uc(e, t) {
6502
6560
  }
6503
6561
  return n;
6504
6562
  }
6505
- function Wc(e, t) {
6563
+ function Gc(e, t) {
6506
6564
  let n = e.length, r = t.length;
6507
6565
  if (!n) return r;
6508
6566
  if (!r) return n;
@@ -6518,7 +6576,7 @@ function Wc(e, t) {
6518
6576
  }
6519
6577
  return i[r];
6520
6578
  }
6521
- function Gc(e, t, n = {}) {
6579
+ function Kc(e, t, n = {}) {
6522
6580
  let r = n.mode || "substring", i = n.limit ?? 50, a = n.matchKey !== !1, o = [], s = null;
6523
6581
  if (r === "regex") try {
6524
6582
  s = new RegExp(t, "i");
@@ -6528,11 +6586,11 @@ function Gc(e, t, n = {}) {
6528
6586
  let c = (e, l, u) => {
6529
6587
  if (o.length >= i || e == null) return;
6530
6588
  if (typeof e == "object") {
6531
- if (Array.isArray(e)) e.forEach((e, t) => c(e, Hc(l, t), String(t)));
6532
- else for (let t of Object.keys(e)) c(e[t], Hc(l, t), t);
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);
6533
6591
  return;
6534
6592
  }
6535
- let d = String(e), f = Kc(d, t, r, n.fuzzyThreshold ?? 2, s);
6593
+ let d = String(e), f = qc(d, t, r, n.fuzzyThreshold ?? 2, s);
6536
6594
  if (f) {
6537
6595
  o.push({
6538
6596
  path: l,
@@ -6543,7 +6601,7 @@ function Gc(e, t, n = {}) {
6543
6601
  return;
6544
6602
  }
6545
6603
  if (a && u) {
6546
- let e = Kc(u, t, r, n.fuzzyThreshold ?? 2, s);
6604
+ let e = qc(u, t, r, n.fuzzyThreshold ?? 2, s);
6547
6605
  e && o.push({
6548
6606
  path: l,
6549
6607
  key: u,
@@ -6554,51 +6612,51 @@ function Gc(e, t, n = {}) {
6554
6612
  };
6555
6613
  return c(e, ""), o;
6556
6614
  }
6557
- function Kc(e, t, n, r, i) {
6615
+ function qc(e, t, n, r, i) {
6558
6616
  let a = e.toLowerCase(), o = t.toLowerCase();
6559
6617
  if (n === "substring") return a.includes(o) ? 1 : null;
6560
6618
  if (n === "regex") return i && i.test(e) ? 1 : null;
6561
6619
  if (n === "fuzzy") {
6562
6620
  if (a.includes(o)) return 2;
6563
- let e = Wc(a, o);
6621
+ let e = Gc(a, o);
6564
6622
  return e <= r ? r - e + 1 : null;
6565
6623
  }
6566
6624
  return null;
6567
6625
  }
6568
- function qc(e, t, n = 3e3) {
6626
+ function Jc(e, t, n = 3e3) {
6569
6627
  return ba(t, n)(e);
6570
6628
  }
6571
6629
  //#endregion
6572
6630
  //#region src/core/tools/resources.ts
6573
- var Jc = "⟦frozen:", Yc = "⟦res:", Xc = "⟧";
6574
- function Zc(e) {
6575
- return `${Jc}${e}${Xc}`;
6576
- }
6631
+ var Yc = "⟦frozen:", Xc = "⟦res:", Zc = "⟧";
6577
6632
  function Qc(e) {
6578
- return `${Yc}${e}${Xc}`;
6633
+ return `${Yc}${e}${Zc}`;
6579
6634
  }
6580
6635
  function $c(e) {
6581
- return typeof e == "string" ? e.startsWith(Jc) && e.endsWith(Xc) ? {
6636
+ return `${Xc}${e}${Zc}`;
6637
+ }
6638
+ function el(e) {
6639
+ return typeof e == "string" ? e.startsWith(Yc) && e.endsWith(Zc) ? {
6582
6640
  type: "frozen",
6583
6641
  path: e.slice(8, e.length - 1)
6584
- } : e.startsWith(Yc) && e.endsWith(Xc) ? {
6642
+ } : e.startsWith(Xc) && e.endsWith(Zc) ? {
6585
6643
  type: "res",
6586
6644
  handle: e.slice(5, e.length - 1)
6587
6645
  } : null : null;
6588
6646
  }
6589
- function el(e) {
6647
+ function tl(e) {
6590
6648
  return String(e ?? "").trim().replace(/^\.+/, "");
6591
6649
  }
6592
- function tl(e) {
6650
+ function nl(e) {
6593
6651
  let t = 5381;
6594
6652
  for (let n = 0; n < e.length; n++) t = (t * 33 ^ e.charCodeAt(n)) >>> 0;
6595
6653
  return (t >>> 0).toString(16).padStart(8, "0").slice(0, 8);
6596
6654
  }
6597
- function nl(e, t) {
6655
+ function rl(e, t) {
6598
6656
  return e === t ? !0 : e && t && typeof e == "object" && typeof t == "object" ? JSON.stringify(e) === JSON.stringify(t) : !1;
6599
6657
  }
6600
- function rl(e, t) {
6601
- let n = el(e);
6658
+ function il(e, t) {
6659
+ let n = tl(e);
6602
6660
  if (!n) return;
6603
6661
  let r = t.get(n);
6604
6662
  if (r) return {
@@ -6618,7 +6676,7 @@ function rl(e, t) {
6618
6676
  }));
6619
6677
  return i;
6620
6678
  }
6621
- var il = class {
6679
+ var al = class {
6622
6680
  vfs;
6623
6681
  constructor(e) {
6624
6682
  this.vfs = e;
@@ -6627,7 +6685,7 @@ var il = class {
6627
6685
  return `resources/${e}.json`;
6628
6686
  }
6629
6687
  ensure(e, t, n) {
6630
- let r = tl(e), i = {
6688
+ let r = nl(e), i = {
6631
6689
  path: e,
6632
6690
  mode: n,
6633
6691
  value: t,
@@ -6639,7 +6697,7 @@ var il = class {
6639
6697
  }, r;
6640
6698
  }
6641
6699
  get(e) {
6642
- return this.readEntry(this.key(e)) || this.readEntry(this.key(tl(e)));
6700
+ return this.readEntry(this.key(e)) || this.readEntry(this.key(nl(e)));
6643
6701
  }
6644
6702
  readEntry(e) {
6645
6703
  let t = this.vfs.files[e];
@@ -6655,7 +6713,7 @@ var il = class {
6655
6713
  this.ensure(e, t, n?.mode ?? "verbatim");
6656
6714
  }
6657
6715
  delete(e) {
6658
- let t = this.get(e)?.handle ?? tl(e), n = this.key(t), r = !!this.vfs.files[n];
6716
+ let t = this.get(e)?.handle ?? nl(e), n = this.key(t), r = !!this.vfs.files[n];
6659
6717
  return r && delete this.vfs.files[n], r;
6660
6718
  }
6661
6719
  list() {
@@ -6675,7 +6733,7 @@ var il = class {
6675
6733
  for (let e of Object.keys(this.vfs.files)) e.startsWith("resources/") && delete this.vfs.files[e];
6676
6734
  }
6677
6735
  };
6678
- function al(e) {
6736
+ function ol(e) {
6679
6737
  let { jp: t, resolved: n, resourcesByPath: r, resourceStore: i } = e;
6680
6738
  if (!r.size) return n;
6681
6739
  let a = !1;
@@ -6684,19 +6742,19 @@ function al(e) {
6684
6742
  break;
6685
6743
  }
6686
6744
  if (!a) return n;
6687
- let o = dc(n);
6745
+ let o = fc(n);
6688
6746
  for (let [e, n] of r) {
6689
6747
  if (t !== "" && e !== t && !e.startsWith(t + ".")) continue;
6690
6748
  if (e === t) {
6691
6749
  if (o === void 0) continue;
6692
- return n.mode === "freeze" ? Zc(e) : i ? Qc(i.ensure(e, o, "verbatim")) : o;
6750
+ return n.mode === "freeze" ? Qc(e) : i ? $c(i.ensure(e, o, "verbatim")) : o;
6693
6751
  }
6694
6752
  let r = t === "" ? e : e.slice(t.length + 1), a = Z(o, r);
6695
- a !== void 0 && (n.mode === "freeze" ? lc(o, r, Zc(e)) : i && lc(o, r, Qc(i.ensure(e, a, "verbatim"))));
6753
+ a !== void 0 && (n.mode === "freeze" ? uc(o, r, Qc(e)) : i && uc(o, r, $c(i.ensure(e, a, "verbatim"))));
6696
6754
  }
6697
6755
  return o;
6698
6756
  }
6699
- function ol(e, t, n, r) {
6757
+ function sl(e, t, n, r) {
6700
6758
  if (!r) return {
6701
6759
  code: "RESOURCE_NOT_FOUND",
6702
6760
  message: `句柄 "${e}" 无法展开(资源池未启用)`,
@@ -6707,7 +6765,7 @@ function ol(e, t, n, r) {
6707
6765
  code: "RESOURCE_NOT_FOUND",
6708
6766
  message: `字段 "${t}" 在 bind 中已不存在,无法展开句柄 "${e}"`,
6709
6767
  hint: "该字段可能已被删除或 restore 到不含此字段的快照;重新 read 确认当前结构"
6710
- } : nl(i.value, n) ? { value: i.value } : (r.update(t, n), { value: n }) : n === void 0 ? {
6768
+ } : rl(i.value, n) ? { value: i.value } : (r.update(t, n), { value: n }) : n === void 0 ? {
6711
6769
  code: "RESOURCE_NOT_FOUND",
6712
6770
  message: `句柄 "${e}" 不存在(字段 "${t}" 可能未注册或已被删除)`,
6713
6771
  hint: "重新 read 该字段触发懒注册"
@@ -6717,20 +6775,20 @@ function ol(e, t, n, r) {
6717
6775
  hint: "重新 read 该字段触发懒注册重建句柄,再写回新句柄 ⟦res:<handle>⟧"
6718
6776
  };
6719
6777
  }
6720
- function sl(e, t) {
6778
+ function cl(e, t) {
6721
6779
  let n = t.getBind();
6722
6780
  for (let [r, i] of t.resourcesByPath) {
6723
6781
  let a = Z(n, r), o = Z(e, r);
6724
6782
  if (o === void 0) {
6725
- a !== void 0 && lc(e, r, a);
6783
+ a !== void 0 && uc(e, r, a);
6726
6784
  continue;
6727
6785
  }
6728
6786
  if (i.mode === "freeze") {
6729
- if (o === Zc(r)) {
6730
- lc(e, r, a);
6787
+ if (o === Qc(r)) {
6788
+ uc(e, r, a);
6731
6789
  continue;
6732
6790
  }
6733
- if (!nl(o, a)) return {
6791
+ if (!rl(o, a)) return {
6734
6792
  ok: !1,
6735
6793
  code: "FROZEN_FIELD",
6736
6794
  path: r,
@@ -6738,11 +6796,11 @@ function sl(e, t) {
6738
6796
  hint: "该字段由系统/集成方维护,LLM 不得改动。如需展示其值用 resource_get({path}) 取真值"
6739
6797
  };
6740
6798
  } else {
6741
- let n = $c(o);
6799
+ let n = el(o);
6742
6800
  if (n && n.type === "res") {
6743
- let i = ol(n.handle, r, a, t.resourceStore);
6801
+ let i = sl(n.handle, r, a, t.resourceStore);
6744
6802
  if ("value" in i) {
6745
- lc(e, r, i.value);
6803
+ uc(e, r, i.value);
6746
6804
  continue;
6747
6805
  }
6748
6806
  return {
@@ -6753,7 +6811,7 @@ function sl(e, t) {
6753
6811
  hint: i.hint
6754
6812
  };
6755
6813
  }
6756
- if (!nl(o, a)) return {
6814
+ if (!rl(o, a)) return {
6757
6815
  ok: !1,
6758
6816
  code: "VERBATIM_MISMATCH",
6759
6817
  path: r,
@@ -6764,7 +6822,7 @@ function sl(e, t) {
6764
6822
  }
6765
6823
  return { ok: !0 };
6766
6824
  }
6767
- function cl(e, t, n) {
6825
+ function ll(e, t, n) {
6768
6826
  let r = t === void 0 ? e.message : `patches[${t}]${n ? ` @ "${n}"` : ""}: ${e.message}`;
6769
6827
  return Y({
6770
6828
  code: e.code,
@@ -6777,28 +6835,28 @@ function cl(e, t, n) {
6777
6835
  } }
6778
6836
  });
6779
6837
  }
6780
- function ll(e) {
6838
+ function ul(e) {
6781
6839
  let { value: t, ctx: n } = e;
6782
6840
  if (!n || !n.resourcesByPath.size) return {
6783
6841
  ok: !0,
6784
6842
  value: t
6785
6843
  };
6786
- let r = dc(t), i = sl(r, n);
6844
+ let r = fc(t), i = cl(r, n);
6787
6845
  return i.ok ? {
6788
6846
  ok: !0,
6789
6847
  value: r
6790
6848
  } : {
6791
6849
  ok: !1,
6792
- error: cl(i)
6850
+ error: ll(i)
6793
6851
  };
6794
6852
  }
6795
- function ul(e) {
6853
+ function dl(e) {
6796
6854
  let { patches: t, clone: n, ctx: r } = e;
6797
6855
  if (!r || !r.resourcesByPath.size) return { ok: !0 };
6798
6856
  for (let e = 0; e < t.length; e++) {
6799
6857
  let n = t[e];
6800
6858
  if (n.op === "remove") {
6801
- let t = rl(n.jsonPath || "", r.resourcesByPath);
6859
+ let t = il(n.jsonPath || "", r.resourcesByPath);
6802
6860
  if (t) {
6803
6861
  let r = t.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED", i = t.spec.mode === "freeze" ? "冻结字段不可删。如需移除请联系集成方调整 data.resources 配置" : "verbatim 字段不可直接删;先 resource_delete({path}) 释放资源保护后再删";
6804
6862
  return {
@@ -6817,27 +6875,27 @@ function ul(e) {
6817
6875
  }
6818
6876
  }
6819
6877
  }
6820
- let i = sl(n, r);
6878
+ let i = cl(n, r);
6821
6879
  if (!i.ok) {
6822
- let e = dl(i.path, t);
6880
+ let e = fl(i.path, t);
6823
6881
  return {
6824
6882
  ok: !1,
6825
- error: cl(i, e >= 0 ? e : void 0, e >= 0 ? t[e].jsonPath : void 0)
6883
+ error: ll(i, e >= 0 ? e : void 0, e >= 0 ? t[e].jsonPath : void 0)
6826
6884
  };
6827
6885
  }
6828
6886
  return { ok: !0 };
6829
6887
  }
6830
- function dl(e, t) {
6831
- let n = el(e);
6888
+ function fl(e, t) {
6889
+ let n = tl(e);
6832
6890
  for (let e = 0; e < t.length; e++) {
6833
- let r = el(t[e].jsonPath || "");
6891
+ let r = tl(t[e].jsonPath || "");
6834
6892
  if (r && (r === n || n.startsWith(r + ".") || r.startsWith(n + "."))) return e;
6835
6893
  }
6836
6894
  return -1;
6837
6895
  }
6838
6896
  //#endregion
6839
6897
  //#region src/core/tools/dataOps.ts
6840
- var fl = /* @__PURE__ */ new Set([
6898
+ var pl = /* @__PURE__ */ new Set([
6841
6899
  "describe_data",
6842
6900
  "get_data",
6843
6901
  "set_data",
@@ -6851,14 +6909,14 @@ var fl = /* @__PURE__ */ new Set([
6851
6909
  "resource_update",
6852
6910
  "resource_list",
6853
6911
  "resource_delete"
6854
- ]), pl = /* @__PURE__ */ new Set(["read", "write"]);
6855
- function ml(e, t = "simple") {
6856
- return t === "advanced" ? e : t === "minimal" ? e.filter((e) => pl.has(e.name)) : e.filter((e) => !fl.has(e.name));
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));
6857
6915
  }
6858
- function hl(e) {
6916
+ function gl(e) {
6859
6917
  let { bindRef: t, schema: n, allowKeys: r, snapshots: i, maxSnapshots: a, audit: o, dryRun: s, op: c = "set", protectedCtx: l } = e, u = e.value;
6860
6918
  if (l) {
6861
- let e = ll({
6919
+ let e = ul({
6862
6920
  value: u,
6863
6921
  ctx: l
6864
6922
  });
@@ -6886,14 +6944,14 @@ function hl(e) {
6886
6944
  hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹(如 {value:\"x\"})或集成方通过 sdk.setData 替换 bind"
6887
6945
  })
6888
6946
  };
6889
- let f = dc(t), p = i.length ? i[i.length - 1].id + 1 : 1;
6947
+ let f = fc(t), p = i.length ? i[i.length - 1].id + 1 : 1;
6890
6948
  for (i.push({
6891
6949
  id: p,
6892
6950
  ts: Date.now(),
6893
6951
  op: c,
6894
6952
  value: f
6895
6953
  }); i.length > a;) i.shift();
6896
- return d.data !== null && typeof d.data == "object" && (r ? cc(t, d.data) : yc(t, d.data)), o({
6954
+ return d.data !== null && typeof d.data == "object" && (r ? lc(t, d.data) : bc(t, d.data)), o({
6897
6955
  op: c,
6898
6956
  value: d.data,
6899
6957
  timestamp: Date.now()
@@ -6903,11 +6961,11 @@ function hl(e) {
6903
6961
  data: d.data
6904
6962
  };
6905
6963
  }
6906
- function gl(e) {
6907
- 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 = dc(t), p = [];
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 = [];
6908
6966
  for (let e = 0; e < n.length; e++) {
6909
6967
  let t = n[e], a = t.jsonPath || "";
6910
- if (sc(a)) return {
6968
+ if (cc(a)) return {
6911
6969
  ok: !1,
6912
6970
  error: Y({
6913
6971
  code: "PATH_UNSAFE",
@@ -6933,14 +6991,14 @@ function gl(e) {
6933
6991
  hint: `op 为 ${o} 时 value 必填;删除请用 op:'remove'`
6934
6992
  })
6935
6993
  };
6936
- let n = fc(t.value);
6994
+ let n = pc(t.value);
6937
6995
  if (n.parseError) return {
6938
6996
  ok: !1,
6939
6997
  error: Gr(`patches[${e}]`, t.value, n.parseError)
6940
6998
  };
6941
6999
  s = n.parsed;
6942
7000
  }
6943
- let c = gc(f, o, a, s);
7001
+ let c = _c(f, o, a, s);
6944
7002
  if (c) return {
6945
7003
  ok: !1,
6946
7004
  error: Y({
@@ -6956,7 +7014,7 @@ function gl(e) {
6956
7014
  });
6957
7015
  }
6958
7016
  if (d) {
6959
- let e = ul({
7017
+ let e = dl({
6960
7018
  patches: n,
6961
7019
  clone: f,
6962
7020
  ctx: d
@@ -6986,21 +7044,21 @@ function gl(e) {
6986
7044
  id: h,
6987
7045
  ts: Date.now(),
6988
7046
  op: "edit",
6989
- value: dc(t),
7047
+ value: fc(t),
6990
7048
  ...l ? { label: l } : {}
6991
7049
  }); a.length > o;) a.shift();
6992
- for (let e of p) e.op === "remove" && uc(t, e.jp);
6993
- return m.data !== null && typeof m.data == "object" && (i ? cc(t, m.data) : yc(t, m.data)), s?.(), {
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?.(), {
6994
7052
  ok: !0,
6995
7053
  applied: p,
6996
7054
  clone: f
6997
7055
  };
6998
7056
  }
6999
- function _l(e, n = {}) {
7000
- let i = e.schema, a = e.bind, o = e.description ?? "主数据对象", s = Mi(i), c = /* @__PURE__ */ new Map(), l = n.vfsStore ? new il(n.vfsStore) : void 0;
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;
7001
7059
  function u(e) {
7002
7060
  if (c.clear(), e) for (let t of e) {
7003
- let e = el(t.path);
7061
+ let e = tl(t.path);
7004
7062
  c.set(e, {
7005
7063
  path: e,
7006
7064
  mode: t.mode
@@ -7052,7 +7110,7 @@ function _l(e, n = {}) {
7052
7110
  return e;
7053
7111
  },
7054
7112
  createResource: l ? (e, t) => {
7055
- let n = el(e), r = c.get(n), i = t === void 0 ? Z(a, n) : t;
7113
+ let n = tl(e), r = c.get(n), i = t === void 0 ? Z(a, n) : t;
7056
7114
  return l.ensure(n, i, r?.mode ?? "verbatim");
7057
7115
  } : void 0,
7058
7116
  getResource: l ? (e) => {
@@ -7065,8 +7123,8 @@ function _l(e, n = {}) {
7065
7123
  } : void 0;
7066
7124
  } : void 0,
7067
7125
  updateResource: l ? (e, t) => {
7068
- let n = el(e);
7069
- l.update(n, t), lc(a, n, t), _();
7126
+ let n = tl(e);
7127
+ l.update(n, t), uc(a, n, t), _();
7070
7128
  } : void 0,
7071
7129
  deleteResource: l ? (e) => l.delete(e) : void 0,
7072
7130
  listResources: l ? () => l.list() : void 0
@@ -7074,7 +7132,7 @@ function _l(e, n = {}) {
7074
7132
  n.onAudit?.(e);
7075
7133
  };
7076
7134
  function b(e, t) {
7077
- let n = dc(a), r = f.length ? f[f.length - 1].id + 1 : 1;
7135
+ let n = fc(a), r = f.length ? f[f.length - 1].id + 1 : 1;
7078
7136
  for (f.push({
7079
7137
  id: r,
7080
7138
  ts: Date.now(),
@@ -7105,7 +7163,7 @@ function _l(e, n = {}) {
7105
7163
  if (o.action === "restore") {
7106
7164
  if (!f.length) return `无历史快照可回退(本次为首次操作)。当前值:${Q(a, 400)} (hash=${i})。请重新 read 再改或选「强制覆盖」。`;
7107
7165
  let e = f[f.length - 1];
7108
- return vc(a, dc(e.value)), _(), `已回退主数据到历史快照 #${e.id}[${e.op}]。当前值:${Q(a, 400)} (hash=${$(a)})。请基于回退后的值重写或停止。`;
7166
+ return yc(a, fc(e.value)), _(), `已回退主数据到历史快照 #${e.id}[${e.op}]。当前值:${Q(a, 400)} (hash=${$(a)})。请基于回退后的值重写或停止。`;
7109
7167
  }
7110
7168
  return null;
7111
7169
  }
@@ -7115,7 +7173,7 @@ function _l(e, n = {}) {
7115
7173
  schema: t.object({})
7116
7174
  }), C = r(async ({ jsonPath: e }) => {
7117
7175
  let t = e || "";
7118
- if (sc(t)) return Y({
7176
+ if (cc(t)) return Y({
7119
7177
  code: "PATH_UNSAFE",
7120
7178
  message: `jsonPath "${t}" 含非法段(__proto__/constructor/prototype)`,
7121
7179
  hint: "使用正常属性路径,如 components.0.text(数组索引用数字)"
@@ -7126,7 +7184,7 @@ function _l(e, n = {}) {
7126
7184
  hint: "主数据仅暴露 schema 声明的字段;若需操作该字段,集成方需在 schema 中声明它"
7127
7185
  });
7128
7186
  let n = t ? Z(a, t) : a;
7129
- t || (n = Li(n, s)), d && (n = al({
7187
+ t || (n = Li(n, s)), d && (n = ol({
7130
7188
  jp: t,
7131
7189
  resolved: n,
7132
7190
  resourcesByPath: d.resourcesByPath,
@@ -7141,9 +7199,9 @@ function _l(e, n = {}) {
7141
7199
  }), w = r(async ({ value: e, expectedHash: t }) => {
7142
7200
  let n = await x("set", t || (h ? m : void 0));
7143
7201
  if (n !== null) return n;
7144
- let r = fc(e);
7202
+ let r = pc(e);
7145
7203
  if (r.parseError) return Gr("", e, r.parseError);
7146
- let o = hl({
7204
+ let o = gl({
7147
7205
  bindRef: a,
7148
7206
  value: r.parsed,
7149
7207
  schema: i,
@@ -7170,7 +7228,7 @@ function _l(e, n = {}) {
7170
7228
  hint: "顶层 op 或 patch.op 至少传一个"
7171
7229
  });
7172
7230
  let c = n || "";
7173
- if (sc(c)) return Y({
7231
+ if (cc(c)) return Y({
7174
7232
  code: "PATH_UNSAFE",
7175
7233
  message: `jsonPath "${c}" 含非法段(__proto__/constructor/prototype)`,
7176
7234
  hint: "使用正常的属性路径,如 components.0.text(数组索引用数字)"
@@ -7187,7 +7245,7 @@ function _l(e, n = {}) {
7187
7245
  message: `edit 仅适用于对象/数组主数据,当前是 ${a === void 0 ? "undefined" : typeof a}`,
7188
7246
  hint: "叶子(原始类型)请用 set_data 整体设置"
7189
7247
  });
7190
- let u = gl({
7248
+ let u = _l({
7191
7249
  bindRef: a,
7192
7250
  patches: [{
7193
7251
  op: t,
@@ -7240,7 +7298,7 @@ function _l(e, n = {}) {
7240
7298
  message: "delete_data 需要 jsonPath 指定要删的子路径(主数据整体不可删,用 set_data 整体替换)",
7241
7299
  hint: "如 jsonPath:\"components.0\" 删数组首项"
7242
7300
  });
7243
- if (sc(e)) return Y({
7301
+ if (cc(e)) return Y({
7244
7302
  code: "PATH_UNSAFE",
7245
7303
  message: `jsonPath "${e}" 含非法段`,
7246
7304
  hint: "使用正常属性路径"
@@ -7251,7 +7309,7 @@ function _l(e, n = {}) {
7251
7309
  hint: "仅 schema 声明的 key 可删"
7252
7310
  });
7253
7311
  if (d) {
7254
- let t = rl(e, d.resourcesByPath);
7312
+ let t = il(e, d.resourcesByPath);
7255
7313
  if (t) return Y({
7256
7314
  code: t.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED",
7257
7315
  message: `delete_data @ "${e}" 命中受保护字段 "${t.protectedPath}"(${t.spec.mode}),不可删除`,
@@ -7261,7 +7319,7 @@ function _l(e, n = {}) {
7261
7319
  let n = await x("delete", t || (h ? m : void 0));
7262
7320
  if (n !== null) return n;
7263
7321
  b("delete");
7264
- let r = uc(a, e);
7322
+ let r = dc(a, e);
7265
7323
  return _(), y({
7266
7324
  op: "delete",
7267
7325
  detail: e,
@@ -7287,7 +7345,7 @@ function _l(e, n = {}) {
7287
7345
  hint: "用 history_data({list:true}) 查看可用快照序号"
7288
7346
  });
7289
7347
  let n = i.safeParse(t.value);
7290
- return n.success ? (vc(a, dc(t.value)), _(), y({
7348
+ return n.success ? (yc(a, fc(t.value)), _(), y({
7291
7349
  op: "restore",
7292
7350
  detail: `#${t.id}`,
7293
7351
  timestamp: Date.now()
@@ -7321,9 +7379,9 @@ function _l(e, n = {}) {
7321
7379
  message: `未找到快照 #${e}`,
7322
7380
  hint: "不传 id 查看最近一次;或 history_data({list:true}) 查看可用序号"
7323
7381
  });
7324
- let a = dc(r.value), o = t || "";
7382
+ let a = fc(r.value), o = t || "";
7325
7383
  if (o) {
7326
- if (sc(o)) return Y({
7384
+ if (cc(o)) return Y({
7327
7385
  code: "PATH_UNSAFE",
7328
7386
  message: `jsonPath "${o}" 含非法段`,
7329
7387
  hint: "使用正常属性路径"
@@ -7354,7 +7412,7 @@ function _l(e, n = {}) {
7354
7412
  });
7355
7413
  let n = s ? Li(a, s) : a, r;
7356
7414
  try {
7357
- r = Uc(n, e);
7415
+ r = Wc(n, e);
7358
7416
  } catch (t) {
7359
7417
  return Y({
7360
7418
  code: "JSONPATH_SYNTAX",
@@ -7378,7 +7436,7 @@ function _l(e, n = {}) {
7378
7436
  message: "主数据为空,无可搜索内容"
7379
7437
  });
7380
7438
  try {
7381
- let o = Gc(s ? Li(a, s) : a, e, {
7439
+ let o = Kc(s ? Li(a, s) : a, e, {
7382
7440
  mode: t,
7383
7441
  fuzzyThreshold: n,
7384
7442
  matchKey: r,
@@ -7428,7 +7486,7 @@ function _l(e, n = {}) {
7428
7486
  e && (o = Ii(o, e));
7429
7487
  }
7430
7488
  } else o = s ? Li(a, s) : a;
7431
- let c = dc(o), l = await qc(c, e, r && JSON.stringify(c).length > 1e5 ? 8e3 : 3e3);
7489
+ let c = fc(o), l = await Jc(c, e, r && JSON.stringify(c).length > 1e5 ? 8e3 : 3e3);
7432
7490
  if (!l.ok) {
7433
7491
  let t = /超时/.test(l.error || "");
7434
7492
  return Y({
@@ -7444,7 +7502,7 @@ function _l(e, n = {}) {
7444
7502
  if (t === "transform") {
7445
7503
  let e = l.result;
7446
7504
  if (r) {
7447
- let t = gl({
7505
+ let t = _l({
7448
7506
  bindRef: a,
7449
7507
  patches: [{
7450
7508
  op: "set",
@@ -7472,7 +7530,7 @@ function _l(e, n = {}) {
7472
7530
  message: `主数据 bind 为原始类型(${a === null ? "null" : typeof a}),eval transform(patches) 无法就地替换`,
7473
7531
  hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹或集成方通过 sdk.setData 替换 bind"
7474
7532
  });
7475
- let t = gl({
7533
+ let t = _l({
7476
7534
  bindRef: a,
7477
7535
  patches: e.patches,
7478
7536
  schema: i,
@@ -7492,7 +7550,7 @@ function _l(e, n = {}) {
7492
7550
  }
7493
7551
  let t = e;
7494
7552
  if (d) {
7495
- let e = ll({
7553
+ let e = ul({
7496
7554
  value: t,
7497
7555
  ctx: d
7498
7556
  });
@@ -7504,7 +7562,7 @@ function _l(e, n = {}) {
7504
7562
  code: "LEAF_BIND",
7505
7563
  message: `主数据 bind 为原始类型(${a === null ? "null" : typeof a}),eval transform 无法就地替换外部持有的值引用`,
7506
7564
  hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹或集成方通过 sdk.setData 替换 bind"
7507
- }) : (b("edit", "eval_transform"), n.data !== null && typeof n.data == "object" && (s ? cc(a, n.data) : yc(a, n.data)), _(), y({
7565
+ }) : (b("edit", "eval_transform"), n.data !== null && typeof n.data == "object" && (s ? lc(a, n.data) : bc(a, n.data)), _(), y({
7508
7566
  op: "edit",
7509
7567
  detail: "eval_transform",
7510
7568
  timestamp: Date.now()
@@ -7541,7 +7599,7 @@ function _l(e, n = {}) {
7541
7599
  e && (o = Ii(o, e));
7542
7600
  }
7543
7601
  let l = o;
7544
- if (d && (l = al({
7602
+ if (d && (l = ol({
7545
7603
  jp: t,
7546
7604
  resolved: l,
7547
7605
  resourcesByPath: d.resourcesByPath,
@@ -7551,12 +7609,12 @@ function _l(e, n = {}) {
7551
7609
  } catch (e) {
7552
7610
  return `- ${t}: [READ_INTERCEPT: ${e.message}]`;
7553
7611
  }
7554
- return r && r.length && (l = pc(l, r)), c != null && (l = mc(l, c)), l === void 0 ? `- ${t} = (undefined)` : `- ${t} = ${Q(l)}`;
7612
+ return r && r.length && (l = mc(l, r)), c != null && (l = hc(l, c)), l === void 0 ? `- ${t} = (undefined)` : `- ${t} = ${Q(l)}`;
7555
7613
  });
7556
7614
  return `多路径读取(共 ${t.length} 项,hash=${f}):\n${e.join("\n")}`;
7557
7615
  }
7558
7616
  let p = e || "";
7559
- if (sc(p)) return Y({
7617
+ if (cc(p)) return Y({
7560
7618
  code: "PATH_UNSAFE",
7561
7619
  message: `jsonPath "${p}" 含非法段(__proto__/constructor/prototype)`,
7562
7620
  hint: "使用正常属性路径,如 components.0.text(数组索引数字)"
@@ -7573,7 +7631,7 @@ function _l(e, n = {}) {
7573
7631
  e && (h = Ii(h, e));
7574
7632
  }
7575
7633
  let g = h;
7576
- if (d && (g = al({
7634
+ if (d && (g = ol({
7577
7635
  jp: p,
7578
7636
  resolved: g,
7579
7637
  resourcesByPath: d.resourcesByPath,
@@ -7586,7 +7644,7 @@ function _l(e, n = {}) {
7586
7644
  message: `read 拦截器抛错: ${e.message}`
7587
7645
  });
7588
7646
  }
7589
- r && r.length && (g = pc(g, r)), c != null && (g = mc(g, c));
7647
+ r && r.length && (g = mc(g, r)), c != null && (g = hc(g, c));
7590
7648
  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}` : "";
7591
7649
  if ((l !== void 0 || u !== void 0) && Array.isArray(g)) {
7592
7650
  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;
@@ -7648,7 +7706,7 @@ function _l(e, n = {}) {
7648
7706
  message: "delete 需要 patch.jsonPath 指定要删的子路径(主数据整体不可删,用 write(value) 整体替换)",
7649
7707
  hint: "如 patch:{jsonPath:\"components.0\"}, del:true"
7650
7708
  });
7651
- if (sc(t.jsonPath)) return Y({
7709
+ if (cc(t.jsonPath)) return Y({
7652
7710
  code: "PATH_UNSAFE",
7653
7711
  message: `jsonPath "${t.jsonPath}" 含非法段`,
7654
7712
  hint: "使用正常属性路径"
@@ -7659,7 +7717,7 @@ function _l(e, n = {}) {
7659
7717
  hint: "仅 schema 声明的 key 可删"
7660
7718
  });
7661
7719
  if (d) {
7662
- let e = rl(t.jsonPath, d.resourcesByPath);
7720
+ let e = il(t.jsonPath, d.resourcesByPath);
7663
7721
  if (e) return Y({
7664
7722
  code: e.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED",
7665
7723
  message: `write delete @ "${t.jsonPath}" 命中受保护字段 "${e.protectedPath}"(${e.spec.mode}),不可删除`,
@@ -7669,11 +7727,11 @@ function _l(e, n = {}) {
7669
7727
  let e = await x("delete", v);
7670
7728
  if (e !== null) return e;
7671
7729
  if (c) {
7672
- let e = dc(a);
7673
- return uc(e, t.jsonPath) ? `dryRun(delete): 将删除 @ ${t.jsonPath}。预览剩余:${Q(e, 600)}。未实际写入、未入快照。` : `dryRun(delete): @ ${t.jsonPath} 不存在(无需删除)。未实际写入。`;
7730
+ let e = fc(a);
7731
+ return dc(e, t.jsonPath) ? `dryRun(delete): 将删除 @ ${t.jsonPath}。预览剩余:${Q(e, 600)}。未实际写入、未入快照。` : `dryRun(delete): @ ${t.jsonPath} 不存在(无需删除)。未实际写入。`;
7674
7732
  }
7675
7733
  b("delete");
7676
- let n = uc(a, t.jsonPath);
7734
+ let n = dc(a, t.jsonPath);
7677
7735
  return _(), y({
7678
7736
  op: "delete",
7679
7737
  detail: t.jsonPath,
@@ -7692,7 +7750,7 @@ function _l(e, n = {}) {
7692
7750
  op: t.op ?? "set",
7693
7751
  jsonPath: t.jsonPath || "",
7694
7752
  value: u
7695
- }]), o = gl({
7753
+ }]), o = _l({
7696
7754
  bindRef: a,
7697
7755
  patches: n,
7698
7756
  schema: i,
@@ -7711,11 +7769,11 @@ function _l(e, n = {}) {
7711
7769
  timestamp: Date.now()
7712
7770
  }), m = $(a), `已 write(edit) 主数据(${o.applied.length} 个 patch)。当前值:${Q(a, 600)} (新 hash=${$(a)})`) : o.error;
7713
7771
  }
7714
- let S = fc(u);
7772
+ let S = pc(u);
7715
7773
  if (S.parseError) return Gr("", u, S.parseError);
7716
7774
  let C = await x("set", v);
7717
7775
  if (C !== null) return C;
7718
- let w = hl({
7776
+ let w = gl({
7719
7777
  bindRef: a,
7720
7778
  value: S.parsed,
7721
7779
  schema: i,
@@ -7772,7 +7830,7 @@ function _l(e, n = {}) {
7772
7830
  if (n) {
7773
7831
  let e = t;
7774
7832
  if (typeof e == "string") {
7775
- let t = fc(e);
7833
+ let t = pc(e);
7776
7834
  t.parseError || (e = t.parsed);
7777
7835
  }
7778
7836
  r = e, i = "against";
@@ -7790,7 +7848,7 @@ function _l(e, n = {}) {
7790
7848
  });
7791
7849
  r = t.value, i = `快照 #${t.id}`;
7792
7850
  }
7793
- let o = s ? Li(a, s) : a, c = bc(r, dc(o));
7851
+ let o = s ? Li(a, s) : a, c = xc(r, fc(o));
7794
7852
  return c.length ? `差异(当前 vs ${i},共 ${c.length} 处):\n${c.map((e) => ` ${e.path}: ${Q(e.from)} → ${Q(e.to)}`).join("\n")}` : `无差异:当前主数据与 ${i} 完全相同。`;
7795
7853
  }, {
7796
7854
  name: "diff_data",
@@ -7842,7 +7900,7 @@ function _l(e, n = {}) {
7842
7900
  }
7843
7901
  let u = await x("set", n || (h ? m : void 0));
7844
7902
  if (u !== null) return u;
7845
- let g = hl({
7903
+ let g = gl({
7846
7904
  bindRef: a,
7847
7905
  value: l,
7848
7906
  schema: i,
@@ -7874,7 +7932,7 @@ function _l(e, n = {}) {
7874
7932
  message: "未提供 path 或有效 handle",
7875
7933
  hint: "传 path(受保护字段)或 handle(占位符 ⟦res:handle⟧ 里的句柄)"
7876
7934
  });
7877
- let r = el(n);
7935
+ let r = tl(n);
7878
7936
  if (!c.has(r)) return Y({
7879
7937
  code: "RESOURCE_NOT_FOUND",
7880
7938
  message: `"${n}" 不是受保护字段`,
@@ -7913,7 +7971,7 @@ function _l(e, n = {}) {
7913
7971
  message: "resource_update 需要 path",
7914
7972
  hint: "传要更新的 verbatim 受保护字段路径"
7915
7973
  });
7916
- let n = el(e), r = c.get(n);
7974
+ let n = tl(e), r = c.get(n);
7917
7975
  if (!r) return Y({
7918
7976
  code: "RESOURCE_NOT_FOUND",
7919
7977
  message: `"${e}" 不是受保护字段`,
@@ -7934,7 +7992,7 @@ function _l(e, n = {}) {
7934
7992
  details: Ur(n.error.issues)
7935
7993
  });
7936
7994
  }
7937
- l.update(n, t), lc(a, n, t), m = $(a), _();
7995
+ l.update(n, t), uc(a, n, t), m = $(a), _();
7938
7996
  let s = l.get(n)?.handle;
7939
7997
  return `已更新 verbatim 资源 "${e}" = ${Q(t, 200)}(handle ${s ?? "(未知)"} 不变)。后续 write 该字段写回句柄 ⟦res:${s}⟧ 或新值`;
7940
7998
  }, {
@@ -7995,8 +8053,8 @@ function _l(e, n = {}) {
7995
8053
  }
7996
8054
  //#endregion
7997
8055
  //#region src/core/tools/fetchDoc.ts
7998
- var vl = 3e4, yl = [r(async ({ url: e, as: t }) => {
7999
- let n = new AbortController(), r = setTimeout(() => n.abort(), vl);
8056
+ var yl = 3e4, bl = [r(async ({ url: e, as: t }) => {
8057
+ let n = new AbortController(), r = setTimeout(() => n.abort(), yl);
8000
8058
  try {
8001
8059
  let r = await fetch(e, {
8002
8060
  method: "GET",
@@ -8013,7 +8071,7 @@ var vl = 3e4, yl = [r(async ({ url: e, as: t }) => {
8013
8071
  ].join("\n");
8014
8072
  } catch (t) {
8015
8073
  let r = t?.message || String(t);
8016
- return n.signal.aborted ? `获取失败:请求超时(${vl}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
8074
+ return n.signal.aborted ? `获取失败:请求超时(${yl}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
8017
8075
  } finally {
8018
8076
  clearTimeout(r);
8019
8077
  }
@@ -8024,7 +8082,7 @@ var vl = 3e4, yl = [r(async ({ url: e, as: t }) => {
8024
8082
  url: t.string().describe("要抓取的 URL(同源或已配 CORS)"),
8025
8083
  as: t.enum(["text", "markdown"]).optional().describe("返回格式标签,默认 text")
8026
8084
  })
8027
- })], bl = [
8085
+ })], xl = [
8028
8086
  "id",
8029
8087
  "class",
8030
8088
  "href",
@@ -8036,12 +8094,12 @@ var vl = 3e4, yl = [r(async ({ url: e, as: t }) => {
8036
8094
  "aria-label",
8037
8095
  "name",
8038
8096
  "type"
8039
- ], xl = /^(value|srcdoc|formaction|on\w+)$/i, Sl = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session/i;
8040
- function Cl(e, t) {
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) {
8041
8099
  if (!e) return null;
8042
- let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ?? bl, s = (e) => {
8100
+ let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ?? xl, s = (e) => {
8043
8101
  let t = {};
8044
- for (let n of Array.from(e.attributes)) (a ? o.includes(n.name) : o.includes(n.name) || n.name.startsWith("data-")) && (xl.test(n.name) || Sl.test(n.name) || (t[n.name] = n.value));
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));
8045
8103
  return t;
8046
8104
  }, c = (e, t) => {
8047
8105
  let n = {
@@ -8057,10 +8115,10 @@ function Cl(e, t) {
8057
8115
  };
8058
8116
  return c(e, n);
8059
8117
  }
8060
- var wl = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
8118
+ var Tl = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
8061
8119
  let i = e ? document.querySelector(e) : document.body;
8062
8120
  if (!i) return `未找到匹配元素:selector="${e}"`;
8063
- let a = Cl(i, {
8121
+ let a = wl(i, {
8064
8122
  depth: t ?? 3,
8065
8123
  attrs: n,
8066
8124
  includeText: r ?? !0
@@ -8075,14 +8133,14 @@ var wl = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
8075
8133
  attrs: t.array(t.string()).optional().describe("属性白名单(传了 = 严格白名单;不传 = 默认常用 + data-*)"),
8076
8134
  includeText: t.boolean().optional().describe("是否包含直接文本(默认 true)")
8077
8135
  })
8078
- }), Tl = [wl];
8136
+ }), El = [Tl];
8079
8137
  //#endregion
8080
8138
  //#region src/core/tools/envTool.ts
8081
- function El(e) {
8139
+ function Dl(e) {
8082
8140
  let t = e;
8083
8141
  return typeof t.tagName == "string" || typeof t.nodeType == "number" && typeof t.nodeName == "string";
8084
8142
  }
8085
- function Dl(e, t = 3, n = 2e3, r) {
8143
+ function Ol(e, t = 3, n = 2e3, r) {
8086
8144
  if (e == null) return e;
8087
8145
  if (typeof e == "string") return e.length > n ? e.slice(0, n) + "…(已截断)" : e;
8088
8146
  if (typeof e == "number" || typeof e == "boolean") return e;
@@ -8091,14 +8149,14 @@ function Dl(e, t = 3, n = 2e3, r) {
8091
8149
  if (typeof e == "bigint") return `${e.toString()}n`;
8092
8150
  if (typeof e != "object") return String(e);
8093
8151
  let i = e;
8094
- if (El(i)) {
8152
+ if (Dl(i)) {
8095
8153
  let e = i;
8096
8154
  return e.tagName ? `[Element: <${e.tagName.toLowerCase()}>]` : `[Node: ${e.nodeName}]`;
8097
8155
  }
8098
8156
  if (r?.has(i)) return "[Circular]";
8099
8157
  let a = r ?? /* @__PURE__ */ new WeakSet();
8100
8158
  if (a.add(i), Array.isArray(e)) {
8101
- let r = e.slice(0, 100).map((e) => Dl(e, t - 1, n, a));
8159
+ let r = e.slice(0, 100).map((e) => Ol(e, t - 1, n, a));
8102
8160
  return e.length > 100 && r.push(`…(共 ${e.length} 项,已截断)`), r;
8103
8161
  }
8104
8162
  if (t < 0) return "(对象,已截断)";
@@ -8110,14 +8168,14 @@ function Dl(e, t = 3, n = 2e3, r) {
8110
8168
  break;
8111
8169
  }
8112
8170
  try {
8113
- o[r] = Dl(i[r], t - 1, n, a);
8171
+ o[r] = Ol(i[r], t - 1, n, a);
8114
8172
  } catch {
8115
8173
  o[r] = "(getter 抛错)";
8116
8174
  }
8117
8175
  }
8118
8176
  return o;
8119
8177
  }
8120
- function Ol(e) {
8178
+ function kl(e) {
8121
8179
  let t = e ?? (typeof window < "u" ? window : {}), n = t.navigator, r = t.location, i = t.document;
8122
8180
  return {
8123
8181
  location: {
@@ -8150,9 +8208,9 @@ function Ol(e) {
8150
8208
  } : "(无 document)"
8151
8209
  };
8152
8210
  }
8153
- var kl = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|opener|parent|top|self|window|globalThis|closed|history|navigation|trustedTypes|origin|crossOriginIsolated)$/, Al = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session|ticket/i, jl = r(({ key: e }) => {
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 }) => {
8154
8212
  if (e) {
8155
- if (kl.test(e) || Al.test(e)) return JSON.stringify({
8213
+ if (Al.test(e) || jl.test(e)) return JSON.stringify({
8156
8214
  key: e,
8157
8215
  denied: !0,
8158
8216
  reason: "安全:该 key 在 denylist(localStorage/sessionStorage/cookie/document 或敏感命名 token/secret/key/auth),不读取防泄漏"
@@ -8162,18 +8220,18 @@ var kl = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|open
8162
8220
  key: e,
8163
8221
  exists: t !== void 0,
8164
8222
  type: typeof t,
8165
- value: Dl(t)
8223
+ value: Ol(t)
8166
8224
  }, null, 2);
8167
8225
  }
8168
- return JSON.stringify(Ol(), null, 2);
8226
+ return JSON.stringify(kl(), null, 2);
8169
8227
  }, {
8170
8228
  name: "inspect_env",
8171
8229
  description: "读取宿主页面环境信息(排查调试用,默认开启)。不传参 = 返回环境摘要(location 的 URL/origin/path、navigator 的浏览器/语言、viewport 视口尺寸、document 的 title/readyState);传 key = 读取指定 window 属性值(如 inspect_env({key:\"appConfig\"}) 读集成方挂的调试变量 window.appConfig)。用于排查「当前页面在哪/什么浏览器/视口多大/调试变量值是什么」。轻量只读,大结果自动外存 vfs。",
8172
8230
  schema: t.object({ key: t.string().optional().describe("要读取的 window 属性名(如 \"appConfig\"/\"__DEBUG__\");不传 = 返回环境摘要") })
8173
- }), Ml = [jl];
8231
+ }), Nl = [Ml];
8174
8232
  //#endregion
8175
8233
  //#region src/core/harness/budget.ts
8176
- function Nl(e, t, n) {
8234
+ function Pl(e, t, n) {
8177
8235
  let r = 0;
8178
8236
  return {
8179
8237
  name: "budget",
@@ -8198,12 +8256,12 @@ function Nl(e, t, n) {
8198
8256
  }
8199
8257
  //#endregion
8200
8258
  //#region src/core/sdk/actions.ts
8201
- var Pl = /^[a-zA-Z][a-zA-Z0-9_]*$/;
8202
- function Fl(e) {
8259
+ var Fl = /^[a-zA-Z][a-zA-Z0-9_]*$/;
8260
+ function Il(e) {
8203
8261
  let n = [];
8204
8262
  for (let [i, a] of Object.entries(e)) {
8205
- if (!Pl.test(i)) {
8206
- console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${Pl}),已跳过`);
8263
+ if (!Fl.test(i)) {
8264
+ console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${Fl}),已跳过`);
8207
8265
  continue;
8208
8266
  }
8209
8267
  let e = a.description || `宿主动作 ${i}`;
@@ -8223,9 +8281,9 @@ function Fl(e) {
8223
8281
  }
8224
8282
  return n;
8225
8283
  }
8226
- function Il(e) {
8284
+ function Ll(e) {
8227
8285
  let t = {};
8228
- for (let [n, r] of Object.entries(e)) Pl.test(n) && (t[n] = {
8286
+ for (let [n, r] of Object.entries(e)) Fl.test(n) && (t[n] = {
8229
8287
  description: r.description,
8230
8288
  hasParams: !!r.params
8231
8289
  });
@@ -8233,12 +8291,12 @@ function Il(e) {
8233
8291
  }
8234
8292
  //#endregion
8235
8293
  //#region src/core/toolsets.ts
8236
- var Ll = yl, Rl = Tl;
8237
- function zl(e, t) {
8238
- return _l(e, t);
8294
+ var Rl = bl, zl = El;
8295
+ function Bl(e, t) {
8296
+ return vl(e, t);
8239
8297
  }
8240
- function Bl(e, t, n, r, i) {
8241
- let a = $s(e);
8298
+ function Vl(e, t, n, r, i) {
8299
+ let a = ec(e);
8242
8300
  return [
8243
8301
  ...a.dataOps ? t : [],
8244
8302
  ...a.fetch ? n : [],
@@ -8248,7 +8306,7 @@ function Bl(e, t, n, r, i) {
8248
8306
  }
8249
8307
  //#endregion
8250
8308
  //#region src/core/sdk/toolRegistry.ts
8251
- function Vl(e) {
8309
+ function Hl(e) {
8252
8310
  let t = /* @__PURE__ */ new Map(), n = [];
8253
8311
  for (let r of e) for (let e of r.tools) {
8254
8312
  let i = t.get(e.name);
@@ -8268,15 +8326,15 @@ function Vl(e) {
8268
8326
  }
8269
8327
  //#endregion
8270
8328
  //#region src/core/harness/usageHints.ts
8271
- var Hl = .7;
8272
- function Ul(e, t, n = "simple", r = !1) {
8273
- let i = $s(e), a = n !== "advanced";
8329
+ var Ul = .7;
8330
+ function Wl(e, t, n = "simple", r = !1) {
8331
+ let i = ec(e), a = n !== "advanced";
8274
8332
  return {
8275
8333
  name: "usageHints",
8276
8334
  augmentPrompt: () => {
8277
8335
  let n = [];
8278
8336
  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) {
8279
- let t = e.subagents.filter((e) => (e.temperature ?? 0) >= Hl || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), r = e.subagents.filter((e) => (e.temperature ?? 0) < Hl && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
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));
8280
8338
  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(" · 简单/明确任务(如\"标题改红色\")直接执行,不必走规划-反思。");
8281
8339
  }
8282
8340
  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;
@@ -8285,7 +8343,7 @@ function Ul(e, t, n = "simple", r = !1) {
8285
8343
  }
8286
8344
  //#endregion
8287
8345
  //#region src/core/harness/resourcesPin.ts
8288
- function Wl(e) {
8346
+ function Gl(e) {
8289
8347
  return {
8290
8348
  name: "resourcesPin",
8291
8349
  augmentPrompt: () => {
@@ -8299,78 +8357,78 @@ function Wl(e) {
8299
8357
  }
8300
8358
  //#endregion
8301
8359
  //#region src/core/backends/skillStore.ts
8302
- var Gl = "v:1::skill-store", Kl = "chat-sdk";
8303
- function ql(e, t, n) {
8304
- return `${Gl}::${e}::${t}::${n}`;
8360
+ var Kl = "v:1::skill-store", ql = "chat-sdk";
8361
+ function Jl(e, t, n) {
8362
+ return `${Kl}::${e}::${t}::${n}`;
8305
8363
  }
8306
- function Jl(e, t) {
8307
- return `${Gl}::${e}::${t}::`;
8364
+ function Yl(e, t) {
8365
+ return `${Kl}::${e}::${t}::`;
8308
8366
  }
8309
- function Yl(e = {}) {
8310
- let t = e.dbName ?? Kl, n = e.backend ?? "indexed", r = e.id ?? "", i, a, o = new Promise((e) => {
8367
+ function Xl(e = {}) {
8368
+ let t = e.dbName ?? ql, n = e.backend ?? "indexed", r = e.id ?? "", i, a, o = new Promise((e) => {
8311
8369
  a = e;
8312
8370
  });
8313
8371
  return (async () => {
8314
8372
  try {
8315
8373
  if (n === "indexed") {
8316
8374
  if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
8317
- i = await Ks(t), a(!0);
8375
+ i = await qs(t), a(!0);
8318
8376
  } else if (n === "session") {
8319
8377
  if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
8320
- i = qs(sessionStorage), a(!0);
8378
+ i = Js(sessionStorage), a(!0);
8321
8379
  } else if (n === "local") {
8322
8380
  if (typeof localStorage > "u") throw Error("localStorage 不可用");
8323
- i = qs(localStorage), a(!0);
8324
- } else i = Gs(), a(!1);
8381
+ i = Js(localStorage), a(!0);
8382
+ } else i = Ks(), a(!1);
8325
8383
  } catch {
8326
- i = Gs(), a(!1);
8384
+ i = Ks(), a(!1);
8327
8385
  }
8328
8386
  })(), {
8329
8387
  ready: o,
8330
8388
  async list() {
8331
8389
  let e = [];
8332
- return await i.scan(Jl(t, r), (t, n) => {
8390
+ return await i.scan(Yl(t, r), (t, n) => {
8333
8391
  e.push(n);
8334
8392
  }), e;
8335
8393
  },
8336
8394
  async get(e) {
8337
- return await i.get(ql(t, r, e));
8395
+ return await i.get(Jl(t, r, e));
8338
8396
  },
8339
8397
  async put(e) {
8340
8398
  try {
8341
- await i.set(ql(t, r, e.name), e);
8399
+ await i.set(Jl(t, r, e.name), e);
8342
8400
  } catch (e) {
8343
- Ls(e) && (i = Gs());
8401
+ Rs(e) && (i = Ks());
8344
8402
  }
8345
8403
  },
8346
8404
  async remove(e) {
8347
- let n = ql(t, r, e);
8405
+ let n = Jl(t, r, e);
8348
8406
  return await i.get(n) == null ? !1 : (await i.del(n), !0);
8349
8407
  },
8350
8408
  async clear() {
8351
- await i.clearPrefix(Jl(t, r));
8409
+ await i.clearPrefix(Yl(t, r));
8352
8410
  },
8353
8411
  dispose() {}
8354
8412
  };
8355
8413
  }
8356
- var Xl = /large_results\/[^\s"'`),]+\.txt/g;
8357
- function Zl(e) {
8414
+ var Zl = /large_results\/[^\s"'`),]+\.txt/g;
8415
+ function Ql(e) {
8358
8416
  let t = /* @__PURE__ */ new Set(), n = (e) => {
8359
8417
  if (typeof e != "string" || !e) return;
8360
8418
  let n;
8361
- for (Xl.lastIndex = 0; (n = Xl.exec(e)) !== null;) t.add(n[0]);
8419
+ for (Zl.lastIndex = 0; (n = Zl.exec(e)) !== null;) t.add(n[0]);
8362
8420
  };
8363
8421
  for (let t of e) if (n(t.content), t.steps) for (let e of t.steps) n(e.result);
8364
8422
  return t;
8365
8423
  }
8366
- function Ql(e, t) {
8424
+ function $l(e, t) {
8367
8425
  let n = [];
8368
8426
  for (let r of Object.keys(e)) r.startsWith("large_results/") && !t.has(r) && n.push(r);
8369
8427
  return n;
8370
8428
  }
8371
8429
  //#endregion
8372
8430
  //#region src/core/utils/serialRunner.ts
8373
- function $l() {
8431
+ function eu() {
8374
8432
  let e = Promise.resolve();
8375
8433
  return function(t) {
8376
8434
  let n = e.then(t, t);
@@ -8379,16 +8437,16 @@ function $l() {
8379
8437
  }
8380
8438
  //#endregion
8381
8439
  //#region src/core/sdk/createChatSdk.ts
8382
- var eu = 30, tu = /* @__PURE__ */ new Map();
8383
- function nu(e, t) {
8440
+ var tu = 30, nu = /* @__PURE__ */ new Map();
8441
+ function ru(e, t) {
8384
8442
  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;
8385
8443
  }
8386
- function ru(e, t, n, r) {
8444
+ function iu(e, t, n, r) {
8387
8445
  let i = 0;
8388
8446
  return {
8389
8447
  name: "sdk-events",
8390
8448
  wrapToolCall: async (t, r) => {
8391
- let i = await r(t), a = nu(t.name, t.args);
8449
+ let i = await r(t), a = ru(t.name, t.args);
8392
8450
  return a && e({
8393
8451
  type: "data_change",
8394
8452
  operation: a,
@@ -8423,7 +8481,7 @@ function ru(e, t, n, r) {
8423
8481
  }
8424
8482
  };
8425
8483
  }
8426
- function iu(e, t, n, r, i) {
8484
+ function au(e, t, n, r, i) {
8427
8485
  if (!n) return i && console.warn(`[page-agent-sdk][focus] capabilities.focus 关闭,${t} 忽略`), {
8428
8486
  ok: !1,
8429
8487
  error: "capabilities.focus 关闭"
@@ -8441,18 +8499,18 @@ function iu(e, t, n, r, i) {
8441
8499
  error: "当前无主数据 schema,无法聚焦"
8442
8500
  });
8443
8501
  }
8444
- function au(e, n) {
8502
+ function ou(e, n) {
8445
8503
  let i = {
8446
8504
  prompt_tokens: 0,
8447
8505
  completion_tokens: 0,
8448
8506
  total_tokens: 0
8449
- }, a = ws(() => H), o = /* @__PURE__ */ Ot(0), s = Xs(e.storage);
8507
+ }, a = Ts(() => H), o = /* @__PURE__ */ Ot(0), s = Zs(e.storage);
8450
8508
  e.debug && s && s.onEvent((e) => console.log("[page-agent-sdk][storage]", e));
8451
- let { modelCaps: c, summaryLlmInvoke: l, titleLlmInvoke: u, compressDecisionInvoke: p } = Cs(e), m = c;
8509
+ let { modelCaps: c, summaryLlmInvoke: l, titleLlmInvoke: u, compressDecisionInvoke: p } = ws(e), m = c;
8452
8510
  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)`);
8453
- let h = rc(e, m.contextWindow), g = h.enableLLMSummary !== !1, _ = (e.contextOptions && e.contextOptions.preserveLastToolResults) ?? nc[e.contextPreset ?? "auto"], v = new Set(_), y = e.llm;
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;
8454
8512
  e.debug && !l && console.warn("[page-agent-sdk][summarization] 未构造 llmInvoke(apiKey 缺失?),摘要回退零成本索引摘要");
8455
- let b = /* @__PURE__ */ _t([]), x = wc(e.vfs?.initialFiles, {
8513
+ let b = /* @__PURE__ */ _t([]), x = Tc(e.vfs?.initialFiles, {
8456
8514
  persist: s ? { save: (e) => {
8457
8515
  W.sessionId && s && s.save(n, W.sessionId, { vfs: e });
8458
8516
  } } : void 0,
@@ -8472,18 +8530,18 @@ function au(e, n) {
8472
8530
  getTodos: () => ee.current?.getState?.()?.todos ?? [],
8473
8531
  messages: b,
8474
8532
  maxCheckpoints: O && typeof O == "object" ? O.maxCheckpoints : void 0
8475
- }) : null, te = !O || typeof O != "object" || O.auto !== !1, j = $s(e.capabilities), ne = j.dataOps, M = j.draftWrite, N = j.tracing, re = j.automation, P = cs(e), ie = ne && D ? _l(D, {
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, {
8476
8534
  onAudit: e.onAudit ?? (e.debug ? (e) => console.log("[page-agent-sdk][data audit]", e) : void 0),
8477
8535
  maxSnapshots: e.maxSnapshots,
8478
8536
  onConflict: a.set,
8479
8537
  autoLock: e.autoLock,
8480
8538
  interceptors: e.interceptors,
8481
8539
  vfsStore: M || D?.resources?.length ? x : void 0
8482
- }) : [], ae = ne ? ml(ie, e.toolMode) : [], oe = ne && D ? ie.controller ?? null : null, se = ne && D?.resources?.length && oe?.getResourcesSnapshot ? Wl({ getResourcesSnapshot: () => oe?.getResourcesSnapshot?.() ?? [] }) : void 0, F = () => oe?.get() ?? D, I = /* @__PURE__ */ new Map(), ce = Bl(j, ae, yl, Tl, Ml);
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);
8483
8541
  ce.forEach((e) => I.set(e.name, "builtin"));
8484
8542
  let le = [...e.tools || []];
8485
8543
  le.forEach((e) => I.set(e.name, "user"));
8486
- let L = Fl(e.actions ?? {});
8544
+ let L = Il(e.actions ?? {});
8487
8545
  L.forEach((e) => I.set(e.name, "action"));
8488
8546
  let ue = [], de = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), fe = de ? Wa() : null;
8489
8547
  fe && I.set(Ha, "builtin");
@@ -8555,7 +8613,7 @@ function au(e, n) {
8555
8613
  ve.forEach((e) => I.set(e.name, "builtin"));
8556
8614
  let z = [], ye = /* @__PURE__ */ new Map(), B = be();
8557
8615
  function be() {
8558
- let { tools: e, collisions: t } = Vl([
8616
+ let { tools: e, collisions: t } = Hl([
8559
8617
  {
8560
8618
  label: "builtin",
8561
8619
  tools: ce
@@ -8592,49 +8650,51 @@ function au(e, n) {
8592
8650
  return t.length && console.warn("[page-agent-sdk] 工具重名,后注册覆盖先注册:", t.map((e) => `${e.name}(${e.loser}→${e.winner})`).join(", ")), e;
8593
8651
  }
8594
8652
  let xe = j.planning, Se = j.missionAnchor, Ce = j.workingMemory, we = j.skills, Te = j.vfs;
8595
- if (Te) for (let e of jc) I.set(e, "builtin");
8653
+ if (Te) for (let e of Mc) I.set(e, "builtin");
8596
8654
  if (xe) for (let e of S.tools ?? []) I.set(e.name, "builtin");
8597
8655
  let Ee = j.summarization, De = j.agentCompression && !!p;
8598
8656
  e.debug && j.agentCompression && !p && console.warn("[page-agent-sdk][agentCompression] agentCompression 开启但 summaryLlm 不可用(或缺 apiKey / 模型不支持工具),压缩决策不启用,回退静态压缩");
8599
- let Oe = j.memory, ke = j.subagent, Ae = e.verify?.maxAttempts ?? 2, je = j.verify && e.verify?.enabled !== !1 && Ae > 0, Me = j.contextInspector;
8657
+ 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;
8600
8658
  e.verify?.check && !j.verify && console.warn("[page-agent-sdk][verify] 检测到 verify.check 但 capabilities.verify 未开启,verify 未装载");
8601
- let Ne = e.subagent, Pe = Ne?.allowedTools ?? [], Fe = !ke || Ne?.enabled === !1 ? void 0 : jo({
8602
- llm: Ne?.llm ?? e.llm,
8659
+ let Pe = e.subagent, Fe = Pe?.allowedTools ?? [], Ie = !ke || Pe?.enabled === !1 ? void 0 : Mo({
8660
+ llm: Pe?.llm ?? e.llm,
8603
8661
  allTools: () => B,
8604
- allowedTools: Pe.length ? Pe : void 0,
8605
- systemPrompt: Ne?.systemPrompt,
8606
- temperature: Ne?.temperature,
8607
- maxTokens: Ne?.maxTokens,
8608
- skills: Ne?.skills,
8609
- maxDepth: Ne?.maxDepth,
8610
- maxParallel: Ne?.maxParallel,
8662
+ allowedTools: Fe.length ? Fe : void 0,
8663
+ systemPrompt: Pe?.systemPrompt,
8664
+ temperature: Pe?.temperature,
8665
+ maxTokens: Pe?.maxTokens,
8666
+ skills: Pe?.skills,
8667
+ maxDepth: Pe?.maxDepth,
8668
+ maxParallel: Pe?.maxParallel,
8611
8669
  debug: e.debug,
8612
8670
  getFocuses: () => w.getFocuses(),
8613
- getSchema: () => F()?.schema ?? null
8614
- }), Ie = ke && e.subagents !== void 0 ? Po(e.subagents, {
8671
+ getSchema: () => F()?.schema ?? null,
8672
+ tracker: Ae
8673
+ }), Le = ke && e.subagents !== void 0 ? Fo(e.subagents, {
8615
8674
  llm: e.llm,
8616
8675
  allTools: () => B,
8617
8676
  debug: e.debug,
8618
8677
  getFocuses: () => w.getFocuses(),
8619
- getSchema: () => F()?.schema ?? null
8620
- }) : void 0, Le = Ie ? Ie.controller : null, Re = [
8678
+ getSchema: () => F()?.schema ?? null,
8679
+ tracker: Ae
8680
+ }) : void 0, Re = Le ? Le.controller : null, V = [
8621
8681
  "get_data",
8622
8682
  "describe_data",
8623
8683
  "read",
8624
8684
  "fetch_document"
8625
- ], V = B.filter((e) => Re.includes(e.name)), ze = je ? Fo({
8626
- check: e.verify.check ?? Vo({
8685
+ ], ze = B.filter((e) => V.includes(e.name)), Be = Me ? Io({
8686
+ check: e.verify.check ?? Ho({
8627
8687
  schemas: () => F() ? { "": F().schema } : {},
8628
8688
  root: () => F()?.bind
8629
8689
  }),
8630
8690
  adversarial: e.verify?.adversarial ? {
8631
8691
  llm: e.llm,
8632
- tools: V
8692
+ tools: ze
8633
8693
  } : void 0
8634
- }) : void 0, Be = Me ? ts({
8694
+ }) : void 0, Ve = Ne ? ns({
8635
8695
  contextWindow: m.contextWindow,
8636
- thresholdRatio: rc(e, m.contextWindow).summaryThresholdRatio
8637
- }) : void 0, Ve = Ul({
8696
+ thresholdRatio: ic(e, m.contextWindow).summaryThresholdRatio
8697
+ }) : void 0, He = Wl({
8638
8698
  ...j,
8639
8699
  humanConfirm: de,
8640
8700
  subagents: e.subagents?.map((e) => ({
@@ -8642,10 +8702,10 @@ function au(e, n) {
8642
8702
  description: e.description,
8643
8703
  temperature: e.temperature
8644
8704
  }))
8645
- }, ne && !!D, e.toolMode, !!D?.resources?.length), He = D ? {
8705
+ }, ne && !!D, e.toolMode, !!D?.resources?.length), Ue = D ? {
8646
8706
  name: "dataHint",
8647
- augmentPrompt: () => ss(F(), e.schemaHint) || void 0
8648
- } : null, Ue = e.augmentSystem ? {
8707
+ augmentPrompt: () => cs(F(), e.schemaHint) || void 0
8708
+ } : null, We = e.augmentSystem ? {
8649
8709
  name: "augmentSystem",
8650
8710
  augmentPrompt: (t) => {
8651
8711
  try {
@@ -8658,30 +8718,30 @@ function au(e, n) {
8658
8718
  return;
8659
8719
  }
8660
8720
  }
8661
- } : null, We = e.onEvent, Ge = ec(e.onEvent), H = Ge.emit, Ke, U = [], qe = (e) => ({
8721
+ } : null, Ge = e.onEvent, Ke = tc(e.onEvent), H = Ke.emit, qe, U = [], Je = (e) => ({
8662
8722
  name: e.name,
8663
8723
  description: e.description,
8664
8724
  content: typeof e.getContent == "function" ? e.getContent() : ""
8665
- }), Je = (e) => ({
8725
+ }), Ye = (e) => ({
8666
8726
  name: e.name,
8667
8727
  description: e.description,
8668
8728
  getContent: () => e.content
8669
- }), Ye = e.skillStorage === !1 ? null : Yl({
8729
+ }), Xe = e.skillStorage === !1 ? null : Xl({
8670
8730
  ...typeof e.skillStorage == "object" ? e.skillStorage : {},
8671
8731
  id: e.skillStorage && typeof e.skillStorage == "object" && e.skillStorage.id ? e.skillStorage.id : `agent::${n}`
8672
- }), Xe = () => {
8673
- let t = Ke ? Ke.controller : null;
8732
+ }), Ze = () => {
8733
+ let t = qe ? qe.controller : null;
8674
8734
  if (t) {
8675
8735
  let n = (e.skills || []).filter((e) => !U.some((t) => t.name === e.name));
8676
8736
  t.set([...n, ...U]);
8677
8737
  }
8678
8738
  W.infoTick.value++;
8679
- }, Ze = async () => {
8680
- if (Ye) try {
8681
- let t = await Ye.list();
8739
+ }, Qe = async () => {
8740
+ if (Xe) try {
8741
+ let t = await Xe.list();
8682
8742
  if (t.length) {
8683
- U = t.map(Je);
8684
- let n = Ke ? Ke.controller : null;
8743
+ U = t.map(Ye);
8744
+ let n = qe ? qe.controller : null;
8685
8745
  if (n) {
8686
8746
  let t = (e.skills || []).filter((e) => !U.some((t) => t.name === e.name));
8687
8747
  n.set([...t, ...U]);
@@ -8689,21 +8749,21 @@ function au(e, n) {
8689
8749
  W.infoTick.value++;
8690
8750
  }
8691
8751
  } catch {}
8692
- }, Qe = Ee ? yo({
8752
+ }, $e = Ee ? yo({
8693
8753
  ...h,
8694
8754
  llmInvoke: l,
8695
8755
  getRegisteredData: () => F() ? [{ description: F().description ?? "主数据对象" }] : [],
8696
8756
  preserveLastToolResults: _,
8697
8757
  ...De ? {
8698
8758
  decideInvoke: p,
8699
- getSnapshot: () => Be?.getSnapshot()
8759
+ getSnapshot: () => Ve?.getSnapshot()
8700
8760
  } : {}
8701
- }) : void 0, $e = ac([
8702
- ...He ? [He] : [],
8703
- Ve,
8761
+ }) : void 0, et = oc([
8762
+ ...Ue ? [Ue] : [],
8763
+ He,
8704
8764
  ...Se ? [C] : [],
8705
8765
  ...xe ? [S] : [],
8706
- ...we ? [Ke = Na(e.skills || [], {
8766
+ ...we ? [qe = Na(e.skills || [], {
8707
8767
  readVfs: Te ? (e) => x.files[e]?.content : void 0,
8708
8768
  hostScriptEnabled: j.skillHostScript,
8709
8769
  onToolsReady: (e, t) => {
@@ -8714,8 +8774,8 @@ function au(e, n) {
8714
8774
  B = be(), W.agent && W.agent.setTools(B), W.infoTick.value++;
8715
8775
  }
8716
8776
  })] : [],
8717
- ...Te ? [Nc(x)] : [],
8718
- ...Qe ? [Qe] : [],
8777
+ ...Te ? [Pc(x)] : [],
8778
+ ...$e ? [$e] : [],
8719
8779
  ...Ce ? [T] : [],
8720
8780
  ...R ? [w] : [],
8721
8781
  ...se ? [se] : [],
@@ -8724,27 +8784,27 @@ function au(e, n) {
8724
8784
  ...k && te && A ? [$a(A)] : [],
8725
8785
  ...de ? [Ga()] : [],
8726
8786
  ...e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? [Va(e.approval)] : [],
8727
- ...ze ? [ze] : [],
8728
- ...Fe ? [Fe] : [],
8729
- ...Ie ? [Ie] : [],
8730
- ...Ue ? [Ue] : [],
8731
8787
  ...Be ? [Be] : [],
8788
+ ...Ie ? [Ie] : [],
8789
+ ...Le ? [Le] : [],
8790
+ ...We ? [We] : [],
8791
+ ...Ve ? [Ve] : [],
8732
8792
  ...e.middleware || [],
8733
- ...re ? [Nl(i, {
8793
+ ...re ? [Pl(i, {
8734
8794
  tokenBudget: e.tokenBudget,
8735
8795
  timeBudgetMs: e.timeBudgetMs
8736
8796
  }, H)] : [],
8737
- ru(H, b, F, i)
8738
- ]), et = e.maxMemoryRounds ?? eu, tt = /* @__PURE__ */ Ot([]);
8739
- async function nt() {
8740
- s && (tt.value = (await s.listSessions(n)).sort((e, t) => t.lastAccessed - e.lastAccessed));
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));
8741
8801
  }
8742
8802
  let W = {
8743
8803
  agentId: n,
8744
8804
  store: s,
8745
8805
  messages: b,
8746
8806
  vfsStore: x,
8747
- listeners: Ge.listeners,
8807
+ listeners: Ke.listeners,
8748
8808
  todosMw: S,
8749
8809
  memoryMw: E,
8750
8810
  missionMw: C,
@@ -8758,11 +8818,11 @@ function au(e, n) {
8758
8818
  mcpServers: [],
8759
8819
  checkpoint: A,
8760
8820
  dataOpsController: oe,
8761
- skillsController: Ke ? Ke.controller : null,
8821
+ skillsController: qe ? qe.controller : null,
8762
8822
  infoTick: o,
8763
8823
  pendingConflict: a.pendingConflict,
8764
- sessions: tt,
8765
- refreshSessions: nt,
8824
+ sessions: nt,
8825
+ refreshSessions: rt,
8766
8826
  liveData: F,
8767
8827
  usage: i,
8768
8828
  emit: H,
@@ -8788,15 +8848,15 @@ function au(e, n) {
8788
8848
  }
8789
8849
  }
8790
8850
  }
8791
- ot();
8851
+ st();
8792
8852
  },
8793
8853
  addSkill(e) {
8794
8854
  let t = U.findIndex((t) => t.name === e.name);
8795
- t >= 0 ? U[t] = e : U.push(e), Xe(), Ye && Ye.put(qe(e));
8855
+ t >= 0 ? U[t] = e : U.push(e), Ze(), Xe && Xe.put(Je(e));
8796
8856
  },
8797
8857
  removeSkill(e) {
8798
8858
  let t = U.findIndex((t) => t.name === e);
8799
- return t < 0 ? !1 : (U.splice(t, 1), Xe(), Ye && Ye.remove(e), !0);
8859
+ return t < 0 ? !1 : (U.splice(t, 1), Ze(), Xe && Xe.remove(e), !0);
8800
8860
  },
8801
8861
  listUserSkills() {
8802
8862
  return U.map((e) => e.name);
@@ -8810,7 +8870,7 @@ function au(e, n) {
8810
8870
  };
8811
8871
  },
8812
8872
  afterRound() {
8813
- st(), ut();
8873
+ ct(), dt();
8814
8874
  },
8815
8875
  async send(e, t) {
8816
8876
  await W.initDone, t ??= {}, t?.mission && Se && C.setMission(t.mission);
@@ -8940,19 +9000,19 @@ function au(e, n) {
8940
9000
  type: "session_restored",
8941
9001
  sessionId: r,
8942
9002
  rounds: i.messages?.length ?? 0
8943
- })), e.memory && s.save(n, W.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), nt(), ct = void 0, lt = !1, r;
9003
+ })), e.memory && s.save(n, W.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), rt(), lt = void 0, ut = !1, r;
8944
9004
  },
8945
9005
  resetSession: () => {
8946
- s && (W.sessionId = Ts(), 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({
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({
8947
9007
  type: "session_restored",
8948
9008
  sessionId: W.sessionId,
8949
9009
  rounds: 0
8950
- }), nt(), ct = void 0, lt = !1);
9010
+ }), rt(), lt = void 0, ut = !1);
8951
9011
  },
8952
9012
  stream: (e, t, n) => {
8953
9013
  if (!W.agent) throw Error("page-agent-sdk: agent 尚未初始化完成,请先 await mount()");
8954
- x?.setProtectedRefs?.(Zl(e));
8955
- let r = We ? (e) => {
9014
+ x?.setProtectedRefs?.(Ql(e));
9015
+ let r = Ge ? (e) => {
8956
9016
  t?.(e), H(e);
8957
9017
  } : t;
8958
9018
  if (n) {
@@ -8963,9 +9023,9 @@ function au(e, n) {
8963
9023
  },
8964
9024
  release() {
8965
9025
  if (W.refCount--, W.refCount <= 0) {
8966
- s && (x.flush?.(), s.flush(), s.dispose()), Ye && Ye.dispose();
9026
+ s && (x.flush?.(), s.flush(), s.dispose()), Xe && Xe.dispose();
8967
9027
  let e = W.mcpClosers.splice(0);
8968
- e.length && Promise.allSettled(e.map((e) => e())), tu.delete(n);
9028
+ e.length && Promise.allSettled(e.map((e) => e())), nu.delete(n);
8969
9029
  }
8970
9030
  },
8971
9031
  resolveConflict: a.resolve,
@@ -8985,20 +9045,20 @@ function au(e, n) {
8985
9045
  },
8986
9046
  setLlm(t) {
8987
9047
  let n;
8988
- if (ms(t)) n = t;
9048
+ if (hs(t)) n = t;
8989
9049
  else {
8990
9050
  let e = t;
8991
9051
  if ((e.provider ?? "openai") === "anthropic") throw Error("[page-agent-sdk][setLlm] 切换到 Anthropic 需传 BaseChatModel 实例(动态 import 无法同步);请先 const { ChatAnthropic } = await import(\"@langchain/anthropic\") 构造实例后传入");
8992
9052
  n = d(e);
8993
9053
  }
8994
9054
  typeof n.bindTools != "function" && e.debug && console.warn("[page-agent-sdk][setLlm] 新模型不支持 bindTools(tool calling 会失效)"), y = t;
8995
- let r = ms(t) ? void 0 : t;
9055
+ let r = hs(t) ? void 0 : t;
8996
9056
  if (m = ni({
8997
9057
  model: r?.model ?? t.model ?? t.modelName,
8998
9058
  contextWindow: e.contextWindow ?? r?.contextWindow,
8999
9059
  maxOutputTokens: e.maxOutputTokens ?? r?.maxOutputTokens
9000
9060
  }), m.contextWindow < 2e5) throw Error(`[page-agent-sdk][setLlm] 新模型上下文窗口 ${m.contextWindow} 小于最小支持 ${ti}(需 ≥200K 窗口模型)`);
9001
- W.agent && (W.agent.setLlm(n), W.agent.setModelCaps?.(m)), Qe?.setContextWindow?.(m.contextWindow), Be?.setContextWindow?.(m.contextWindow), W.infoTick.value++, e.debug && console.log("[page-agent-sdk][setLlm] 重解析 modelCaps + 回灌:", m);
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);
9002
9062
  },
9003
9063
  setMemory(e) {
9004
9064
  E.reset(e), typeof e == "function" && E.refresh(), W.infoTick.value++;
@@ -9007,37 +9067,43 @@ function au(e, n) {
9007
9067
  return E.refresh();
9008
9068
  },
9009
9069
  setSubagents(t) {
9010
- if (!Le) {
9070
+ if (!Re) {
9011
9071
  e.debug && console.warn("[page-agent-sdk][setSubagents] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略");
9012
9072
  return;
9013
9073
  }
9014
- Le.set(t), W.infoTick.value++;
9074
+ Re.set(t), W.infoTick.value++;
9015
9075
  },
9016
9076
  addSubagent(t) {
9017
- if (!Le) {
9077
+ if (!Re) {
9018
9078
  e.debug && console.warn("[page-agent-sdk][addSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略");
9019
9079
  return;
9020
9080
  }
9021
- Le.add(t), W.infoTick.value++;
9081
+ Re.add(t), W.infoTick.value++;
9022
9082
  },
9023
9083
  removeSubagent(t) {
9024
- if (!Le) return e.debug && console.warn("[page-agent-sdk][removeSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略"), !1;
9025
- let n = Le.remove(t);
9084
+ if (!Re) return e.debug && console.warn("[page-agent-sdk][removeSubagent] 未配 subagents:[] 或 capabilities.subagent 关闭,忽略"), !1;
9085
+ let n = Re.remove(t);
9026
9086
  return n && W.infoTick.value++, n;
9027
9087
  },
9088
+ getActiveSubagents() {
9089
+ return Ae?.getActive() ?? [];
9090
+ },
9091
+ get subagentHistory() {
9092
+ return Ae?.getHistory() ?? [];
9093
+ },
9028
9094
  getInfo() {
9029
9095
  return {
9030
9096
  id: n,
9031
9097
  sessionId: W.sessionId,
9032
- model: ms(y) ? y.model ?? y.modelName : y.model,
9033
- systemPrompt: W.agent?.getEffectiveSystemPrompt?.() ?? P + ss(F(), e.schemaHint),
9098
+ model: hs(y) ? y.model ?? y.modelName : y.model,
9099
+ systemPrompt: W.agent?.getEffectiveSystemPrompt?.() ?? P + cs(F(), e.schemaHint),
9034
9100
  tools: (W.agent?.allTools ?? B).map((e) => ({
9035
9101
  name: e.name,
9036
9102
  description: e.description,
9037
9103
  schema: e.schema,
9038
9104
  source: I.get(e.name) || "user"
9039
9105
  })),
9040
- skills: (Ke ? Ke.controller.get() : e.skills ?? []).map((e) => ({
9106
+ skills: (qe ? qe.controller.get() : e.skills ?? []).map((e) => ({
9041
9107
  name: e.name,
9042
9108
  description: e.description
9043
9109
  })),
@@ -9047,7 +9113,7 @@ function au(e, n) {
9047
9113
  } : void 0,
9048
9114
  contextPreset: e.contextPreset ?? "auto",
9049
9115
  memory: E.get(),
9050
- middleware: $e.map((e) => e.name),
9116
+ middleware: et.map((e) => e.name),
9051
9117
  todos: (W.agent?.getState?.()?.todos ?? []).map((e) => ({
9052
9118
  id: e.id,
9053
9119
  content: e.content,
@@ -9066,21 +9132,23 @@ function au(e, n) {
9066
9132
  spans: W.agent.spans.value,
9067
9133
  metrics: ai(W.agent.spans.value)
9068
9134
  } : void 0,
9069
- actions: Il(e.actions ?? {}),
9135
+ actions: Ll(e.actions ?? {}),
9070
9136
  subagent: {
9071
- enabled: !!Fe,
9137
+ enabled: !!Ie,
9072
9138
  maxDepth: e.subagent?.maxDepth ?? 1,
9073
9139
  maxParallel: e.subagent?.maxParallel ?? 4,
9074
9140
  allowedTools: e.subagent?.allowedTools ?? [],
9075
- subagents: Le?.get() ?? []
9141
+ subagents: Re?.get() ?? [],
9142
+ active: Ae?.getActive() ?? [],
9143
+ history: Ae?.getHistory() ?? []
9076
9144
  },
9077
9145
  verify: {
9078
- enabled: !!ze,
9079
- maxAttempts: je ? Ae : 0,
9080
- adversarial: je && !!e.verify?.adversarial
9146
+ enabled: !!Be,
9147
+ maxAttempts: Me ? je : 0,
9148
+ adversarial: Me && !!e.verify?.adversarial
9081
9149
  },
9082
9150
  context: (() => {
9083
- let e = Be?.getSnapshot();
9151
+ let e = Ve?.getSnapshot();
9084
9152
  if (e) {
9085
9153
  let t = W.agent?.getState?.()?.lastCompression;
9086
9154
  t && (e.compression = t);
@@ -9113,11 +9181,11 @@ function au(e, n) {
9113
9181
  return R ? w.getFocuses() : [];
9114
9182
  },
9115
9183
  setFocus(t) {
9116
- let n = iu(t, "setFocus", R, () => F()?.schema, e.debug);
9184
+ let n = au(t, "setFocus", R, () => F()?.schema, e.debug);
9117
9185
  return n.ok ? (w.setFocus(t), W.infoTick.value++, { ok: !0 }) : n;
9118
9186
  },
9119
9187
  addFocus(t) {
9120
- let n = iu(t, "addFocus", R, () => F()?.schema, e.debug);
9188
+ let n = au(t, "addFocus", R, () => F()?.schema, e.debug);
9121
9189
  return n.ok ? w.getFocuses().length >= 8 ? (e.debug && console.warn("[page-agent-sdk][focus] addFocus 拒绝:焦点数已达上限 8(augmentPrompt 注入每焦点子树 schema,过多致 system prompt 超预算)"), {
9122
9190
  ok: !1,
9123
9191
  error: "焦点数上限 8(避免 system prompt 撑爆)"
@@ -9130,7 +9198,7 @@ function au(e, n) {
9130
9198
  R && (w.clearFocus(), W.infoTick.value++);
9131
9199
  }
9132
9200
  };
9133
- async function rt() {
9201
+ async function it() {
9134
9202
  if (!s) return;
9135
9203
  await s.ready;
9136
9204
  let t = e.session || {};
@@ -9154,25 +9222,25 @@ function au(e, n) {
9154
9222
  }), 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);
9155
9223
  } else W.sessionId = await s.createSession(n, t.title), e.debug && console.log("[page-agent-sdk][restore] 新建会话(无历史)", W.sessionId);
9156
9224
  } else W.sessionId = await s.createSession(n, t.title);
9157
- e.memory && s.save(n, W.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), nt();
9225
+ e.memory && s.save(n, W.sessionId, { memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), rt();
9158
9226
  }
9159
- async function it() {
9160
- await Ze();
9227
+ async function at() {
9228
+ await Qe();
9161
9229
  }
9162
- function at(e) {
9230
+ function ot(e) {
9163
9231
  let t = {};
9164
- for (let n of Zl(e)) {
9232
+ for (let n of Ql(e)) {
9165
9233
  let e = x.files[n];
9166
9234
  e && (t[n] = e.content);
9167
9235
  }
9168
9236
  return t;
9169
9237
  }
9170
- function ot() {
9171
- let e = Ql(x.files, Zl(b));
9238
+ function st() {
9239
+ let e = $l(x.files, Ql(b));
9172
9240
  for (let t of e) delete x.files[t];
9173
9241
  }
9174
- function st() {
9175
- let e = co(b, et);
9242
+ function ct() {
9243
+ let e = co(b, tt);
9176
9244
  if (!e.trimmed) return;
9177
9245
  let { older: t, summary: n } = e;
9178
9246
  if (H({
@@ -9183,22 +9251,22 @@ function au(e, n) {
9183
9251
  assistant: e.assistantMsgs.map((e) => e.content),
9184
9252
  steps: e.assistantMsgs.flatMap((e) => e.steps ?? [])
9185
9253
  })),
9186
- vfsResults: at(t.flatMap((e) => [e.userMsg, ...e.assistantMsgs])),
9254
+ vfsResults: ot(t.flatMap((e) => [e.userMsg, ...e.assistantMsgs])),
9187
9255
  summary: n.content,
9188
9256
  reason: "max_memory_rounds"
9189
- }), b.splice(e.deleteFrom, e.deleteCount, n), ot(), g && l) {
9257
+ }), b.splice(e.deleteFrom, e.deleteCount, n), st(), g && l) {
9190
9258
  let n = e.summary, { prevSeg: r } = e;
9191
9259
  (async () => {
9192
9260
  try {
9193
9261
  let e = await l(mo(t, v)), i = b.indexOf(n);
9194
9262
  if (i < 0) return;
9195
- b[i].content = so(t, r, e), ut();
9263
+ b[i].content = so(t, r, e), dt();
9196
9264
  } catch {}
9197
9265
  })();
9198
9266
  }
9199
9267
  }
9200
- let ct, lt = !1;
9201
- function ut() {
9268
+ let lt, ut = !1;
9269
+ function dt() {
9202
9270
  if (!W.sessionId || !s) return;
9203
9271
  let t = JSON.parse(JSON.stringify(b));
9204
9272
  s.save(n, W.sessionId, { messages: t });
@@ -9216,15 +9284,15 @@ function au(e, n) {
9216
9284
  s.save(n, W.sessionId, { focus: e.length ? e : null });
9217
9285
  }
9218
9286
  re && A && (s.save(n, W.sessionId, { checkpoints: A.exportStack() }), s.save(n, W.sessionId, { usage: i }));
9219
- let a = ps(b);
9220
- a && a !== ct && (ct = a, s.updateTitle(n, W.sessionId, a)), e.autoTitle !== !1 && u && !lt && b.some((e) => e.role === "user") && b.some((e) => e.role === "assistant") && (lt = !0, (async () => {
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 () => {
9221
9289
  let e = await u(b);
9222
- e && (await s.updateTitle(n, W.sessionId, e), await nt());
9290
+ e && (await s.updateTitle(n, W.sessionId, e), await rt());
9223
9291
  })()), e.debug && console.log("[page-agent-sdk][persist] save", W.sessionId, `${b.length} msgs`);
9224
9292
  }
9225
9293
  return W.initDone = (async () => {
9226
- if (await rt(), await it(), e.mcp?.length) {
9227
- let t = await Promise.allSettled(e.mcp.map((e) => as(e)));
9294
+ if (await it(), await at(), e.mcp?.length) {
9295
+ let t = await Promise.allSettled(e.mcp.map((e) => os(e)));
9228
9296
  W.mcpClosers = t.flatMap((e) => e.status === "fulfilled" ? [e.value.close] : []), W.mcpServers = [], t.forEach((t, n) => {
9229
9297
  let r = e.mcp[n], i = r.name ?? r.url;
9230
9298
  t.status === "fulfilled" ? (W.mcpServers.push({
@@ -9234,18 +9302,18 @@ function au(e, n) {
9234
9302
  }), 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);
9235
9303
  }), B = be(), e.debug && console.log(`[page-agent-sdk][mcp] 注入 ${ue.length} 个工具,${W.mcpServers.length} 个 server`);
9236
9304
  }
9237
- let t = ms(e.llm) ? e.llm : await f(e.llm);
9305
+ let t = hs(e.llm) ? e.llm : await f(e.llm);
9238
9306
  W.agent = ji({
9239
9307
  llm: t,
9240
9308
  systemPrompt: P,
9241
9309
  tools: B,
9242
- middleware: $e,
9310
+ middleware: et,
9243
9311
  maxToolRounds: e.maxToolRounds,
9244
9312
  maxRetries: e.maxRetries,
9245
9313
  maxParallelTools: e.maxParallelTools,
9246
9314
  contextWindow: m.contextWindow,
9247
9315
  maxOutputTokens: m.maxOutputTokens,
9248
- maxVerifyAttempts: je ? Ae : 0,
9316
+ maxVerifyAttempts: Me ? je : 0,
9249
9317
  onLlmChange: (e) => {
9250
9318
  y = e;
9251
9319
  },
@@ -9259,17 +9327,17 @@ function au(e, n) {
9259
9327
  } catch {}
9260
9328
  } : void 0,
9261
9329
  debug: e.debug
9262
- }), ee.current = W.agent, Ie && Ie.setReconfigureHook && Ie.setReconfigureHook(() => {
9330
+ }), ee.current = W.agent, Le && Le.setReconfigureHook && Le.setReconfigureHook(() => {
9263
9331
  W.agent && W.agent.setTools(be());
9264
9332
  });
9265
9333
  })(), W;
9266
9334
  }
9267
- function ou(e, t) {
9268
- let n = e.id ?? Ts();
9335
+ function su(e, t) {
9336
+ let n = e.id ?? Es();
9269
9337
  e.id || console.warn(`[page-agent-sdk] 未传 options.id,已生成随机 id "${n}"。刷新后持久化数据无法恢复,请传稳定 id。`);
9270
- let r = e.streaming ?? !0, i = e.ui ?? "default", a, o = e.shareContext ? tu.get(n) : void 0;
9271
- o ? a = o : (a = au(e, n), e.shareContext && tu.set(n, a)), a.refCount++;
9272
- let s = null, c = Zs(e), l = null, u = null;
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;
9273
9341
  async function d(n) {
9274
9342
  if (await a.initDone, s) {
9275
9343
  s.show();
@@ -9311,7 +9379,7 @@ function ou(e, t) {
9311
9379
  function m() {
9312
9380
  s?.show();
9313
9381
  }
9314
- let h = $l();
9382
+ let h = eu();
9315
9383
  return {
9316
9384
  mount: d,
9317
9385
  unmount: f,
@@ -9424,7 +9492,7 @@ function ou(e, t) {
9424
9492
  },
9425
9493
  vfsWrite: (e, t) => {
9426
9494
  let n = typeof t == "string" ? t : JSON.stringify(t);
9427
- a.vfsStore.files[Oc(e)] = {
9495
+ a.vfsStore.files[kc(e)] = {
9428
9496
  content: n,
9429
9497
  updatedAt: Date.now()
9430
9498
  };
@@ -9458,17 +9526,21 @@ function ou(e, t) {
9458
9526
  refreshMemory: () => a.refreshMemory(),
9459
9527
  setSubagents: (e) => a.setSubagents(e),
9460
9528
  addSubagent: (e) => a.addSubagent(e),
9461
- removeSubagent: (e) => a.removeSubagent(e)
9529
+ removeSubagent: (e) => a.removeSubagent(e),
9530
+ getActiveSubagents: () => a.getActiveSubagents(),
9531
+ get subagentHistory() {
9532
+ return a.subagentHistory;
9533
+ }
9462
9534
  };
9463
9535
  }
9464
9536
  //#endregion
9465
9537
  //#region src/core/sdk/ragSubagent.ts
9466
- var su = "你是知识检索专家。可用工具: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你是只读检索角色,不要尝试修改任何数据。", cu = "# 知识检索策略(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", lu = {
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 = {
9467
9539
  name: "rag-search",
9468
9540
  description: "多源知识检索策略:vfs 预注入文档 → 语义检索 → 指定文档加载 → 公网;综合结构化结论 + 溯源",
9469
- getContent: () => cu
9541
+ getContent: () => lu
9470
9542
  };
9471
- function uu(e, n, i) {
9543
+ function du(e, n, i) {
9472
9544
  return r(async ({ query: e, topK: t }) => {
9473
9545
  try {
9474
9546
  let r = await n(e, { topK: t ?? i });
@@ -9485,7 +9557,7 @@ function uu(e, n, i) {
9485
9557
  })
9486
9558
  });
9487
9559
  }
9488
- function du(e, n) {
9560
+ function fu(e, n) {
9489
9561
  return r(async ({ source: e }) => {
9490
9562
  try {
9491
9563
  let t = await n(e), r = Array.isArray(t) ? t : [t];
@@ -9499,11 +9571,11 @@ function du(e, n) {
9499
9571
  schema: t.object({ source: t.string().describe("文档标识(id/URL/key)") })
9500
9572
  });
9501
9573
  }
9502
- function fu(e) {
9574
+ function pu(e) {
9503
9575
  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;
9504
9576
  if (!t && !n && r === !1) throw Error("[page-agent-sdk][createRagSubagent] 至少配一种知识源:retriever / loader / useVfs(true)");
9505
9577
  let p = [];
9506
- t && p.push(uu(s, t, o)), n && p.push(du(c, n)), f && p.push(...f);
9578
+ t && p.push(du(s, t, o)), n && p.push(fu(c, n)), f && p.push(...f);
9507
9579
  let m = r ? [
9508
9580
  "vfs_grep",
9509
9581
  "vfs_read",
@@ -9512,17 +9584,17 @@ function fu(e) {
9512
9584
  return {
9513
9585
  id: i,
9514
9586
  description: a ?? "检索知识库(组件文档/UI 规范/业务规则),返回有依据的结构化结论。需要查阅文档才能回答或决定如何配置时委派",
9515
- systemPrompt: su,
9587
+ systemPrompt: cu,
9516
9588
  tools: p.length ? p : void 0,
9517
9589
  allowedTools: m,
9518
- skills: d ?? [lu],
9590
+ skills: d ?? [uu],
9519
9591
  maxToolRounds: l,
9520
9592
  ...u === void 0 ? {} : { summarization: u }
9521
9593
  };
9522
9594
  }
9523
9595
  //#endregion
9524
9596
  //#region src/core/sdk/htmlSubagent.ts
9525
- function pu(e) {
9597
+ function mu(e) {
9526
9598
  return `你是纯代码组件生成专家。可用工具:vfs_write / vfs_edit / vfs_rm(写/改/删代码到 vfs ${e}) / vfs_grep + vfs_read(读 vfs) / write + set(写 data 引用,writablePaths 限定) / read / write_todos + update_todo(规划)。
9527
9599
 
9528
9600
  代码存储约定(重要):
@@ -9536,12 +9608,12 @@ function pu(e) {
9536
9608
  3. 小段代码 vfs_write 整体写;大段用 vfs_edit 增量拼(避免单次输出超限);
9537
9609
  4. 生成后 read(vfs 文件 + data 引用)确认结构正确;只写 writablePaths 内 data + ${e} 下 vfs。`;
9538
9610
  }
9539
- var mu = "# 纯代码组件生成规范\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- 颜色对比达标;不只用颜色传达信息", hu = {
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 = {
9540
9612
  name: "html-builder",
9541
9613
  description: "纯代码组件(custom Vue SFC)生成规范:代码存 vfs+data 引用 / SFC 规范 / 安全底线 / props / 组件库引用 / 可访问性",
9542
- getContent: () => mu
9614
+ getContent: () => hu
9543
9615
  };
9544
- function gu(e) {
9616
+ function _u(e) {
9545
9617
  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;
9546
9618
  if (!t?.length) throw Error("[page-agent-sdk][createHtmlSubagent] writablePaths 必填(代码组件 data 区,如 [\"components\"])");
9547
9619
  let d = [];
@@ -9550,7 +9622,7 @@ function gu(e) {
9550
9622
  return {
9551
9623
  id: r,
9552
9624
  description: i ?? "生成/修改纯代码组件(custom Vue SFC)。代码写 vfs,data 存引用;能规划(write_todos)+ 执行。需写代码组件或灵活定制时委派",
9553
- systemPrompt: pu(n),
9625
+ systemPrompt: mu(n),
9554
9626
  writablePaths: t,
9555
9627
  allowedTools: [
9556
9628
  "vfs_write",
@@ -9562,14 +9634,14 @@ function gu(e) {
9562
9634
  middleware: d.length ? d : void 0,
9563
9635
  summarization: o === !1 ? void 0 : o,
9564
9636
  temperature: c,
9565
- skills: l ?? [hu],
9637
+ skills: l ?? [gu],
9566
9638
  maxToolRounds: s,
9567
9639
  tools: f.length ? f : void 0
9568
9640
  };
9569
9641
  }
9570
9642
  //#endregion
9571
9643
  //#region src/core/utils/clipboard.ts
9572
- async function _u(e) {
9644
+ async function vu(e) {
9573
9645
  try {
9574
9646
  let t = globalThis.navigator?.clipboard;
9575
9647
  if (t && typeof t.writeText == "function") return await t.writeText(e), !0;
@@ -9587,7 +9659,7 @@ async function _u(e) {
9587
9659
  }
9588
9660
  //#endregion
9589
9661
  //#region src/core/composables/useChat.ts
9590
- function vu(e = {}) {
9662
+ function yu(e = {}) {
9591
9663
  let { fetchResponse: t, fetchStream: n, onPersist: r, onClear: i } = e, a = /* @__PURE__ */ _t({
9592
9664
  messages: e.messages ?? [],
9593
9665
  loading: !1,
@@ -9766,9 +9838,9 @@ function vu(e = {}) {
9766
9838
  }
9767
9839
  //#endregion
9768
9840
  //#region src/core/composables/chatContext.ts
9769
- var yu = Symbol("chatContext");
9770
- function bu(e = {}) {
9771
- let t = vu({
9841
+ var bu = Symbol("chatContext");
9842
+ function xu(e = {}) {
9843
+ let t = yu({
9772
9844
  fetchResponse: e.fetchResponse,
9773
9845
  fetchStream: e.fetchStream,
9774
9846
  messages: e.messages,
@@ -9787,7 +9859,7 @@ function bu(e = {}) {
9787
9859
  }, h = /* @__PURE__ */ Ot({}), g = (e) => h.value[e] !== !1, _ = (e) => {
9788
9860
  h.value[e] = !g(e);
9789
9861
  }, v = /* @__PURE__ */ Ot(!1), y = (e) => {
9790
- _u(e).then((e) => {
9862
+ vu(e).then((e) => {
9791
9863
  e && (v.value = !0, setTimeout(() => {
9792
9864
  v.value = !1;
9793
9865
  }, 1500));
@@ -9855,15 +9927,15 @@ function bu(e = {}) {
9855
9927
  }
9856
9928
  };
9857
9929
  }
9858
- function xu() {
9859
- let e = Fn(yu);
9930
+ function Su() {
9931
+ let e = Fn(bu);
9860
9932
  if (!e) throw Error("useChatContext 必须在 provide(chatContextKey) 的组件子树内调用");
9861
9933
  return e;
9862
9934
  }
9863
9935
  //#endregion
9864
9936
  //#region src/core/index.headless.ts
9865
- function Su(e) {
9866
- return ou(e);
9937
+ function Cu(e) {
9938
+ return su(e);
9867
9939
  }
9868
9940
  //#endregion
9869
- export { Qs as CAPABILITIES, tc as CONTEXT_PRESETS, fs as CompressDecisionSchema, os as DEFAULT_SYSTEM_PROMPT, Ha as HUMAN_CONFIRM_TOOL_NAME, ti as MIN_CONTEXT_WINDOW, lo as STOP_WORDS, oc as UNSAFE_KEYS, Il as actionsToInspectInfo, Fl as actionsToTools, Jr as agentError, es as analyzeContext, gc as applyPatchToClone, _c as applyPatchToLive, qr as asAgentError, ss as buildDataPrompt, cs as buildSystemPrompt, yu as chatContextKey, hl as commitSetToBind, as as connectMcp, f as constructLlmFromConfig, d as constructOpenLlmSync, _u as copyText, ji as createAgent, Va as createApprovalMiddleware, bu as createChatContext, Su as createChatSdk, Qa as createCheckpointManager, $a as createCheckpointMiddleware, ws as createConflictManager, ts as createContextInspectorMiddleware, _l as createDataOps, gu as createHtmlSubagent, Ga as createHumanConfirmMiddleware, Wa as createHumanConfirmTool, Gs as createMemoryBackend, Pa as createMemoryMiddleware, u as createProxyLlm, fu as createRagSubagent, ba as createSandboxRunner, ec as createSdkEvents, $l as createSerialRunner, Ys as createSessionStore, Yl as createSkillStore, jo as createSubagentMiddleware, Po as createSubagentsMiddleware, Ul as createUsageHintsMiddleware, Fo as createVerifyMiddleware, wc as createVfs, qs as createWebStorageBackend, Vo as createWriteBackCheck, dc as deepClone, zl as defineDataToolset, Sa as defineSkill, ls as defineTool, uc as deleteByPath, ps as deriveTitle, Ui as describeSchemaNode, xi as detectGarbledToolCall, bc as diffObjects, Cl as domToStructure, Tl as domTools, Rl as domToolsStatic, fo as estimateMessageTokens, po as estimateRoundTokens, X as estimateTokens, m as extractReasoningDelta, ca as extractSchemaHint, ns as extractText, p as extractTextDelta, h as extractUsage, yl as fetchDocTools, Ll as fetchTools, ml as filterByToolMode, Wi as formatConstraints, Ur as formatZodIssues, Z as getByPath, wl as getDomTool, Ol as getEnvSummary, Fi as getSchemaAtPath, Mi as getSchemaTopKeys, ai as getTraceMetrics, $ as hashValue, mo as indexSummarize, jl as inspectEnvTool, Ml as inspectTools, ms as isChatModel, fi as isContextLengthError, Ni as isPathAllowed, Ls as isQuotaError, sc as isUnsafePath, Uc as jpEval, Gr as jsonParseError, mc as limitDepth, fc as maybeParseValue, ii as offloadPassThroughChars, ri as offloadThresholdChars, ra as presets, Li as projectBySchema, Ii as projectBySchemaDeep, pc as projectFields, ho as recallRounds, Gi as renderSchemaHint, Ki as renderSchemaOverview, Ji as renderSchemaShallow, $s as resolveCapabilities, rc as resolveContextOptions, Zs as resolveDialogConfig, Cs as resolveLlm, ni as resolveModelCaps, Xs as resolveStorage, yc as restoreInPlace, vc as restoreLive, Kr as routeError, xa as runHostScript, qc as runSandboxedScript, cc as safeMerge, Dl as safeSerialize, Q as safeStringify, Gc as searchJson, Bl as selectBuiltinTools, lc as setByPath, go as shouldTriggerCompression, ia as systemPromptHelpers, uo as tokenize, Y as toolError, Pi as unwrapSchema, vu as useChat, xu as useChatContext, e as z, Wr as zodError };
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 };