page-agent-sdk 2.18.0 → 2.18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14301,7 +14301,7 @@ function Wg(e, t) {
14301
14301
  //#endregion
14302
14302
  //#region src/core/harness/createAgent.ts
14303
14303
  function Gg(e) {
14304
- return e ? /<|tool_calls|>|<||[^>]*tool_call|<invoke\s+name=|<\/?tool_call>|<function_call>/i.test(e) : !1;
14304
+ return e ? /<|tool_calls|>|<||[^>]*tool_call|<||?DSML||?>|<|tool[_a-z]*|>|<invoke\s+name=|<\/?tool_call>|<function_call>/i.test(e) : !1;
14305
14305
  }
14306
14306
  var Kg = 10, qg = 300, Jg = 6e3;
14307
14307
  function Yg(e, t) {
@@ -14483,9 +14483,9 @@ function Zg(e) {
14483
14483
  tools: M.map((e) => e.name),
14484
14484
  middleware: h.map((e) => e.name)
14485
14485
  });
14486
- let l = Ug(h, (e) => R(e, t, n)), u = Wg(h, ne), d = 0, f = 0, p = Xg(g, _), m = null, v = 0;
14486
+ let l = Ug(h, (e) => R(e, t, n)), u = Wg(h, ne), d = 0, f = 0, p = Xg(g, _), m = null, v = 0, y = !1;
14487
14487
  try {
14488
- for (; d < g && f < p && (f++, !n?.aborted);) {
14488
+ for (; (d < g || y) && f < p && (f++, !n?.aborted);) {
14489
14489
  t({
14490
14490
  type: "round_start",
14491
14491
  round: f
@@ -14511,15 +14511,26 @@ function Zg(e) {
14511
14511
  content: e.content
14512
14512
  }), e.content;
14513
14513
  if (!e.toolCalls.length) {
14514
- if (v < 2 && Gg(e.content)) {
14515
- v += 1, A("middleware", {
14514
+ let n = Gg(e.content);
14515
+ if (n && v < 2) {
14516
+ v += 1, y = !0, A("middleware", {
14516
14517
  stage: "format_retry",
14517
14518
  attempt: v,
14518
14519
  content: e.content.slice(0, 200)
14519
- }), i.push(new a("⚠️ 你刚才把工具调用写成了文本(伪 XML/标签,如 <|tool_calls|>、<invoke name=...>),未被系统识别为工具调用,因此未执行,页面无变化。请直接用标准 function calling(工具调用)格式重新发起工具调用,不要在回复正文里输出这些标签或 JSON 文本。"));
14520
+ }), i.push(new a("⚠️ 你刚才把工具调用写成了文本(伪 XML/标签/DSML 标记,如 <|tool_calls|>、<||DSML||>、<invoke name=...>),未被系统识别为工具调用,因此未执行,页面无变化。请直接用标准 function calling(工具调用)格式重新发起工具调用,不要在回复正文里输出这些标签或 JSON 文本。"));
14520
14521
  continue;
14521
14522
  }
14522
- if (x > 0 && I.verifyAttempts < x) {
14523
+ if (n && (A("error", {
14524
+ stage: "garbled_exhausted",
14525
+ retries: v,
14526
+ content: e.content.slice(0, 200)
14527
+ }), t({
14528
+ type: "error",
14529
+ message: "模型连续 2 次输出无法解析的工具调用格式(DSML/伪标签),任务可能未完成。请重试或换模型。",
14530
+ severity: "observable",
14531
+ code: "GARBLED_TOOL_CALL_EXHAUSTED",
14532
+ context: { content: e.content.slice(0, 200) }
14533
+ })), !n && x > 0 && I.verifyAttempts < x) {
14523
14534
  let t = await Hg(h, {
14524
14535
  messages: i,
14525
14536
  state: I,
@@ -14535,11 +14546,12 @@ function Zg(e) {
14535
14546
  continue;
14536
14547
  }
14537
14548
  }
14538
- return t({
14549
+ return y = !1, t({
14539
14550
  type: "done",
14540
14551
  content: e.content
14541
14552
  }), e.content;
14542
14553
  }
14554
+ y = !1;
14543
14555
  let r = e.toolCalls.map((e) => {
14544
14556
  let r = e.id || `call_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
14545
14557
  return {
@@ -15011,32 +15023,43 @@ function b_(e, t, n) {
15011
15023
  return "allow";
15012
15024
  }
15013
15025
  function x_(e) {
15026
+ let t = e ?? {}, n = /* @__PURE__ */ new Set();
15027
+ if (typeof t.jsonPath == "string" && t.jsonPath && n.add(t.jsonPath), typeof t.path == "string" && t.path && n.add(t.path), t.patch && typeof t.patch.jsonPath == "string" && t.patch.jsonPath && n.add(t.patch.jsonPath), Array.isArray(t.patches)) for (let e of t.patches) e && typeof e.jsonPath == "string" && e.jsonPath && n.add(e.jsonPath);
15028
+ return [...n];
15029
+ }
15030
+ function S_(e) {
15014
15031
  return {
15015
15032
  name: "permissions",
15016
15033
  wrapToolCall: async (t, n) => {
15017
- let r = __.has(t.name) ? "write" : v_.has(t.name) ? "read" : null, i = t.args?.jsonPath || t.args?.path || "";
15018
- return r && i && b_(e, r, i) === "deny" ? {
15019
- content: `权限拒绝:${r} 操作 "${i}" permissions 规则禁止。`,
15020
- status: "error"
15021
- } : n(t);
15034
+ let r = __.has(t.name) ? "write" : v_.has(t.name) ? "read" : null, i = x_(t.args);
15035
+ if (r && i.length) {
15036
+ for (let t of i) if (b_(e, r, t) === "deny") return {
15037
+ content: `权限拒绝:${r} 操作 "${t}" 被 permissions 规则禁止。`,
15038
+ status: "error"
15039
+ };
15040
+ }
15041
+ return n(t);
15022
15042
  }
15023
15043
  };
15024
15044
  }
15025
15045
  //#endregion
15026
15046
  //#region src/core/harness/approval.ts
15027
- function S_(e = {}) {
15047
+ function C_(e = {}) {
15028
15048
  let t = (t, n) => e.confirm ? !!e.confirm(t, n) : e.tools === void 0 || e.tools.includes(t);
15029
15049
  return {
15030
15050
  name: "approval",
15031
15051
  wrapToolCall: async (n, r) => t(n.name, n.args) ? new Promise((t) => {
15032
15052
  let i = !1, a = [], o = (e) => {
15033
- i || (i = !0, a.forEach((e) => e()), e === !1 ? t({
15034
- content: `用户拒绝了 ${n.name} 调用${n.args?.path ? `(path=${n.args.path})` : ""}。请改用只读工具、调整路径或换方案后再试。`,
15035
- status: "error"
15036
- }) : r(n).then(t, (e) => t({
15053
+ if (!i) if (i = !0, a.forEach((e) => e()), e === !1) {
15054
+ let e = n.args ?? {}, r = e.path || e.jsonPath || e.patch?.jsonPath || (Array.isArray(e.patches) ? e.patches.map((e) => e?.jsonPath).filter(Boolean).join(",") : "") || "";
15055
+ t({
15056
+ content: `用户拒绝了 ${n.name} 调用${r ? `(path=${r})` : ""}。请改用只读工具、调整路径或换方案后再试。`,
15057
+ status: "error"
15058
+ });
15059
+ } else r(n).then(t, (e) => t({
15037
15060
  content: `工具执行失败:${e?.message ?? e}`,
15038
15061
  status: "error"
15039
- })));
15062
+ }));
15040
15063
  };
15041
15064
  if (n.signal) {
15042
15065
  if (n.signal.aborted) return o(!1);
@@ -15058,15 +15081,15 @@ function S_(e = {}) {
15058
15081
  }
15059
15082
  //#endregion
15060
15083
  //#region src/core/harness/humanConfirm.ts
15061
- var C_ = "request_human_confirmation", w_ = t.object({
15084
+ var w_ = "request_human_confirmation", T_ = t.object({
15062
15085
  question: t.string().describe("要征询用户的问题/方案描述。清晰具体:说明当前情况、为什么需要确认、确认什么。"),
15063
15086
  options: t.array(t.string()).optional().describe("可选方案列表(2-4 个)。用户从中选一个。不传则用户只回答允许/拒绝。"),
15064
15087
  recommendation: t.string().optional().describe("你推荐的方案(优先在 options 中选一个)及推荐理由,帮用户快速决策。"),
15065
15088
  context: t.string().optional().describe("补充上下文:已做了什么、约束、影响范围等,帮用户判断。")
15066
15089
  });
15067
- function T_() {
15090
+ function E_() {
15068
15091
  return r(async () => "人工确认中间件未装载,无法征询用户。请直接向用户说明情况并等待回复。", {
15069
- name: C_,
15092
+ name: w_,
15070
15093
  description: [
15071
15094
  "当遇到以下情况时,主动调用本工具征询用户确认后再继续(不要默默猜测后直接执行高风险动作):",
15072
15095
  "1) 不确定用户意图、需求有歧义;",
@@ -15076,10 +15099,10 @@ function T_() {
15076
15099
  "入参:question=问题/方案描述;options=可选方案列表(多方案时给);recommendation=你推荐的方案及理由。",
15077
15100
  "用户选择后,据其回答继续;若用户拒绝,停止当前操作并询问如何调整。"
15078
15101
  ].join(""),
15079
- schema: w_
15102
+ schema: T_
15080
15103
  });
15081
15104
  }
15082
- function E_() {
15105
+ function D_() {
15083
15106
  return {
15084
15107
  name: "humanConfirm",
15085
15108
  wrapToolCall: async (e, t) => e.name === "request_human_confirmation" ? new Promise((t) => {
@@ -15111,14 +15134,14 @@ function E_() {
15111
15134
  }
15112
15135
  //#endregion
15113
15136
  //#region src/core/harness/checkpoint.ts
15114
- function D_(e) {
15137
+ function O_(e) {
15115
15138
  if (typeof e != "object" || !e) return e;
15116
15139
  if (typeof structuredClone == "function") try {
15117
15140
  return structuredClone(e);
15118
15141
  } catch {}
15119
15142
  return JSON.parse(JSON.stringify(e));
15120
15143
  }
15121
- function O_(e, t) {
15144
+ function k_(e, t) {
15122
15145
  let n = t.split("."), r = e;
15123
15146
  for (let e of n) {
15124
15147
  if (r == null) return;
@@ -15126,12 +15149,12 @@ function O_(e, t) {
15126
15149
  }
15127
15150
  return r;
15128
15151
  }
15129
- function k_(e, t, n) {
15152
+ function A_(e, t, n) {
15130
15153
  let r = t.split("."), i = e;
15131
15154
  for (let e = 0; e < r.length - 1; e++) i[r[e]] ?? (i[r[e]] = {}), i = i[r[e]];
15132
15155
  i[r[r.length - 1]] = n;
15133
15156
  }
15134
- function A_(e, t) {
15157
+ function j_(e, t) {
15135
15158
  if (Array.isArray(e)) {
15136
15159
  e.length = 0, Array.isArray(t) && e.push(...t);
15137
15160
  return;
@@ -15140,11 +15163,11 @@ function A_(e, t) {
15140
15163
  for (let t of Object.keys(e)) t in n || delete e[t];
15141
15164
  for (let t of Object.keys(n)) e[t] = n[t];
15142
15165
  }
15143
- function j_(e, t) {
15144
- let n = O_(window, e);
15145
- typeof n == "object" && n ? A_(n, t) : k_(window, e, t);
15166
+ function M_(e, t) {
15167
+ let n = k_(window, e);
15168
+ typeof n == "object" && n ? j_(n, t) : A_(window, e, t);
15146
15169
  }
15147
- function M_(e) {
15170
+ function N_(e) {
15148
15171
  let t = e.slice();
15149
15172
  for (; t.length;) {
15150
15173
  let e = t[t.length - 1];
@@ -15153,21 +15176,21 @@ function M_(e) {
15153
15176
  }
15154
15177
  return t;
15155
15178
  }
15156
- function N_(e) {
15179
+ function P_(e) {
15157
15180
  let t = [], n = e.maxCheckpoints ?? 5, r = 1;
15158
15181
  return {
15159
15182
  save(i) {
15160
- let a = M_(e.messages), o = {};
15161
- if (e.getData) o[""] = D_(e.getData());
15162
- else for (let t of e.slotPaths ?? []) o[t] = D_(O_(window, t));
15183
+ let a = N_(e.messages), o = {};
15184
+ if (e.getData) o[""] = O_(e.getData());
15185
+ else for (let t of e.slotPaths ?? []) o[t] = O_(k_(window, t));
15163
15186
  let s = {
15164
15187
  id: r++,
15165
15188
  label: i,
15166
15189
  timestamp: Date.now(),
15167
- messages: D_(a),
15190
+ messages: O_(a),
15168
15191
  windowVals: o,
15169
- vfs: D_(e.vfsStore.files),
15170
- todos: D_(e.getTodos()),
15192
+ vfs: O_(e.vfsStore.files),
15193
+ todos: O_(e.getTodos()),
15171
15194
  messageCount: a.length
15172
15195
  };
15173
15196
  for (t.push(s); t.length > n;) t.shift();
@@ -15187,20 +15210,20 @@ function N_(e) {
15187
15210
  restore(n) {
15188
15211
  let r = n == null ? t[t.length - 1] : t.find((e) => e.id === n);
15189
15212
  if (!r) return !1;
15190
- if (e.messages.splice(0, e.messages.length, ...D_(r.messages)), e.getData) {
15213
+ if (e.messages.splice(0, e.messages.length, ...O_(r.messages)), e.getData) {
15191
15214
  let t = r.windowVals[""];
15192
15215
  if (t !== void 0) {
15193
15216
  let n = e.getData();
15194
- typeof n == "object" && n && A_(n, D_(t));
15217
+ typeof n == "object" && n && j_(n, O_(t));
15195
15218
  }
15196
- } else for (let [e, t] of Object.entries(r.windowVals)) j_(e, D_(t));
15219
+ } else for (let [e, t] of Object.entries(r.windowVals)) M_(e, O_(t));
15197
15220
  let i = e.vfsStore.files;
15198
15221
  for (let e of Object.keys(i)) delete i[e];
15199
- return Object.assign(i, D_(r.vfs)), e.todosMw.reset(D_(r.todos)), !0;
15222
+ return Object.assign(i, O_(r.vfs)), e.todosMw.reset(O_(r.todos)), !0;
15200
15223
  }
15201
15224
  };
15202
15225
  }
15203
- function P_(e) {
15226
+ function F_(e) {
15204
15227
  let t = !1;
15205
15228
  return {
15206
15229
  name: "checkpoint",
@@ -15214,23 +15237,23 @@ function P_(e) {
15214
15237
  }
15215
15238
  //#endregion
15216
15239
  //#region src/core/harness/subagent.ts
15217
- function F_(e) {
15240
+ function I_(e) {
15218
15241
  return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
15219
15242
  }
15220
- var I_ = [
15243
+ var L_ = [
15221
15244
  "describe_data",
15222
15245
  "get_data",
15223
15246
  "read",
15224
15247
  "query_data",
15225
15248
  "search_data",
15226
15249
  "fetch_document"
15227
- ], L_ = 1, R_ = 4, z_ = 6, B_ = ["spawn_agent", "spawn_agents"];
15228
- async function V_(e, t, n, r, i) {
15229
- let a = t.depth ?? 0, o = t.maxDepth ?? L_, s = /* @__PURE__ */ new Set([...I_, ...t.allowedTools ?? []]), c = [...t.allTools.filter((e) => s.has(e.name) && !B_.includes(e.name)), ...t.extraTools ?? []], l = a + 1 < o ? [H_({
15250
+ ], R_ = 1, z_ = 4, B_ = 6, V_ = ["spawn_agent", "spawn_agents"];
15251
+ async function H_(e, t, n, r, i) {
15252
+ let a = t.depth ?? 0, o = t.maxDepth ?? R_, s = /* @__PURE__ */ new Set([...L_, ...t.allowedTools ?? []]), c = [...t.allTools.filter((e) => s.has(e.name) && !V_.includes(e.name)), ...t.extraTools ?? []], l = a + 1 < o ? [U_({
15230
15253
  ...t,
15231
15254
  depth: a + 1
15232
15255
  })] : [], u = Zg({
15233
- ...F_(t.llm) ? { llm: t.llm } : {
15256
+ ...I_(t.llm) ? { llm: t.llm } : {
15234
15257
  apiKey: t.llm.apiKey,
15235
15258
  baseUrl: t.llm.baseUrl,
15236
15259
  model: e.model ?? t.llm.model,
@@ -15240,7 +15263,7 @@ async function V_(e, t, n, r, i) {
15240
15263
  systemPrompt: e.role?.trim() || t.systemPrompt || "你是一个专注的子任务执行者。你只有只读工具(读主数据 / 抓文档),用它们完成给定任务,给出简洁结论,不要展开多余解释。",
15241
15264
  tools: c,
15242
15265
  middleware: [...t.skills?.length ? [h_(t.skills)] : [], ...l],
15243
- maxToolRounds: t.maxToolRounds ?? z_,
15266
+ maxToolRounds: t.maxToolRounds ?? B_,
15244
15267
  onLog: i,
15245
15268
  debug: t.debug
15246
15269
  });
@@ -15252,8 +15275,8 @@ async function V_(e, t, n, r, i) {
15252
15275
  r && (e.type === "tool_call" || e.type === "tool_result") && r(e);
15253
15276
  }, n);
15254
15277
  }
15255
- function H_(e) {
15256
- let n = e.maxParallel ?? R_, i, a, o, s = (e, t) => (n) => {
15278
+ function U_(e) {
15279
+ let n = e.maxParallel ?? z_, i, a, o, s = (e, t) => (n) => {
15257
15280
  a && a({
15258
15281
  type: "subagent",
15259
15282
  taskId: e,
@@ -15272,7 +15295,7 @@ function H_(e) {
15272
15295
  ...e,
15273
15296
  allowedTools: r
15274
15297
  } : e, l = `sub-${Math.random().toString(36).slice(2, 8)}`, u = n?.trim() || "子任务";
15275
- return await V_({
15298
+ return await H_({
15276
15299
  prompt: t,
15277
15300
  role: n,
15278
15301
  model: a
@@ -15291,7 +15314,7 @@ function H_(e) {
15291
15314
  })
15292
15315
  }), r(async ({ tasks: t }) => (await kg(t, n, async (t, n) => {
15293
15316
  let r = `sub-${n}-${Math.random().toString(36).slice(2, 6)}`, a = t.role?.trim() || `子任务${n + 1}`;
15294
- return V_(t, e, i, s(r, a), (e) => o?.({
15317
+ return H_(t, e, i, s(r, a), (e) => o?.({
15295
15318
  ...e,
15296
15319
  source: `子:${a}`
15297
15320
  }));
@@ -15306,8 +15329,8 @@ function H_(e) {
15306
15329
  wrapToolCall: async (e, t) => (e.signal && (i = e.signal), e.emit && (a = e.emit), e.logSink && (o = e.logSink), t(e))
15307
15330
  };
15308
15331
  }
15309
- var U_ = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
15310
- function W_(e, t) {
15332
+ var W_ = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
15333
+ function G_(e, t) {
15311
15334
  let n = e.tools ?? [];
15312
15335
  return {
15313
15336
  llm: e.llm ?? t.llm,
@@ -15321,7 +15344,7 @@ function W_(e, t) {
15321
15344
  debug: t.debug
15322
15345
  };
15323
15346
  }
15324
- function G_(e, n) {
15347
+ function K_(e, n) {
15325
15348
  let i, a, o, s = (e, t) => (n) => {
15326
15349
  a && a({
15327
15350
  type: "subagent",
@@ -15337,7 +15360,7 @@ function G_(e, n) {
15337
15360
  function d(e) {
15338
15361
  let a = /* @__PURE__ */ new Set(), c = [], l = [];
15339
15362
  for (let u of e) {
15340
- if (!U_.test(u.id)) {
15363
+ if (!W_.test(u.id)) {
15341
15364
  console.warn(`[subagents] id "${u.id}" 非合法工具名(须 [a-zA-Z_][a-zA-Z0-9_]*),已跳过`);
15342
15365
  continue;
15343
15366
  }
@@ -15347,8 +15370,8 @@ function G_(e, n) {
15347
15370
  continue;
15348
15371
  }
15349
15372
  a.add(e), c.push(u), l.push(r(async ({ task: e }) => {
15350
- let t = W_(u, n);
15351
- return V_({ prompt: e }, t, i, s(`use_${u.id}`, u.id), (e) => o?.({
15373
+ let t = G_(u, n);
15374
+ return H_({ prompt: e }, t, i, s(`use_${u.id}`, u.id), (e) => o?.({
15352
15375
  ...e,
15353
15376
  source: `子:${u.id}`
15354
15377
  }));
@@ -15408,7 +15431,7 @@ function G_(e, n) {
15408
15431
  }
15409
15432
  //#endregion
15410
15433
  //#region src/core/harness/verify.ts
15411
- function K_(e) {
15434
+ function q_(e) {
15412
15435
  return {
15413
15436
  name: "verify",
15414
15437
  async beforeReturn({ messages: t, state: n, log: r }) {
@@ -15420,10 +15443,10 @@ function K_(e) {
15420
15443
  if (e.adversarial) {
15421
15444
  r?.("middleware", {
15422
15445
  stage: "adversarial_start",
15423
- model: ev(e.adversarial.llm),
15446
+ model: tv(e.adversarial.llm),
15424
15447
  tools: (e.adversarial.tools ?? []).length
15425
15448
  });
15426
- let n = await iv(t, e.adversarial.llm, r, e.adversarial.tools);
15449
+ let n = await av(t, e.adversarial.llm, r, e.adversarial.tools);
15427
15450
  if (r?.("middleware", {
15428
15451
  stage: "adversarial_done",
15429
15452
  clean: n === null,
@@ -15434,30 +15457,57 @@ function K_(e) {
15434
15457
  }
15435
15458
  };
15436
15459
  }
15437
- var q_ = /* @__PURE__ */ new Set([
15460
+ var J_ = /* @__PURE__ */ new Set([
15438
15461
  "set_data",
15439
15462
  "edit_data",
15440
15463
  "delete_data",
15441
15464
  "write"
15442
- ]), J_ = /校验失败|SCHEMA_INVALID|未注册|不存在|仅支持|必须是|NOT_OBJECT|PATH_UNSAFE|VERSION_CONFLICT|WRITE_INTERCEPT/;
15443
- function Y_(e) {
15465
+ ]), Y_ = /校验失败|SCHEMA_INVALID|未注册|不存在|仅支持|必须是|NOT_OBJECT|PATH_UNSAFE|VERSION_CONFLICT|WRITE_INTERCEPT/;
15466
+ function X_(e) {
15444
15467
  let t = /* @__PURE__ */ new Map();
15445
15468
  for (let n of e) {
15446
15469
  let e = n?.tool_calls;
15447
- if (Array.isArray(e)) {
15448
- for (let n of e) if (q_.has(n.name)) {
15449
- let e = typeof n?.args?.jsonPath == "string" ? n.args.jsonPath : "";
15450
- t.set(e, {
15451
- path: e,
15470
+ if (Array.isArray(e)) for (let n of e) {
15471
+ if (!J_.has(n.name)) continue;
15472
+ let e = n.id, r = n?.args ?? {};
15473
+ if (n.name === "write") if (r.del && r.patch?.jsonPath) t.set(r.patch.jsonPath, {
15474
+ path: r.patch.jsonPath,
15475
+ op: "delete_data",
15476
+ callId: e
15477
+ });
15478
+ else if (Array.isArray(r.patches) && r.patches.length) for (let n of r.patches) {
15479
+ let r = typeof n?.jsonPath == "string" ? n.jsonPath : "";
15480
+ t.set(r, {
15481
+ path: r,
15482
+ op: n?.op === "remove" ? "delete_data" : "edit_data",
15483
+ callId: e
15484
+ });
15485
+ }
15486
+ else if (r.patch) {
15487
+ let n = typeof r.patch.jsonPath == "string" ? r.patch.jsonPath : "";
15488
+ t.set(n, {
15489
+ path: n,
15490
+ op: r.patch.op === "remove" ? "delete_data" : "edit_data",
15491
+ callId: e
15492
+ });
15493
+ } else t.set("", {
15494
+ path: "",
15495
+ op: "set_data",
15496
+ callId: e
15497
+ });
15498
+ else {
15499
+ let i = typeof r.jsonPath == "string" ? r.jsonPath : "";
15500
+ t.set(i, {
15501
+ path: i,
15452
15502
  op: n.name,
15453
- callId: n.id
15503
+ callId: e
15454
15504
  });
15455
15505
  }
15456
15506
  }
15457
15507
  }
15458
15508
  return [...t.values()];
15459
15509
  }
15460
- function X_(e) {
15510
+ function Z_(e) {
15461
15511
  let t = /* @__PURE__ */ new Map();
15462
15512
  for (let n of e) {
15463
15513
  let e = n?.tool_call_id, r = n?.content;
@@ -15465,7 +15515,7 @@ function X_(e) {
15465
15515
  }
15466
15516
  return t;
15467
15517
  }
15468
- function Z_(e, t) {
15518
+ function Q_(e, t) {
15469
15519
  if (t === "") return e;
15470
15520
  if (e == null) return;
15471
15521
  let n = e;
@@ -15475,16 +15525,16 @@ function Z_(e, t) {
15475
15525
  }
15476
15526
  return n;
15477
15527
  }
15478
- function Q_(e = {}) {
15528
+ function $_(e = {}) {
15479
15529
  let t = typeof e.root == "function" ? e.root : e.root === void 0 ? () => e.window ?? globalThis.window : () => e.root, n = typeof e.schemas == "function" ? e.schemas : () => e.schemas ?? {};
15480
15530
  return async ({ messages: e }) => {
15481
- let r = Y_(e);
15531
+ let r = X_(e);
15482
15532
  if (!r.length) return { ok: !0 };
15483
- let i = X_(e), a = n()[""], o = t(), s = [];
15533
+ let i = Z_(e), a = n()[""], o = t(), s = [];
15484
15534
  for (let { path: e, op: t, callId: n } of r) {
15485
15535
  let r = n ? i.get(n) : void 0;
15486
- if (r && J_.test(r)) continue;
15487
- let c = Z_(o, e);
15536
+ if (r && Y_.test(r)) continue;
15537
+ let c = Q_(o, e);
15488
15538
  if (t === "delete_data") c !== void 0 && s.push(`${e} 删除后读回仍有值,疑似未生效`);
15489
15539
  else if (c == null) s.push(`写入 ${e} 后读回为空,疑似未生效`);
15490
15540
  else if (a) {
@@ -15498,17 +15548,17 @@ function Q_(e = {}) {
15498
15548
  } : { ok: !0 };
15499
15549
  };
15500
15550
  }
15501
- function $_(e) {
15502
- return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
15503
- }
15504
15551
  function ev(e) {
15505
- return $_(e) ? e.model ?? e.modelName ?? "<实例>" : e.model ?? "<配置>";
15552
+ return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
15506
15553
  }
15507
- var tv = /无问题|没有问题|未发现问题|没有发现|没问题|未发现/;
15508
- function nv(e) {
15509
- return tv.test(e);
15554
+ function tv(e) {
15555
+ return ev(e) ? e.model ?? e.modelName ?? "<实例>" : e.model ?? "<配置>";
15510
15556
  }
15557
+ var nv = /无问题|没有问题|未发现问题|没有发现|没问题|未发现/;
15511
15558
  function rv(e) {
15559
+ return nv.test(e);
15560
+ }
15561
+ function iv(e) {
15512
15562
  let t = "", n = "";
15513
15563
  for (let r of e) r instanceof a ? t = typeof r.content == "string" ? r.content : "" : r instanceof i && !(r.tool_calls?.length > 0) && (n = typeof r.content == "string" ? r.content : "");
15514
15564
  return {
@@ -15516,8 +15566,8 @@ function rv(e) {
15516
15566
  lastReply: n
15517
15567
  };
15518
15568
  }
15519
- async function iv(e, t, n, r) {
15520
- let { lastUser: i, lastReply: a } = rv(e);
15569
+ async function av(e, t, n, r) {
15570
+ let { lastUser: i, lastReply: a } = iv(e);
15521
15571
  if (!a) return null;
15522
15572
  let o = Array.isArray(r) && r.length > 0, s = [
15523
15573
  "你是严格的对抗式审查者,目标是找出以下 AI 助手回复的错误并证明它有问题(事实错误 / 遗漏 / 逻辑矛盾 / 与需求不符)。",
@@ -15528,7 +15578,7 @@ async function iv(e, t, n, r) {
15528
15578
  ].join("\n"), c = "你是严格的对抗式审查者,只找问题不赞美。目标是反驳,不是改进。", l = n ? (e) => n(e.type, {
15529
15579
  ...e.data,
15530
15580
  source: "adversarial"
15531
- }) : void 0, u = await Zg($_(t) ? {
15581
+ }) : void 0, u = await Zg(ev(t) ? {
15532
15582
  llm: t,
15533
15583
  tools: r,
15534
15584
  maxToolRounds: o ? 4 : 1,
@@ -15553,17 +15603,17 @@ async function iv(e, t, n, r) {
15553
15603
  stage: "adversarial_verdict",
15554
15604
  verdict: u,
15555
15605
  source: "adversarial"
15556
- }), nv(u) ? null : u.trim();
15606
+ }), rv(u) ? null : u.trim();
15557
15607
  }
15558
15608
  //#endregion
15559
15609
  //#region src/core/mcp/client.ts
15560
- function av(e) {
15610
+ function ov(e) {
15561
15611
  let t = e?.content;
15562
15612
  if (!Array.isArray(t) || !t.length) return "";
15563
15613
  let n = t.map((e) => e.type === "text" && e.text ? e.text : e.type === "image" && e.data ? `[image:${String(e.data).slice(0, 32)}…]` : e.type === "audio" && e.data ? "[audio]" : e.type === "resource" && e.resource ? e.resource.text ?? e.resource.blob ?? "" : "").filter(Boolean).join("\n");
15564
15614
  return e?.isError ? `工具错误:${n}` : n;
15565
15615
  }
15566
- async function ov(e) {
15616
+ async function sv(e) {
15567
15617
  let t = new URL(e.url), n = e.requestInit;
15568
15618
  if (e.transport === "http") {
15569
15619
  let { StreamableHTTPClientTransport: e } = await import("@modelcontextprotocol/sdk/client/streamableHttp.js");
@@ -15576,8 +15626,8 @@ async function ov(e) {
15576
15626
  let { WebSocketClientTransport: r } = await import("@modelcontextprotocol/sdk/client/websocket.js");
15577
15627
  return new r(t);
15578
15628
  }
15579
- function sv(e, t) {
15580
- return r(async (n) => av(await t.callTool({
15629
+ function cv(e, t) {
15630
+ return r(async (n) => ov(await t.callTool({
15581
15631
  name: e.name,
15582
15632
  arguments: n
15583
15633
  })), {
@@ -15586,21 +15636,21 @@ function sv(e, t) {
15586
15636
  schema: e.inputSchema
15587
15637
  });
15588
15638
  }
15589
- async function cv(e) {
15590
- let { Client: t } = await import("@modelcontextprotocol/sdk/client"), n = await ov(e), r = new t({
15639
+ async function lv(e) {
15640
+ let { Client: t } = await import("@modelcontextprotocol/sdk/client"), n = await sv(e), r = new t({
15591
15641
  name: "page-agent-sdk",
15592
15642
  version: "1.0"
15593
15643
  }, { capabilities: {} });
15594
15644
  await r.connect(n);
15595
15645
  let { tools: i } = await r.listTools();
15596
15646
  return {
15597
- tools: i.map((e) => sv(e, r)),
15647
+ tools: i.map((e) => cv(e, r)),
15598
15648
  close: () => r.close()
15599
15649
  };
15600
15650
  }
15601
15651
  //#endregion
15602
15652
  //#region src/core/utils/rounds.ts
15603
- function lv(e) {
15653
+ function uv(e) {
15604
15654
  let t = [], n = null, r = 0;
15605
15655
  for (let i = 0; i < e.length; i++) {
15606
15656
  let a = e[i];
@@ -15614,32 +15664,32 @@ function lv(e) {
15614
15664
  }
15615
15665
  return n && t.push(n), t;
15616
15666
  }
15617
- function uv(e, t) {
15667
+ function dv(e, t) {
15618
15668
  let n = (e || "").replace(/```[\s\S]*?```/g, "[代码]").replace(/`([^`]+)`/g, "$1").replace(/[#*_>\-]\s?/g, "").replace(/\[(代码)\]/g, "「代码」").replace(/\s+/g, " ").trim();
15619
15669
  return n.length > t ? n.slice(0, t) + "…" : n;
15620
15670
  }
15621
- var dv = "【更早对话摘要";
15622
- function fv(e, t) {
15671
+ var fv = "【更早对话摘要";
15672
+ function pv(e, t) {
15623
15673
  return !t || !t.body ? e : {
15624
15674
  body: `${t.body}\n【续】\n${e.body}`,
15625
15675
  rounds: (t.rounds ?? 0) + (e.rounds ?? 0),
15626
15676
  cumulative: !0
15627
15677
  };
15628
15678
  }
15629
- function pv(e) {
15679
+ function mv(e) {
15630
15680
  return typeof e != "string" || !e.startsWith("【更早对话摘要") ? null : { body: e.replace(/^【[^】]*】\n?/, "") };
15631
15681
  }
15632
- function mv(e) {
15633
- return `${dv}${e.cumulative ? `(${e.rounds ?? 0} 轮,含累积)` : e.rounds ? `(${e.rounds} 轮)` : ""}】\n${e.body}`;
15682
+ function hv(e) {
15683
+ return `${fv}${e.cumulative ? `(${e.rounds ?? 0} 轮,含累积)` : e.rounds ? `(${e.rounds} 轮)` : ""}】\n${e.body}`;
15634
15684
  }
15635
- function hv(e, t) {
15685
+ function gv(e, t) {
15636
15686
  if (t <= 0) return { trimmed: !1 };
15637
- let n = lv(e);
15687
+ let n = uv(e);
15638
15688
  if (n.length <= t) return { trimmed: !1 };
15639
15689
  let r = n[n.length - t].startIdx, i = n.slice(0, n.length - t), a = n[0].startIdx, o = null;
15640
15690
  for (let t = 0; t < a; t++) {
15641
15691
  let n = e[t];
15642
- if (n.role === "system" && (o = pv(n.content), o)) break;
15692
+ if (n.role === "system" && (o = mv(n.content), o)) break;
15643
15693
  }
15644
15694
  return {
15645
15695
  trimmed: !0,
@@ -15647,9 +15697,9 @@ function hv(e, t) {
15647
15697
  deleteCount: r,
15648
15698
  summary: {
15649
15699
  role: "system",
15650
- content: mv(fv({
15700
+ content: hv(pv({
15651
15701
  body: i.map((e) => {
15652
- let t = uv(e.userMsg.content, 60) || "(空)", n = e.assistantMsgs[0] ? uv(e.assistantMsgs[0].content, 80) : "(无回复)";
15702
+ let t = dv(e.userMsg.content, 60) || "(空)", n = e.assistantMsgs[0] ? dv(e.assistantMsgs[0].content, 80) : "(无回复)";
15653
15703
  return `- 第${e.round}轮:${t} → ${n}`;
15654
15704
  }).join("\n"),
15655
15705
  rounds: i.length
@@ -15660,33 +15710,33 @@ function hv(e, t) {
15660
15710
  }
15661
15711
  //#endregion
15662
15712
  //#region src/core/composables/contextIndex.ts
15663
- var gv = /* @__PURE__ */ new Set(/* @__PURE__ */ "的.了.是.在.我.你.他.她.它.这.那.和.与.及.或.一个.什么.怎么.如何.为什么.可以.能.请.帮.一下.需要.想要.the.a.an.is.are.of.to.in.on".split("."));
15664
- function _v(e) {
15665
- return e.toLowerCase().split(/[^a-z0-9一-龥]+/i).map((e) => e.trim()).filter((e) => e.length >= 2 && !gv.has(e));
15666
- }
15713
+ var _v = /* @__PURE__ */ new Set(/* @__PURE__ */ "的.了.是.在.我.你.他.她.它.这.那.和.与.及.或.一个.什么.怎么.如何.为什么.可以.能.请.帮.一下.需要.想要.the.a.an.is.are.of.to.in.on".split("."));
15667
15714
  function vv(e) {
15715
+ return e.toLowerCase().split(/[^a-z0-9一-龥]+/i).map((e) => e.trim()).filter((e) => e.length >= 2 && !_v.has(e));
15716
+ }
15717
+ function yv(e) {
15668
15718
  let t = typeof e.content == "string" ? e.content : "";
15669
15719
  if (e.reasoning && (t += e.reasoning), e.steps) for (let n of e.steps) t += " " + (n.name || ""), n.args != null && (t += " " + (typeof n.args == "string" ? n.args : JSON.stringify(n.args))), n.result && (t += " " + n.result);
15670
15720
  return Ng(t);
15671
15721
  }
15672
- function yv(e) {
15673
- let t = vv(e.userMsg);
15674
- for (let n of e.assistantMsgs) t += vv(n);
15722
+ function bv(e) {
15723
+ let t = yv(e.userMsg);
15724
+ for (let n of e.assistantMsgs) t += yv(n);
15675
15725
  return t;
15676
15726
  }
15677
- function bv(e, t) {
15727
+ function xv(e, t) {
15678
15728
  return e.map((e) => {
15679
- let n = uv(e.userMsg.content, 60) || "(空)", r = e.assistantMsgs[0] ? uv(e.assistantMsgs[0].content, 80) : "(无回复)", i = e.assistantMsgs.flatMap((e) => (e.steps || []).map((e) => e.name)), a = i.length ? ` [工具: ${i.join(", ")}]` : "", o = "";
15729
+ let n = dv(e.userMsg.content, 60) || "(空)", r = e.assistantMsgs[0] ? dv(e.assistantMsgs[0].content, 80) : "(无回复)", i = e.assistantMsgs.flatMap((e) => (e.steps || []).map((e) => e.name)), a = i.length ? ` [工具: ${i.join(", ")}]` : "", o = "";
15680
15730
  if (t && t.size) {
15681
15731
  let n = [];
15682
- for (let r of e.assistantMsgs) for (let e of r.steps || []) e.name && t.has(e.name) && e.result && n.push(`${e.name}: ${uv(e.result, 120)}`);
15732
+ for (let r of e.assistantMsgs) for (let e of r.steps || []) e.name && t.has(e.name) && e.result && n.push(`${e.name}: ${dv(e.result, 120)}`);
15683
15733
  n.length && (o = `\n 字段提示: ${n.join(" | ")}`);
15684
15734
  }
15685
15735
  return `- 第${e.round}轮:${n} → ${r}${a}${o}`;
15686
15736
  }).join("\n");
15687
15737
  }
15688
- function xv(e, t, n) {
15689
- let r = _v(t);
15738
+ function Sv(e, t, n) {
15739
+ let r = vv(t);
15690
15740
  return r.length === 0 ? [] : e.map((e) => {
15691
15741
  let t = (e.userMsg.content + " " + e.assistantMsgs.map((e) => e.content).join(" ")).toLowerCase(), n = 0;
15692
15742
  for (let e of r) t.includes(e) && n++;
@@ -15698,7 +15748,7 @@ function xv(e, t, n) {
15698
15748
  }
15699
15749
  //#endregion
15700
15750
  //#region src/core/composables/useContextManager.ts
15701
- var Sv = {
15751
+ var Cv = {
15702
15752
  windowRounds: 6,
15703
15753
  summaryThresholdRounds: 8,
15704
15754
  toolResultMaxChars: 800,
@@ -15706,19 +15756,19 @@ var Sv = {
15706
15756
  recallTopK: 3,
15707
15757
  enableLLMSummary: !1
15708
15758
  };
15709
- function Cv(e = {}) {
15759
+ function wv(e = {}) {
15710
15760
  let t = {
15711
- ...Sv,
15761
+ ...Cv,
15712
15762
  ...e
15713
15763
  };
15714
15764
  async function n(e) {
15715
- let n = lv(e), r = e.length, i = "";
15765
+ let n = uv(e), r = e.length, i = "";
15716
15766
  if (n.length) {
15717
15767
  let t = n[0].startIdx;
15718
15768
  for (let n = 0; n < t; n++) {
15719
15769
  let t = e[n];
15720
15770
  if (t.role === "system") {
15721
- let e = pv(t.content);
15771
+ let e = mv(t.content);
15722
15772
  if (e) {
15723
15773
  i = e.body;
15724
15774
  break;
@@ -15739,9 +15789,9 @@ function Cv(e = {}) {
15739
15789
  }
15740
15790
  }), o, s, c;
15741
15791
  if (t.contextWindow && t.contextWindow > 0) {
15742
- if (n.reduce((e, t) => e + yv(t), 0) <= t.contextWindow * (t.summaryThresholdRatio ?? .5)) return a("none");
15792
+ if (n.reduce((e, t) => e + bv(t), 0) <= t.contextWindow * (t.summaryThresholdRatio ?? .5)) return a("none");
15743
15793
  let e = t.contextWindow * (t.windowRatio ?? .4), r = 0, i = 0;
15744
- for (let t = n.length - 1; t >= 0; t--) if (r += yv(n[t]), r >= e) {
15794
+ for (let t = n.length - 1; t >= 0; t--) if (r += bv(n[t]), r >= e) {
15745
15795
  i = t + 1;
15746
15796
  break;
15747
15797
  }
@@ -15754,12 +15804,12 @@ function Cv(e = {}) {
15754
15804
  }
15755
15805
  let l = [...e].reverse().find((e) => e.role === "user")?.content || "", u = t.preserveLastToolResults?.length ? new Set(t.preserveLastToolResults) : void 0, d, f;
15756
15806
  if (t.enableLLMSummary && t.llmInvoke) try {
15757
- d = await t.llmInvoke(bv(s, u)), f = c + "llm_summary";
15807
+ d = await t.llmInvoke(xv(s, u)), f = c + "llm_summary";
15758
15808
  } catch {
15759
- d = bv(s, u), f = c + "index_summary(llm_fallback)";
15809
+ d = xv(s, u), f = c + "index_summary(llm_fallback)";
15760
15810
  }
15761
- else d = bv(s, u), f = c + "index_summary";
15762
- let p = t.enableRecall ? xv(s, l, t.recallTopK) : [], m = p.length ? p.map((e) => `- 第${e.round}轮:${uv(e.userMsg.content, 60)} → ${e.assistantMsgs[0] ? uv(e.assistantMsgs[0].content, 80) : ""}`).join("\n") : "", h = i ? `${d}\n【更早累积摘要】\n${i}` : d, g = [`【对话历史摘要】以下是之前 ${s.length} 轮对话的要点(最新 ${o.length} 轮已完整保留):`, h];
15811
+ else d = xv(s, u), f = c + "index_summary";
15812
+ let p = t.enableRecall ? Sv(s, l, t.recallTopK) : [], m = p.length ? p.map((e) => `- 第${e.round}轮:${dv(e.userMsg.content, 60)} → ${e.assistantMsgs[0] ? dv(e.assistantMsgs[0].content, 80) : ""}`).join("\n") : "", h = i ? `${d}\n【更早累积摘要】\n${i}` : d, g = [`【对话历史摘要】以下是之前 ${s.length} 轮对话的要点(最新 ${o.length} 轮已完整保留):`, h];
15763
15813
  m && g.push("\n【与当前问题可能相关的早期对话】", m);
15764
15814
  let _ = t.getRegisteredData ?? t.getRegisteredSlots;
15765
15815
  if (_) try {
@@ -15796,8 +15846,8 @@ function Cv(e = {}) {
15796
15846
  }
15797
15847
  //#endregion
15798
15848
  //#region src/core/harness/summarization.ts
15799
- function wv(e = {}) {
15800
- let t = Cv(e);
15849
+ function Tv(e = {}) {
15850
+ let t = wv(e);
15801
15851
  return {
15802
15852
  name: "summarization",
15803
15853
  compressInput: async (e) => {
@@ -15811,7 +15861,7 @@ function wv(e = {}) {
15811
15861
  }
15812
15862
  //#endregion
15813
15863
  //#region src/core/tools/schemaUtils.ts
15814
- function Tv(e) {
15864
+ function Ev(e) {
15815
15865
  let t = e;
15816
15866
  for (let e = 0; e < 5 && t && t._def; e++) {
15817
15867
  if (t._def.innerType) {
@@ -15828,12 +15878,12 @@ function Tv(e) {
15828
15878
  return null;
15829
15879
  }
15830
15880
  }
15831
- function Ev(e, t, n) {
15881
+ function Dv(e, t, n) {
15832
15882
  if (!n || !e) return !0;
15833
- let r = Dv(t);
15883
+ let r = Ov(t);
15834
15884
  for (let t of e.split(".")) {
15835
15885
  if (!r) return !1;
15836
- if (r = Dv(r), r && r.shape && typeof r.shape == "object") {
15886
+ if (r = Ov(r), r && r.shape && typeof r.shape == "object") {
15837
15887
  let e = typeof r.shape == "function" ? r.shape() : r.shape;
15838
15888
  if (!(t in e)) return !1;
15839
15889
  r = e[t];
@@ -15843,7 +15893,7 @@ function Ev(e, t, n) {
15843
15893
  }
15844
15894
  return !0;
15845
15895
  }
15846
- function Dv(e) {
15896
+ function Ov(e) {
15847
15897
  let t = e;
15848
15898
  for (let e = 0; e < 8 && t && t._def; e++) {
15849
15899
  if (t._def.innerType) {
@@ -15862,59 +15912,59 @@ function Dv(e) {
15862
15912
  }
15863
15913
  return t;
15864
15914
  }
15865
- function Ov(e, t) {
15915
+ function kv(e, t) {
15866
15916
  if (!t) return e;
15867
- let n = Dv(e), r = t.split(".");
15917
+ let n = Ov(e), r = t.split(".");
15868
15918
  for (let e of r) {
15869
15919
  if (!n) return null;
15870
- if (n = Dv(n), n && n.shape && typeof n.shape == "object") n = (typeof n.shape == "function" ? n.shape() : n.shape)[e];
15920
+ if (n = Ov(n), n && n.shape && typeof n.shape == "object") n = (typeof n.shape == "function" ? n.shape() : n.shape)[e];
15871
15921
  else if (n && (n._def?.type === "array" || n.constructor?.name === "ZodArray")) n = n.element;
15872
15922
  else if (n && (n._def?.type === "union" || n._def?.type === "discriminatedUnion" || Array.isArray(n.options))) return null;
15873
15923
  else return null;
15874
15924
  }
15875
15925
  return n ?? null;
15876
15926
  }
15877
- function kv(e, t) {
15927
+ function Av(e, t) {
15878
15928
  if (typeof e != "object" || !e || !t) return e;
15879
- let n = Dv(t);
15929
+ let n = Ov(t);
15880
15930
  if (!n || !n.shape) {
15881
15931
  if (Array.isArray(e) && (n?._def?.type || n?.element)) {
15882
15932
  let t = n.element ?? n._def?.type;
15883
- return e.map((e) => kv(e, t));
15933
+ return e.map((e) => Av(e, t));
15884
15934
  }
15885
15935
  return e;
15886
15936
  }
15887
15937
  let r = typeof n.shape == "function" ? n.shape() : n.shape, i = {};
15888
15938
  for (let t of Object.keys(e)) if (t in r) {
15889
15939
  let n = e[t];
15890
- i[t] = kv(n, r[t]);
15940
+ i[t] = Av(n, r[t]);
15891
15941
  }
15892
15942
  return i;
15893
15943
  }
15894
- function Av(e, t) {
15944
+ function jv(e, t) {
15895
15945
  if (!t || typeof e != "object" || !e || Array.isArray(e)) return e;
15896
15946
  let n = new Set(t), r = {};
15897
15947
  for (let t of Object.keys(e)) n.has(t) && (r[t] = e[t]);
15898
15948
  return r;
15899
15949
  }
15900
- var jv = !1;
15901
- function Mv() {
15902
- jv ||= !0;
15950
+ var Mv = !1;
15951
+ function Nv() {
15952
+ Mv ||= !0;
15903
15953
  }
15904
- function Nv(e) {
15954
+ function Pv(e) {
15905
15955
  let t = e?._def?.checks;
15906
15956
  if (!Array.isArray(t)) return [];
15907
15957
  let n = [];
15908
15958
  for (let e of t) e?._zod?.def && n.push(e._zod.def);
15909
15959
  return n;
15910
15960
  }
15911
- function Pv(e) {
15961
+ function Fv(e) {
15912
15962
  return e === -(2 ** 53 - 1) || e === -Infinity;
15913
15963
  }
15914
- function Fv(e) {
15964
+ function Iv(e) {
15915
15965
  return e === 2 ** 53 - 1 || e === Infinity;
15916
15966
  }
15917
- function Iv(e) {
15967
+ function Lv(e) {
15918
15968
  let t = !1, n = !1, r = !1, i, a = e;
15919
15969
  for (let e = 0; e < 8 && a && a._def; e++) {
15920
15970
  let e = a._def.type;
@@ -15933,19 +15983,19 @@ function Iv(e) {
15933
15983
  break;
15934
15984
  }
15935
15985
  let o = a?._def?.type || "unknown";
15936
- a?._def || Mv();
15986
+ a?._def || Nv();
15937
15987
  let s = { type: o };
15938
15988
  t && (s.optional = !0), n && (s.nullable = !0), r && (s.default = i), a?.description && (s.description = a.description);
15939
15989
  let c = {};
15940
15990
  switch (o) {
15941
15991
  case "string": {
15942
15992
  a.minLength != null && (c.minLength = a.minLength), a.maxLength != null && (c.maxLength = a.maxLength);
15943
- let e = Nv(a).filter((e) => e.check === "string_format").map((e) => e.format).filter(Boolean);
15993
+ let e = Pv(a).filter((e) => e.check === "string_format").map((e) => e.format).filter(Boolean);
15944
15994
  e.length && (c.format = e.length === 1 ? e[0] : e);
15945
15995
  break;
15946
15996
  }
15947
15997
  case "number":
15948
- a.minValue != null && !Pv(a.minValue) && (c.min = a.minValue), a.maxValue != null && !Fv(a.maxValue) && (c.max = a.maxValue), a.isInt && (c.int = !0), a.format && a.format !== "number" && (c.format = a.format);
15998
+ a.minValue != null && !Fv(a.minValue) && (c.min = a.minValue), a.maxValue != null && !Iv(a.maxValue) && (c.max = a.maxValue), a.isInt && (c.int = !0), a.format && a.format !== "number" && (c.format = a.format);
15949
15999
  break;
15950
16000
  case "enum":
15951
16001
  c.values = a.options;
@@ -15956,32 +16006,32 @@ function Iv(e) {
15956
16006
  break;
15957
16007
  }
15958
16008
  case "array":
15959
- c.item = Iv(a.element);
15960
- for (let e of Nv(a)) e.check === "min_length" ? c.minLength = e.minimum : e.check === "max_length" ? c.maxLength = e.maximum : e.check === "length_equals" && (c.length = e.length);
16009
+ c.item = Lv(a.element);
16010
+ for (let e of Pv(a)) e.check === "min_length" ? c.minLength = e.minimum : e.check === "max_length" ? c.maxLength = e.maximum : e.check === "length_equals" && (c.length = e.length);
15961
16011
  break;
15962
16012
  case "object": {
15963
16013
  let e = typeof a.shape == "function" ? a.shape() : a.shape;
15964
- c.shape = Object.fromEntries(Object.entries(e || {}).map(([e, t]) => [e, Iv(t)]));
16014
+ c.shape = Object.fromEntries(Object.entries(e || {}).map(([e, t]) => [e, Lv(t)]));
15965
16015
  break;
15966
16016
  }
15967
16017
  case "union": {
15968
- let e = (a._def?.options || []).map((e) => Iv(e));
16018
+ let e = (a._def?.options || []).map((e) => Lv(e));
15969
16019
  e.length && (c.anyOf = e);
15970
16020
  break;
15971
16021
  }
15972
- case "record": a._def?.valueType && (c.valueType = Iv(a._def.valueType));
16022
+ case "record": a._def?.valueType && (c.valueType = Lv(a._def.valueType));
15973
16023
  }
15974
16024
  return Object.keys(c).length && (s.constraints = c), s;
15975
16025
  }
15976
- function Lv(e) {
16026
+ function Rv(e) {
15977
16027
  let t = [];
15978
16028
  return e.minLength !== void 0 && t.push(`minLen=${e.minLength}`), e.maxLength !== void 0 && t.push(`maxLen=${e.maxLength}`), e.length !== void 0 && t.push(`len=${e.length}`), e.min !== void 0 && t.push(`min=${e.min}`), e.max !== void 0 && t.push(`max=${e.max}`), e.int && t.push("int"), e.format && t.push(`format=${Array.isArray(e.format) ? e.format.join("|") : e.format}`), e.values && t.push(`enum=[${e.values.map((e) => String(e)).join("|")}]`), e.value !== void 0 && t.push(`=${JSON.stringify(e.value)}`), t.join(", ");
15979
16029
  }
15980
- function Rv(e, t) {
15981
- let n = t.constraints ? Lv(t.constraints) : "", r = n ? `[${n}]` : "", i = t.optional ? "?" : "", a = t.description ? `: ${t.description}` : "";
16030
+ function zv(e, t) {
16031
+ let n = t.constraints ? Rv(t.constraints) : "", r = n ? `[${n}]` : "", i = t.optional ? "?" : "", a = t.description ? `: ${t.description}` : "";
15982
16032
  return `- ${e} (${t.type}${i})${r}${a}`;
15983
16033
  }
15984
- function zv(e) {
16034
+ function Bv(e) {
15985
16035
  if (!e) return "";
15986
16036
  try {
15987
16037
  let t = e;
@@ -16001,18 +16051,18 @@ function zv(e) {
16001
16051
  break;
16002
16052
  }
16003
16053
  let n = t?.shape ? typeof t.shape == "function" ? t.shape() : t.shape : null;
16004
- if (n && typeof n == "object" && Object.keys(n).length) return Object.entries(n).map(([e, t]) => Rv(e, Iv(t))).join("\n");
16054
+ if (n && typeof n == "object" && Object.keys(n).length) return Object.entries(n).map(([e, t]) => zv(e, Lv(t))).join("\n");
16005
16055
  } catch {}
16006
16056
  try {
16007
- return Rv("(root)", Iv(e));
16057
+ return zv("(root)", Lv(e));
16008
16058
  } catch {}
16009
16059
  return "";
16010
16060
  }
16011
- function Bv(e, t) {
16012
- let n = Iv(t), r = n.description ? `: ${n.description}` : "";
16061
+ function Vv(e, t) {
16062
+ let n = Lv(t), r = n.description ? `: ${n.description}` : "";
16013
16063
  return `- ${e} (${n.type})${r}`;
16014
16064
  }
16015
- function Vv(e) {
16065
+ function Hv(e) {
16016
16066
  if (!e) return "";
16017
16067
  try {
16018
16068
  let t = e;
@@ -16032,13 +16082,13 @@ function Vv(e) {
16032
16082
  break;
16033
16083
  }
16034
16084
  let n = t?.shape ? typeof t.shape == "function" ? t.shape() : t.shape : null;
16035
- if (n && typeof n == "object" && Object.keys(n).length) return Object.entries(n).map(([e, t]) => Bv(e, t)).join("\n");
16085
+ if (n && typeof n == "object" && Object.keys(n).length) return Object.entries(n).map(([e, t]) => Vv(e, t)).join("\n");
16036
16086
  } catch {}
16037
16087
  return "";
16038
16088
  }
16039
16089
  //#endregion
16040
16090
  //#region src/core/presets.ts
16041
- var Hv = {
16091
+ var Uv = {
16042
16092
  pageBuilder: { systemPrompt: "你是页面构建助手。按用户意图读写主数据(经 data 声明 + schema 校验),改完页面实时更新。" },
16043
16093
  researcher: {
16044
16094
  systemPrompt: "你是调研助手。多路调研用 spawn_agents 并行委派子 agent(各负责一个方向);单份资料用 fetch_document 抓取;最后结构化汇总,给出结论与依据。",
@@ -16052,21 +16102,21 @@ var Hv = {
16052
16102
  memory: !1,
16053
16103
  subagent: !1
16054
16104
  } }
16055
- }, Uv = { reliableWriteRules: [
16105
+ }, Wv = { reliableWriteRules: [
16056
16106
  "【可靠写入规则】",
16057
16107
  "1. 改任何字段前,先用 read({ jsonPath }) 读其当前真实值,基于真实值改,不要凭记忆;",
16058
16108
  "2. 若不确定可操作哪些字段,先 read() 不传 jsonPath 查看主数据说明 + schema 声明字段(集成方可经 sdk.setData 运行时替换 schema,以工具返回为准,勿凭旧记忆);",
16059
16109
  "3. 不确定某字段结构时,read({ jsonPath }) 返回含格式说明,字段以返回为准;",
16060
16110
  "4. 写入若被 schema 校验拒绝(返回结构化错误含字段名与期望类型),按错误修正后重试,不要放弃;",
16061
16111
  "5. 优先用 write 的 patch 增量改(只发改动,如 write({ value, patch:{ op, jsonPath } })),避免整体重传大 JSON 被截断。"
16062
- ].join("\n") }, Wv = 15, Gv = 4e3;
16063
- function Kv(e, t) {
16112
+ ].join("\n") }, Gv = 15, Kv = 4e3;
16113
+ function qv(e, t) {
16064
16114
  if (!e) return "";
16065
- let n = zv(e);
16115
+ let n = Bv(e);
16066
16116
  if (n) {
16067
- let r = t?.maxKeys ?? Wv, i = t?.maxChars ?? Gv;
16117
+ let r = t?.maxKeys ?? Gv, i = t?.maxChars ?? Kv;
16068
16118
  if (n.split("\n").filter((e) => e.trim().startsWith("- ")).length > r || n.length > i) {
16069
- let t = Vv(e);
16119
+ let t = Hv(e);
16070
16120
  if (t) return "## 可操作数据(顶层概览;深层约束查 schema_data)\n" + t + "\n提示:改某组件深层字段前,先 schema_data({jsonPath}) 查完整约束(advanced);或 read 子路径见实际值。";
16071
16121
  }
16072
16122
  return n;
@@ -16075,36 +16125,36 @@ function Kv(e, t) {
16075
16125
  }
16076
16126
  //#endregion
16077
16127
  //#region src/core/sdk/promptBuilder.ts
16078
- var qv = [
16128
+ var Jv = [
16079
16129
  "你是一个 JSON 操作助手。集成方声明了一个主数据对象(含 zod schema 校验),你通过专用工具安全地读写它来完成任务。",
16080
16130
  "所有写操作都经范围控制(仅 schema 声明字段内)与 schema 校验(不合法会返回结构化错误而非写入),并自动留快照可回退。",
16081
16131
  "大对象/数组优先用增量 patch(只发改动)而非整体重传,避免输出被截断。",
16082
16132
  "---",
16083
- Uv.reliableWriteRules
16133
+ Wv.reliableWriteRules
16084
16134
  ].join("\n\n");
16085
- function Jv(e, t) {
16135
+ function Yv(e, t) {
16086
16136
  if (!e) return "";
16087
- let n = Kv(e.schema, t);
16137
+ let n = qv(e.schema, t);
16088
16138
  return `\n\n## 可操作数据(字段以 read 工具返回的实际值为准)\n${e.description ? e.description + "\n" : ""}${n}`;
16089
16139
  }
16090
- function Yv(e) {
16140
+ function Xv(e) {
16091
16141
  let t = e.appendReliableWriteRules !== !1;
16092
- return e.systemPrompt ? t ? e.systemPrompt + "\n\n---\n\n" + Uv.reliableWriteRules : e.systemPrompt : qv;
16142
+ return e.systemPrompt ? t ? e.systemPrompt + "\n\n---\n\n" + Wv.reliableWriteRules : e.systemPrompt : Jv;
16093
16143
  }
16094
16144
  //#endregion
16095
16145
  //#region src/core/sdk/llmResolver.ts
16096
- function Xv(e) {
16146
+ function Zv(e) {
16097
16147
  return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
16098
16148
  }
16099
- function Zv(e) {
16149
+ function Qv(e) {
16100
16150
  let t = e.content;
16101
16151
  return typeof t == "string" ? t : Array.isArray(t) ? t.map((e) => typeof e == "string" ? e : e?.text ?? "").join("") : String(t ?? "");
16102
16152
  }
16103
- function Qv(e) {
16153
+ function $v(e) {
16104
16154
  let t = e.summaryLlm ?? e.llm;
16105
16155
  if (!t) return;
16106
16156
  let r = e.summaryTemperature ?? .3, i = e.summaryMaxTokens ?? 1024, s = e.summaryTimeoutMs ?? 15e3, c;
16107
- if (Xv(t)) c = t;
16157
+ if (Zv(t)) c = t;
16108
16158
  else {
16109
16159
  let a = t;
16110
16160
  if (!a.apiKey) {
@@ -16126,26 +16176,26 @@ function Qv(e) {
16126
16176
  return async (e) => {
16127
16177
  let t = new AbortController(), n = setTimeout(() => t.abort(), s);
16128
16178
  try {
16129
- return Zv(await c.invoke([new o("你是对话历史压缩助手。把下面按轮次索引的对话要点,改写成一段连贯、紧凑的中文摘要,保留关键事实、用户意图与已用工具,不要编造。直接输出摘要正文。"), new a(e)], { signal: t.signal })).trim();
16179
+ return Qv(await c.invoke([new o("你是对话历史压缩助手。把下面按轮次索引的对话要点,改写成一段连贯、紧凑的中文摘要,保留关键事实、用户意图与已用工具,不要编造。直接输出摘要正文。"), new a(e)], { signal: t.signal })).trim();
16130
16180
  } finally {
16131
16181
  clearTimeout(n);
16132
16182
  }
16133
16183
  };
16134
16184
  }
16135
- function $v(e) {
16136
- let t = Xv(e.llm) ? void 0 : e.llm;
16185
+ function ey(e) {
16186
+ let t = Zv(e.llm) ? void 0 : e.llm;
16137
16187
  return {
16138
16188
  modelCaps: Mg({
16139
16189
  model: t?.model,
16140
16190
  contextWindow: e.contextWindow ?? t?.contextWindow,
16141
16191
  maxOutputTokens: e.maxOutputTokens ?? t?.maxOutputTokens
16142
16192
  }),
16143
- summaryLlmInvoke: Qv(e)
16193
+ summaryLlmInvoke: $v(e)
16144
16194
  };
16145
16195
  }
16146
16196
  //#endregion
16147
16197
  //#region src/core/sdk/conflictManager.ts
16148
- function ey(e) {
16198
+ function ty(e) {
16149
16199
  let t = /* @__PURE__ */ U(null), n = 0;
16150
16200
  function r(r) {
16151
16201
  return new Promise((i) => {
@@ -16174,7 +16224,7 @@ function ey(e) {
16174
16224
  }
16175
16225
  //#endregion
16176
16226
  //#region src/core/utils/id.ts
16177
- function ty() {
16227
+ function ny() {
16178
16228
  try {
16179
16229
  if (typeof crypto < "u" && typeof crypto.randomUUID == "function") return crypto.randomUUID();
16180
16230
  } catch {}
@@ -16182,57 +16232,57 @@ function ty() {
16182
16232
  }
16183
16233
  //#endregion
16184
16234
  //#region src/core/backends/storage.ts
16185
- var ny = "chat-sdk", ry = 52428800, iy = 4194304, ay = 10485760, oy = .9, sy = 500, cy = 300, ly = "__meta__", uy = "v:1", dy = [
16235
+ var ry = "chat-sdk", iy = 52428800, ay = 4194304, oy = 10485760, sy = .9, cy = 500, ly = 300, uy = "__meta__", dy = "v:1", fy = [
16186
16236
  "messages",
16187
16237
  "vfs",
16188
16238
  "todos",
16189
16239
  "memory"
16190
16240
  ];
16191
- function fy(e) {
16192
- return e === "local" || e === "session" ? iy : ry;
16193
- }
16194
16241
  function py(e) {
16242
+ return e === "local" || e === "session" ? ay : iy;
16243
+ }
16244
+ function my(e) {
16195
16245
  if (typeof e != "object" || !e) return !1;
16196
16246
  let t = e;
16197
16247
  return t.name === "QuotaExceededError" || t.name === "NS_ERROR_DOM_QUOTA_REACHED" || t.code === 22 || t.code === 1014;
16198
16248
  }
16199
- function my(e, t, n, r) {
16249
+ function hy(e, t, n, r) {
16200
16250
  return [
16201
- uy,
16251
+ dy,
16202
16252
  e,
16203
16253
  t,
16204
16254
  n,
16205
16255
  r
16206
16256
  ].join("::");
16207
16257
  }
16208
- function hy(e, t, n) {
16258
+ function gy(e, t, n) {
16209
16259
  return [
16210
- uy,
16260
+ dy,
16211
16261
  e,
16212
16262
  t,
16213
16263
  n
16214
16264
  ].join("::") + "::";
16215
16265
  }
16216
- function gy(e, t) {
16266
+ function _y(e, t) {
16217
16267
  return [
16218
- uy,
16268
+ dy,
16219
16269
  e,
16220
16270
  t
16221
16271
  ].join("::") + "::";
16222
16272
  }
16223
- function _y(e) {
16224
- return [uy, e].join("::") + "::";
16273
+ function vy(e) {
16274
+ return [dy, e].join("::") + "::";
16225
16275
  }
16226
- var vy = null;
16227
- function yy(e) {
16228
- vy ||= new TextEncoder();
16276
+ var yy = null;
16277
+ function by(e) {
16278
+ yy ||= new TextEncoder();
16229
16279
  try {
16230
- return vy.encode(JSON.stringify(e)).length;
16280
+ return yy.encode(JSON.stringify(e)).length;
16231
16281
  } catch {
16232
16282
  return 0;
16233
16283
  }
16234
16284
  }
16235
- function by(e, t, n) {
16285
+ function xy(e, t, n) {
16236
16286
  let r = e.reduce((e, t) => e + t.bytes, 0);
16237
16287
  if (r <= t) return [];
16238
16288
  let i = t * n, a = [...e].sort((e, t) => e.lastAccessed - t.lastAccessed), o = [];
@@ -16242,7 +16292,7 @@ function by(e, t, n) {
16242
16292
  }
16243
16293
  return o;
16244
16294
  }
16245
- function xy() {
16295
+ function Sy() {
16246
16296
  let e = /* @__PURE__ */ new Map();
16247
16297
  return {
16248
16298
  async get(t) {
@@ -16262,7 +16312,7 @@ function xy() {
16262
16312
  }
16263
16313
  };
16264
16314
  }
16265
- function Sy(e) {
16315
+ function Cy(e) {
16266
16316
  return new Promise((t, n) => {
16267
16317
  if (typeof indexedDB > "u") {
16268
16318
  n(/* @__PURE__ */ Error("indexedDB 不可用"));
@@ -16323,7 +16373,7 @@ function Sy(e) {
16323
16373
  }, r.onerror = () => n(r.error);
16324
16374
  });
16325
16375
  }
16326
- function Cy(e) {
16376
+ function wy(e) {
16327
16377
  return {
16328
16378
  async get(t) {
16329
16379
  let n = e.getItem(t);
@@ -16357,12 +16407,12 @@ function Cy(e) {
16357
16407
  }
16358
16408
  };
16359
16409
  }
16360
- function wy(e, t, n) {
16410
+ function Ty(e, t, n) {
16361
16411
  let r = (e.get(t) ?? Promise.resolve()).then(n, n);
16362
16412
  return e.set(t, r.then(() => void 0, () => void 0)), r;
16363
16413
  }
16364
- function Ty(e = {}) {
16365
- let t = e.dbName ?? ny, n = e.backend ?? "indexed", r = e.maxBytes ?? fy(n), i = e.maxBytesPerSession ?? ay, a = e.evictionWatermark ?? oy, o = e.debounceMs ?? sy, s = /* @__PURE__ */ new Set();
16414
+ function Ey(e = {}) {
16415
+ let t = e.dbName ?? ry, n = e.backend ?? "indexed", r = e.maxBytes ?? py(n), i = e.maxBytesPerSession ?? oy, a = e.evictionWatermark ?? sy, o = e.debounceMs ?? cy, s = /* @__PURE__ */ new Set();
16366
16416
  function c(e) {
16367
16417
  for (let t of s) try {
16368
16418
  t(e);
@@ -16375,16 +16425,16 @@ function Ty(e = {}) {
16375
16425
  try {
16376
16426
  if (n === "indexed") {
16377
16427
  if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
16378
- l = await Sy(t), d(!0);
16428
+ l = await Cy(t), d(!0);
16379
16429
  } else if (n === "session") {
16380
16430
  if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
16381
- l = Cy(sessionStorage), d(!0);
16431
+ l = wy(sessionStorage), d(!0);
16382
16432
  } else if (n === "local") {
16383
16433
  if (typeof localStorage > "u") throw Error("localStorage 不可用");
16384
- l = Cy(localStorage), d(!0);
16385
- } else l = xy(), d(!1);
16434
+ l = wy(localStorage), d(!0);
16435
+ } else l = Sy(), d(!1);
16386
16436
  } catch (e) {
16387
- l = xy();
16437
+ l = Sy();
16388
16438
  let t = e instanceof Error ? e.message : String(e);
16389
16439
  d(!1), Promise.resolve().then(() => c({
16390
16440
  type: "degraded",
@@ -16394,10 +16444,10 @@ function Ty(e = {}) {
16394
16444
  })();
16395
16445
  let p = /* @__PURE__ */ new Map(), m = /* @__PURE__ */ new Map(), h = /* @__PURE__ */ new Map();
16396
16446
  function g(e, n, r, a) {
16397
- let o = my(t, r, a, ly);
16398
- return wy(h, o, async () => {
16447
+ let o = hy(t, r, a, uy);
16448
+ return Ty(h, o, async () => {
16399
16449
  let t = async () => {
16400
- let t = await l.get(o), s = await l.get(e), u = s == null ? 0 : yy(s), d = yy(n), f = (t?.bytes ?? 0) + (d - u);
16450
+ let t = await l.get(o), s = await l.get(e), u = s == null ? 0 : by(s), d = by(n), f = (t?.bytes ?? 0) + (d - u);
16401
16451
  if (f > i) {
16402
16452
  c({
16403
16453
  type: "quota",
@@ -16419,12 +16469,12 @@ function Ty(e = {}) {
16419
16469
  try {
16420
16470
  await t();
16421
16471
  } catch (e) {
16422
- if (py(e) && !u) {
16472
+ if (my(e) && !u) {
16423
16473
  u = !0;
16424
16474
  try {
16425
16475
  await b();
16426
16476
  } catch {}
16427
- l = xy(), Promise.resolve().then(() => c({
16477
+ l = Sy(), Promise.resolve().then(() => c({
16428
16478
  type: "degraded",
16429
16479
  reason: "存储配额超限(QuotaExceededError),已淘汰最旧会话并降级内存"
16430
16480
  }));
@@ -16436,7 +16486,7 @@ function Ty(e = {}) {
16436
16486
  });
16437
16487
  }
16438
16488
  function _(e, n, r, i) {
16439
- let a = my(t, e, n, r), s = p.get(a);
16489
+ let a = hy(t, e, n, r), s = p.get(a);
16440
16490
  s && s.resolve();
16441
16491
  let c = m.get(a);
16442
16492
  return c && clearTimeout(c), new Promise((t) => {
@@ -16463,15 +16513,15 @@ function Ty(e = {}) {
16463
16513
  function y() {
16464
16514
  v ||= setTimeout(() => {
16465
16515
  v = null, b();
16466
- }, cy);
16516
+ }, ly);
16467
16517
  }
16468
16518
  async function b() {
16469
16519
  let e = [];
16470
- await l.scan(_y(t), (t, n) => {
16520
+ await l.scan(vy(t), (t, n) => {
16471
16521
  t.endsWith("::__meta__") && e.push(n);
16472
16522
  });
16473
- let n = by(e, r, a);
16474
- for (let e of n) await l.clearPrefix(hy(t, e.agentId, e.sessionId)), c({
16523
+ let n = xy(e, r, a);
16524
+ for (let e of n) await l.clearPrefix(gy(t, e.agentId, e.sessionId)), c({
16475
16525
  type: "evicted",
16476
16526
  agentId: e.agentId,
16477
16527
  sessionId: e.sessionId,
@@ -16482,13 +16532,13 @@ function Ty(e = {}) {
16482
16532
  ready: f,
16483
16533
  async listSessions(e) {
16484
16534
  let n = [];
16485
- return await l.scan(gy(t, e), (e, t) => {
16535
+ return await l.scan(_y(t, e), (e, t) => {
16486
16536
  e.endsWith("::__meta__") && n.push(t);
16487
16537
  }), n.sort((e, t) => t.lastAccessed - e.lastAccessed);
16488
16538
  },
16489
16539
  async load(e, n) {
16490
- let r = my(t, e, n, ly);
16491
- return await wy(h, r, async () => {
16540
+ let r = hy(t, e, n, uy);
16541
+ return await Ty(h, r, async () => {
16492
16542
  let i = await l.get(r);
16493
16543
  if (!i) return;
16494
16544
  let a = {
@@ -16497,8 +16547,8 @@ function Ty(e = {}) {
16497
16547
  todos: [],
16498
16548
  memory: ""
16499
16549
  };
16500
- for (let r of dy) {
16501
- let i = await l.get(my(t, e, n, r));
16550
+ for (let r of fy) {
16551
+ let i = await l.get(hy(t, e, n, r));
16502
16552
  i != null && (a[r] = i);
16503
16553
  }
16504
16554
  return i.lastAccessed = Date.now(), await l.set(r, i), a;
@@ -16506,7 +16556,7 @@ function Ty(e = {}) {
16506
16556
  },
16507
16557
  async save(e, t, n) {
16508
16558
  let r = [];
16509
- for (let i of dy) n[i] !== void 0 && r.push(_(e, t, i, n[i]));
16559
+ for (let i of fy) n[i] !== void 0 && r.push(_(e, t, i, n[i]));
16510
16560
  await Promise.all(r);
16511
16561
  },
16512
16562
  async flush() {
@@ -16520,10 +16570,10 @@ function Ty(e = {}) {
16520
16570
  })), c({ type: "flush" }), await b();
16521
16571
  },
16522
16572
  async deleteSession(e, n) {
16523
- await l.clearPrefix(hy(t, e, n));
16573
+ await l.clearPrefix(gy(t, e, n));
16524
16574
  },
16525
16575
  async createSession(e, n, r) {
16526
- let i = r ?? ty(), a = Date.now(), o = {
16576
+ let i = r ?? ny(), a = Date.now(), o = {
16527
16577
  agentId: e,
16528
16578
  sessionId: i,
16529
16579
  createdAt: a,
@@ -16531,7 +16581,7 @@ function Ty(e = {}) {
16531
16581
  bytes: 0,
16532
16582
  title: n
16533
16583
  };
16534
- return await l.set(my(t, e, i, ly), o), i;
16584
+ return await l.set(hy(t, e, i, uy), o), i;
16535
16585
  },
16536
16586
  onEvent(e) {
16537
16587
  s.add(e);
@@ -16546,15 +16596,15 @@ function Ty(e = {}) {
16546
16596
  }
16547
16597
  //#endregion
16548
16598
  //#region src/core/sdk/optionsResolver.ts
16549
- function Ey(e) {
16550
- return e === void 0 || e === !1 ? null : typeof e == "string" ? Ty({ backend: e }) : e.enabled === !1 ? null : Ty(e);
16551
- }
16552
16599
  function Dy(e) {
16600
+ return e === void 0 || e === !1 ? null : typeof e == "string" ? Ey({ backend: e }) : e.enabled === !1 ? null : Ey(e);
16601
+ }
16602
+ function Oy(e) {
16553
16603
  return e.dialog ?? {};
16554
16604
  }
16555
16605
  //#endregion
16556
16606
  //#region src/core/sdk/events.ts
16557
- function Oy(e) {
16607
+ function ky(e) {
16558
16608
  let t = /* @__PURE__ */ new Set(), n = (n) => {
16559
16609
  if (n.type !== "approval_request") {
16560
16610
  if (e) try {
@@ -16580,7 +16630,7 @@ function Oy(e) {
16580
16630
  }
16581
16631
  //#endregion
16582
16632
  //#region src/core/sdk/contextPreset.ts
16583
- var ky = {
16633
+ var Ay = {
16584
16634
  auto: {
16585
16635
  summaryThresholdRatio: .5,
16586
16636
  windowRatio: .4,
@@ -16608,7 +16658,7 @@ var ky = {
16608
16658
  enableRecall: !0,
16609
16659
  enableLLMSummary: !0
16610
16660
  }
16611
- }, Ay = {
16661
+ }, jy = {
16612
16662
  auto: ["describe_data", "read"],
16613
16663
  conservative: ["describe_data"],
16614
16664
  aggressive: ["describe_data", "read"],
@@ -16619,8 +16669,8 @@ var ky = {
16619
16669
  "search_data"
16620
16670
  ]
16621
16671
  };
16622
- function jy(e, t) {
16623
- let n = ky[e.contextPreset ?? "auto"] ?? {}, r = e.contextOptions === !1 ? {} : e.contextOptions ?? {};
16672
+ function My(e, t) {
16673
+ let n = Ay[e.contextPreset ?? "auto"] ?? {}, r = e.contextOptions === !1 ? {} : e.contextOptions ?? {};
16624
16674
  return {
16625
16675
  ...n,
16626
16676
  ...r,
@@ -16630,7 +16680,7 @@ function jy(e, t) {
16630
16680
  }
16631
16681
  //#endregion
16632
16682
  //#region src/core/sdk/middlewareStack.ts
16633
- var My = {
16683
+ var Ny = {
16634
16684
  dataHint: 10,
16635
16685
  usageHints: 20,
16636
16686
  todos: 30,
@@ -16647,29 +16697,29 @@ var My = {
16647
16697
  subagents: 140,
16648
16698
  augmentSystem: 150
16649
16699
  };
16650
- function Ny(e) {
16700
+ function Py(e) {
16651
16701
  return e.map((e, t) => ({
16652
16702
  m: e,
16653
16703
  i: t,
16654
- p: My[e.name] ?? Infinity
16704
+ p: Ny[e.name] ?? Infinity
16655
16705
  })).sort((e, t) => e.p - t.p || e.i - t.i).map((e) => e.m);
16656
16706
  }
16657
16707
  //#endregion
16658
16708
  //#region src/core/tools/jsonUtils.ts
16659
- var Py = /* @__PURE__ */ new Set([
16709
+ var Fy = /* @__PURE__ */ new Set([
16660
16710
  "__proto__",
16661
16711
  "constructor",
16662
16712
  "prototype"
16663
16713
  ]);
16664
- function Fy(e) {
16665
- return e.split(".").some((e) => Py.has(e));
16666
- }
16667
- function Iy(e, t) {
16668
- if (!(!t || typeof t != "object" || Array.isArray(t))) for (let n of Object.keys(t)) Py.has(n) || (e[n] = t[n]);
16714
+ function Iy(e) {
16715
+ return e.split(".").some((e) => Fy.has(e));
16669
16716
  }
16670
16717
  function Ly(e, t) {
16718
+ if (!(!t || typeof t != "object" || Array.isArray(t))) for (let n of Object.keys(t)) Fy.has(n) || (e[n] = t[n]);
16719
+ }
16720
+ function Ry(e, t) {
16671
16721
  if (!t) return e;
16672
- if (Fy(t)) return;
16722
+ if (Iy(t)) return;
16673
16723
  let n = t.split("."), r = e;
16674
16724
  for (let e of n) {
16675
16725
  if (r == null) return;
@@ -16677,8 +16727,8 @@ function Ly(e, t) {
16677
16727
  }
16678
16728
  return r;
16679
16729
  }
16680
- function Ry(e, t, n) {
16681
- if (!t || Fy(t)) return;
16730
+ function zy(e, t, n) {
16731
+ if (!t || Iy(t)) return;
16682
16732
  let r = t.split("."), i = e;
16683
16733
  for (let e = 0; e < r.length - 1; e++) {
16684
16734
  let t = r[e];
@@ -16686,8 +16736,8 @@ function Ry(e, t, n) {
16686
16736
  }
16687
16737
  i[r[r.length - 1]] = n;
16688
16738
  }
16689
- function zy(e, t) {
16690
- if (!t || Fy(t)) return !1;
16739
+ function By(e, t) {
16740
+ if (!t || Iy(t)) return !1;
16691
16741
  let n = t.split("."), r = e;
16692
16742
  for (let e = 0; e < n.length - 1; e++) {
16693
16743
  if (r == null) return !1;
@@ -16696,10 +16746,10 @@ function zy(e, t) {
16696
16746
  let i = n[n.length - 1];
16697
16747
  return r == null || !(i in r) ? !1 : (Array.isArray(r) && /^\d+$/.test(i) ? r.splice(Number(i), 1) : delete r[i], !0);
16698
16748
  }
16699
- function By(e) {
16749
+ function Vy(e) {
16700
16750
  return e === void 0 ? void 0 : JSON.parse(JSON.stringify(e));
16701
16751
  }
16702
- function Vy(e) {
16752
+ function Hy(e) {
16703
16753
  if (typeof e != "string") return { parsed: e };
16704
16754
  let t = e.trim();
16705
16755
  if (!t) return { parsed: e };
@@ -16710,23 +16760,23 @@ function Vy(e) {
16710
16760
  return n ? { parseError: t } : { parsed: e };
16711
16761
  }
16712
16762
  }
16713
- function Hy(e, t) {
16763
+ function Uy(e, t) {
16714
16764
  if (typeof e != "object" || !e) return e;
16715
16765
  let n = new Set(t);
16716
- if (Array.isArray(e)) return e.map((e) => Hy(e, t));
16766
+ if (Array.isArray(e)) return e.map((e) => Uy(e, t));
16717
16767
  let r = {};
16718
16768
  for (let t of Object.keys(e)) n.has(t) && (r[t] = e[t]);
16719
16769
  return r;
16720
16770
  }
16721
- function Uy(e, t) {
16771
+ function Wy(e, t) {
16722
16772
  if (typeof e != "object" || !e) return e;
16723
16773
  if (t <= 0) return Array.isArray(e) ? `[...${e.length}]` : "{...}";
16724
- if (Array.isArray(e)) return e.map((e) => Uy(e, t - 1));
16774
+ if (Array.isArray(e)) return e.map((e) => Wy(e, t - 1));
16725
16775
  let n = {};
16726
- for (let r of Object.keys(e)) n[r] = Uy(e[r], t - 1);
16776
+ for (let r of Object.keys(e)) n[r] = Wy(e[r], t - 1);
16727
16777
  return n;
16728
16778
  }
16729
- function Wy(e, t = Infinity) {
16779
+ function Gy(e, t = Infinity) {
16730
16780
  let n = /* @__PURE__ */ new WeakSet(), r;
16731
16781
  try {
16732
16782
  r = JSON.stringify(e, (e, t) => {
@@ -16745,7 +16795,7 @@ function Wy(e, t = Infinity) {
16745
16795
  }
16746
16796
  return r.length > t && (r = r.slice(0, t) + `\n…[已截断,原长度 ${r.length}]`), r;
16747
16797
  }
16748
- function Gy(e, t = 0) {
16798
+ function Ky(e, t = 0) {
16749
16799
  let n = 3735928559 ^ t, r = 1103547991 ^ t;
16750
16800
  for (let t = 0; t < e.length; t++) {
16751
16801
  let i = e.charCodeAt(t);
@@ -16753,32 +16803,32 @@ function Gy(e, t = 0) {
16753
16803
  }
16754
16804
  return n = Math.imul(n ^ n >>> 16, 2246822507) ^ Math.imul(r ^ r >>> 13, 3266489909), r = Math.imul(r ^ r >>> 16, 2246822507) ^ Math.imul(n ^ n >>> 13, 3266489909), 4294967296 * (2097151 & r) + (n >>> 0);
16755
16805
  }
16756
- function Ky(e) {
16757
- return Gy(Wy(e)).toString(36);
16806
+ function qy(e) {
16807
+ return Ky(Gy(e)).toString(36);
16758
16808
  }
16759
- function qy(e, t, n, r) {
16760
- if (t === "set") return n ? (Ry(e, n, r), null) : "set 操作需要 jsonPath(整体替换请用 set_data)";
16761
- if (t === "remove") return n ? (zy(e, n), null) : "remove 操作需要 jsonPath";
16809
+ function Jy(e, t, n, r) {
16810
+ if (t === "set") return n ? (zy(e, n, r), null) : "set 操作需要 jsonPath(整体替换请用 set_data)";
16811
+ if (t === "remove") return n ? (By(e, n), null) : "remove 操作需要 jsonPath";
16762
16812
  if (t === "merge") {
16763
- let t = n ? Ly(e, n) : e;
16764
- return typeof t != "object" || !t || Array.isArray(t) ? `merge 目标${n ? `(${n})` : "(根)"}不是对象` : (Iy(t, r), null);
16813
+ let t = n ? Ry(e, n) : e;
16814
+ return typeof t != "object" || !t || Array.isArray(t) ? `merge 目标${n ? `(${n})` : "(根)"}不是对象` : (Ly(t, r), null);
16765
16815
  }
16766
- let i = n ? Ly(e, n) : e;
16816
+ let i = n ? Ry(e, n) : e;
16767
16817
  return Array.isArray(i) ? (Array.isArray(r) ? i.push(...r) : i.push(r), null) : `append 目标${n ? `(${n})` : "(根)"}不是数组`;
16768
16818
  }
16769
- function Jy(e, t, n, r) {
16770
- if (t === "set") Ry(e, n, r);
16771
- else if (t === "remove") zy(e, n);
16772
- else if (t === "merge") Iy(n ? Ly(e, n) : e, r);
16819
+ function Yy(e, t, n, r) {
16820
+ if (t === "set") zy(e, n, r);
16821
+ else if (t === "remove") By(e, n);
16822
+ else if (t === "merge") Ly(n ? Ry(e, n) : e, r);
16773
16823
  else {
16774
- let t = n ? Ly(e, n) : e;
16824
+ let t = n ? Ry(e, n) : e;
16775
16825
  Array.isArray(r) ? t.push(...r) : t.push(r);
16776
16826
  }
16777
16827
  }
16778
- function Yy(e, t) {
16779
- typeof e == "object" && e && Xy(e, t);
16780
- }
16781
16828
  function Xy(e, t) {
16829
+ typeof e == "object" && e && Zy(e, t);
16830
+ }
16831
+ function Zy(e, t) {
16782
16832
  if (Array.isArray(e)) {
16783
16833
  e.length = 0, Array.isArray(t) && e.push(...t);
16784
16834
  return;
@@ -16787,7 +16837,7 @@ function Xy(e, t) {
16787
16837
  for (let t of Object.keys(e)) t in n || delete e[t];
16788
16838
  for (let t of Object.keys(n)) e[t] = n[t];
16789
16839
  }
16790
- function Zy(e, t, n = "") {
16840
+ function Qy(e, t, n = "") {
16791
16841
  let r = [];
16792
16842
  if (!(typeof e == "object" && e) || !(typeof t == "object" && t) || Array.isArray(e) !== Array.isArray(t)) return e !== t && r.push({
16793
16843
  path: n || "(root)",
@@ -16806,14 +16856,14 @@ function Zy(e, t, n = "") {
16806
16856
  path: i,
16807
16857
  from: e[a],
16808
16858
  to: void 0
16809
- }) : r.push(...Zy(e[a], t[a], i));
16859
+ }) : r.push(...Qy(e[a], t[a], i));
16810
16860
  }
16811
16861
  return r;
16812
16862
  }
16813
16863
  let i = e, a = t, o = /* @__PURE__ */ new Set([...Object.keys(i), ...Object.keys(a)]);
16814
16864
  for (let e of o) {
16815
16865
  let t = n ? `${n}.${e}` : e;
16816
- e in i ? e in a ? r.push(...Zy(i[e], a[e], t)) : r.push({
16866
+ e in i ? e in a ? r.push(...Qy(i[e], a[e], t)) : r.push({
16817
16867
  path: t,
16818
16868
  from: i[e],
16819
16869
  to: void 0
@@ -16825,44 +16875,44 @@ function Zy(e, t, n = "") {
16825
16875
  }
16826
16876
  return r;
16827
16877
  }
16828
- var Qy = {
16878
+ var $y = {
16829
16879
  largeResults: 4194304,
16830
16880
  drafts: 2097152,
16831
16881
  userFiles: 2097152
16832
- }, $y = [
16882
+ }, eb = [
16833
16883
  "largeResults",
16834
16884
  "drafts",
16835
16885
  "userFiles"
16836
- ], eb = .9;
16837
- function tb(e, t = {}) {
16886
+ ], tb = .9;
16887
+ function nb(e, t = {}) {
16838
16888
  let n = Object.create(null);
16839
- if (e) for (let [t, r] of Object.entries(e)) n[ab(t)] = {
16889
+ if (e) for (let [t, r] of Object.entries(e)) n[ob(t)] = {
16840
16890
  content: r,
16841
- updatedAt: sb()
16891
+ updatedAt: cb()
16842
16892
  };
16843
16893
  let { persist: r } = t, i = t.maxBytes ?? 8388608, a = {
16844
- ...Qy,
16894
+ ...$y,
16845
16895
  ...t.poolBytes ?? {}
16846
16896
  };
16847
16897
  function o(e) {
16848
- let t = ab(e);
16898
+ let t = ob(e);
16849
16899
  return t.startsWith("large_results/") ? "largeResults" : t.startsWith("drafts/") ? "drafts" : "userFiles";
16850
16900
  }
16851
16901
  function s(e) {
16852
16902
  let t = 0;
16853
- for (let [r, i] of Object.entries(n)) o(r) === e && (t += rb(i.content));
16903
+ for (let [r, i] of Object.entries(n)) o(r) === e && (t += ib(i.content));
16854
16904
  return t;
16855
16905
  }
16856
16906
  function c() {
16857
- for (let e of $y) {
16907
+ for (let e of eb) {
16858
16908
  let t = a[e];
16859
16909
  if (s(e) <= t) continue;
16860
- let r = t * eb, i = Object.entries(n).filter(([t]) => o(t) === e).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
16910
+ let r = t * tb, i = Object.entries(n).filter(([t]) => o(t) === e).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
16861
16911
  for (let [t] of i) if (delete n[t], s(e) <= r) break;
16862
16912
  }
16863
- if (ib(n) > i) {
16864
- let e = i * eb, t = Object.entries(n).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
16865
- for (let [r] of t) if (delete n[r], ib(n) <= e) break;
16913
+ if (ab(n) > i) {
16914
+ let e = i * tb, t = Object.entries(n).sort((e, t) => e[1].updatedAt - t[1].updatedAt);
16915
+ for (let [r] of t) if (delete n[r], ab(n) <= e) break;
16866
16916
  }
16867
16917
  }
16868
16918
  let l = null;
@@ -16888,7 +16938,7 @@ function tb(e, t = {}) {
16888
16938
  }
16889
16939
  }) };
16890
16940
  return r && (f.hydrate = (e) => {
16891
- for (let [t, r] of Object.entries(e)) n[ab(t)] = r;
16941
+ for (let [t, r] of Object.entries(e)) n[ob(t)] = r;
16892
16942
  c();
16893
16943
  }, f.flush = () => {
16894
16944
  l &&= (clearTimeout(l), null), u();
@@ -16897,19 +16947,19 @@ function tb(e, t = {}) {
16897
16947
  d();
16898
16948
  }), f;
16899
16949
  }
16900
- var nb = null;
16901
- function rb(e) {
16902
- return nb ||= new TextEncoder(), nb.encode(e).length;
16903
- }
16950
+ var rb = null;
16904
16951
  function ib(e) {
16952
+ return rb ||= new TextEncoder(), rb.encode(e).length;
16953
+ }
16954
+ function ab(e) {
16905
16955
  let t = 0;
16906
- for (let n of Object.values(e)) t += rb(n.content);
16956
+ for (let n of Object.values(e)) t += ib(n.content);
16907
16957
  return t;
16908
16958
  }
16909
- function ab(e) {
16959
+ function ob(e) {
16910
16960
  return e.replace(/^\/+/, "").replace(/\/+/g, "/");
16911
16961
  }
16912
- function ob(e) {
16962
+ function sb(e) {
16913
16963
  let t = "";
16914
16964
  for (let n = 0; n < e.length; n++) {
16915
16965
  let r = e[n];
@@ -16917,10 +16967,10 @@ function ob(e) {
16917
16967
  }
16918
16968
  return RegExp("^" + t + "$");
16919
16969
  }
16920
- function sb() {
16970
+ function cb() {
16921
16971
  return Date.now();
16922
16972
  }
16923
- var cb = [
16973
+ var lb = [
16924
16974
  "vfs_read",
16925
16975
  "vfs_write",
16926
16976
  "vfs_edit",
@@ -16930,10 +16980,10 @@ var cb = [
16930
16980
  "vfs_json_read",
16931
16981
  "vfs_json_patch"
16932
16982
  ];
16933
- function lb(e) {
16983
+ function ub(e) {
16934
16984
  return [
16935
16985
  r(async ({ path: t, offset: n, limit: r }) => {
16936
- let i = e.files[ab(t)];
16986
+ let i = e.files[ob(t)];
16937
16987
  if (!i) return $({
16938
16988
  code: "NOT_FOUND",
16939
16989
  path: t,
@@ -16962,9 +17012,9 @@ function lb(e) {
16962
17012
  hint: "jsonString=true 要求 content 是合法 JSON;检查引号/逗号/括号配对;或省略 jsonString 写纯文本"
16963
17013
  });
16964
17014
  }
16965
- return e.files[ab(t)] = {
17015
+ return e.files[ob(t)] = {
16966
17016
  content: n,
16967
- updatedAt: sb()
17017
+ updatedAt: cb()
16968
17018
  }, `已写入 ${t}(${n.length} 字符)${r ? "(JSON 校验通过)" : ""}`;
16969
17019
  }, {
16970
17020
  name: "vfs_write",
@@ -16976,7 +17026,7 @@ function lb(e) {
16976
17026
  })
16977
17027
  }),
16978
17028
  r(async ({ path: t, oldString: n, newString: r }) => {
16979
- let i = ab(t), a = e.files[i];
17029
+ let i = ob(t), a = e.files[i];
16980
17030
  if (!a) return $({
16981
17031
  code: "NOT_FOUND",
16982
17032
  path: t,
@@ -17006,7 +17056,7 @@ function lb(e) {
17006
17056
  }
17007
17057
  return e.files[i] = {
17008
17058
  content: a.content.replace(n, r),
17009
- updatedAt: sb()
17059
+ updatedAt: cb()
17010
17060
  }, `已替换 ${t} 中 1 处。`;
17011
17061
  }, {
17012
17062
  name: "vfs_edit",
@@ -17028,7 +17078,7 @@ function lb(e) {
17028
17078
  r(async ({ pattern: t }) => {
17029
17079
  let n;
17030
17080
  try {
17031
- n = ob(t);
17081
+ n = sb(t);
17032
17082
  } catch (e) {
17033
17083
  return $({
17034
17084
  code: "GLOB_INVALID",
@@ -17057,7 +17107,7 @@ function lb(e) {
17057
17107
  details: { pattern: t }
17058
17108
  });
17059
17109
  }
17060
- let i = n ? [ab(n)] : Object.keys(e.files), a = [];
17110
+ let i = n ? [ob(n)] : Object.keys(e.files), a = [];
17061
17111
  for (let t of i) {
17062
17112
  let n = e.files[t];
17063
17113
  n && n.content.split("\n").forEach((e, n) => {
@@ -17074,7 +17124,7 @@ function lb(e) {
17074
17124
  })
17075
17125
  }),
17076
17126
  r(async ({ path: t, jsonPath: n }) => {
17077
- let r = ab(t), i = e.files[r];
17127
+ let r = ob(t), i = e.files[r];
17078
17128
  if (!i) return $({
17079
17129
  code: "NOT_FOUND",
17080
17130
  path: t,
@@ -17093,7 +17143,7 @@ function lb(e) {
17093
17143
  });
17094
17144
  }
17095
17145
  if (n) {
17096
- let e = Ly(a, n);
17146
+ let e = Ry(a, n);
17097
17147
  return e === void 0 ? $({
17098
17148
  code: "VFS_PATH_NOT_FOUND",
17099
17149
  path: t,
@@ -17111,7 +17161,7 @@ function lb(e) {
17111
17161
  })
17112
17162
  }),
17113
17163
  r(async ({ path: t, patches: n }) => {
17114
- let r = ab(t), i = e.files[r];
17164
+ let r = ob(t), i = e.files[r];
17115
17165
  if (!i) return $({
17116
17166
  code: "NOT_FOUND",
17117
17167
  path: t,
@@ -17129,9 +17179,9 @@ function lb(e) {
17129
17179
  hint: "vfs_json_patch 要求文件内容是合法 JSON"
17130
17180
  });
17131
17181
  }
17132
- let o = By(a), s = [];
17182
+ let o = Vy(a), s = [];
17133
17183
  for (let e of n) {
17134
- let n = qy(o, e.op, e.jsonPath, e.value);
17184
+ let n = Jy(o, e.op, e.jsonPath, e.value);
17135
17185
  if (n) return $({
17136
17186
  code: "PATCH_FAILED",
17137
17187
  path: t,
@@ -17144,7 +17194,7 @@ function lb(e) {
17144
17194
  let c = JSON.stringify(o);
17145
17195
  return e.files[r] = {
17146
17196
  content: c,
17147
- updatedAt: sb()
17197
+ updatedAt: cb()
17148
17198
  }, `已对 ${t} 应用 ${n.length} 个 patch(影响 ${s.length} 处:${s.join(", ")}),文件现 ${c.length} 字符`;
17149
17199
  }, {
17150
17200
  name: "vfs_json_patch",
@@ -17165,17 +17215,17 @@ function lb(e) {
17165
17215
  })
17166
17216
  ];
17167
17217
  }
17168
- function ub(e) {
17218
+ function db(e) {
17169
17219
  return {
17170
17220
  name: "vfs",
17171
- tools: lb(e),
17221
+ tools: ub(e),
17172
17222
  beforeAgent: () => ({ files: e.files })
17173
17223
  };
17174
17224
  }
17175
17225
  //#endregion
17176
17226
  //#region src/core/tools/dataSlotQuery.ts
17177
- var db = /[\w$-]/;
17178
- function fb(e) {
17227
+ var fb = /[\w$-]/;
17228
+ function pb(e) {
17179
17229
  let t = [], n = e.trim(), r = +(n[0] === "$");
17180
17230
  for (; r < n.length;) {
17181
17231
  let e = n[r];
@@ -17186,7 +17236,7 @@ function fb(e) {
17186
17236
  continue;
17187
17237
  }
17188
17238
  let e = "";
17189
- for (; r < n.length && db.test(n[r]);) e += n[r++];
17239
+ for (; r < n.length && fb.test(n[r]);) e += n[r++];
17190
17240
  if (!e) throw Error("JSONPath: .. 后缺属性名");
17191
17241
  t.push({
17192
17242
  type: "descendKey",
@@ -17199,7 +17249,7 @@ function fb(e) {
17199
17249
  continue;
17200
17250
  }
17201
17251
  let e = "";
17202
- for (; r < n.length && db.test(n[r]);) e += n[r++];
17252
+ for (; r < n.length && fb.test(n[r]);) e += n[r++];
17203
17253
  if (!e) throw Error("JSONPath: . 后缺属性名");
17204
17254
  t.push({
17205
17255
  type: "key",
@@ -17255,7 +17305,7 @@ function fb(e) {
17255
17305
  }
17256
17306
  return t;
17257
17307
  }
17258
- function pb(e) {
17308
+ function mb(e) {
17259
17309
  let t = [], n = 0, r = e.trim();
17260
17310
  for (; n < r.length;) {
17261
17311
  let e = r[n];
@@ -17300,7 +17350,7 @@ function pb(e) {
17300
17350
  }
17301
17351
  return t;
17302
17352
  }
17303
- var mb = class {
17353
+ var hb = class {
17304
17354
  toks;
17305
17355
  item;
17306
17356
  pos = 0;
@@ -17336,12 +17386,12 @@ var mb = class {
17336
17386
  return this.next(), e;
17337
17387
  }
17338
17388
  let e = this.operand(), t = this.peek();
17339
- return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(), _b(t, e, this.operand())) : hb(e);
17389
+ return t === "==" || t === "!=" || t === "<" || t === "<=" || t === ">" || t === ">=" ? (this.next(), vb(t, e, this.operand())) : gb(e);
17340
17390
  }
17341
17391
  operand() {
17342
17392
  let e = this.next();
17343
17393
  if (e === void 0) throw Error("过滤表达式:缺操作数");
17344
- if (e.startsWith("@")) return gb(e, this.item);
17394
+ if (e.startsWith("@")) return _b(e, this.item);
17345
17395
  if (e[0] === "'" || e[0] === "\"") return e.slice(1, -1);
17346
17396
  if (e === "true") return !0;
17347
17397
  if (e === "false") return !1;
@@ -17351,10 +17401,10 @@ var mb = class {
17351
17401
  throw Error(`过滤表达式:未知操作数 '${e}'`);
17352
17402
  }
17353
17403
  };
17354
- function hb(e) {
17404
+ function gb(e) {
17355
17405
  return !!e && e !== 0 && e !== "" && e !== null;
17356
17406
  }
17357
- function gb(e, t) {
17407
+ function _b(e, t) {
17358
17408
  let n = e.split(".").filter((e) => e && e !== "@"), r = t;
17359
17409
  for (let e of n) {
17360
17410
  if (typeof r != "object" || !r) return;
@@ -17362,7 +17412,7 @@ function gb(e, t) {
17362
17412
  }
17363
17413
  return r;
17364
17414
  }
17365
- function _b(e, t, n) {
17415
+ function vb(e, t, n) {
17366
17416
  switch (e) {
17367
17417
  case "==": return t === n;
17368
17418
  case "!=": return t !== n;
@@ -17373,47 +17423,47 @@ function _b(e, t, n) {
17373
17423
  default: return !1;
17374
17424
  }
17375
17425
  }
17376
- function vb(e, t) {
17377
- return new mb(pb(e), t).parse();
17378
- }
17379
17426
  function yb(e, t) {
17380
- return e ? `${e}.${t}` : String(t);
17427
+ return new hb(mb(e), t).parse();
17381
17428
  }
17382
17429
  function bb(e, t) {
17430
+ return e ? `${e}.${t}` : String(t);
17431
+ }
17432
+ function xb(e, t) {
17383
17433
  let n = [{
17384
17434
  path: "",
17385
17435
  value: e
17386
17436
  }];
17387
- for (let e of fb(t)) {
17437
+ for (let e of pb(t)) {
17388
17438
  let t = [];
17389
17439
  if (e.type === "key") for (let r of n) r.value != null && typeof r.value == "object" && e.key in r.value && t.push({
17390
- path: yb(r.path, e.key),
17440
+ path: bb(r.path, e.key),
17391
17441
  value: r.value[e.key]
17392
17442
  });
17393
17443
  else if (e.type === "index") {
17394
17444
  for (let r of n) if (Array.isArray(r.value)) {
17395
17445
  let n = r.value[e.index];
17396
17446
  e.index >= 0 && e.index < r.value.length && t.push({
17397
- path: yb(r.path, e.index),
17447
+ path: bb(r.path, e.index),
17398
17448
  value: n,
17399
17449
  index: e.index
17400
17450
  });
17401
17451
  }
17402
17452
  } else if (e.type === "wildcard") {
17403
17453
  for (let e of n) if (Array.isArray(e.value)) e.value.forEach((n, r) => t.push({
17404
- path: yb(e.path, r),
17454
+ path: bb(e.path, r),
17405
17455
  value: n,
17406
17456
  index: r
17407
17457
  }));
17408
17458
  else if (e.value != null && typeof e.value == "object") for (let n of Object.keys(e.value)) t.push({
17409
- path: yb(e.path, n),
17459
+ path: bb(e.path, n),
17410
17460
  value: e.value[n]
17411
17461
  });
17412
17462
  } else if (e.type === "descendKey") {
17413
17463
  let r = e.key, i = (e) => {
17414
17464
  if (e.value != null && typeof e.value == "object") for (let n of Object.keys(e.value)) {
17415
17465
  let a = {
17416
- path: yb(e.path, n),
17466
+ path: bb(e.path, n),
17417
17467
  value: e.value[n]
17418
17468
  };
17419
17469
  n === r && t.push(a), i(a);
@@ -17424,7 +17474,7 @@ function bb(e, t) {
17424
17474
  let e = (n) => {
17425
17475
  if (n.value != null && typeof n.value == "object") for (let r of Object.keys(n.value)) {
17426
17476
  let i = {
17427
- path: yb(n.path, r),
17477
+ path: bb(n.path, r),
17428
17478
  value: n.value[r]
17429
17479
  };
17430
17480
  t.push(i), e(i);
@@ -17433,16 +17483,16 @@ function bb(e, t) {
17433
17483
  for (let t of n) e(t);
17434
17484
  } else if (e.type === "filter") {
17435
17485
  for (let r of n) if (Array.isArray(r.value)) r.value.forEach((n, i) => {
17436
- vb(e.filter, n) && t.push({
17437
- path: yb(r.path, i),
17486
+ yb(e.filter, n) && t.push({
17487
+ path: bb(r.path, i),
17438
17488
  value: n,
17439
17489
  index: i
17440
17490
  });
17441
17491
  });
17442
17492
  else if (r.value != null && typeof r.value == "object") for (let n of Object.keys(r.value)) {
17443
17493
  let i = r.value[n];
17444
- vb(e.filter, i) && t.push({
17445
- path: yb(r.path, n),
17494
+ yb(e.filter, i) && t.push({
17495
+ path: bb(r.path, n),
17446
17496
  value: i
17447
17497
  });
17448
17498
  }
@@ -17451,7 +17501,7 @@ function bb(e, t) {
17451
17501
  }
17452
17502
  return n;
17453
17503
  }
17454
- function xb(e, t) {
17504
+ function Sb(e, t) {
17455
17505
  let n = e.length, r = t.length;
17456
17506
  if (!n) return r;
17457
17507
  if (!r) return n;
@@ -17467,7 +17517,7 @@ function xb(e, t) {
17467
17517
  }
17468
17518
  return i[r];
17469
17519
  }
17470
- function Sb(e, t, n = {}) {
17520
+ function Cb(e, t, n = {}) {
17471
17521
  let r = n.mode || "substring", i = n.limit ?? 50, a = n.matchKey !== !1, o = [], s = null;
17472
17522
  if (r === "regex") try {
17473
17523
  s = new RegExp(t, "i");
@@ -17477,11 +17527,11 @@ function Sb(e, t, n = {}) {
17477
17527
  let c = (e, l, u) => {
17478
17528
  if (o.length >= i || e == null) return;
17479
17529
  if (typeof e == "object") {
17480
- if (Array.isArray(e)) e.forEach((e, t) => c(e, yb(l, t), String(t)));
17481
- else for (let t of Object.keys(e)) c(e[t], yb(l, t), t);
17530
+ if (Array.isArray(e)) e.forEach((e, t) => c(e, bb(l, t), String(t)));
17531
+ else for (let t of Object.keys(e)) c(e[t], bb(l, t), t);
17482
17532
  return;
17483
17533
  }
17484
- let d = String(e), f = Cb(d, t, r, n.fuzzyThreshold ?? 2, s);
17534
+ let d = String(e), f = wb(d, t, r, n.fuzzyThreshold ?? 2, s);
17485
17535
  if (f) {
17486
17536
  o.push({
17487
17537
  path: l,
@@ -17492,7 +17542,7 @@ function Sb(e, t, n = {}) {
17492
17542
  return;
17493
17543
  }
17494
17544
  if (a && u) {
17495
- let e = Cb(u, t, r, n.fuzzyThreshold ?? 2, s);
17545
+ let e = wb(u, t, r, n.fuzzyThreshold ?? 2, s);
17496
17546
  e && o.push({
17497
17547
  path: l,
17498
17548
  key: u,
@@ -17503,18 +17553,18 @@ function Sb(e, t, n = {}) {
17503
17553
  };
17504
17554
  return c(e, ""), o;
17505
17555
  }
17506
- function Cb(e, t, n, r, i) {
17556
+ function wb(e, t, n, r, i) {
17507
17557
  let a = e.toLowerCase(), o = t.toLowerCase();
17508
17558
  if (n === "substring") return a.includes(o) ? 1 : null;
17509
17559
  if (n === "regex") return i && i.test(e) ? 1 : null;
17510
17560
  if (n === "fuzzy") {
17511
17561
  if (a.includes(o)) return 2;
17512
- let e = xb(a, o);
17562
+ let e = Sb(a, o);
17513
17563
  return e <= r ? r - e + 1 : null;
17514
17564
  }
17515
17565
  return null;
17516
17566
  }
17517
- var wb = [
17567
+ var Tb = [
17518
17568
  "self.fetch = () => { throw new Error('fetch 已被沙箱禁用') }",
17519
17569
  "self.XMLHttpRequest = function(){ throw new Error('XMLHttpRequest 已被沙箱禁用') }",
17520
17570
  "self.importScripts = () => { throw new Error('importScripts 已被沙箱禁用') }",
@@ -17527,7 +17577,7 @@ var wb = [
17527
17577
  "try { self.BroadcastChannel = undefined } catch {}",
17528
17578
  "if (self.navigator && self.navigator.sendBeacon) self.navigator.sendBeacon = () => { throw new Error('sendBeacon 已被沙箱禁用') }"
17529
17579
  ].join("\n");
17530
- function Tb(e, t, n = 3e3) {
17580
+ function Eb(e, t, n = 3e3) {
17531
17581
  return new Promise((r) => {
17532
17582
  let i = Date.now(), a = !1, o = (e) => {
17533
17583
  if (!a) {
@@ -17540,12 +17590,12 @@ function Tb(e, t, n = 3e3) {
17540
17590
  elapsedMs: Date.now() - i
17541
17591
  });
17542
17592
  }
17543
- }, s = wb + "\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;
17593
+ }, s = Tb + "\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;
17544
17594
  try {
17545
17595
  let e = new Blob([s], { type: "application/javascript" });
17546
17596
  c = URL.createObjectURL(e), l = new Worker(c);
17547
17597
  } catch (e) {
17548
- r({
17598
+ c && URL.revokeObjectURL(c), r({
17549
17599
  ok: !1,
17550
17600
  error: `无法创建 Worker 沙箱: ${e.message}`,
17551
17601
  elapsedMs: 0
@@ -17575,7 +17625,7 @@ function Tb(e, t, n = 3e3) {
17575
17625
  }
17576
17626
  //#endregion
17577
17627
  //#region src/core/tools/dataOps.ts
17578
- var Eb = /* @__PURE__ */ new Set([
17628
+ var Db = /* @__PURE__ */ new Set([
17579
17629
  "describe_data",
17580
17630
  "get_data",
17581
17631
  "set_data",
@@ -17585,19 +17635,19 @@ var Eb = /* @__PURE__ */ new Set([
17585
17635
  "snapshot_data",
17586
17636
  "list_data_snapshots",
17587
17637
  "diff_data"
17588
- ]), Db = /* @__PURE__ */ new Set(["read", "write"]);
17589
- function Ob(e, t = "simple") {
17590
- return t === "advanced" ? e : t === "minimal" ? e.filter((e) => Db.has(e.name)) : e.filter((e) => !Eb.has(e.name));
17638
+ ]), Ob = /* @__PURE__ */ new Set(["read", "write"]);
17639
+ function kb(e, t = "simple") {
17640
+ return t === "advanced" ? e : t === "minimal" ? e.filter((e) => Ob.has(e.name)) : e.filter((e) => !Db.has(e.name));
17591
17641
  }
17592
- function kb(e, n = {}) {
17593
- let i = e.schema, a = e.bind, o = e.description ?? "主数据对象", s = Tv(i), c = [], l = n.maxSnapshots ?? 20, u, d = n.autoLock !== !1, f = {
17642
+ function Ab(e, n = {}) {
17643
+ let i = e.schema, a = e.bind, o = e.description ?? "主数据对象", s = Ev(i), c = [], l = n.maxSnapshots ?? 20, u, d = n.autoLock !== !1, f = {
17594
17644
  get: () => ({
17595
17645
  schema: i,
17596
17646
  bind: a,
17597
17647
  description: o
17598
17648
  }),
17599
17649
  set: (e) => {
17600
- i = e.schema, a = e.bind, o = e.description ?? "主数据对象", s = Tv(i), c.length = 0, u = void 0;
17650
+ i = e.schema, a = e.bind, o = e.description ?? "主数据对象", s = Ev(i), c.length = 0, u = void 0;
17601
17651
  },
17602
17652
  update: (e) => {
17603
17653
  a = e, c.length = 0, u = void 0;
@@ -17606,7 +17656,7 @@ function kb(e, n = {}) {
17606
17656
  n.onAudit?.(e);
17607
17657
  };
17608
17658
  function m(e, t) {
17609
- let n = By(a), r = c.length ? c[c.length - 1].id + 1 : 1;
17659
+ let n = Vy(a), r = c.length ? c[c.length - 1].id + 1 : 1;
17610
17660
  for (c.push({
17611
17661
  id: r,
17612
17662
  ts: Date.now(),
@@ -17618,12 +17668,12 @@ function kb(e, n = {}) {
17618
17668
  }
17619
17669
  async function h(e, t, r) {
17620
17670
  if (!t || t === "") return null;
17621
- let i = Ky(a);
17671
+ let i = qy(a);
17622
17672
  if (i === t) return null;
17623
17673
  if (!n.onConflict) return $({
17624
17674
  code: "VERSION_CONFLICT",
17625
17675
  message: `乐观锁冲突:expectedHash=${t} 但当前 hash=${i}。主数据在你 read 之后已被修改(外部代码/其他 agent/用户手动改)。`,
17626
- hint: `重新 read 拿最新值与 hash,基于最新值修改后再写入(传新的 expectedHash)。当前值:${Wy(a, 400)}`
17676
+ hint: `重新 read 拿最新值与 hash,基于最新值修改后再写入(传新的 expectedHash)。当前值:${Gy(a, 400)}`
17627
17677
  });
17628
17678
  let o = await n.onConflict({
17629
17679
  op: e,
@@ -17633,11 +17683,11 @@ function kb(e, n = {}) {
17633
17683
  expectedHash: t,
17634
17684
  snapshotId: 0
17635
17685
  });
17636
- if (o.action === "keep_external") return `已保留外部修改(未写入)。当前值:${Wy(a, 400)} (hash=${i})。请重新 read 拿最新值与 hash 再改。`;
17686
+ if (o.action === "keep_external") return `已保留外部修改(未写入)。当前值:${Gy(a, 400)} (hash=${i})。请重新 read 拿最新值与 hash 再改。`;
17637
17687
  if (o.action === "restore") {
17638
- if (!c.length) return `无历史快照可回退(本次为首次操作)。当前值:${Wy(a, 400)} (hash=${i})。请重新 read 再改或选「强制覆盖」。`;
17688
+ if (!c.length) return `无历史快照可回退(本次为首次操作)。当前值:${Gy(a, 400)} (hash=${i})。请重新 read 再改或选「强制覆盖」。`;
17639
17689
  let e = c[c.length - 1];
17640
- return Yy(a, By(e.value)), `已回退主数据到历史快照 #${e.id}[${e.op}]。当前值:${Wy(a, 400)} (hash=${Ky(a)})。请基于回退后的值重写或停止。`;
17690
+ return Xy(a, Vy(e.value)), `已回退主数据到历史快照 #${e.id}[${e.op}]。当前值:${Gy(a, 400)} (hash=${qy(a)})。请基于回退后的值重写或停止。`;
17641
17691
  }
17642
17692
  return null;
17643
17693
  }
@@ -17649,15 +17699,20 @@ function kb(e, n = {}) {
17649
17699
  }),
17650
17700
  r(async ({ jsonPath: e }) => {
17651
17701
  let t = e || "";
17652
- if (!Ev(t, i, s)) return $({
17702
+ if (Iy(t)) return $({
17703
+ code: "PATH_UNSAFE",
17704
+ message: `jsonPath "${t}" 含非法段(__proto__/constructor/prototype)`,
17705
+ hint: "使用正常属性路径,如 components.0.text(数组索引用数字)"
17706
+ });
17707
+ if (!Dv(t, i, s)) return $({
17653
17708
  code: "PATH_DENIED",
17654
17709
  message: `get_data @ "${t}" 不在 schema 声明字段内(仅 schema 声明的 key 可读)`,
17655
17710
  hint: "主数据仅暴露 schema 声明的字段;若需操作该字段,集成方需在 schema 中声明它"
17656
17711
  });
17657
- let n = t ? Ly(a, t) : a;
17658
- t || (n = Av(n, s));
17659
- let r = Ky(a);
17660
- return u = r, n === void 0 ? `主数据${t ? ` @ ${t}` : ""} = (undefined) (hash=${r})` : `主数据${t ? ` @ ${t}` : ""} = ${Wy(n)} (hash=${r})`;
17712
+ let n = t ? Ry(a, t) : a;
17713
+ t || (n = jv(n, s));
17714
+ let r = qy(a);
17715
+ return u = r, n === void 0 ? `主数据${t ? ` @ ${t}` : ""} = (undefined) (hash=${r})` : `主数据${t ? ` @ ${t}` : ""} = ${Gy(n)} (hash=${r})`;
17661
17716
  }, {
17662
17717
  name: "get_data",
17663
17718
  description: "读取主数据的当前值(安全序列化:函数/DOM/循环引用做摘要;大结果由系统自动外存,提示用 vfs_read 回读)。返回含 hash(乐观锁):改前先 read/get 拿 hash,写入时传 expectedHash 回传,系统对比当前 hash 防\"基于过期值覆盖\"。jsonPath 可选:读整个主数据不传,读子路径传(如 components.0.text)。",
@@ -17666,7 +17721,7 @@ function kb(e, n = {}) {
17666
17721
  r(async ({ value: e, expectedHash: t }) => {
17667
17722
  let n = await h("set", t || (d ? u : void 0));
17668
17723
  if (n !== null) return n;
17669
- let r, o = Vy(e);
17724
+ let r, o = Hy(e);
17670
17725
  if (o.parseError) return Sg("", e, o.parseError);
17671
17726
  r = o.parsed;
17672
17727
  let c = i.safeParse(r);
@@ -17674,62 +17729,68 @@ function kb(e, n = {}) {
17674
17729
  code: "LEAF_BIND",
17675
17730
  message: `主数据 bind 为原始类型(${a === null ? "null" : typeof a}),set_data 无法就地替换外部持有的值引用`,
17676
17731
  hint: "主数据 bind 必须为对象/数组(低代码主 JSON 本就是);叶子值请用对象包裹(如 {value:\"x\"})或集成方通过 sdk.setData 替换 bind"
17677
- }) : (m("set"), c.data !== null && typeof c.data == "object" && (s ? Iy(a, c.data) : Xy(a, c.data)), p({
17732
+ }) : (m("set"), c.data !== null && typeof c.data == "object" && (s ? Ly(a, c.data) : Zy(a, c.data)), p({
17678
17733
  op: "set",
17679
17734
  value: c.data,
17680
17735
  timestamp: Date.now()
17681
- }), u = Ky(a), `已设置主数据 = ${Wy(c.data, 600)} (新 hash=${Ky(a)})${s ? "(白名单模式:仅更新 schema 声明字段,未声明字段保留)" : ""}`) : xg("", c.error.issues);
17736
+ }), u = qy(a), `已设置主数据 = ${Gy(c.data, 600)} (新 hash=${qy(a)})${s ? "(白名单模式:仅更新 schema 声明字段,未声明字段保留)" : ""}`) : xg("", c.error.issues);
17682
17737
  }, {
17683
17738
  name: "set_data",
17684
- description: "设置主数据的值(整体替换)。value 为 JSON 对象(或 JSON 字符串),需通过 schema 校验。校验失败会返回错误而非写入。expectedHash(可选):改前 read/get 返回的 hash,传入则启用乐观锁;不传时系统自动用你最后一次读到的 hash 比对(autoLock,默认开)。大对象/数组强烈建议改用 edit_data 增量 patch",
17739
+ description: "设置主数据的值(整体替换)。value 为 JSON 对象(或 JSON 字符串),需通过 schema 校验。校验失败会返回错误而非写入。expectedHash(可选):改前 read/get 返回的 hash,传入则启用乐观锁;不传时系统自动用你最后一次读到的 hash 比对(autoLock,默认开)。大对象/数组强烈建议改用 edit_data 增量 patch。白名单模式(schema 为 ZodObject 子集):set 为根级浅合并,深层子对象整体替换(未传字段丢失);保留深层字段请用 edit_data({op:\"merge\", jsonPath:\"子路径\", value:{...}})局部合并。",
17685
17740
  schema: t.object({
17686
17741
  value: t.unknown().describe("JSON 对象(推荐直传,如 {title:\"x\"}),或 JSON 字符串;需符合 schema"),
17687
17742
  expectedHash: t.string().optional().describe("乐观锁:改前 read/get 返回的 hash;传入则校验,不一致拒绝写入防覆盖。不传则自动用你最后读到的 hash(autoLock)")
17688
17743
  })
17689
17744
  }),
17690
- r(async ({ op: e, jsonPath: t, value: n, expectedHash: r }) => {
17691
- let o = t || "";
17692
- if (Fy(o)) return $({
17745
+ r(async (e) => {
17746
+ let t = e.op ?? e.patch?.op, n = e.jsonPath ?? e.patch?.jsonPath, r = e.value ?? e.patch?.value, o = e.expectedHash;
17747
+ if (!t) return $({
17748
+ code: "MISSING_VALUE",
17749
+ message: "edit_data 需要 op(set/remove/merge/append)",
17750
+ hint: "顶层 op 或 patch.op 至少传一个"
17751
+ });
17752
+ let c = n || "";
17753
+ if (Iy(c)) return $({
17693
17754
  code: "PATH_UNSAFE",
17694
- message: `jsonPath "${o}" 含非法段(__proto__/constructor/prototype)`,
17755
+ message: `jsonPath "${c}" 含非法段(__proto__/constructor/prototype)`,
17695
17756
  hint: "使用正常的属性路径,如 components.0.text(数组索引用数字)"
17696
17757
  });
17697
- if (!Ev(o, i, s)) return $({
17758
+ if (!Dv(c, i, s)) return $({
17698
17759
  code: "PATH_DENIED",
17699
- message: `edit_data @ "${o}" 不在 schema 声明字段内`,
17760
+ message: `edit_data @ "${c}" 不在 schema 声明字段内`,
17700
17761
  hint: "仅 schema 声明的 key 可写;若需操作该字段,集成方需在 schema 中声明它"
17701
17762
  });
17702
- let c = await h("edit", r || (d ? u : void 0));
17703
- if (c !== null) return c;
17763
+ let l = await h("edit", o || (d ? u : void 0));
17764
+ if (l !== null) return l;
17704
17765
  if (typeof a != "object" || !a) return $({
17705
17766
  code: "NOT_OBJECT",
17706
17767
  message: `edit 仅适用于对象/数组主数据,当前是 ${a === void 0 ? "undefined" : typeof a}`,
17707
17768
  hint: "叶子(原始类型)请用 set_data 整体设置"
17708
17769
  });
17709
- let l;
17710
- if (e !== "remove") {
17711
- if (n === void 0 || n === "") return $({
17770
+ let f;
17771
+ if (t !== "remove") {
17772
+ if (r === void 0 || r === "") return $({
17712
17773
  code: "MISSING_VALUE",
17713
- message: `${e} 操作需要 value`,
17714
- hint: `op 为 ${e} 时 value 必填;删除请用 op:'remove'`
17774
+ message: `${t} 操作需要 value`,
17775
+ hint: `op 为 ${t} 时 value 必填;删除请用 op:'remove'`
17715
17776
  });
17716
- let t = Vy(n);
17717
- if (t.parseError) return Sg("", n, t.parseError);
17718
- l = t.parsed;
17777
+ let e = Hy(r);
17778
+ if (e.parseError) return Sg("", r, e.parseError);
17779
+ f = e.parsed;
17719
17780
  }
17720
- let f = By(a), g = qy(f, e, o, l);
17721
- if (g) return $({
17781
+ let g = Vy(a), _ = Jy(g, t, c, f);
17782
+ if (_) return $({
17722
17783
  code: "PATCH_FAILED",
17723
- message: g,
17784
+ message: _,
17724
17785
  hint: "检查 op 与目标类型:merge 需对象,append 需数组;jsonPath 指向需存在"
17725
17786
  });
17726
- let _ = i.safeParse(f);
17727
- return _.success ? (m("edit"), Jy(a, e, o, l), p({
17787
+ let v = i.safeParse(g);
17788
+ return v.success ? (m("edit"), Yy(a, t, c, f), p({
17728
17789
  op: "edit",
17729
- detail: `${e}${o ? "@" + o : ""}`,
17730
- value: l,
17790
+ detail: `${t}${c ? "@" + c : ""}`,
17791
+ value: f,
17731
17792
  timestamp: Date.now()
17732
- }), u = Ky(a), `已 edit 主数据(${e}${o ? " @ " + o : ""})。当前值:${Wy(a, 600)} (新 hash=${Ky(a)})`) : xg("", _.error.issues);
17793
+ }), u = qy(a), `已 edit 主数据(${t}${c ? " @ " + c : ""})。当前值:${Gy(a, 600)} (新 hash=${qy(a)})`) : xg("", v.error.issues);
17733
17794
  }, {
17734
17795
  name: "edit_data",
17735
17796
  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,默认开)防\"基于过期值覆盖\"。",
@@ -17739,10 +17800,20 @@ function kb(e, n = {}) {
17739
17800
  "remove",
17740
17801
  "merge",
17741
17802
  "append"
17742
- ]),
17743
- jsonPath: t.string().optional().describe("相对主数据根的点号路径(如 components.0.text)。set/remove 必填;merge/append 不填则作用于根"),
17744
- value: t.unknown().optional().describe("JSON 对象(推荐直传,如 {text:\"x\"})或 JSON 字符串(set/merge/append 必填)"),
17745
- expectedHash: t.string().optional().describe("乐观锁:改前 read/get 返回的 hash;传入则校验,不一致拒绝写入防覆盖。不传则自动用你最后读到的 hash(autoLock)")
17803
+ ]).optional().describe("增量操作(顶层或 patch.op 至少一个):set/remove/merge/append"),
17804
+ jsonPath: t.string().optional().describe("相对主数据根的点号路径(如 components.0.text);顶层或 patch.jsonPath。set/remove 必填,merge/append 不填则作用于根"),
17805
+ value: t.unknown().optional().describe("JSON 对象(推荐直传,如 {text:\"x\"})或 JSON 字符串;顶层或 patch.value(set/merge/append 必填)"),
17806
+ expectedHash: t.string().optional().describe("乐观锁:改前 read/get 返回的 hash;传入则校验,不一致拒绝写入防覆盖。不传则自动用你最后读到的 hash(autoLock)"),
17807
+ patch: t.object({
17808
+ op: t.enum([
17809
+ "set",
17810
+ "remove",
17811
+ "merge",
17812
+ "append"
17813
+ ]).optional(),
17814
+ jsonPath: t.string().optional(),
17815
+ value: t.unknown().optional()
17816
+ }).optional().describe("容错:误传 write 的 {patch:{op,jsonPath,value}} 形式时从此取值(顶层优先)。正常用顶层 op/jsonPath/value 即可")
17746
17817
  })
17747
17818
  }),
17748
17819
  r(async ({ jsonPath: e, expectedHash: t }) => {
@@ -17751,12 +17822,12 @@ function kb(e, n = {}) {
17751
17822
  message: "delete_data 需要 jsonPath 指定要删的子路径(主数据整体不可删,用 set_data 整体替换)",
17752
17823
  hint: "如 jsonPath:\"components.0\" 删数组首项"
17753
17824
  });
17754
- if (Fy(e)) return $({
17825
+ if (Iy(e)) return $({
17755
17826
  code: "PATH_UNSAFE",
17756
17827
  message: `jsonPath "${e}" 含非法段`,
17757
17828
  hint: "使用正常属性路径"
17758
17829
  });
17759
- if (!Ev(e, i, s)) return $({
17830
+ if (!Dv(e, i, s)) return $({
17760
17831
  code: "PATH_DENIED",
17761
17832
  message: `delete_data @ "${e}" 不在 schema 声明字段内`,
17762
17833
  hint: "仅 schema 声明的 key 可删"
@@ -17764,12 +17835,12 @@ function kb(e, n = {}) {
17764
17835
  let n = await h("delete", t || (d ? u : void 0));
17765
17836
  if (n !== null) return n;
17766
17837
  m("delete");
17767
- let r = zy(a, e);
17838
+ let r = By(a, e);
17768
17839
  return p({
17769
17840
  op: "delete",
17770
17841
  detail: e,
17771
17842
  timestamp: Date.now()
17772
- }), u = Ky(a), r ? `已删除主数据 @ ${e}` : `主数据 @ ${e} 不存在(无需删除)`;
17843
+ }), u = qy(a), r ? `已删除主数据 @ ${e}` : `主数据 @ ${e} 不存在(无需删除)`;
17773
17844
  }, {
17774
17845
  name: "delete_data",
17775
17846
  description: "删除主数据的某个子路径(jsonPath)。主数据整体不可删(用 set_data 整体替换)。expectedHash(可选):改前 read/get 返回的 hash;不传时自动用你最后读到的 hash(autoLock,默认开)防\"基于过期值删除\"。",
@@ -17808,11 +17879,11 @@ function kb(e, n = {}) {
17808
17879
  hint: "用 list_data_snapshots 查看可用快照序号"
17809
17880
  });
17810
17881
  let n = i.safeParse(t.value);
17811
- return n.success ? (Yy(a, By(t.value)), p({
17882
+ return n.success ? (Xy(a, Vy(t.value)), p({
17812
17883
  op: "restore",
17813
17884
  detail: `#${t.id}`,
17814
17885
  timestamp: Date.now()
17815
- }), u = Ky(a), `已回退主数据到快照 #${t.id}[${t.op}]${t.label ? `(${t.label})` : ""}。`) : $({
17886
+ }), u = qy(a), `已回退主数据到快照 #${t.id}[${t.op}]${t.label ? `(${t.label})` : ""}。`) : $({
17816
17887
  code: "SNAPSHOT_SCHEMA_INVALID",
17817
17888
  message: `快照 #${t.id} 的值不符合当前 schema,无法回退`,
17818
17889
  hint: "schema 可能已变更;该快照已过期,选其他快照或重新设置",
@@ -17835,18 +17906,23 @@ function kb(e, n = {}) {
17835
17906
  message: `未找到快照 #${e}`,
17836
17907
  hint: "不传 id 查看最近一次;或用 list_data_snapshots(advanced) 查看可用序号"
17837
17908
  });
17838
- let r = By(n.value), a = t || "";
17909
+ let r = Vy(n.value), a = t || "";
17839
17910
  if (a) {
17840
- if (!Ev(a, i, s)) return $({
17911
+ if (Iy(a)) return $({
17912
+ code: "PATH_UNSAFE",
17913
+ message: `jsonPath "${a}" 含非法段`,
17914
+ hint: "使用正常属性路径"
17915
+ });
17916
+ if (!Dv(a, i, s)) return $({
17841
17917
  code: "PATH_DENIED",
17842
17918
  message: `history_data @ "${a}" 不在 schema 声明字段内`,
17843
17919
  hint: "仅 schema 声明的 key 可读"
17844
17920
  });
17845
- r = Ly(r, a);
17846
- let e = Ov(i, a);
17847
- e && (r = kv(r, e));
17848
- } else s && (r = kv(r, i));
17849
- return `快照 #${n.id}[${n.op}]${n.label ? `(${n.label})` : ""}${a ? ` @ ${a}` : ""} = ${Wy(r)}`;
17921
+ r = Ry(r, a);
17922
+ let e = kv(i, a);
17923
+ e && (r = Av(r, e));
17924
+ } else s && (r = Av(r, i));
17925
+ return `快照 #${n.id}[${n.op}]${n.label ? `(${n.label})` : ""}${a ? ` @ ${a}` : ""} = ${Gy(r)}`;
17850
17926
  }, {
17851
17927
  name: "history_data",
17852
17928
  description: "只读查看某次快照(默认最近一次)的内容,不回退当前主数据。看上一版长啥样而不影响当前(冲突诊断/verify 自纠/用户问\"刚才改了啥\")。可选 id 指定快照序号、jsonPath 只看子路径(按 schema 投影)。",
@@ -17861,9 +17937,9 @@ function kb(e, n = {}) {
17861
17937
  message: `主数据不是对象/数组,无法查询(当前为 ${a === void 0 ? "undefined" : typeof a})`,
17862
17938
  hint: "query 仅适用于对象/数组;叶子用 get_data 读"
17863
17939
  });
17864
- let n = s ? Av(a, s) : a, r;
17940
+ let n = s ? jv(a, s) : a, r;
17865
17941
  try {
17866
- r = bb(n, e);
17942
+ r = xb(n, e);
17867
17943
  } catch (t) {
17868
17944
  return $({
17869
17945
  code: "JSONPATH_SYNTAX",
@@ -17872,7 +17948,7 @@ function kb(e, n = {}) {
17872
17948
  details: { expr: e }
17873
17949
  });
17874
17950
  }
17875
- 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":${Wy(e.value)}}`);
17951
+ 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":${Gy(e.value)}}`);
17876
17952
  return `{"matched":${r.length},"returned":${o.length},"truncated":${r.length > i},"results":[${c.join(",")}]}`;
17877
17953
  }, {
17878
17954
  name: "query_data",
@@ -17888,13 +17964,13 @@ function kb(e, n = {}) {
17888
17964
  message: "主数据为空,无可搜索内容"
17889
17965
  });
17890
17966
  try {
17891
- let o = Sb(s ? Av(a, s) : a, e, {
17967
+ let o = Cb(s ? jv(a, s) : a, e, {
17892
17968
  mode: t,
17893
17969
  fuzzyThreshold: n,
17894
17970
  matchKey: r,
17895
17971
  limit: i ?? 50
17896
17972
  });
17897
- return Wy({
17973
+ return Gy({
17898
17974
  matched: o.length,
17899
17975
  results: o
17900
17976
  });
@@ -17929,17 +18005,17 @@ function kb(e, n = {}) {
17929
18005
  });
17930
18006
  let r = n || "", o;
17931
18007
  if (r) {
17932
- if (!Ev(r, i, s)) return $({
18008
+ if (!Dv(r, i, s)) return $({
17933
18009
  code: "PATH_DENIED",
17934
18010
  message: `eval_script @ "${r}" 不在 schema 声明字段内`,
17935
18011
  hint: "仅 schema 声明的 key 可作为子树"
17936
18012
  });
17937
- if (o = Ly(a, r), s) {
17938
- let e = Ov(i, r);
17939
- e && (o = kv(o, e));
18013
+ if (o = Ry(a, r), s) {
18014
+ let e = kv(i, r);
18015
+ e && (o = Av(o, e));
17940
18016
  }
17941
- } else o = s ? Av(a, s) : a;
17942
- let c = By(o), l = await Tb(c, e, r && JSON.stringify(c).length > 1e5 ? 8e3 : 3e3);
18017
+ } else o = s ? jv(a, s) : a;
18018
+ let c = Vy(o), l = await Eb(c, e, r && JSON.stringify(c).length > 1e5 ? 8e3 : 3e3);
17943
18019
  if (!l.ok) {
17944
18020
  let t = /超时/.test(l.error || "");
17945
18021
  return $({
@@ -17955,18 +18031,18 @@ function kb(e, n = {}) {
17955
18031
  if (t === "transform") {
17956
18032
  let e = l.result;
17957
18033
  if (r) {
17958
- let t = By(a), n = qy(t, "set", r, e);
18034
+ let t = Vy(a), n = Jy(t, "set", r, e);
17959
18035
  if (n) return $({
17960
18036
  code: "PATCH_FAILED",
17961
18037
  message: `eval 子树 transform @ "${r}" 失败: ${n}`,
17962
18038
  hint: "检查子路径:set 需父为对象/数组"
17963
18039
  });
17964
18040
  let o = i.safeParse(t);
17965
- return o.success ? (m("edit", "eval_transform_subtree"), Jy(a, "set", r, e), p({
18041
+ return o.success ? (m("edit", "eval_transform_subtree"), Yy(a, "set", r, e), p({
17966
18042
  op: "edit",
17967
18043
  detail: `eval_transform_subtree @ ${r}`,
17968
18044
  timestamp: Date.now()
17969
- }), u = Ky(a), `已通过脚本 transform 子树 @ ${r} 更新(耗时 ${l.elapsedMs}ms)。当前值: ${Wy(a, 600)}`) : $({
18045
+ }), u = qy(a), `已通过脚本 transform 子树 @ ${r} 更新(耗时 ${l.elapsedMs}ms)。当前值: ${Gy(a, 600)}`) : $({
17970
18046
  code: "SCHEMA_INVALID",
17971
18047
  message: `脚本返回值作为子树 @ "${r}" 后整体校验失败,未写入`,
17972
18048
  hint: `确认返回值符合 ${r} 处的子 schema`,
@@ -17979,15 +18055,15 @@ function kb(e, n = {}) {
17979
18055
  message: `主数据 bind 为原始类型(${a === null ? "null" : typeof a}),eval transform(patches) 无法就地替换`,
17980
18056
  hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹或集成方通过 sdk.setData 替换 bind"
17981
18057
  });
17982
- let t = e.patches, n = By(a), r = [];
18058
+ let t = e.patches, n = Vy(a), r = [];
17983
18059
  for (let e = 0; e < t.length; e++) {
17984
18060
  let a = t[e], o = a.jsonPath || "";
17985
- if (Fy(o)) return $({
18061
+ if (Iy(o)) return $({
17986
18062
  code: "PATH_UNSAFE",
17987
18063
  message: `patches[${e}] jsonPath "${o}" 含非法段`,
17988
18064
  hint: "使用正常属性路径"
17989
18065
  });
17990
- if (!Ev(o, i, s)) return $({
18066
+ if (!Dv(o, i, s)) return $({
17991
18067
  code: "PATH_DENIED",
17992
18068
  message: `patches[${e}] @ "${o}" 不在 schema 声明字段内`,
17993
18069
  hint: "仅 schema 声明的 key 可写"
@@ -17999,11 +18075,11 @@ function kb(e, n = {}) {
17999
18075
  message: `patches[${e}] ${c} 操作需要 value`,
18000
18076
  hint: `op 为 ${c} 时 value 必填`
18001
18077
  });
18002
- let t = Vy(a.value);
18078
+ let t = Hy(a.value);
18003
18079
  if (t.parseError) return Sg(`patches[${e}]`, a.value, t.parseError);
18004
18080
  l = t.parsed;
18005
18081
  }
18006
- let u = qy(n, c, o, l);
18082
+ let u = Jy(n, c, o, l);
18007
18083
  if (u) return $({
18008
18084
  code: "PATCH_FAILED",
18009
18085
  message: `patches[${e}]: ${u}`,
@@ -18023,30 +18099,30 @@ function kb(e, n = {}) {
18023
18099
  details: bg(o.error.issues)
18024
18100
  });
18025
18101
  m("edit", "eval_transform");
18026
- for (let e of r) Jy(a, e.op, e.jp, e.value);
18102
+ for (let e of r) Yy(a, e.op, e.jp, e.value);
18027
18103
  return p({
18028
18104
  op: "edit",
18029
18105
  detail: `eval_transform(${r.length} patches)`,
18030
18106
  timestamp: Date.now()
18031
- }), u = Ky(a), `已通过脚本 transform(patches) 更新主数据(${r.length} 个 patch,耗时 ${l.elapsedMs}ms)。当前值: ${Wy(a, 600)}`;
18107
+ }), u = qy(a), `已通过脚本 transform(patches) 更新主数据(${r.length} 个 patch,耗时 ${l.elapsedMs}ms)。当前值: ${Gy(a, 600)}`;
18032
18108
  }
18033
18109
  let t = i.safeParse(e);
18034
18110
  return t.success ? typeof a != "object" || !a ? $({
18035
18111
  code: "LEAF_BIND",
18036
18112
  message: `主数据 bind 为原始类型(${a === null ? "null" : typeof a}),eval transform 无法就地替换外部持有的值引用`,
18037
18113
  hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹或集成方通过 sdk.setData 替换 bind"
18038
- }) : (m("edit", "eval_transform"), t.data !== null && typeof t.data == "object" && (s ? Iy(a, t.data) : Xy(a, t.data)), p({
18114
+ }) : (m("edit", "eval_transform"), t.data !== null && typeof t.data == "object" && (s ? Ly(a, t.data) : Zy(a, t.data)), p({
18039
18115
  op: "edit",
18040
18116
  detail: "eval_transform",
18041
18117
  timestamp: Date.now()
18042
- }), u = Ky(a), `已通过脚本 transform 更新主数据(耗时 ${l.elapsedMs}ms)。当前值: ${Wy(a, 600)}`) : $({
18118
+ }), u = qy(a), `已通过脚本 transform 更新主数据(耗时 ${l.elapsedMs}ms)。当前值: ${Gy(a, 600)}`) : $({
18043
18119
  code: "SCHEMA_INVALID",
18044
18120
  message: "脚本返回值校验失败,未写入(transform 模式要求返回主数据的完整新值且符合 schema)",
18045
18121
  hint: "确认脚本 return 了完整新值(非部分);或返回 {patches:[...]} 走增量模式;按 describe_data() 查看格式",
18046
18122
  details: bg(t.error.issues)
18047
18123
  });
18048
18124
  }
18049
- return Wy({
18125
+ return Gy({
18050
18126
  ok: !0,
18051
18127
  result: l.result,
18052
18128
  elapsedMs: l.elapsedMs
@@ -18061,16 +18137,16 @@ function kb(e, n = {}) {
18061
18137
  })
18062
18138
  }),
18063
18139
  r(async ({ jsonPath: e, jsonPaths: t, fields: r, depth: c, offset: l, limit: d }) => {
18064
- let f = Ky(a);
18140
+ let f = qy(a);
18065
18141
  if (u = f, t && t.length) {
18066
18142
  let e = t.map((e) => {
18067
18143
  let t = e || "";
18068
- if (!Ev(t, i, s)) return `- ${t || "(根)"}: [PATH_DENIED: 不在 schema 声明字段内]`;
18069
- let o = t ? Ly(a, t) : a;
18070
- if (!t) o = Av(o, s);
18144
+ if (!Dv(t, i, s)) return `- ${t || "(根)"}: [PATH_DENIED: 不在 schema 声明字段内]`;
18145
+ let o = t ? Ry(a, t) : a;
18146
+ if (!t) o = jv(o, s);
18071
18147
  else if (s) {
18072
- let e = Ov(i, t);
18073
- e && (o = kv(o, e));
18148
+ let e = kv(i, t);
18149
+ e && (o = Av(o, e));
18074
18150
  }
18075
18151
  let l = o;
18076
18152
  if (n.interceptors?.read) try {
@@ -18078,21 +18154,26 @@ function kb(e, n = {}) {
18078
18154
  } catch (e) {
18079
18155
  return `- ${t}: [READ_INTERCEPT: ${e.message}]`;
18080
18156
  }
18081
- return r && r.length && (l = Hy(l, r)), c != null && (l = Uy(l, c)), l === void 0 ? `- ${t} = (undefined)` : `- ${t} = ${Wy(l)}`;
18157
+ return r && r.length && (l = Uy(l, r)), c != null && (l = Wy(l, c)), l === void 0 ? `- ${t} = (undefined)` : `- ${t} = ${Gy(l)}`;
18082
18158
  });
18083
18159
  return `多路径读取(共 ${t.length} 项,hash=${f}):\n${e.join("\n")}`;
18084
18160
  }
18085
18161
  let p = e || "";
18086
- if (!Ev(p, i, s)) return $({
18162
+ if (Iy(p)) return $({
18163
+ code: "PATH_UNSAFE",
18164
+ message: `jsonPath "${p}" 含非法段(__proto__/constructor/prototype)`,
18165
+ hint: "使用正常属性路径,如 components.0.text(数组索引数字)"
18166
+ });
18167
+ if (!Dv(p, i, s)) return $({
18087
18168
  code: "PATH_DENIED",
18088
18169
  message: `read @ "${p}" 不在 schema 声明字段内`,
18089
18170
  hint: "主数据仅暴露 schema 声明的字段;若需操作该字段,集成方需在 schema 中声明它"
18090
18171
  });
18091
- let m = p ? Ly(a, p) : a;
18092
- if (!p) m = Av(m, s);
18172
+ let m = p ? Ry(a, p) : a;
18173
+ if (!p) m = jv(m, s);
18093
18174
  else if (s) {
18094
- let e = Ov(i, p);
18095
- e && (m = kv(m, e));
18175
+ let e = kv(i, p);
18176
+ e && (m = Av(m, e));
18096
18177
  }
18097
18178
  let h = m;
18098
18179
  if (n.interceptors?.read) try {
@@ -18103,13 +18184,13 @@ function kb(e, n = {}) {
18103
18184
  message: `read 拦截器抛错: ${e.message}`
18104
18185
  });
18105
18186
  }
18106
- r && r.length && (h = Hy(h, r)), c != null && (h = Uy(h, c));
18187
+ r && r.length && (h = Uy(h, r)), c != null && (h = Wy(h, c));
18107
18188
  let g = e ? "" : `主数据说明: ${o}\n格式: 写入值需为 JSON,且通过声明的 schema 校验(校验失败时 write 会返回结构化错误)。字段约束(类型/min/max/enum/必填/默认)见 systemPrompt「可操作数据」段,或用 schema_data({ jsonPath }) 按需查。\n\n`, _ = r && r.length ? `(字段裁剪:${r.join(",")})` : "", v = c == null ? "" : `(深度≤${c})`, y = _ || v ? ` ${_}${v}` : "";
18108
18189
  if ((l !== void 0 || d !== void 0) && Array.isArray(h)) {
18109
18190
  let e = h.length, t = Math.max(0, l ?? 0), n = Math.min(200, Math.max(1, d ?? 50)), r = h.slice(t, t + n), i = t + n < e;
18110
- return `${g}主数据${p ? ` @ ${p}` : ""} 数组分页[offset=${t},limit=${n}]${y} = ${Wy(r)} (total=${e}, hasMore=${i}) (hash=${f})`;
18191
+ return `${g}主数据${p ? ` @ ${p}` : ""} 数组分页[offset=${t},limit=${n}]${y} = ${Gy(r)} (total=${e}, hasMore=${i}) (hash=${f})`;
18111
18192
  }
18112
- return h === void 0 ? `${g}主数据${p ? ` @ ${p}` : ""}${y} = (undefined) (hash=${f})` : `${g}主数据${p ? ` @ ${p}` : ""}${y} = ${Wy(h)} (hash=${f})`;
18193
+ return h === void 0 ? `${g}主数据${p ? ` @ ${p}` : ""}${y} = (undefined) (hash=${f})` : `${g}主数据${p ? ` @ ${p}` : ""}${y} = ${Gy(h)} (hash=${f})`;
18113
18194
  }, {
18114
18195
  name: "read",
18115
18196
  description: "读取主数据(高层入口,合并 describe/get)。不传 jsonPath → 返回主数据说明 + 格式提示(含字段约束);传 jsonPath → 返回该子路径当前值 + hash;传 jsonPaths → 一次读多个不相关子路径(省多轮往返)。hash 用于乐观锁(默认 autoLock,write 时自动比对,无需手动传)。fields(字段裁剪)/depth(深度截断)减体积;offset+limit 对数组目标分页(返回切片 + total/hasMore)。集成方可能经 read 拦截器对返回值脱敏/派生。",
@@ -18125,15 +18206,15 @@ function kb(e, n = {}) {
18125
18206
  r(async ({ value: e, patch: t, patches: r, del: o, dryRun: c }) => {
18126
18207
  let l = "set";
18127
18208
  o ? l = "delete" : (r && r.length || t) && (l = "edit");
18128
- let f = e, g;
18209
+ let f = t?.value === void 0 ? e : t.value, g;
18129
18210
  if (n.interceptors?.write) try {
18130
18211
  let i = l === "delete" ? {
18131
18212
  del: !0,
18132
18213
  jsonPath: t?.jsonPath
18133
18214
  } : l === "edit" && r && r.length ? { patches: r } : l === "edit" ? {
18134
- op: t.op,
18215
+ op: t.op ?? "set",
18135
18216
  jsonPath: t.jsonPath || "",
18136
- value: e
18217
+ value: f
18137
18218
  } : e, o = n.interceptors.write(i, a);
18138
18219
  if (o && typeof o == "object" && "error" in o) return $({
18139
18220
  code: "WRITE_INTERCEPT",
@@ -18153,7 +18234,7 @@ function kb(e, n = {}) {
18153
18234
  }
18154
18235
  let _ = d ? u : void 0;
18155
18236
  if (c && _ !== void 0) {
18156
- let e = Ky(a);
18237
+ let e = qy(a);
18157
18238
  if (e !== _) return $({
18158
18239
  code: "VERSION_CONFLICT",
18159
18240
  message: `dryRun 预检发现乐观锁冲突: expectedHash=${_} 当前 hash=${e}(主数据在你 read 后被改)`,
@@ -18166,12 +18247,12 @@ function kb(e, n = {}) {
18166
18247
  message: "delete 需要 patch.jsonPath 指定要删的子路径(主数据整体不可删,用 write(value) 整体替换)",
18167
18248
  hint: "如 patch:{jsonPath:\"components.0\"}, del:true"
18168
18249
  });
18169
- if (Fy(t.jsonPath)) return $({
18250
+ if (Iy(t.jsonPath)) return $({
18170
18251
  code: "PATH_UNSAFE",
18171
18252
  message: `jsonPath "${t.jsonPath}" 含非法段`,
18172
18253
  hint: "使用正常属性路径"
18173
18254
  });
18174
- if (!Ev(t.jsonPath, i, s)) return $({
18255
+ if (!Dv(t.jsonPath, i, s)) return $({
18175
18256
  code: "PATH_DENIED",
18176
18257
  message: `write delete @ "${t.jsonPath}" 不在 schema 声明字段内`,
18177
18258
  hint: "仅 schema 声明的 key 可删"
@@ -18179,16 +18260,16 @@ function kb(e, n = {}) {
18179
18260
  let e = await h("delete", _);
18180
18261
  if (e !== null) return e;
18181
18262
  if (c) {
18182
- let e = By(a);
18183
- return zy(e, t.jsonPath) ? `dryRun(delete): 将删除 @ ${t.jsonPath}。预览剩余:${Wy(e, 600)}。未实际写入、未入快照。` : `dryRun(delete): @ ${t.jsonPath} 不存在(无需删除)。未实际写入。`;
18263
+ let e = Vy(a);
18264
+ return By(e, t.jsonPath) ? `dryRun(delete): 将删除 @ ${t.jsonPath}。预览剩余:${Gy(e, 600)}。未实际写入、未入快照。` : `dryRun(delete): @ ${t.jsonPath} 不存在(无需删除)。未实际写入。`;
18184
18265
  }
18185
18266
  m("delete");
18186
- let n = zy(a, t.jsonPath);
18267
+ let n = By(a, t.jsonPath);
18187
18268
  return p({
18188
18269
  op: "delete",
18189
18270
  detail: t.jsonPath,
18190
18271
  timestamp: Date.now()
18191
- }), u = Ky(a), n ? `已删除主数据 @ ${t.jsonPath}` : `主数据 @ ${t.jsonPath} 不存在(无需删除)`;
18272
+ }), u = qy(a), n ? `已删除主数据 @ ${t.jsonPath}` : `主数据 @ ${t.jsonPath} 不存在(无需删除)`;
18192
18273
  }
18193
18274
  if (l === "edit") {
18194
18275
  if (typeof a != "object" || !a) return $({
@@ -18199,18 +18280,18 @@ function kb(e, n = {}) {
18199
18280
  let e = await h("edit", _);
18200
18281
  if (e !== null) return e;
18201
18282
  let n = g || (r && r.length ? r : [{
18202
- op: t.op,
18283
+ op: t.op ?? "set",
18203
18284
  jsonPath: t.jsonPath || "",
18204
18285
  value: f
18205
- }]), o = By(a), l = [];
18286
+ }]), o = Vy(a), l = [];
18206
18287
  for (let e = 0; e < n.length; e++) {
18207
18288
  let t = n[e], r = t.jsonPath || "";
18208
- if (Fy(r)) return $({
18289
+ if (Iy(r)) return $({
18209
18290
  code: "PATH_UNSAFE",
18210
18291
  message: `patches[${e}] jsonPath "${r}" 含非法段`,
18211
18292
  hint: "使用正常属性路径,如 components.0.text"
18212
18293
  });
18213
- if (!Ev(r, i, s)) return $({
18294
+ if (!Dv(r, i, s)) return $({
18214
18295
  code: "PATH_DENIED",
18215
18296
  message: `patches[${e}] @ "${r}" 不在 schema 声明字段内`,
18216
18297
  hint: "仅 schema 声明的 key 可写"
@@ -18222,11 +18303,11 @@ function kb(e, n = {}) {
18222
18303
  message: `patches[${e}] ${a} 操作需要 value`,
18223
18304
  hint: `op 为 ${a} 时 value 必填;删除请用 op:'remove'`
18224
18305
  });
18225
- let n = Vy(t.value);
18306
+ let n = Hy(t.value);
18226
18307
  if (n.parseError) return Sg(`patches[${e}]`, t.value, n.parseError);
18227
18308
  c = n.parsed;
18228
18309
  }
18229
- let u = qy(o, a, r, c);
18310
+ let u = Jy(o, a, r, c);
18230
18311
  if (u) return $({
18231
18312
  code: "PATCH_FAILED",
18232
18313
  message: `patches[${e}]: ${u}`,
@@ -18240,34 +18321,34 @@ function kb(e, n = {}) {
18240
18321
  }
18241
18322
  let d = i.safeParse(o);
18242
18323
  if (!d.success) return xg("", d.error.issues);
18243
- if (c) return `dryRun(edit): ${l.length} 个 patch 预检通过(schema 校验 OK)。预览结果:${Wy(o, 600)}。未实际写入、未入快照。`;
18324
+ if (c) return `dryRun(edit): ${l.length} 个 patch 预检通过(schema 校验 OK)。预览结果:${Gy(o, 600)}。未实际写入、未入快照。`;
18244
18325
  m("edit");
18245
- for (let e of l) Jy(a, e.op, e.jp, e.value);
18326
+ for (let e of l) Yy(a, e.op, e.jp, e.value);
18246
18327
  return p({
18247
18328
  op: "edit",
18248
18329
  detail: `${l.length} 个 patch${l.length > 1 ? "(批量)" : ""}`,
18249
18330
  value: l.map((e) => `${e.op}@${e.jp}`),
18250
18331
  timestamp: Date.now()
18251
- }), u = Ky(a), `已 write(edit) 主数据(${l.length} 个 patch)。当前值:${Wy(a, 600)} (新 hash=${Ky(a)})`;
18332
+ }), u = qy(a), `已 write(edit) 主数据(${l.length} 个 patch)。当前值:${Gy(a, 600)} (新 hash=${qy(a)})`;
18252
18333
  }
18253
- let v, y = Vy(f);
18334
+ let v, y = Hy(f);
18254
18335
  if (y.parseError) return Sg("", f, y.parseError);
18255
18336
  v = y.parsed;
18256
18337
  let b = await h("set", _);
18257
18338
  if (b !== null) return b;
18258
18339
  let x = i.safeParse(v);
18259
- return x.success ? c ? `dryRun(set): schema 校验通过。预览新值:${Wy(x.data, 600)}。未实际写入、未入快照。` : typeof a != "object" || !a ? $({
18340
+ return x.success ? c ? `dryRun(set): schema 校验通过。预览新值:${Gy(x.data, 600)}。未实际写入、未入快照。` : typeof a != "object" || !a ? $({
18260
18341
  code: "LEAF_BIND",
18261
18342
  message: `主数据 bind 为原始类型(${a === null ? "null" : typeof a}),write(set) 无法就地替换外部持有的值引用`,
18262
18343
  hint: "主数据 bind 必须为对象/数组;叶子值请用对象包裹(如 {value:\"x\"})或集成方通过 sdk.setData 替换 bind"
18263
- }) : (m("set"), x.data !== null && typeof x.data == "object" && (s ? Iy(a, x.data) : Xy(a, x.data)), p({
18344
+ }) : (m("set"), x.data !== null && typeof x.data == "object" && (s ? Ly(a, x.data) : Zy(a, x.data)), p({
18264
18345
  op: "set",
18265
18346
  value: x.data,
18266
18347
  timestamp: Date.now()
18267
- }), u = Ky(a), `已 write(set) 主数据 = ${Wy(x.data, 600)} (新 hash=${Ky(a)})${s ? "(白名单模式:仅更新 schema 声明字段,未声明字段保留)" : ""}`) : xg("", x.error.issues);
18348
+ }), u = qy(a), `已 write(set) 主数据 = ${Gy(x.data, 600)} (新 hash=${qy(a)})${s ? "(白名单模式:仅更新 schema 声明字段,未声明字段保留)" : ""}`) : xg("", x.error.issues);
18268
18349
  }, {
18269
18350
  name: "write",
18270
- 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})。dryRun(可选):预检模式,走完整校验链(schema + 白名单 + patch 应用到 clone)但不落盘/入快照,返回预览(四意图均支持,复杂改动先看会改成啥、能否过 schema)。",
18351
+ description: "写入主数据(高层入口,合并 set/edit/delete + 自动乐观锁 + 自动快照)。四种意图:① 整体替换 write({ value }) value 为整个 JSON 对象(推荐)或字符串;② 单个增量 patch write({ patch:{op,jsonPath,value} }) op=set/remove/merge/append,jsonPath 相对主数据根(如 components.0.props.title),patch.value 是该 patch 的值(自带,与 patches 一致——string/number 直传该字段新值,勿包成 {字段:值} 对象);也兼容 write({ value, patch:{op,jsonPath} }) 顶层 value 形式(向后兼容,但优先用 patch.value 避免与①整体 set 的 value 语义混淆);③ 批量增量 write({ patches:[{op,jsonPath,value},...] }) 一次原子应用多个 patch(任一失败整体不写入,适合一次改多处);④ 删除 write({ patch:{jsonPath}, del:true })。写入自动经 schema 校验(失败不写)+ 自动存快照(可 restore_data 回退)+ 自动乐观锁(autoLock,用你最后 read 到的 hash 比对,冲突则 VERSION_CONFLICT)。集成方可能经 write 拦截器校验/转换/拒绝(批量模式拦截器收到 {patches},返回新 patches 数组或 {error})。dryRun(可选):预检模式,走完整校验链(schema + 白名单 + patch 应用到 clone)但不落盘/入快照,返回预览(四意图均支持,复杂改动先看会改成啥、能否过 schema)。",
18271
18352
  schema: t.object({
18272
18353
  value: t.unknown().optional().describe("JSON 对象(推荐,如 {title:\"x\"})或 JSON 字符串;set 整体或单个 patch 的 set/merge/append 必填"),
18273
18354
  patch: t.object({
@@ -18276,9 +18357,10 @@ function kb(e, n = {}) {
18276
18357
  "remove",
18277
18358
  "merge",
18278
18359
  "append"
18279
- ]),
18280
- jsonPath: t.string().optional().describe("相对主数据根的点号路径(如 components.0.text);set/remove 必填,merge/append 不填则作用于根")
18281
- }).optional().describe("单个增量编辑;传 patch( patches)走单 patch edit 语义,value 作为该 patch value"),
18360
+ ]).optional().describe("增量操作:set 设值/remove 删/merge 合并对象/append 追加数组。单 patch edit 缺省按 set;del 模式(write({patch:{jsonPath},del:true}))不读 op 可省略"),
18361
+ jsonPath: t.string().optional().describe("相对主数据根的点号路径(如 components.0.text);set/remove 必填,merge/append 不填则作用于根"),
18362
+ value: t.unknown().optional().describe(" patch 的值(JSON 直传或 JSON 字符串);set/merge/append 必填,remove 不需。与顶层 value 二选一:优先 patch.value,未填则回退顶层 value(向后兼容)。推荐用 patch.value(自带,与 patches 元素一致,无歧义)")
18363
+ }).optional().describe("单个增量编辑(自带 value,与 patches 元素一致);传 patch(无 patches)走单 patch edit 语义"),
18282
18364
  patches: t.array(t.object({
18283
18365
  op: t.enum([
18284
18366
  "set",
@@ -18294,8 +18376,8 @@ function kb(e, n = {}) {
18294
18376
  })
18295
18377
  }),
18296
18378
  r(async ({ jsonPath: e }) => {
18297
- let t = e || "", n = t ? Ov(i, t) : i;
18298
- return n ? `schema${t ? ` @ ${t}` : ""} = ${Wy(Iv(n))}` : $({
18379
+ let t = e || "", n = t ? kv(i, t) : i;
18380
+ return n ? `schema${t ? ` @ ${t}` : ""} = ${Gy(Lv(n))}` : $({
18299
18381
  code: "PATH_DENIED",
18300
18382
  message: `schema @ "${t}" 不存在`,
18301
18383
  hint: "jsonPath 需在 schema 声明字段内(用 read() 不传 jsonPath 查看顶层字段)"
@@ -18307,8 +18389,14 @@ function kb(e, n = {}) {
18307
18389
  }),
18308
18390
  r(async ({ snapshotId: e, against: t }) => {
18309
18391
  let n = t != null, r, i;
18310
- if (n) r = t, i = "against";
18311
- else {
18392
+ if (n) {
18393
+ let e = t;
18394
+ if (typeof e == "string") {
18395
+ let t = Hy(e);
18396
+ t.parseError || (e = t.parsed);
18397
+ }
18398
+ r = e, i = "against";
18399
+ } else {
18312
18400
  if (!c.length) return $({
18313
18401
  code: "NO_SNAPSHOT",
18314
18402
  message: "无快照可对比",
@@ -18322,8 +18410,8 @@ function kb(e, n = {}) {
18322
18410
  });
18323
18411
  r = t.value, i = `快照 #${t.id}`;
18324
18412
  }
18325
- let o = s ? Av(a, s) : a, l = Zy(r, By(o));
18326
- return l.length ? `差异(当前 vs ${i},共 ${l.length} 处):\n${l.map((e) => ` ${e.path}: ${Wy(e.from)} → ${Wy(e.to)}`).join("\n")}` : `无差异:当前主数据与 ${i} 完全相同。`;
18413
+ let o = s ? jv(a, s) : a, l = Qy(r, Vy(o));
18414
+ return l.length ? `差异(当前 vs ${i},共 ${l.length} 处):\n${l.map((e) => ` ${e.path}: ${Gy(e.from)} → ${Gy(e.to)}`).join("\n")}` : `无差异:当前主数据与 ${i} 完全相同。`;
18327
18415
  }, {
18328
18416
  name: "diff_data",
18329
18417
  description: "对比当前主数据与某快照(默认最近)或一段 JSON(against)的差异,返回结构化 {path, from→to} 列表。供 verify 自纠/冲突诊断/操作审计(\"刚才改了啥\")。snapshotId 指定快照;against 传一段 JSON 值(与 snapshotId 互斥,传则忽略快照)。",
@@ -18342,8 +18430,8 @@ function kb(e, n = {}) {
18342
18430
  }
18343
18431
  //#endregion
18344
18432
  //#region src/core/tools/fetchDoc.ts
18345
- var Ab = 3e4, jb = [r(async ({ url: e, as: t }) => {
18346
- let n = new AbortController(), r = setTimeout(() => n.abort(), Ab);
18433
+ var jb = 3e4, Mb = [r(async ({ url: e, as: t }) => {
18434
+ let n = new AbortController(), r = setTimeout(() => n.abort(), jb);
18347
18435
  try {
18348
18436
  let r = await fetch(e, {
18349
18437
  method: "GET",
@@ -18360,7 +18448,7 @@ var Ab = 3e4, jb = [r(async ({ url: e, as: t }) => {
18360
18448
  ].join("\n");
18361
18449
  } catch (t) {
18362
18450
  let r = t?.message || String(t);
18363
- return n.signal.aborted ? `获取失败:请求超时(${Ab}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
18451
+ return n.signal.aborted ? `获取失败:请求超时(${jb}ms,${e})。` : /Failed to fetch|NetworkError|CORS|blocked/i.test(r) ? `获取失败:可能是 CORS 跨域拦截或网络错误(${r})。浏览器仅能 GET 同源或服务端已配置 CORS 的资源;跨域抓取需后端代理。` : `获取失败:${r}`;
18364
18452
  } finally {
18365
18453
  clearTimeout(r);
18366
18454
  }
@@ -18371,7 +18459,7 @@ var Ab = 3e4, jb = [r(async ({ url: e, as: t }) => {
18371
18459
  url: t.string().describe("要抓取的 URL(同源或已配 CORS)"),
18372
18460
  as: t.enum(["text", "markdown"]).optional().describe("返回格式标签,默认 text")
18373
18461
  })
18374
- })], Mb = [
18462
+ })], Nb = [
18375
18463
  "id",
18376
18464
  "class",
18377
18465
  "href",
@@ -18382,12 +18470,11 @@ var Ab = 3e4, jb = [r(async ({ url: e, as: t }) => {
18382
18470
  "role",
18383
18471
  "aria-label",
18384
18472
  "name",
18385
- "type",
18386
- "value"
18473
+ "type"
18387
18474
  ];
18388
- function Nb(e, t) {
18475
+ function Pb(e, t) {
18389
18476
  if (!e) return null;
18390
- let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ?? Mb, s = (e) => {
18477
+ let { depth: n, attrs: r, includeText: i = !0 } = t, a = r !== void 0, o = r ?? Nb, s = (e) => {
18391
18478
  let t = {};
18392
18479
  for (let n of Array.from(e.attributes)) (a ? o.includes(n.name) : o.includes(n.name) || n.name.startsWith("data-")) && (t[n.name] = n.value);
18393
18480
  return t;
@@ -18405,10 +18492,10 @@ function Nb(e, t) {
18405
18492
  };
18406
18493
  return c(e, n);
18407
18494
  }
18408
- var Pb = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
18495
+ var Fb = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
18409
18496
  let i = e ? document.querySelector(e) : document.body;
18410
18497
  if (!i) return `未找到匹配元素:selector="${e}"`;
18411
- let a = Nb(i, {
18498
+ let a = Pb(i, {
18412
18499
  depth: t ?? 3,
18413
18500
  attrs: n,
18414
18501
  includeText: r ?? !0
@@ -18423,12 +18510,12 @@ var Pb = r(({ selector: e, depth: t, attrs: n, includeText: r }) => {
18423
18510
  attrs: t.array(t.string()).optional().describe("属性白名单(传了 = 严格白名单;不传 = 默认常用 + data-*)"),
18424
18511
  includeText: t.boolean().optional().describe("是否包含直接文本(默认 true)")
18425
18512
  })
18426
- }), Fb = [Pb], Ib = /^[a-zA-Z][a-zA-Z0-9_]*$/;
18427
- function Lb(e) {
18513
+ }), Ib = [Fb], Lb = /^[a-zA-Z][a-zA-Z0-9_]*$/;
18514
+ function Rb(e) {
18428
18515
  let n = [];
18429
18516
  for (let [i, a] of Object.entries(e)) {
18430
- if (!Ib.test(i)) {
18431
- console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${Ib}),已跳过`);
18517
+ if (!Lb.test(i)) {
18518
+ console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${Lb}),已跳过`);
18432
18519
  continue;
18433
18520
  }
18434
18521
  let e = a.description || `宿主动作 ${i}`;
@@ -18448,9 +18535,9 @@ function Lb(e) {
18448
18535
  }
18449
18536
  return n;
18450
18537
  }
18451
- function Rb(e) {
18538
+ function zb(e) {
18452
18539
  let t = {};
18453
- for (let [n, r] of Object.entries(e)) Ib.test(n) && (t[n] = {
18540
+ for (let [n, r] of Object.entries(e)) Lb.test(n) && (t[n] = {
18454
18541
  description: r.description,
18455
18542
  hasParams: !!r.params
18456
18543
  });
@@ -18458,11 +18545,11 @@ function Rb(e) {
18458
18545
  }
18459
18546
  //#endregion
18460
18547
  //#region src/core/toolsets.ts
18461
- var zb = jb, Bb = Fb;
18462
- function Vb(e, t) {
18463
- return kb(e, t);
18548
+ var Bb = Mb, Vb = Ib;
18549
+ function Hb(e, t) {
18550
+ return Ab(e, t);
18464
18551
  }
18465
- function Hb(e, t, n, r) {
18552
+ function Ub(e, t, n, r) {
18466
18553
  let i = e?.dataOps !== !1, a = e?.fetch !== !1, o = e?.domInspect === !0;
18467
18554
  return [
18468
18555
  ...i ? t : [],
@@ -18472,15 +18559,15 @@ function Hb(e, t, n, r) {
18472
18559
  }
18473
18560
  //#endregion
18474
18561
  //#region src/core/harness/usageHints.ts
18475
- var Ub = .7;
18476
- function Wb(e, t, n = "simple") {
18562
+ var Wb = .7;
18563
+ function Gb(e, t, n = "simple") {
18477
18564
  let r = n !== "advanced";
18478
18565
  return {
18479
18566
  name: "usageHints",
18480
18567
  augmentPrompt: () => {
18481
18568
  let n = [];
18482
- if (e?.planning !== !1 && (n.push("【自适应规划】按任务复杂度决定是否先规划,不要对简单任务过度编排:"), n.push(" · 简单/明确任务(改单字段、调样式、查值)→ 直接 read/write 执行,不必 write_todos。"), n.push(" · 复杂任务(多步、大改、有歧义、不可逆)→ 先 write_todos 拆解,首个任务标 in_progress,逐项推进。"), n.push(" · 执行中发现步骤要改/补/细分 → 用 update_todo({id, content?, status?}) 按 id 增量改单项,不必重传整个清单。"), n.push(" · 规划出多步方案若需用户拍板 → 先 request_human_confirmation 给方案选项,确认后再执行。"), n.push(" · 规划阶段有轮次预算(maxPlanRevisions,默认 5):勿反复调研/改计划而不执行,规划充分后即开始 write 落地。")), t && (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("读大数组(read 返回 hasMore=true)用 read({jsonPath,offset,limit}) 分页(offset+=limit 续读,默认 limit=50);一次读多个不相关子路径用 read({jsonPaths:[...]}) 省轮次;复杂 patches 改动先 write({patches,dryRun:true}) 预检(走完整校验不落盘)。"), n.push("查历史快照值(看上一版长啥样 / 冲突诊断 / 用户问\"刚才改了啥\")用 history_data({id?,jsonPath?})(只读不改当前);对比当前与历史快照的差异需切 advanced 用 diff_data(返回结构化 path→from/to)。"), n.push("在大数组里按条件筛选用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素 path/index;定位后用 write patch 改。找名字记不清的元素用 search_data(substring/regex/fuzzy)。批量过滤/映射/聚合/重写大数组用 eval_script(沙箱脚本,mode=query 只读/transform 落地)。")) : (n.push("改主数据前先 get_data({jsonPath}) 读其当前真实值与 hash(返回末尾 hash=xxx),基于真实值改,不要凭记忆。写入(set/edit/delete)时回传 expectedHash=该 hash 启用乐观锁——若主数据在你 get 之后被外部代码/其他 agent/用户手动改过,会触发冲突:集成方若开启人工介入,工具会挂起等用户决定(保留外部/强制覆盖/回退),你应等待工具返回后按结果继续(保留外部→重新 get 再改;强制覆盖→已写入,继续;回退→已回退到历史快照,基于回退值重写);未开启人工介入时返回 VERSION_CONFLICT 不写入,重新 get 拿最新值与 hash 再改。"), n.push("不确定主数据字段结构时用 describe_data 查看说明。"), n.push("修改大对象/数组优先用 edit_data 增量 patch(只发改动部分),避免 set_data 整体重传被 max_tokens 截断导致 JSON 不完整、校验失败。"), n.push("修改主数据出错时可用 restore_data 回退最近一次。"), n.push("在大数组里按条件筛选元素用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素的 path/index;定位后再 edit_data 改。"), n.push("找名字记不清的元素用 search_data(支持 substring/regex/fuzzy 模糊搜索)。"), n.push("需要过滤/映射/聚合/批量重写大数组时用 eval_script(沙箱脚本,入参 data);只读探查用 mode=query,批量重写用 mode=transform(返回值经校验后落地)。"), n.push("读大数组用 read({jsonPath,offset,limit}) 分页(返回 hasMore=true 时 offset+=limit 续读);一次读多个不相关子路径用 read({jsonPaths});复杂改动先 write({...,dryRun:true}) 预检不落盘。"), n.push("对比当前与历史快照(或一段 JSON against)的差异用 diff_data({snapshotId?,against?})(返回结构化 path→from/to,verify 自纠/操作审计/\"刚才改了啥\");只读查历史快照值用 history_data({id?,jsonPath?})。"))), e?.subagent !== !1 && n.push("独立子任务可 spawn_agent 委派(只读工具,过程不占主上下文)。"), e?.subagents?.length) {
18483
- let t = e.subagents.filter((e) => (e.temperature ?? 0) >= Ub || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), i = e.subagents.filter((e) => (e.temperature ?? 0) < Ub && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
18569
+ if (e?.planning !== !1 && (n.push("【自适应规划】按任务复杂度决定是否先规划,不要对简单任务过度编排:"), n.push(" · 简单/明确任务(改单字段、调样式、查值)→ 直接 read/write 执行,不必 write_todos。"), n.push(" · 复杂任务(多步、大改、有歧义、不可逆)→ 先 write_todos 拆解,首个任务标 in_progress,逐项推进。"), n.push(" · 执行中发现步骤要改/补/细分 → 用 update_todo({id, content?, status?}) 按 id 增量改单项,不必重传整个清单。"), n.push(" · 规划出多步方案若需用户拍板 → 先 request_human_confirmation 给方案选项,确认后再执行。"), n.push(" · 规划阶段有轮次预算(maxPlanRevisions,默认 5):勿反复调研/改计划而不执行,规划充分后即开始 write 落地。")), t && (r ? (n.push("读写主数据用 read/write(高层入口,自动乐观锁 + 自动快照)。read({jsonPath}) 读子路径当前值(返回含 hash,write 时自动比对,无需手动传);read() 不传读整个主数据 + 说明。write 改值两姿势:① 改单个字段/子路径用 write({patch:{op:\"set\", jsonPath:\"路径.字段\", value:新值}})——patch.value 就是该字段的新值(类型匹配:string 直传字符串、number 传数字、对象传对象),不要包成 {字段:值} 对象(字段名已在 jsonPath);也兼容 write({value:新值, patch:{op,jsonPath}}) 顶层 value(向后兼容,但优先 patch.value,避免与整体 set 的 value 混淆);② 替换整个对象用 write({value:{整个新对象}})。op:set 设值 / remove/ merge 合并对象 / append 追加数组;批量多改动 write({patches:[{op,jsonPath,value},...]});删子路径 write({patch:{jsonPath:\"路径\"}, del:true})。写入自动经 schema 校验(失败不写,按错误提示改值类型/形状后重试)+ 自动存快照(出错可用 restore_data 回退)。"), n.push("修改大对象/数组优先用 write 的 patch 增量(只发改动部分),避免整体重传被 max_tokens 截断致 JSON 不完整。"), n.push("读大数组(read 返回 hasMore=true)用 read({jsonPath,offset,limit}) 分页(offset+=limit 续读,默认 limit=50);一次读多个不相关子路径用 read({jsonPaths:[...]}) 省轮次;复杂 patches 改动先 write({patches,dryRun:true}) 预检(走完整校验不落盘)。"), n.push("查历史快照值(看上一版长啥样 / 冲突诊断 / 用户问\"刚才改了啥\")用 history_data({id?,jsonPath?})(只读不改当前);对比当前与历史快照的差异需切 advanced 用 diff_data(返回结构化 path→from/to)。"), n.push("在大数组里按条件筛选用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素 path/index;定位后用 write patch 改。找名字记不清的元素用 search_data(substring/regex/fuzzy)。批量过滤/映射/聚合/重写大数组用 eval_script(沙箱脚本,mode=query 只读/transform 落地)。")) : (n.push("改主数据前先 get_data({jsonPath}) 读其当前真实值与 hash(返回末尾 hash=xxx),基于真实值改,不要凭记忆。写入(set/edit/delete)时回传 expectedHash=该 hash 启用乐观锁——若主数据在你 get 之后被外部代码/其他 agent/用户手动改过,会触发冲突:集成方若开启人工介入,工具会挂起等用户决定(保留外部/强制覆盖/回退),你应等待工具返回后按结果继续(保留外部→重新 get 再改;强制覆盖→已写入,继续;回退→已回退到历史快照,基于回退值重写);未开启人工介入时返回 VERSION_CONFLICT 不写入,重新 get 拿最新值与 hash 再改。"), n.push("不确定主数据字段结构时用 describe_data 查看说明。"), n.push("修改大对象/数组优先用 edit_data 增量 patch(只发改动部分),避免 set_data 整体重传被 max_tokens 截断导致 JSON 不完整、校验失败。"), n.push("修改主数据出错时可用 restore_data 回退最近一次。"), n.push("在大数组里按条件筛选元素用 query_data(JSONPath,如 $.components[?(@.type==\"card\" && @.price<100)]),返回匹配元素的 path/index;定位后再 edit_data 改。"), n.push("找名字记不清的元素用 search_data(支持 substring/regex/fuzzy 模糊搜索)。"), n.push("需要过滤/映射/聚合/批量重写大数组时用 eval_script(沙箱脚本,入参 data);只读探查用 mode=query,批量重写用 mode=transform(返回值经校验后落地)。"), n.push("读大数组用 read({jsonPath,offset,limit}) 分页(返回 hasMore=true 时 offset+=limit 续读);一次读多个不相关子路径用 read({jsonPaths});复杂改动先 write({...,dryRun:true}) 预检不落盘。"), n.push("对比当前与历史快照(或一段 JSON against)的差异用 diff_data({snapshotId?,against?})(返回结构化 path→from/to,verify 自纠/操作审计/\"刚才改了啥\");只读查历史快照值用 history_data({id?,jsonPath?})。"))), e?.subagent !== !1 && n.push("独立子任务可 spawn_agent 委派(只读工具,过程不占主上下文)。"), e?.subagents?.length) {
18570
+ let t = e.subagents.filter((e) => (e.temperature ?? 0) >= Wb || /规划|创意|设计|方案|brainstorm|plan/i.test(e.description)), i = e.subagents.filter((e) => (e.temperature ?? 0) < Wb && /反思|审查|挑刺|校验|review|critique|reflect/i.test(e.description));
18484
18571
  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(" · 简单/明确任务(如\"标题改红色\")直接执行,不必走规划-反思。");
18485
18572
  }
18486
18573
  return e?.humanConfirm && (n.push("【人工确认·必读】以下情形必须先调 request_human_confirmation 征询用户、拿到答复后再继续,不要自行拍板:"), n.push(" 1) 用户让你「给方案/列选项/我来选/挑一个」时:把每个方案作为一个 option,调 request_human_confirmation(question=简述, options=[方案A,方案B,...], recommendation=你推荐的)。不要只回文字罗列方案让用户自己回复——要用工具把选项做成可点选按钮。"), n.push(" 2) 需求有歧义/不确定时:调工具问清楚(options 不传则用户答同意或拒绝)。"), n.push(" 3) 即将执行高风险不可逆操作(删除/覆盖/批量改动)前:调工具确认。"), n.push(" 4) 规划出多步方案需用户确认时:把整个方案(或关键分步)作为 option 调 request_human_confirmation,确认后再执行。"), n.push("用户在选项里选了哪个,就按那个方案继续;选「拒绝」则停止并询问如何调整。")), n.length && n.unshift("调用工具务必用标准 function calling(工具调用)格式发起,不要在回复正文里输出伪 XML/标签(如 deepseek 的 tool_calls 标签、invoke、function_call、tool_call 等)或 JSON 文本——那不会被识别为工具调用,会被当普通文字,工具不执行。"), n.length ? "## 能力使用提示\n" + n.join("\n") : void 0;
@@ -18489,72 +18576,72 @@ function Wb(e, t, n = "simple") {
18489
18576
  }
18490
18577
  //#endregion
18491
18578
  //#region src/core/backends/skillStore.ts
18492
- var Gb = "v:1::skill-store", Kb = "chat-sdk";
18493
- function qb(e, t, n) {
18494
- return `${Gb}::${e}::${t}::${n}`;
18579
+ var Kb = "v:1::skill-store", qb = "chat-sdk";
18580
+ function Jb(e, t, n) {
18581
+ return `${Kb}::${e}::${t}::${n}`;
18495
18582
  }
18496
- function Jb(e, t) {
18497
- return `${Gb}::${e}::${t}::`;
18583
+ function Yb(e, t) {
18584
+ return `${Kb}::${e}::${t}::`;
18498
18585
  }
18499
- function Yb(e = {}) {
18500
- let t = e.dbName ?? Kb, n = e.backend ?? "indexed", r = e.id ?? "", i, a, o = new Promise((e) => {
18586
+ function Xb(e = {}) {
18587
+ let t = e.dbName ?? qb, n = e.backend ?? "indexed", r = e.id ?? "", i, a, o = new Promise((e) => {
18501
18588
  a = e;
18502
18589
  });
18503
18590
  return (async () => {
18504
18591
  try {
18505
18592
  if (n === "indexed") {
18506
18593
  if (typeof indexedDB > "u") throw Error("indexedDB 不可用");
18507
- i = await Sy(t), a(!0);
18594
+ i = await Cy(t), a(!0);
18508
18595
  } else if (n === "session") {
18509
18596
  if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
18510
- i = Cy(sessionStorage), a(!0);
18597
+ i = wy(sessionStorage), a(!0);
18511
18598
  } else if (n === "local") {
18512
18599
  if (typeof localStorage > "u") throw Error("localStorage 不可用");
18513
- i = Cy(localStorage), a(!0);
18514
- } else i = xy(), a(!1);
18600
+ i = wy(localStorage), a(!0);
18601
+ } else i = Sy(), a(!1);
18515
18602
  } catch {
18516
- i = xy(), a(!1);
18603
+ i = Sy(), a(!1);
18517
18604
  }
18518
18605
  })(), {
18519
18606
  ready: o,
18520
18607
  async list() {
18521
18608
  let e = [];
18522
- return await i.scan(Jb(t, r), (t, n) => {
18609
+ return await i.scan(Yb(t, r), (t, n) => {
18523
18610
  e.push(n);
18524
18611
  }), e;
18525
18612
  },
18526
18613
  async get(e) {
18527
- return await i.get(qb(t, r, e));
18614
+ return await i.get(Jb(t, r, e));
18528
18615
  },
18529
18616
  async put(e) {
18530
18617
  try {
18531
- await i.set(qb(t, r, e.name), e);
18618
+ await i.set(Jb(t, r, e.name), e);
18532
18619
  } catch (e) {
18533
- py(e) && (i = xy());
18620
+ my(e) && (i = Sy());
18534
18621
  }
18535
18622
  },
18536
18623
  async remove(e) {
18537
- let n = qb(t, r, e);
18624
+ let n = Jb(t, r, e);
18538
18625
  return await i.get(n) != null && (await i.del(n), !0);
18539
18626
  },
18540
18627
  async clear() {
18541
- await i.clearPrefix(Jb(t, r));
18628
+ await i.clearPrefix(Yb(t, r));
18542
18629
  },
18543
18630
  dispose() {}
18544
18631
  };
18545
18632
  }
18546
18633
  //#endregion
18547
18634
  //#region src/core/sdk/createChatSdk.ts
18548
- var Xb = 50, Zb = /* @__PURE__ */ new Map();
18549
- function Qb(e, t) {
18635
+ var Zb = 50, Qb = /* @__PURE__ */ new Map();
18636
+ function $b(e, t) {
18550
18637
  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;
18551
18638
  }
18552
- function $b(e, t, n, r) {
18639
+ function ex(e, t, n, r) {
18553
18640
  let i = 0;
18554
18641
  return {
18555
18642
  name: "sdk-events",
18556
18643
  wrapToolCall: async (t, r) => {
18557
- let i = await r(t), a = Qb(t.name, t.args);
18644
+ let i = await r(t), a = $b(t.name, t.args);
18558
18645
  return a && e({
18559
18646
  type: "data_change",
18560
18647
  operation: a,
@@ -18589,18 +18676,18 @@ function $b(e, t, n, r) {
18589
18676
  }
18590
18677
  };
18591
18678
  }
18592
- function ex(e, i) {
18679
+ function tx(e, i) {
18593
18680
  let a = {
18594
18681
  prompt_tokens: 0,
18595
18682
  completion_tokens: 0,
18596
18683
  total_tokens: 0
18597
- }, o = ey(() => z), s = /* @__PURE__ */ U(0), c = Ey(e.storage);
18684
+ }, o = ty(() => z), s = /* @__PURE__ */ U(0), c = Dy(e.storage);
18598
18685
  e.debug && c && c.onEvent((e) => console.log("[page-agent-sdk][storage]", e));
18599
- let { modelCaps: l, summaryLlmInvoke: u } = $v(e), d = l;
18686
+ let { modelCaps: l, summaryLlmInvoke: u } = ey(e), d = l;
18600
18687
  e.debug && console.log("[page-agent-sdk][modelCaps]", d);
18601
18688
  let f = e.llm;
18602
18689
  e.debug && !u && console.warn("[page-agent-sdk][summarization] 未构造 llmInvoke(apiKey 缺失?),摘要回退零成本索引摘要");
18603
- let p = /* @__PURE__ */ tn([]), m = tb(e.vfs?.initialFiles, {
18690
+ let p = /* @__PURE__ */ tn([]), m = nb(e.vfs?.initialFiles, {
18604
18691
  persist: c ? { save: (e) => {
18605
18692
  B.sessionId && c && c.save(i, B.sessionId, { vfs: e });
18606
18693
  } } : void 0,
@@ -18611,7 +18698,7 @@ function ex(e, i) {
18611
18698
  let y = { current: null }, b = e.data ? {
18612
18699
  ...e.data,
18613
18700
  description: e.data.description ?? "主数据对象"
18614
- } : void 0, x = e.checkpoint, S = x !== void 0 && x !== !1, C = S ? N_({
18701
+ } : void 0, x = e.checkpoint, S = x !== void 0 && x !== !1, C = S ? P_({
18615
18702
  getData: () => j()?.bind,
18616
18703
  slotPaths: b ? [""] : [],
18617
18704
  vfsStore: m,
@@ -18619,20 +18706,20 @@ function ex(e, i) {
18619
18706
  getTodos: () => y.current?.getState?.()?.todos ?? [],
18620
18707
  messages: p,
18621
18708
  maxCheckpoints: x && typeof x == "object" ? x.maxCheckpoints : void 0
18622
- }) : null, w = !x || typeof x != "object" || x.auto !== !1, T = e.capabilities, E = T?.dataOps !== !1, D = Yv(e), O = E && b ? kb(b, {
18709
+ }) : null, w = !x || typeof x != "object" || x.auto !== !1, T = e.capabilities, E = T?.dataOps !== !1, D = Xv(e), O = E && b ? Ab(b, {
18623
18710
  onAudit: e.onAudit ?? (e.debug ? (e) => console.log("[page-agent-sdk][data audit]", e) : void 0),
18624
18711
  maxSnapshots: e.maxSnapshots,
18625
18712
  onConflict: o.set,
18626
18713
  autoLock: e.autoLock,
18627
18714
  interceptors: e.interceptors
18628
- }) : [], k = E ? Ob(O, e.toolMode) : [], A = E && b ? O.controller ?? null : null, j = () => A?.get() ?? b, M = /* @__PURE__ */ new Map(), N = Hb(T, k, jb, Fb);
18715
+ }) : [], k = E ? kb(O, e.toolMode) : [], A = E && b ? O.controller ?? null : null, j = () => A?.get() ?? b, M = /* @__PURE__ */ new Map(), N = Ub(T, k, Mb, Ib);
18629
18716
  N.forEach((e) => M.set(e.name, "builtin"));
18630
18717
  let P = [...e.tools || []];
18631
18718
  P.forEach((e) => M.set(e.name, "user"));
18632
- let F = Lb(e.actions ?? {});
18719
+ let F = Rb(e.actions ?? {});
18633
18720
  F.forEach((e) => M.set(e.name, "action"));
18634
- let I = [], L = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), ee = L ? T_() : null;
18635
- ee && M.set(C_, "builtin");
18721
+ let I = [], L = e.humanConfirm !== !1 && (!e.approval || e.approval.humanConfirmTool !== !1), ee = L ? E_() : null;
18722
+ ee && M.set(w_, "builtin");
18636
18723
  let te = S && C ? [r(async () => {
18637
18724
  let e = C.list();
18638
18725
  return e.length ? C.restore() ? `已回退到最近一次正常状态(checkpoint #${e[e.length - 1].id})。对话历史、主数据、vfs、todos 已整体还原。请基于回退后的状态重新判断并继续。` : "回退失败:无可用 checkpoint。" : "无可用 checkpoint,无法回退。";
@@ -18667,11 +18754,11 @@ function ex(e, i) {
18667
18754
  ];
18668
18755
  }
18669
18756
  let re = T?.planning !== !1, ie = T?.missionAnchor !== !1, ae = T?.workingMemory !== !1, oe = T?.skills !== !1, se = T?.vfs !== !1;
18670
- if (se) for (let e of cb) M.set(e, "builtin");
18757
+ if (se) for (let e of lb) M.set(e, "builtin");
18671
18758
  if (re) for (let e of h.tools ?? []) M.set(e.name, "builtin");
18672
18759
  let ce = T?.summarization !== !1, le = T?.memory !== !1, ue = T?.subagent !== !1, de = e.verify?.maxAttempts ?? 2, fe = T?.verify === !0 && e.verify?.enabled !== !1 && de > 0;
18673
18760
  e.verify?.check && T?.verify !== !0 && console.warn("[page-agent-sdk][verify] 检测到 verify.check 但 capabilities.verify 未开启,verify 未装载");
18674
- let pe = e.subagent, me = pe?.allowedTools ?? [], he = !ue || pe?.enabled === !1 ? void 0 : H_({
18761
+ let pe = e.subagent, me = pe?.allowedTools ?? [], he = !ue || pe?.enabled === !1 ? void 0 : U_({
18675
18762
  llm: pe?.llm ?? e.llm,
18676
18763
  allTools: R,
18677
18764
  allowedTools: me.length ? me : void 0,
@@ -18682,7 +18769,7 @@ function ex(e, i) {
18682
18769
  maxDepth: pe?.maxDepth,
18683
18770
  maxParallel: pe?.maxParallel,
18684
18771
  debug: e.debug
18685
- }), ge = ue && e.subagents !== void 0 ? G_(e.subagents, {
18772
+ }), ge = ue && e.subagents !== void 0 ? K_(e.subagents, {
18686
18773
  llm: e.llm,
18687
18774
  allTools: R,
18688
18775
  debug: e.debug
@@ -18691,8 +18778,8 @@ function ex(e, i) {
18691
18778
  "describe_data",
18692
18779
  "read",
18693
18780
  "fetch_document"
18694
- ], ye = R.filter((e) => ve.includes(e.name)), be = fe ? K_({
18695
- check: e.verify.check ?? Q_({
18781
+ ], ye = R.filter((e) => ve.includes(e.name)), be = fe ? q_({
18782
+ check: e.verify.check ?? $_({
18696
18783
  schemas: () => j() ? { "": j().schema } : {},
18697
18784
  root: () => j()?.bind
18698
18785
  }),
@@ -18700,7 +18787,7 @@ function ex(e, i) {
18700
18787
  llm: e.llm,
18701
18788
  tools: ye
18702
18789
  } : void 0
18703
- }) : void 0, xe = Wb({
18790
+ }) : void 0, xe = Gb({
18704
18791
  ...T,
18705
18792
  humanConfirm: L,
18706
18793
  subagents: e.subagents?.map((e) => ({
@@ -18710,7 +18797,7 @@ function ex(e, i) {
18710
18797
  }))
18711
18798
  }, E && !!b, e.toolMode), Se = b ? {
18712
18799
  name: "dataHint",
18713
- augmentPrompt: () => Jv(j(), e.schemaHint) || void 0
18800
+ augmentPrompt: () => Yv(j(), e.schemaHint) || void 0
18714
18801
  } : null, Ce = e.augmentSystem ? {
18715
18802
  name: "augmentSystem",
18716
18803
  augmentPrompt: (t) => {
@@ -18724,7 +18811,7 @@ function ex(e, i) {
18724
18811
  return;
18725
18812
  }
18726
18813
  }
18727
- } : null, we = e.onEvent, Te = Oy(e.onEvent), z = Te.emit, Ee, De = [], Oe = (e) => ({
18814
+ } : null, we = e.onEvent, Te = ky(e.onEvent), z = Te.emit, Ee, De = [], Oe = (e) => ({
18728
18815
  name: e.name,
18729
18816
  description: e.description,
18730
18817
  content: typeof e.getContent == "function" ? e.getContent() : ""
@@ -18732,7 +18819,7 @@ function ex(e, i) {
18732
18819
  name: e.name,
18733
18820
  description: e.description,
18734
18821
  getContent: () => e.content
18735
- }), Ae = e.skillStorage === !1 ? null : Yb({
18822
+ }), Ae = e.skillStorage === !1 ? null : Xb({
18736
18823
  ...typeof e.skillStorage == "object" ? e.skillStorage : {},
18737
18824
  id: e.skillStorage && typeof e.skillStorage == "object" && e.skillStorage.id ? e.skillStorage.id : `agent::${i}`
18738
18825
  }), je = () => {
@@ -18755,32 +18842,32 @@ function ex(e, i) {
18755
18842
  B.infoTick.value++;
18756
18843
  }
18757
18844
  } catch {}
18758
- }, Ne = Ny([
18845
+ }, Ne = Py([
18759
18846
  ...Se ? [Se] : [],
18760
18847
  xe,
18761
18848
  ...ie ? [g] : [],
18762
18849
  ...re ? [h] : [],
18763
18850
  ...oe ? [Ee = h_(e.skills || [], { readVfs: se ? (e) => m.files[e]?.content : void 0 })] : [],
18764
- ...se ? [ub(m)] : [],
18765
- ...ce ? [wv({
18766
- ...jy(e, d.contextWindow),
18851
+ ...se ? [db(m)] : [],
18852
+ ...ce ? [Tv({
18853
+ ...My(e, d.contextWindow),
18767
18854
  llmInvoke: u,
18768
18855
  getRegisteredData: () => j() ? [{ description: j().description ?? "主数据对象" }] : [],
18769
- preserveLastToolResults: (e.contextOptions && e.contextOptions.preserveLastToolResults) ?? Ay[e.contextPreset ?? "auto"]
18856
+ preserveLastToolResults: (e.contextOptions && e.contextOptions.preserveLastToolResults) ?? jy[e.contextPreset ?? "auto"]
18770
18857
  })] : [],
18771
18858
  ...ae ? [_] : [],
18772
18859
  ...le ? [v] : [],
18773
- ...e.permissions?.length ? [x_(e.permissions)] : [],
18774
- ...S && w && C ? [P_(C)] : [],
18775
- ...L ? [E_()] : [],
18776
- ...e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? [S_(e.approval)] : [],
18860
+ ...e.permissions?.length ? [S_(e.permissions)] : [],
18861
+ ...S && w && C ? [F_(C)] : [],
18862
+ ...L ? [D_()] : [],
18863
+ ...e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? [C_(e.approval)] : [],
18777
18864
  ...be ? [be] : [],
18778
18865
  ...he ? [he] : [],
18779
18866
  ...ge ? [ge] : [],
18780
18867
  ...Ce ? [Ce] : [],
18781
18868
  ...e.middleware || [],
18782
- $b(z, p, j, a)
18783
- ]), Pe = e.maxMemoryRounds ?? Xb, B = {
18869
+ ex(z, p, j, a)
18870
+ ]), Pe = e.maxMemoryRounds ?? Zb, B = {
18784
18871
  agentId: i,
18785
18872
  store: c,
18786
18873
  messages: p,
@@ -18886,7 +18973,7 @@ function ex(e, i) {
18886
18973
  if (B.refCount--, B.refCount <= 0) {
18887
18974
  c && (m.flush?.(), c.flush(), c.dispose()), Ae && Ae.dispose();
18888
18975
  let e = B.mcpClosers.splice(0);
18889
- e.length && Promise.allSettled(e.map((e) => e())), Zb.delete(i);
18976
+ e.length && Promise.allSettled(e.map((e) => e())), Qb.delete(i);
18890
18977
  }
18891
18978
  },
18892
18979
  resolveConflict: o.resolve,
@@ -18903,7 +18990,7 @@ function ex(e, i) {
18903
18990
  return t < 0 ? !1 : (P.splice(t, 1), R = ne(), B.agent && B.agent.setTools(R), B.infoTick.value++, !0);
18904
18991
  },
18905
18992
  setLlm(t) {
18906
- let r = Xv(t) ? t : new n({
18993
+ let r = Zv(t) ? t : new n({
18907
18994
  apiKey: t.apiKey,
18908
18995
  model: t.model,
18909
18996
  temperature: t.temperature,
@@ -18944,8 +19031,8 @@ function ex(e, i) {
18944
19031
  getInfo() {
18945
19032
  return {
18946
19033
  id: i,
18947
- model: Xv(f) ? f.model ?? f.modelName : f.model,
18948
- systemPrompt: B.agent?.getEffectiveSystemPrompt?.() ?? D + Jv(j(), e.schemaHint),
19034
+ model: Zv(f) ? f.model ?? f.modelName : f.model,
19035
+ systemPrompt: B.agent?.getEffectiveSystemPrompt?.() ?? D + Yv(j(), e.schemaHint),
18949
19036
  tools: (B.agent?.allTools ?? R).map((e) => ({
18950
19037
  name: e.name,
18951
19038
  description: e.description,
@@ -18971,7 +19058,7 @@ function ex(e, i) {
18971
19058
  planPhase: h.getPlanPhase(),
18972
19059
  mission: ie ? g.getMission() : void 0,
18973
19060
  workingMemory: ae ? _.getWorkingMemory() : void 0,
18974
- actions: Rb(e.actions ?? {}),
19061
+ actions: zb(e.actions ?? {}),
18975
19062
  subagent: {
18976
19063
  enabled: !!he,
18977
19064
  maxDepth: e.subagent?.maxDepth ?? 1,
@@ -19034,7 +19121,7 @@ function ex(e, i) {
19034
19121
  await Me();
19035
19122
  }
19036
19123
  function V() {
19037
- let e = hv(p, Pe);
19124
+ let e = gv(p, Pe);
19038
19125
  e.trimmed && p.splice(e.deleteFrom, e.deleteCount, e.summary);
19039
19126
  }
19040
19127
  function Le() {
@@ -19046,7 +19133,7 @@ function ex(e, i) {
19046
19133
  }
19047
19134
  return B.initDone = (async () => {
19048
19135
  if (await Fe(), await Ie(), e.mcp?.length) {
19049
- let t = await Promise.allSettled(e.mcp.map((e) => cv(e)));
19136
+ let t = await Promise.allSettled(e.mcp.map((e) => lv(e)));
19050
19137
  B.mcpClosers = t.flatMap((e) => e.status === "fulfilled" ? [e.value.close] : []), B.mcpServers = [];
19051
19138
  let n = [];
19052
19139
  t.forEach((t, r) => {
@@ -19059,7 +19146,7 @@ function ex(e, i) {
19059
19146
  }), R = ne(), e.debug && console.log(`[page-agent-sdk][mcp] 注入 ${n.length} 个工具,${B.mcpServers.length} 个 server`);
19060
19147
  }
19061
19148
  B.agent = Zg({
19062
- ...Xv(e.llm) ? { llm: e.llm } : {
19149
+ ...Zv(e.llm) ? { llm: e.llm } : {
19063
19150
  apiKey: e.llm.apiKey,
19064
19151
  baseUrl: e.llm.baseUrl,
19065
19152
  model: e.llm.model,
@@ -19078,7 +19165,7 @@ function ex(e, i) {
19078
19165
  maxOutputTokens: d.maxOutputTokens,
19079
19166
  maxVerifyAttempts: fe ? de : 0,
19080
19167
  onLlmChange: (t) => {
19081
- let n = Xv(t) ? void 0 : t;
19168
+ let n = Zv(t) ? void 0 : t;
19082
19169
  d = Mg({
19083
19170
  model: n?.model ?? t.model ?? t.modelName,
19084
19171
  contextWindow: e.contextWindow ?? n?.contextWindow,
@@ -19091,12 +19178,12 @@ function ex(e, i) {
19091
19178
  });
19092
19179
  })(), B;
19093
19180
  }
19094
- function tx(e) {
19095
- let t = e.id ?? ty();
19181
+ function nx(e) {
19182
+ let t = e.id ?? ny();
19096
19183
  e.id || console.warn(`[page-agent-sdk] 未传 options.id,已生成随机 id "${t}"。刷新后持久化数据无法恢复,请传稳定 id。`);
19097
- let n = e.streaming ?? !0, r = e.ui ?? "default", i, a = e.shareContext ? Zb.get(t) : void 0;
19098
- a ? i = a : (i = ex(e, t), e.shareContext && Zb.set(t, i)), i.refCount++;
19099
- let o = null, s = null, c = Dy(e), l = null, u = null;
19184
+ let n = e.streaming ?? !0, r = e.ui ?? "default", i, a = e.shareContext ? Qb.get(t) : void 0;
19185
+ a ? i = a : (i = tx(e, t), e.shareContext && Qb.set(t, i)), i.refCount++;
19186
+ let o = null, s = null, c = Oy(e), l = null, u = null;
19100
19187
  async function d(t) {
19101
19188
  if (await i.initDone, o) {
19102
19189
  m();
@@ -19135,7 +19222,7 @@ function tx(e) {
19135
19222
  i.afterRound(), i.store && await i.store.flush();
19136
19223
  },
19137
19224
  onClear: () => {
19138
- i.store && (i.sessionId = ty(), 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));
19225
+ i.store && (i.sessionId = ny(), 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));
19139
19226
  },
19140
19227
  pendingConflict: i.pendingConflict.value,
19141
19228
  onResolveConflict: (e) => i.resolveConflict(e),
@@ -19253,7 +19340,7 @@ function tx(e) {
19253
19340
  error: "schema 校验失败:" + (t.error?.message ?? "未知错误")
19254
19341
  };
19255
19342
  }
19256
- return A_(r, e), t?.emit !== !1 && i.emit({
19343
+ return j_(r, e), t?.emit !== !1 && i.emit({
19257
19344
  type: "data_change",
19258
19345
  operation: "set",
19259
19346
  value: r
@@ -19275,7 +19362,7 @@ function tx(e) {
19275
19362
  }
19276
19363
  //#endregion
19277
19364
  //#region src/core/sdk/defineTool.ts
19278
- function nx(e) {
19365
+ function rx(e) {
19279
19366
  return r(async (t) => {
19280
19367
  let n = await e.handler(t);
19281
19368
  return typeof n == "string" ? n : JSON.stringify(n);
@@ -19286,4 +19373,4 @@ function nx(e) {
19286
19373
  });
19287
19374
  }
19288
19375
  //#endregion
19289
- export { ky as CONTEXT_PRESETS, yg as ChatDialog, nf as CodePreview, qv as DEFAULT_SYSTEM_PROMPT, C_ as HUMAN_CONFIRM_TOOL_NAME, af as MessageContent, gv as STOP_WORDS, sh as SkillPanel, Py as UNSAFE_KEYS, Rb as actionsToInspectInfo, Lb as actionsToTools, Tg as agentError, qy as applyPatchToClone, Jy as applyPatchToLive, wg as asAgentError, Jv as buildDataPrompt, Yv as buildSystemPrompt, cv as connectMcp, wl as copyText, Zg as createAgent, S_ as createApprovalMiddleware, tx as createChatSdk, N_ as createCheckpointManager, P_ as createCheckpointMiddleware, ey as createConflictManager, kb as createDataOps, E_ as createHumanConfirmMiddleware, T_ as createHumanConfirmTool, xy as createMemoryBackend, g_ as createMemoryMiddleware, v as createProxyLlm, Oy as createSdkEvents, Ty as createSessionStore, Yb as createSkillStore, H_ as createSubagentMiddleware, G_ as createSubagentsMiddleware, Wb as createUsageHintsMiddleware, K_ as createVerifyMiddleware, tb as createVfs, Cy as createWebStorageBackend, Q_ as createWriteBackCheck, By as deepClone, Vb as defineDataToolset, l_ as defineSkill, nx as defineTool, zy as deleteByPath, Iv as describeSchemaNode, Gg as detectGarbledToolCall, Zy as diffObjects, Nb as domToStructure, Fb as domTools, Bb as domToolsStatic, vv as estimateMessageTokens, yv as estimateRoundTokens, Ng as estimateTokens, Kv as extractSchemaHint, av as extractText, jb as fetchDocTools, zb as fetchTools, Ob as filterByToolMode, Lv as formatConstraints, bg as formatZodIssues, Ly as getByPath, Pb as getDomTool, Ov as getSchemaAtPath, Tv as getSchemaTopKeys, Ky as hashValue, bv as indexSummarize, Xv as isChatModel, Ev as isPathAllowed, py as isQuotaError, Fy as isUnsafePath, bb as jpEval, Sg as jsonParseError, Uy as limitDepth, Vy as maybeParseValue, Fg as offloadPassThroughChars, Pg as offloadThresholdChars, Hv as presets, Av as projectBySchema, kv as projectBySchemaDeep, Hy as projectFields, xv as recallRounds, Rv as renderSchemaHint, zv as renderSchemaOverview, Vv as renderSchemaShallow, jy as resolveContextOptions, Dy as resolveDialogConfig, $v as resolveLlm, Mg as resolveModelCaps, Ey as resolveStorage, Xy as restoreInPlace, Yy as restoreLive, Cg as routeError, Tb as runSandboxedScript, Iy as safeMerge, Wy as safeStringify, Sb as searchJson, Hb as selectBuiltinTools, Ry as setByPath, Uv as systemPromptHelpers, _v as tokenize, $ as toolError, Dv as unwrapSchema, Cl as useChat, e as z, xg as zodError };
19376
+ export { Ay as CONTEXT_PRESETS, yg as ChatDialog, nf as CodePreview, Jv as DEFAULT_SYSTEM_PROMPT, w_ as HUMAN_CONFIRM_TOOL_NAME, af as MessageContent, _v as STOP_WORDS, sh as SkillPanel, Fy as UNSAFE_KEYS, zb as actionsToInspectInfo, Rb as actionsToTools, Tg as agentError, Jy as applyPatchToClone, Yy as applyPatchToLive, wg as asAgentError, Yv as buildDataPrompt, Xv as buildSystemPrompt, lv as connectMcp, wl as copyText, Zg as createAgent, C_ as createApprovalMiddleware, nx as createChatSdk, P_ as createCheckpointManager, F_ as createCheckpointMiddleware, ty as createConflictManager, Ab as createDataOps, D_ as createHumanConfirmMiddleware, E_ as createHumanConfirmTool, Sy as createMemoryBackend, g_ as createMemoryMiddleware, v as createProxyLlm, ky as createSdkEvents, Ey as createSessionStore, Xb as createSkillStore, U_ as createSubagentMiddleware, K_ as createSubagentsMiddleware, Gb as createUsageHintsMiddleware, q_ as createVerifyMiddleware, nb as createVfs, wy as createWebStorageBackend, $_ as createWriteBackCheck, Vy as deepClone, Hb as defineDataToolset, l_ as defineSkill, rx as defineTool, By as deleteByPath, Lv as describeSchemaNode, Gg as detectGarbledToolCall, Qy as diffObjects, Pb as domToStructure, Ib as domTools, Vb as domToolsStatic, yv as estimateMessageTokens, bv as estimateRoundTokens, Ng as estimateTokens, qv as extractSchemaHint, ov as extractText, Mb as fetchDocTools, Bb as fetchTools, kb as filterByToolMode, Rv as formatConstraints, bg as formatZodIssues, Ry as getByPath, Fb as getDomTool, kv as getSchemaAtPath, Ev as getSchemaTopKeys, qy as hashValue, xv as indexSummarize, Zv as isChatModel, Dv as isPathAllowed, my as isQuotaError, Iy as isUnsafePath, xb as jpEval, Sg as jsonParseError, Wy as limitDepth, Hy as maybeParseValue, Fg as offloadPassThroughChars, Pg as offloadThresholdChars, Uv as presets, jv as projectBySchema, Av as projectBySchemaDeep, Uy as projectFields, Sv as recallRounds, zv as renderSchemaHint, Bv as renderSchemaOverview, Hv as renderSchemaShallow, My as resolveContextOptions, Oy as resolveDialogConfig, ey as resolveLlm, Mg as resolveModelCaps, Dy as resolveStorage, Zy as restoreInPlace, Xy as restoreLive, Cg as routeError, Eb as runSandboxedScript, Ly as safeMerge, Gy as safeStringify, Cb as searchJson, Ub as selectBuiltinTools, zy as setByPath, Wv as systemPromptHelpers, vv as tokenize, $ as toolError, Ov as unwrapSchema, Cl as useChat, e as z, xg as zodError };