page-agent-sdk 2.4.1 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15017,7 +15017,18 @@ function P_(e = {}) {
15017
15017
  ...e
15018
15018
  };
15019
15019
  async function n(e) {
15020
- let n = C_(e), r = e.length, i = (t) => ({
15020
+ let n = C_(e), r = e.length, i = "";
15021
+ if (n.length) {
15022
+ let t = n[0].startIdx;
15023
+ for (let n = 0; n < t; n++) {
15024
+ let t = e[n];
15025
+ if (t.role === "system" && typeof t.content == "string" && t.content.startsWith("【更早对话摘要")) {
15026
+ i = t.content.replace(/^【[^】]*】\n?/, "");
15027
+ break;
15028
+ }
15029
+ }
15030
+ }
15031
+ let a = (t) => ({
15021
15032
  messages: e,
15022
15033
  stats: {
15023
15034
  triggered: !1,
@@ -15028,82 +15039,66 @@ function P_(e = {}) {
15028
15039
  compressedMessages: r,
15029
15040
  strategy: t
15030
15041
  }
15031
- }), a, o, s;
15042
+ }), o, s, c;
15032
15043
  if (t.contextWindow && t.contextWindow > 0) {
15033
- if (n.reduce((e, t) => e + j_(t), 0) <= t.contextWindow * (t.summaryThresholdRatio ?? .5)) return i("none");
15034
- let e = t.contextWindow * (t.windowRatio ?? .4), r = 0, c = 0;
15044
+ if (n.reduce((e, t) => e + j_(t), 0) <= t.contextWindow * (t.summaryThresholdRatio ?? .5)) return a("none");
15045
+ let e = t.contextWindow * (t.windowRatio ?? .4), r = 0, i = 0;
15035
15046
  for (let t = n.length - 1; t >= 0; t--) if (r += j_(n[t]), r >= e) {
15036
- c = t + 1;
15047
+ i = t + 1;
15037
15048
  break;
15038
15049
  }
15039
- if (c > n.length - 1 && (c = n.length - 1), c < 0 && (c = 0), a = n.slice(c), o = n.slice(0, c), !o.length) return i("none");
15040
- s = "token-window+";
15050
+ if (i > n.length - 1 && (i = n.length - 1), i < 0 && (i = 0), o = n.slice(i), s = n.slice(0, i), !s.length) return a("none");
15051
+ c = "token-window+";
15041
15052
  } else {
15042
- if (n.length <= t.summaryThresholdRounds) return i("none");
15053
+ if (n.length <= t.summaryThresholdRounds) return a("none");
15043
15054
  let e = Math.min(t.windowRounds, n.length);
15044
- a = n.slice(n.length - e), o = n.slice(0, n.length - e), s = "window+";
15055
+ o = n.slice(n.length - e), s = n.slice(0, n.length - e), c = "window+";
15045
15056
  }
15046
- let c = [...e].reverse().find((e) => e.role === "user")?.content || "", l = t.preserveLastToolResults?.length ? new Set(t.preserveLastToolResults) : void 0, u, d;
15057
+ let l = [...e].reverse().find((e) => e.role === "user")?.content || "", u = t.preserveLastToolResults?.length ? new Set(t.preserveLastToolResults) : void 0, d, f;
15047
15058
  if (t.enableLLMSummary && t.llmInvoke) try {
15048
- u = await t.llmInvoke(M_(o, l)), d = s + "llm_summary";
15059
+ d = await t.llmInvoke(M_(s, u)), f = c + "llm_summary";
15049
15060
  } catch {
15050
- u = M_(o, l), d = s + "index_summary(llm_fallback)";
15051
- }
15052
- else u = M_(o, l), d = s + "index_summary";
15053
- let f = t.enableRecall ? N_(o, c, t.recallTopK) : [], p = f.length ? f.map((e) => `- 第${e.round}轮:${w_(e.userMsg.content, 60)} → ${e.assistantMsgs[0] ? w_(e.assistantMsgs[0].content, 80) : ""}`).join("\n") : "", m = [`【对话历史摘要】以下是之前 ${o.length} 轮对话的要点(最新 ${a.length} 轮已完整保留):`, u];
15054
- if (p && m.push("\n【与当前问题可能相关的早期对话】", p), t.getRegisteredSlots) try {
15055
- let e = t.getRegisteredSlots();
15061
+ d = M_(s, u), f = c + "index_summary(llm_fallback)";
15062
+ }
15063
+ else d = M_(s, u), f = c + "index_summary";
15064
+ let p = t.enableRecall ? N_(s, l, t.recallTopK) : [], m = p.length ? p.map((e) => `- 第${e.round}轮:${w_(e.userMsg.content, 60)} → ${e.assistantMsgs[0] ? w_(e.assistantMsgs[0].content, 80) : ""}`).join("\n") : "", h = i ? `${d}\n【更早累积摘要】\n${i}` : d, g = [`【对话历史摘要】以下是之前 ${s.length} 轮对话的要点(最新 ${o.length} 轮已完整保留):`, h];
15065
+ m && g.push("\n【与当前问题可能相关的早期对话】", m);
15066
+ let _ = t.getRegisteredData ?? t.getRegisteredSlots;
15067
+ if (_) try {
15068
+ let e = _();
15056
15069
  if (e.length) {
15057
15070
  let t = e.map((e) => `- ${e.path ? e.path + ": " : ""}${e.description}`).join("\n");
15058
- m.push("\n【当前可操作数据(动态增删后的最新状态,操作前以 describe_data / read 为准)】", t);
15071
+ g.push("\n【当前可操作数据(动态增删后的最新状态,操作前以 describe_data / read 为准)】", t);
15059
15072
  }
15060
15073
  } catch {}
15061
- let h = {
15074
+ let v = {
15062
15075
  role: "system",
15063
- content: m.join("\n"),
15076
+ content: g.join("\n"),
15064
15077
  timestamp: Date.now()
15065
- }, g = [];
15066
- for (let e of a) g.push(e.userMsg), g.push(...e.assistantMsgs);
15067
- let _ = [h, ...g];
15078
+ }, y = [];
15079
+ for (let e of o) y.push(e.userMsg), y.push(...e.assistantMsgs);
15080
+ let b = [v, ...y];
15068
15081
  return {
15069
- messages: _,
15082
+ messages: b,
15070
15083
  stats: {
15071
15084
  triggered: !0,
15072
15085
  roundsTotal: n.length,
15073
- roundsSummarized: o.length,
15074
- roundsRecalled: f.length,
15086
+ roundsSummarized: s.length,
15087
+ roundsRecalled: p.length,
15075
15088
  originalMessages: r,
15076
- compressedMessages: _.length,
15077
- strategy: d
15089
+ compressedMessages: b.length,
15090
+ strategy: f
15078
15091
  }
15079
15092
  };
15080
15093
  }
15081
15094
  return {
15082
15095
  compress: n,
15083
- config: t,
15084
- trimToolResults: F_
15096
+ config: t
15085
15097
  };
15086
15098
  }
15087
- function F_(e, t) {
15088
- let n = [];
15089
- if (e.forEach((e, t) => {
15090
- e instanceof o && n.push(t);
15091
- }), n.length <= 2) return e;
15092
- let r = new Set(n.slice(-2));
15093
- return e.map((e, n) => {
15094
- if (!(e instanceof o) || r.has(n)) return e;
15095
- let i = typeof e.content == "string" ? e.content : JSON.stringify(e.content);
15096
- if (i.length <= t) return e;
15097
- let a = i.slice(0, t) + `\n…[已截断,原长度 ${i.length}]`;
15098
- return new o({
15099
- tool_call_id: e.tool_call_id || e.lc_id || "trimmed",
15100
- content: a
15101
- });
15102
- });
15103
- }
15104
15099
  //#endregion
15105
15100
  //#region src/core/harness/summarization.ts
15106
- function I_(e = {}) {
15101
+ function F_(e = {}) {
15107
15102
  let t = P_(e);
15108
15103
  return {
15109
15104
  name: "summarization",
@@ -15118,7 +15113,7 @@ function I_(e = {}) {
15118
15113
  }
15119
15114
  //#endregion
15120
15115
  //#region src/core/presets.ts
15121
- var L_ = {
15116
+ var I_ = {
15122
15117
  pageBuilder: { systemPrompt: "你是页面构建助手。按用户意图读写主数据(经 data 声明 + schema 校验),改完页面实时更新。" },
15123
15118
  researcher: {
15124
15119
  systemPrompt: "你是调研助手。多路调研用 spawn_agents 并行委派子 agent(各负责一个方向);单份资料用 fetch_document 抓取;最后结构化汇总,给出结论与依据。",
@@ -15132,7 +15127,7 @@ var L_ = {
15132
15127
  memory: !1,
15133
15128
  subagent: !1
15134
15129
  } }
15135
- }, R_ = { reliableWriteRules: [
15130
+ }, L_ = { reliableWriteRules: [
15136
15131
  "【可靠写入规则】",
15137
15132
  "1. 改任何属性前,先用 read({ path }) 读其当前真实值,基于真实值改,不要凭记忆;",
15138
15133
  "2. 若不确定可操作哪些属性,先 read() 不传 path 查看当前注册项(动态组件场景下注册表会增删,以工具返回为准,勿凭旧记忆);",
@@ -15140,7 +15135,7 @@ var L_ = {
15140
15135
  "4. 写入若被 schema 校验拒绝(返回结构化错误含字段名与期望类型),按错误修正后重试,不要放弃;",
15141
15136
  "5. 优先用 write 的 patch 增量改(只发改动,如 write({ path, value, patch:{ op, jsonPath } })),避免整体重传大 JSON 被截断。"
15142
15137
  ].join("\n") };
15143
- function z_(e) {
15138
+ function R_(e) {
15144
15139
  if (!e) return "";
15145
15140
  try {
15146
15141
  let t = e.shape ?? (e._def?.shape ? typeof e._def.shape == "function" ? e._def.shape() : e._def.shape : null);
@@ -15153,7 +15148,7 @@ function z_(e) {
15153
15148
  }
15154
15149
  //#endregion
15155
15150
  //#region src/core/sdk/contextPreset.ts
15156
- var B_ = {
15151
+ var z_ = {
15157
15152
  auto: {
15158
15153
  summaryThresholdRatio: .5,
15159
15154
  windowRatio: .4,
@@ -15175,8 +15170,8 @@ var B_ = {
15175
15170
  enableLLMSummary: !0
15176
15171
  }
15177
15172
  };
15178
- function V_(e, t) {
15179
- let n = B_[e.contextPreset ?? "auto"] ?? {}, r = e.contextOptions === !1 ? {} : e.contextOptions ?? {};
15173
+ function B_(e, t) {
15174
+ let n = z_[e.contextPreset ?? "auto"] ?? {}, r = e.contextOptions === !1 ? {} : e.contextOptions ?? {};
15180
15175
  return {
15181
15176
  ...n,
15182
15177
  ...r,
@@ -15193,7 +15188,7 @@ function $(e) {
15193
15188
  };
15194
15189
  return e.path !== void 0 && (t.path = e.path), e.hint && (t.hint = e.hint), e.details !== void 0 && (t.details = e.details), `ERROR: ${JSON.stringify(t)}`;
15195
15190
  }
15196
- function H_(e) {
15191
+ function V_(e) {
15197
15192
  return e.slice(0, 10).map((e) => {
15198
15193
  let t = e, n = {
15199
15194
  path: (Array.isArray(t.path) ? t.path.join(".") : String(t.path ?? "")) || "(root)",
@@ -15202,16 +15197,16 @@ function H_(e) {
15202
15197
  return t.expected !== void 0 && (n.expected = t.expected), t.received !== void 0 && (n.received = t.received), t.code !== void 0 && (n.code = t.code), n;
15203
15198
  });
15204
15199
  }
15205
- function U_(e, t) {
15200
+ function H_(e, t) {
15206
15201
  return $({
15207
15202
  code: "SCHEMA_INVALID",
15208
15203
  path: e,
15209
15204
  message: `值不符合 "${e}" 的 schema(${t.length} 处问题)`,
15210
15205
  hint: `用 read({jsonPath:"${e}"}) 查看当前值,按 describe_data() 查看主数据 schema,修正后重试;改大对象优先用 write 的 patch 增量(只发改动部分)`,
15211
- details: H_(t)
15206
+ details: V_(t)
15212
15207
  });
15213
15208
  }
15214
- function W_(e, t, n) {
15209
+ function U_(e, t, n) {
15215
15210
  let r = n?.message || String(n);
15216
15211
  return $({
15217
15212
  code: "JSON_PARSE",
@@ -15220,18 +15215,18 @@ function W_(e, t, n) {
15220
15215
  hint: `检查引号/逗号/括号是否闭合;字符串值需双引号包裹(如 '"dark"' 表示字符串 dark,数字直接写如 5);预览前 80 字符:${t.slice(0, 80)}`
15221
15216
  });
15222
15217
  }
15223
- var G_ = .9;
15224
- function K_(e, t = {}) {
15218
+ var W_ = .9;
15219
+ function G_(e, t = {}) {
15225
15220
  let n = Object.create(null);
15226
- if (e) for (let [t, r] of Object.entries(e)) n[Y_(t)] = {
15221
+ if (e) for (let [t, r] of Object.entries(e)) n[J_(t)] = {
15227
15222
  content: r,
15228
- updatedAt: Z_()
15223
+ updatedAt: X_()
15229
15224
  };
15230
15225
  let { persist: r } = t, i = t.maxBytes ?? 4194304;
15231
15226
  function a() {
15232
- if (J_(n) <= i) return;
15233
- let e = i * G_, t = Object.entries(n).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
15234
- for (let [r] of t) if (delete n[r], J_(n) <= e) break;
15227
+ if (q_(n) <= i) return;
15228
+ let e = i * W_, t = Object.entries(n).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
15229
+ for (let [r] of t) if (delete n[r], q_(n) <= e) break;
15235
15230
  }
15236
15231
  let o = null;
15237
15232
  function s() {
@@ -15256,7 +15251,7 @@ function K_(e, t = {}) {
15256
15251
  }
15257
15252
  }) };
15258
15253
  return r && (l.hydrate = (e) => {
15259
- for (let [t, r] of Object.entries(e)) n[Y_(t)] = r;
15254
+ for (let [t, r] of Object.entries(e)) n[J_(t)] = r;
15260
15255
  a();
15261
15256
  }, l.flush = () => {
15262
15257
  o &&= (clearTimeout(o), null), s();
@@ -15265,17 +15260,17 @@ function K_(e, t = {}) {
15265
15260
  c();
15266
15261
  }), l;
15267
15262
  }
15268
- var q_ = null;
15269
- function J_(e) {
15270
- q_ ||= new TextEncoder();
15263
+ var K_ = null;
15264
+ function q_(e) {
15265
+ K_ ||= new TextEncoder();
15271
15266
  let t = 0;
15272
- for (let n of Object.values(e)) t += q_.encode(n.content).length;
15267
+ for (let n of Object.values(e)) t += K_.encode(n.content).length;
15273
15268
  return t;
15274
15269
  }
15275
- function Y_(e) {
15270
+ function J_(e) {
15276
15271
  return e.replace(/^\/+/, "").replace(/\/+/g, "/");
15277
15272
  }
15278
- function X_(e) {
15273
+ function Y_(e) {
15279
15274
  let t = "";
15280
15275
  for (let n = 0; n < e.length; n++) {
15281
15276
  let r = e[n];
@@ -15283,13 +15278,13 @@ function X_(e) {
15283
15278
  }
15284
15279
  return RegExp("^" + t + "$");
15285
15280
  }
15286
- function Z_() {
15281
+ function X_() {
15287
15282
  return Date.now();
15288
15283
  }
15289
- function Q_(e) {
15284
+ function Z_(e) {
15290
15285
  return [
15291
15286
  n(async ({ path: t, offset: n, limit: r }) => {
15292
- let i = e.files[Y_(t)];
15287
+ let i = e.files[J_(t)];
15293
15288
  if (!i) return $({
15294
15289
  code: "NOT_FOUND",
15295
15290
  path: t,
@@ -15307,9 +15302,9 @@ function Q_(e) {
15307
15302
  limit: t.number().int().min(1).default(2e3).describe("读取行数")
15308
15303
  })
15309
15304
  }),
15310
- n(async ({ path: t, content: n }) => (e.files[Y_(t)] = {
15305
+ n(async ({ path: t, content: n }) => (e.files[J_(t)] = {
15311
15306
  content: n,
15312
- updatedAt: Z_()
15307
+ updatedAt: X_()
15313
15308
  }, `已写入 ${t}(${n.length} 字符)`), {
15314
15309
  name: "vfs_write",
15315
15310
  description: "写入/覆盖虚拟工作区文件,作为中间工作记忆。",
@@ -15319,7 +15314,7 @@ function Q_(e) {
15319
15314
  })
15320
15315
  }),
15321
15316
  n(async ({ path: t, oldString: n, newString: r }) => {
15322
- let i = Y_(t), a = e.files[i];
15317
+ let i = J_(t), a = e.files[i];
15323
15318
  if (!a) return $({
15324
15319
  code: "NOT_FOUND",
15325
15320
  path: t,
@@ -15349,7 +15344,7 @@ function Q_(e) {
15349
15344
  }
15350
15345
  return e.files[i] = {
15351
15346
  content: a.content.replace(n, r),
15352
- updatedAt: Z_()
15347
+ updatedAt: X_()
15353
15348
  }, `已替换 ${t} 中 1 处。`;
15354
15349
  }, {
15355
15350
  name: "vfs_edit",
@@ -15371,7 +15366,7 @@ function Q_(e) {
15371
15366
  n(async ({ pattern: t }) => {
15372
15367
  let n;
15373
15368
  try {
15374
- n = X_(t);
15369
+ n = Y_(t);
15375
15370
  } catch (e) {
15376
15371
  return $({
15377
15372
  code: "GLOB_INVALID",
@@ -15400,7 +15395,7 @@ function Q_(e) {
15400
15395
  details: { pattern: t }
15401
15396
  });
15402
15397
  }
15403
- let i = n ? [Y_(n)] : Object.keys(e.files), a = [];
15398
+ let i = n ? [J_(n)] : Object.keys(e.files), a = [];
15404
15399
  for (let t of i) {
15405
15400
  let n = e.files[t];
15406
15401
  n && n.content.split("\n").forEach((e, n) => {
@@ -15418,17 +15413,17 @@ function Q_(e) {
15418
15413
  })
15419
15414
  ];
15420
15415
  }
15421
- function $_(e) {
15416
+ function Q_(e) {
15422
15417
  return {
15423
15418
  name: "vfs",
15424
- tools: Q_(e),
15419
+ tools: Z_(e),
15425
15420
  beforeAgent: () => ({ files: e.files })
15426
15421
  };
15427
15422
  }
15428
15423
  //#endregion
15429
15424
  //#region src/core/tools/dataSlotQuery.ts
15430
- var ev = /[\w$-]/;
15431
- function tv(e) {
15425
+ var $_ = /[\w$-]/;
15426
+ function ev(e) {
15432
15427
  let t = [], n = e.trim(), r = +(n[0] === "$");
15433
15428
  for (; r < n.length;) {
15434
15429
  let e = n[r];
@@ -15439,7 +15434,7 @@ function tv(e) {
15439
15434
  continue;
15440
15435
  }
15441
15436
  let e = "";
15442
- for (; r < n.length && ev.test(n[r]);) e += n[r++];
15437
+ for (; r < n.length && $_.test(n[r]);) e += n[r++];
15443
15438
  if (!e) throw Error("JSONPath: .. 后缺属性名");
15444
15439
  t.push({
15445
15440
  type: "descendKey",
@@ -15452,7 +15447,7 @@ function tv(e) {
15452
15447
  continue;
15453
15448
  }
15454
15449
  let e = "";
15455
- for (; r < n.length && ev.test(n[r]);) e += n[r++];
15450
+ for (; r < n.length && $_.test(n[r]);) e += n[r++];
15456
15451
  if (!e) throw Error("JSONPath: . 后缺属性名");
15457
15452
  t.push({
15458
15453
  type: "key",
@@ -15508,7 +15503,7 @@ function tv(e) {
15508
15503
  }
15509
15504
  return t;
15510
15505
  }
15511
- function nv(e) {
15506
+ function tv(e) {
15512
15507
  let t = [], n = 0, r = e.trim();
15513
15508
  for (; n < r.length;) {
15514
15509
  let e = r[n];
@@ -15553,7 +15548,7 @@ function nv(e) {
15553
15548
  }
15554
15549
  return t;
15555
15550
  }
15556
- var rv = class {
15551
+ var nv = class {
15557
15552
  toks;
15558
15553
  item;
15559
15554
  pos = 0;
@@ -15589,12 +15584,12 @@ var rv = class {
15589
15584
  return this.next(), e;
15590
15585
  }
15591
15586
  let e = this.operand(), t = this.peek();
15592
- return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(), ov(t, e, this.operand())) : iv(e);
15587
+ return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(), av(t, e, this.operand())) : rv(e);
15593
15588
  }
15594
15589
  operand() {
15595
15590
  let e = this.next();
15596
15591
  if (e === void 0) throw Error("过滤表达式:缺操作数");
15597
- if (e.startsWith("@")) return av(e, this.item);
15592
+ if (e.startsWith("@")) return iv(e, this.item);
15598
15593
  if (e[0] === "'" || e[0] === "\"") return e.slice(1, -1);
15599
15594
  if (e === "true") return !0;
15600
15595
  if (e === "false") return !1;
@@ -15604,10 +15599,10 @@ var rv = class {
15604
15599
  throw Error(`过滤表达式:未知操作数 '${e}'`);
15605
15600
  }
15606
15601
  };
15607
- function iv(e) {
15602
+ function rv(e) {
15608
15603
  return !!e && e !== 0 && e !== "" && e !== null;
15609
15604
  }
15610
- function av(e, t) {
15605
+ function iv(e, t) {
15611
15606
  let n = e.split(".").filter((e) => e && e !== "@"), r = t;
15612
15607
  for (let e of n) {
15613
15608
  if (typeof r != "object" || !r) return;
@@ -15615,7 +15610,7 @@ function av(e, t) {
15615
15610
  }
15616
15611
  return r;
15617
15612
  }
15618
- function ov(e, t, n) {
15613
+ function av(e, t, n) {
15619
15614
  switch (e) {
15620
15615
  case "==": return t === n;
15621
15616
  case "!=": return t !== n;
@@ -15626,47 +15621,47 @@ function ov(e, t, n) {
15626
15621
  default: return !1;
15627
15622
  }
15628
15623
  }
15629
- function sv(e, t) {
15630
- return new rv(nv(e), t).parse();
15624
+ function ov(e, t) {
15625
+ return new nv(tv(e), t).parse();
15631
15626
  }
15632
- function cv(e, t) {
15627
+ function sv(e, t) {
15633
15628
  return e ? `${e}.${t}` : String(t);
15634
15629
  }
15635
- function lv(e, t) {
15630
+ function cv(e, t) {
15636
15631
  let n = [{
15637
15632
  path: "",
15638
15633
  value: e
15639
15634
  }];
15640
- for (let e of tv(t)) {
15635
+ for (let e of ev(t)) {
15641
15636
  let t = [];
15642
15637
  if (e.type === "key") for (let r of n) r.value != null && typeof r.value == "object" && e.key in r.value && t.push({
15643
- path: cv(r.path, e.key),
15638
+ path: sv(r.path, e.key),
15644
15639
  value: r.value[e.key]
15645
15640
  });
15646
15641
  else if (e.type === "index") {
15647
15642
  for (let r of n) if (Array.isArray(r.value)) {
15648
15643
  let n = r.value[e.index];
15649
15644
  e.index >= 0 && e.index < r.value.length && t.push({
15650
- path: cv(r.path, e.index),
15645
+ path: sv(r.path, e.index),
15651
15646
  value: n,
15652
15647
  index: e.index
15653
15648
  });
15654
15649
  }
15655
15650
  } else if (e.type === "wildcard") {
15656
15651
  for (let e of n) if (Array.isArray(e.value)) e.value.forEach((n, r) => t.push({
15657
- path: cv(e.path, r),
15652
+ path: sv(e.path, r),
15658
15653
  value: n,
15659
15654
  index: r
15660
15655
  }));
15661
15656
  else if (e.value != null && typeof e.value == "object") for (let n of Object.keys(e.value)) t.push({
15662
- path: cv(e.path, n),
15657
+ path: sv(e.path, n),
15663
15658
  value: e.value[n]
15664
15659
  });
15665
15660
  } else if (e.type === "descendKey") {
15666
15661
  let r = e.key, i = (e) => {
15667
15662
  if (!(e.value == null || typeof e.value != "object")) for (let n of Object.keys(e.value)) {
15668
15663
  let a = {
15669
- path: cv(e.path, n),
15664
+ path: sv(e.path, n),
15670
15665
  value: e.value[n]
15671
15666
  };
15672
15667
  n === r && t.push(a), i(a);
@@ -15677,7 +15672,7 @@ function lv(e, t) {
15677
15672
  let e = (n) => {
15678
15673
  if (!(n.value == null || typeof n.value != "object")) for (let r of Object.keys(n.value)) {
15679
15674
  let i = {
15680
- path: cv(n.path, r),
15675
+ path: sv(n.path, r),
15681
15676
  value: n.value[r]
15682
15677
  };
15683
15678
  t.push(i), e(i);
@@ -15686,16 +15681,16 @@ function lv(e, t) {
15686
15681
  for (let t of n) e(t);
15687
15682
  } else if (e.type === "filter") {
15688
15683
  for (let r of n) if (Array.isArray(r.value)) r.value.forEach((n, i) => {
15689
- sv(e.filter, n) && t.push({
15690
- path: cv(r.path, i),
15684
+ ov(e.filter, n) && t.push({
15685
+ path: sv(r.path, i),
15691
15686
  value: n,
15692
15687
  index: i
15693
15688
  });
15694
15689
  });
15695
15690
  else if (r.value != null && typeof r.value == "object") for (let n of Object.keys(r.value)) {
15696
15691
  let i = r.value[n];
15697
- sv(e.filter, i) && t.push({
15698
- path: cv(r.path, n),
15692
+ ov(e.filter, i) && t.push({
15693
+ path: sv(r.path, n),
15699
15694
  value: i
15700
15695
  });
15701
15696
  }
@@ -15704,7 +15699,7 @@ function lv(e, t) {
15704
15699
  }
15705
15700
  return n;
15706
15701
  }
15707
- function uv(e, t) {
15702
+ function lv(e, t) {
15708
15703
  let n = e.length, r = t.length;
15709
15704
  if (!n) return r;
15710
15705
  if (!r) return n;
@@ -15720,7 +15715,7 @@ function uv(e, t) {
15720
15715
  }
15721
15716
  return i[r];
15722
15717
  }
15723
- function dv(e, t, n = {}) {
15718
+ function uv(e, t, n = {}) {
15724
15719
  let r = n.mode || "substring", i = n.limit ?? 50, a = n.matchKey !== !1, o = [], s = null;
15725
15720
  if (r === "regex") try {
15726
15721
  s = new RegExp(t, "i");
@@ -15730,11 +15725,11 @@ function dv(e, t, n = {}) {
15730
15725
  let c = (e, l, u) => {
15731
15726
  if (o.length >= i || e == null) return;
15732
15727
  if (typeof e == "object") {
15733
- if (Array.isArray(e)) e.forEach((e, t) => c(e, cv(l, t), String(t)));
15734
- else for (let t of Object.keys(e)) c(e[t], cv(l, t), t);
15728
+ if (Array.isArray(e)) e.forEach((e, t) => c(e, sv(l, t), String(t)));
15729
+ else for (let t of Object.keys(e)) c(e[t], sv(l, t), t);
15735
15730
  return;
15736
15731
  }
15737
- let d = String(e), f = fv(d, t, r, n.fuzzyThreshold ?? 2, s);
15732
+ let d = String(e), f = dv(d, t, r, n.fuzzyThreshold ?? 2, s);
15738
15733
  if (f) {
15739
15734
  o.push({
15740
15735
  path: l,
@@ -15745,7 +15740,7 @@ function dv(e, t, n = {}) {
15745
15740
  return;
15746
15741
  }
15747
15742
  if (a && u) {
15748
- let e = fv(u, t, r, n.fuzzyThreshold ?? 2, s);
15743
+ let e = dv(u, t, r, n.fuzzyThreshold ?? 2, s);
15749
15744
  e && o.push({
15750
15745
  path: l,
15751
15746
  key: u,
@@ -15756,18 +15751,18 @@ function dv(e, t, n = {}) {
15756
15751
  };
15757
15752
  return c(e, ""), o;
15758
15753
  }
15759
- function fv(e, t, n, r, i) {
15754
+ function dv(e, t, n, r, i) {
15760
15755
  let a = e.toLowerCase(), o = t.toLowerCase();
15761
15756
  if (n === "substring") return a.includes(o) ? 1 : null;
15762
15757
  if (n === "regex") return i && i.test(e) ? 1 : null;
15763
15758
  if (n === "fuzzy") {
15764
15759
  if (a.includes(o)) return 2;
15765
- let e = uv(a, o);
15760
+ let e = lv(a, o);
15766
15761
  return e <= r ? r - e + 1 : null;
15767
15762
  }
15768
15763
  return null;
15769
15764
  }
15770
- var pv = [
15765
+ var fv = [
15771
15766
  "self.fetch = () => { throw new Error('fetch 已被沙箱禁用') }",
15772
15767
  "self.XMLHttpRequest = function(){ throw new Error('XMLHttpRequest 已被沙箱禁用') }",
15773
15768
  "self.importScripts = () => { throw new Error('importScripts 已被沙箱禁用') }",
@@ -15780,7 +15775,7 @@ var pv = [
15780
15775
  "try { self.BroadcastChannel = undefined } catch {}",
15781
15776
  "if (self.navigator && self.navigator.sendBeacon) self.navigator.sendBeacon = () => { throw new Error('sendBeacon 已被沙箱禁用') }"
15782
15777
  ].join("\n");
15783
- function mv(e, t, n = 3e3) {
15778
+ function pv(e, t, n = 3e3) {
15784
15779
  return new Promise((r) => {
15785
15780
  let i = Date.now(), a = !1, o = (e) => {
15786
15781
  if (!a) {
@@ -15793,7 +15788,7 @@ function mv(e, t, n = 3e3) {
15793
15788
  elapsedMs: Date.now() - i
15794
15789
  });
15795
15790
  }
15796
- }, s = pv + "\nself.onmessage = async (e) => {\n try {\n const fn = new Function(\"data\", e.data.script);\n let result = fn(e.data.data);\n if (result && typeof result.then === \"function\") result = await result;\n self.postMessage({ ok: true, result });\n } catch (err) {\n self.postMessage({ ok: false, error: String((err && err.message) || err) });\n }\n};", c, l;
15791
+ }, s = fv + "\nself.onmessage = async (e) => {\n try {\n const fn = new Function(\"data\", e.data.script);\n let result = fn(e.data.data);\n if (result && typeof result.then === \"function\") result = await result;\n self.postMessage({ ok: true, result });\n } catch (err) {\n self.postMessage({ ok: false, error: String((err && err.message) || err) });\n }\n};", c, l;
15797
15792
  try {
15798
15793
  let e = new Blob([s], { type: "application/javascript" });
15799
15794
  c = URL.createObjectURL(e), l = new Worker(c);
@@ -15828,20 +15823,20 @@ function mv(e, t, n = 3e3) {
15828
15823
  }
15829
15824
  //#endregion
15830
15825
  //#region src/core/tools/dataOps.ts
15831
- var hv = /* @__PURE__ */ new Set([
15826
+ var mv = /* @__PURE__ */ new Set([
15832
15827
  "__proto__",
15833
15828
  "constructor",
15834
15829
  "prototype"
15835
15830
  ]);
15836
- function gv(e) {
15837
- return e.split(".").some((e) => hv.has(e));
15831
+ function hv(e) {
15832
+ return e.split(".").some((e) => mv.has(e));
15838
15833
  }
15839
- function _v(e, t) {
15840
- if (!(!t || typeof t != "object" || Array.isArray(t))) for (let n of Object.keys(t)) hv.has(n) || (e[n] = t[n]);
15834
+ function gv(e, t) {
15835
+ if (!(!t || typeof t != "object" || Array.isArray(t))) for (let n of Object.keys(t)) mv.has(n) || (e[n] = t[n]);
15841
15836
  }
15842
- function vv(e, t) {
15837
+ function _v(e, t) {
15843
15838
  if (!t) return e;
15844
- if (gv(t)) return;
15839
+ if (hv(t)) return;
15845
15840
  let n = t.split("."), r = e;
15846
15841
  for (let e of n) {
15847
15842
  if (r == null) return;
@@ -15849,8 +15844,8 @@ function vv(e, t) {
15849
15844
  }
15850
15845
  return r;
15851
15846
  }
15852
- function yv(e, t, n) {
15853
- if (!t || gv(t)) return;
15847
+ function vv(e, t, n) {
15848
+ if (!t || hv(t)) return;
15854
15849
  let r = t.split("."), i = e;
15855
15850
  for (let e = 0; e < r.length - 1; e++) {
15856
15851
  let t = r[e];
@@ -15858,8 +15853,8 @@ function yv(e, t, n) {
15858
15853
  }
15859
15854
  i[r[r.length - 1]] = n;
15860
15855
  }
15861
- function bv(e, t) {
15862
- if (!t || gv(t)) return !1;
15856
+ function yv(e, t) {
15857
+ if (!t || hv(t)) return !1;
15863
15858
  let n = t.split("."), r = e;
15864
15859
  for (let e = 0; e < n.length - 1; e++) {
15865
15860
  if (r == null) return !1;
@@ -15868,10 +15863,37 @@ function bv(e, t) {
15868
15863
  let i = n[n.length - 1];
15869
15864
  return r == null || !(i in r) ? !1 : (delete r[i], !0);
15870
15865
  }
15871
- function xv(e) {
15866
+ function bv(e) {
15872
15867
  return e === void 0 ? void 0 : JSON.parse(JSON.stringify(e));
15873
15868
  }
15874
- function Sv(e, t = Infinity) {
15869
+ function xv(e) {
15870
+ if (typeof e != "string") return { parsed: e };
15871
+ let t = e.trim();
15872
+ if (!t) return { parsed: e };
15873
+ let n = t[0] === "{" || t[0] === "[";
15874
+ try {
15875
+ return { parsed: JSON.parse(t) };
15876
+ } catch (t) {
15877
+ return n ? { parseError: t } : { parsed: e };
15878
+ }
15879
+ }
15880
+ function Sv(e, t) {
15881
+ if (typeof e != "object" || !e) return e;
15882
+ let n = new Set(t);
15883
+ if (Array.isArray(e)) return e.map((e) => Sv(e, t));
15884
+ let r = {};
15885
+ for (let t of Object.keys(e)) n.has(t) && (r[t] = e[t]);
15886
+ return r;
15887
+ }
15888
+ function Cv(e, t) {
15889
+ if (typeof e != "object" || !e) return e;
15890
+ if (t <= 0) return Array.isArray(e) ? `[...${e.length}]` : "{...}";
15891
+ if (Array.isArray(e)) return e.map((e) => Cv(e, t - 1));
15892
+ let n = {};
15893
+ for (let r of Object.keys(e)) n[r] = Cv(e[r], t - 1);
15894
+ return n;
15895
+ }
15896
+ function wv(e, t = Infinity) {
15875
15897
  let n = /* @__PURE__ */ new WeakSet(), r;
15876
15898
  try {
15877
15899
  r = JSON.stringify(e, (e, t) => {
@@ -15890,34 +15912,62 @@ function Sv(e, t = Infinity) {
15890
15912
  }
15891
15913
  return r.length > t && (r = r.slice(0, t) + `\n…[已截断,原长度 ${r.length}]`), r;
15892
15914
  }
15893
- function Cv(e) {
15894
- let t = Sv(e), n = 5381;
15915
+ function Tv(e) {
15916
+ let t = wv(e), n = 5381;
15895
15917
  for (let e = 0; e < t.length; e++) n = (n << 5) + n + t.charCodeAt(e) >>> 0;
15896
15918
  return n.toString(36);
15897
15919
  }
15898
- function wv(e, t, n, r) {
15899
- if (t === "set") return n ? (yv(e, n, r), null) : "set 操作需要 jsonPath(整体替换请用 set_data)";
15900
- if (t === "remove") return n ? (bv(e, n), null) : "remove 操作需要 jsonPath";
15920
+ function Ev(e) {
15921
+ let t = e;
15922
+ for (let e = 0; e < 5 && t && t._def; e++) {
15923
+ if (t._def.innerType) {
15924
+ t = t._def.innerType;
15925
+ continue;
15926
+ }
15927
+ break;
15928
+ }
15929
+ if (!t || !t.shape || typeof t.shape != "object") return null;
15930
+ try {
15931
+ let e = typeof t.shape == "function" ? t.shape() : t.shape;
15932
+ return Object.keys(e);
15933
+ } catch {
15934
+ return null;
15935
+ }
15936
+ }
15937
+ function Dv(e, t) {
15938
+ if (!t || !e) return !0;
15939
+ let n = e.split(".")[0];
15940
+ return t.includes(n);
15941
+ }
15942
+ function Ov(e, t) {
15943
+ if (!t || typeof e != "object" || !e || Array.isArray(e)) return e;
15944
+ let n = new Set(t), r = {};
15945
+ for (let t of Object.keys(e)) n.has(t) && (r[t] = e[t]);
15946
+ return r;
15947
+ }
15948
+ function kv(e, t, n, r) {
15949
+ if (t === "set") return n ? (vv(e, n, r), null) : "set 操作需要 jsonPath(整体替换请用 set_data)";
15950
+ if (t === "remove") return n ? (yv(e, n), null) : "remove 操作需要 jsonPath";
15901
15951
  if (t === "merge") {
15902
- let t = n ? vv(e, n) : e;
15903
- return typeof t != "object" || !t || Array.isArray(t) ? `merge 目标${n ? `(${n})` : "(根)"}不是对象` : (_v(t, r), null);
15952
+ let t = n ? _v(e, n) : e;
15953
+ return typeof t != "object" || !t || Array.isArray(t) ? `merge 目标${n ? `(${n})` : "(根)"}不是对象` : (gv(t, r), null);
15904
15954
  }
15905
- let i = n ? vv(e, n) : e;
15955
+ let i = n ? _v(e, n) : e;
15906
15956
  return Array.isArray(i) ? (Array.isArray(r) ? i.push(...r) : i.push(r), null) : `append 目标${n ? `(${n})` : "(根)"}不是数组`;
15907
15957
  }
15908
- function Tv(e, t, n, r) {
15909
- if (t === "set") yv(e, n, r);
15910
- else if (t === "remove") bv(e, n);
15911
- else if (t === "merge") _v(n ? vv(e, n) : e, r);
15958
+ function Av(e, t, n, r) {
15959
+ if (t === "set") vv(e, n, r);
15960
+ else if (t === "remove") yv(e, n);
15961
+ else if (t === "merge") gv(n ? _v(e, n) : e, r);
15912
15962
  else {
15913
- let t = n ? vv(e, n) : e;
15963
+ let t = n ? _v(e, n) : e;
15914
15964
  Array.isArray(r) ? t.push(...r) : t.push(r);
15915
15965
  }
15916
15966
  }
15917
- function Ev(e, t) {
15918
- typeof e == "object" && e && Dv(e, t);
15967
+ function jv(e, t) {
15968
+ typeof e == "object" && e && Mv(e, t);
15919
15969
  }
15920
- function Dv(e, t) {
15970
+ function Mv(e, t) {
15921
15971
  if (Array.isArray(e)) {
15922
15972
  e.length = 0, Array.isArray(t) && e.push(...t);
15923
15973
  return;
@@ -15926,51 +15976,51 @@ function Dv(e, t) {
15926
15976
  for (let t of Object.keys(e)) t in n || delete e[t];
15927
15977
  for (let t of Object.keys(n)) e[t] = n[t];
15928
15978
  }
15929
- var Ov = /* @__PURE__ */ new Set([
15979
+ var Nv = /* @__PURE__ */ new Set([
15930
15980
  "describe_data",
15931
15981
  "get_data",
15932
15982
  "set_data",
15933
15983
  "edit_data",
15934
15984
  "delete_data"
15935
- ]), kv = /* @__PURE__ */ new Set(["read", "write"]);
15936
- function Av(e, t = "simple") {
15937
- return t === "advanced" ? e : t === "minimal" ? e.filter((e) => kv.has(e.name)) : e.filter((e) => !Ov.has(e.name));
15985
+ ]), Pv = /* @__PURE__ */ new Set(["read", "write"]);
15986
+ function Fv(e, t = "simple") {
15987
+ return t === "advanced" ? e : t === "minimal" ? e.filter((e) => Pv.has(e.name)) : e.filter((e) => !Nv.has(e.name));
15938
15988
  }
15939
- function jv(e, r = {}) {
15940
- let i = e.schema, a = e.bind, o = e.description ?? "主数据对象", s = [], c = r.maxSnapshots ?? 20, l, u = r.autoLock !== !1, d = {
15989
+ function Iv(e, r = {}) {
15990
+ let i = e.schema, a = e.bind, o = e.description ?? "主数据对象", s = Ev(i), c = [], l = r.maxSnapshots ?? 20, u, d = r.autoLock !== !1, f = {
15941
15991
  get: () => ({
15942
15992
  schema: i,
15943
15993
  bind: a,
15944
15994
  description: o
15945
15995
  }),
15946
15996
  set: (e) => {
15947
- i = e.schema, a = e.bind, o = e.description ?? "主数据对象", s.length = 0, l = void 0;
15997
+ i = e.schema, a = e.bind, o = e.description ?? "主数据对象", s = Ev(i), c.length = 0, u = void 0;
15948
15998
  },
15949
15999
  update: (e) => {
15950
- a = e, s.length = 0, l = void 0;
16000
+ a = e, c.length = 0, u = void 0;
15951
16001
  }
15952
- }, f = (e) => {
16002
+ }, p = (e) => {
15953
16003
  r.onAudit?.(e);
15954
16004
  };
15955
- function p(e, t) {
15956
- let n = xv(a), r = s.length ? s[s.length - 1].id + 1 : 1;
15957
- for (s.push({
16005
+ function m(e, t) {
16006
+ let n = bv(a), r = c.length ? c[c.length - 1].id + 1 : 1;
16007
+ for (c.push({
15958
16008
  id: r,
15959
16009
  ts: Date.now(),
15960
16010
  op: e,
15961
16011
  label: t,
15962
16012
  value: n
15963
- }); s.length > c;) s.shift();
16013
+ }); c.length > l;) c.shift();
15964
16014
  return r;
15965
16015
  }
15966
- async function m(e, t, n) {
16016
+ async function h(e, t, n) {
15967
16017
  if (!t || t === "") return null;
15968
- let i = Cv(a);
16018
+ let i = Tv(a);
15969
16019
  if (i === t) return null;
15970
16020
  if (!r.onConflict) return $({
15971
16021
  code: "VERSION_CONFLICT",
15972
16022
  message: `乐观锁冲突:expectedHash=${t} 但当前 hash=${i}。主数据在你 read 之后已被修改(外部代码/其他 agent/用户手动改)。`,
15973
- hint: `重新 read 拿最新值与 hash,基于最新值修改后再写入(传新的 expectedHash)。当前值:${Sv(a, 400)}`
16023
+ hint: `重新 read 拿最新值与 hash,基于最新值修改后再写入(传新的 expectedHash)。当前值:${wv(a, 400)}`
15974
16024
  });
15975
16025
  let o = await r.onConflict({
15976
16026
  op: e,
@@ -15980,44 +16030,52 @@ function jv(e, r = {}) {
15980
16030
  expectedHash: t,
15981
16031
  snapshotId: 0
15982
16032
  });
15983
- if (o.action === "keep_external") return `已保留外部修改(未写入)。当前值:${Sv(a, 400)} (hash=${i})。请重新 read 拿最新值与 hash 再改。`;
16033
+ if (o.action === "keep_external") return `已保留外部修改(未写入)。当前值:${wv(a, 400)} (hash=${i})。请重新 read 拿最新值与 hash 再改。`;
15984
16034
  if (o.action === "restore") {
15985
- if (!s.length) return `无历史快照可回退(本次为首次操作)。当前值:${Sv(a, 400)} (hash=${i})。请重新 read 再改或选「强制覆盖」。`;
15986
- let e = s[s.length - 1];
15987
- return Ev(a, xv(e.value)), `已回退主数据到历史快照 #${e.id}[${e.op}]。当前值:${Sv(a, 400)} (hash=${Cv(a)})。请基于回退后的值重写或停止。`;
16035
+ if (!c.length) return `无历史快照可回退(本次为首次操作)。当前值:${wv(a, 400)} (hash=${i})。请重新 read 再改或选「强制覆盖」。`;
16036
+ let e = c[c.length - 1];
16037
+ return jv(a, bv(e.value)), `已回退主数据到历史快照 #${e.id}[${e.op}]。当前值:${wv(a, 400)} (hash=${Tv(a)})。请基于回退后的值重写或停止。`;
15988
16038
  }
15989
16039
  return null;
15990
16040
  }
15991
- let h = [
16041
+ let g = [
15992
16042
  n(async () => [`说明: ${o}`, "格式: 写入值需为 JSON,且通过声明的 schema 校验(校验失败时 set_data/edit_data 会返回结构化错误,含具体字段与期望类型)。"].join("\n"), {
15993
16043
  name: "describe_data",
15994
16044
  description: "获取主数据的说明与格式要求。",
15995
16045
  schema: t.object({})
15996
16046
  }),
15997
16047
  n(async ({ jsonPath: e }) => {
15998
- let t = vv(a, e || ""), n = Cv(a);
15999
- return l = n, t === void 0 ? `主数据${e ? ` @ ${e}` : ""} = (undefined) (hash=${n})` : `主数据${e ? ` @ ${e}` : ""} = ${Sv(t)} (hash=${n})`;
16048
+ let t = e || "";
16049
+ if (!Dv(t, s)) return $({
16050
+ code: "PATH_DENIED",
16051
+ message: `get_data @ "${t}" 不在 schema 声明字段内(仅 schema 声明的 key 可读)`,
16052
+ hint: "主数据仅暴露 schema 声明的字段;若需操作该字段,集成方需在 schema 中声明它"
16053
+ });
16054
+ let n = t ? _v(a, t) : a;
16055
+ t || (n = Ov(n, s));
16056
+ let r = Tv(a);
16057
+ return u = r, n === void 0 ? `主数据${t ? ` @ ${t}` : ""} = (undefined) (hash=${r})` : `主数据${t ? ` @ ${t}` : ""} = ${wv(n)} (hash=${r})`;
16000
16058
  }, {
16001
16059
  name: "get_data",
16002
16060
  description: "读取主数据的当前值(安全序列化:函数/DOM/循环引用做摘要;大结果由系统自动外存,提示用 vfs_read 回读)。返回含 hash(乐观锁):改前先 read/get 拿 hash,写入时传 expectedHash 回传,系统对比当前 hash 防\"基于过期值覆盖\"。jsonPath 可选:读整个主数据不传,读子路径传(如 components.0.text)。",
16003
16061
  schema: t.object({ jsonPath: t.string().optional().describe("相对主数据根的点号路径(如 components.0.text);不传则读整个主数据") })
16004
16062
  }),
16005
16063
  n(async ({ value: e, expectedHash: t }) => {
16006
- let n = await m("set", t || (u ? l : void 0));
16064
+ let n = await h("set", t || (d ? u : void 0));
16007
16065
  if (n !== null) return n;
16008
- let r;
16009
- if (typeof e == "string") try {
16010
- r = JSON.parse(e);
16011
- } catch (t) {
16012
- return W_("", e, t);
16013
- }
16014
- else r = e;
16015
- let o = i.safeParse(r);
16016
- return o.success ? (p("set"), typeof a == "object" && a && o.data !== null && typeof o.data == "object" && Dv(a, o.data), f({
16066
+ let r, o = xv(e);
16067
+ if (o.parseError) return U_("", e, o.parseError);
16068
+ r = o.parsed;
16069
+ let c = i.safeParse(r);
16070
+ return c.success ? typeof a != "object" || !a ? $({
16071
+ code: "LEAF_BIND",
16072
+ message: `主数据 bind 为原始类型(${a === null ? "null" : typeof a}),set_data 无法就地替换外部持有的值引用`,
16073
+ hint: "主数据 bind 必须为对象/数组(低代码主 JSON 本就是);叶子值请用对象包裹(如 {value:\"x\"})或集成方通过 sdk.setData 替换 bind"
16074
+ }) : (m("set"), c.data !== null && typeof c.data == "object" && (s ? gv(a, c.data) : Mv(a, c.data)), p({
16017
16075
  op: "set",
16018
- value: o.data,
16076
+ value: c.data,
16019
16077
  timestamp: Date.now()
16020
- }), l = Cv(a), `已设置主数据 = ${Sv(o.data, 600)} (新 hash=${Cv(a)})`) : U_("", o.error.issues);
16078
+ }), u = Tv(a), `已设置主数据 = ${wv(c.data, 600)} (新 hash=${Tv(a)})${s ? "(白名单模式:仅更新 schema 声明字段,未声明字段保留)" : ""}`) : H_("", c.error.issues);
16021
16079
  }, {
16022
16080
  name: "set_data",
16023
16081
  description: "设置主数据的值(整体替换)。value 为 JSON 对象(或 JSON 字符串),需通过 schema 校验。校验失败会返回错误而非写入。expectedHash(可选):改前 read/get 返回的 hash,传入则启用乐观锁;不传时系统自动用你最后一次读到的 hash 比对(autoLock,默认开)。大对象/数组强烈建议改用 edit_data 增量 patch。",
@@ -16028,45 +16086,47 @@ function jv(e, r = {}) {
16028
16086
  }),
16029
16087
  n(async ({ op: e, jsonPath: t, value: n, expectedHash: r }) => {
16030
16088
  let o = t || "";
16031
- if (gv(o)) return $({
16089
+ if (hv(o)) return $({
16032
16090
  code: "PATH_UNSAFE",
16033
16091
  message: `jsonPath "${o}" 含非法段(__proto__/constructor/prototype)`,
16034
16092
  hint: "使用正常的属性路径,如 components.0.text(数组索引用数字)"
16035
16093
  });
16036
- let s = await m("edit", r || (u ? l : void 0));
16037
- if (s !== null) return s;
16094
+ if (!Dv(o, s)) return $({
16095
+ code: "PATH_DENIED",
16096
+ message: `edit_data @ "${o}" 不在 schema 声明字段内`,
16097
+ hint: "仅 schema 声明的 key 可写;若需操作该字段,集成方需在 schema 中声明它"
16098
+ });
16099
+ let c = await h("edit", r || (d ? u : void 0));
16100
+ if (c !== null) return c;
16038
16101
  if (typeof a != "object" || !a) return $({
16039
16102
  code: "NOT_OBJECT",
16040
16103
  message: `edit 仅适用于对象/数组主数据,当前是 ${a === void 0 ? "undefined" : typeof a}`,
16041
16104
  hint: "叶子(原始类型)请用 set_data 整体设置"
16042
16105
  });
16043
- let c;
16106
+ let l;
16044
16107
  if (e !== "remove") {
16045
16108
  if (n === void 0 || n === "") return $({
16046
16109
  code: "MISSING_VALUE",
16047
16110
  message: `${e} 操作需要 value`,
16048
16111
  hint: `op 为 ${e} 时 value 必填;删除请用 op:'remove'`
16049
16112
  });
16050
- if (typeof n == "string") try {
16051
- c = JSON.parse(n);
16052
- } catch (e) {
16053
- return W_("", n, e);
16054
- }
16055
- else c = n;
16113
+ let t = xv(n);
16114
+ if (t.parseError) return U_("", n, t.parseError);
16115
+ l = t.parsed;
16056
16116
  }
16057
- let d = xv(a), h = wv(d, e, o, c);
16058
- if (h) return $({
16117
+ let f = bv(a), g = kv(f, e, o, l);
16118
+ if (g) return $({
16059
16119
  code: "PATCH_FAILED",
16060
- message: h,
16120
+ message: g,
16061
16121
  hint: "检查 op 与目标类型:merge 需对象,append 需数组;jsonPath 指向需存在"
16062
16122
  });
16063
- let g = i.safeParse(d);
16064
- return g.success ? (p("edit"), Tv(a, e, o, c), f({
16123
+ let _ = i.safeParse(f);
16124
+ return _.success ? (m("edit"), Av(a, e, o, l), p({
16065
16125
  op: "edit",
16066
16126
  detail: `${e}${o ? "@" + o : ""}`,
16067
- value: c,
16127
+ value: l,
16068
16128
  timestamp: Date.now()
16069
- }), l = Cv(a), `已 edit 主数据(${e}${o ? " @ " + o : ""})。当前值:${Sv(a, 600)} (新 hash=${Cv(a)})`) : U_("", g.error.issues);
16129
+ }), u = Tv(a), `已 edit 主数据(${e}${o ? " @ " + o : ""})。当前值:${wv(a, 600)} (新 hash=${Tv(a)})`) : H_("", _.error.issues);
16070
16130
  }, {
16071
16131
  name: "edit_data",
16072
16132
  description: "增量编辑主数据(对象/数组),只发改动的 patch,无需重传整个大对象。op:set(在 jsonPath 设值)、remove(删 jsonPath)、merge(把 value 合并到 jsonPath 指向的对象,默认根)、append(把 value 追加到 jsonPath 指向的数组,默认根)。jsonPath 为相对主数据根的点号路径(数组索引用数字,如 components.0.text);value 为 JSON 对象(推荐直传)或 JSON 字符串。整体仍经 schema 校验,失败不写入。expectedHash(可选):改前 read/get 返回的 hash;不传时自动用你最后读到的 hash(autoLock,默认开)防\"基于过期值覆盖\"。",
@@ -16088,20 +16148,25 @@ function jv(e, r = {}) {
16088
16148
  message: "delete_data 需要 jsonPath 指定要删的子路径(主数据整体不可删,用 set_data 整体替换)",
16089
16149
  hint: "如 jsonPath:\"components.0\" 删数组首项"
16090
16150
  });
16091
- if (gv(e)) return $({
16151
+ if (hv(e)) return $({
16092
16152
  code: "PATH_UNSAFE",
16093
16153
  message: `jsonPath "${e}" 含非法段`,
16094
16154
  hint: "使用正常属性路径"
16095
16155
  });
16096
- let n = await m("delete", t || (u ? l : void 0));
16156
+ if (!Dv(e, s)) return $({
16157
+ code: "PATH_DENIED",
16158
+ message: `delete_data @ "${e}" 不在 schema 声明字段内`,
16159
+ hint: "仅 schema 声明的 key 可删"
16160
+ });
16161
+ let n = await h("delete", t || (d ? u : void 0));
16097
16162
  if (n !== null) return n;
16098
- p("delete");
16099
- let r = bv(a, e);
16100
- return f({
16163
+ m("delete");
16164
+ let r = yv(a, e);
16165
+ return p({
16101
16166
  op: "delete",
16102
16167
  detail: e,
16103
16168
  timestamp: Date.now()
16104
- }), l = Cv(a), r ? `已删除主数据 @ ${e}` : `主数据 @ ${e} 不存在(无需删除)`;
16169
+ }), u = Tv(a), r ? `已删除主数据 @ ${e}` : `主数据 @ ${e} 不存在(无需删除)`;
16105
16170
  }, {
16106
16171
  name: "delete_data",
16107
16172
  description: "删除主数据的某个子路径(jsonPath)。主数据整体不可删(用 set_data 整体替换)。expectedHash(可选):改前 read/get 返回的 hash;不传时自动用你最后读到的 hash(autoLock,默认开)防\"基于过期值删除\"。",
@@ -16110,45 +16175,45 @@ function jv(e, r = {}) {
16110
16175
  expectedHash: t.string().optional().describe("乐观锁:改前 read/get 返回的 hash;传入则校验,不一致拒绝删除防覆盖")
16111
16176
  })
16112
16177
  }),
16113
- n(async ({ label: e }) => `已为主数据创建快照 #${p("manual", e)}${e ? `(${e})` : ""}。可用 list_data_snapshots 查看、restore_data 回退。`, {
16178
+ n(async ({ label: e }) => `已为主数据创建快照 #${m("manual", e)}${e ? `(${e})` : ""}。可用 list_data_snapshots 查看、restore_data 回退。`, {
16114
16179
  name: "snapshot_data",
16115
16180
  description: "为主数据手动创建一个命名快照(检查点)。set/edit/delete 也会自动存快照。",
16116
16181
  schema: t.object({ label: t.string().optional().describe("可选的快照标签,便于识别") })
16117
16182
  }),
16118
16183
  n(async () => {
16119
- if (!s.length) return "无快照。set/edit/delete 会自动存快照,也可用 snapshot_data 手动创建检查点。";
16120
- let e = s.map((e) => {
16184
+ if (!c.length) return "无快照。set/edit/delete 会自动存快照,也可用 snapshot_data 手动创建检查点。";
16185
+ let e = c.map((e) => {
16121
16186
  let t = JSON.stringify(e.value ?? "").length, n = new Date(e.ts).toLocaleTimeString("zh-CN", { hour12: !1 });
16122
16187
  return ` #${e.id} [${e.op}]${e.label ? ` "${e.label}"` : ""} ${n} 修改前≈${t}字符`;
16123
16188
  });
16124
- return `主数据快照(共 ${s.length} 条):\n${e.join("\n")}`;
16189
+ return `主数据快照(共 ${c.length} 条):\n${e.join("\n")}`;
16125
16190
  }, {
16126
16191
  name: "list_data_snapshots",
16127
16192
  description: "列出主数据的快照时间线(序号、操作类型、标签、大小)。",
16128
16193
  schema: t.object({})
16129
16194
  }),
16130
16195
  n(async ({ id: e }) => {
16131
- if (!s.length) return $({
16196
+ if (!c.length) return $({
16132
16197
  code: "NO_SNAPSHOT",
16133
16198
  message: "无快照可回退",
16134
16199
  hint: "set/edit/delete 会自动存快照;也可先 snapshot_data 手动创建检查点"
16135
16200
  });
16136
- let t = e === void 0 ? s[s.length - 1] : s.find((t) => t.id === e);
16201
+ let t = e === void 0 ? c[c.length - 1] : c.find((t) => t.id === e);
16137
16202
  if (!t) return $({
16138
16203
  code: "SNAPSHOT_NOT_FOUND",
16139
16204
  message: `未找到快照 #${e}`,
16140
16205
  hint: "用 list_data_snapshots 查看可用快照序号"
16141
16206
  });
16142
16207
  let n = i.safeParse(t.value);
16143
- return n.success ? (Ev(a, xv(t.value)), f({
16208
+ return n.success ? (jv(a, bv(t.value)), p({
16144
16209
  op: "restore",
16145
16210
  detail: `#${t.id}`,
16146
16211
  timestamp: Date.now()
16147
- }), l = Cv(a), `已回退主数据到快照 #${t.id}[${t.op}]${t.label ? `(${t.label})` : ""}。`) : $({
16212
+ }), u = Tv(a), `已回退主数据到快照 #${t.id}[${t.op}]${t.label ? `(${t.label})` : ""}。`) : $({
16148
16213
  code: "SNAPSHOT_SCHEMA_INVALID",
16149
16214
  message: `快照 #${t.id} 的值不符合当前 schema,无法回退`,
16150
16215
  hint: "schema 可能已变更;该快照已过期,选其他快照或重新设置",
16151
- details: H_(n.error.issues)
16216
+ details: V_(n.error.issues)
16152
16217
  });
16153
16218
  }, {
16154
16219
  name: "restore_data",
@@ -16161,9 +16226,9 @@ function jv(e, r = {}) {
16161
16226
  message: `主数据不是对象/数组,无法查询(当前为 ${a === void 0 ? "undefined" : typeof a})`,
16162
16227
  hint: "query 仅适用于对象/数组;叶子用 get_data 读"
16163
16228
  });
16164
- let n;
16229
+ let n = s ? Ov(a, s) : a, r;
16165
16230
  try {
16166
- n = lv(a, e);
16231
+ r = cv(n, e);
16167
16232
  } catch (t) {
16168
16233
  return $({
16169
16234
  code: "JSONPATH_SYNTAX",
@@ -16172,8 +16237,8 @@ function jv(e, r = {}) {
16172
16237
  details: { expr: e }
16173
16238
  });
16174
16239
  }
16175
- let r = t ?? 50, i = n.slice(0, r), o = i.map((e) => `{"path":${JSON.stringify(e.path)},"index":${e.index === void 0 ? "null" : e.index},"value":${Sv(e.value)}}`);
16176
- return `{"matched":${n.length},"returned":${i.length},"truncated":${n.length > r},"results":[${o.join(",")}]}`;
16240
+ let i = t ?? 50, o = r.slice(0, i), c = o.map((e) => `{"path":${JSON.stringify(e.path)},"index":${e.index === void 0 ? "null" : e.index},"value":${wv(e.value)}}`);
16241
+ return `{"matched":${r.length},"returned":${o.length},"truncated":${r.length > i},"results":[${c.join(",")}]}`;
16177
16242
  }, {
16178
16243
  name: "query_data",
16179
16244
  description: "用 JSONPath 表达式对主数据做结构化查询(只读,无副作用)。语法子集:$ 根、.key、[n]、[\"key\"]、[*] 通配、[?(filter)] 过滤、..key 递归找后代、..* 全后代。过滤表达式:@.field op literal(op:==/!=/</<=/>/>=),&&/||/() 连接;@ 指当前元素。注意过滤作用于\"当前节点的子元素数组\",若主数据是对象需先点出数组字段再过滤,如 $.components[?(@.type==\"card\" && @.price<100)]。返回匹配元素的 path(相对主数据根,数组索引可作后续 edit_data 的 jsonPath)+ index(若父为数组)+ value。适合在大数组里按条件筛选元素,定位后再用 edit_data 增量改。",
@@ -16188,13 +16253,13 @@ function jv(e, r = {}) {
16188
16253
  message: "主数据为空,无可搜索内容"
16189
16254
  });
16190
16255
  try {
16191
- let o = dv(a, e, {
16256
+ let o = uv(s ? Ov(a, s) : a, e, {
16192
16257
  mode: t,
16193
16258
  fuzzyThreshold: n,
16194
16259
  matchKey: r,
16195
16260
  limit: i ?? 50
16196
16261
  });
16197
- return Sv({
16262
+ return wv({
16198
16263
  matched: o.length,
16199
16264
  results: o
16200
16265
  });
@@ -16227,7 +16292,7 @@ function jv(e, r = {}) {
16227
16292
  message: `脚本过长(${e.length} 字符,上限 8000)`,
16228
16293
  hint: "精简脚本;复杂逻辑可分步(先 query 探查再 transform 改),或拆成多次 eval"
16229
16294
  });
16230
- let n = await mv(xv(a), e, 3e3);
16295
+ let n = await pv(bv(s ? Ov(a, s) : a), e, 3e3);
16231
16296
  if (!n.ok) {
16232
16297
  let t = /超时/.test(n.error || "");
16233
16298
  return $({
@@ -16241,143 +16306,255 @@ function jv(e, r = {}) {
16241
16306
  });
16242
16307
  }
16243
16308
  if (t === "transform") {
16244
- let e = i.safeParse(n.result);
16245
- return e.success ? (p("edit", "eval_transform"), typeof a == "object" && a && e.data !== null && typeof e.data == "object" && Dv(a, e.data), f({
16309
+ let e = n.result;
16310
+ if (e && typeof e == "object" && !Array.isArray(e) && "patches" in e && Array.isArray(e.patches)) {
16311
+ if (typeof a != "object" || !a) return $({
16312
+ code: "LEAF_BIND",
16313
+ message: `主数据 bind 为原始类型(${a === null ? "null" : typeof a}),eval transform(patches) 无法就地替换`,
16314
+ hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹或集成方通过 sdk.setData 替换 bind"
16315
+ });
16316
+ let t = e.patches, r = bv(a), o = [];
16317
+ for (let e = 0; e < t.length; e++) {
16318
+ let n = t[e], i = n.jsonPath || "";
16319
+ if (hv(i)) return $({
16320
+ code: "PATH_UNSAFE",
16321
+ message: `patches[${e}] jsonPath "${i}" 含非法段`,
16322
+ hint: "使用正常属性路径"
16323
+ });
16324
+ if (!Dv(i, s)) return $({
16325
+ code: "PATH_DENIED",
16326
+ message: `patches[${e}] @ "${i}" 不在 schema 声明字段内`,
16327
+ hint: "仅 schema 声明的 key 可写"
16328
+ });
16329
+ let a = n.op, c;
16330
+ if (a !== "remove") {
16331
+ if (n.value === void 0 || n.value === "") return $({
16332
+ code: "MISSING_VALUE",
16333
+ message: `patches[${e}] ${a} 操作需要 value`,
16334
+ hint: `op 为 ${a} 时 value 必填`
16335
+ });
16336
+ let t = xv(n.value);
16337
+ if (t.parseError) return U_(`patches[${e}]`, n.value, t.parseError);
16338
+ c = t.parsed;
16339
+ }
16340
+ let l = kv(r, a, i, c);
16341
+ if (l) return $({
16342
+ code: "PATCH_FAILED",
16343
+ message: `patches[${e}]: ${l}`,
16344
+ hint: "检查 op 与目标类型:merge 需对象,append 需数组"
16345
+ });
16346
+ o.push({
16347
+ op: a,
16348
+ jp: i,
16349
+ value: c
16350
+ });
16351
+ }
16352
+ let c = i.safeParse(r);
16353
+ if (!c.success) return $({
16354
+ code: "SCHEMA_INVALID",
16355
+ message: "脚本 patches 应用后整体校验失败,未写入",
16356
+ hint: "确认 patches 合并后整体仍符合 schema",
16357
+ details: V_(c.error.issues)
16358
+ });
16359
+ m("edit", "eval_transform");
16360
+ for (let e of o) Av(a, e.op, e.jp, e.value);
16361
+ return p({
16362
+ op: "edit",
16363
+ detail: `eval_transform(${o.length} patches)`,
16364
+ timestamp: Date.now()
16365
+ }), u = Tv(a), `已通过脚本 transform(patches) 更新主数据(${o.length} 个 patch,耗时 ${n.elapsedMs}ms)。当前值: ${wv(a, 600)}`;
16366
+ }
16367
+ let t = i.safeParse(e);
16368
+ return t.success ? typeof a != "object" || !a ? $({
16369
+ code: "LEAF_BIND",
16370
+ message: `主数据 bind 为原始类型(${a === null ? "null" : typeof a}),eval transform 无法就地替换外部持有的值引用`,
16371
+ hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹或集成方通过 sdk.setData 替换 bind"
16372
+ }) : (m("edit", "eval_transform"), t.data !== null && typeof t.data == "object" && (s ? gv(a, t.data) : Mv(a, t.data)), p({
16246
16373
  op: "edit",
16247
16374
  detail: "eval_transform",
16248
16375
  timestamp: Date.now()
16249
- }), l = Cv(a), `已通过脚本 transform 更新主数据(耗时 ${n.elapsedMs}ms)。当前值: ${Sv(a, 600)}`) : $({
16376
+ }), u = Tv(a), `已通过脚本 transform 更新主数据(耗时 ${n.elapsedMs}ms)。当前值: ${wv(a, 600)}`) : $({
16250
16377
  code: "SCHEMA_INVALID",
16251
16378
  message: "脚本返回值校验失败,未写入(transform 模式要求返回主数据的完整新值且符合 schema)",
16252
- hint: "确认脚本 return 了完整新值(非部分);按 describe_data() 查看格式",
16253
- details: H_(e.error.issues)
16379
+ hint: "确认脚本 return 了完整新值(非部分);或返回 {patches:[...]} 走增量模式;按 describe_data() 查看格式",
16380
+ details: V_(t.error.issues)
16254
16381
  });
16255
16382
  }
16256
- return Sv({
16383
+ return wv({
16257
16384
  ok: !0,
16258
16385
  result: n.result,
16259
16386
  elapsedMs: n.elapsedMs
16260
16387
  });
16261
16388
  }, {
16262
16389
  name: "eval_script",
16263
- description: "在隔离的 Web Worker 沙箱里对主数据跑自定义 JS 脚本(无 window/document 访问,fetch/XHR/WebSocket/importScripts 已禁用,超时 3s 可终止)。脚本以 `data` 为入参(主数据的深拷贝),返回值即结果。mode:query(默认,只读,把返回值回给 LLM,适合过滤/映射/聚合/统计大数组)、transform(把返回值作为主数据的新整体值,经 schema 校验后就地落地,适合批量重写)。注意:transform 需返回完整新值;query 不改主数据。脚本内可用标准 JS(Array/Object/JSON/Math 等)与 async/await。",
16390
+ description: "在隔离的 Web Worker 沙箱里对主数据跑自定义 JS 脚本(无 window/document 访问,fetch/XHR/WebSocket/importScripts 已禁用,超时 3s 可终止)。脚本以 `data` 为入参(主数据的深拷贝),返回值即结果。mode:query(默认,只读,把返回值回给 LLM,适合过滤/映射/聚合/统计大数组)、transform(把返回值作为主数据的新整体值,经 schema 校验后就地落地,适合批量重写)transform 支持两种返回形式:① 完整新值(整体替换);② {patches:[{op,jsonPath,value},...]} 增量 patch(按 patch 应用,避免大对象整体重传,任一 patch 失败或整体 schema 校验失败则不写入)。query 不改主数据。脚本内可用标准 JS(Array/Object/JSON/Math 等)与 async/await。",
16264
16391
  schema: t.object({
16265
16392
  script: t.string().describe("JS 脚本体,如 data.filter(c=>c.stock>0).map(c=>c.id);入参名 data;末尾表达式或 return 即返回值"),
16266
16393
  mode: t.enum(["query", "transform"]).optional().describe("query=只读返回结果(默认),transform=校验后落地为新值")
16267
16394
  })
16268
16395
  }),
16269
- n(async ({ jsonPath: e }) => {
16270
- let t = e ? vv(a, e) : a;
16396
+ n(async ({ jsonPath: e, fields: t, depth: n }) => {
16397
+ let i = e || "";
16398
+ if (!Dv(i, s)) return $({
16399
+ code: "PATH_DENIED",
16400
+ message: `read @ "${i}" 不在 schema 声明字段内`,
16401
+ hint: "主数据仅暴露 schema 声明的字段;若需操作该字段,集成方需在 schema 中声明它"
16402
+ });
16403
+ let c = i ? _v(a, i) : a;
16404
+ i || (c = Ov(c, s));
16405
+ let l = c;
16271
16406
  if (r.interceptors?.read) try {
16272
- t = r.interceptors.read(t);
16407
+ l = r.interceptors.read(l);
16273
16408
  } catch (e) {
16274
16409
  return $({
16275
16410
  code: "READ_INTERCEPT",
16276
16411
  message: `read 拦截器抛错: ${e.message}`
16277
16412
  });
16278
16413
  }
16279
- let n = Cv(a);
16280
- l = n;
16281
- let i = e ? "" : `主数据说明: ${o}\n格式: 写入值需为 JSON,且通过声明的 schema 校验(校验失败时 write 会返回结构化错误)。\n\n`;
16282
- return t === void 0 ? `${i}主数据${e ? ` @ ${e}` : ""} = (undefined) (hash=${n})` : `${i}主数据${e ? ` @ ${e}` : ""} = ${Sv(t)} (hash=${n})`;
16414
+ t && t.length && (l = Sv(l, t)), n != null && (l = Cv(l, n));
16415
+ let d = Tv(a);
16416
+ u = d;
16417
+ let f = t && t.length ? `(字段裁剪:${t.join(",")})` : "", p = n == null ? "" : `(深度≤${n})`, m = f || p ? ` ${f}${p}` : "", h = e ? "" : `主数据说明: ${o}\n格式: 写入值需为 JSON,且通过声明的 schema 校验(校验失败时 write 会返回结构化错误)。\n\n`;
16418
+ return l === void 0 ? `${h}主数据${e ? ` @ ${e}` : ""}${m} = (undefined) (hash=${d})` : `${h}主数据${e ? ` @ ${e}` : ""}${m} = ${wv(l)} (hash=${d})`;
16283
16419
  }, {
16284
16420
  name: "read",
16285
- description: "读取主数据(高层入口,合并 describe/get)。不传 jsonPath → 返回主数据说明 + 格式提示;传 jsonPath → 返回该子路径当前值 + hash。hash 用于乐观锁(默认 autoLock,write 时自动比对,无需手动传)。集成方可能经 read 拦截器对返回值脱敏/派生。",
16286
- schema: t.object({ jsonPath: t.string().optional().describe("要读的子路径(相对主数据根,如 components.0.text);不传则读整个主数据并返回说明") })
16421
+ description: "读取主数据(高层入口,合并 describe/get)。不传 jsonPath → 返回主数据说明 + 格式提示;传 jsonPath → 返回该子路径当前值 + hash。hash 用于乐观锁(默认 autoLock,write 时自动比对,无需手动传)。fields(可选):字段裁剪,只返回对象(及数组元素)的指定字段,减少大对象返回体积;depth(可选):嵌套深度限制(0=只根占位,1=根+子,递归截断深层),减少深层结构返回体积。两者可组合,先裁字段再截深度。集成方可能经 read 拦截器对返回值脱敏/派生。",
16422
+ schema: t.object({
16423
+ jsonPath: t.string().optional().describe("要读的子路径(相对主数据根,如 components.0.text);不传则读整个主数据并返回说明"),
16424
+ fields: t.array(t.string()).optional().describe("字段裁剪:只返回指定字段(对对象/数组元素投影),减少返回体积,如 [\"id\",\"title\"]"),
16425
+ depth: t.number().int().min(0).optional().describe("嵌套深度限制:0=只根占位,1=根+子,递归到 depth 层后用 {...}/[...] 占位截断,减少深层返回体积")
16426
+ })
16287
16427
  }),
16288
- n(async ({ value: e, patch: t, del: n }) => {
16289
- let o = "set";
16290
- n ? o = "delete" : t && (o = "edit");
16291
- let s = e;
16428
+ n(async ({ value: e, patch: t, patches: n, del: o }) => {
16429
+ let c = "set";
16430
+ o ? c = "delete" : (n && n.length || t) && (c = "edit");
16431
+ let l = e, f;
16292
16432
  if (r.interceptors?.write) try {
16293
- let n = r.interceptors.write(t ?? e, a);
16294
- if (n && typeof n == "object" && "error" in n) return $({
16433
+ let i = c === "delete" ? {
16434
+ del: !0,
16435
+ jsonPath: t?.jsonPath
16436
+ } : c === "edit" && n && n.length ? { patches: n } : c === "edit" ? {
16437
+ op: t.op,
16438
+ jsonPath: t.jsonPath || "",
16439
+ value: e
16440
+ } : e, o = r.interceptors.write(i, a);
16441
+ if (o && typeof o == "object" && "error" in o) return $({
16295
16442
  code: "WRITE_INTERCEPT",
16296
- message: `write 拦截器拒绝: ${n.error}`
16443
+ message: `write 拦截器拒绝: ${o.error}`
16297
16444
  });
16298
- o === "edit" ? t = n : s = n;
16445
+ c === "delete" || (c === "edit" && n && n.length ? f = o && Array.isArray(o) ? o : n : l = o);
16299
16446
  } catch (e) {
16300
16447
  return $({
16301
16448
  code: "WRITE_INTERCEPT",
16302
16449
  message: `write 拦截器抛错: ${e.message}`
16303
16450
  });
16304
16451
  }
16305
- let c = u ? l : void 0;
16306
- if (o === "delete") {
16452
+ let g = d ? u : void 0;
16453
+ if (c === "delete") {
16307
16454
  if (!t?.jsonPath) return $({
16308
16455
  code: "MISSING_VALUE",
16309
16456
  message: "delete 需要 patch.jsonPath 指定要删的子路径(主数据整体不可删,用 write(value) 整体替换)",
16310
16457
  hint: "如 patch:{jsonPath:\"components.0\"}, del:true"
16311
16458
  });
16312
- if (gv(t.jsonPath)) return $({
16459
+ if (hv(t.jsonPath)) return $({
16313
16460
  code: "PATH_UNSAFE",
16314
16461
  message: `jsonPath "${t.jsonPath}" 含非法段`,
16315
16462
  hint: "使用正常属性路径"
16316
16463
  });
16317
- let e = await m("delete", c);
16464
+ if (!Dv(t.jsonPath, s)) return $({
16465
+ code: "PATH_DENIED",
16466
+ message: `write delete @ "${t.jsonPath}" 不在 schema 声明字段内`,
16467
+ hint: "仅 schema 声明的 key 可删"
16468
+ });
16469
+ let e = await h("delete", g);
16318
16470
  if (e !== null) return e;
16319
- p("delete");
16320
- let n = bv(a, t.jsonPath);
16321
- return f({
16471
+ m("delete");
16472
+ let n = yv(a, t.jsonPath);
16473
+ return p({
16322
16474
  op: "delete",
16323
16475
  detail: t.jsonPath,
16324
16476
  timestamp: Date.now()
16325
- }), l = Cv(a), n ? `已删除主数据 @ ${t.jsonPath}` : `主数据 @ ${t.jsonPath} 不存在(无需删除)`;
16326
- }
16327
- let d;
16328
- if (typeof s == "string") try {
16329
- d = JSON.parse(s);
16330
- } catch {
16331
- d = s;
16477
+ }), u = Tv(a), n ? `已删除主数据 @ ${t.jsonPath}` : `主数据 @ ${t.jsonPath} 不存在(无需删除)`;
16332
16478
  }
16333
- else d = s;
16334
- if (o === "edit") {
16335
- let e = t.jsonPath || "";
16336
- if (gv(e)) return $({
16337
- code: "PATH_UNSAFE",
16338
- message: `jsonPath "${e}" 含非法段`,
16339
- hint: "使用正常属性路径,如 components.0.text"
16340
- });
16479
+ if (c === "edit") {
16341
16480
  if (typeof a != "object" || !a) return $({
16342
16481
  code: "NOT_OBJECT",
16343
16482
  message: `edit 仅适用于对象/数组主数据,当前是 ${a === void 0 ? "undefined" : typeof a}`,
16344
16483
  hint: "叶子用 write(value) 整体设置"
16345
16484
  });
16346
- let n = await m("edit", c);
16347
- if (n !== null) return n;
16348
- let r = t.op;
16349
- if (r !== "remove" && (d === void 0 || d === "")) return $({
16350
- code: "MISSING_VALUE",
16351
- message: `${r} 操作需要 value`,
16352
- hint: `op ${r} value 必填;删除请用 del:true`
16353
- });
16354
- let o = xv(a), s = wv(o, r, e, d);
16355
- if (s) return $({
16356
- code: "PATCH_FAILED",
16357
- message: s,
16358
- hint: "检查 op 与目标类型:merge 需对象,append 需数组"
16359
- });
16360
- let u = i.safeParse(o);
16361
- return u.success ? (p("edit"), Tv(a, r, e, d), f({
16485
+ let e = await h("edit", g);
16486
+ if (e !== null) return e;
16487
+ let r = f || (n && n.length ? n : [{
16488
+ op: t.op,
16489
+ jsonPath: t.jsonPath || "",
16490
+ value: l
16491
+ }]), o = bv(a), c = [];
16492
+ for (let e = 0; e < r.length; e++) {
16493
+ let t = r[e], n = t.jsonPath || "";
16494
+ if (hv(n)) return $({
16495
+ code: "PATH_UNSAFE",
16496
+ message: `patches[${e}] jsonPath "${n}" 含非法段`,
16497
+ hint: "使用正常属性路径,如 components.0.text"
16498
+ });
16499
+ if (!Dv(n, s)) return $({
16500
+ code: "PATH_DENIED",
16501
+ message: `patches[${e}] @ "${n}" 不在 schema 声明字段内`,
16502
+ hint: "仅 schema 声明的 key 可写"
16503
+ });
16504
+ let i = t.op, a;
16505
+ if (i !== "remove") {
16506
+ if (t.value === void 0 || t.value === "") return $({
16507
+ code: "MISSING_VALUE",
16508
+ message: `patches[${e}] ${i} 操作需要 value`,
16509
+ hint: `op 为 ${i} 时 value 必填;删除请用 op:'remove'`
16510
+ });
16511
+ let n = xv(t.value);
16512
+ if (n.parseError) return U_(`patches[${e}]`, t.value, n.parseError);
16513
+ a = n.parsed;
16514
+ }
16515
+ let l = kv(o, i, n, a);
16516
+ if (l) return $({
16517
+ code: "PATCH_FAILED",
16518
+ message: `patches[${e}]: ${l}`,
16519
+ hint: "检查 op 与目标类型:merge 需对象,append 需数组"
16520
+ });
16521
+ c.push({
16522
+ op: i,
16523
+ jp: n,
16524
+ value: a
16525
+ });
16526
+ }
16527
+ let d = i.safeParse(o);
16528
+ if (!d.success) return H_("", d.error.issues);
16529
+ m("edit");
16530
+ for (let e of c) Av(a, e.op, e.jp, e.value);
16531
+ return p({
16362
16532
  op: "edit",
16363
- detail: `${r}${e ? "@" + e : ""}`,
16364
- value: d,
16533
+ detail: `${c.length} 个 patch${c.length > 1 ? "(批量)" : ""}`,
16534
+ value: c.map((e) => `${e.op}@${e.jp}`),
16365
16535
  timestamp: Date.now()
16366
- }), l = Cv(a), `已 write(edit) 主数据(${r}${e ? " @ " + e : ""})。当前值:${Sv(a, 600)} (新 hash=${Cv(a)})`) : U_("", u.error.issues);
16536
+ }), u = Tv(a), `已 write(edit) 主数据(${c.length} patch)。当前值:${wv(a, 600)} (新 hash=${Tv(a)})`;
16367
16537
  }
16368
- let h = await m("set", c);
16369
- if (h !== null) return h;
16370
- let g = i.safeParse(d);
16371
- return g.success ? (p("set"), typeof a == "object" && a && g.data !== null && typeof g.data == "object" && Dv(a, g.data), f({
16538
+ let _, v = xv(l);
16539
+ if (v.parseError) return U_("", l, v.parseError);
16540
+ _ = v.parsed;
16541
+ let y = await h("set", g);
16542
+ if (y !== null) return y;
16543
+ let b = i.safeParse(_);
16544
+ return b.success ? typeof a != "object" || !a ? $({
16545
+ code: "LEAF_BIND",
16546
+ message: `主数据 bind 为原始类型(${a === null ? "null" : typeof a}),write(set) 无法就地替换外部持有的值引用`,
16547
+ hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹(如 {value:\"x\"})或集成方通过 sdk.setData 替换 bind"
16548
+ }) : (m("set"), b.data !== null && typeof b.data == "object" && (s ? gv(a, b.data) : Mv(a, b.data)), p({
16372
16549
  op: "set",
16373
- value: g.data,
16550
+ value: b.data,
16374
16551
  timestamp: Date.now()
16375
- }), l = Cv(a), `已 write(set) 主数据 = ${Sv(g.data, 600)} (新 hash=${Cv(a)})`) : U_("", g.error.issues);
16552
+ }), u = Tv(a), `已 write(set) 主数据 = ${wv(b.data, 600)} (新 hash=${Tv(a)})${s ? "(白名单模式:仅更新 schema 声明字段,未声明字段保留)" : ""}`) : H_("", b.error.issues);
16376
16553
  }, {
16377
16554
  name: "write",
16378
- description: "写入主数据(高层入口,合并 set/edit/delete + 自动乐观锁 + 自动快照)。三种意图:① 整体替换 write({ value }) value 为 JSON 对象(推荐)或字符串;② 增量 patch write({ value, patch:{op,jsonPath} }) op=set/remove/merge/append,jsonPath 相对主数据根(如 components.0.text);③ 删除 write({ patch:{jsonPath}, del:true })。写入自动经 schema 校验(失败不写)+ 自动存快照(可 restore_data 回退)+ 自动乐观锁(autoLock,用你最后 read 到的 hash 比对,冲突则 VERSION_CONFLICT)。集成方可能经 write 拦截器校验/转换/拒绝。",
16555
+ description: "写入主数据(高层入口,合并 set/edit/delete + 自动乐观锁 + 自动快照)。四种意图:① 整体替换 write({ value }) value 为 JSON 对象(推荐)或字符串;② 单个增量 patch write({ value, patch:{op,jsonPath} }) op=set/remove/merge/append,jsonPath 相对主数据根(如 components.0.text),value 作为该 patch 的值;③ 批量增量 write({ patches:[{op,jsonPath,value},...] }) 一次原子应用多个 patch(任一失败整体不写入,适合一次改多处);④ 删除 write({ patch:{jsonPath}, del:true })。写入自动经 schema 校验(失败不写)+ 自动存快照(可 restore_data 回退)+ 自动乐观锁(autoLock,用你最后 read 到的 hash 比对,冲突则 VERSION_CONFLICT)。集成方可能经 write 拦截器校验/转换/拒绝(批量模式拦截器收到 {patches},返回新 patches 数组或 {error})。",
16379
16556
  schema: t.object({
16380
- value: t.unknown().optional().describe("JSON 对象(推荐,如 {title:\"x\"})或 JSON 字符串;set/patch 的 set/merge/append 必填"),
16557
+ value: t.unknown().optional().describe("JSON 对象(推荐,如 {title:\"x\"})或 JSON 字符串;set 整体或单个 patch 的 set/merge/append 必填"),
16381
16558
  patch: t.object({
16382
16559
  op: t.enum([
16383
16560
  "set",
@@ -16386,22 +16563,32 @@ function jv(e, r = {}) {
16386
16563
  "append"
16387
16564
  ]),
16388
16565
  jsonPath: t.string().optional().describe("相对主数据根的点号路径(如 components.0.text);set/remove 必填,merge/append 不填则作用于根")
16389
- }).optional().describe("增量编辑;传 patch 则走 edit 语义,否则整体 set;删除用 del:true patch.jsonPath 指定子路径"),
16566
+ }).optional().describe("单个增量编辑;传 patch(无 patches)走单 patch edit 语义,value 作为该 patch value"),
16567
+ patches: t.array(t.object({
16568
+ op: t.enum([
16569
+ "set",
16570
+ "remove",
16571
+ "merge",
16572
+ "append"
16573
+ ]),
16574
+ jsonPath: t.string().optional().describe("相对主数据根的点号路径;set/remove 必填,merge/append 不填则作用于根"),
16575
+ value: t.unknown().optional().describe("JSON 值(推荐直传)或 JSON 字符串;set/merge/append 必填,remove 不需")
16576
+ })).optional().describe("批量增量编辑:一次原子应用多个 patch(任一失败则整体不写入,clone 试跑全部 + schema 校验通过才落 live)。适合一次改多处,减少多轮往返"),
16390
16577
  del: t.boolean().optional().describe("true 则删除 patch.jsonPath 指定的子路径(等价 delete_data)")
16391
16578
  })
16392
16579
  })
16393
16580
  ];
16394
- return Object.defineProperty(h, "controller", {
16395
- value: d,
16581
+ return Object.defineProperty(g, "controller", {
16582
+ value: f,
16396
16583
  enumerable: !1,
16397
16584
  configurable: !1,
16398
16585
  writable: !1
16399
- }), h;
16586
+ }), g;
16400
16587
  }
16401
16588
  //#endregion
16402
16589
  //#region src/core/tools/fetchDoc.ts
16403
- var Mv = 3e4, Nv = [n(async ({ url: e, as: t }) => {
16404
- let n = new AbortController(), r = setTimeout(() => n.abort(), Mv);
16590
+ var Lv = 3e4, Rv = [n(async ({ url: e, as: t }) => {
16591
+ let n = new AbortController(), r = setTimeout(() => n.abort(), Lv);
16405
16592
  try {
16406
16593
  let r = await fetch(e, {
16407
16594
  method: "GET",
@@ -16418,7 +16605,7 @@ var Mv = 3e4, Nv = [n(async ({ url: e, as: t }) => {
16418
16605
  ].join("\n");
16419
16606
  } catch (t) {
16420
16607
  let r = t?.message || String(t);
16421
- return n.signal.aborted ? `获取失败:请求超时(${Mv}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
16608
+ return n.signal.aborted ? `获取失败:请求超时(${Lv}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
16422
16609
  } finally {
16423
16610
  clearTimeout(r);
16424
16611
  }
@@ -16429,25 +16616,25 @@ var Mv = 3e4, Nv = [n(async ({ url: e, as: t }) => {
16429
16616
  url: t.string().describe("要抓取的 URL(同源或已配 CORS)"),
16430
16617
  as: t.enum(["text", "markdown"]).optional().describe("返回格式标签,默认 text")
16431
16618
  })
16432
- })], Pv = Nv;
16433
- function Fv(e, t) {
16434
- return jv(e, t);
16619
+ })], zv = Rv;
16620
+ function Bv(e, t) {
16621
+ return Iv(e, t);
16435
16622
  }
16436
- function Iv(e, t, n) {
16623
+ function Vv(e, t, n) {
16437
16624
  let r = e?.dataOps !== !1, i = e?.fetch !== !1;
16438
16625
  return [...r ? t : [], ...i ? n : []];
16439
16626
  }
16440
16627
  //#endregion
16441
16628
  //#region src/core/harness/usageHints.ts
16442
- var Lv = .7;
16443
- function Rv(e, t, n = "simple") {
16629
+ var Hv = .7;
16630
+ function Uv(e, t, n = "simple") {
16444
16631
  let r = n !== "advanced";
16445
16632
  return {
16446
16633
  name: "usageHints",
16447
16634
  augmentPrompt: () => {
16448
16635
  let n = [];
16449
16636
  if (e?.planning !== !1 && n.push("多步任务建议先 write_todos 拆解为步骤并逐步推进。"), t && (r ? (n.push("读写主数据用 read/write(高层入口,自动乐观锁 + 自动快照)。read({jsonPath}) 读子路径当前值(返回含 hash,write 时自动比对,无需手动传);read() 不传读整个主数据 + 说明。write({value}) 整体替换(value 直传 JSON 对象,如 {title:\"x\"},无需 stringify);write({value, patch:{op,jsonPath}}) 增量 patch(op=set/remove/merge/append);write({patch:{jsonPath}, del:true}) 删除子路径。写入自动经 schema 校验(失败不写)+ 自动存快照(出错可用 restore_data 回退)。"), n.push("修改大对象/数组优先用 write 的 patch 增量(只发改动部分),避免整体重传被 max_tokens 截断致 JSON 不完整。"), n.push("在大数组里按条件筛选用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素 path/index;定位后用 write patch 改。找名字记不清的元素用 search_data(substring/regex/fuzzy)。批量过滤/映射/聚合/重写大数组用 eval_script(沙箱脚本,mode=query 只读/transform 落地)。")) : (n.push("改主数据前先 get_data({jsonPath}) 读其当前真实值与 hash(返回末尾 hash=xxx),基于真实值改,不要凭记忆。写入(set/edit/delete)时回传 expectedHash=该 hash 启用乐观锁——若主数据在你 get 之后被外部代码/其他 agent/用户手动改过,会触发冲突:集成方若开启人工介入,工具会挂起等用户决定(保留外部/强制覆盖/回退),你应等待工具返回后按结果继续(保留外部→重新 get 再改;强制覆盖→已写入,继续;回退→已回退到历史快照,基于回退值重写);未开启人工介入时返回 VERSION_CONFLICT 不写入,重新 get 拿最新值与 hash 再改。"), n.push("不确定主数据字段结构时用 describe_data 查看说明。"), n.push("修改大对象/数组优先用 edit_data 增量 patch(只发改动部分),避免 set_data 整体重传被 max_tokens 截断导致 JSON 不完整、校验失败。"), n.push("修改主数据出错时可用 restore_data 回退最近一次。"), n.push("在大数组里按条件筛选元素用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素的 path/index;定位后再 edit_data 改。"), n.push("找名字记不清的元素用 search_data(支持 substring/regex/fuzzy 模糊搜索)。"), n.push("需要过滤/映射/聚合/批量重写大数组时用 eval_script(沙箱脚本,入参 data);只读探查用 mode=query,批量重写用 mode=transform(返回值经校验后落地)。"))), e?.subagent !== !1 && n.push("独立子任务可 spawn_agent 委派(只读工具,过程不占主上下文)。"), e?.subagents?.length) {
16450
- let t = e.subagents.filter((e) => (e.temperature ?? 0) >= Lv || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), i = e.subagents.filter((e) => (e.temperature ?? 0) < Lv && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
16637
+ let t = e.subagents.filter((e) => (e.temperature ?? 0) >= Hv || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), i = e.subagents.filter((e) => (e.temperature ?? 0) < Hv && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
16451
16638
  n.push("【规划-反思-执行·路由】按任务性质选模式,不要对简单任务过度编排:"), t.length && (n.push(` · 创作/设计/开放性需求(如"设计主题风格""换个感觉")→ 先调 ${t.map((e) => "use_" + e.id).join("/")} 出 2-3 套方案(高温创意),`), n.push(" 不要自己拍板;拿到方案后,若需用户拍板用 request_human_confirmation 弹选项。")), i.length && n.push(` · 严谨/易错/校验类 → 可先调 ${i.map((e) => "use_" + e.id).join("/")} 反思挑刺(低温审查),据反馈修订。`), n.push(r ? " · 方案定稿后,由你(主 agent)用 write 落地成 JSON(低温度执行 + schema 校验 + 写前确认)。" : " · 方案定稿后,由你(主 agent)用 edit_data 落地成 JSON(低温度执行 + schema 校验 + 写前确认)。"), n.push(" · 简单/明确任务(如\"标题改红色\")直接执行,不必走规划-反思。");
16452
16639
  }
16453
16640
  return e?.humanConfirm && (n.push("【人工确认·必读】以下情形必须先调 request_human_confirmation 征询用户、拿到答复后再继续,不要自行拍板:"), n.push(" 1) 用户让你「给方案/列选项/我来选/挑一个」时:把每个方案作为一个 option,调 request_human_confirmation(question=简述, options=[方案A,方案B,...], recommendation=你推荐的)。不要只回文字罗列方案让用户自己回复——要用工具把选项做成可点选按钮。"), n.push(" 2) 需求有歧义/不确定时:调工具问清楚(options 不传则用户答同意或拒绝)。"), n.push(" 3) 即将执行高风险不可逆操作(删除/覆盖/批量改动)前:调工具确认。"), n.push("用户在选项里选了哪个,就按那个方案继续;选「拒绝」则停止并询问如何调整。")), n.length && n.unshift("调用工具务必用标准 function calling(工具调用)格式发起,不要在回复正文里输出伪 XML/标签(如 deepseek 的 tool_calls 标签、invoke、function_call、tool_call 等)或 JSON 文本——那不会被识别为工具调用,会被当普通文字,工具不执行。"), n.length ? "## 能力使用提示\n" + n.join("\n") : void 0;
@@ -16456,7 +16643,7 @@ function Rv(e, t, n = "simple") {
16456
16643
  }
16457
16644
  //#endregion
16458
16645
  //#region src/core/utils/id.ts
16459
- function zv() {
16646
+ function Wv() {
16460
16647
  try {
16461
16648
  if (typeof crypto < "u" && typeof crypto.randomUUID == "function") return crypto.randomUUID();
16462
16649
  } catch {}
@@ -16464,57 +16651,57 @@ function zv() {
16464
16651
  }
16465
16652
  //#endregion
16466
16653
  //#region src/core/backends/storage.ts
16467
- var Bv = "chat-sdk", Vv = 50 * 1024 * 1024, Hv = 4 * 1024 * 1024, Uv = 10 * 1024 * 1024, Wv = .9, Gv = 500, Kv = 300, qv = "__meta__", Jv = "v:1", Yv = [
16654
+ var Gv = "chat-sdk", Kv = 50 * 1024 * 1024, qv = 4 * 1024 * 1024, Jv = 10 * 1024 * 1024, Yv = .9, Xv = 500, Zv = 300, Qv = "__meta__", $v = "v:1", ey = [
16468
16655
  "messages",
16469
16656
  "vfs",
16470
16657
  "todos",
16471
16658
  "memory"
16472
16659
  ];
16473
- function Xv(e) {
16474
- return e === "local" || e === "session" ? Hv : Vv;
16660
+ function ty(e) {
16661
+ return e === "local" || e === "session" ? qv : Kv;
16475
16662
  }
16476
- function Zv(e) {
16663
+ function ny(e) {
16477
16664
  if (typeof e != "object" || !e) return !1;
16478
16665
  let t = e;
16479
16666
  return t.name === "QuotaExceededError" || t.name === "NS_ERROR_DOM_QUOTA_REACHED" || t.code === 22 || t.code === 1014;
16480
16667
  }
16481
- function Qv(e, t, n, r) {
16668
+ function ry(e, t, n, r) {
16482
16669
  return [
16483
- Jv,
16670
+ $v,
16484
16671
  e,
16485
16672
  t,
16486
16673
  n,
16487
16674
  r
16488
16675
  ].join("::");
16489
16676
  }
16490
- function $v(e, t, n) {
16677
+ function iy(e, t, n) {
16491
16678
  return [
16492
- Jv,
16679
+ $v,
16493
16680
  e,
16494
16681
  t,
16495
16682
  n
16496
16683
  ].join("::") + "::";
16497
16684
  }
16498
- function ey(e, t) {
16685
+ function ay(e, t) {
16499
16686
  return [
16500
- Jv,
16687
+ $v,
16501
16688
  e,
16502
16689
  t
16503
16690
  ].join("::") + "::";
16504
16691
  }
16505
- function ty(e) {
16506
- return [Jv, e].join("::") + "::";
16692
+ function oy(e) {
16693
+ return [$v, e].join("::") + "::";
16507
16694
  }
16508
- var ny = null;
16509
- function ry(e) {
16510
- ny ||= new TextEncoder();
16695
+ var sy = null;
16696
+ function cy(e) {
16697
+ sy ||= new TextEncoder();
16511
16698
  try {
16512
- return ny.encode(JSON.stringify(e)).length;
16699
+ return sy.encode(JSON.stringify(e)).length;
16513
16700
  } catch {
16514
16701
  return 0;
16515
16702
  }
16516
16703
  }
16517
- function iy(e, t, n) {
16704
+ function ly(e, t, n) {
16518
16705
  let r = e.reduce((e, t) => e + t.bytes, 0);
16519
16706
  if (r <= t) return [];
16520
16707
  let i = t * n, a = [...e].sort((e, t) => e.lastAccessed - t.lastAccessed), o = [];
@@ -16524,7 +16711,7 @@ function iy(e, t, n) {
16524
16711
  }
16525
16712
  return o;
16526
16713
  }
16527
- function ay() {
16714
+ function uy() {
16528
16715
  let e = /* @__PURE__ */ new Map();
16529
16716
  return {
16530
16717
  async get(t) {
@@ -16544,7 +16731,7 @@ function ay() {
16544
16731
  }
16545
16732
  };
16546
16733
  }
16547
- function oy(e) {
16734
+ function dy(e) {
16548
16735
  return new Promise((t, n) => {
16549
16736
  if (typeof indexedDB > "u") {
16550
16737
  n(/* @__PURE__ */ Error("indexedDB 不可用"));
@@ -16605,7 +16792,7 @@ function oy(e) {
16605
16792
  }, r.onerror = () => n(r.error);
16606
16793
  });
16607
16794
  }
16608
- function sy(e) {
16795
+ function fy(e) {
16609
16796
  return {
16610
16797
  async get(t) {
16611
16798
  let n = e.getItem(t);
@@ -16639,12 +16826,12 @@ function sy(e) {
16639
16826
  }
16640
16827
  };
16641
16828
  }
16642
- function cy(e, t, n) {
16829
+ function py(e, t, n) {
16643
16830
  let r = (e.get(t) ?? Promise.resolve()).then(n, n);
16644
16831
  return e.set(t, r.then(() => void 0, () => void 0)), r;
16645
16832
  }
16646
- function ly(e = {}) {
16647
- let t = e.dbName ?? Bv, n = e.backend ?? "indexed", r = e.maxBytes ?? Xv(n), i = e.maxBytesPerSession ?? Uv, a = e.evictionWatermark ?? Wv, o = e.debounceMs ?? Gv, s = /* @__PURE__ */ new Set();
16833
+ function my(e = {}) {
16834
+ let t = e.dbName ?? Gv, n = e.backend ?? "indexed", r = e.maxBytes ?? ty(n), i = e.maxBytesPerSession ?? Jv, a = e.evictionWatermark ?? Yv, o = e.debounceMs ?? Xv, s = /* @__PURE__ */ new Set();
16648
16835
  function c(e) {
16649
16836
  for (let t of s) try {
16650
16837
  t(e);
@@ -16657,16 +16844,16 @@ function ly(e = {}) {
16657
16844
  try {
16658
16845
  if (n === "indexed") {
16659
16846
  if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
16660
- l = await oy(t), d(!0);
16847
+ l = await dy(t), d(!0);
16661
16848
  } else if (n === "session") {
16662
16849
  if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
16663
- l = sy(sessionStorage), d(!0);
16850
+ l = fy(sessionStorage), d(!0);
16664
16851
  } else if (n === "local") {
16665
16852
  if (typeof localStorage > "u") throw Error("localStorage 不可用");
16666
- l = sy(localStorage), d(!0);
16667
- } else l = ay(), d(!1);
16853
+ l = fy(localStorage), d(!0);
16854
+ } else l = uy(), d(!1);
16668
16855
  } catch (e) {
16669
- l = ay();
16856
+ l = uy();
16670
16857
  let t = e instanceof Error ? e.message : String(e);
16671
16858
  d(!1), Promise.resolve().then(() => c({
16672
16859
  type: "degraded",
@@ -16676,10 +16863,10 @@ function ly(e = {}) {
16676
16863
  })();
16677
16864
  let p = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map();
16678
16865
  function g(e, n, r, a) {
16679
- let o = Qv(t, r, a, qv);
16680
- return cy(h, o, async () => {
16866
+ let o = ry(t, r, a, Qv);
16867
+ return py(h, o, async () => {
16681
16868
  let t = async () => {
16682
- let t = await l.get(o), s = await l.get(e), u = s == null ? 0 : ry(s), d = ry(n), f = (t?.bytes ?? 0) + (d - u);
16869
+ let t = await l.get(o), s = await l.get(e), u = s == null ? 0 : cy(s), d = cy(n), f = (t?.bytes ?? 0) + (d - u);
16683
16870
  if (f > i) {
16684
16871
  c({
16685
16872
  type: "quota",
@@ -16701,12 +16888,12 @@ function ly(e = {}) {
16701
16888
  try {
16702
16889
  await t();
16703
16890
  } catch (e) {
16704
- if (Zv(e) && !u) {
16891
+ if (ny(e) && !u) {
16705
16892
  u = !0;
16706
16893
  try {
16707
16894
  await b();
16708
16895
  } catch {}
16709
- l = ay(), Promise.resolve().then(() => c({
16896
+ l = uy(), Promise.resolve().then(() => c({
16710
16897
  type: "degraded",
16711
16898
  reason: "存储配额超限(QuotaExceededError),已淘汰最旧会话并降级内存"
16712
16899
  }));
@@ -16718,7 +16905,7 @@ function ly(e = {}) {
16718
16905
  });
16719
16906
  }
16720
16907
  function _(e, n, r, i) {
16721
- let a = Qv(t, e, n, r), s = p.get(a);
16908
+ let a = ry(t, e, n, r), s = p.get(a);
16722
16909
  s && s.resolve();
16723
16910
  let c = m.get(a);
16724
16911
  return c && clearTimeout(c), new Promise((t) => {
@@ -16745,15 +16932,15 @@ function ly(e = {}) {
16745
16932
  function y() {
16746
16933
  v ||= setTimeout(() => {
16747
16934
  v = null, b();
16748
- }, Kv);
16935
+ }, Zv);
16749
16936
  }
16750
16937
  async function b() {
16751
16938
  let e = [];
16752
- await l.scan(ty(t), (t, n) => {
16939
+ await l.scan(oy(t), (t, n) => {
16753
16940
  t.endsWith("::__meta__") && e.push(n);
16754
16941
  });
16755
- let n = iy(e, r, a);
16756
- for (let e of n) await l.clearPrefix($v(t, e.agentId, e.sessionId)), c({
16942
+ let n = ly(e, r, a);
16943
+ for (let e of n) await l.clearPrefix(iy(t, e.agentId, e.sessionId)), c({
16757
16944
  type: "evicted",
16758
16945
  agentId: e.agentId,
16759
16946
  sessionId: e.sessionId,
@@ -16764,13 +16951,13 @@ function ly(e = {}) {
16764
16951
  ready: f,
16765
16952
  async listSessions(e) {
16766
16953
  let n = [];
16767
- return await l.scan(ey(t, e), (e, t) => {
16954
+ return await l.scan(ay(t, e), (e, t) => {
16768
16955
  e.endsWith("::__meta__") && n.push(t);
16769
16956
  }), n.sort((e, t) => t.lastAccessed - e.lastAccessed);
16770
16957
  },
16771
16958
  async load(e, n) {
16772
- let r = Qv(t, e, n, qv);
16773
- return await cy(h, r, async () => {
16959
+ let r = ry(t, e, n, Qv);
16960
+ return await py(h, r, async () => {
16774
16961
  let i = await l.get(r);
16775
16962
  if (!i) return;
16776
16963
  let a = {
@@ -16779,8 +16966,8 @@ function ly(e = {}) {
16779
16966
  todos: [],
16780
16967
  memory: ""
16781
16968
  };
16782
- for (let r of Yv) {
16783
- let i = await l.get(Qv(t, e, n, r));
16969
+ for (let r of ey) {
16970
+ let i = await l.get(ry(t, e, n, r));
16784
16971
  i != null && (a[r] = i);
16785
16972
  }
16786
16973
  return i.lastAccessed = Date.now(), await l.set(r, i), a;
@@ -16788,7 +16975,7 @@ function ly(e = {}) {
16788
16975
  },
16789
16976
  async save(e, t, n) {
16790
16977
  let r = [];
16791
- for (let i of Yv) n[i] !== void 0 && r.push(_(e, t, i, n[i]));
16978
+ for (let i of ey) n[i] !== void 0 && r.push(_(e, t, i, n[i]));
16792
16979
  await Promise.all(r);
16793
16980
  },
16794
16981
  async flush() {
@@ -16802,10 +16989,10 @@ function ly(e = {}) {
16802
16989
  })), c({ type: "flush" }), await b();
16803
16990
  },
16804
16991
  async deleteSession(e, n) {
16805
- await l.clearPrefix($v(t, e, n));
16992
+ await l.clearPrefix(iy(t, e, n));
16806
16993
  },
16807
16994
  async createSession(e, n, r) {
16808
- let i = r ?? zv(), a = Date.now(), o = {
16995
+ let i = r ?? Wv(), a = Date.now(), o = {
16809
16996
  agentId: e,
16810
16997
  sessionId: i,
16811
16998
  createdAt: a,
@@ -16813,7 +17000,7 @@ function ly(e = {}) {
16813
17000
  bytes: 0,
16814
17001
  title: n
16815
17002
  };
16816
- return await l.set(Qv(t, e, i, qv), o), i;
17003
+ return await l.set(ry(t, e, i, Qv), o), i;
16817
17004
  },
16818
17005
  onEvent(e) {
16819
17006
  s.add(e);
@@ -16828,34 +17015,34 @@ function ly(e = {}) {
16828
17015
  }
16829
17016
  //#endregion
16830
17017
  //#region src/core/sdk/createChatSdk.ts
16831
- var uy = [
17018
+ var hy = [
16832
17019
  "你是一个页面操作助手。宿主页面在 window 对象上注册了可操作的属性,你通过专用工具安全地读写这些属性来操作页面。",
16833
17020
  "所有写操作都经范围控制(仅注册表内)与 schema 校验(不合法会返回结构化错误而非写入),并自动留快照可回退。",
16834
17021
  "大对象/数组优先用增量 patch(只发改动)而非整体重传,避免输出被截断。",
16835
- R_.reliableWriteRules
17022
+ L_.reliableWriteRules
16836
17023
  ].join("\n\n");
16837
- function dy(e) {
17024
+ function gy(e) {
16838
17025
  if (!e) return "";
16839
- let t = z_(e.schema);
17026
+ let t = R_(e.schema);
16840
17027
  return `\n\n## 可操作数据(字段以 read 工具返回的实际值为准)\n${e.description ? e.description + "\n" : ""}${t}`;
16841
17028
  }
16842
- var fy = 50;
16843
- function py(e) {
16844
- return e === void 0 || e === !1 ? null : typeof e == "string" ? ly({ backend: e }) : e.enabled === !1 ? null : ly(e);
17029
+ var _y = 50;
17030
+ function vy(e) {
17031
+ return e === void 0 || e === !1 ? null : typeof e == "string" ? my({ backend: e }) : e.enabled === !1 ? null : my(e);
16845
17032
  }
16846
- function my(e) {
17033
+ function yy(e) {
16847
17034
  return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
16848
17035
  }
16849
- var hy = /* @__PURE__ */ new Map();
16850
- function gy(e) {
17036
+ var by = /* @__PURE__ */ new Map();
17037
+ function xy(e) {
16851
17038
  let t = e.content;
16852
17039
  return typeof t == "string" ? t : Array.isArray(t) ? t.map((e) => typeof e == "string" ? e : e?.text ?? "").join("") : String(t ?? "");
16853
17040
  }
16854
- function _y(e) {
17041
+ function Sy(e) {
16855
17042
  let t = e.summaryLlm ?? e.llm;
16856
17043
  if (!t) return;
16857
17044
  let n = e.summaryTemperature ?? .3, r = e.summaryMaxTokens ?? 1024, o = e.summaryTimeoutMs ?? 15e3, c;
16858
- if (my(t)) c = t;
17045
+ if (yy(t)) c = t;
16859
17046
  else {
16860
17047
  let i = t;
16861
17048
  if (!i.apiKey) {
@@ -16873,20 +17060,20 @@ function _y(e) {
16873
17060
  return async (e) => {
16874
17061
  let t = new AbortController(), n = setTimeout(() => t.abort(), o);
16875
17062
  try {
16876
- return gy(await c.invoke([new a("你是对话历史压缩助手。把下面按轮次索引的对话要点,改写成一段连贯、紧凑的中文摘要,保留关键事实、用户意图与已用工具,不要编造。直接输出摘要正文。"), new i(e)], { signal: t.signal })).trim();
17063
+ return xy(await c.invoke([new a("你是对话历史压缩助手。把下面按轮次索引的对话要点,改写成一段连贯、紧凑的中文摘要,保留关键事实、用户意图与已用工具,不要编造。直接输出摘要正文。"), new i(e)], { signal: t.signal })).trim();
16877
17064
  } finally {
16878
17065
  clearTimeout(n);
16879
17066
  }
16880
17067
  };
16881
17068
  }
16882
- function vy(e, t) {
17069
+ function Cy(e, t) {
16883
17070
  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;
16884
17071
  }
16885
- function yy(e, t, n) {
17072
+ function wy(e, t, n) {
16886
17073
  return {
16887
17074
  name: "sdk-events",
16888
17075
  wrapToolCall: async (t, r) => {
16889
- let i = await r(t), a = vy(t.name, t.args);
17076
+ let i = await r(t), a = Cy(t.name, t.args);
16890
17077
  return a && e({
16891
17078
  type: "data_change",
16892
17079
  operation: a,
@@ -16901,7 +17088,7 @@ function yy(e, t, n) {
16901
17088
  }
16902
17089
  };
16903
17090
  }
16904
- function by(e, r) {
17091
+ function Ty(e, r) {
16905
17092
  let i = /* @__PURE__ */ fn(null), a = 0;
16906
17093
  function o(e) {
16907
17094
  return new Promise((t) => {
@@ -16922,17 +17109,17 @@ function by(e, r) {
16922
17109
  let t = i.value;
16923
17110
  t && (i.value = null, t.resolve({ action: e }));
16924
17111
  }
16925
- let c = py(e.storage);
17112
+ let c = vy(e.storage);
16926
17113
  e.debug && c && c.onEvent((e) => console.log("[page-agent-sdk][storage]", e));
16927
- let l = my(e.llm) ? void 0 : e.llm, u = ng({
17114
+ let l = yy(e.llm) ? void 0 : e.llm, u = ng({
16928
17115
  model: l?.model,
16929
17116
  contextWindow: e.contextWindow ?? l?.contextWindow,
16930
17117
  maxOutputTokens: e.maxOutputTokens ?? l?.maxOutputTokens
16931
17118
  });
16932
17119
  e.debug && console.log("[page-agent-sdk][modelCaps]", u);
16933
- let d = _y(e);
17120
+ let d = Sy(e);
16934
17121
  e.debug && !d && console.warn("[page-agent-sdk][summarization] 未构造 llmInvoke(apiKey 缺失?),摘要回退零成本索引摘要");
16935
- let f = /* @__PURE__ */ Qt([]), p = K_(e.vfs?.initialFiles, {
17122
+ let f = /* @__PURE__ */ Qt([]), p = G_(e.vfs?.initialFiles, {
16936
17123
  persist: c ? { save: (e) => {
16937
17124
  B.sessionId && c && c.save(r, B.sessionId, { vfs: e });
16938
17125
  } } : void 0,
@@ -16947,13 +17134,13 @@ function by(e, r) {
16947
17134
  getTodos: () => g.current?.getState?.()?.todos ?? [],
16948
17135
  messages: f,
16949
17136
  maxCheckpoints: v && typeof v == "object" ? v.maxCheckpoints : void 0
16950
- }) : null, x = !v || typeof v != "object" || v.auto !== !1, S = e.capabilities, C = S?.dataOps !== !1, w = (e.systemPrompt ?? uy) + dy(_), T = C && _ ? jv(_, {
17137
+ }) : null, x = !v || typeof v != "object" || v.auto !== !1, S = e.capabilities, C = S?.dataOps !== !1, w = (e.systemPrompt ?? hy) + gy(_), T = C && _ ? Iv(_, {
16951
17138
  onAudit: e.debug ? (e) => console.log("[page-agent-sdk][data audit]", e) : void 0,
16952
17139
  maxSnapshots: e.maxSnapshots,
16953
17140
  onConflict: o,
16954
17141
  autoLock: e.autoLock,
16955
17142
  interceptors: e.interceptors
16956
- }) : [], E = C ? Av(T, e.toolMode) : [], D = C && _ ? T.controller ?? null : null, O = () => D?.get() ?? _, k = /* @__PURE__ */ new Map(), A = Iv(S, E, Nv);
17143
+ }) : [], E = C ? Fv(T, e.toolMode) : [], D = C && _ ? T.controller ?? null : null, O = () => D?.get() ?? _, k = /* @__PURE__ */ new Map(), A = Vv(S, E, Rv);
16957
17144
  A.forEach((e) => k.set(e.name, "builtin"));
16958
17145
  let j = [...e.tools || []];
16959
17146
  j.forEach((e) => k.set(e.name, "user"));
@@ -17008,7 +17195,7 @@ function by(e, r) {
17008
17195
  llm: e.llm,
17009
17196
  tools: le
17010
17197
  } : void 0
17011
- }) : void 0, de = Rv({
17198
+ }) : void 0, de = Uv({
17012
17199
  ...S,
17013
17200
  humanConfirm: M,
17014
17201
  subagents: e.subagents?.map((e) => ({
@@ -17029,14 +17216,11 @@ function by(e, r) {
17029
17216
  de,
17030
17217
  ...I ? [m] : [],
17031
17218
  ...L ? [kg(e.skills || [], { readVfs: ee ? (e) => p.files[e]?.content : void 0 })] : [],
17032
- ...ee ? [$_(p)] : [],
17033
- ...R ? [I_({
17034
- ...V_(e, u.contextWindow),
17219
+ ...ee ? [Q_(p)] : [],
17220
+ ...R ? [F_({
17221
+ ...B_(e, u.contextWindow),
17035
17222
  llmInvoke: d,
17036
- getRegisteredSlots: () => O() ? [{
17037
- path: "",
17038
- description: O().description ?? "主数据对象"
17039
- }] : [],
17223
+ getRegisteredData: () => O() ? [{ description: O().description ?? "主数据对象" }] : [],
17040
17224
  preserveLastToolResults: (e.contextOptions && e.contextOptions.preserveLastToolResults) ?? ["describe_data", "read"]
17041
17225
  })] : [],
17042
17226
  ...z ? [h] : [],
@@ -17048,8 +17232,8 @@ function by(e, r) {
17048
17232
  ...oe ? [oe] : [],
17049
17233
  ...se ? [se] : [],
17050
17234
  ...e.middleware || [],
17051
- yy(me, f, O)
17052
- ], ge = e.maxMemoryRounds ?? fy, B = {
17235
+ wy(me, f, O)
17236
+ ], ge = e.maxMemoryRounds ?? _y, B = {
17053
17237
  agentId: r,
17054
17238
  store: c,
17055
17239
  messages: f,
@@ -17124,14 +17308,14 @@ function by(e, r) {
17124
17308
  if (B.refCount--, B.refCount <= 0) {
17125
17309
  c && (p.flush?.(), c.flush(), c.dispose());
17126
17310
  let e = B.mcpClosers.splice(0);
17127
- e.length && Promise.allSettled(e.map((e) => e())), hy.delete(r);
17311
+ e.length && Promise.allSettled(e.map((e) => e())), by.delete(r);
17128
17312
  }
17129
17313
  },
17130
17314
  resolveConflict: s,
17131
17315
  getInfo() {
17132
17316
  return {
17133
17317
  id: r,
17134
- model: my(e.llm) ? e.llm.model ?? e.llm.modelName : e.llm.model,
17318
+ model: yy(e.llm) ? e.llm.model ?? e.llm.modelName : e.llm.model,
17135
17319
  systemPrompt: w,
17136
17320
  tools: F.map((e) => ({
17137
17321
  name: e.name,
@@ -17218,7 +17402,7 @@ function by(e, r) {
17218
17402
  }), F.push(...n), e.debug && console.log(`[page-agent-sdk][mcp] 注入 ${n.length} 个工具,${B.mcpServers.length} 个 server`);
17219
17403
  }
17220
17404
  B.agent = bg({
17221
- ...my(e.llm) ? { llm: e.llm } : {
17405
+ ...yy(e.llm) ? { llm: e.llm } : {
17222
17406
  apiKey: e.llm.apiKey,
17223
17407
  baseUrl: e.llm.baseUrl,
17224
17408
  model: e.llm.model,
@@ -17238,11 +17422,11 @@ function by(e, r) {
17238
17422
  }), g.current = B.agent;
17239
17423
  })(), B;
17240
17424
  }
17241
- function xy(e) {
17242
- let t = e.id ?? zv();
17425
+ function Ey(e) {
17426
+ let t = e.id ?? Wv();
17243
17427
  e.id || console.warn(`[page-agent-sdk] 未传 options.id,已生成随机 id "${t}"。刷新后持久化数据无法恢复,请传稳定 id。`);
17244
- let n = e.streaming ?? !0, r = e.ui ?? "default", i, a = e.shareContext ? hy.get(t) : void 0;
17245
- a ? i = a : (i = by(e, t), e.shareContext && hy.set(t, i)), i.refCount++;
17428
+ let n = e.streaming ?? !0, r = e.ui ?? "default", i, a = e.shareContext ? by.get(t) : void 0;
17429
+ a ? i = a : (i = Ty(e, t), e.shareContext && by.set(t, i)), i.refCount++;
17246
17430
  let o = null, s = null, c = null;
17247
17431
  async function l() {
17248
17432
  if (await i.initDone, r === !1) {
@@ -17277,7 +17461,7 @@ function xy(e) {
17277
17461
  i.afterRound(), i.store && await i.store.flush();
17278
17462
  },
17279
17463
  onClear: () => {
17280
- i.store && (i.sessionId = zv(), i.vfsStore.clear?.(), i.todosMw.reset([]), e.memory || i.memoryMw.reset(""), i.agent.debugLogs.value = [], i.store.createSession(i.agentId, e.session?.title, i.sessionId));
17464
+ i.store && (i.sessionId = Wv(), i.vfsStore.clear?.(), i.todosMw.reset([]), e.memory || i.memoryMw.reset(""), i.agent.debugLogs.value = [], i.store.createSession(i.agentId, e.session?.title, i.sessionId));
17281
17465
  },
17282
17466
  pendingConflict: i.pendingConflict.value,
17283
17467
  onResolveConflict: (e) => i.resolveConflict(e)
@@ -17316,7 +17500,7 @@ function xy(e) {
17316
17500
  }
17317
17501
  //#endregion
17318
17502
  //#region src/core/sdk/defineTool.ts
17319
- function Sy(e) {
17503
+ function Dy(e) {
17320
17504
  return n(async (t) => {
17321
17505
  let n = await e.handler(t);
17322
17506
  return typeof n == "string" ? n : JSON.stringify(n);
@@ -17327,4 +17511,4 @@ function Sy(e) {
17327
17511
  });
17328
17512
  }
17329
17513
  //#endregion
17330
- export { B_ as CONTEXT_PRESETS, Xh as ChatDialog, ef as CodePreview, Lg as HUMAN_CONFIRM_TOOL_NAME, nf as MessageContent, S_ as connectMcp, Sl as copyText, bg as createAgent, Ig as createApprovalMiddleware, xy as createChatSdk, qg as createCheckpointManager, Jg as createCheckpointMiddleware, jv as createDataOps, Bg as createHumanConfirmMiddleware, zg as createHumanConfirmTool, ay as createMemoryBackend, ly as createSessionStore, n_ as createSubagentMiddleware, a_ as createSubagentsMiddleware, Rv as createUsageHintsMiddleware, o_ as createVerifyMiddleware, K_ as createVfs, sy as createWebStorageBackend, f_ as createWriteBackCheck, Fv as defineDataToolset, Cg as defineSkill, Sy as defineTool, hg as detectGarbledToolCall, rg as estimateTokens, z_ as extractSchemaHint, y_ as extractText, Nv as fetchDocTools, Pv as fetchTools, Av as filterByToolMode, H_ as formatZodIssues, Zv as isQuotaError, lv as jpEval, W_ as jsonParseError, ag as offloadPassThroughChars, ig as offloadThresholdChars, L_ as presets, V_ as resolveContextOptions, ng as resolveModelCaps, mv as runSandboxedScript, dv as searchJson, Iv as selectBuiltinTools, R_ as systemPromptHelpers, $ as toolError, xl as useChat, e as z, U_ as zodError };
17514
+ export { z_ as CONTEXT_PRESETS, Xh as ChatDialog, ef as CodePreview, Lg as HUMAN_CONFIRM_TOOL_NAME, nf as MessageContent, S_ as connectMcp, Sl as copyText, bg as createAgent, Ig as createApprovalMiddleware, Ey as createChatSdk, qg as createCheckpointManager, Jg as createCheckpointMiddleware, Iv as createDataOps, Bg as createHumanConfirmMiddleware, zg as createHumanConfirmTool, uy as createMemoryBackend, my as createSessionStore, n_ as createSubagentMiddleware, a_ as createSubagentsMiddleware, Uv as createUsageHintsMiddleware, o_ as createVerifyMiddleware, G_ as createVfs, fy as createWebStorageBackend, f_ as createWriteBackCheck, Bv as defineDataToolset, Cg as defineSkill, Dy as defineTool, hg as detectGarbledToolCall, rg as estimateTokens, R_ as extractSchemaHint, y_ as extractText, Rv as fetchDocTools, zv as fetchTools, Fv as filterByToolMode, V_ as formatZodIssues, ny as isQuotaError, cv as jpEval, U_ as jsonParseError, ag as offloadPassThroughChars, ig as offloadThresholdChars, I_ as presets, B_ as resolveContextOptions, ng as resolveModelCaps, pv as runSandboxedScript, uv as searchJson, Vv as selectBuiltinTools, L_ as systemPromptHelpers, $ as toolError, xl as useChat, e as z, H_ as zodError };