page-agent-sdk 3.24.0 → 3.24.1

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.
@@ -4942,7 +4942,11 @@ function ws(e, t, n) {
4942
4942
  } : Reflect.get(e, r, i);
4943
4943
  } });
4944
4944
  }
4945
- async function Ts(e, t, n, r, i, a) {
4945
+ function Ts(e, t) {
4946
+ let n = t?.__pgKeepExternal;
4947
+ return n?.length ? `${e}\n\n⚠️ [keep_external] 委派期间组件「${n.join("、")}」的代码被外部(人工/宿主)修改,已保留外部版本,本次子 agent 的修改未提交。这不是子 agent 失败。请勿直接重写、也勿立即重新委派 —— 先向用户如实说明「检测到你在生成期间手动修改了该组件,已保留你的版本」,由用户决定是否仍按原任务继续。` : e;
4948
+ }
4949
+ async function Es(e, t, n, r, i, a) {
4946
4950
  let o = t.depth ?? 0, s = t.maxDepth ?? ps, c = /* @__PURE__ */ new Set([...fs, ...t.allowedTools ?? []]), l = () => typeof t.allTools == "function" ? t.allTools() : t.allTools, u = ys(l(), c, t.extraTools ?? []);
4947
4951
  if (t.writablePaths?.length) {
4948
4952
  u = u.filter((e) => !bs(e));
@@ -4951,7 +4955,7 @@ async function Ts(e, t, n, r, i, a) {
4951
4955
  }
4952
4956
  let d = `sub-${o}-${Math.random().toString(36).slice(2, 10)}`;
4953
4957
  t.enterDataScope && (u = u.map((e) => e.__dataOpsScoped ? ws(e, d, t.enterDataScope) : e));
4954
- let f = o + 1 < s ? [Es({
4958
+ let f = o + 1 < s ? [Ds({
4955
4959
  ...t,
4956
4960
  depth: o + 1
4957
4961
  })] : [], p = t.getFocuses?.() ?? [], h = p.length ? Qa({
@@ -5031,7 +5035,7 @@ async function Ts(e, t, n, r, i, a) {
5031
5035
  r && (e.type === "tool_call" || e.type === "tool_result" || e.type === "reasoning") && r(e);
5032
5036
  }, C.signal);
5033
5037
  if (!t.timeoutMs || t.timeoutMs <= 0) try {
5034
- return await E;
5038
+ return Ts(await E, S.getState());
5035
5039
  } finally {
5036
5040
  T();
5037
5041
  }
@@ -5042,12 +5046,12 @@ async function Ts(e, t, n, r, i, a) {
5042
5046
  });
5043
5047
  E.catch(() => {});
5044
5048
  try {
5045
- return await Promise.race([E, O]);
5049
+ return Ts(await Promise.race([E, O]), S.getState());
5046
5050
  } finally {
5047
5051
  clearTimeout(D), T();
5048
5052
  }
5049
5053
  }
5050
- function Es(e) {
5054
+ function Ds(e) {
5051
5055
  let n = e.maxParallel ?? ms, i, a, o, s = (e) => e?.configurable?.__pgSubagentCall ?? {
5052
5056
  signal: i,
5053
5057
  emit: a,
@@ -5094,7 +5098,7 @@ function Es(e) {
5094
5098
  }), h = Date.now();
5095
5099
  e.tracker?.start(f, t, p, h);
5096
5100
  try {
5097
- let r = await Ts({
5101
+ let r = await Es({
5098
5102
  prompt: t,
5099
5103
  role: n,
5100
5104
  model: a
@@ -5122,7 +5126,7 @@ function Es(e) {
5122
5126
  }), s = Date.now();
5123
5127
  e.tracker?.start(r, t.prompt, a, s);
5124
5128
  try {
5125
- let n = await Ts(t, e, i.signal, c(r, a, i.toolCallId, i.emit), o, i.emit);
5129
+ let n = await Es(t, e, i.signal, c(r, a, i.toolCallId, i.emit), o, i.emit);
5126
5130
  return e.tracker?.finish(r, "done", n ?? "(未完成)"), {
5127
5131
  ok: !0,
5128
5132
  text: n ?? "(未完成)"
@@ -5154,8 +5158,8 @@ function Es(e) {
5154
5158
  }, t(e))
5155
5159
  };
5156
5160
  }
5157
- var Ds = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
5158
- function Os(e, t) {
5161
+ var Os = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
5162
+ function ks(e, t) {
5159
5163
  let n = e.tools ?? [];
5160
5164
  return {
5161
5165
  llm: e.llm ?? t.llm,
@@ -5183,7 +5187,7 @@ function Os(e, t) {
5183
5187
  ...t.timeoutMs === void 0 ? {} : { timeoutMs: t.timeoutMs }
5184
5188
  };
5185
5189
  }
5186
- function ks(e, n) {
5190
+ function As(e, n) {
5187
5191
  let i, a, o, s = (e) => e?.configurable?.__pgSubagentCall ?? {
5188
5192
  signal: i,
5189
5193
  emit: a,
@@ -5216,7 +5220,7 @@ function ks(e, n) {
5216
5220
  function f(e) {
5217
5221
  let i = /* @__PURE__ */ new Set(), a = [], o = [];
5218
5222
  for (let l of e) {
5219
- if (!Ds.test(l.id)) {
5223
+ if (!Os.test(l.id)) {
5220
5224
  console.warn(`[subagents] id "${l.id}" 非合法工具名(须 [a-zA-Z_][a-zA-Z0-9_]*),已跳过`);
5221
5225
  continue;
5222
5226
  }
@@ -5226,7 +5230,7 @@ function ks(e, n) {
5226
5230
  continue;
5227
5231
  }
5228
5232
  i.add(e), a.push(l), o.push(r(async ({ task: e, components: t }, r) => {
5229
- let i = s(r), a = Os(l, n), o = (e) => i.logSink?.({
5233
+ let i = s(r), a = ks(l, n), o = (e) => i.logSink?.({
5230
5234
  ...e,
5231
5235
  source: `子:${l.id}`
5232
5236
  }), u = n.tracker, d = u ? `use_${l.id}-${Math.random().toString(36).slice(2, 6)}` : `use_${l.id}`, f = n.componentLock, p = d, m, h = [], g = (e, t) => i.logSink?.({
@@ -5257,7 +5261,7 @@ function ks(e, n) {
5257
5261
  } : _, y = Date.now();
5258
5262
  u?.start(d, e, l.id, y);
5259
5263
  try {
5260
- let t = await Ts({ prompt: e }, a, i.signal, v, o, i.emit);
5264
+ let t = await Es({ prompt: e }, a, i.signal, v, o, i.emit);
5261
5265
  return u?.finish(d, "done", t), t;
5262
5266
  } catch (e) {
5263
5267
  throw u?.finish(d, "error", String(e?.message ?? e)), e;
@@ -5331,7 +5335,7 @@ function ks(e, n) {
5331
5335
  }
5332
5336
  //#endregion
5333
5337
  //#region src/core/harness/verify.ts
5334
- function As(e) {
5338
+ function js(e) {
5335
5339
  return {
5336
5340
  name: "verify",
5337
5341
  async beforeReturn({ messages: t, state: n, log: r }) {
@@ -5343,10 +5347,10 @@ function As(e) {
5343
5347
  if (e.adversarial) {
5344
5348
  r?.("middleware", {
5345
5349
  stage: "adversarial_start",
5346
- model: Rs(e.adversarial.llm),
5350
+ model: zs(e.adversarial.llm),
5347
5351
  tools: (e.adversarial.tools ?? []).length
5348
5352
  });
5349
- let n = await Hs(t, e.adversarial.llm, r, e.adversarial.tools);
5353
+ let n = await Us(t, e.adversarial.llm, r, e.adversarial.tools);
5350
5354
  if (r?.("middleware", {
5351
5355
  stage: "adversarial_done",
5352
5356
  clean: n === null,
@@ -5357,18 +5361,18 @@ function As(e) {
5357
5361
  }
5358
5362
  };
5359
5363
  }
5360
- var js = /* @__PURE__ */ new Set([
5364
+ var Ms = /* @__PURE__ */ new Set([
5361
5365
  "set_data",
5362
5366
  "edit_data",
5363
5367
  "delete_data",
5364
5368
  "write"
5365
- ]), Ms = /校验失败|SCHEMA_INVALID|未注册|不存在|仅支持|必须是|NOT_OBJECT|PATH_UNSAFE|VERSION_CONFLICT|WRITE_INTERCEPT/;
5366
- function Ns(e) {
5369
+ ]), Ns = /校验失败|SCHEMA_INVALID|未注册|不存在|仅支持|必须是|NOT_OBJECT|PATH_UNSAFE|VERSION_CONFLICT|WRITE_INTERCEPT/;
5370
+ function Ps(e) {
5367
5371
  let t = /* @__PURE__ */ new Map();
5368
5372
  for (let n of e) {
5369
5373
  let e = n?.tool_calls;
5370
5374
  if (Array.isArray(e)) for (let n of e) {
5371
- if (!js.has(n.name)) continue;
5375
+ if (!Ms.has(n.name)) continue;
5372
5376
  let e = n.id, r = n?.args ?? {};
5373
5377
  if (n.name === "write") if (r.del && r.patch?.jsonPath) t.set(r.patch.jsonPath, {
5374
5378
  path: r.patch.jsonPath,
@@ -5407,7 +5411,7 @@ function Ns(e) {
5407
5411
  }
5408
5412
  return [...t.values()];
5409
5413
  }
5410
- function Ps(e) {
5414
+ function Fs(e) {
5411
5415
  let t = /* @__PURE__ */ new Map();
5412
5416
  for (let n of e) {
5413
5417
  let e = n?.tool_call_id, r = n?.content;
@@ -5415,7 +5419,7 @@ function Ps(e) {
5415
5419
  }
5416
5420
  return t;
5417
5421
  }
5418
- function Fs(e, t) {
5422
+ function Is(e, t) {
5419
5423
  if (t === "") return e;
5420
5424
  if (e == null) return;
5421
5425
  let n = e;
@@ -5425,16 +5429,16 @@ function Fs(e, t) {
5425
5429
  }
5426
5430
  return n;
5427
5431
  }
5428
- function Is(e = {}) {
5432
+ function Ls(e = {}) {
5429
5433
  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 ?? {};
5430
5434
  return async ({ messages: e }) => {
5431
- let r = Ns(e);
5435
+ let r = Ps(e);
5432
5436
  if (!r.length) return { ok: !0 };
5433
- let i = Ps(e), a = n()[""], o = t(), s = [];
5437
+ let i = Fs(e), a = n()[""], o = t(), s = [];
5434
5438
  for (let { path: e, op: t, callId: n } of r) {
5435
5439
  let r = n ? i.get(n) : void 0;
5436
- if (r && Ms.test(r)) continue;
5437
- let c = Fs(o, e);
5440
+ if (r && Ns.test(r)) continue;
5441
+ let c = Is(o, e);
5438
5442
  if (t === "delete_data") c !== void 0 && s.push(`${e} 删除后读回仍有值,疑似未生效`);
5439
5443
  else if (c == null) s.push(`写入 ${e} 后读回为空,疑似未生效`);
5440
5444
  else if (a) {
@@ -5448,17 +5452,17 @@ function Is(e = {}) {
5448
5452
  } : { ok: !0 };
5449
5453
  };
5450
5454
  }
5451
- function Ls(e) {
5452
- return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
5453
- }
5454
5455
  function Rs(e) {
5455
- return Ls(e) ? e.model ?? e.modelName ?? "<实例>" : e.model ?? "<配置>";
5456
+ return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
5456
5457
  }
5457
- var zs = /无问题|没有问题|未发现问题|没有发现|没问题|未发现/;
5458
- function Bs(e) {
5459
- return zs.test(e);
5458
+ function zs(e) {
5459
+ return Rs(e) ? e.model ?? e.modelName ?? "<实例>" : e.model ?? "<配置>";
5460
5460
  }
5461
+ var Bs = /无问题|没有问题|未发现问题|没有发现|没问题|未发现/;
5461
5462
  function Vs(e) {
5463
+ return Bs.test(e);
5464
+ }
5465
+ function Hs(e) {
5462
5466
  let t = "", n = "";
5463
5467
  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 : "");
5464
5468
  return {
@@ -5466,8 +5470,8 @@ function Vs(e) {
5466
5470
  lastReply: n
5467
5471
  };
5468
5472
  }
5469
- async function Hs(e, t, n, r) {
5470
- let { lastUser: i, lastReply: a } = Vs(e);
5473
+ async function Us(e, t, n, r) {
5474
+ let { lastUser: i, lastReply: a } = Hs(e);
5471
5475
  if (!a) return null;
5472
5476
  let o = Array.isArray(r) && r.length > 0, s = [
5473
5477
  "你是严格的对抗式审查者,目标是找出以下 AI 助手回复的错误并证明它有问题(事实错误 / 遗漏 / 逻辑矛盾 / 与需求不符)。",
@@ -5478,7 +5482,7 @@ async function Hs(e, t, n, r) {
5478
5482
  ].join("\n"), c = "你是严格的对抗式审查者,只找问题不赞美。目标是反驳,不是改进。", l = n ? (e) => n(e.type, {
5479
5483
  ...e.data,
5480
5484
  source: "adversarial"
5481
- }) : void 0, u = await Wi(Ls(t) ? {
5485
+ }) : void 0, u = await Wi(Rs(t) ? {
5482
5486
  llm: t,
5483
5487
  tools: r,
5484
5488
  maxToolRounds: o ? 4 : 1,
@@ -5503,11 +5507,11 @@ async function Hs(e, t, n, r) {
5503
5507
  stage: "adversarial_verdict",
5504
5508
  verdict: u,
5505
5509
  source: "adversarial"
5506
- }), Bs(u) ? null : u.trim();
5510
+ }), Vs(u) ? null : u.trim();
5507
5511
  }
5508
5512
  //#endregion
5509
5513
  //#region src/core/utils/contextAnalysis.ts
5510
- var Us = [
5514
+ var Ws = [
5511
5515
  {
5512
5516
  prefix: "## 可操作数据",
5513
5517
  key: "dataHint"
@@ -5536,7 +5540,7 @@ var Us = [
5536
5540
  prefix: "【与当前问题可能相关的早期对话】",
5537
5541
  key: "recall"
5538
5542
  }
5539
- ], Ws = [
5543
+ ], Gs = [
5540
5544
  {
5541
5545
  key: "systemPrompt",
5542
5546
  label: "系统提示词(身份/规则)"
@@ -5590,9 +5594,9 @@ var Us = [
5590
5594
  label: "其他"
5591
5595
  }
5592
5596
  ];
5593
- function Gs() {
5597
+ function Ks() {
5594
5598
  let e = {};
5595
- for (let t of Ws) e[t.key] = {
5599
+ for (let t of Gs) e[t.key] = {
5596
5600
  key: t.key,
5597
5601
  label: t.label,
5598
5602
  tokens: 0,
@@ -5601,16 +5605,16 @@ function Gs() {
5601
5605
  };
5602
5606
  return e;
5603
5607
  }
5604
- function Ks(e, t) {
5608
+ function qs(e, t) {
5605
5609
  e.tokens += t, e.msgCount += 1;
5606
5610
  }
5607
- function qs(e) {
5611
+ function Js(e) {
5608
5612
  let t = e.content;
5609
5613
  return typeof t == "string" ? t : JSON.stringify(t ?? "");
5610
5614
  }
5611
- function Js(e, t) {
5615
+ function Ys(e, t) {
5612
5616
  let n = [];
5613
- for (let t of Us) {
5617
+ for (let t of Ws) {
5614
5618
  let r = 0;
5615
5619
  for (;;) {
5616
5620
  let i = e.indexOf(t.prefix, r);
@@ -5623,35 +5627,35 @@ function Js(e, t) {
5623
5627
  }
5624
5628
  if (n.sort((e, t) => e.idx - t.idx), !n.length) {
5625
5629
  let n = e.trim();
5626
- n && Ks(t.systemPrompt, X(n));
5630
+ n && qs(t.systemPrompt, X(n));
5627
5631
  return;
5628
5632
  }
5629
5633
  if (n[0].idx > 0) {
5630
5634
  let r = e.slice(0, n[0].idx).trim();
5631
- r && Ks(t.systemPrompt, X(r));
5635
+ r && qs(t.systemPrompt, X(r));
5632
5636
  }
5633
5637
  for (let r = 0; r < n.length; r++) {
5634
5638
  let i = n[r].idx, a = r + 1 < n.length ? n[r + 1].idx : e.length, o = e.slice(i, a).trim();
5635
- o && Ks(t[n[r].key], X(o));
5639
+ o && qs(t[n[r].key], X(o));
5636
5640
  }
5637
5641
  }
5638
- function Ys(e, t = {}) {
5639
- let n = Gs(), r = -1;
5642
+ function Xs(e, t = {}) {
5643
+ let n = Ks(), r = -1;
5640
5644
  for (let t = e.length - 1; t >= 0; t--) if (e[t] instanceof a) {
5641
5645
  r = t;
5642
5646
  break;
5643
5647
  }
5644
5648
  for (let t = 0; t < e.length; t++) {
5645
5649
  let c = e[t];
5646
- if (c instanceof o) Js(qs(c), n);
5647
- else if (c instanceof a) Ks(n[t === r ? "current" : "history"], X(qs(c)));
5650
+ if (c instanceof o) Ys(Js(c), n);
5651
+ else if (c instanceof a) qs(n[t === r ? "current" : "history"], X(Js(c)));
5648
5652
  else if (c instanceof i) {
5649
5653
  let e = c.tool_calls ?? [];
5650
5654
  if (e.length) {
5651
5655
  let t = e.map((e) => JSON.stringify(e.args ?? {})).join(" ");
5652
- Ks(n.toolResults, X(t));
5653
- } else Ks(n.assistant, X(qs(c)));
5654
- } else c instanceof s ? Ks(n.toolResults, X(qs(c))) : Ks(n.other, X(qs(c)));
5656
+ qs(n.toolResults, X(t));
5657
+ } else qs(n.assistant, X(Js(c)));
5658
+ } else c instanceof s ? qs(n.toolResults, X(Js(c))) : qs(n.other, X(Js(c)));
5655
5659
  }
5656
5660
  let c = Object.values(n).filter((e) => e.tokens > 0);
5657
5661
  c.sort((e, t) => t.tokens - e.tokens);
@@ -5668,12 +5672,12 @@ function Ys(e, t = {}) {
5668
5672
  }
5669
5673
  //#endregion
5670
5674
  //#region src/core/harness/contextInspector.ts
5671
- function Xs(e = {}) {
5675
+ function Zs(e = {}) {
5672
5676
  let t, n = e.contextWindow;
5673
5677
  return {
5674
5678
  name: "context-inspector",
5675
5679
  async wrapModelCall(r, i) {
5676
- return t = Ys(r.messages, {
5680
+ return t = Xs(r.messages, {
5677
5681
  contextWindow: n,
5678
5682
  thresholdRatio: e.thresholdRatio
5679
5683
  }), i(r);
@@ -5684,13 +5688,13 @@ function Xs(e = {}) {
5684
5688
  }
5685
5689
  };
5686
5690
  }
5687
- function Zs(e) {
5691
+ function Qs(e) {
5688
5692
  let t = e?.content;
5689
5693
  if (!Array.isArray(t) || !t.length) return "";
5690
5694
  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");
5691
5695
  return e?.isError ? `工具错误:${n}` : n;
5692
5696
  }
5693
- async function Qs(e) {
5697
+ async function $s(e) {
5694
5698
  let t = new URL(e.url), n = e.requestInit;
5695
5699
  if (e.transport === "http") {
5696
5700
  let { StreamableHTTPClientTransport: e } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
@@ -5703,7 +5707,7 @@ async function Qs(e) {
5703
5707
  let { WebSocketClientTransport: r } = await import("@modelcontextprotocol/sdk/client/websocket.js");
5704
5708
  return new r(t);
5705
5709
  }
5706
- async function $s(e, t, n) {
5710
+ async function ec(e, t, n) {
5707
5711
  let r;
5708
5712
  try {
5709
5713
  return await Promise.race([e, new Promise((e, i) => {
@@ -5713,8 +5717,8 @@ async function $s(e, t, n) {
5713
5717
  clearTimeout(r);
5714
5718
  }
5715
5719
  }
5716
- function ec(e, t, n) {
5717
- return r(async (r) => Zs(await $s(t.callTool({
5720
+ function tc(e, t, n) {
5721
+ return r(async (r) => Qs(await ec(t.callTool({
5718
5722
  name: e.name,
5719
5723
  arguments: r
5720
5724
  }), e.name, n)), {
@@ -5723,8 +5727,8 @@ function ec(e, t, n) {
5723
5727
  schema: e.inputSchema
5724
5728
  });
5725
5729
  }
5726
- async function tc(e) {
5727
- let { Client: t } = await import("@modelcontextprotocol/sdk/client"), n = await Qs(e), r = new t({
5730
+ async function nc(e) {
5731
+ let { Client: t } = await import("@modelcontextprotocol/sdk/client"), n = await $s(e), r = new t({
5728
5732
  name: "page-agent-sdk",
5729
5733
  version: "1.0"
5730
5734
  }, { capabilities: {} }), i = e.timeoutMs ?? 15e3, a;
@@ -5742,19 +5746,19 @@ async function tc(e) {
5742
5746
  }
5743
5747
  let { tools: o } = await r.listTools();
5744
5748
  return {
5745
- tools: o.map((t) => ec(t, r, e.callTimeoutMs ?? 6e4)),
5749
+ tools: o.map((t) => tc(t, r, e.callTimeoutMs ?? 6e4)),
5746
5750
  close: () => r.close()
5747
5751
  };
5748
5752
  }
5749
5753
  //#endregion
5750
5754
  //#region src/core/sdk/promptBuilder.ts
5751
- var nc = [
5755
+ var rc = [
5752
5756
  "你是一个 JSON 操作助手。集成方声明了一个主数据对象(含 zod schema 校验),你通过专用工具安全地读写它来完成任务。",
5753
5757
  "所有写操作都经范围控制(仅 schema 声明字段内)与 schema 校验(不合法会返回结构化错误而非写入),并自动留快照可回退。",
5754
5758
  "大对象/数组优先用增量 patch(只发改动)而非整体重传,避免输出被截断。",
5755
5759
  "---",
5756
5760
  ga.reliableWriteRules
5757
- ].join("\n\n"), rc = [
5761
+ ].join("\n\n"), ic = [
5758
5762
  "You are a JSON operations assistant. The integrator declared a main data object (with zod schema validation); you complete tasks by reading and writing it safely through dedicated tools.",
5759
5763
  "All writes go through scope control (only schema-declared fields) and schema validation (invalid writes return a structured error instead of being applied), with automatic snapshots for rollback.",
5760
5764
  "For large objects/arrays prefer incremental patches (send only the change) over resending the whole value, to avoid output truncation.",
@@ -5762,57 +5766,57 @@ var nc = [
5762
5766
  "---",
5763
5767
  ga.reliableWriteRulesEn
5764
5768
  ].join("\n\n");
5765
- function ic(e, t) {
5769
+ function ac(e, t) {
5766
5770
  if (!e) return "";
5767
5771
  let n = ba(e.schema, t);
5768
5772
  return `\n\n## 可操作数据(字段以 read 工具返回的实际值为准)\n${e.description ? e.description + "\n" : ""}${n}`;
5769
5773
  }
5770
- function ac(e) {
5774
+ function oc(e) {
5771
5775
  let t = e.locale === "en-US", n = t ? ga.reliableWriteRulesEn : ga.reliableWriteRules, r = e.appendReliableWriteRules !== !1;
5772
- return e.systemPrompt ? r ? e.systemPrompt + "\n\n---\n\n" + n : e.systemPrompt : t ? rc : nc;
5776
+ return e.systemPrompt ? r ? e.systemPrompt + "\n\n---\n\n" + n : e.systemPrompt : t ? ic : rc;
5773
5777
  }
5774
- var oc = {
5778
+ var sc = {
5775
5779
  largeResults: 4 * 1024 * 1024,
5776
5780
  drafts: 2 * 1024 * 1024,
5777
5781
  userFiles: 2 * 1024 * 1024,
5778
5782
  resources: 4 * 1024 * 1024
5779
- }, sc = [
5783
+ }, cc = [
5780
5784
  "largeResults",
5781
5785
  "drafts",
5782
5786
  "userFiles",
5783
5787
  "resources"
5784
- ], cc = .9;
5785
- function lc(e, t = {}) {
5788
+ ], lc = .9;
5789
+ function uc(e, t = {}) {
5786
5790
  let n = Object.create(null);
5787
- if (e) for (let [t, r] of Object.entries(e)) n[pc(t)] = {
5791
+ if (e) for (let [t, r] of Object.entries(e)) n[mc(t)] = {
5788
5792
  content: r,
5789
- updatedAt: hc()
5793
+ updatedAt: gc()
5790
5794
  };
5791
5795
  let { persist: r } = t, i = t.maxBytes ?? 8388608, a = {
5792
- ...oc,
5796
+ ...sc,
5793
5797
  ...t.poolBytes ?? {}
5794
5798
  };
5795
5799
  function o(e) {
5796
- let t = pc(e);
5800
+ let t = mc(e);
5797
5801
  return t.startsWith("large_results/") ? "largeResults" : t.startsWith("drafts/") ? "drafts" : t.startsWith("resources/") ? "resources" : "userFiles";
5798
5802
  }
5799
5803
  function s(e) {
5800
5804
  let t = 0;
5801
- for (let [r, i] of Object.entries(n)) o(r) === e && (t += dc(i.content));
5805
+ for (let [r, i] of Object.entries(n)) o(r) === e && (t += fc(i.content));
5802
5806
  return t;
5803
5807
  }
5804
5808
  function c() {
5805
- for (let e of sc) {
5809
+ for (let e of cc) {
5806
5810
  let t = a[e];
5807
5811
  if (s(e) <= t) continue;
5808
- let r = t * cc, i = e === "largeResults", c = i && s(e) > t * 1.5;
5812
+ let r = t * lc, i = e === "largeResults", c = i && s(e) > t * 1.5;
5809
5813
  c && console.warn(`[page-agent-sdk] vfs large_results 池 ${s(e)} > ${Math.round(t * 1.5)}(被引用撑爆)→ 无视 protectedRefs 强制删`);
5810
5814
  let l = Object.entries(n).filter(([t]) => o(t) === e).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
5811
5815
  for (let [t] of l) if (!(i && !c && u.has(t)) && (delete n[t], s(e) <= r)) break;
5812
5816
  }
5813
- if (fc(n) > i) {
5814
- let e = i * cc, t = fc(n) > i * 1.5, r = Object.entries(n).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
5815
- for (let [i] of r) if (!(o(i) === "largeResults" && !t && u.has(i)) && (delete n[i], fc(n) <= e)) break;
5817
+ if (pc(n) > i) {
5818
+ let e = i * lc, t = pc(n) > i * 1.5, r = Object.entries(n).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
5819
+ for (let [i] of r) if (!(o(i) === "largeResults" && !t && u.has(i)) && (delete n[i], pc(n) <= e)) break;
5816
5820
  }
5817
5821
  }
5818
5822
  let l = !0, u = /* @__PURE__ */ new Set(), d = null;
@@ -5847,10 +5851,10 @@ function lc(e, t = {}) {
5847
5851
  u = e;
5848
5852
  },
5849
5853
  getPoolOf: (e) => o(e),
5850
- getPoolLimit: (e) => a[e] ?? oc.userFiles
5854
+ getPoolLimit: (e) => a[e] ?? sc.userFiles
5851
5855
  };
5852
5856
  return r && (m.hydrate = (e) => {
5853
- for (let [t, r] of Object.entries(e)) n[pc(t)] = r;
5857
+ for (let [t, r] of Object.entries(e)) n[mc(t)] = r;
5854
5858
  c(), l = !0;
5855
5859
  }, m.flush = () => {
5856
5860
  d &&= (clearTimeout(d), null), f();
@@ -5859,19 +5863,19 @@ function lc(e, t = {}) {
5859
5863
  p(), l = !0;
5860
5864
  }), m;
5861
5865
  }
5862
- var uc = null;
5863
- function dc(e) {
5864
- return uc ||= new TextEncoder(), uc.encode(e).length;
5865
- }
5866
+ var dc = null;
5866
5867
  function fc(e) {
5868
+ return dc ||= new TextEncoder(), dc.encode(e).length;
5869
+ }
5870
+ function pc(e) {
5867
5871
  let t = 0;
5868
- for (let n of Object.values(e)) t += dc(n.content);
5872
+ for (let n of Object.values(e)) t += fc(n.content);
5869
5873
  return t;
5870
5874
  }
5871
- function pc(e) {
5875
+ function mc(e) {
5872
5876
  return e.replace(/^\/+/, "").replace(/\/+/g, "/");
5873
5877
  }
5874
- function mc(e) {
5878
+ function hc(e) {
5875
5879
  let t = "";
5876
5880
  for (let n = 0; n < e.length; n++) {
5877
5881
  let r = e[n];
@@ -5879,10 +5883,10 @@ function mc(e) {
5879
5883
  }
5880
5884
  return RegExp("^" + t + "$");
5881
5885
  }
5882
- function hc() {
5886
+ function gc() {
5883
5887
  return Date.now();
5884
5888
  }
5885
- var gc = [
5889
+ var _c = [
5886
5890
  "vfs_read",
5887
5891
  "vfs_write",
5888
5892
  "vfs_edit",
@@ -5893,10 +5897,10 @@ var gc = [
5893
5897
  "vfs_json_patch",
5894
5898
  "vfs_rm"
5895
5899
  ];
5896
- function _c(e) {
5900
+ function vc(e) {
5897
5901
  return [
5898
5902
  r(async ({ path: t, offset: n, limit: r }) => {
5899
- let i = e.files[pc(t)];
5903
+ let i = e.files[mc(t)];
5900
5904
  if (!i) return Y({
5901
5905
  code: "NOT_FOUND",
5902
5906
  path: t,
@@ -5915,7 +5919,7 @@ function _c(e) {
5915
5919
  })
5916
5920
  }),
5917
5921
  r(async ({ path: t, content: n, jsonString: r }) => {
5918
- let i = pc(t), a = e.getPoolLimit?.(e.getPoolOf?.(i) ?? "userFiles") ?? 2 * 1024 * 1024, o = dc(n);
5922
+ let i = mc(t), a = e.getPoolLimit?.(e.getPoolOf?.(i) ?? "userFiles") ?? 2 * 1024 * 1024, o = fc(n);
5919
5923
  if (o > a) {
5920
5924
  let n = e.getPoolOf?.(i) ?? "userFiles";
5921
5925
  return Y({
@@ -5937,7 +5941,7 @@ function _c(e) {
5937
5941
  }
5938
5942
  return e.files[i] = {
5939
5943
  content: n,
5940
- updatedAt: hc()
5944
+ updatedAt: gc()
5941
5945
  }, `已写入 ${t}(${n.length} 字符)${r ? "(JSON 校验通过)" : ""}`;
5942
5946
  }, {
5943
5947
  name: "vfs_write",
@@ -5949,7 +5953,7 @@ function _c(e) {
5949
5953
  })
5950
5954
  }),
5951
5955
  r(async ({ path: t, oldString: n, newString: r }) => {
5952
- let i = pc(t), a = e.files[i];
5956
+ let i = mc(t), a = e.files[i];
5953
5957
  if (!a) return Y({
5954
5958
  code: "NOT_FOUND",
5955
5959
  path: t,
@@ -5979,7 +5983,7 @@ function _c(e) {
5979
5983
  }
5980
5984
  return e.files[i] = {
5981
5985
  content: a.content.replace(n, r),
5982
- updatedAt: hc()
5986
+ updatedAt: gc()
5983
5987
  }, `已替换 ${t} 中 1 处。`;
5984
5988
  }, {
5985
5989
  name: "vfs_edit",
@@ -6001,7 +6005,7 @@ function _c(e) {
6001
6005
  r(async ({ pattern: t }) => {
6002
6006
  let n;
6003
6007
  try {
6004
- n = mc(t);
6008
+ n = hc(t);
6005
6009
  } catch (e) {
6006
6010
  return Y({
6007
6011
  code: "GLOB_INVALID",
@@ -6030,7 +6034,7 @@ function _c(e) {
6030
6034
  details: { pattern: t }
6031
6035
  });
6032
6036
  }
6033
- let i = n ? [pc(n)] : Object.keys(e.files), a = [];
6037
+ let i = n ? [mc(n)] : Object.keys(e.files), a = [];
6034
6038
  for (let t of i) {
6035
6039
  let n = e.files[t];
6036
6040
  n && n.content.split("\n").forEach((e, n) => {
@@ -6047,7 +6051,7 @@ function _c(e) {
6047
6051
  })
6048
6052
  }),
6049
6053
  r(async ({ path: t, jsonPath: n }) => {
6050
- let r = pc(t), i = e.files[r];
6054
+ let r = mc(t), i = e.files[r];
6051
6055
  if (!i) return Y({
6052
6056
  code: "NOT_FOUND",
6053
6057
  path: t,
@@ -6084,7 +6088,7 @@ function _c(e) {
6084
6088
  })
6085
6089
  }),
6086
6090
  r(async ({ path: t, patches: n }) => {
6087
- let r = pc(t), i = e.files[r];
6091
+ let r = mc(t), i = e.files[r];
6088
6092
  if (!i) return Y({
6089
6093
  code: "NOT_FOUND",
6090
6094
  path: t,
@@ -6117,7 +6121,7 @@ function _c(e) {
6117
6121
  let c = JSON.stringify(o);
6118
6122
  return e.files[r] = {
6119
6123
  content: c,
6120
- updatedAt: hc()
6124
+ updatedAt: gc()
6121
6125
  }, `已对 ${t} 应用 ${n.length} 个 patch(影响 ${s.length} 处:${s.join(", ")}),文件现 ${c.length} 字符`;
6122
6126
  }, {
6123
6127
  name: "vfs_json_patch",
@@ -6137,7 +6141,7 @@ function _c(e) {
6137
6141
  })
6138
6142
  }),
6139
6143
  r(async ({ path: t }) => {
6140
- let n = pc(t);
6144
+ let n = mc(t);
6141
6145
  return e.files[n] ? (delete e.files[n], `已删除 ${t}`) : Y({
6142
6146
  code: "NOT_FOUND",
6143
6147
  path: t,
@@ -6151,16 +6155,16 @@ function _c(e) {
6151
6155
  })
6152
6156
  ];
6153
6157
  }
6154
- function vc(e) {
6158
+ function yc(e) {
6155
6159
  return {
6156
6160
  name: "vfs",
6157
- tools: _c(e),
6161
+ tools: vc(e),
6158
6162
  beforeAgent: () => ({ files: e.files })
6159
6163
  };
6160
6164
  }
6161
6165
  //#endregion
6162
6166
  //#region src/core/tools/htmlValidate.ts
6163
- var yc = /* @__PURE__ */ new Set([
6167
+ var bc = /* @__PURE__ */ new Set([
6164
6168
  "area",
6165
6169
  "base",
6166
6170
  "br",
@@ -6175,8 +6179,8 @@ var yc = /* @__PURE__ */ new Set([
6175
6179
  "source",
6176
6180
  "track",
6177
6181
  "wbr"
6178
- ]), bc = /* @__PURE__ */ new Set(["script", "style"]);
6179
- function xc(e) {
6182
+ ]), xc = /* @__PURE__ */ new Set(["script", "style"]);
6183
+ function Sc(e) {
6180
6184
  let t = [], n = e.length;
6181
6185
  if (!e.trim()) return t;
6182
6186
  let r = [0];
@@ -6253,8 +6257,8 @@ function xc(e) {
6253
6257
  }
6254
6258
  continue;
6255
6259
  }
6256
- if (!(yc.has(p) || m)) {
6257
- if (bc.has(p)) {
6260
+ if (!(bc.has(p) || m)) {
6261
+ if (xc.has(p)) {
6258
6262
  let n = RegExp(`</${p}\\s*>`, "i").exec(e.slice(o));
6259
6263
  if (!n) {
6260
6264
  t.push({
@@ -6283,8 +6287,8 @@ function xc(e) {
6283
6287
  }
6284
6288
  //#endregion
6285
6289
  //#region src/core/sdk/codeAssetMiddleware.ts
6286
- var Sc = "__pgTouched", Cc = "__pgFinalText", wc = "__pgCodeHashes", Tc = "__pgNotes", Ec = 200;
6287
- function Dc(e) {
6290
+ var Cc = "__pgTouched", wc = "__pgFinalText", Tc = "__pgCodeHashes", Ec = "__pgKeepExternal", Dc = "__pgNotes", Oc = 200;
6291
+ function kc(e) {
6288
6292
  let t = [];
6289
6293
  for (let n of e.split("\n")) {
6290
6294
  let e = n.match(/^\s*[-*]?\s*\[note\]\s*(.*)$/i);
@@ -6292,27 +6296,27 @@ function Dc(e) {
6292
6296
  }
6293
6297
  return [...new Set(t)];
6294
6298
  }
6295
- function Oc(e, t) {
6296
- let n = Array.isArray(e[Tc]) ? e[Tc].filter((e) => typeof e == "string") : [];
6297
- e[Tc] = [.../* @__PURE__ */ new Set([...n, ...t])].map((e) => e.length > Ec ? e.slice(0, Ec) + "…" : e).slice(-5);
6299
+ function Ac(e, t) {
6300
+ let n = Array.isArray(e[Dc]) ? e[Dc].filter((e) => typeof e == "string") : [];
6301
+ e[Dc] = [.../* @__PURE__ */ new Set([...n, ...t])].map((e) => e.length > Oc ? e.slice(0, Oc) + "…" : e).slice(-5);
6298
6302
  }
6299
- function kc(e) {
6303
+ function jc(e) {
6300
6304
  let t = 5381;
6301
6305
  for (let n = 0; n < e.length; n++) t = (t << 5) + t + e.charCodeAt(n) | 0;
6302
6306
  return (t >>> 0).toString(16);
6303
6307
  }
6304
- function Ac(e, t) {
6308
+ function Mc(e, t) {
6305
6309
  let n = [];
6306
- return Mc(e, t, (e) => {
6310
+ return Pc(e, t, (e) => {
6307
6311
  typeof e.name == "string" && e.name && n.push(e.name);
6308
6312
  }), n;
6309
6313
  }
6310
- function jc(e, t) {
6314
+ function Nc(e, t) {
6311
6315
  if (!e.startsWith(t)) return null;
6312
6316
  let n = e.slice(t.length), r = n.lastIndexOf(".");
6313
6317
  return (r > 0 ? n.slice(0, r) : r === 0 ? "" : n) || null;
6314
6318
  }
6315
- function Mc(e, t, n) {
6319
+ function Pc(e, t, n) {
6316
6320
  if (!(!e || typeof e != "object")) for (let r of t) {
6317
6321
  let t = Z(e, r);
6318
6322
  if (Array.isArray(t)) for (let e = 0; e < t.length; e++) {
@@ -6321,7 +6325,7 @@ function Mc(e, t, n) {
6321
6325
  }
6322
6326
  }
6323
6327
  }
6324
- function Nc(e, t, n) {
6328
+ function Fc(e, t, n) {
6325
6329
  let r = /* @__PURE__ */ new Set();
6326
6330
  if (!e || typeof e != "object") return r;
6327
6331
  for (let i of t) {
@@ -6340,17 +6344,17 @@ function Nc(e, t, n) {
6340
6344
  }
6341
6345
  return r;
6342
6346
  }
6343
- function Pc(e) {
6347
+ function Ic(e) {
6344
6348
  let { writablePaths: t, codeVfsPrefix: n, ext: r, codeField: i = "code", onWarning: a, getController: o, vfsStore: s, craftNotes: c = !0 } = e;
6345
6349
  return {
6346
6350
  name: "code-asset-checkout-commit",
6347
6351
  beforeAgent: (e) => {
6348
6352
  let c = o()?.get?.().bind, l = 0, u = 0, d = /* @__PURE__ */ new Map();
6349
- if (Mc(c, t, (e) => {
6353
+ if (Pc(c, t, (e) => {
6350
6354
  l++;
6351
6355
  let t = Z(e, i);
6352
6356
  if (typeof t == "string") {
6353
- u++, d.set(e.__pgId, kc(t));
6357
+ u++, d.set(e.__pgId, jc(t));
6354
6358
  let i = `${n}${e.__pgId}.${r}`;
6355
6359
  s.files[i] = {
6356
6360
  content: t,
@@ -6370,22 +6374,23 @@ function Pc(e) {
6370
6374
  }
6371
6375
  return {
6372
6376
  files: s.files,
6373
- [Sc]: /* @__PURE__ */ new Set(),
6374
- [Cc]: { text: "" },
6375
- [wc]: d
6377
+ [Cc]: /* @__PURE__ */ new Set(),
6378
+ [wc]: { text: "" },
6379
+ [Tc]: d,
6380
+ [Ec]: []
6376
6381
  };
6377
6382
  },
6378
6383
  wrapModelCall: async (e, t) => {
6379
- let n = await t(e), r = e.state[Cc];
6384
+ let n = await t(e), r = e.state[wc];
6380
6385
  return r && !(n.toolCalls && n.toolCalls.length) && typeof n.content == "string" && n.content && (r.text = n.content), n;
6381
6386
  },
6382
6387
  augmentPrompt: () => {
6383
6388
  let e = o()?.get?.().bind, i = [], a = 0;
6384
- if (Mc(e, t, (e, t, o) => {
6389
+ if (Pc(e, t, (e, t, o) => {
6385
6390
  a++;
6386
6391
  let l = typeof e.name == "string" && e.name ? e.name : "", u = l ? `${l} [${o}]` : `(未命名 [${o}])`, d = `${n}${e.__pgId}.${r}`, f = !!s.files[d];
6387
6392
  if (i.push(`- ${u} → ${d}${f ? "" : "(尚未检出,先 vfs_write 创建)"}`), c) {
6388
- let t = Array.isArray(e[Tc]) ? e[Tc].filter((e) => typeof e == "string") : [];
6393
+ let t = Array.isArray(e[Dc]) ? e[Dc].filter((e) => typeof e == "string") : [];
6389
6394
  if (t.length) {
6390
6395
  let e = t[t.length - 1];
6391
6396
  i.push(` 📝 笔记×${t.length}(最近):${e.length > 120 ? e.slice(0, 120) + "…" : e}`);
@@ -6403,13 +6408,13 @@ function Pc(e) {
6403
6408
  return `## 组件代码文件地图(改组件时按 name 直接改对应 vfs 文件;框架自动 checkout/commit)${c ? "\n📝 笔记 = 前任维护者交接(设计决策/用户反馈/踩坑),改该组件时遵循;收口回复末行必须附一行 [note] 交接笔记(本组件本次的实现要点),框架存进组件转交下任" : ""}\n${i.join("\n")}${l}`;
6404
6409
  },
6405
6410
  wrapToolCall: async (e, i) => {
6406
- let a = e.name === "vfs_write" || e.name === "vfs_edit" || e.name === "vfs_rm" ? e.args?.path : void 0, s = typeof a == "string" ? pc(a) : void 0, c = typeof s == "string" && s.startsWith(n);
6411
+ let a = e.name === "vfs_write" || e.name === "vfs_edit" || e.name === "vfs_rm" ? e.args?.path : void 0, s = typeof a == "string" ? mc(a) : void 0, c = typeof s == "string" && s.startsWith(n);
6407
6412
  if (c) {
6408
6413
  let i = e.state.focuses;
6409
6414
  if (i && i.length) {
6410
- let e = Nc(o()?.get?.().bind, t, i);
6415
+ let e = Fc(o()?.get?.().bind, t, i);
6411
6416
  if (e.size) {
6412
- let t = jc(s, n);
6417
+ let t = Nc(s, n);
6413
6418
  if (t && !e.has(t)) return {
6414
6419
  content: `PATH_DENIED · vfs 越界:当前聚焦代码文件 [${[...e].map((e) => `${n}${e}.${r}`).join(", ")}],你要改的 "${s}" 不在其中。请只改焦点组件的代码文件;如需改其他组件,请在收口回复中说明需先取消聚焦(焦点由主会话/用户管理,你无 focus 工具)后重试。`,
6415
6420
  status: "error"
@@ -6419,7 +6424,7 @@ function Pc(e) {
6419
6424
  }
6420
6425
  let l = await i(e);
6421
6426
  if (c) {
6422
- let t = e.state[Sc];
6427
+ let t = e.state[Cc];
6423
6428
  t && t.add(s);
6424
6429
  }
6425
6430
  return l;
@@ -6427,52 +6432,54 @@ function Pc(e) {
6427
6432
  afterAgent: (e) => {
6428
6433
  let a = o(), l = a?.get?.().bind;
6429
6434
  if (!l) return;
6430
- let u = e[Sc] ?? /* @__PURE__ */ new Set();
6435
+ let u = e[Cc] ?? /* @__PURE__ */ new Set();
6431
6436
  if (u.size) {
6432
- let o = e[wc] ?? /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Set();
6433
- Mc(l, t, (e) => {
6434
- let t = e.__pgId;
6435
- c.add(t);
6436
- let a = `${n}${t}.${r}`;
6437
- if (u.has(a)) try {
6438
- let n = s.files[a];
6437
+ let o = e[Tc] ?? /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Set();
6438
+ Pc(l, t, (t) => {
6439
+ let a = t.__pgId;
6440
+ c.add(a);
6441
+ let l = `${n}${a}.${r}`;
6442
+ if (u.has(l)) try {
6443
+ let n = s.files[l];
6439
6444
  if (n && typeof n.content == "string") {
6440
- let r = o.get(t);
6445
+ let r = o.get(a);
6441
6446
  if (r !== void 0) {
6442
- let n = Z(e, i);
6443
- if (typeof n != "string" || kc(n) !== r) {
6444
- console.warn(`[page-agent-sdk][code-asset] 组件 ${e.name ?? t}(${a})在修改期间被外部更新,已保留外部版本(keep_external),本次子 agent 修改未提交`);
6447
+ let n = Z(t, i);
6448
+ if (typeof n != "string" || jc(n) !== r) {
6449
+ console.warn(`[page-agent-sdk][code-asset] 组件 ${t.name ?? a}(${l})在修改期间被外部更新,已保留外部版本(keep_external),本次子 agent 修改未提交`);
6450
+ let n = e[Ec], r = String(t.name ?? a);
6451
+ Array.isArray(n) ? n.push(r) : e[Ec] = [r];
6445
6452
  return;
6446
6453
  }
6447
6454
  }
6448
- let s = xc(n.content);
6455
+ let s = Sc(n.content);
6449
6456
  if (s.length) {
6450
- console.warn(`[page-agent-sdk][code-asset] 跳过 commit 未通过校验的半成品(可能 abort/timeout 未跑完 verify):${a} - ${s[0].message}(${s[0].code})`);
6457
+ console.warn(`[page-agent-sdk][code-asset] 跳过 commit 未通过校验的半成品(可能 abort/timeout 未跑完 verify):${l} - ${s[0].message}(${s[0].code})`);
6451
6458
  return;
6452
6459
  }
6453
- Na(e, i, n.content);
6460
+ Na(t, i, n.content);
6454
6461
  }
6455
6462
  } catch (e) {
6456
- console.warn(`[page-agent-sdk][code-asset] 组件 commit 失败已跳过(其余组件不受影响):${a} - ${String(e?.message ?? e)}`);
6463
+ console.warn(`[page-agent-sdk][code-asset] 组件 commit 失败已跳过(其余组件不受影响):${l} - ${String(e?.message ?? e)}`);
6457
6464
  }
6458
6465
  });
6459
6466
  for (let e of u) {
6460
- let t = jc(e, n);
6467
+ let t = Nc(e, n);
6461
6468
  t && !c.has(t) && (console.warn(`[page-agent-sdk][code-asset] 组件 ${t}(${e})已被外部删除,放弃 commit 并清理 vfs 工作副本(不复活组件)`), delete s.files[e]);
6462
6469
  }
6463
6470
  a?.markDataDirty?.(), a?.recomputeBaseline?.();
6464
6471
  }
6465
6472
  if (!c) return;
6466
- let d = Dc(e[Cc]?.text ?? "");
6473
+ let d = kc(e[wc]?.text ?? "");
6467
6474
  if (!d.length) return;
6468
6475
  let f = [];
6469
- if (Mc(l, t, (e) => {
6476
+ if (Pc(l, t, (e) => {
6470
6477
  (u.size === 0 || u.has(`${n}${e.__pgId}.${r}`)) && f.push(e);
6471
6478
  }), !f.length) return;
6472
6479
  let p = !1;
6473
6480
  for (let e of d) {
6474
6481
  let t = f.length === 1 ? f[0] : f.find((t) => typeof t.name == "string" && !!t.name && e.includes(t.name));
6475
- t && (Oc(t, [e]), p = !0);
6482
+ t && (Ac(t, [e]), p = !0);
6476
6483
  }
6477
6484
  p && a?.markDataDirty?.();
6478
6485
  }
@@ -6480,7 +6487,7 @@ function Pc(e) {
6480
6487
  }
6481
6488
  //#endregion
6482
6489
  //#region src/core/sdk/componentLock.ts
6483
- function Fc() {
6490
+ function Lc() {
6484
6491
  let e = /* @__PURE__ */ new Map();
6485
6492
  return {
6486
6493
  async acquire(t, n) {
@@ -6519,7 +6526,7 @@ function Fc() {
6519
6526
  }
6520
6527
  };
6521
6528
  }
6522
- function Ic(e, t) {
6529
+ function Rc(e, t) {
6523
6530
  if (Array.isArray(e.components) && e.components.length) {
6524
6531
  let n = new Set(t), r = [...new Set(e.components.filter((e) => typeof e == "string" && e && n.has(e)))];
6525
6532
  if (r.length) return {
@@ -6536,12 +6543,12 @@ function Ic(e, t) {
6536
6543
  via: "none"
6537
6544
  };
6538
6545
  }
6539
- function Lc(e, t, n) {
6546
+ function zc(e, t, n) {
6540
6547
  let r = new Set(n);
6541
6548
  if (!r.size || !e || typeof e != "object") return [];
6542
6549
  let i = [];
6543
6550
  for (let n of t) {
6544
- let t = Rc(e, n);
6551
+ let t = Bc(e, n);
6545
6552
  if (Array.isArray(t)) for (let e = 0; e < t.length; e++) {
6546
6553
  let a = t[e];
6547
6554
  a && typeof a == "object" && typeof a.name == "string" && r.has(a.name) && i.push(`${n}.${e}`);
@@ -6549,7 +6556,7 @@ function Lc(e, t, n) {
6549
6556
  }
6550
6557
  return i;
6551
6558
  }
6552
- function Rc(e, t) {
6559
+ function Bc(e, t) {
6553
6560
  let n = e;
6554
6561
  for (let e of t.split(".")) {
6555
6562
  if (!n || typeof n != "object") return;
@@ -6557,15 +6564,26 @@ function Rc(e, t) {
6557
6564
  }
6558
6565
  return n;
6559
6566
  }
6560
- function zc(e, t) {
6567
+ function Vc(e, t) {
6561
6568
  return t.some((t) => e === t || e.startsWith(t + "."));
6562
6569
  }
6563
- function Bc(e) {
6570
+ function Hc(e, t) {
6571
+ let n = [];
6572
+ for (let { writablePaths: r, codeField: i } of t) for (let t of r) {
6573
+ let r = Bc(e, t);
6574
+ if (Array.isArray(r)) for (let e = 0; e < r.length; e++) {
6575
+ let a = r[e];
6576
+ a && typeof a == "object" && typeof Bc(a, i) == "string" && n.push(`${t}.${e}.${i}`);
6577
+ }
6578
+ }
6579
+ return n;
6580
+ }
6581
+ function Uc(e) {
6564
6582
  let t = e ?? {}, n = /* @__PURE__ */ new Set();
6565
6583
  if (typeof t.jsonPath == "string" && t.jsonPath && n.add(t.jsonPath), typeof t.path == "string" && t.path && n.add(t.path), t.patch && typeof t.patch.jsonPath == "string" && t.patch.jsonPath && n.add(t.patch.jsonPath), Array.isArray(t.patches)) for (let e of t.patches) e && typeof e.jsonPath == "string" && e.jsonPath && n.add(e.jsonPath);
6566
6584
  return [...n];
6567
6585
  }
6568
- function Vc(e) {
6586
+ function Wc(e) {
6569
6587
  return {
6570
6588
  name: "component-write-guard",
6571
6589
  wrapToolCall: async (t, n) => {
@@ -6584,26 +6602,36 @@ function Vc(e) {
6584
6602
  status: "error"
6585
6603
  };
6586
6604
  }
6587
- let a = e.getLocked(), o = Object.keys(a);
6605
+ let a = e.getLocked(), o = Object.keys(a), s = e.getCodeFieldPaths?.() ?? [], c = Uc(i);
6606
+ if (s.length) {
6607
+ let t = c.filter((e) => Vc(e, s));
6608
+ if (t.length) return e.onReject?.({
6609
+ paths: t,
6610
+ lockedPrefixes: s,
6611
+ owner: "(codeField 恒守卫)"
6612
+ }), {
6613
+ content: `CUSTOM_CODE_DELEGATION · 写目标 [${t.join(", ")}] 是代码组件的代码字段,主 agent 不可直接写(会绕过 vfs 工作副本与格式校验,且可能覆盖外部/人工修改)。修改该组件须委派代码组件子 agent(use_html / use_<id>);若此前委派结果提示 keep_external(外部修改已保留),先向用户说明并确认后再委派,勿自行改写。`,
6614
+ status: "error"
6615
+ };
6616
+ }
6588
6617
  if (!o.length) return n(t);
6589
- let s = Lc(e.getBind(), e.writablePaths, o);
6590
- if (!s.length) return n(t);
6591
- let c = Bc(i);
6618
+ let l = zc(e.getBind(), e.writablePaths, o);
6619
+ if (!l.length) return n(t);
6592
6620
  if (!c.length) return e.onReject?.({
6593
6621
  paths: ["(整体 set)"],
6594
- lockedPrefixes: s,
6622
+ lockedPrefixes: l,
6595
6623
  owner: o.join(",")
6596
6624
  }), {
6597
6625
  content: `COMPONENT_LOCKED · 组件 [${o.join(", ")}] 正在被子 agent 修改,整体写入会触碰它们。请改用增量 patch(write({patch:{jsonPath,...}}))只写未锁定组件,或等委派结束后再整体操作。`,
6598
6626
  status: "error"
6599
6627
  };
6600
- let l = c.filter((e) => zc(e, s));
6601
- return l.length ? (e.onReject?.({
6602
- paths: l,
6603
- lockedPrefixes: s,
6628
+ let u = c.filter((e) => Vc(e, l));
6629
+ return u.length ? (e.onReject?.({
6630
+ paths: u,
6631
+ lockedPrefixes: l,
6604
6632
  owner: o.join(",")
6605
6633
  }), {
6606
- content: `COMPONENT_LOCKED · 写目标 [${l.join(", ")}] 命中的组件正在被子 agent 修改(委派结束后自动解锁)。请先做其他组件/其他操作,稍后再写该组件;若需改它,等本轮委派完成后再试。`,
6634
+ content: `COMPONENT_LOCKED · 写目标 [${u.join(", ")}] 命中的组件正在被子 agent 修改(委派结束后自动解锁)。请先做其他组件/其他操作,稍后再写该组件;若需改它,等本轮委派完成后再试。`,
6607
6635
  status: "error"
6608
6636
  }) : n(t);
6609
6637
  }
@@ -6611,7 +6639,7 @@ function Vc(e) {
6611
6639
  }
6612
6640
  //#endregion
6613
6641
  //#region src/core/sdk/htmlSubagent.ts
6614
- function Hc(e, t, n) {
6642
+ function Gc(e, t, n) {
6615
6643
  let r = "html";
6616
6644
  return `你是纯代码组件生成专家。可用工具:vfs_write / vfs_edit / vfs_rm(写/改/删代码工作副本 vfs ${e}) / vfs_read + vfs_grep(读 vfs) / validate_code(代码格式自检) / write(写 data,writablePaths 限定;set/patch 增量或整体) / read / write_todos + update_todo(规划)。
6617
6645
 
@@ -6665,7 +6693,7 @@ ${`- 输出形态:完整、自包含的 HTML 页面(.${r},可独立成页)`}
6665
6693
  - 一次想清楚 → 动手 → 验证 → 收口。**思考是手段不是目的,产出代码才是**。
6666
6694
  8. **收口格式(必守,最后一行)**:收口回复 = 简短结果总结 + **末行交接笔记** \`[note] <一句话实现要点>\` —— 关键设计决策 / 用户偏好 / 踩坑(如「[note] 液面用 height keyframes 4.2s 循环;装饰仅灯串+光斑 2 类」)。框架只识别末尾 [note] 行存进组件、自动转交下次维护该组件的子 agent;**漏写 = 下任失去交接**(真 LLM 实测漏写率 3/4,务必末行带上)。一行内,只写可复用结论。`;
6667
6695
  }
6668
- function Uc(e, t) {
6696
+ function Kc(e, t) {
6669
6697
  return `# HTML 完整页面生成规范
6670
6698
 
6671
6699
  ## 代码资产模型(重要)
@@ -6703,14 +6731,14 @@ function Uc(e, t) {
6703
6731
  - 语义化标签(button / nav / section);图片 alt;交互可键盘聚焦
6704
6732
  - 颜色对比达标;不只用颜色传达信息`;
6705
6733
  }
6706
- function Wc(e = "components", t = "code") {
6734
+ function qc(e = "components", t = "code") {
6707
6735
  return {
6708
6736
  name: "html-fragment",
6709
6737
  description: "完整 HTML 页面生成规范:代码作为 data 资产 / vfs 工作副本 / 完整自包含可独立成页 / script+CSS 集中放置 / 可引外部 JS/CSS / validate_code 自检 / 安全底线 / 可访问性",
6710
- getContent: () => Uc(e, t)
6738
+ getContent: () => Kc(e, t)
6711
6739
  };
6712
6740
  }
6713
- function Gc(e = {}) {
6741
+ function Jc(e = {}) {
6714
6742
  let t = e.vfsPrefix ?? "html/";
6715
6743
  return ({ state: e }) => {
6716
6744
  let n = e.files;
@@ -6718,7 +6746,7 @@ function Gc(e = {}) {
6718
6746
  let r = [];
6719
6747
  for (let [e, i] of Object.entries(n)) {
6720
6748
  if (!e.startsWith(t)) continue;
6721
- let n = xc(i.content);
6749
+ let n = Sc(i.content);
6722
6750
  for (let t of n) r.push(`${e} 第 ${t.line} 行:${t.message}(${t.code})`);
6723
6751
  }
6724
6752
  return r.length ? {
@@ -6727,7 +6755,7 @@ function Gc(e = {}) {
6727
6755
  } : { ok: !0 };
6728
6756
  };
6729
6757
  }
6730
- function Kc(e) {
6758
+ function Yc(e) {
6731
6759
  let n, i, a = {
6732
6760
  name: "html-validate-tools",
6733
6761
  beforeAgent: (e) => {
@@ -6762,7 +6790,7 @@ function Kc(e) {
6762
6790
  }
6763
6791
  let s = [];
6764
6792
  for (let e of o) {
6765
- let t = xc(e.content);
6793
+ let t = Sc(e.content);
6766
6794
  t.length && s.push(`${e.path}:\n${t.map((e) => ` 第 ${e.line} 行 ${e.message}(${e.code})`).join("\n")}`);
6767
6795
  }
6768
6796
  return s.length ? `❌ 格式校验未通过:\n${s.join("\n")}\n请用 vfs_edit 修正后重新调用 validate_code 复查。` : `✅ 格式校验通过(${o.map((e) => e.path).join(", ")}:标签闭合等结构合法)。`;
@@ -6780,16 +6808,16 @@ function Kc(e) {
6780
6808
  i = e;
6781
6809
  }, a;
6782
6810
  }
6783
- var qc = 2;
6784
- function Jc(e = {}) {
6811
+ var Xc = 2;
6812
+ function Zc(e = {}) {
6785
6813
  let { writablePaths: t, codeVfsPrefix: n = "html/", id: r = "html", description: i, planning: a = !0, summarization: o = !0, maxToolRounds: s = 12, temperature: c = .4, skills: l, extraTools: u, formatCheck: d = !0, codeField: f = "code", orchestratorPrompt: p = !0, craftNotes: m = !0 } = e;
6786
6814
  if (t !== void 0 && !Array.isArray(t)) throw Error("[page-agent-sdk][createHtmlSubagent] writablePaths 须为字符串数组(代码组件 data 区,如 [\"components\"])/ 省略以从 schema 自动推断");
6787
6815
  let h = [];
6788
- a && h.push(Ta()), d && (h.push(Kc(n)), h.push(As({ check: Gc({ vfsPrefix: n }) })));
6816
+ a && h.push(Ta()), d && (h.push(Yc(n)), h.push(js({ check: Jc({ vfsPrefix: n }) })));
6789
6817
  let g = u ?? [], _ = t?.[0] ?? "components", v = l === void 0, y = {
6790
6818
  id: r,
6791
6819
  description: i ?? `生成/修改纯代码组件(代码作为 data 资产,代码字段 ${f} 随 data 持久化;vfs 作工作副本;能规划(write_todos)+ 执行)。需写代码组件或灵活定制时委派`,
6792
- systemPrompt: Hc(n, f, _),
6820
+ systemPrompt: Gc(n, f, _),
6793
6821
  writablePaths: t ?? [],
6794
6822
  allowedTools: [
6795
6823
  "vfs_write",
@@ -6800,9 +6828,9 @@ function Jc(e = {}) {
6800
6828
  ],
6801
6829
  middleware: h.length ? h : void 0,
6802
6830
  summarization: o === !1 ? void 0 : o,
6803
- maxVerifyAttempts: d ? qc : void 0,
6831
+ maxVerifyAttempts: d ? Xc : void 0,
6804
6832
  temperature: c,
6805
- skills: v ? [Wc(_, f)] : l,
6833
+ skills: v ? [qc(_, f)] : l,
6806
6834
  maxToolRounds: s,
6807
6835
  tools: g.length ? g : void 0,
6808
6836
  _codeAsset: {
@@ -6815,12 +6843,12 @@ function Jc(e = {}) {
6815
6843
  }
6816
6844
  };
6817
6845
  return y._rebuildCodeAssetPaths = (e) => {
6818
- y.systemPrompt = Hc(n, f, e), v && (y.skills = [Wc(e, f)]);
6846
+ y.systemPrompt = Gc(n, f, e), v && (y.skills = [qc(e, f)]);
6819
6847
  }, y;
6820
6848
  }
6821
6849
  //#endregion
6822
6850
  //#region src/core/sdk/defineTool.ts
6823
- function Yc(e) {
6851
+ function Qc(e) {
6824
6852
  return r(async (t) => {
6825
6853
  let n = await e.handler(t);
6826
6854
  return typeof n == "string" ? n : JSON.stringify(n);
@@ -6832,7 +6860,7 @@ function Yc(e) {
6832
6860
  }
6833
6861
  //#endregion
6834
6862
  //#region src/core/sdk/inspectContextTool.ts
6835
- var Xc = t.object({
6863
+ var $c = t.object({
6836
6864
  path: t.string().optional().describe("分类 key 过滤(如 toolResults/history/systemPrompt/dataHint);不传=全部分类"),
6837
6865
  role: t.enum([
6838
6866
  "user",
@@ -6842,11 +6870,11 @@ var Xc = t.object({
6842
6870
  ]).optional().describe("聚焦每轮首句的角色(assistant→回复摘要,user→问题摘要);不影响工具列表"),
6843
6871
  limit: t.number().int().min(1).max(50).optional().describe("返回最近 N 轮(默认全部;超 50 自动截最近 50 防返回过大)")
6844
6872
  });
6845
- function Zc(e) {
6846
- return Yc({
6873
+ function el(e) {
6874
+ return Qc({
6847
6875
  name: "inspect_context",
6848
6876
  description: "查看当前对话上下文的构成(供压缩决策)。返回:totalTokens(历史轮次 token 总和,与触发判断同口径)、occupancy(窗口占用比)、contextWindow、categories(分类占用)、rounds(每轮 token/工具/首句)。先调用本工具查看构成,再决定压缩策略。",
6849
- schema: Xc,
6877
+ schema: $c,
6850
6878
  handler: (t) => {
6851
6879
  let n = Ho(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) => {
6852
6880
  let n = es(e), r = Wo(e), i = t.role === "assistant" ? e.assistantMsgs[0] ?? e.userMsg : e.userMsg, a = Uo(typeof i.content == "string" ? i.content : "", 60);
@@ -6869,7 +6897,7 @@ function Zc(e) {
6869
6897
  }
6870
6898
  //#endregion
6871
6899
  //#region src/core/sdk/compressDecision.ts
6872
- var Qc = t.object({
6900
+ var tl = t.object({
6873
6901
  keepRounds: t.number().int().min(0).max(50).optional(),
6874
6902
  windowRatio: t.number().min(0).max(1).optional(),
6875
6903
  summarize: t.object({ mode: t.enum(["index", "llm"]) }),
@@ -6879,23 +6907,23 @@ var Qc = t.object({
6879
6907
  }).refine((e) => e.keepRounds !== void 0 || e.windowRatio !== void 0, { message: "keepRounds 与 windowRatio 至少填一个(按当前触发模式)" });
6880
6908
  //#endregion
6881
6909
  //#region src/core/sdk/llmResolver.ts
6882
- function $c(e) {
6910
+ function nl(e) {
6883
6911
  let t = e.find((e) => e.role === "user");
6884
6912
  if (!t) return;
6885
6913
  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, " ");
6886
6914
  if (r) return r.length > 30 ? r.slice(0, 30) + "…" : r;
6887
6915
  }
6888
- function el(e) {
6916
+ function rl(e) {
6889
6917
  return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
6890
6918
  }
6891
- function tl(e) {
6919
+ function il(e) {
6892
6920
  let t = e.content;
6893
6921
  return typeof t == "string" ? t : Array.isArray(t) ? t.map((e) => typeof e == "string" ? e : e?.text ?? "").join("") : String(t ?? "");
6894
6922
  }
6895
- function nl(e) {
6923
+ function al(e) {
6896
6924
  let t = e.summaryLlm ?? e.llm;
6897
6925
  if (!t) return;
6898
- let n = e.summaryTemperature ?? .3, r = e.summaryMaxTokens ?? 1024, i = e.summaryTimeoutMs ?? 15e3, s = el(t) ? t : null, c = el(t) ? null : t;
6926
+ let n = e.summaryTemperature ?? .3, r = e.summaryMaxTokens ?? 1024, i = e.summaryTimeoutMs ?? 15e3, s = rl(t) ? t : null, c = rl(t) ? null : t;
6899
6927
  if (c && !c.apiKey) {
6900
6928
  e.summaryLlm && console.warn("[page-agent-sdk][summarization] summaryLlm 已配置但缺 apiKey,摘要回退主 agent 模型或零成本索引摘要");
6901
6929
  return;
@@ -6907,16 +6935,16 @@ function nl(e) {
6907
6935
  return !l && c && (l = await m(c, {
6908
6936
  temperature: n,
6909
6937
  maxTokens: r
6910
- })), tl(await l.invoke([new o("你是对话历史压缩助手。把下面按轮次索引的对话要点,改写成一段连贯、紧凑的中文摘要,保留关键事实、用户意图与已用工具,不要编造。直接输出摘要正文。"), new a(e)], { signal: t.signal })).trim();
6938
+ })), il(await l.invoke([new o("你是对话历史压缩助手。把下面按轮次索引的对话要点,改写成一段连贯、紧凑的中文摘要,保留关键事实、用户意图与已用工具,不要编造。直接输出摘要正文。"), new a(e)], { signal: t.signal })).trim();
6911
6939
  } finally {
6912
6940
  clearTimeout(s);
6913
6941
  }
6914
6942
  };
6915
6943
  }
6916
- function rl(e) {
6944
+ function ol(e) {
6917
6945
  let t = e.titleLlm ?? e.summaryLlm ?? e.llm;
6918
6946
  if (!t) return;
6919
- let n = el(t) ? t : null, r = el(t) ? null : t;
6947
+ let n = rl(t) ? t : null, r = rl(t) ? null : t;
6920
6948
  if (r && !r.apiKey) return;
6921
6949
  let i = n;
6922
6950
  return async (t) => {
@@ -6927,7 +6955,7 @@ function rl(e) {
6927
6955
  maxTokens: 30
6928
6956
  }));
6929
6957
  let t = await i.invoke([new o(e.i18n?.locale === "en-US" ? "Generate a short English title (max 10 words) summarizing the conversation below. Output the title text only, no quotes or punctuation." : "根据以下对话的主旨,生成一个简短的中文标题(不超过15个字,不要标点和引号,直接输出标题文字)。"), new a(n)], { signal: s.signal }), c = e.i18n?.locale === "en-US" ? 60 : 20;
6930
- return tl(t).trim().replace(/^["'""「『]|["'""」』]$/g, "").split("\n")[0].slice(0, c);
6958
+ return il(t).trim().replace(/^["'""「『]|["'""」』]$/g, "").split("\n")[0].slice(0, c);
6931
6959
  } catch {
6932
6960
  return "";
6933
6961
  } finally {
@@ -6935,10 +6963,10 @@ function rl(e) {
6935
6963
  }
6936
6964
  };
6937
6965
  }
6938
- function il() {
6966
+ function sl() {
6939
6967
  return `call_dec_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
6940
6968
  }
6941
- function al(e) {
6969
+ function cl(e) {
6942
6970
  let t = e.match(/```(?:json)?\s*([\s\S]*?)```/), n = t ? t[1] : e, r = n.indexOf("{"), i = n.lastIndexOf("}");
6943
6971
  if (r < 0 || i < 0 || i <= r) return null;
6944
6972
  try {
@@ -6947,21 +6975,21 @@ function al(e) {
6947
6975
  return null;
6948
6976
  }
6949
6977
  }
6950
- function ol(e) {
6978
+ function ll(e) {
6951
6979
  if (!e) return null;
6952
- let t = al(e);
6980
+ let t = cl(e);
6953
6981
  if (t == null) return null;
6954
- let n = Qc.safeParse(t);
6982
+ let n = tl.safeParse(t);
6955
6983
  return n.success ? n.data : null;
6956
6984
  }
6957
- async function sl(e, t, n, r) {
6985
+ async function ul(e, t, n, r) {
6958
6986
  let i = [...n];
6959
6987
  for (let n = 0; n < 3; n++) {
6960
6988
  let n = await e.invoke(i, { signal: r }), a = n?.tool_calls ?? [];
6961
- if (!a.length) return tl(n).trim();
6989
+ if (!a.length) return il(n).trim();
6962
6990
  i = [...i, n];
6963
6991
  for (let e of a) {
6964
- let n = e.id ?? il();
6992
+ let n = e.id ?? sl();
6965
6993
  try {
6966
6994
  let r = await t.invoke(e.args ?? {}), a = typeof r == "string" ? r : r?.content ?? JSON.stringify(r);
6967
6995
  i = [...i, new s({
@@ -6978,10 +7006,10 @@ async function sl(e, t, n, r) {
6978
7006
  }
6979
7007
  return "";
6980
7008
  }
6981
- function cl(e) {
7009
+ function dl(e) {
6982
7010
  let t = e.summaryLlm ?? e.llm;
6983
7011
  if (!t) return;
6984
- let n = el(t) ? t : null, r = el(t) ? null : t;
7012
+ let n = rl(t) ? t : null, r = rl(t) ? null : t;
6985
7013
  if (r && !r.apiKey) return;
6986
7014
  let i = e.decisionTimeoutMs ?? 6e3, s = e.decisionMaxTokens ?? 2048, c = n;
6987
7015
  return async (e) => {
@@ -6993,12 +7021,12 @@ function cl(e) {
6993
7021
  }));
6994
7022
  let n = c;
6995
7023
  if (typeof n.bindTools != "function") return null;
6996
- let i = Zc({
7024
+ let i = el({
6997
7025
  getMessages: e.getMessages,
6998
7026
  getSnapshot: e.getSnapshot,
6999
7027
  contextWindow: e.contextWindow
7000
7028
  }), 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)。`)];
7001
- return ol(await sl(l, i, d, t.signal)) || ol(await sl(l, i, [...d, new a("上一次输出无效(JSON 解析失败或 schema 校验不通过)。请只输出符合 schema 的压缩决策 JSON,不要多余文字/markdown 代码块。")], t.signal));
7029
+ return ll(await ul(l, i, d, t.signal)) || ll(await ul(l, i, [...d, new a("上一次输出无效(JSON 解析失败或 schema 校验不通过)。请只输出符合 schema 的压缩决策 JSON,不要多余文字/markdown 代码块。")], t.signal));
7002
7030
  } catch {
7003
7031
  return null;
7004
7032
  } finally {
@@ -7006,22 +7034,22 @@ function cl(e) {
7006
7034
  }
7007
7035
  };
7008
7036
  }
7009
- function ll(e) {
7010
- let t = e.llm, n = el(e.llm) ? void 0 : e.llm;
7037
+ function fl(e) {
7038
+ let t = e.llm, n = rl(e.llm) ? void 0 : e.llm;
7011
7039
  return {
7012
7040
  modelCaps: oi({
7013
7041
  model: n?.model ?? t?.model ?? t?.modelName,
7014
7042
  contextWindow: e.contextWindow ?? n?.contextWindow ?? t?.contextWindow,
7015
7043
  maxOutputTokens: e.maxOutputTokens ?? n?.maxOutputTokens ?? t?.maxOutputTokens
7016
7044
  }),
7017
- summaryLlmInvoke: nl(e),
7018
- titleLlmInvoke: rl(e),
7019
- compressDecisionInvoke: cl(e)
7045
+ summaryLlmInvoke: al(e),
7046
+ titleLlmInvoke: ol(e),
7047
+ compressDecisionInvoke: dl(e)
7020
7048
  };
7021
7049
  }
7022
7050
  //#endregion
7023
7051
  //#region src/core/sdk/conflictManager.ts
7024
- function ul(e) {
7052
+ function pl(e) {
7025
7053
  let t = /* @__PURE__ */ At(null), n = 0;
7026
7054
  function r(r) {
7027
7055
  return new Promise((i) => {
@@ -7052,7 +7080,7 @@ function ul(e) {
7052
7080
  }
7053
7081
  //#endregion
7054
7082
  //#region src/core/utils/id.ts
7055
- function dl() {
7083
+ function ml() {
7056
7084
  try {
7057
7085
  if (typeof crypto < "u" && typeof crypto.randomUUID == "function") return crypto.randomUUID();
7058
7086
  } catch {}
@@ -7060,7 +7088,7 @@ function dl() {
7060
7088
  }
7061
7089
  //#endregion
7062
7090
  //#region src/core/backends/storage.ts
7063
- var fl = "chat-sdk", pl = 50 * 1024 * 1024, ml = 4 * 1024 * 1024, hl = 10 * 1024 * 1024, gl = .9, _l = 500, vl = 300, yl = "__meta__", bl = "v:1", xl = [
7091
+ var hl = "chat-sdk", gl = 50 * 1024 * 1024, _l = 4 * 1024 * 1024, vl = 10 * 1024 * 1024, yl = .9, bl = 500, xl = 300, Sl = "__meta__", Cl = "v:1", wl = [
7064
7092
  "messages",
7065
7093
  "vfs",
7066
7094
  "todos",
@@ -7071,51 +7099,51 @@ var fl = "chat-sdk", pl = 50 * 1024 * 1024, ml = 4 * 1024 * 1024, hl = 10 * 1024
7071
7099
  "workingMemory",
7072
7100
  "focus"
7073
7101
  ];
7074
- function Sl(e) {
7075
- return e === "local" || e === "session" ? ml : pl;
7102
+ function Tl(e) {
7103
+ return e === "local" || e === "session" ? _l : gl;
7076
7104
  }
7077
- function Cl(e) {
7105
+ function El(e) {
7078
7106
  if (typeof e != "object" || !e) return !1;
7079
7107
  let t = e;
7080
7108
  return t.name === "QuotaExceededError" || t.name === "NS_ERROR_DOM_QUOTA_REACHED" || t.code === 22 || t.code === 1014;
7081
7109
  }
7082
- function wl(e, t, n, r) {
7110
+ function Dl(e, t, n, r) {
7083
7111
  return [
7084
- bl,
7112
+ Cl,
7085
7113
  e,
7086
7114
  t,
7087
7115
  n,
7088
7116
  r
7089
7117
  ].join("::");
7090
7118
  }
7091
- function Tl(e, t, n) {
7119
+ function Ol(e, t, n) {
7092
7120
  return [
7093
- bl,
7121
+ Cl,
7094
7122
  e,
7095
7123
  t,
7096
7124
  n
7097
7125
  ].join("::") + "::";
7098
7126
  }
7099
- function El(e, t) {
7127
+ function kl(e, t) {
7100
7128
  return [
7101
- bl,
7129
+ Cl,
7102
7130
  e,
7103
7131
  t
7104
7132
  ].join("::") + "::";
7105
7133
  }
7106
- function Dl(e) {
7107
- return [bl, e].join("::") + "::";
7134
+ function Al(e) {
7135
+ return [Cl, e].join("::") + "::";
7108
7136
  }
7109
- var Ol = null;
7110
- function kl(e) {
7111
- Ol ||= new TextEncoder();
7137
+ var jl = null;
7138
+ function Ml(e) {
7139
+ jl ||= new TextEncoder();
7112
7140
  try {
7113
- return Ol.encode(JSON.stringify(e)).length;
7141
+ return jl.encode(JSON.stringify(e)).length;
7114
7142
  } catch {
7115
7143
  return 0;
7116
7144
  }
7117
7145
  }
7118
- function Al(e, t, n) {
7146
+ function Nl(e, t, n) {
7119
7147
  let r = e.reduce((e, t) => e + t.bytes, 0);
7120
7148
  if (r <= t) return [];
7121
7149
  let i = t * n, a = [...e].sort((e, t) => e.lastAccessed - t.lastAccessed), o = [];
@@ -7125,7 +7153,7 @@ function Al(e, t, n) {
7125
7153
  }
7126
7154
  return o;
7127
7155
  }
7128
- function jl() {
7156
+ function Pl() {
7129
7157
  let e = /* @__PURE__ */ new Map();
7130
7158
  return {
7131
7159
  async get(t) {
@@ -7145,7 +7173,7 @@ function jl() {
7145
7173
  }
7146
7174
  };
7147
7175
  }
7148
- function Ml(e) {
7176
+ function Fl(e) {
7149
7177
  return new Promise((t, n) => {
7150
7178
  if (typeof indexedDB > "u") {
7151
7179
  n(/* @__PURE__ */ Error("indexedDB 不可用"));
@@ -7206,7 +7234,7 @@ function Ml(e) {
7206
7234
  }, r.onerror = () => n(r.error);
7207
7235
  });
7208
7236
  }
7209
- function Nl(e) {
7237
+ function Il(e) {
7210
7238
  return {
7211
7239
  async get(t) {
7212
7240
  let n = e.getItem(t);
@@ -7251,12 +7279,12 @@ function Nl(e) {
7251
7279
  }
7252
7280
  };
7253
7281
  }
7254
- function Pl(e, t, n) {
7282
+ function Ll(e, t, n) {
7255
7283
  let r = (e.get(t) ?? Promise.resolve()).then(n, n);
7256
7284
  return e.set(t, r.then(() => void 0, () => void 0)), r;
7257
7285
  }
7258
- function Fl(e = {}) {
7259
- let t = e.dbName ?? fl, n = e.backend ?? "indexed", r = e.maxBytes ?? Sl(n), i = e.maxBytesPerSession ?? hl, a = e.evictionWatermark ?? gl, o = e.debounceMs ?? _l, s = /* @__PURE__ */ new Set();
7286
+ function Rl(e = {}) {
7287
+ let t = e.dbName ?? hl, n = e.backend ?? "indexed", r = e.maxBytes ?? Tl(n), i = e.maxBytesPerSession ?? vl, a = e.evictionWatermark ?? yl, o = e.debounceMs ?? bl, s = /* @__PURE__ */ new Set();
7260
7288
  function c(e) {
7261
7289
  for (let t of s) try {
7262
7290
  t(e);
@@ -7269,16 +7297,16 @@ function Fl(e = {}) {
7269
7297
  try {
7270
7298
  if (n === "indexed") {
7271
7299
  if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
7272
- l = await Ml(t), d(!0);
7300
+ l = await Fl(t), d(!0);
7273
7301
  } else if (n === "session") {
7274
7302
  if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
7275
- l = Nl(sessionStorage), d(!0);
7303
+ l = Il(sessionStorage), d(!0);
7276
7304
  } else if (n === "local") {
7277
7305
  if (typeof localStorage > "u") throw Error("localStorage 不可用");
7278
- l = Nl(localStorage), d(!0);
7279
- } else l = jl(), d(!1);
7306
+ l = Il(localStorage), d(!0);
7307
+ } else l = Pl(), d(!1);
7280
7308
  } catch (e) {
7281
- l = jl();
7309
+ l = Pl();
7282
7310
  let t = e instanceof Error ? e.message : String(e);
7283
7311
  d(!1), Promise.resolve().then(() => c({
7284
7312
  type: "degraded",
@@ -7288,10 +7316,10 @@ function Fl(e = {}) {
7288
7316
  })();
7289
7317
  let p = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map();
7290
7318
  function g(e, n, r, a) {
7291
- let o = wl(t, r, a, yl);
7292
- return Pl(h, o, async () => {
7319
+ let o = Dl(t, r, a, Sl);
7320
+ return Ll(h, o, async () => {
7293
7321
  let t = async () => {
7294
- let t = await l.get(o), s = await l.get(e), u = s == null ? 0 : kl(s), d = kl(n), f = (t?.bytes ?? 0) + (d - u);
7322
+ let t = await l.get(o), s = await l.get(e), u = s == null ? 0 : Ml(s), d = Ml(n), f = (t?.bytes ?? 0) + (d - u);
7295
7323
  if (f > i) {
7296
7324
  c({
7297
7325
  type: "quota",
@@ -7313,12 +7341,12 @@ function Fl(e = {}) {
7313
7341
  try {
7314
7342
  await t();
7315
7343
  } catch (e) {
7316
- if (Cl(e) && !u) {
7344
+ if (El(e) && !u) {
7317
7345
  u = !0;
7318
7346
  try {
7319
7347
  await b();
7320
7348
  } catch {}
7321
- l = jl(), Promise.resolve().then(() => c({
7349
+ l = Pl(), Promise.resolve().then(() => c({
7322
7350
  type: "degraded",
7323
7351
  reason: "存储配额超限(QuotaExceededError),已淘汰最旧会话并降级内存"
7324
7352
  }));
@@ -7330,7 +7358,7 @@ function Fl(e = {}) {
7330
7358
  });
7331
7359
  }
7332
7360
  function _(e, n, r, i) {
7333
- let a = wl(t, e, n, r), s = p.get(a);
7361
+ let a = Dl(t, e, n, r), s = p.get(a);
7334
7362
  s && s.resolve();
7335
7363
  let c = m.get(a);
7336
7364
  return c && clearTimeout(c), new Promise((t) => {
@@ -7357,15 +7385,15 @@ function Fl(e = {}) {
7357
7385
  function y() {
7358
7386
  v ||= setTimeout(() => {
7359
7387
  v = null, b();
7360
- }, vl);
7388
+ }, xl);
7361
7389
  }
7362
7390
  async function b() {
7363
7391
  let e = [];
7364
- await l.scan(Dl(t), (t, n) => {
7392
+ await l.scan(Al(t), (t, n) => {
7365
7393
  t.endsWith("::__meta__") && e.push(n);
7366
7394
  });
7367
- let n = Al(e, r, a);
7368
- for (let e of n) await l.clearPrefix(Tl(t, e.agentId, e.sessionId)), c({
7395
+ let n = Nl(e, r, a);
7396
+ for (let e of n) await l.clearPrefix(Ol(t, e.agentId, e.sessionId)), c({
7369
7397
  type: "evicted",
7370
7398
  agentId: e.agentId,
7371
7399
  sessionId: e.sessionId,
@@ -7376,13 +7404,13 @@ function Fl(e = {}) {
7376
7404
  ready: f,
7377
7405
  async listSessions(e) {
7378
7406
  let n = [];
7379
- return await l.scan(El(t, e), (e, t) => {
7407
+ return await l.scan(kl(t, e), (e, t) => {
7380
7408
  e.endsWith("::__meta__") && n.push(t);
7381
7409
  }), n.sort((e, t) => t.lastAccessed - e.lastAccessed);
7382
7410
  },
7383
7411
  async load(e, n) {
7384
- let r = wl(t, e, n, yl);
7385
- return await Pl(h, r, async () => {
7412
+ let r = Dl(t, e, n, Sl);
7413
+ return await Ll(h, r, async () => {
7386
7414
  let i = await l.get(r);
7387
7415
  if (!i) return;
7388
7416
  let a = {
@@ -7391,8 +7419,8 @@ function Fl(e = {}) {
7391
7419
  todos: [],
7392
7420
  memory: ""
7393
7421
  };
7394
- for (let r of xl) {
7395
- let i = await l.get(wl(t, e, n, r));
7422
+ for (let r of wl) {
7423
+ let i = await l.get(Dl(t, e, n, r));
7396
7424
  i != null && (a[r] = i);
7397
7425
  }
7398
7426
  return i.lastAccessed = Date.now(), await l.set(r, i), a;
@@ -7400,12 +7428,12 @@ function Fl(e = {}) {
7400
7428
  },
7401
7429
  async save(e, t, n) {
7402
7430
  let r = [];
7403
- for (let i of xl) n[i] !== void 0 && r.push(_(e, t, i, n[i]));
7431
+ for (let i of wl) n[i] !== void 0 && r.push(_(e, t, i, n[i]));
7404
7432
  await Promise.all(r);
7405
7433
  },
7406
7434
  async updateTitle(e, n, r) {
7407
- let i = wl(t, e, n, yl);
7408
- return Pl(h, i, async () => {
7435
+ let i = Dl(t, e, n, Sl);
7436
+ return Ll(h, i, async () => {
7409
7437
  let e = await l.get(i);
7410
7438
  e && (e.title = r, e.lastAccessed = Date.now(), await l.set(i, e));
7411
7439
  });
@@ -7421,13 +7449,13 @@ function Fl(e = {}) {
7421
7449
  })), c({ type: "flush" }), await b();
7422
7450
  },
7423
7451
  async deleteSession(e, n) {
7424
- let r = Tl(t, e, n);
7452
+ let r = Ol(t, e, n);
7425
7453
  for (let [e, t] of p.entries()) e.startsWith(r) && (t.resolve(), p.delete(e));
7426
7454
  for (let [e, t] of m.entries()) e.startsWith(r) && (clearTimeout(t), m.delete(e));
7427
7455
  await l.clearPrefix(r);
7428
7456
  },
7429
7457
  async createSession(e, n, r) {
7430
- let i = r ?? dl(), a = Date.now(), o = {
7458
+ let i = r ?? ml(), a = Date.now(), o = {
7431
7459
  agentId: e,
7432
7460
  sessionId: i,
7433
7461
  createdAt: a,
@@ -7435,7 +7463,7 @@ function Fl(e = {}) {
7435
7463
  bytes: 0,
7436
7464
  title: n
7437
7465
  };
7438
- return await l.set(wl(t, e, i, yl), o), i;
7466
+ return await l.set(Dl(t, e, i, Sl), o), i;
7439
7467
  },
7440
7468
  onEvent(e) {
7441
7469
  s.add(e);
@@ -7450,15 +7478,15 @@ function Fl(e = {}) {
7450
7478
  }
7451
7479
  //#endregion
7452
7480
  //#region src/core/sdk/optionsResolver.ts
7453
- function Il(e) {
7454
- return e === void 0 ? Fl({ backend: "memory" }) : e === !1 ? null : typeof e == "string" ? Fl({ backend: e }) : e.enabled === !1 ? null : Fl(e);
7481
+ function zl(e) {
7482
+ return e === void 0 ? Rl({ backend: "memory" }) : e === !1 ? null : typeof e == "string" ? Rl({ backend: e }) : e.enabled === !1 ? null : Rl(e);
7455
7483
  }
7456
- function Ll(e) {
7484
+ function Bl(e) {
7457
7485
  return e.dialog ?? {};
7458
7486
  }
7459
7487
  //#endregion
7460
7488
  //#region src/core/capabilities.ts
7461
- var Rl = [
7489
+ var Vl = [
7462
7490
  {
7463
7491
  name: "dataOps",
7464
7492
  defaultOn: !0
@@ -7551,13 +7579,13 @@ var Rl = [
7551
7579
  defaultOn: !1
7552
7580
  }
7553
7581
  ];
7554
- function zl(e) {
7582
+ function Hl(e) {
7555
7583
  let t = {};
7556
- for (let n of Rl) {
7584
+ for (let n of Vl) {
7557
7585
  let r = e?.[n.name];
7558
7586
  t[n.name] = n.defaultOn ? r !== !1 : r === !0;
7559
7587
  }
7560
- for (let e of Rl) if (e.requires && t[e.name]) {
7588
+ for (let e of Vl) if (e.requires && t[e.name]) {
7561
7589
  for (let n of e.requires) if (!t[n]) {
7562
7590
  t[e.name] = !1;
7563
7591
  break;
@@ -7567,7 +7595,7 @@ function zl(e) {
7567
7595
  }
7568
7596
  //#endregion
7569
7597
  //#region src/core/sdk/events.ts
7570
- function Bl(e) {
7598
+ function Ul(e) {
7571
7599
  let t = /* @__PURE__ */ new Set(), n = (n) => {
7572
7600
  if (n.type !== "approval_request") {
7573
7601
  if (e) try {
@@ -7593,7 +7621,7 @@ function Bl(e) {
7593
7621
  }
7594
7622
  //#endregion
7595
7623
  //#region src/core/sdk/contextPreset.ts
7596
- var Vl = {
7624
+ var Wl = {
7597
7625
  auto: {
7598
7626
  summaryThresholdRatio: .5,
7599
7627
  windowRatio: .4,
@@ -7621,7 +7649,7 @@ var Vl = {
7621
7649
  enableRecall: !0,
7622
7650
  enableLLMSummary: !0
7623
7651
  }
7624
- }, Hl = {
7652
+ }, Gl = {
7625
7653
  auto: ["describe_data", "read"],
7626
7654
  conservative: ["describe_data"],
7627
7655
  aggressive: ["describe_data", "read"],
@@ -7632,8 +7660,8 @@ var Vl = {
7632
7660
  "search_data"
7633
7661
  ]
7634
7662
  };
7635
- function Ul(e, t) {
7636
- let n = Vl[e.contextPreset ?? "auto"] ?? {}, r = e.contextOptions === !1 ? {} : e.contextOptions ?? {};
7663
+ function Kl(e, t) {
7664
+ let n = Wl[e.contextPreset ?? "auto"] ?? {}, r = e.contextOptions === !1 ? {} : e.contextOptions ?? {};
7637
7665
  return {
7638
7666
  ...n,
7639
7667
  ...r,
@@ -7643,7 +7671,7 @@ function Ul(e, t) {
7643
7671
  }
7644
7672
  //#endregion
7645
7673
  //#region src/core/sdk/middlewareStack.ts
7646
- var Wl = {
7674
+ var ql = {
7647
7675
  dataHint: 10,
7648
7676
  usageHints: 20,
7649
7677
  todos: 30,
@@ -7660,17 +7688,17 @@ var Wl = {
7660
7688
  subagents: 140,
7661
7689
  augmentSystem: 150
7662
7690
  };
7663
- function Gl(e) {
7691
+ function Jl(e) {
7664
7692
  return e.map((e, t) => ({
7665
7693
  m: e,
7666
7694
  i: t,
7667
- p: Wl[e.name] ?? Infinity
7695
+ p: ql[e.name] ?? Infinity
7668
7696
  })).sort((e, t) => e.p - t.p || e.i - t.i).map((e) => e.m);
7669
7697
  }
7670
7698
  //#endregion
7671
7699
  //#region src/core/tools/dataSlotQuery.ts
7672
- var Kl = /[\w$-]/;
7673
- function ql(e) {
7700
+ var Yl = /[\w$-]/;
7701
+ function Xl(e) {
7674
7702
  let t = [], n = e.trim(), r = +(n[0] === "$");
7675
7703
  for (; r < n.length;) {
7676
7704
  let e = n[r];
@@ -7681,7 +7709,7 @@ function ql(e) {
7681
7709
  continue;
7682
7710
  }
7683
7711
  let e = "";
7684
- for (; r < n.length && Kl.test(n[r]);) e += n[r++];
7712
+ for (; r < n.length && Yl.test(n[r]);) e += n[r++];
7685
7713
  if (!e) throw Error("JSONPath: .. 后缺属性名");
7686
7714
  t.push({
7687
7715
  type: "descendKey",
@@ -7694,7 +7722,7 @@ function ql(e) {
7694
7722
  continue;
7695
7723
  }
7696
7724
  let e = "";
7697
- for (; r < n.length && Kl.test(n[r]);) e += n[r++];
7725
+ for (; r < n.length && Yl.test(n[r]);) e += n[r++];
7698
7726
  if (!e) throw Error("JSONPath: . 后缺属性名");
7699
7727
  t.push({
7700
7728
  type: "key",
@@ -7750,7 +7778,7 @@ function ql(e) {
7750
7778
  }
7751
7779
  return t;
7752
7780
  }
7753
- function Jl(e) {
7781
+ function Zl(e) {
7754
7782
  let t = [], n = 0, r = e.trim();
7755
7783
  for (; n < r.length;) {
7756
7784
  let e = r[n];
@@ -7795,7 +7823,7 @@ function Jl(e) {
7795
7823
  }
7796
7824
  return t;
7797
7825
  }
7798
- var Yl = class {
7826
+ var Ql = class {
7799
7827
  toks;
7800
7828
  item;
7801
7829
  pos = 0;
@@ -7831,12 +7859,12 @@ var Yl = class {
7831
7859
  return this.next(), e;
7832
7860
  }
7833
7861
  let e = this.operand(), t = this.peek();
7834
- return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(), Ql(t, e, this.operand())) : Xl(e);
7862
+ return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(), tu(t, e, this.operand())) : $l(e);
7835
7863
  }
7836
7864
  operand() {
7837
7865
  let e = this.next();
7838
7866
  if (e === void 0) throw Error("过滤表达式:缺操作数");
7839
- if (e.startsWith("@")) return Zl(e, this.item);
7867
+ if (e.startsWith("@")) return eu(e, this.item);
7840
7868
  if (e[0] === "'" || e[0] === "\"") return e.slice(1, -1);
7841
7869
  if (e === "true") return !0;
7842
7870
  if (e === "false") return !1;
@@ -7846,10 +7874,10 @@ var Yl = class {
7846
7874
  throw Error(`过滤表达式:未知操作数 '${e}'`);
7847
7875
  }
7848
7876
  };
7849
- function Xl(e) {
7877
+ function $l(e) {
7850
7878
  return !!e && e !== 0 && e !== "" && e !== null;
7851
7879
  }
7852
- function Zl(e, t) {
7880
+ function eu(e, t) {
7853
7881
  let n = e.split(".").filter((e) => e && e !== "@"), r = t;
7854
7882
  for (let e of n) {
7855
7883
  if (typeof r != "object" || !r) return;
@@ -7857,7 +7885,7 @@ function Zl(e, t) {
7857
7885
  }
7858
7886
  return r;
7859
7887
  }
7860
- function Ql(e, t, n) {
7888
+ function tu(e, t, n) {
7861
7889
  switch (e) {
7862
7890
  case "==": return t === n;
7863
7891
  case "!=": return t !== n;
@@ -7868,47 +7896,47 @@ function Ql(e, t, n) {
7868
7896
  default: return !1;
7869
7897
  }
7870
7898
  }
7871
- function $l(e, t) {
7872
- return new Yl(Jl(e), t).parse();
7899
+ function nu(e, t) {
7900
+ return new Ql(Zl(e), t).parse();
7873
7901
  }
7874
- function eu(e, t) {
7902
+ function ru(e, t) {
7875
7903
  return e ? `${e}.${t}` : String(t);
7876
7904
  }
7877
- function tu(e, t) {
7905
+ function iu(e, t) {
7878
7906
  let n = [{
7879
7907
  path: "",
7880
7908
  value: e
7881
7909
  }];
7882
- for (let e of ql(t)) {
7910
+ for (let e of Xl(t)) {
7883
7911
  let t = [];
7884
7912
  if (e.type === "key") for (let r of n) r.value != null && typeof r.value == "object" && e.key in r.value && t.push({
7885
- path: eu(r.path, e.key),
7913
+ path: ru(r.path, e.key),
7886
7914
  value: r.value[e.key]
7887
7915
  });
7888
7916
  else if (e.type === "index") {
7889
7917
  for (let r of n) if (Array.isArray(r.value)) {
7890
7918
  let n = r.value[e.index];
7891
7919
  e.index >= 0 && e.index < r.value.length && t.push({
7892
- path: eu(r.path, e.index),
7920
+ path: ru(r.path, e.index),
7893
7921
  value: n,
7894
7922
  index: e.index
7895
7923
  });
7896
7924
  }
7897
7925
  } else if (e.type === "wildcard") {
7898
7926
  for (let e of n) if (Array.isArray(e.value)) e.value.forEach((n, r) => t.push({
7899
- path: eu(e.path, r),
7927
+ path: ru(e.path, r),
7900
7928
  value: n,
7901
7929
  index: r
7902
7930
  }));
7903
7931
  else if (e.value != null && typeof e.value == "object") for (let n of Object.keys(e.value)) t.push({
7904
- path: eu(e.path, n),
7932
+ path: ru(e.path, n),
7905
7933
  value: e.value[n]
7906
7934
  });
7907
7935
  } else if (e.type === "descendKey") {
7908
7936
  let r = e.key, i = (e) => {
7909
7937
  if (!(e.value == null || typeof e.value != "object")) for (let n of Object.keys(e.value)) {
7910
7938
  let a = {
7911
- path: eu(e.path, n),
7939
+ path: ru(e.path, n),
7912
7940
  value: e.value[n]
7913
7941
  };
7914
7942
  n === r && t.push(a), i(a);
@@ -7919,7 +7947,7 @@ function tu(e, t) {
7919
7947
  let e = (n) => {
7920
7948
  if (!(n.value == null || typeof n.value != "object")) for (let r of Object.keys(n.value)) {
7921
7949
  let i = {
7922
- path: eu(n.path, r),
7950
+ path: ru(n.path, r),
7923
7951
  value: n.value[r]
7924
7952
  };
7925
7953
  t.push(i), e(i);
@@ -7928,16 +7956,16 @@ function tu(e, t) {
7928
7956
  for (let t of n) e(t);
7929
7957
  } else if (e.type === "filter") {
7930
7958
  for (let r of n) if (Array.isArray(r.value)) r.value.forEach((n, i) => {
7931
- $l(e.filter, n) && t.push({
7932
- path: eu(r.path, i),
7959
+ nu(e.filter, n) && t.push({
7960
+ path: ru(r.path, i),
7933
7961
  value: n,
7934
7962
  index: i
7935
7963
  });
7936
7964
  });
7937
7965
  else if (r.value != null && typeof r.value == "object") for (let n of Object.keys(r.value)) {
7938
7966
  let i = r.value[n];
7939
- $l(e.filter, i) && t.push({
7940
- path: eu(r.path, n),
7967
+ nu(e.filter, i) && t.push({
7968
+ path: ru(r.path, n),
7941
7969
  value: i
7942
7970
  });
7943
7971
  }
@@ -7946,7 +7974,7 @@ function tu(e, t) {
7946
7974
  }
7947
7975
  return n;
7948
7976
  }
7949
- function nu(e, t) {
7977
+ function au(e, t) {
7950
7978
  let n = e.length, r = t.length;
7951
7979
  if (!n) return r;
7952
7980
  if (!r) return n;
@@ -7962,7 +7990,7 @@ function nu(e, t) {
7962
7990
  }
7963
7991
  return i[r];
7964
7992
  }
7965
- function ru(e, t, n = {}) {
7993
+ function ou(e, t, n = {}) {
7966
7994
  let r = n.mode || "substring", i = n.limit ?? 50, a = n.matchKey !== !1, o = [], s = null;
7967
7995
  if (r === "regex") try {
7968
7996
  s = new RegExp(t, "i");
@@ -7972,11 +8000,11 @@ function ru(e, t, n = {}) {
7972
8000
  let c = (e, l, u) => {
7973
8001
  if (o.length >= i || e == null) return;
7974
8002
  if (typeof e == "object") {
7975
- if (Array.isArray(e)) e.forEach((e, t) => c(e, eu(l, t), String(t)));
7976
- else for (let t of Object.keys(e)) c(e[t], eu(l, t), t);
8003
+ if (Array.isArray(e)) e.forEach((e, t) => c(e, ru(l, t), String(t)));
8004
+ else for (let t of Object.keys(e)) c(e[t], ru(l, t), t);
7977
8005
  return;
7978
8006
  }
7979
- let d = String(e), f = iu(d, t, r, n.fuzzyThreshold ?? 2, s);
8007
+ let d = String(e), f = su(d, t, r, n.fuzzyThreshold ?? 2, s);
7980
8008
  if (f) {
7981
8009
  o.push({
7982
8010
  path: l,
@@ -7987,7 +8015,7 @@ function ru(e, t, n = {}) {
7987
8015
  return;
7988
8016
  }
7989
8017
  if (a && u) {
7990
- let e = iu(u, t, r, n.fuzzyThreshold ?? 2, s);
8018
+ let e = su(u, t, r, n.fuzzyThreshold ?? 2, s);
7991
8019
  e && o.push({
7992
8020
  path: l,
7993
8021
  key: u,
@@ -7998,51 +8026,51 @@ function ru(e, t, n = {}) {
7998
8026
  };
7999
8027
  return c(e, ""), o;
8000
8028
  }
8001
- function iu(e, t, n, r, i) {
8029
+ function su(e, t, n, r, i) {
8002
8030
  let a = e.toLowerCase(), o = t.toLowerCase();
8003
8031
  if (n === "substring") return a.includes(o) ? 1 : null;
8004
8032
  if (n === "regex") return i && i.test(e) ? 1 : null;
8005
8033
  if (n === "fuzzy") {
8006
8034
  if (a.includes(o)) return 2;
8007
- let e = nu(a, o);
8035
+ let e = au(a, o);
8008
8036
  return e <= r ? r - e + 1 : null;
8009
8037
  }
8010
8038
  return null;
8011
8039
  }
8012
- function au(e, t, n = 3e3) {
8040
+ function cu(e, t, n = 3e3) {
8013
8041
  return ao(t, n)(e);
8014
8042
  }
8015
8043
  //#endregion
8016
8044
  //#region src/core/tools/resources.ts
8017
- var ou = "⟦frozen:", su = "⟦res:", cu = "⟧";
8018
- function lu(e) {
8019
- return `${ou}${e}${cu}`;
8045
+ var lu = "⟦frozen:", uu = "⟦res:", du = "⟧";
8046
+ function fu(e) {
8047
+ return `${lu}${e}${du}`;
8020
8048
  }
8021
- function uu(e) {
8022
- return `${su}${e}${cu}`;
8049
+ function pu(e) {
8050
+ return `${uu}${e}${du}`;
8023
8051
  }
8024
- function du(e) {
8025
- return typeof e == "string" ? e.startsWith(ou) && e.endsWith(cu) ? {
8052
+ function mu(e) {
8053
+ return typeof e == "string" ? e.startsWith(lu) && e.endsWith(du) ? {
8026
8054
  type: "frozen",
8027
8055
  path: e.slice(8, e.length - 1)
8028
- } : e.startsWith(su) && e.endsWith(cu) ? {
8056
+ } : e.startsWith(uu) && e.endsWith(du) ? {
8029
8057
  type: "res",
8030
8058
  handle: e.slice(5, e.length - 1)
8031
8059
  } : null : null;
8032
8060
  }
8033
- function fu(e) {
8061
+ function hu(e) {
8034
8062
  return String(e ?? "").trim().replace(/^\.+/, "");
8035
8063
  }
8036
- function pu(e) {
8064
+ function gu(e) {
8037
8065
  let t = 5381;
8038
8066
  for (let n = 0; n < e.length; n++) t = (t * 33 ^ e.charCodeAt(n)) >>> 0;
8039
8067
  return (t >>> 0).toString(16).padStart(8, "0").slice(0, 8);
8040
8068
  }
8041
- function mu(e, t) {
8069
+ function _u(e, t) {
8042
8070
  return e === t ? !0 : e && t && typeof e == "object" && typeof t == "object" ? JSON.stringify(e) === JSON.stringify(t) : !1;
8043
8071
  }
8044
- function hu(e, t) {
8045
- let n = fu(e);
8072
+ function vu(e, t) {
8073
+ let n = hu(e);
8046
8074
  if (!n) return;
8047
8075
  let r = t.get(n);
8048
8076
  if (r) return {
@@ -8062,7 +8090,7 @@ function hu(e, t) {
8062
8090
  }));
8063
8091
  return i;
8064
8092
  }
8065
- var gu = class {
8093
+ var yu = class {
8066
8094
  vfs;
8067
8095
  constructor(e) {
8068
8096
  this.vfs = e;
@@ -8071,7 +8099,7 @@ var gu = class {
8071
8099
  return `resources/${e}.json`;
8072
8100
  }
8073
8101
  ensure(e, t, n) {
8074
- let r = pu(e), i = {
8102
+ let r = gu(e), i = {
8075
8103
  path: e,
8076
8104
  mode: n,
8077
8105
  value: t,
@@ -8083,7 +8111,7 @@ var gu = class {
8083
8111
  }, r;
8084
8112
  }
8085
8113
  get(e) {
8086
- return this.readEntry(this.key(e)) || this.readEntry(this.key(pu(e)));
8114
+ return this.readEntry(this.key(e)) || this.readEntry(this.key(gu(e)));
8087
8115
  }
8088
8116
  readEntry(e) {
8089
8117
  let t = this.vfs.files[e];
@@ -8099,7 +8127,7 @@ var gu = class {
8099
8127
  this.ensure(e, t, n?.mode ?? "verbatim");
8100
8128
  }
8101
8129
  delete(e) {
8102
- let t = this.get(e)?.handle ?? pu(e), n = this.key(t), r = !!this.vfs.files[n];
8130
+ let t = this.get(e)?.handle ?? gu(e), n = this.key(t), r = !!this.vfs.files[n];
8103
8131
  return r && delete this.vfs.files[n], r;
8104
8132
  }
8105
8133
  list() {
@@ -8119,7 +8147,7 @@ var gu = class {
8119
8147
  for (let e of Object.keys(this.vfs.files)) e.startsWith("resources/") && delete this.vfs.files[e];
8120
8148
  }
8121
8149
  };
8122
- function _u(e) {
8150
+ function bu(e) {
8123
8151
  let { jp: t, resolved: n, resourcesByPath: r, resourceStore: i } = e;
8124
8152
  if (!r.size) return n;
8125
8153
  let a = !1;
@@ -8133,14 +8161,14 @@ function _u(e) {
8133
8161
  if (t !== "" && e !== t && !e.startsWith(t + ".")) continue;
8134
8162
  if (e === t) {
8135
8163
  if (o === void 0) continue;
8136
- return n.mode === "freeze" ? lu(e) : i ? uu(i.ensure(e, o, "verbatim")) : o;
8164
+ return n.mode === "freeze" ? fu(e) : i ? pu(i.ensure(e, o, "verbatim")) : o;
8137
8165
  }
8138
8166
  let r = t === "" ? e : e.slice(t.length + 1), a = Z(o, r);
8139
- a !== void 0 && (n.mode === "freeze" ? Na(o, r, lu(e)) : i && Na(o, r, uu(i.ensure(e, a, "verbatim"))));
8167
+ a !== void 0 && (n.mode === "freeze" ? Na(o, r, fu(e)) : i && Na(o, r, pu(i.ensure(e, a, "verbatim"))));
8140
8168
  }
8141
8169
  return o;
8142
8170
  }
8143
- function vu(e, t, n, r) {
8171
+ function xu(e, t, n, r) {
8144
8172
  if (!r) return {
8145
8173
  code: "RESOURCE_NOT_FOUND",
8146
8174
  message: `句柄 "${e}" 无法展开(资源池未启用)`,
@@ -8151,7 +8179,7 @@ function vu(e, t, n, r) {
8151
8179
  code: "RESOURCE_NOT_FOUND",
8152
8180
  message: `字段 "${t}" 在 bind 中已不存在,无法展开句柄 "${e}"`,
8153
8181
  hint: "该字段可能已被删除或 restore 到不含此字段的快照;重新 read 确认当前结构"
8154
- } : mu(i.value, n) ? { value: i.value } : (r.update(t, n), { value: n }) : n === void 0 ? {
8182
+ } : _u(i.value, n) ? { value: i.value } : (r.update(t, n), { value: n }) : n === void 0 ? {
8155
8183
  code: "RESOURCE_NOT_FOUND",
8156
8184
  message: `句柄 "${e}" 不存在(字段 "${t}" 可能未注册或已被删除)`,
8157
8185
  hint: "重新 read 该字段触发懒注册"
@@ -8161,7 +8189,7 @@ function vu(e, t, n, r) {
8161
8189
  hint: "重新 read 该字段触发懒注册重建句柄,再写回新句柄 ⟦res:<handle>⟧"
8162
8190
  };
8163
8191
  }
8164
- function yu(e, t) {
8192
+ function Su(e, t) {
8165
8193
  let n = t.getBind();
8166
8194
  for (let [r, i] of t.resourcesByPath) {
8167
8195
  let a = Z(n, r), o = Z(e, r);
@@ -8170,11 +8198,11 @@ function yu(e, t) {
8170
8198
  continue;
8171
8199
  }
8172
8200
  if (i.mode === "freeze") {
8173
- if (o === lu(r)) {
8201
+ if (o === fu(r)) {
8174
8202
  Na(e, r, a);
8175
8203
  continue;
8176
8204
  }
8177
- if (!mu(o, a)) return {
8205
+ if (!_u(o, a)) return {
8178
8206
  ok: !1,
8179
8207
  code: "FROZEN_FIELD",
8180
8208
  path: r,
@@ -8182,9 +8210,9 @@ function yu(e, t) {
8182
8210
  hint: "该字段由系统/集成方维护,LLM 不得改动。如需展示其值用 resource_get({path}) 取真值"
8183
8211
  };
8184
8212
  } else {
8185
- let n = du(o);
8213
+ let n = mu(o);
8186
8214
  if (n && n.type === "res") {
8187
- let i = vu(n.handle, r, a, t.resourceStore);
8215
+ let i = xu(n.handle, r, a, t.resourceStore);
8188
8216
  if ("value" in i) {
8189
8217
  Na(e, r, i.value);
8190
8218
  continue;
@@ -8197,7 +8225,7 @@ function yu(e, t) {
8197
8225
  hint: i.hint
8198
8226
  };
8199
8227
  }
8200
- if (!mu(o, a)) return {
8228
+ if (!_u(o, a)) return {
8201
8229
  ok: !1,
8202
8230
  code: "VERBATIM_MISMATCH",
8203
8231
  path: r,
@@ -8208,7 +8236,7 @@ function yu(e, t) {
8208
8236
  }
8209
8237
  return { ok: !0 };
8210
8238
  }
8211
- function bu(e, t, n) {
8239
+ function Cu(e, t, n) {
8212
8240
  let r = t === void 0 ? e.message : `patches[${t}]${n ? ` @ "${n}"` : ""}: ${e.message}`;
8213
8241
  return Y({
8214
8242
  code: e.code,
@@ -8221,28 +8249,28 @@ function bu(e, t, n) {
8221
8249
  } }
8222
8250
  });
8223
8251
  }
8224
- function xu(e) {
8252
+ function wu(e) {
8225
8253
  let { value: t, ctx: n } = e;
8226
8254
  if (!n || !n.resourcesByPath.size) return {
8227
8255
  ok: !0,
8228
8256
  value: t
8229
8257
  };
8230
- let r = Fa(t), i = yu(r, n);
8258
+ let r = Fa(t), i = Su(r, n);
8231
8259
  return i.ok ? {
8232
8260
  ok: !0,
8233
8261
  value: r
8234
8262
  } : {
8235
8263
  ok: !1,
8236
- error: bu(i)
8264
+ error: Cu(i)
8237
8265
  };
8238
8266
  }
8239
- function Su(e) {
8267
+ function Tu(e) {
8240
8268
  let { patches: t, clone: n, ctx: r } = e;
8241
8269
  if (!r || !r.resourcesByPath.size) return { ok: !0 };
8242
8270
  for (let e = 0; e < t.length; e++) {
8243
8271
  let n = t[e];
8244
8272
  if (n.op === "remove") {
8245
- let t = hu(n.jsonPath || "", r.resourcesByPath);
8273
+ let t = vu(n.jsonPath || "", r.resourcesByPath);
8246
8274
  if (t) {
8247
8275
  let r = t.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED", i = t.spec.mode === "freeze" ? "冻结字段不可删。如需移除请联系集成方调整 data.resources 配置" : "verbatim 字段不可直接删;先 resource_delete({path}) 释放资源保护后再删";
8248
8276
  return {
@@ -8261,27 +8289,27 @@ function Su(e) {
8261
8289
  }
8262
8290
  }
8263
8291
  }
8264
- let i = yu(n, r);
8292
+ let i = Su(n, r);
8265
8293
  if (!i.ok) {
8266
- let e = Cu(i.path, t);
8294
+ let e = Eu(i.path, t);
8267
8295
  return {
8268
8296
  ok: !1,
8269
- error: bu(i, e >= 0 ? e : void 0, e >= 0 ? t[e].jsonPath : void 0)
8297
+ error: Cu(i, e >= 0 ? e : void 0, e >= 0 ? t[e].jsonPath : void 0)
8270
8298
  };
8271
8299
  }
8272
8300
  return { ok: !0 };
8273
8301
  }
8274
- function Cu(e, t) {
8275
- let n = fu(e);
8302
+ function Eu(e, t) {
8303
+ let n = hu(e);
8276
8304
  for (let e = 0; e < t.length; e++) {
8277
- let r = fu(t[e].jsonPath || "");
8305
+ let r = hu(t[e].jsonPath || "");
8278
8306
  if (r && (r === n || n.startsWith(r + ".") || r.startsWith(n + "."))) return e;
8279
8307
  }
8280
8308
  return -1;
8281
8309
  }
8282
8310
  //#endregion
8283
8311
  //#region src/core/tools/dataOps.ts
8284
- var wu = /* @__PURE__ */ new Set([
8312
+ var Du = /* @__PURE__ */ new Set([
8285
8313
  "describe_data",
8286
8314
  "get_data",
8287
8315
  "set_data",
@@ -8295,14 +8323,14 @@ var wu = /* @__PURE__ */ new Set([
8295
8323
  "resource_update",
8296
8324
  "resource_list",
8297
8325
  "resource_delete"
8298
- ]), Tu = /* @__PURE__ */ new Set(["read", "write"]);
8299
- function Eu(e, t = "simple") {
8300
- return t === "advanced" ? e : t === "minimal" ? e.filter((e) => Tu.has(e.name)) : e.filter((e) => !wu.has(e.name));
8326
+ ]), Ou = /* @__PURE__ */ new Set(["read", "write"]);
8327
+ function ku(e, t = "simple") {
8328
+ return t === "advanced" ? e : t === "minimal" ? e.filter((e) => Ou.has(e.name)) : e.filter((e) => !Du.has(e.name));
8301
8329
  }
8302
- function Du(e) {
8330
+ function Au(e) {
8303
8331
  let { bindRef: t, schema: n, allowKeys: r, snapshots: i, maxSnapshots: a, audit: o, dryRun: s, op: c = "set", protectedCtx: l } = e, u = e.value, d = e.internalAfterWrite ? Fa(t) : null;
8304
8332
  if (l) {
8305
- let e = xu({
8333
+ let e = wu({
8306
8334
  value: u,
8307
8335
  ctx: l
8308
8336
  });
@@ -8358,7 +8386,7 @@ function Du(e) {
8358
8386
  data: f.data
8359
8387
  };
8360
8388
  }
8361
- function Ou(e) {
8389
+ function ju(e) {
8362
8390
  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 = e.internalAfterWrite ? Fa(t) : null, p = Fa(t), m = [];
8363
8391
  for (let e = 0; e < n.length; e++) {
8364
8392
  let t = n[e], a = t.jsonPath || "";
@@ -8418,7 +8446,7 @@ function Ou(e) {
8418
8446
  });
8419
8447
  }
8420
8448
  if (d) {
8421
- let e = Su({
8449
+ let e = Tu({
8422
8450
  patches: n,
8423
8451
  clone: p,
8424
8452
  ctx: d
@@ -8469,37 +8497,37 @@ function Ou(e) {
8469
8497
  clone: p
8470
8498
  };
8471
8499
  }
8472
- function ku(e) {
8500
+ function Mu(e) {
8473
8501
  return e < 1024 ? `${e}B` : e < 1024 * 1024 ? `${(e / 1024).toFixed(1)}KB` : `${(e / (1024 * 1024)).toFixed(1)}MB`;
8474
8502
  }
8475
- function Au(e, t, n, r) {
8503
+ function Nu(e, t, n, r) {
8476
8504
  if (!t || !n.length || typeof e != "object" || !e) return e;
8477
8505
  let i = new Set(n.map((e) => e.field)), a = Fa(e);
8478
8506
  return (function e(t) {
8479
8507
  if (Array.isArray(t)) for (let n of t) e(n);
8480
8508
  else if (t && typeof t == "object") for (let n of Object.keys(t)) {
8481
8509
  let a = t[n];
8482
- typeof a == "string" && i.has(n) && a.length >= r ? t[n] = `<${n} ${ku(a.length)}>` : e(a);
8510
+ typeof a == "string" && i.has(n) && a.length >= r ? t[n] = `<${n} ${Mu(a.length)}>` : e(a);
8483
8511
  }
8484
8512
  })(a), a;
8485
8513
  }
8486
- var ju = 0;
8487
- function Mu() {
8488
- return ju++, "c_" + Math.random().toString(36).slice(2, 8) + ju.toString(36);
8514
+ var Pu = 0;
8515
+ function Fu() {
8516
+ return Pu++, "c_" + Math.random().toString(36).slice(2, 8) + Pu.toString(36);
8489
8517
  }
8490
- function Nu(e, t) {
8518
+ function Iu(e, t) {
8491
8519
  if (!(!e || typeof e != "object")) for (let n of t) {
8492
8520
  let t = Z(e, n);
8493
- if (Array.isArray(t)) for (let e of t) e && typeof e == "object" && !("__pgId" in e) && (e.__pgId = Mu());
8521
+ if (Array.isArray(t)) for (let e of t) e && typeof e == "object" && !("__pgId" in e) && (e.__pgId = Fu());
8494
8522
  }
8495
8523
  }
8496
- function Pu(e) {
8524
+ function Lu(e) {
8497
8525
  (function e(t) {
8498
8526
  if (Array.isArray(t)) t.forEach(e);
8499
8527
  else if (t && typeof t == "object") for (let n of Object.keys(t)) n.startsWith("__pg") ? delete t[n] : e(t[n]);
8500
8528
  })(e);
8501
8529
  }
8502
- function Fu(e, n = {}) {
8530
+ function Ru(e, n = {}) {
8503
8531
  let i = n.pgIdPaths ?? [], a = i.length ? (e, t) => {
8504
8532
  if (t && typeof t == "object") for (let n of i) {
8505
8533
  let r = Z(t, n), i = Z(e, n);
@@ -8514,7 +8542,7 @@ function Fu(e, n = {}) {
8514
8542
  if (!(!t || typeof t != "object" || "__pgId" in t)) for (let e = 0; e < r.length; e++) {
8515
8543
  if (o.has(e)) continue;
8516
8544
  let n = r[e];
8517
- if (!(!n || typeof n != "object" || !n.__pgId) && mu(a(n), a(t))) {
8545
+ if (!(!n || typeof n != "object" || !n.__pgId) && _u(a(n), a(t))) {
8518
8546
  t.__pgId = n.__pgId, o.add(e);
8519
8547
  break;
8520
8548
  }
@@ -8526,11 +8554,11 @@ function Fu(e, n = {}) {
8526
8554
  t && n && typeof n == "object" && !("__pgId" in n) && (n.__pgId = t, o.add(e));
8527
8555
  }
8528
8556
  }
8529
- Nu(e, i);
8530
- } : void 0, o = i.length ? fa(e.schema, i).schema : e.schema, s = e.bind, c = e.description ?? "主数据对象", l = Gi(o), u = /* @__PURE__ */ new Map(), d = n.vfsStore ? new gu(n.vfsStore) : void 0;
8557
+ Iu(e, i);
8558
+ } : void 0, o = i.length ? fa(e.schema, i).schema : e.schema, s = e.bind, c = e.description ?? "主数据对象", l = Gi(o), u = /* @__PURE__ */ new Map(), d = n.vfsStore ? new yu(n.vfsStore) : void 0;
8531
8559
  function f(e) {
8532
8560
  if (u.clear(), e) for (let t of e) {
8533
- let e = fu(t.path);
8561
+ let e = hu(t.path);
8534
8562
  u.set(e, {
8535
8563
  path: e,
8536
8564
  mode: t.mode
@@ -8603,7 +8631,7 @@ function Fu(e, n = {}) {
8603
8631
  return e;
8604
8632
  },
8605
8633
  createResource: d ? (e, t) => {
8606
- let n = fu(e), r = u.get(n), i = t === void 0 ? Z(s, n) : t;
8634
+ let n = hu(e), r = u.get(n), i = t === void 0 ? Z(s, n) : t;
8607
8635
  return d.ensure(n, i, r?.mode ?? "verbatim");
8608
8636
  } : void 0,
8609
8637
  getResource: d ? (e) => {
@@ -8616,7 +8644,7 @@ function Fu(e, n = {}) {
8616
8644
  } : void 0;
8617
8645
  } : void 0,
8618
8646
  updateResource: d ? (e, t) => {
8619
- let n = fu(e);
8647
+ let n = hu(e);
8620
8648
  d.update(n, t), Na(s, n, t), T();
8621
8649
  } : void 0,
8622
8650
  deleteResource: d ? (e) => d.delete(e) : void 0,
@@ -8679,14 +8707,14 @@ function Fu(e, n = {}) {
8679
8707
  hint: "主数据仅暴露 schema 声明的字段;若需操作该字段,集成方需在 schema 中声明它"
8680
8708
  });
8681
8709
  let i = r ? Z(s, r) : s;
8682
- !r && l && (i = ea(i, o)), p && (i = _u({
8710
+ !r && l && (i = ea(i, o)), p && (i = bu({
8683
8711
  jp: r,
8684
8712
  resolved: i,
8685
8713
  resourcesByPath: p.resourcesByPath,
8686
8714
  resourceStore: p.resourceStore
8687
8715
  }));
8688
8716
  let a = $(s);
8689
- return b(a, n), i === void 0 ? `主数据${r ? ` @ ${r}` : ""} = (undefined) (hash=${a})` : (i = Au(i, n === "", C, S), `主数据${r ? ` @ ${r}` : ""} = ${Q(i)} (hash=${a})`);
8717
+ return b(a, n), i === void 0 ? `主数据${r ? ` @ ${r}` : ""} = (undefined) (hash=${a})` : (i = Nu(i, n === "", C, S), `主数据${r ? ` @ ${r}` : ""} = ${Q(i)} (hash=${a})`);
8690
8718
  }, {
8691
8719
  name: "get_data",
8692
8720
  description: "@deprecated(改用 read,等价且支持 fields/depth/分页)。读取主数据当前值(返回含 hash 供乐观锁);jsonPath 可选读子路径。大结果自动外存 vfs。",
@@ -8696,7 +8724,7 @@ function Fu(e, n = {}) {
8696
8724
  if (i !== null) return i;
8697
8725
  let c = Ia(e);
8698
8726
  if (c.parseError) return Yr("", e, c.parseError);
8699
- let u = Du({
8727
+ let u = Au({
8700
8728
  bindRef: s,
8701
8729
  value: c.parsed,
8702
8730
  schema: o,
@@ -8743,7 +8771,7 @@ function Fu(e, n = {}) {
8743
8771
  message: `edit 仅适用于对象/数组主数据,当前是 ${s === void 0 ? "undefined" : typeof s}`,
8744
8772
  hint: "叶子(原始类型)请用 set_data 整体设置"
8745
8773
  });
8746
- let g = Ou({
8774
+ let g = ju({
8747
8775
  bindRef: s,
8748
8776
  patches: [{
8749
8777
  op: r,
@@ -8812,7 +8840,7 @@ function Fu(e, n = {}) {
8812
8840
  hint: "仅 schema 声明的 key 可删"
8813
8841
  });
8814
8842
  if (p) {
8815
- let t = hu(e, p.resourcesByPath);
8843
+ let t = vu(e, p.resourcesByPath);
8816
8844
  if (t) return Y({
8817
8845
  code: t.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED",
8818
8846
  message: `delete_data @ "${e}" 命中受保护字段 "${t.protectedPath}"(${t.spec.mode}),不可删除`,
@@ -8921,7 +8949,7 @@ function Fu(e, n = {}) {
8921
8949
  });
8922
8950
  let i = l ? ea(s, o) : s, a;
8923
8951
  try {
8924
- a = tu(i, e);
8952
+ a = iu(i, e);
8925
8953
  } catch (t) {
8926
8954
  return Y({
8927
8955
  code: "JSONPATH_SYNTAX",
@@ -8930,7 +8958,7 @@ function Fu(e, n = {}) {
8930
8958
  details: { expr: e }
8931
8959
  });
8932
8960
  }
8933
- let c = t ?? 50, u = a.slice(0, c), d = u.map((e) => `{"path":${JSON.stringify(e.path)},"index":${e.index === void 0 ? "null" : e.index},"value":${Q(Au(e.value, r === "", C, S))}}`);
8961
+ let c = t ?? 50, u = a.slice(0, c), d = u.map((e) => `{"path":${JSON.stringify(e.path)},"index":${e.index === void 0 ? "null" : e.index},"value":${Q(Nu(e.value, r === "", C, S))}}`);
8934
8962
  return `{"matched":${a.length},"returned":${u.length},"truncated":${a.length > c},"results":[${d.join(",")}]}`;
8935
8963
  }, {
8936
8964
  name: "query_data",
@@ -8945,7 +8973,7 @@ function Fu(e, n = {}) {
8945
8973
  message: "主数据为空,无可搜索内容"
8946
8974
  });
8947
8975
  try {
8948
- let a = ru(l ? ea(s, o) : s, e, {
8976
+ let a = ou(l ? ea(s, o) : s, e, {
8949
8977
  mode: t,
8950
8978
  fuzzyThreshold: n,
8951
8979
  matchKey: r,
@@ -8996,7 +9024,7 @@ function Fu(e, n = {}) {
8996
9024
  e && (u = ea(u, e));
8997
9025
  }
8998
9026
  } else u = l ? ea(s, o) : s;
8999
- let d = Fa(u), f = await au(d, e, c && JSON.stringify(d).length > 1e5 ? 8e3 : 3e3);
9027
+ let d = Fa(u), f = await cu(d, e, c && JSON.stringify(d).length > 1e5 ? 8e3 : 3e3);
9000
9028
  if (!f.ok) {
9001
9029
  let t = /超时/.test(f.error || "");
9002
9030
  return Y({
@@ -9012,7 +9040,7 @@ function Fu(e, n = {}) {
9012
9040
  if (t === "transform") {
9013
9041
  let e = f.result;
9014
9042
  if (c) {
9015
- let t = Ou({
9043
+ let t = ju({
9016
9044
  bindRef: s,
9017
9045
  patches: [{
9018
9046
  op: "set",
@@ -9041,7 +9069,7 @@ function Fu(e, n = {}) {
9041
9069
  message: `主数据 bind 为原始类型(${s === null ? "null" : typeof s}),eval transform(patches) 无法就地替换`,
9042
9070
  hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹或集成方通过 sdk.setData 替换 bind"
9043
9071
  });
9044
- let t = Ou({
9072
+ let t = ju({
9045
9073
  bindRef: s,
9046
9074
  patches: e.patches,
9047
9075
  schema: o,
@@ -9062,7 +9090,7 @@ function Fu(e, n = {}) {
9062
9090
  }
9063
9091
  let t = e;
9064
9092
  if (p) {
9065
- let e = xu({
9093
+ let e = wu({
9066
9094
  value: t,
9067
9095
  ctx: p
9068
9096
  });
@@ -9114,7 +9142,7 @@ function Fu(e, n = {}) {
9114
9142
  e && (c = ea(c, e));
9115
9143
  }
9116
9144
  let u = c;
9117
- if (p && (u = _u({
9145
+ if (p && (u = bu({
9118
9146
  jp: a,
9119
9147
  resolved: u,
9120
9148
  resourcesByPath: p.resourcesByPath,
@@ -9124,7 +9152,7 @@ function Fu(e, n = {}) {
9124
9152
  } catch (e) {
9125
9153
  return `- ${a}: [READ_INTERCEPT: ${e.message}]`;
9126
9154
  }
9127
- return r && r.length && (u = La(u, r)), i != null && (u = Ra(u, i)), u = Au(u, f === "", C, S), u === void 0 ? `- ${a} = (undefined)` : `- ${a} = ${Q(u)}`;
9155
+ return r && r.length && (u = La(u, r)), i != null && (u = Ra(u, i)), u = Nu(u, f === "", C, S), u === void 0 ? `- ${a} = (undefined)` : `- ${a} = ${Q(u)}`;
9128
9156
  });
9129
9157
  return e && b(m, f), `多路径读取(共 ${t.length} 项,hash=${m}):\n${a.join("\n")}`;
9130
9158
  }
@@ -9146,7 +9174,7 @@ function Fu(e, n = {}) {
9146
9174
  e && (g = ea(g, e));
9147
9175
  }
9148
9176
  let _ = g;
9149
- if (p && (_ = _u({
9177
+ if (p && (_ = bu({
9150
9178
  jp: h,
9151
9179
  resolved: _,
9152
9180
  resourcesByPath: p.resourcesByPath,
@@ -9159,7 +9187,7 @@ function Fu(e, n = {}) {
9159
9187
  message: `read 拦截器抛错: ${e.message}`
9160
9188
  });
9161
9189
  }
9162
- b(m, f), r && r.length && (_ = La(_, r)), i != null && (_ = Ra(_, i)), _ = Au(_, f === "", C, S);
9190
+ b(m, f), r && r.length && (_ = La(_, r)), i != null && (_ = Ra(_, i)), _ = Nu(_, f === "", C, S);
9163
9191
  let y = e ? "" : `主数据说明: ${c}\n格式: 写入值需为 JSON,且通过声明的 schema 校验(校验失败时 write 会返回结构化错误)。字段约束(类型/min/max/enum/必填/默认)见 systemPrompt「可操作数据」段,或用 schema_data({ jsonPath }) 按需查。\n\n`, x = r && r.length ? `(字段裁剪:${r.join(",")})` : "", w = i == null ? "" : `(深度≤${i})`, T = x || w ? ` ${x}${w}` : "";
9164
9192
  if ((a !== void 0 || u !== void 0) && Array.isArray(_)) {
9165
9193
  let e = _.length, t = Math.max(0, a ?? 0), n = Math.min(200, Math.max(1, u ?? 50)), r = _.slice(t, t + n), i = t + n < e;
@@ -9232,7 +9260,7 @@ function Fu(e, n = {}) {
9232
9260
  hint: "仅 schema 声明的 key 可删"
9233
9261
  });
9234
9262
  if (p) {
9235
- let e = hu(t.jsonPath, p.resourcesByPath);
9263
+ let e = vu(t.jsonPath, p.resourcesByPath);
9236
9264
  if (e) return Y({
9237
9265
  code: e.spec.mode === "freeze" ? "FROZEN_FIELD" : "VERBATIM_PROTECTED",
9238
9266
  message: `write delete @ "${t.jsonPath}" 命中受保护字段 "${e.protectedPath}"(${e.spec.mode}),不可删除`,
@@ -9265,7 +9293,7 @@ function Fu(e, n = {}) {
9265
9293
  op: t.op ?? "set",
9266
9294
  jsonPath: t.jsonPath || "",
9267
9295
  value: g
9268
- }]), i = Ou({
9296
+ }]), i = ju({
9269
9297
  bindRef: s,
9270
9298
  patches: n,
9271
9299
  schema: o,
@@ -9283,13 +9311,13 @@ function Fu(e, n = {}) {
9283
9311
  detail: `${i.applied.length} 个 patch${i.applied.length > 1 ? "(批量)" : ""}`,
9284
9312
  value: i.applied.map((e) => `${e.op}@${e.jp}`),
9285
9313
  timestamp: Date.now()
9286
- }), b($(s), d), Pu(i.clone), `已 write(edit) 主数据(${i.applied.length} 个 patch)。当前值:${Q(i.clone, 600)} (新 hash=${$(s)})`) : i.error;
9314
+ }), b($(s), d), Lu(i.clone), `已 write(edit) 主数据(${i.applied.length} 个 patch)。当前值:${Q(i.clone, 600)} (新 hash=${$(s)})`) : i.error;
9287
9315
  }
9288
9316
  let C = Ia(g);
9289
9317
  if (C.parseError) return Yr("", g, C.parseError);
9290
9318
  let w = await k("set", S);
9291
9319
  if (w !== null) return w;
9292
- let E = Du({
9320
+ let E = Au({
9293
9321
  bindRef: s,
9294
9322
  value: C.parsed,
9295
9323
  schema: o,
@@ -9305,7 +9333,7 @@ function Fu(e, n = {}) {
9305
9333
  if (!E.ok) return E.error;
9306
9334
  if (c) return `dryRun(set): schema 校验通过。预览新值:${Q(E.data, 600)}。未实际写入、未入快照。`;
9307
9335
  let A = $(s);
9308
- return b(A, d), Pu(E.data), `已 write(set) 主数据 = ${Q(E.data, 600)} (新 hash=${A})${l ? "(白名单模式:仅更新 schema 声明字段,未声明字段保留)" : ""}`;
9336
+ return b(A, d), Lu(E.data), `已 write(set) 主数据 = ${Q(E.data, 600)} (新 hash=${A})${l ? "(白名单模式:仅更新 schema 声明字段,未声明字段保留)" : ""}`;
9309
9337
  }, {
9310
9338
  name: "write",
9311
9339
  description: "写入主数据(高层入口,合并 set/edit/delete + 自动乐观锁 + 自动快照)。四意图:① 整体替换 write({value:整个对象});② 增量 write({patch:{op,jsonPath,value}}) op=set/remove/merge/append/move(move 的 value=目标路径字符串);③ 批量原子 write({patches:[...]})(任一失败整批回滚);④ 删子路径 write({patch:{jsonPath},del:true})。dryRun:true 预检不落盘。写入自动 schema 校验(失败不写,按错误修正重试)+ 自动快照。详细用法见系统提示「能力使用提示」。",
@@ -9424,7 +9452,7 @@ function Fu(e, n = {}) {
9424
9452
  }
9425
9453
  let g = await k("set", n || (x ? y(c) : void 0));
9426
9454
  if (g !== null) return g;
9427
- let _ = Du({
9455
+ let _ = Au({
9428
9456
  bindRef: s,
9429
9457
  value: f,
9430
9458
  schema: o,
@@ -9457,7 +9485,7 @@ function Fu(e, n = {}) {
9457
9485
  message: "未提供 path 或有效 handle",
9458
9486
  hint: "传 path(受保护字段)或 handle(占位符 ⟦res:handle⟧ 里的句柄)"
9459
9487
  });
9460
- let r = fu(n);
9488
+ let r = hu(n);
9461
9489
  if (!u.has(r)) return Y({
9462
9490
  code: "RESOURCE_NOT_FOUND",
9463
9491
  message: `"${n}" 不是受保护字段`,
@@ -9497,7 +9525,7 @@ function Fu(e, n = {}) {
9497
9525
  message: "resource_update 需要 path",
9498
9526
  hint: "传要更新的 verbatim 受保护字段路径"
9499
9527
  });
9500
- let i = fu(e), a = u.get(i);
9528
+ let i = hu(e), a = u.get(i);
9501
9529
  if (!a) return Y({
9502
9530
  code: "RESOURCE_NOT_FOUND",
9503
9531
  message: `"${e}" 不是受保护字段`,
@@ -9587,8 +9615,8 @@ function Fu(e, n = {}) {
9587
9615
  }
9588
9616
  //#endregion
9589
9617
  //#region src/core/tools/fetchDoc.ts
9590
- var Iu = 3e4, Lu = [r(async ({ url: e, as: t }) => {
9591
- let n = new AbortController(), r = setTimeout(() => n.abort(), Iu);
9618
+ var zu = 3e4, Bu = [r(async ({ url: e, as: t }) => {
9619
+ let n = new AbortController(), r = setTimeout(() => n.abort(), zu);
9592
9620
  try {
9593
9621
  let r = await fetch(e, {
9594
9622
  method: "GET",
@@ -9605,7 +9633,7 @@ var Iu = 3e4, Lu = [r(async ({ url: e, as: t }) => {
9605
9633
  ].join("\n");
9606
9634
  } catch (t) {
9607
9635
  let r = t?.message || String(t);
9608
- return n.signal.aborted ? `获取失败:请求超时(${Iu}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
9636
+ return n.signal.aborted ? `获取失败:请求超时(${zu}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
9609
9637
  } finally {
9610
9638
  clearTimeout(r);
9611
9639
  }
@@ -9616,7 +9644,7 @@ var Iu = 3e4, Lu = [r(async ({ url: e, as: t }) => {
9616
9644
  url: t.string().describe("要抓取的 URL(同源或已配 CORS)"),
9617
9645
  as: t.enum(["text", "markdown"]).optional().describe("返回格式标签,默认 text")
9618
9646
  })
9619
- })], Ru = [
9647
+ })], Vu = [
9620
9648
  "id",
9621
9649
  "class",
9622
9650
  "href",
@@ -9628,12 +9656,12 @@ var Iu = 3e4, Lu = [r(async ({ url: e, as: t }) => {
9628
9656
  "aria-label",
9629
9657
  "name",
9630
9658
  "type"
9631
- ], zu = /^(value|srcdoc|formaction|on\w+)$/i, Bu = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session/i;
9632
- function Vu(e, t) {
9659
+ ], Hu = /^(value|srcdoc|formaction|on\w+)$/i, Uu = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session/i;
9660
+ function Wu(e, t) {
9633
9661
  if (!e) return null;
9634
- let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ?? Ru, s = (e) => {
9662
+ let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ?? Vu, s = (e) => {
9635
9663
  let t = {};
9636
- for (let n of Array.from(e.attributes)) (a ? o.includes(n.name) : o.includes(n.name) || n.name.startsWith("data-")) && (zu.test(n.name) || Bu.test(n.name) || (t[n.name] = n.value));
9664
+ for (let n of Array.from(e.attributes)) (a ? o.includes(n.name) : o.includes(n.name) || n.name.startsWith("data-")) && (Hu.test(n.name) || Uu.test(n.name) || (t[n.name] = n.value));
9637
9665
  return t;
9638
9666
  }, c = (e, t) => {
9639
9667
  let n = {
@@ -9649,10 +9677,10 @@ function Vu(e, t) {
9649
9677
  };
9650
9678
  return c(e, n);
9651
9679
  }
9652
- var Hu = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
9680
+ var Gu = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
9653
9681
  let i = e ? document.querySelector(e) : document.body;
9654
9682
  if (!i) return `未找到匹配元素:selector="${e}"`;
9655
- let a = Vu(i, {
9683
+ let a = Wu(i, {
9656
9684
  depth: t ?? 3,
9657
9685
  attrs: n,
9658
9686
  includeText: r ?? !0
@@ -9667,22 +9695,22 @@ var Hu = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
9667
9695
  attrs: t.array(t.string()).optional().describe("属性白名单(传了 = 严格白名单;不传 = 默认常用 + data-*)"),
9668
9696
  includeText: t.boolean().optional().describe("是否包含直接文本(默认 true)")
9669
9697
  })
9670
- }), Uu = [Hu], Wu = /* @__PURE__ */ "display.position.visibility.opacity.color.background-color.background-image.font-size.font-weight.line-height.text-align.z-index.overflow.width.height.margin.padding.border.border-radius.box-shadow.transform.transition.animation.cursor.pointer-events.flex-direction.gap.max-width.min-height".split("."), Gu = /* @__PURE__ */ new WeakMap(), Ku = !1;
9671
- function qu() {
9672
- if (Ku) return;
9698
+ }), Ku = [Gu], qu = /* @__PURE__ */ "display.position.visibility.opacity.color.background-color.background-image.font-size.font-weight.line-height.text-align.z-index.overflow.width.height.margin.padding.border.border-radius.box-shadow.transform.transition.animation.cursor.pointer-events.flex-direction.gap.max-width.min-height".split("."), Ju = /* @__PURE__ */ new WeakMap(), Yu = !1;
9699
+ function Xu() {
9700
+ if (Yu) return;
9673
9701
  let e = globalThis.EventTarget;
9674
9702
  if (!e?.prototype?.addEventListener) return;
9675
- Ku = !0;
9703
+ Yu = !0;
9676
9704
  let t = e.prototype.addEventListener, n = e.prototype.removeEventListener;
9677
9705
  e.prototype.addEventListener = function(e, ...n) {
9678
9706
  try {
9679
- let t = Gu.get(this);
9680
- t || (t = /* @__PURE__ */ new Map(), Gu.set(this, t)), t.set(String(e), (t.get(String(e)) ?? 0) + 1);
9707
+ let t = Ju.get(this);
9708
+ t || (t = /* @__PURE__ */ new Map(), Ju.set(this, t)), t.set(String(e), (t.get(String(e)) ?? 0) + 1);
9681
9709
  } catch {}
9682
9710
  return t.call(this, e, ...n);
9683
9711
  }, e.prototype.removeEventListener = function(e, ...t) {
9684
9712
  try {
9685
- let t = Gu.get(this);
9713
+ let t = Ju.get(this);
9686
9714
  if (t) {
9687
9715
  let n = (t.get(String(e)) ?? 1) - 1;
9688
9716
  n <= 0 ? t.delete(String(e)) : t.set(String(e), n);
@@ -9691,10 +9719,10 @@ function qu() {
9691
9719
  return n.call(this, e, ...t);
9692
9720
  };
9693
9721
  }
9694
- function Ju(e) {
9695
- return [...Gu.get(e)?.entries() ?? []].filter(([, e]) => e > 0).map(([e]) => e);
9722
+ function Zu(e) {
9723
+ return [...Ju.get(e)?.entries() ?? []].filter(([, e]) => e > 0).map(([e]) => e);
9696
9724
  }
9697
- function Yu(e, t = 12) {
9725
+ function Qu(e, t = 12) {
9698
9726
  let n = [], r = e, i = 0;
9699
9727
  for (; r && r.tagName && i < t;) {
9700
9728
  let e = r.tagName.toLowerCase(), t = r.id;
@@ -9715,7 +9743,7 @@ function Yu(e, t = 12) {
9715
9743
  }
9716
9744
  return n.join(" > ");
9717
9745
  }
9718
- function Xu(e, t, n = {}) {
9746
+ function $u(e, t, n = {}) {
9719
9747
  if (!e) return {
9720
9748
  hits: [],
9721
9749
  total: 0,
@@ -9753,7 +9781,7 @@ function Xu(e, t, n = {}) {
9753
9781
  n = r.slice(Math.max(0, i - 20), i + t.length + 40);
9754
9782
  }
9755
9783
  return {
9756
- selector: Yu(e),
9784
+ selector: Qu(e),
9757
9785
  tag: e.tagName.toLowerCase(),
9758
9786
  text: n.slice(0, 120)
9759
9787
  };
@@ -9762,7 +9790,7 @@ function Xu(e, t, n = {}) {
9762
9790
  truncated: a.length > o
9763
9791
  };
9764
9792
  }
9765
- var Zu = [
9793
+ var ed = [
9766
9794
  "content",
9767
9795
  "display",
9768
9796
  "width",
@@ -9770,14 +9798,14 @@ var Zu = [
9770
9798
  "background-color",
9771
9799
  "position"
9772
9800
  ];
9773
- function Qu(e, t = {}) {
9801
+ function td(e, t = {}) {
9774
9802
  if (!e) return null;
9775
9803
  let n = {
9776
- selector: Yu(e),
9804
+ selector: Qu(e),
9777
9805
  tag: e.tagName.toLowerCase(),
9778
9806
  attrs: {}
9779
9807
  };
9780
- for (let t of Array.from(e.attributes)) !(Ru.includes(t.name) || t.name.startsWith("data-")) || zu.test(t.name) || Bu.test(t.name) || (n.attrs[t.name] = t.value);
9808
+ for (let t of Array.from(e.attributes)) !(Vu.includes(t.name) || t.name.startsWith("data-")) || Hu.test(t.name) || Uu.test(t.name) || (n.attrs[t.name] = t.value);
9781
9809
  let r = Array.from(e.childNodes).filter((e) => e.nodeType === 3).map((e) => e.textContent || "").join("").trim();
9782
9810
  r && (n.text = r.slice(0, 400));
9783
9811
  let i = String(e.innerText ?? e.textContent ?? "").trim();
@@ -9799,7 +9827,7 @@ function Qu(e, t = {}) {
9799
9827
  if (typeof a != "function") return r;
9800
9828
  try {
9801
9829
  let i = a(e, n ?? null);
9802
- for (let e of n ? Zu : t.styles ?? Wu) {
9830
+ for (let e of n ? ed : t.styles ?? qu) {
9803
9831
  let t = typeof i.getPropertyValue == "function" ? i.getPropertyValue(e) : i[e];
9804
9832
  t && (r[e] = String(t).slice(0, 200));
9805
9833
  }
@@ -9817,16 +9845,16 @@ function Qu(e, t = {}) {
9817
9845
  n.events = {
9818
9846
  inline: t,
9819
9847
  vue: r ? Object.keys(r).filter((e) => /^on[A-Z]/.test(e)).map((e) => e.slice(2).toLowerCase()) : [],
9820
- captured: Ju(e)
9848
+ captured: Zu(e)
9821
9849
  };
9822
9850
  }
9823
9851
  return n;
9824
9852
  }
9825
- var $u = r(({ query: e, mode: t, limit: n, root: r }) => {
9826
- qu();
9853
+ var nd = r(({ query: e, mode: t, limit: n, root: r }) => {
9854
+ Xu();
9827
9855
  let i = r ? document.querySelector(r) : document;
9828
9856
  if (r && !i) return `未找到 root 元素:selector="${r}"`;
9829
- let a = Xu(i, e, {
9857
+ let a = $u(i, e, {
9830
9858
  mode: t,
9831
9859
  limit: n
9832
9860
  });
@@ -9843,11 +9871,11 @@ var $u = r(({ query: e, mode: t, limit: n, root: r }) => {
9843
9871
  limit: t.number().int().min(1).max(20).optional().describe("返回上限(默认 10)"),
9844
9872
  root: t.string().optional().describe("限定搜索范围的容器选择器(默认整页)")
9845
9873
  })
9846
- }), ed = r(({ selector: e, styles: t, includeHtml: n, htmlLimit: r, includeEvents: i, includeRect: a, pseudo: o }) => {
9847
- qu();
9874
+ }), rd = r(({ selector: e, styles: t, includeHtml: n, htmlLimit: r, includeEvents: i, includeRect: a, pseudo: o }) => {
9875
+ Xu();
9848
9876
  let s = document.querySelector(e);
9849
9877
  if (!s) return `未找到匹配元素:selector="${e}"(可先用 dom_search 定位)`;
9850
- let c = Qu(s, {
9878
+ let c = td(s, {
9851
9879
  styles: t,
9852
9880
  includeHtml: n,
9853
9881
  htmlLimit: r,
@@ -9868,7 +9896,7 @@ var $u = r(({ query: e, mode: t, limit: n, root: r }) => {
9868
9896
  includeRect: t.boolean().optional().describe("是否含几何位置(默认 true)"),
9869
9897
  pseudo: t.boolean().optional().describe("是否含 ::before/::after 伪元素摘要(默认 false)")
9870
9898
  })
9871
- }), td = {
9899
+ }), id = {
9872
9900
  name: "dom-inspect",
9873
9901
  description: "页面 DOM 深度检视工具(dom_search 搜索元素 / dom_info 读内容·计算样式·事件绑定·几何)。定位元素、验证样式落地、排查交互绑定时加载",
9874
9902
  getContent: () => [
@@ -9885,15 +9913,15 @@ var $u = r(({ query: e, mode: t, limit: n, root: r }) => {
9885
9913
  "## 排障套路",
9886
9914
  "1. dom_search(mode:\"text\", query:按钮文案) 定位 → 2. dom_info(styles:[\"display\",\"background-color\",\"pointer-events\"]) 验证样式/点击性 → 3. 不符则改数据(get_dom 看结构对照)"
9887
9915
  ].join("\n"),
9888
- tools: [() => [$u, ed]]
9916
+ tools: [() => [nd, rd]]
9889
9917
  };
9890
9918
  //#endregion
9891
9919
  //#region src/core/tools/envTool.ts
9892
- function nd(e) {
9920
+ function ad(e) {
9893
9921
  let t = e;
9894
9922
  return typeof t.tagName == "string" || typeof t.nodeType == "number" && typeof t.nodeName == "string";
9895
9923
  }
9896
- function rd(e, t = 3, n = 2e3, r, i) {
9924
+ function od(e, t = 3, n = 2e3, r, i) {
9897
9925
  if (e == null) return e;
9898
9926
  if (typeof e == "string") return e.length > n ? e.slice(0, n) + "…(已截断)" : e;
9899
9927
  if (typeof e == "number" || typeof e == "boolean") return e;
@@ -9902,14 +9930,14 @@ function rd(e, t = 3, n = 2e3, r, i) {
9902
9930
  if (typeof e == "bigint") return `${e.toString()}n`;
9903
9931
  if (typeof e != "object") return String(e);
9904
9932
  let a = e;
9905
- if (nd(a)) {
9933
+ if (ad(a)) {
9906
9934
  let e = a;
9907
9935
  return e.tagName ? `[Element: <${e.tagName.toLowerCase()}>]` : `[Node: ${e.nodeName}]`;
9908
9936
  }
9909
9937
  if (r?.has(a)) return "[Circular]";
9910
9938
  let o = r ?? /* @__PURE__ */ new WeakSet();
9911
9939
  if (o.add(a), Array.isArray(e)) {
9912
- let r = e.slice(0, 100).map((e) => rd(e, t - 1, n, o, i));
9940
+ let r = e.slice(0, 100).map((e) => od(e, t - 1, n, o, i));
9913
9941
  return e.length > 100 && r.push(`…(共 ${e.length} 项,已截断)`), r;
9914
9942
  }
9915
9943
  if (t < 0) return "(对象,已截断)";
@@ -9922,14 +9950,14 @@ function rd(e, t = 3, n = 2e3, r, i) {
9922
9950
  }
9923
9951
  try {
9924
9952
  let e = a[r];
9925
- i?.test(r) ? s[r] = "[REDACTED]" : s[r] = rd(e, t - 1, n, o, i);
9953
+ i?.test(r) ? s[r] = "[REDACTED]" : s[r] = od(e, t - 1, n, o, i);
9926
9954
  } catch {
9927
9955
  s[r] = "(getter 抛错)";
9928
9956
  }
9929
9957
  }
9930
9958
  return s;
9931
9959
  }
9932
- function id(e) {
9960
+ function sd(e) {
9933
9961
  let t = e ?? (typeof window < "u" ? window : {}), n = t.navigator, r = t.location, i = t.document;
9934
9962
  return {
9935
9963
  location: {
@@ -9962,9 +9990,9 @@ function id(e) {
9962
9990
  } : "(无 document)"
9963
9991
  };
9964
9992
  }
9965
- var ad = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|opener|parent|top|self|window|globalThis|closed|history|navigation|trustedTypes|origin|crossOriginIsolated)$/, od = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session|ticket/i, sd = r(({ key: e }) => {
9993
+ var cd = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|opener|parent|top|self|window|globalThis|closed|history|navigation|trustedTypes|origin|crossOriginIsolated)$/, ld = /token|secret|password|passwd|api[-_]?key|auth|cred|csrf|session|ticket/i, ud = r(({ key: e }) => {
9966
9994
  if (e) {
9967
- if (ad.test(e) || od.test(e)) return JSON.stringify({
9995
+ if (cd.test(e) || ld.test(e)) return JSON.stringify({
9968
9996
  key: e,
9969
9997
  denied: !0,
9970
9998
  reason: "安全:该 key 在 denylist(localStorage/sessionStorage/cookie/document 或敏感命名 token/secret/key/auth),不读取防泄漏"
@@ -9974,18 +10002,18 @@ var ad = /^(localStorage|sessionStorage|cookie|document|frames|frameElement|open
9974
10002
  key: e,
9975
10003
  exists: t !== void 0,
9976
10004
  type: typeof t,
9977
- value: rd(t, 3, 2e3, void 0, od)
10005
+ value: od(t, 3, 2e3, void 0, ld)
9978
10006
  }, null, 2);
9979
10007
  }
9980
- return JSON.stringify(id(), null, 2);
10008
+ return JSON.stringify(sd(), null, 2);
9981
10009
  }, {
9982
10010
  name: "inspect_env",
9983
10011
  description: "读宿主页面环境信息(排查调试)。不传参返回摘要(URL/origin、浏览器/语言、viewport、title/readyState);传 key 读指定 window 属性值(如 key:\"appConfig\")。只读,大结果自动外存 vfs。",
9984
10012
  schema: t.object({ key: t.string().optional().describe("要读取的 window 属性名(如 \"appConfig\"/\"__DEBUG__\");不传 = 返回环境摘要") })
9985
- }), cd = [sd];
10013
+ }), dd = [ud];
9986
10014
  //#endregion
9987
10015
  //#region src/core/harness/budget.ts
9988
- function ld(e, t, n) {
10016
+ function fd(e, t, n) {
9989
10017
  let r = 0;
9990
10018
  return {
9991
10019
  name: "budget",
@@ -10010,12 +10038,12 @@ function ld(e, t, n) {
10010
10038
  }
10011
10039
  //#endregion
10012
10040
  //#region src/core/sdk/actions.ts
10013
- var ud = /^[a-zA-Z][a-zA-Z0-9_]*$/;
10014
- function dd(e) {
10041
+ var pd = /^[a-zA-Z][a-zA-Z0-9_]*$/;
10042
+ function md(e) {
10015
10043
  let n = [];
10016
10044
  for (let [i, a] of Object.entries(e)) {
10017
- if (!ud.test(i)) {
10018
- console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${ud}),已跳过`);
10045
+ if (!pd.test(i)) {
10046
+ console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${pd}),已跳过`);
10019
10047
  continue;
10020
10048
  }
10021
10049
  let e = a.description || `宿主动作 ${i}`;
@@ -10035,9 +10063,9 @@ function dd(e) {
10035
10063
  }
10036
10064
  return n;
10037
10065
  }
10038
- function fd(e) {
10066
+ function hd(e) {
10039
10067
  let t = {};
10040
- for (let [n, r] of Object.entries(e)) ud.test(n) && (t[n] = {
10068
+ for (let [n, r] of Object.entries(e)) pd.test(n) && (t[n] = {
10041
10069
  description: r.description,
10042
10070
  hasParams: !!r.params
10043
10071
  });
@@ -10045,12 +10073,12 @@ function fd(e) {
10045
10073
  }
10046
10074
  //#endregion
10047
10075
  //#region src/core/toolsets.ts
10048
- var pd = Lu, md = Uu;
10049
- function hd(e, t) {
10050
- return Fu(e, t);
10076
+ var gd = Bu, _d = Ku;
10077
+ function vd(e, t) {
10078
+ return Ru(e, t);
10051
10079
  }
10052
- function gd(e, t, n, r, i) {
10053
- let a = zl(e);
10080
+ function yd(e, t, n, r, i) {
10081
+ let a = Hl(e);
10054
10082
  return [
10055
10083
  ...a.dataOps ? t : [],
10056
10084
  ...a.fetch ? n : [],
@@ -10060,7 +10088,7 @@ function gd(e, t, n, r, i) {
10060
10088
  }
10061
10089
  //#endregion
10062
10090
  //#region src/core/sdk/toolRegistry.ts
10063
- function _d(e) {
10091
+ function bd(e) {
10064
10092
  let t = /* @__PURE__ */ new Map(), n = [];
10065
10093
  for (let r of e) for (let e of r.tools) {
10066
10094
  let i = t.get(e.name);
@@ -10080,15 +10108,15 @@ function _d(e) {
10080
10108
  }
10081
10109
  //#endregion
10082
10110
  //#region src/core/harness/usageHints.ts
10083
- var vd = .7;
10084
- function yd(e, t, n = "simple", r, i) {
10085
- let a = zl(e), o = n !== "advanced", s = n === "minimal";
10111
+ var xd = .7;
10112
+ function Sd(e, t, n = "simple", r, i) {
10113
+ let a = Hl(e), o = n !== "advanced", s = n === "minimal";
10086
10114
  return {
10087
10115
  name: "usageHints",
10088
10116
  augmentPrompt: (n) => {
10089
10117
  let r = [];
10090
10118
  if (a.planning && (r.push("【自适应规划】按任务复杂度决定是否先规划,不要对简单任务过度编排:"), r.push(" · 简单/明确任务(改单字段、调样式、查值)→ 直接 read/write 执行,不必 write_todos。"), r.push(" · 复杂任务(多步、大改、有歧义、不可逆)→ 先 write_todos 拆解,首个任务标 in_progress,逐项推进。"), r.push(" · 执行中发现步骤要改/补/细分 → 用 update_todo({id, content?, status?}) 按 id 增量改单项,不必重传整个清单。"), e?.humanConfirm ? r.push(" · 规划出多步方案若需用户拍板 → 先 request_human_confirmation 给方案选项,确认后再执行。") : r.push(" · 规划出多步方案若需用户拍板 → 以文字列出方案选项等用户回复,勿自行拍板。"), r.push(" · 规划阶段有轮次预算(maxPlanRevisions,默认 5):勿反复调研/改计划而不执行,规划充分后即开始 write 落地。")), t && (o ? (r.push("读写主数据用 read/write(高层入口,自动乐观锁 + 自动快照)。read({jsonPath}) 读子路径当前值(返回含 hash,write 时自动比对,无需手动传);read() 不传读整个主数据 + 说明。write 改值两姿势:① 改单个字段/子路径用 write({patch:{op:\"set\", jsonPath:\"路径.字段\", value:新值}})——patch.value 就是该字段的新值(类型匹配:string 直传字符串、number 传数字、对象传对象),不要包成 {字段:值} 对象(字段名已在 jsonPath);也兼容 write({value:新值, patch:{op,jsonPath}}) 顶层 value(向后兼容,但优先 patch.value,避免与整体 set 的 value 混淆);② 替换整个对象用 write({value:{整个新对象}})。op:set 设值 / remove 删 / merge 合并对象 / append 追加数组 / move 移动数组元素(value=目标路径字符串:数组本身=追加到末尾、数组内下标=插到该位置;同数组即重排如组件调序,目标下标按移除源后解释,一步完成免双 set 交换);批量多改动 write({patches:[{op,jsonPath,value},...]});删子路径 write({patch:{jsonPath:\"路径\"}, del:true})。写入自动经 schema 校验(失败不写,按错误提示改值类型/形状后重试)+ 自动存快照" + (s ? "。" : "(出错可用 restore_data 回退)。")), r.push("修改大对象/数组优先用 write 的 patch 增量(只发改动部分),避免整体重传被 max_tokens 截断致 JSON 不完整。"), r.push("读大数组(read 返回 hasMore=true)用 read({jsonPath,offset,limit}) 分页(offset+=limit 续读,默认 limit=50);一次读多个不相关子路径用 read({jsonPaths:[...]}) 省轮次;复杂 patches 改动先 write({patches,dryRun:true}) 预检(走完整校验不落盘)。"), r.push("read/describe 返回按 schema 投影:仅 schema 声明的字段可见(未声明字段自动隐藏,防误操作);要操作某字段需集成方在 schema 声明。"), s || (r.push("查任意路径完整约束或对比快照差异需切 advanced 工具模式(schema_data/diff_data,当前未装载勿调用);查历史快照值(只读不改当前)用 history_data({id?,jsonPath?})。"), r.push("在大数组里按条件筛选用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素 path/index;定位后用 write patch 改。找名字记不清的元素用 search_data(substring/regex/fuzzy)。批量过滤/映射/聚合/重写大数组用 eval_script(沙箱脚本,mode=query 只读/transform 落地)。"))) : (r.push("改主数据前先 get_data({jsonPath}) 读其当前真实值与 hash(返回末尾 hash=xxx),基于真实值改,不要凭记忆。写入(set/edit/delete)时回传 expectedHash=该 hash 启用乐观锁——若主数据在你 get 之后被外部代码/其他 agent/用户手动改过,会触发冲突:集成方若开启人工介入,工具会挂起等用户决定(保留外部/强制覆盖/回退),你应等待工具返回后按结果继续(保留外部→重新 get 再改;强制覆盖→已写入,继续;回退→已回退到历史快照,基于回退值重写);未开启人工介入时返回 VERSION_CONFLICT 不写入,重新 get 拿最新值与 hash 再改。"), r.push("不确定主数据字段结构时用 describe_data 查看说明。"), r.push("修改大对象/数组优先用 edit_data 增量 patch(只发改动部分),避免 set_data 整体重传被 max_tokens 截断导致 JSON 不完整、校验失败。"), r.push("修改主数据出错时可用 restore_data 回退最近一次。"), r.push("在大数组里按条件筛选元素用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素的 path/index;定位后再 edit_data 改。"), r.push("找名字记不清的元素用 search_data(支持 substring/regex/fuzzy 模糊搜索)。"), r.push("需要过滤/映射/聚合/批量重写大数组时用 eval_script(沙箱脚本,入参 data);只读探查用 mode=query,批量重写用 mode=transform(返回值经校验后落地)。"), r.push("读大数组用 read({jsonPath,offset,limit}) 分页(返回 hasMore=true 时 offset+=limit 续读);一次读多个不相关子路径用 read({jsonPaths});复杂改动先 write({...,dryRun:true}) 预检不落盘。"), r.push("对比当前与历史快照(或一段 JSON against)的差异用 diff_data({snapshotId?,against?})(返回结构化 path→from/to,verify 自纠/操作审计/\"刚才改了啥\");只读查历史快照值用 history_data({id?,jsonPath?})。"))), a.subagent && r.push("独立子任务可 spawn_agent 委派(过程隔离,不占主上下文):默认只读,需要子 agent 写数据时传 writablePaths(路径前缀白名单,越界 PATH_OUT_OF_SCOPE)。多个独立子任务可 spawn_agents 并行委派(各子互不通信,结论由你汇总;并行委派不可授写权限,写操作由你收尾执行)。"), a.inspectEnv && r.push("排查页面环境(当前 URL/浏览器/视口/集成方调试变量)用 inspect_env——不传参返回环境摘要(location/navigator/viewport/document),传 key 读特定 window 属性(如 inspect_env({key:\"appConfig\"}) 读 window.appConfig)。改完数据看渲染、定位\"为何没生效\"时用它(只读,不改数据)。"), a.domInspect && r.push("改完数据想确认渲染是否生效(或定位元素/辅助 UI 设计问答)用 get_dom({selector?,depth?}) 读渲染后 DOM(结构化返回 tag/attrs/text/children,depth 控制深度防爆炸,只读)。配合宿主 actions(save_draft/publish 等)形成\"改数据→get_dom 看渲染→触发动作\"闭环。"), a.draftWrite && !o && (r.push("生成超大 JSON(如 50+ 组件页面,单次 write 受 max_tokens 限制装不下)用 draft_write 分块构建 → draft_commit 原子提交:draft_write({draftId, chunk, mode}) mode:\"start\" 新建/\"append\" 追加(拼 JSON 片段到 drafts 池);累积完 draft_commit({draftId}) 合并 + schema 校验 + 写主数据(失败草稿保留可修后重试,成功自动清草稿)。小改仍用 write patch,只在大 JSON 从零生成时用 draft。"), r.push("⚠️ 大 JSON 分块构建是典型多轮工具调用(draft_write×N + draft_commit + read 确认 + 调研 read/query),默认 maxToolRounds=10 可能触顶被 while 截断导致草稿写不完;目标组件数大时集成方应在 createChatSdk 配 maxToolRounds ≥ 20(或按 N+5 估算)。draft_commit 提交同样走乐观锁(改前 read 拿 hash,bind 被改过会触发冲突介入,不静默覆盖)。")), a.todoDeps && r.push("复杂任务可用 todos 层级依赖:write_todos 时给 todo 传 parentId(父任务 id,表达层级)+ deps(依赖的 todo id 数组,必须先完成)。有依赖的任务,deps 全 completed 后再标 in_progress;完成时 update_todo({id, status:\"completed\", evidence:\"完成证据\"}) 记证据。无依赖关系的任务不传 parentId/deps(扁平)。"), a.focus && !o && (r.push("【上下文聚焦】判断任务范围,用 set_focus/add_focus/remove_focus/clear_focus 自动收敛工作范围:"), r.push(" · 局部任务(只改某一组件/区域,如「调导航栏」「改 components.3 样式」)→ 先 read 定位 jsonPath,再 set_focus({path:\"该子树路径\"}) 聚焦;聚焦后每轮只看该子树结构,写其他位置会被 PATH_DENIED 拒绝。"), r.push(" · 多个相关组件(如「同时改导航栏和页脚」)→ set_focus 聚焦首个后用 add_focus({path}) 追加其余;聚焦后可写任一焦点子树,越界仍被拒;移除单个用 remove_focus({path})。"), r.push(" · 全局任务(多处/整体结构,如「重排所有组件」「换主题」)→ 不要聚焦,保持全量视野直接写。"), r.push(" · 完成局部精修、要转向其他区域或做整体改动 → 调 clear_focus 退出聚焦(清空全部焦点),恢复全部读写权限。"), r.push(" · set_focus/add_focus 的 path 必须在 schema 内(类型校验);不确定路径先 read/describe_data 查。")), e?.subagents?.length) {
10091
- let t = e.subagents.filter((e) => (e.temperature ?? 0) >= vd || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), n = e.subagents.filter((e) => (e.temperature ?? 0) < vd && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
10119
+ let t = e.subagents.filter((e) => (e.temperature ?? 0) >= xd || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), n = e.subagents.filter((e) => (e.temperature ?? 0) < xd && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
10092
10120
  r.push("【规划-反思-执行·路由】按任务性质选模式,不要对简单任务过度编排:"), t.length && (r.push(` · 创作/设计/开放性需求(如"设计主题风格""换个感觉")→ 先调 ${t.map((e) => "use_" + e.id).join("/")} 出 2-3 套方案(高温创意),`), r.push(e?.humanConfirm ? " 不要自己拍板;拿到方案后,若需用户拍板用 request_human_confirmation 弹选项。" : " 不要自己拍板;拿到方案后以文字列出选项等用户回复(humanConfirm 未开,勿调不存在工具)。")), n.length && r.push(` · 严谨/易错/校验类 → 可先调 ${n.map((e) => "use_" + e.id).join("/")} 反思挑刺(低温审查),据反馈修订。`), r.push(o ? " · 方案定稿后,由你(主 agent)用 write 落地成 JSON(低温度执行 + schema 校验 + 写前确认)。" : " · 方案定稿后,由你(主 agent)用 edit_data 落地成 JSON(低温度执行 + schema 校验 + 写前确认)。"), r.push(" · 简单/明确任务(如\"标题改红色\")直接执行,不必走规划-反思。");
10093
10121
  }
10094
10122
  e?.humanConfirm && (r.push("【人工确认·必读】以下情形必须先调 request_human_confirmation 征询用户、拿到答复后再继续,不要自行拍板:"), r.push(" 1) 用户让你「给方案/列选项/我来选/挑一个」时:把每个方案作为一个 option,调 request_human_confirmation(question=简述, options=[方案A,方案B,...], recommendation=你推荐的)。不要只回文字罗列方案让用户自己回复——要用工具把选项做成可点选按钮。"), r.push(" 2) 需求有歧义/不确定时:调工具问清楚(options 不传则用户答同意或拒绝)。"), r.push(" 3) 即将执行高风险不可逆操作(删除/覆盖/批量改动)前:调工具确认。"), r.push(" 4) 规划出多步方案需用户确认时:把整个方案(或关键分步)作为 option 调 request_human_confirmation,确认后再执行。"), r.push("用户在选项里选了哪个,就按那个方案继续;选「拒绝」则停止并询问如何调整。"));
@@ -10108,7 +10136,7 @@ function yd(e, t, n = "simple", r, i) {
10108
10136
  }
10109
10137
  //#endregion
10110
10138
  //#region src/core/harness/resourcesPin.ts
10111
- function bd(e) {
10139
+ function Cd(e) {
10112
10140
  let t = e.toolsExposed === !1 ? "读到 ⟦frozen:path⟧/⟦res:handle⟧ 占位符 = 精确值在冻结区/资源池(不入消息流);resource_get/resource_update 为 advanced 工具,当前模式未装载,勿尝试调用;freeze 字段不可写(撞 FROZEN_FIELD 即放弃);verbatim 字段保持原值,勿在当前模式下尝试改写(直接写新值会 VERBATIM_MISMATCH);撞 RESOURCE_EVICTED/RESOURCE_NOT_FOUND 重新 read 懒注册。" : "读到 ⟦frozen:path⟧/⟦res:handle⟧ 占位符 = 精确值在冻结区/资源池(不入消息流);需真值用 resource_get({path});freeze 字段不可写(撞 FROZEN_FIELD 即放弃);verbatim 直接写新值会 VERBATIM_MISMATCH,先 resource_update 再写回句柄;撞 RESOURCE_EVICTED/RESOURCE_NOT_FOUND 重新 read 懒注册。";
10113
10141
  return {
10114
10142
  name: "resourcesPin",
@@ -10123,102 +10151,102 @@ function bd(e) {
10123
10151
  }
10124
10152
  //#endregion
10125
10153
  //#region src/core/backends/skillStore.ts
10126
- var xd = "v:1::skill-store", Sd = "chat-sdk";
10127
- function Cd(e, t, n) {
10128
- return `${xd}::${e}::${t}::${n}`;
10154
+ var wd = "v:1::skill-store", Td = "chat-sdk";
10155
+ function Ed(e, t, n) {
10156
+ return `${wd}::${e}::${t}::${n}`;
10129
10157
  }
10130
- function wd(e, t) {
10131
- return `${xd}::${e}::${t}::`;
10158
+ function Dd(e, t) {
10159
+ return `${wd}::${e}::${t}::`;
10132
10160
  }
10133
- function Td(e = {}) {
10134
- let t = e.dbName ?? Sd, n = e.backend ?? "indexed", r = e.id ?? "", i, a, o = new Promise((e) => {
10161
+ function Od(e = {}) {
10162
+ let t = e.dbName ?? Td, n = e.backend ?? "indexed", r = e.id ?? "", i, a, o = new Promise((e) => {
10135
10163
  a = e;
10136
10164
  });
10137
10165
  return (async () => {
10138
10166
  try {
10139
10167
  if (n === "indexed") {
10140
10168
  if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
10141
- i = await Ml(t), a(!0);
10169
+ i = await Fl(t), a(!0);
10142
10170
  } else if (n === "session") {
10143
10171
  if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
10144
- i = Nl(sessionStorage), a(!0);
10172
+ i = Il(sessionStorage), a(!0);
10145
10173
  } else if (n === "local") {
10146
10174
  if (typeof localStorage > "u") throw Error("localStorage 不可用");
10147
- i = Nl(localStorage), a(!0);
10148
- } else i = jl(), a(!1);
10175
+ i = Il(localStorage), a(!0);
10176
+ } else i = Pl(), a(!1);
10149
10177
  } catch {
10150
- i = jl(), a(!1);
10178
+ i = Pl(), a(!1);
10151
10179
  }
10152
10180
  })(), {
10153
10181
  ready: o,
10154
10182
  async list() {
10155
10183
  let e = [];
10156
- return await i.scan(wd(t, r), (t, n) => {
10184
+ return await i.scan(Dd(t, r), (t, n) => {
10157
10185
  e.push(n);
10158
10186
  }), e;
10159
10187
  },
10160
10188
  async get(e) {
10161
- return await i.get(Cd(t, r, e));
10189
+ return await i.get(Ed(t, r, e));
10162
10190
  },
10163
10191
  async put(e) {
10164
10192
  try {
10165
- await i.set(Cd(t, r, e.name), e);
10193
+ await i.set(Ed(t, r, e.name), e);
10166
10194
  } catch (e) {
10167
- Cl(e) && (i = jl());
10195
+ El(e) && (i = Pl());
10168
10196
  }
10169
10197
  },
10170
10198
  async remove(e) {
10171
- let n = Cd(t, r, e);
10199
+ let n = Ed(t, r, e);
10172
10200
  return await i.get(n) == null ? !1 : (await i.del(n), !0);
10173
10201
  },
10174
10202
  async clear() {
10175
- await i.clearPrefix(wd(t, r));
10203
+ await i.clearPrefix(Dd(t, r));
10176
10204
  },
10177
10205
  dispose() {}
10178
10206
  };
10179
10207
  }
10180
10208
  //#endregion
10181
10209
  //#region src/core/backends/preferenceStore.ts
10182
- var Ed = [
10210
+ var kd = [
10183
10211
  "color",
10184
10212
  "copy",
10185
10213
  "layout",
10186
10214
  "interaction",
10187
10215
  "tech",
10188
10216
  "other"
10189
- ], Dd = "v:1::pref-store", Od = "chat-sdk";
10190
- function kd(e, t, n) {
10191
- return `${Dd}::${e}::${t}::${n}`;
10217
+ ], Ad = "v:1::pref-store", jd = "chat-sdk";
10218
+ function Md(e, t, n) {
10219
+ return `${Ad}::${e}::${t}::${n}`;
10192
10220
  }
10193
- function Ad(e, t) {
10194
- return `${Dd}::${e}::${t}::`;
10221
+ function Nd(e, t) {
10222
+ return `${Ad}::${e}::${t}::`;
10195
10223
  }
10196
- function jd() {
10224
+ function Pd() {
10197
10225
  return `pref-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
10198
10226
  }
10199
- function Md(e = {}) {
10200
- let t = e.dbName ?? Od, n = e.backend ?? "indexed", r = e.id ?? "", i = e.maxEntries ?? 20, a, o, s = new Promise((e) => {
10227
+ function Fd(e = {}) {
10228
+ let t = e.dbName ?? jd, n = e.backend ?? "indexed", r = e.id ?? "", i = e.maxEntries ?? 20, a, o, s = new Promise((e) => {
10201
10229
  o = e;
10202
10230
  });
10203
10231
  (async () => {
10204
10232
  try {
10205
10233
  if (n === "indexed") {
10206
10234
  if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
10207
- a = await Ml(t), o(!0);
10235
+ a = await Fl(t), o(!0);
10208
10236
  } else if (n === "session") {
10209
10237
  if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
10210
- a = Nl(sessionStorage), o(!0);
10238
+ a = Il(sessionStorage), o(!0);
10211
10239
  } else if (n === "local") {
10212
10240
  if (typeof localStorage > "u") throw Error("localStorage 不可用");
10213
- a = Nl(localStorage), o(!0);
10214
- } else a = jl(), o(!1);
10241
+ a = Il(localStorage), o(!0);
10242
+ } else a = Pl(), o(!1);
10215
10243
  } catch {
10216
- a = jl(), o(!1);
10244
+ a = Pl(), o(!1);
10217
10245
  }
10218
10246
  })();
10219
10247
  async function c() {
10220
10248
  let e = [];
10221
- return await a.scan(Ad(t, r), (t, n) => {
10249
+ return await a.scan(Nd(t, r), (t, n) => {
10222
10250
  e.push(n);
10223
10251
  }), e;
10224
10252
  }
@@ -10229,7 +10257,7 @@ function Md(e = {}) {
10229
10257
  },
10230
10258
  async put(e) {
10231
10259
  let n = await c(), o = Date.now(), s = n.reduce((e, t) => Math.max(e, t.updatedAt), 0), l = n.find((t) => t.topic === e.topic), u = {
10232
- id: e.id ?? l?.id ?? jd(),
10260
+ id: e.id ?? l?.id ?? Pd(),
10233
10261
  content: e.content,
10234
10262
  topic: e.topic,
10235
10263
  sourceSessionId: l?.sourceSessionId ?? e.sourceSessionId,
@@ -10237,71 +10265,71 @@ function Md(e = {}) {
10237
10265
  createdAt: l?.createdAt ?? o,
10238
10266
  updatedAt: Math.max(o, s + 1)
10239
10267
  };
10240
- l && l.id !== u.id && await a.del(kd(t, r, l.id));
10268
+ l && l.id !== u.id && await a.del(Md(t, r, l.id));
10241
10269
  try {
10242
- await a.set(kd(t, r, u.id), u);
10270
+ await a.set(Md(t, r, u.id), u);
10243
10271
  } catch (e) {
10244
- Cl(e) && (a = jl(), await a.set(kd(t, r, u.id), u));
10272
+ El(e) && (a = Pl(), await a.set(Md(t, r, u.id), u));
10245
10273
  }
10246
10274
  let d = await c();
10247
10275
  if (d.length > i) {
10248
10276
  let e = d.sort((e, t) => e.updatedAt - t.updatedAt).slice(0, d.length - i);
10249
- for (let n of e) await a.del(kd(t, r, n.id));
10277
+ for (let n of e) await a.del(Md(t, r, n.id));
10250
10278
  }
10251
10279
  return u;
10252
10280
  },
10253
10281
  async remove(e) {
10254
- let n = kd(t, r, e);
10282
+ let n = Md(t, r, e);
10255
10283
  return await a.get(n) == null ? !1 : (await a.del(n), !0);
10256
10284
  },
10257
10285
  async clear() {
10258
- await a.clearPrefix(Ad(t, r));
10286
+ await a.clearPrefix(Nd(t, r));
10259
10287
  },
10260
10288
  dispose() {}
10261
10289
  };
10262
10290
  }
10263
10291
  //#endregion
10264
10292
  //#region src/core/harness/preferences.ts
10265
- var Nd = {
10293
+ var Id = {
10266
10294
  color: "颜色",
10267
10295
  copy: "文案",
10268
10296
  layout: "排版",
10269
10297
  interaction: "交互",
10270
10298
  tech: "技术",
10271
10299
  other: "其他"
10272
- }, Pd = [
10300
+ }, Ld = [
10273
10301
  /^(?:请|帮我|麻烦)?你?记住[::,,、]?\s*(.{4,200})/,
10274
10302
  /^(?:从)?今后(?:开始|起)?[::,,]?\s*(.{4,200})/,
10275
10303
  /^以后(?:都|全都|总是|尽量)?[::,,]?\s*(.{4,200})/
10276
- ], Fd = /(?:不要|别再|别用|别加|太(?:艳|花|亮|暗|大|小|密|挤|乱|复杂|素|少)|不喜欢|讨厌|希望|更喜欢|偏好|永远|一律|统一保持|保持统一)/, Id = [
10304
+ ], Rd = /(?:不要|别再|别用|别加|太(?:艳|花|亮|暗|大|小|密|挤|乱|复杂|素|少)|不喜欢|讨厌|希望|更喜欢|偏好|永远|一律|统一保持|保持统一)/, zd = [
10277
10305
  ["layout", /布局|排版|间距|留白|密度|居中|对齐|栅格|边距|紧凑|圆角|分栏|层级|大小|尺寸/],
10278
10306
  ["copy", /文案|文字|标题|副标题|字体|字号|措辞|语气|口语|书面|简洁|简短|详尽|emoji|表情/],
10279
10307
  ["interaction", /动画|动效|过渡|交互|悬停|hover|点击反馈|弹窗|提示|加载|滚动/],
10280
10308
  ["tech", /代码|框架|组件|技术|写法|命名|注释|依赖|版本|接口/],
10281
10309
  ["color", /颜色|配色|色调|色彩|深色|浅色|饱和|渐变|紫|红|橙|黄|绿|青|蓝|粉|棕|灰|黑|白|金|银/]
10282
10310
  ];
10283
- function Ld(e) {
10284
- for (let [t, n] of Id) if (n.test(e)) return t;
10311
+ function Bd(e) {
10312
+ for (let [t, n] of zd) if (n.test(e)) return t;
10285
10313
  return "other";
10286
10314
  }
10287
- function Rd(e) {
10315
+ function Vd(e) {
10288
10316
  let t = e.trim();
10289
- if (!(!t || t.length > 500)) for (let e of Pd) {
10317
+ if (!(!t || t.length > 500)) for (let e of Ld) {
10290
10318
  let n = t.match(e);
10291
10319
  if (n?.[1]) {
10292
10320
  let e = n[1].trim().replace(/[。.!!]+$/, "");
10293
10321
  return e.length < 3 ? void 0 : {
10294
10322
  content: e,
10295
- topic: Ld(e)
10323
+ topic: Bd(e)
10296
10324
  };
10297
10325
  }
10298
10326
  }
10299
10327
  }
10300
- function zd(e) {
10328
+ function Hd(e) {
10301
10329
  let t = e.trim();
10302
- return t.length < 4 || t.length > 500 || /^(你好|hi|hello|ok|好的|继续|嗯|谢谢|hey|哈喽|收到|明白)/i.test(t) ? !1 : Fd.test(t);
10330
+ return t.length < 4 || t.length > 500 || /^(你好|hi|hello|ok|好的|继续|嗯|谢谢|hey|哈喽|收到|明白)/i.test(t) ? !1 : Rd.test(t);
10303
10331
  }
10304
- function Bd(e) {
10332
+ function Ud(e) {
10305
10333
  return [
10306
10334
  "你是用户偏好提取器。判断下面的用户消息是否包含「持久偏好」—— 对未来同类工作都适用的口味/规则(如配色口味、文案风格、排版密度),而非仅针对本轮的任务指令。",
10307
10335
  "只输出 JSON(无任何其他文本):{\"captured\": true, \"content\": \"一句话中性陈述(用户视角,如:不用紫色,偏好低饱和)\", \"topic\": \"color|copy|layout|interaction|tech|other\"} 或 {\"captured\": false, \"content\": \"\", \"topic\": \"other\"}",
@@ -10310,7 +10338,7 @@ function Bd(e) {
10310
10338
  `用户消息:"""${e.slice(0, 800)}"""`
10311
10339
  ].join("\n");
10312
10340
  }
10313
- function Vd(e) {
10341
+ function Wd(e) {
10314
10342
  if (!e) return;
10315
10343
  let t = (e.match(/```(?:json)?\s*([\s\S]*?)```/)?.[1] ?? e).match(/\{[\s\S]*\}/)?.[0];
10316
10344
  if (t) try {
@@ -10319,19 +10347,19 @@ function Vd(e) {
10319
10347
  let n = typeof e.content == "string" ? e.content.trim().replace(/[。.!!]+$/, "") : "";
10320
10348
  return n.length < 3 || n.length > 200 ? void 0 : {
10321
10349
  content: n,
10322
- topic: Ed.includes(e.topic) ? e.topic : "other"
10350
+ topic: kd.includes(e.topic) ? e.topic : "other"
10323
10351
  };
10324
10352
  } catch {
10325
10353
  return;
10326
10354
  }
10327
10355
  }
10328
- function Hd(e) {
10356
+ function Gd(e) {
10329
10357
  if (!e.length) return;
10330
10358
  let t = ["## 用户偏好(跨会话沉淀;除非用户本轮另有指示,遵守以下偏好)"];
10331
- for (let n of e) t.push(`- ${Nd[n.topic]}:${n.content}`);
10359
+ for (let n of e) t.push(`- ${Id[n.topic]}:${n.content}`);
10332
10360
  return t.join("\n");
10333
10361
  }
10334
- function Ud(e) {
10362
+ function Kd(e) {
10335
10363
  let t = [], n = -1, r = Promise.resolve(), i = (t) => e.onDebug?.({
10336
10364
  stage: "preferences",
10337
10365
  ...t
@@ -10352,21 +10380,21 @@ function Ud(e) {
10352
10380
  }
10353
10381
  return {
10354
10382
  name: "preferences",
10355
- augmentPrompt: () => Hd(t),
10383
+ augmentPrompt: () => Gd(t),
10356
10384
  afterAgent: (t) => {
10357
10385
  let r = t.messages ?? [];
10358
10386
  for (let t = n + 1; t < r.length; t++) {
10359
10387
  let n = r[t];
10360
10388
  if (n.role !== "user" || typeof n.content != "string" || !n.content) continue;
10361
- let o = n.content, s = Rd(o);
10389
+ let o = n.content, s = Vd(o);
10362
10390
  if (s) {
10363
10391
  a(s.content, s.topic, t, "explicit");
10364
10392
  continue;
10365
10393
  }
10366
- if (e.llmInvoke && zd(o)) {
10394
+ if (e.llmInvoke && Hd(o)) {
10367
10395
  let n = t;
10368
- e.llmInvoke(Bd(o)).then((e) => {
10369
- let t = Vd(e);
10396
+ e.llmInvoke(Ud(o)).then((e) => {
10397
+ let t = Wd(e);
10370
10398
  t && a(t.content, t.topic, n, "llm");
10371
10399
  }).catch((e) => i({ extractError: String(e) }));
10372
10400
  }
@@ -10389,24 +10417,24 @@ function Ud(e) {
10389
10417
  }
10390
10418
  };
10391
10419
  }
10392
- var Wd = /large_results\/[^\s"'`),]+\.txt/g;
10393
- function Gd(e) {
10420
+ var qd = /large_results\/[^\s"'`),]+\.txt/g;
10421
+ function Jd(e) {
10394
10422
  let t = /* @__PURE__ */ new Set(), n = (e) => {
10395
10423
  if (typeof e != "string" || !e) return;
10396
10424
  let n;
10397
- for (Wd.lastIndex = 0; (n = Wd.exec(e)) !== null;) t.add(n[0]);
10425
+ for (qd.lastIndex = 0; (n = qd.exec(e)) !== null;) t.add(n[0]);
10398
10426
  };
10399
10427
  for (let t of e) if (n(t.content), t.steps) for (let e of t.steps) n(e.result);
10400
10428
  return t;
10401
10429
  }
10402
- function Kd(e, t) {
10430
+ function Yd(e, t) {
10403
10431
  let n = [];
10404
10432
  for (let r of Object.keys(e)) r.startsWith("large_results/") && !t.has(r) && n.push(r);
10405
10433
  return n;
10406
10434
  }
10407
10435
  //#endregion
10408
10436
  //#region src/core/utils/serialRunner.ts
10409
- function qd() {
10437
+ function Xd() {
10410
10438
  let e = Promise.resolve();
10411
10439
  return function(t) {
10412
10440
  let n = e.then(t, t);
@@ -10415,24 +10443,24 @@ function qd() {
10415
10443
  }
10416
10444
  //#endregion
10417
10445
  //#region src/core/sdk/createChatSdk.ts
10418
- var Jd = 30, Yd = /* @__PURE__ */ new Map();
10419
- function Xd(e, t) {
10446
+ var Zd = 30, Qd = /* @__PURE__ */ new Map();
10447
+ function $d(e, t) {
10420
10448
  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;
10421
10449
  }
10422
- function Zd(e) {
10450
+ function ef(e) {
10423
10451
  return e === "spawn_agent" || e === "spawn_agents" || e.startsWith("use_");
10424
10452
  }
10425
- function Qd(e, t, n, r) {
10453
+ function tf(e, t, n, r) {
10426
10454
  let i = 0;
10427
10455
  return {
10428
10456
  name: "sdk-events",
10429
10457
  wrapToolCall: async (t, r) => {
10430
- let i = await r(t), a = Xd(t.name, t.args);
10458
+ let i = await r(t), a = $d(t.name, t.args);
10431
10459
  return a ? e({
10432
10460
  type: "data_change",
10433
10461
  operation: a,
10434
10462
  value: n()?.bind
10435
- }) : i.status === "done" && Zd(t.name) && e({
10463
+ }) : i.status === "done" && ef(t.name) && e({
10436
10464
  type: "data_change",
10437
10465
  operation: "edit",
10438
10466
  value: n()?.bind
@@ -10459,7 +10487,7 @@ function Qd(e, t, n, r) {
10459
10487
  }
10460
10488
  };
10461
10489
  }
10462
- function $d(e, t, n, r, i) {
10490
+ function nf(e, t, n, r, i) {
10463
10491
  if (!n) return i && console.warn(`[page-agent-sdk][focus] capabilities.focus 关闭,${t} 忽略`), {
10464
10492
  ok: !1,
10465
10493
  error: "capabilities.focus 关闭"
@@ -10477,18 +10505,18 @@ function $d(e, t, n, r, i) {
10477
10505
  error: "当前无主数据 schema,无法聚焦"
10478
10506
  });
10479
10507
  }
10480
- function ef(e, n) {
10508
+ function rf(e, n) {
10481
10509
  let i = {
10482
10510
  prompt_tokens: 0,
10483
10511
  completion_tokens: 0,
10484
10512
  total_tokens: 0
10485
- }, a = ul(() => G), o = /* @__PURE__ */ At(0), s = Il(e.storage);
10513
+ }, a = pl(() => G), o = /* @__PURE__ */ At(0), s = zl(e.storage);
10486
10514
  e.debug && s && s.onEvent((e) => console.log("[page-agent-sdk][storage]", e));
10487
- let { modelCaps: c, summaryLlmInvoke: l, titleLlmInvoke: u, compressDecisionInvoke: d } = ll(e), f = c;
10515
+ let { modelCaps: c, summaryLlmInvoke: l, titleLlmInvoke: u, compressDecisionInvoke: d } = fl(e), f = c;
10488
10516
  if (e.debug && console.log("[page-agent-sdk][modelCaps]", f), f.contextWindow < 2e5) throw Error(`[page-agent-sdk] 模型上下文窗口 ${f.contextWindow} 小于最小支持 ${ai}(需 ≥200K 窗口模型,如 GLM-5.2/Claude/Kimi/Qwen-1M/DeepSeek-v4)`);
10489
- let h = Ul(e, f.contextWindow), g = h.enableLLMSummary !== !1, _ = (e.contextOptions && e.contextOptions.preserveLastToolResults) ?? Hl[e.contextPreset ?? "auto"], v = new Set(_), y = e.llm;
10517
+ let h = Kl(e, f.contextWindow), g = h.enableLLMSummary !== !1, _ = (e.contextOptions && e.contextOptions.preserveLastToolResults) ?? Gl[e.contextPreset ?? "auto"], v = new Set(_), y = e.llm;
10490
10518
  e.debug && !l && console.warn("[page-agent-sdk][summarization] 未构造 llmInvoke(apiKey 缺失?),摘要回退零成本索引摘要");
10491
- let b = /* @__PURE__ */ bt([]), x = lc(e.vfs?.initialFiles, {
10519
+ let b = /* @__PURE__ */ bt([]), x = uc(e.vfs?.initialFiles, {
10492
10520
  persist: s ? { save: (e) => {
10493
10521
  zt({ vfs: e });
10494
10522
  } } : void 0,
@@ -10507,8 +10535,8 @@ function ef(e, n) {
10507
10535
  let D = { current: null }, O = e.data ? {
10508
10536
  ...e.data,
10509
10537
  description: e.data.description ?? "主数据对象"
10510
- } : void 0, k = !(e.subagents ?? []).some((e) => e._codeAsset) && zl(e.capabilities).subagent, A = e.subagents;
10511
- k && O?.schema && $i(O.schema).length && (A = [...e.subagents ?? [], Jc()], console.info("[page-agent-sdk] 检测到 schema 含代码组件数组(如 components[].code),已自动装配 HTML 代码子 agent(委派编排 + vfs 工作副本 + 格式校验 + 增量 commit)。需定制(codeField/formatCheck/craftNotes 等)请显式传 createHtmlSubagent(...)"));
10538
+ } : void 0, k = !(e.subagents ?? []).some((e) => e._codeAsset) && Hl(e.capabilities).subagent, A = e.subagents;
10539
+ k && O?.schema && $i(O.schema).length && (A = [...e.subagents ?? [], Zc()], console.info("[page-agent-sdk] 检测到 schema 含代码组件数组(如 components[].code),已自动装配 HTML 代码子 agent(委派编排 + vfs 工作副本 + 格式校验 + 增量 commit)。需定制(codeField/formatCheck/craftNotes 等)请显式传 createHtmlSubagent(...)"));
10512
10540
  let ee = (A ?? []).filter((e) => !!e._codeAsset), j = /* @__PURE__ */ new Set();
10513
10541
  for (let e of ee) {
10514
10542
  if (e._codeAsset.writablePaths.length) continue;
@@ -10524,7 +10552,7 @@ function ef(e, n) {
10524
10552
  getTodos: () => D.current?.getState?.()?.todos ?? [],
10525
10553
  messages: b,
10526
10554
  maxCheckpoints: re && typeof re == "object" ? re.maxCheckpoints : void 0
10527
- }) : null, ae = !re || typeof re != "object" || re.auto !== !1, I = zl(e.capabilities), oe = I.dataOps, se = I.draftWrite, ce = I.tracing, le = I.automation, ue = ac({
10555
+ }) : null, ae = !re || typeof re != "object" || re.auto !== !1, I = Hl(e.capabilities), oe = I.dataOps, se = I.draftWrite, ce = I.tracing, le = I.automation, ue = oc({
10528
10556
  ...e,
10529
10557
  locale: e.i18n?.locale
10530
10558
  });
@@ -10532,7 +10560,7 @@ function ef(e, n) {
10532
10560
  let e = M.map((e) => e._codeAsset.orchestratorPrompt).filter(Boolean).join("\n\n");
10533
10561
  e && (ue += "\n\n" + e);
10534
10562
  } else O?.schema && Qi(O.schema) && (ue += "\n\n" + ga.htmlDirectWriteFallback, console.warn("[page-agent-sdk] 检测到 schema 含 code 字段但未注册 html 子 agent:已自动注入「主 agent 自己写 HTML」编排(code 作普通字段直接 write,无 vfs 工作副本 / 无格式校验门禁)。如需代码资产机制(vfs + 格式校验 + 增量 commit + 主上下文 code 摘要),注册 createHtmlSubagent;若确为降级意图可忽略。"));
10535
- let de = oe && O ? Fu(O, {
10563
+ let de = oe && O ? Ru(O, {
10536
10564
  onAudit: e.onAudit ?? (e.debug ? (e) => console.log("[page-agent-sdk][data audit]", e) : void 0),
10537
10565
  maxSnapshots: e.maxSnapshots,
10538
10566
  onConflict: a.set,
@@ -10541,18 +10569,18 @@ function ef(e, n) {
10541
10569
  vfsStore: se || O?.resources?.length ? x : void 0,
10542
10570
  ...P.length ? { pgIdPaths: P } : {},
10543
10571
  ...ne.length ? { largeTextPaths: ne } : {}
10544
- }) : [], fe = oe ? Eu(de, e.toolMode) : [], L = oe && O ? de.controller ?? null : null, pe = oe && O?.resources?.length && L?.getResourcesSnapshot ? bd({
10572
+ }) : [], fe = oe ? ku(de, e.toolMode) : [], L = oe && O ? de.controller ?? null : null, pe = oe && O?.resources?.length && L?.getResourcesSnapshot ? Cd({
10545
10573
  getResourcesSnapshot: () => L?.getResourcesSnapshot?.() ?? [],
10546
10574
  toolsExposed: e.toolMode === "advanced"
10547
- }) : void 0, R = () => L?.get() ?? O, z = /* @__PURE__ */ new Map(), me = gd(I, fe, Lu, I.domInspect && !I.skills ? [
10548
- ...Uu,
10549
- $u,
10550
- ed
10551
- ] : Uu, cd);
10575
+ }) : void 0, R = () => L?.get() ?? O, z = /* @__PURE__ */ new Map(), me = yd(I, fe, Bu, I.domInspect && !I.skills ? [
10576
+ ...Ku,
10577
+ nd,
10578
+ rd
10579
+ ] : Ku, dd);
10552
10580
  me.forEach((e) => z.set(e.name, "builtin"));
10553
10581
  let he = [...e.tools || []];
10554
10582
  he.forEach((e) => z.set(e.name, "user"));
10555
- let B = dd(e.actions ?? {});
10583
+ let B = md(e.actions ?? {});
10556
10584
  B.forEach((e) => z.set(e.name, "action"));
10557
10585
  let ge = [], _e = !1, ve = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), ye = ve ? Mo() : null;
10558
10586
  ye && z.set(Ao, "builtin");
@@ -10624,7 +10652,7 @@ function ef(e, n) {
10624
10652
  Te.forEach((e) => z.set(e.name, "builtin"));
10625
10653
  let Ee = [], De = /* @__PURE__ */ new Map(), H = U();
10626
10654
  function U() {
10627
- let { tools: e, collisions: t } = _d([
10655
+ let { tools: e, collisions: t } = bd([
10628
10656
  {
10629
10657
  label: "builtin",
10630
10658
  tools: me
@@ -10661,13 +10689,13 @@ function ef(e, n) {
10661
10689
  return t.length && console.warn("[page-agent-sdk] 工具重名,后注册覆盖先注册:", t.map((e) => `${e.name}(${e.loser}→${e.winner})`).join(", ")), e;
10662
10690
  }
10663
10691
  let Oe = I.planning, ke = I.missionAnchor, Ae = I.workingMemory, je = I.skills, Me = I.vfs || N;
10664
- if (Me) for (let e of gc) z.set(e, "builtin");
10692
+ if (Me) for (let e of _c) z.set(e, "builtin");
10665
10693
  if (Oe) for (let e of S.tools ?? []) z.set(e.name, "builtin");
10666
10694
  let Ne = I.summarization, Pe = I.agentCompression && !!d;
10667
10695
  e.debug && I.agentCompression && !d && console.warn("[page-agent-sdk][agentCompression] agentCompression 开启但 summaryLlm 不可用(或缺 apiKey / 模型不支持工具),压缩决策不启用,回退静态压缩");
10668
10696
  let Fe = I.memory, Ie = I.subagent, Le = Ie ? us() : void 0, Re = e.verify?.maxAttempts ?? 2, ze = !!(e.verify?.check || e.verify?.maxAttempts || e.verify?.adversarial), W = e.capabilities?.verify === !1, Be = (I.verify || ze && !W) && e.verify?.enabled !== !1 && Re > 0, Ve = I.contextInspector;
10669
10697
  ze && !Be && e.verify?.enabled !== !1 && console.warn("[page-agent-sdk][verify] 检测到 verify 配置(check/maxAttempts/adversarial)但未装载(capabilities.verify:false 显式关闭 或 maxAttempts≤0)");
10670
- let He = e.subagent, Ue = He?.allowedTools ?? [], We = e.permissions?.length ? Oo(e.permissions) : void 0, Ge = e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? ko(e.approval) : void 0, Ke = [...We ? [We] : [], ...Ge ? [Ge] : []], qe = !Ie || He?.enabled === !1 ? void 0 : Es({
10698
+ let He = e.subagent, Ue = He?.allowedTools ?? [], We = e.permissions?.length ? Oo(e.permissions) : void 0, Ge = e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? ko(e.approval) : void 0, Ke = [...We ? [We] : [], ...Ge ? [Ge] : []], qe = !Ie || He?.enabled === !1 ? void 0 : Ds({
10671
10699
  llm: He?.llm ?? e.llm,
10672
10700
  allTools: () => J.agent?.allTools ?? H,
10673
10701
  allowedTools: Ue.length ? Ue : void 0,
@@ -10691,7 +10719,7 @@ function ef(e, n) {
10691
10719
  timeoutMs: He?.timeoutMs
10692
10720
  }), Je = te?.map((e) => {
10693
10721
  if (!e._codeAsset) return e;
10694
- let t = e._codeAsset, n = Pc({
10722
+ let t = e._codeAsset, n = Ic({
10695
10723
  writablePaths: t.writablePaths,
10696
10724
  codeVfsPrefix: t.codeVfsPrefix,
10697
10725
  ext: t.ext,
@@ -10706,12 +10734,16 @@ function ef(e, n) {
10706
10734
  ...e,
10707
10735
  middleware: r
10708
10736
  };
10709
- }), Ye = N && Ie ? Fc() : void 0, Xe = Ye ? Vc({
10737
+ }), Ye = N && Ie ? Lc() : void 0, Xe = Ye ? Wc({
10710
10738
  getBind: () => R()?.bind,
10711
10739
  writablePaths: P,
10712
10740
  getLocked: () => Ye.locked(),
10713
- tools: H
10714
- }) : void 0, Ze = Ie && Je !== void 0 ? ks(Je, {
10741
+ tools: H,
10742
+ getCodeFieldPaths: () => Hc(R()?.bind, M.map((e) => ({
10743
+ writablePaths: e._codeAsset.writablePaths,
10744
+ codeField: e._codeAsset.codeField
10745
+ })))
10746
+ }) : void 0, Ze = Ie && Je !== void 0 ? As(Je, {
10715
10747
  llm: e.llm,
10716
10748
  allTools: () => J.agent?.allTools ?? H,
10717
10749
  debug: e.debug,
@@ -10729,15 +10761,15 @@ function ef(e, n) {
10729
10761
  timeoutMs: e.subagent?.timeoutMs,
10730
10762
  ...Ye ? {
10731
10763
  componentLock: Ye,
10732
- resolveComponents: (e) => Ic(e, Ac(R()?.bind, P))
10764
+ resolveComponents: (e) => Rc(e, Mc(R()?.bind, P))
10733
10765
  } : {}
10734
10766
  }) : void 0, Qe = Ze ? Ze.controller : null, $e = [
10735
10767
  "get_data",
10736
10768
  "describe_data",
10737
10769
  "read",
10738
10770
  "fetch_document"
10739
- ], et = H.filter((e) => $e.includes(e.name)), tt = Be ? As({
10740
- check: e.verify.check ?? Is({
10771
+ ], et = H.filter((e) => $e.includes(e.name)), tt = Be ? js({
10772
+ check: e.verify.check ?? Ls({
10741
10773
  schemas: () => R() ? { "": R().schema } : {},
10742
10774
  root: () => R()?.bind
10743
10775
  }),
@@ -10745,10 +10777,10 @@ function ef(e, n) {
10745
10777
  llm: e.llm,
10746
10778
  tools: et
10747
10779
  } : void 0
10748
- }) : void 0, nt = Ve ? Xs({
10780
+ }) : void 0, nt = Ve ? Zs({
10749
10781
  contextWindow: f.contextWindow,
10750
- thresholdRatio: Ul(e, f.contextWindow).summaryThresholdRatio
10751
- }) : void 0, rt = yd({
10782
+ thresholdRatio: Kl(e, f.contextWindow).summaryThresholdRatio
10783
+ }) : void 0, rt = Sd({
10752
10784
  ...I,
10753
10785
  humanConfirm: ve,
10754
10786
  subagents: te?.map((e) => ({
@@ -10758,7 +10790,7 @@ function ef(e, n) {
10758
10790
  }))
10759
10791
  }, oe && !!O, e.toolMode, !!O?.resources?.length, { promptSoftCap: as(f.contextWindow, h.promptSoftCapTokens) }), it = O ? {
10760
10792
  name: "dataHint",
10761
- augmentPrompt: () => ic(R(), e.schemaHint) || void 0
10793
+ augmentPrompt: () => ac(R(), e.schemaHint) || void 0
10762
10794
  } : null, at = e.augmentSystem ? {
10763
10795
  name: "augmentSystem",
10764
10796
  augmentPrompt: (t) => {
@@ -10772,7 +10804,7 @@ function ef(e, n) {
10772
10804
  return;
10773
10805
  }
10774
10806
  }
10775
- } : null, ot = Bl(e.onEvent), G = ot.emit, st, ct = [], lt = (e) => ({
10807
+ } : null, ot = Ul(e.onEvent), G = ot.emit, st, ct = [], lt = (e) => ({
10776
10808
  name: e.name,
10777
10809
  description: e.description,
10778
10810
  content: typeof e.getContent == "function" ? e.getContent() : ""
@@ -10780,13 +10812,13 @@ function ef(e, n) {
10780
10812
  name: e.name,
10781
10813
  description: e.description,
10782
10814
  getContent: () => e.content
10783
- }), dt = e.skillStorage === !1 ? null : Td({
10815
+ }), dt = e.skillStorage === !1 ? null : Od({
10784
10816
  ...typeof e.skillStorage == "object" ? e.skillStorage : {},
10785
10817
  id: e.skillStorage && typeof e.skillStorage == "object" && e.skillStorage.id ? e.skillStorage.id : `agent::${n}`
10786
- }), ft = I.preferences, pt = ft && e.preferenceStorage !== !1 ? Md({
10818
+ }), ft = I.preferences, pt = ft && e.preferenceStorage !== !1 ? Fd({
10787
10819
  ...typeof e.preferenceStorage == "object" ? e.preferenceStorage : {},
10788
10820
  id: e.preferenceStorage && typeof e.preferenceStorage == "object" && e.preferenceStorage.id ? e.preferenceStorage.id : `agent::${n}`
10789
- }) : null, mt = pt ? Ud({
10821
+ }) : null, mt = pt ? Kd({
10790
10822
  store: pt,
10791
10823
  llmInvoke: l,
10792
10824
  getSessionId: () => J.sessionId,
@@ -10827,13 +10859,13 @@ function ef(e, n) {
10827
10859
  decideInvoke: d,
10828
10860
  getSnapshot: () => nt?.getSnapshot()
10829
10861
  } : {}
10830
- }) : void 0, vt = Gl([
10862
+ }) : void 0, vt = Jl([
10831
10863
  ...it ? [it] : [],
10832
10864
  rt,
10833
10865
  ...ke ? [C] : [],
10834
10866
  ...mt ? [mt] : [],
10835
10867
  ...Oe ? [S] : [],
10836
- ...je ? [st = xo([...I.domInspect && !(e.skills || []).some((e) => e.name === td.name) ? [td] : [], ...e.skills || []], {
10868
+ ...je ? [st = xo([...I.domInspect && !(e.skills || []).some((e) => e.name === id.name) ? [id] : [], ...e.skills || []], {
10837
10869
  readVfs: Me ? (e) => x.files[e]?.content : void 0,
10838
10870
  hostScriptEnabled: I.skillHostScript,
10839
10871
  onToolsReady: (e, t) => {
@@ -10844,7 +10876,7 @@ function ef(e, n) {
10844
10876
  H = U(), J.agent && J.agent.setTools(H), J.infoTick.value++;
10845
10877
  }
10846
10878
  })] : [],
10847
- ...Me ? [vc(x)] : [],
10879
+ ...Me ? [yc(x)] : [],
10848
10880
  ..._t ? [_t] : [],
10849
10881
  ...Ae ? [T] : [],
10850
10882
  ...V ? [w] : [],
@@ -10861,12 +10893,12 @@ function ef(e, n) {
10861
10893
  ...at ? [at] : [],
10862
10894
  ...nt ? [nt] : [],
10863
10895
  ...e.middleware || [],
10864
- ...le ? [ld(i, {
10896
+ ...le ? [fd(i, {
10865
10897
  tokenBudget: e.tokenBudget,
10866
10898
  timeBudgetMs: e.timeBudgetMs
10867
10899
  }, G)] : [],
10868
- Qd(G, b, R, i)
10869
- ]), yt = e.maxMemoryRounds ?? Jd, xt = e.approval?.timeoutMs, St = xt === void 0 || xt === 0 ? 3e4 : !Number.isFinite(xt) || xt < 0 ? 0 : xt;
10900
+ tf(G, b, R, i)
10901
+ ]), yt = e.maxMemoryRounds ?? Zd, xt = e.approval?.timeoutMs, St = xt === void 0 || xt === 0 ? 3e4 : !Number.isFinite(xt) || xt < 0 ? 0 : xt;
10870
10902
  function Ct(e) {
10871
10903
  if (St) return (t) => {
10872
10904
  if (t.type !== "approval_request") return;
@@ -10899,7 +10931,7 @@ function ef(e, n) {
10899
10931
  e.debug && console.warn("[page-agent-sdk][persist] refreshSessions 失败(已吞):", t);
10900
10932
  }
10901
10933
  }
10902
- let Et = qd(), q = /* @__PURE__ */ new Set();
10934
+ let Et = Xd(), q = /* @__PURE__ */ new Set();
10903
10935
  function Dt(e) {
10904
10936
  let t = new AbortController(), n = () => t.abort();
10905
10937
  return e && (e.aborted ? t.abort() : e.addEventListener("abort", n, { once: !0 })), q.add(t), {
@@ -11157,7 +11189,7 @@ function ef(e, n) {
11157
11189
  })), e.memory && zt({ memory: E.get() || (typeof e.memory == "string" ? e.memory : "") }), K(), It = void 0, Lt = !1, J.infoTick.value++, r;
11158
11190
  },
11159
11191
  resetSession: () => {
11160
- Ot(), a.resolve("keep_external"), J.sessionId = dl(), b.splice(0, b.length), x.clear?.(), S.reset([]), e.memory || E.reset(""), C.reset(), T.reset(), w.reset(), mt?.resetScanCursor(), F && F.importStack([]), J.agent && (J.agent.debugLogs.value = []), s && s.createSession(J.agentId, e.session?.title, J.sessionId).catch((t) => {
11192
+ Ot(), a.resolve("keep_external"), J.sessionId = ml(), b.splice(0, b.length), x.clear?.(), S.reset([]), e.memory || E.reset(""), C.reset(), T.reset(), w.reset(), mt?.resetScanCursor(), F && F.importStack([]), J.agent && (J.agent.debugLogs.value = []), s && s.createSession(J.agentId, e.session?.title, J.sessionId).catch((t) => {
11161
11193
  e.debug && console.warn("[page-agent-sdk][persist] createSession 失败(已吞):", t);
11162
11194
  }), G({
11163
11195
  type: "session_restored",
@@ -11167,7 +11199,7 @@ function ef(e, n) {
11167
11199
  },
11168
11200
  stream: (e, t, n) => {
11169
11201
  if (!J.agent) throw Error("page-agent-sdk: agent 尚未初始化完成,请先 await mount()");
11170
- x?.setProtectedRefs?.(Gd(e));
11202
+ x?.setProtectedRefs?.(Jd(e));
11171
11203
  let r = (e) => {
11172
11204
  t?.(e), G(e), e.type === "subagent" && (e.kind === "tool_call" || e.kind === "tool_result") && J.infoTick.value++;
11173
11205
  };
@@ -11182,7 +11214,7 @@ function ef(e, n) {
11182
11214
  if (J.refCount--, J.refCount <= 0) {
11183
11215
  Ot(), _e = !0, s && (x.flush?.(), s.flush(), s.dispose()), dt && dt.dispose();
11184
11216
  let e = J.mcpClosers.splice(0);
11185
- e.length && Promise.allSettled(e.map((e) => e())), Yd.delete(n);
11217
+ e.length && Promise.allSettled(e.map((e) => e())), Qd.delete(n);
11186
11218
  }
11187
11219
  },
11188
11220
  resolveConflict: a.resolve,
@@ -11202,14 +11234,14 @@ function ef(e, n) {
11202
11234
  },
11203
11235
  setLlm(t) {
11204
11236
  let n;
11205
- if (el(t)) n = t;
11237
+ if (rl(t)) n = t;
11206
11238
  else {
11207
11239
  let e = t;
11208
11240
  if ((e.provider ?? "openai") === "anthropic") throw Error("[page-agent-sdk][setLlm] 切换到 Anthropic 需传 BaseChatModel 实例(动态 import 无法同步);请先 const { ChatAnthropic } = await import(\"@langchain/anthropic\") 构造实例后传入");
11209
11241
  n = p(e);
11210
11242
  }
11211
11243
  typeof n.bindTools != "function" && e.debug && console.warn("[page-agent-sdk][setLlm] 新模型不支持 bindTools(tool calling 会失效)"), y = t;
11212
- let r = el(t) ? void 0 : t;
11244
+ let r = rl(t) ? void 0 : t;
11213
11245
  if (f = oi({
11214
11246
  model: r?.model ?? t.model ?? t.modelName,
11215
11247
  contextWindow: e.contextWindow ?? r?.contextWindow,
@@ -11252,8 +11284,8 @@ function ef(e, n) {
11252
11284
  return {
11253
11285
  id: n,
11254
11286
  sessionId: J.sessionId,
11255
- model: el(y) ? y.model ?? y.modelName : y.model,
11256
- systemPrompt: J.agent?.getEffectiveSystemPrompt?.() ?? ue + ic(R(), e.schemaHint),
11287
+ model: rl(y) ? y.model ?? y.modelName : y.model,
11288
+ systemPrompt: J.agent?.getEffectiveSystemPrompt?.() ?? ue + ac(R(), e.schemaHint),
11257
11289
  tools: (J.agent?.allTools ?? H).map((e) => ({
11258
11290
  name: e.name,
11259
11291
  description: e.description,
@@ -11295,7 +11327,7 @@ function ef(e, n) {
11295
11327
  spans: J.agent.spans.value,
11296
11328
  metrics: li(J.agent.spans.value)
11297
11329
  } : void 0,
11298
- actions: fd(e.actions ?? {}),
11330
+ actions: hd(e.actions ?? {}),
11299
11331
  subagent: {
11300
11332
  enabled: !!qe,
11301
11333
  maxDepth: e.subagent?.maxDepth ?? 1,
@@ -11359,11 +11391,11 @@ function ef(e, n) {
11359
11391
  return V ? w.getFocuses() : [];
11360
11392
  },
11361
11393
  setFocus(t) {
11362
- let n = $d(t, "setFocus", V, () => R()?.schema, e.debug);
11394
+ let n = nf(t, "setFocus", V, () => R()?.schema, e.debug);
11363
11395
  return n.ok ? (w.setFocus(t), J.infoTick.value++, { ok: !0 }) : n;
11364
11396
  },
11365
11397
  addFocus(t) {
11366
- let n = $d(t, "addFocus", V, () => R()?.schema, e.debug);
11398
+ let n = nf(t, "addFocus", V, () => R()?.schema, e.debug);
11367
11399
  return n.ok ? w.getFocuses().length >= 8 ? (e.debug && console.warn("[page-agent-sdk][focus] addFocus 拒绝:焦点数已达上限 8(augmentPrompt 注入每焦点子树 schema,过多致 system prompt 超预算)"), {
11368
11400
  ok: !1,
11369
11401
  error: "焦点数上限 8(避免 system prompt 撑爆)"
@@ -11407,14 +11439,14 @@ function ef(e, n) {
11407
11439
  }
11408
11440
  function Mt(e) {
11409
11441
  let t = {};
11410
- for (let n of Gd(e)) {
11442
+ for (let n of Jd(e)) {
11411
11443
  let e = x.files[n];
11412
11444
  e && (t[n] = e.content);
11413
11445
  }
11414
11446
  return t;
11415
11447
  }
11416
11448
  function Nt() {
11417
- let e = Kd(x.files, Gd(b));
11449
+ let e = Yd(x.files, Jd(b));
11418
11450
  for (let t of e) delete x.files[t];
11419
11451
  }
11420
11452
  function Ft() {
@@ -11478,7 +11510,7 @@ function ef(e, n) {
11478
11510
  zt({ focus: e.length ? e : null });
11479
11511
  }
11480
11512
  le && F && (zt({ checkpoints: F.exportStack() }), zt({ usage: i }));
11481
- let t = $c(b);
11513
+ let t = nl(b);
11482
11514
  if (t && t !== It && (It = t, Bt(J.sessionId, t)), e.autoTitle !== !1 && u && !Lt && b.some((e) => e.role === "user") && b.some((e) => e.role === "assistant")) {
11483
11515
  Lt = !0;
11484
11516
  let e = J.sessionId;
@@ -11500,7 +11532,7 @@ function ef(e, n) {
11500
11532
  }
11501
11533
  return J.initDone = (async () => {
11502
11534
  await kt(), await jt(), mt && await mt.preload(), e.mcp?.length && (async () => {
11503
- let t = await Promise.allSettled(e.mcp.map((e) => tc(e))), n = t.flatMap((e) => e.status === "fulfilled" ? [e.value.close] : []);
11535
+ let t = await Promise.allSettled(e.mcp.map((e) => nc(e))), n = t.flatMap((e) => e.status === "fulfilled" ? [e.value.close] : []);
11504
11536
  if (_e) {
11505
11537
  Promise.allSettled(n.map((e) => e()));
11506
11538
  return;
@@ -11544,7 +11576,7 @@ function ef(e, n) {
11544
11576
  }
11545
11577
  }), ge.length && (H = U(), J.agent && J.agent.setTools(H), J.infoTick.value++), e.debug && console.log(`[page-agent-sdk][mcp] 注入 ${ge.length} 个工具,${J.mcpServers.length} 个 server`);
11546
11578
  })();
11547
- let t = el(e.llm) ? e.llm : await m(e.llm);
11579
+ let t = rl(e.llm) ? e.llm : await m(e.llm);
11548
11580
  J.agent = Wi({
11549
11581
  llm: t,
11550
11582
  systemPrompt: ue,
@@ -11576,12 +11608,12 @@ function ef(e, n) {
11576
11608
  });
11577
11609
  })(), J;
11578
11610
  }
11579
- function tf(e, t) {
11580
- let n = e.id ?? dl();
11611
+ function af(e, t) {
11612
+ let n = e.id ?? ml();
11581
11613
  e.id || console.warn(`[page-agent-sdk] 未传 options.id,已生成随机 id "${n}"。刷新后持久化数据无法恢复,请传稳定 id。`);
11582
- let r = e.streaming ?? !0, i = e.ui ?? "default", a, o = e.shareContext ? Yd.get(n) : void 0;
11583
- o ? a = o : (a = ef(e, n), e.shareContext && Yd.set(n, a)), a.refCount++;
11584
- let s = null, c = Ll(e), l = null, u = null;
11614
+ let r = e.streaming ?? !0, i = e.ui ?? "default", a, o = e.shareContext ? Qd.get(n) : void 0;
11615
+ o ? a = o : (a = rf(e, n), e.shareContext && Qd.set(n, a)), a.refCount++;
11616
+ let s = null, c = Bl(e), l = null, u = null;
11585
11617
  async function d(n) {
11586
11618
  if (await a.initDone, s) {
11587
11619
  s.show();
@@ -11757,12 +11789,12 @@ function tf(e, t) {
11757
11789
  },
11758
11790
  vfsWrite: (e, t) => {
11759
11791
  let n = typeof t == "string" ? t : JSON.stringify(t);
11760
- a.vfsStore.files[pc(e)] = {
11792
+ a.vfsStore.files[mc(e)] = {
11761
11793
  content: n,
11762
11794
  updatedAt: Date.now()
11763
11795
  };
11764
11796
  },
11765
- vfsRead: (e) => a.vfsStore.files[pc(e)]?.content,
11797
+ vfsRead: (e) => a.vfsStore.files[mc(e)]?.content,
11766
11798
  createResource: (e, t) => {
11767
11799
  let n = a.dataOpsController;
11768
11800
  if (!n?.createResource) throw Error("[page-agent-sdk] createResource 不可用:需配 data.resources + vfsStore(capabilities.vfs 默认开)");
@@ -11801,7 +11833,7 @@ function tf(e, t) {
11801
11833
  }
11802
11834
  //#endregion
11803
11835
  //#region src/core/sdk/ragSubagent.ts
11804
- function nf(e, t, n, r, i) {
11836
+ function of(e, t, n, r, i) {
11805
11837
  let a = [];
11806
11838
  e && a.push("vfs_grep + vfs_read(搜预注入文档)"), t && a.push(`${r}(语义检索)`), n && a.push(`${i}(按 source 加载)`), a.push("fetch_document(公网 URL)");
11807
11839
  let o = [];
@@ -11816,7 +11848,7 @@ function nf(e, t, n, r, i) {
11816
11848
 
11817
11849
  你是只读检索角色,不要尝试修改任何数据。不要尝试上面未列出的工具。`;
11818
11850
  }
11819
- function rf(e, t, n, r, i) {
11851
+ function sf(e, t, n, r, i) {
11820
11852
  let a = [], o = [];
11821
11853
  return e && (a.push("- vfs_grep / vfs_read:搜集成方预注入 vfs 的文档(组件文档 / UI 规范)—— 快、静态,先查"), o.push("- 静态文档(组件库文档 / UI 规范):vfs_grep")), t && (a.push(`- ${r}:语义检索(retriever 向量库)—— 模糊匹配,关键词不确定 / 语义相似时用`), o.push(`- 语义相似(「瀑布流组件」「倒计时」「拼团」):${r}`)), n && (a.push(`- ${i}:按 source 精确加载(已知文档 id / URL / key)—— 精确取特定文档`), o.push(`- 已知文档 id / URL:${i}`)), a.push("- fetch_document:公网 URL —— 查公开资料"), o.push("- 公开 URL(设计规范网站 / 第三方文档):fetch_document"), `# 知识检索策略(RAG)
11822
11854
 
@@ -11833,12 +11865,12 @@ ${a.join("\n")}
11833
11865
  ## 何时用何源
11834
11866
  ${o.join("\n")}`;
11835
11867
  }
11836
- var af = {
11868
+ var cf = {
11837
11869
  name: "rag-search",
11838
11870
  description: "多源知识检索策略:vfs 预注入文档 → 语义检索 → 指定文档加载 → 公网;综合结构化结论 + 溯源",
11839
- getContent: () => rf(!0, !0, !0, "search_docs", "load_doc")
11871
+ getContent: () => sf(!0, !0, !0, "search_docs", "load_doc")
11840
11872
  };
11841
- function of(e, n, i) {
11873
+ function lf(e, n, i) {
11842
11874
  return r(async ({ query: e, topK: t }) => {
11843
11875
  try {
11844
11876
  let r = await n(e, { topK: t ?? i });
@@ -11855,7 +11887,7 @@ function of(e, n, i) {
11855
11887
  })
11856
11888
  });
11857
11889
  }
11858
- function sf(e, n) {
11890
+ function uf(e, n) {
11859
11891
  return r(async ({ source: e }) => {
11860
11892
  try {
11861
11893
  let t = await n(e), r = Array.isArray(t) ? t : [t];
@@ -11869,19 +11901,19 @@ function sf(e, n) {
11869
11901
  schema: t.object({ source: t.string().describe("文档标识(id/URL/key)") })
11870
11902
  });
11871
11903
  }
11872
- function cf(e) {
11904
+ function df(e) {
11873
11905
  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;
11874
11906
  if (!t && !n && r === !1) throw Error("[page-agent-sdk][createRagSubagent] 至少配一种知识源:retriever / loader / useVfs(true)");
11875
11907
  let p = [];
11876
- t && p.push(of(s, t, o)), n && p.push(sf(c, n)), f && p.push(...f);
11908
+ t && p.push(lf(s, t, o)), n && p.push(uf(c, n)), f && p.push(...f);
11877
11909
  let m = r ? [
11878
11910
  "vfs_grep",
11879
11911
  "vfs_read",
11880
11912
  "vfs_json_read"
11881
- ] : void 0, h = nf(r, !!t, !!n, s, c), g = {
11913
+ ] : void 0, h = of(r, !!t, !!n, s, c), g = {
11882
11914
  name: "rag-search",
11883
- description: af.description,
11884
- getContent: () => rf(r, !!t, !!n, s, c)
11915
+ description: cf.description,
11916
+ getContent: () => sf(r, !!t, !!n, s, c)
11885
11917
  };
11886
11918
  return {
11887
11919
  id: i,
@@ -11896,7 +11928,7 @@ function cf(e) {
11896
11928
  }
11897
11929
  //#endregion
11898
11930
  //#region src/core/utils/clipboard.ts
11899
- async function lf(e) {
11931
+ async function ff(e) {
11900
11932
  try {
11901
11933
  let t = globalThis.navigator?.clipboard;
11902
11934
  if (t && typeof t.writeText == "function") return await t.writeText(e), !0;
@@ -11914,8 +11946,8 @@ async function lf(e) {
11914
11946
  }
11915
11947
  //#endregion
11916
11948
  //#region src/core/composables/useChat.ts
11917
- var uf = 4e3;
11918
- function df(e = {}) {
11949
+ var pf = 4e3;
11950
+ function mf(e = {}) {
11919
11951
  let { fetchResponse: t, fetchStream: n, onPersist: r, onClear: i, onQueuedCleared: a } = e, o = /* @__PURE__ */ bt({
11920
11952
  messages: e.messages ?? [],
11921
11953
  loading: !1,
@@ -11993,7 +12025,7 @@ function df(e = {}) {
11993
12025
  let t = e.delta || "";
11994
12026
  n.subReasonFull = (n.subReasonFull || "") + t;
11995
12027
  let r = (n.subReason || "") + t;
11996
- n.subReason = r.length > uf ? r.slice(-4e3) : r;
12028
+ n.subReason = r.length > pf ? r.slice(-4e3) : r;
11997
12029
  break;
11998
12030
  }
11999
12031
  n.children ||= [];
@@ -12122,7 +12154,7 @@ function df(e = {}) {
12122
12154
  }
12123
12155
  //#endregion
12124
12156
  //#region src/core/components/icons.ts
12125
- var ff = {
12157
+ var hf = {
12126
12158
  header: "🤖",
12127
12159
  subagent: "🤖",
12128
12160
  subagentProgress: "🧬",
@@ -12133,10 +12165,10 @@ var ff = {
12133
12165
  recommend: "💡",
12134
12166
  conflict: "⚠️"
12135
12167
  };
12136
- function pf(e) {
12137
- let t = { ...ff };
12168
+ function gf(e) {
12169
+ let t = { ...hf };
12138
12170
  if (!e) return t;
12139
- let n = Object.keys(ff);
12171
+ let n = Object.keys(hf);
12140
12172
  for (let r of n) {
12141
12173
  let n = e[r];
12142
12174
  typeof n == "string" && (t[r] = n);
@@ -12145,7 +12177,7 @@ function pf(e) {
12145
12177
  }
12146
12178
  //#endregion
12147
12179
  //#region src/core/components/messages.ts
12148
- var mf = {
12180
+ var _f = {
12149
12181
  defaultTitle: "AI 助手",
12150
12182
  inputPlaceholder: "输入消息,Enter 发送...",
12151
12183
  newSession: "新建会话",
@@ -12374,8 +12406,8 @@ var mf = {
12374
12406
  codeDemoText: "这是一段示例文字,用于展示 CSS 效果。",
12375
12407
  codeDemoButton: "按钮",
12376
12408
  codeDemoInput: "输入框"
12377
- }, hf = {
12378
- "zh-CN": mf,
12409
+ }, vf = {
12410
+ "zh-CN": _f,
12379
12411
  "en-US": {
12380
12412
  defaultTitle: "AI Assistant",
12381
12413
  inputPlaceholder: "Type a message, Enter to send...",
@@ -12607,10 +12639,10 @@ var mf = {
12607
12639
  codeDemoInput: "Input"
12608
12640
  }
12609
12641
  };
12610
- function gf(e = "zh-CN", t) {
12642
+ function yf(e = "zh-CN", t) {
12611
12643
  let n = {
12612
- ...mf,
12613
- ...hf[e]
12644
+ ..._f,
12645
+ ...vf[e]
12614
12646
  };
12615
12647
  if (!t) return n;
12616
12648
  let r = { ...n };
@@ -12622,9 +12654,9 @@ function gf(e = "zh-CN", t) {
12622
12654
  }
12623
12655
  //#endregion
12624
12656
  //#region src/core/composables/chatContext.ts
12625
- var _f = Symbol("chatContext");
12626
- function vf(e = {}) {
12627
- let t = df({
12657
+ var bf = Symbol("chatContext");
12658
+ function xf(e = {}) {
12659
+ let t = mf({
12628
12660
  fetchResponse: e.fetchResponse,
12629
12661
  fetchStream: e.fetchStream,
12630
12662
  messages: e.messages,
@@ -12644,7 +12676,7 @@ function vf(e = {}) {
12644
12676
  }, h = /* @__PURE__ */ At({}), g = (e) => h.value[e] === !0, _ = (e) => {
12645
12677
  h.value[e] = !g(e);
12646
12678
  }, v = /* @__PURE__ */ At(!1), y = (e) => {
12647
- lf(e).then((e) => {
12679
+ ff(e).then((e) => {
12648
12680
  e && (v.value = !0, setTimeout(() => {
12649
12681
  v.value = !1;
12650
12682
  }, 1500));
@@ -12680,7 +12712,7 @@ function vf(e = {}) {
12680
12712
  e.onClearFocus?.();
12681
12713
  }, j = (t) => {
12682
12714
  e.onFocusChipClick?.(t);
12683
- }, M = pf(e.icons), te = e.locale ?? "zh-CN";
12715
+ }, M = gf(e.icons), te = e.locale ?? "zh-CN";
12684
12716
  return {
12685
12717
  chat: t,
12686
12718
  inputText: o,
@@ -12712,18 +12744,18 @@ function vf(e = {}) {
12712
12744
  focusChipClick: j,
12713
12745
  icons: M,
12714
12746
  locale: te,
12715
- messages: gf(te, e.dialogMessages)
12747
+ messages: yf(te, e.dialogMessages)
12716
12748
  };
12717
12749
  }
12718
- function yf() {
12719
- let e = Rn(_f);
12750
+ function Sf() {
12751
+ let e = Rn(bf);
12720
12752
  if (!e) throw Error("useChatContext 必须在 provide(chatContextKey) 的组件子树内调用");
12721
12753
  return e;
12722
12754
  }
12723
12755
  //#endregion
12724
12756
  //#region src/core/index.headless.ts
12725
- function bf(e) {
12726
- return tf(e);
12757
+ function Cf(e) {
12758
+ return af(e);
12727
12759
  }
12728
12760
  //#endregion
12729
- export { Rl as CAPABILITIES, Vl as CONTEXT_PRESETS, Qc as CompressDecisionSchema, Wu as DEFAULT_COMPUTED_STYLES, is as DEFAULT_PROMPT_SOFT_CAP, nc as DEFAULT_SYSTEM_PROMPT, yc as HTML_VOID_TAGS, Ao as HUMAN_CONFIRM_TOOL_NAME, ai as MIN_CONTEXT_WINDOW, rs as SOFT_CAP_MIN_WINDOW, Zo as STOP_WORDS, Aa as UNSAFE_KEYS, fd as actionsToInspectInfo, dd as actionsToTools, Qr as agentError, Ys as analyzeContext, Ba as applyPatchToClone, Ua as applyPatchToLive, Zr as asAgentError, Yu as buildCssPath, ic as buildDataPrompt, ac as buildSystemPrompt, _f as chatContextKey, Du as commitSetToBind, tc as connectMcp, m as constructLlmFromConfig, p as constructOpenLlmSync, lf as copyText, Wi as createAgent, ko as createApprovalMiddleware, vf as createChatContext, bf as createChatSdk, Bo as createCheckpointManager, Vo as createCheckpointMiddleware, ul as createConflictManager, Xs as createContextInspectorMiddleware, Fu as createDataOps, Gc as createHtmlFormatCheck, Jc as createHtmlSubagent, No as createHumanConfirmMiddleware, Mo as createHumanConfirmTool, jl as createMemoryBackend, So as createMemoryMiddleware, u as createProxyLlm, cf as createRagSubagent, ao as createSandboxRunner, Bl as createSdkEvents, qd as createSerialRunner, Fl as createSessionStore, Td as createSkillStore, Es as createSubagentMiddleware, us as createSubagentTracker, ks as createSubagentsMiddleware, yd as createUsageHintsMiddleware, As as createVerifyMiddleware, lc as createVfs, Nl as createWebStorageBackend, Is as createWriteBackCheck, Fa as deepClone, hd as defineDataToolset, so as defineSkill, Yc as defineTool, Pa as deleteByPath, $c as deriveTitle, sa as describeSchemaNode, Oi as detectGarbledToolCall, qa as diffObjects, ed as domInfoTool, td as domInspectSkill, $u as domSearchTool, Vu as domToStructure, Uu as domTools, md as domToolsStatic, qu as ensureDomListenerRecorder, $o as estimateMessageTokens, es as estimateRoundTokens, X as estimateTokens, g as extractReasoningDelta, ba as extractSchemaHint, Zs as extractText, h as extractTextDelta, _ as extractUsage, Lu as fetchDocTools, pd as fetchTools, Eu as filterByToolMode, Ka as findStrippedKeys, ca as formatConstraints, qr as formatZodIssues, Z as getByPath, Hu as getDomTool, Qu as getElementInfo, id as getEnvSummary, Ju as getRecordedListeners, Ji as getSchemaAtPath, Gi as getSchemaTopKeys, li as getTraceMetrics, $ as hashValue, ha as htmlOrchestratorPrompt, ts as indexSummarize, sd as inspectEnvTool, cd as inspectTools, el as isChatModel, yi as isContextLengthError, Ki as isPathAllowed, Cl as isQuotaError, ja as isUnsafePath, tu as jpEval, Yr as jsonParseError, Ra as limitDepth, Ia as maybeParseValue, y as normalizeUsage, ci as offloadPassThroughChars, si as offloadThresholdChars, ma as presets, ta as projectBySchema, ea as projectBySchemaDeep, La as projectFields, ns as recallRounds, la as renderSchemaHint, ua as renderSchemaOverview, pa as renderSchemaShallow, zl as resolveCapabilities, Ul as resolveContextOptions, Ll as resolveDialogConfig, ll as resolveLlm, oi as resolveModelCaps, as as resolvePromptSoftCap, Il as resolveStorage, Ga as restoreInPlace, Wa as restoreLive, Xr as routeError, oo as runHostScript, au as runSandboxedScript, Ma as safeMerge, rd as safeSerialize, Q as safeStringify, Xu as searchDom, ru as searchJson, gd as selectBuiltinTools, Na as setByPath, os as shouldTriggerCompression, ga as systemPromptHelpers, Qo as tokenize, Y as toolError, qi as unwrapSchema, df as useChat, yf as useChatContext, xc as validateHtmlFormat, e as z, Jr as zodError };
12761
+ export { Vl as CAPABILITIES, Wl as CONTEXT_PRESETS, tl as CompressDecisionSchema, qu as DEFAULT_COMPUTED_STYLES, is as DEFAULT_PROMPT_SOFT_CAP, rc as DEFAULT_SYSTEM_PROMPT, bc as HTML_VOID_TAGS, Ao as HUMAN_CONFIRM_TOOL_NAME, ai as MIN_CONTEXT_WINDOW, rs as SOFT_CAP_MIN_WINDOW, Zo as STOP_WORDS, Aa as UNSAFE_KEYS, hd as actionsToInspectInfo, md as actionsToTools, Qr as agentError, Xs as analyzeContext, Ba as applyPatchToClone, Ua as applyPatchToLive, Zr as asAgentError, Qu as buildCssPath, ac as buildDataPrompt, oc as buildSystemPrompt, bf as chatContextKey, Au as commitSetToBind, nc as connectMcp, m as constructLlmFromConfig, p as constructOpenLlmSync, ff as copyText, Wi as createAgent, ko as createApprovalMiddleware, xf as createChatContext, Cf as createChatSdk, Bo as createCheckpointManager, Vo as createCheckpointMiddleware, pl as createConflictManager, Zs as createContextInspectorMiddleware, Ru as createDataOps, Jc as createHtmlFormatCheck, Zc as createHtmlSubagent, No as createHumanConfirmMiddleware, Mo as createHumanConfirmTool, Pl as createMemoryBackend, So as createMemoryMiddleware, u as createProxyLlm, df as createRagSubagent, ao as createSandboxRunner, Ul as createSdkEvents, Xd as createSerialRunner, Rl as createSessionStore, Od as createSkillStore, Ds as createSubagentMiddleware, us as createSubagentTracker, As as createSubagentsMiddleware, Sd as createUsageHintsMiddleware, js as createVerifyMiddleware, uc as createVfs, Il as createWebStorageBackend, Ls as createWriteBackCheck, Fa as deepClone, vd as defineDataToolset, so as defineSkill, Qc as defineTool, Pa as deleteByPath, nl as deriveTitle, sa as describeSchemaNode, Oi as detectGarbledToolCall, qa as diffObjects, rd as domInfoTool, id as domInspectSkill, nd as domSearchTool, Wu as domToStructure, Ku as domTools, _d as domToolsStatic, Xu as ensureDomListenerRecorder, $o as estimateMessageTokens, es as estimateRoundTokens, X as estimateTokens, g as extractReasoningDelta, ba as extractSchemaHint, Qs as extractText, h as extractTextDelta, _ as extractUsage, Bu as fetchDocTools, gd as fetchTools, ku as filterByToolMode, Ka as findStrippedKeys, ca as formatConstraints, qr as formatZodIssues, Z as getByPath, Gu as getDomTool, td as getElementInfo, sd as getEnvSummary, Zu as getRecordedListeners, Ji as getSchemaAtPath, Gi as getSchemaTopKeys, li as getTraceMetrics, $ as hashValue, ha as htmlOrchestratorPrompt, ts as indexSummarize, ud as inspectEnvTool, dd as inspectTools, rl as isChatModel, yi as isContextLengthError, Ki as isPathAllowed, El as isQuotaError, ja as isUnsafePath, iu as jpEval, Yr as jsonParseError, Ra as limitDepth, Ia as maybeParseValue, y as normalizeUsage, ci as offloadPassThroughChars, si as offloadThresholdChars, ma as presets, ta as projectBySchema, ea as projectBySchemaDeep, La as projectFields, ns as recallRounds, la as renderSchemaHint, ua as renderSchemaOverview, pa as renderSchemaShallow, Hl as resolveCapabilities, Kl as resolveContextOptions, Bl as resolveDialogConfig, fl as resolveLlm, oi as resolveModelCaps, as as resolvePromptSoftCap, zl as resolveStorage, Ga as restoreInPlace, Wa as restoreLive, Xr as routeError, oo as runHostScript, cu as runSandboxedScript, Ma as safeMerge, od as safeSerialize, Q as safeStringify, $u as searchDom, ou as searchJson, yd as selectBuiltinTools, Na as setByPath, os as shouldTriggerCompression, ga as systemPromptHelpers, Qo as tokenize, Y as toolError, qi as unwrapSchema, mf as useChat, Sf as useChatContext, Sc as validateHtmlFormat, e as z, Jr as zodError };