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.
- package/README.md +5 -1
- package/README.zh-CN.md +7 -3
- package/dist/page-agent-sdk.iife.js +124 -124
- package/dist/page-agent-sdk.js +687 -600
- package/dist/page-agent-sdk.umd.cjs +34 -34
- package/package.json +1 -1
package/dist/page-agent-sdk.js
CHANGED
|
@@ -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
|
|
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
|
-
|
|
14515
|
-
|
|
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
|
|
14520
|
+
}), i.push(new a("⚠️ 你刚才把工具调用写成了文本(伪 XML/标签/DSML 标记,如 <|tool_calls|>、<||DSML||>、<invoke name=...>),未被系统识别为工具调用,因此未执行,页面无变化。请直接用标准 function calling(工具调用)格式重新发起工具调用,不要在回复正文里输出这些标签或 JSON 文本。"));
|
|
14520
14521
|
continue;
|
|
14521
14522
|
}
|
|
14522
|
-
if (
|
|
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
|
|
15018
|
-
|
|
15019
|
-
|
|
15020
|
-
|
|
15021
|
-
|
|
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
|
|
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
|
|
15034
|
-
|
|
15035
|
-
|
|
15036
|
-
|
|
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
|
|
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
|
|
15090
|
+
function E_() {
|
|
15068
15091
|
return r(async () => "人工确认中间件未装载,无法征询用户。请直接向用户说明情况并等待回复。", {
|
|
15069
|
-
name:
|
|
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:
|
|
15102
|
+
schema: T_
|
|
15080
15103
|
});
|
|
15081
15104
|
}
|
|
15082
|
-
function
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
15144
|
-
let n =
|
|
15145
|
-
typeof n == "object" && n ?
|
|
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
|
|
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
|
|
15179
|
+
function P_(e) {
|
|
15157
15180
|
let t = [], n = e.maxCheckpoints ?? 5, r = 1;
|
|
15158
15181
|
return {
|
|
15159
15182
|
save(i) {
|
|
15160
|
-
let a =
|
|
15161
|
-
if (e.getData) o[""] =
|
|
15162
|
-
else for (let t of e.slotPaths ?? []) o[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:
|
|
15190
|
+
messages: O_(a),
|
|
15168
15191
|
windowVals: o,
|
|
15169
|
-
vfs:
|
|
15170
|
-
todos:
|
|
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, ...
|
|
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 &&
|
|
15217
|
+
typeof n == "object" && n && j_(n, O_(t));
|
|
15195
15218
|
}
|
|
15196
|
-
} else for (let [e, t] of Object.entries(r.windowVals))
|
|
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,
|
|
15222
|
+
return Object.assign(i, O_(r.vfs)), e.todosMw.reset(O_(r.todos)), !0;
|
|
15200
15223
|
}
|
|
15201
15224
|
};
|
|
15202
15225
|
}
|
|
15203
|
-
function
|
|
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
|
|
15240
|
+
function I_(e) {
|
|
15218
15241
|
return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
|
|
15219
15242
|
}
|
|
15220
|
-
var
|
|
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
|
-
],
|
|
15228
|
-
async function
|
|
15229
|
-
let a = t.depth ?? 0, o = t.maxDepth ??
|
|
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
|
-
...
|
|
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 ??
|
|
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
|
|
15256
|
-
let n = e.maxParallel ??
|
|
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
|
|
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
|
|
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
|
|
15310
|
-
function
|
|
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
|
|
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 (!
|
|
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 =
|
|
15351
|
-
return
|
|
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
|
|
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:
|
|
15446
|
+
model: tv(e.adversarial.llm),
|
|
15424
15447
|
tools: (e.adversarial.tools ?? []).length
|
|
15425
15448
|
});
|
|
15426
|
-
let n = await
|
|
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
|
|
15460
|
+
var J_ = /* @__PURE__ */ new Set([
|
|
15438
15461
|
"set_data",
|
|
15439
15462
|
"edit_data",
|
|
15440
15463
|
"delete_data",
|
|
15441
15464
|
"write"
|
|
15442
|
-
]),
|
|
15443
|
-
function
|
|
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
|
-
|
|
15449
|
-
|
|
15450
|
-
|
|
15451
|
-
|
|
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:
|
|
15503
|
+
callId: e
|
|
15454
15504
|
});
|
|
15455
15505
|
}
|
|
15456
15506
|
}
|
|
15457
15507
|
}
|
|
15458
15508
|
return [...t.values()];
|
|
15459
15509
|
}
|
|
15460
|
-
function
|
|
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
|
|
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
|
|
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 =
|
|
15531
|
+
let r = X_(e);
|
|
15482
15532
|
if (!r.length) return { ok: !0 };
|
|
15483
|
-
let i =
|
|
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 &&
|
|
15487
|
-
let c =
|
|
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
|
|
15552
|
+
return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
|
|
15506
15553
|
}
|
|
15507
|
-
|
|
15508
|
-
|
|
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
|
|
15520
|
-
let { lastUser: i, lastReply: a } =
|
|
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(
|
|
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
|
-
}),
|
|
15606
|
+
}), rv(u) ? null : u.trim();
|
|
15557
15607
|
}
|
|
15558
15608
|
//#endregion
|
|
15559
15609
|
//#region src/core/mcp/client.ts
|
|
15560
|
-
function
|
|
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
|
|
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
|
|
15580
|
-
return r(async (n) =>
|
|
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
|
|
15590
|
-
let { Client: t } = await import("@modelcontextprotocol/sdk/client"), n = await
|
|
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) =>
|
|
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
|
|
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
|
|
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
|
|
15622
|
-
function
|
|
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
|
|
15679
|
+
function mv(e) {
|
|
15630
15680
|
return typeof e != "string" || !e.startsWith("【更早对话摘要") ? null : { body: e.replace(/^【[^】]*】\n?/, "") };
|
|
15631
15681
|
}
|
|
15632
|
-
function
|
|
15633
|
-
return `${
|
|
15682
|
+
function hv(e) {
|
|
15683
|
+
return `${fv}${e.cumulative ? `(${e.rounds ?? 0} 轮,含累积)` : e.rounds ? `(${e.rounds} 轮)` : ""}】\n${e.body}`;
|
|
15634
15684
|
}
|
|
15635
|
-
function
|
|
15685
|
+
function gv(e, t) {
|
|
15636
15686
|
if (t <= 0) return { trimmed: !1 };
|
|
15637
|
-
let n =
|
|
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 =
|
|
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:
|
|
15700
|
+
content: hv(pv({
|
|
15651
15701
|
body: i.map((e) => {
|
|
15652
|
-
let t =
|
|
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
|
|
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
|
|
15673
|
-
let t =
|
|
15674
|
-
for (let n of e.assistantMsgs) t +=
|
|
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
|
|
15727
|
+
function xv(e, t) {
|
|
15678
15728
|
return e.map((e) => {
|
|
15679
|
-
let n =
|
|
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}: ${
|
|
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
|
|
15689
|
-
let r =
|
|
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
|
|
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
|
|
15759
|
+
function wv(e = {}) {
|
|
15710
15760
|
let t = {
|
|
15711
|
-
...
|
|
15761
|
+
...Cv,
|
|
15712
15762
|
...e
|
|
15713
15763
|
};
|
|
15714
15764
|
async function n(e) {
|
|
15715
|
-
let n =
|
|
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 =
|
|
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 +
|
|
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 +=
|
|
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(
|
|
15807
|
+
d = await t.llmInvoke(xv(s, u)), f = c + "llm_summary";
|
|
15758
15808
|
} catch {
|
|
15759
|
-
d =
|
|
15809
|
+
d = xv(s, u), f = c + "index_summary(llm_fallback)";
|
|
15760
15810
|
}
|
|
15761
|
-
else d =
|
|
15762
|
-
let p = t.enableRecall ?
|
|
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
|
|
15800
|
-
let t =
|
|
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
|
|
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
|
|
15881
|
+
function Dv(e, t, n) {
|
|
15832
15882
|
if (!n || !e) return !0;
|
|
15833
|
-
let r =
|
|
15883
|
+
let r = Ov(t);
|
|
15834
15884
|
for (let t of e.split(".")) {
|
|
15835
15885
|
if (!r) return !1;
|
|
15836
|
-
if (r =
|
|
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
|
|
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
|
|
15915
|
+
function kv(e, t) {
|
|
15866
15916
|
if (!t) return e;
|
|
15867
|
-
let n =
|
|
15917
|
+
let n = Ov(e), r = t.split(".");
|
|
15868
15918
|
for (let e of r) {
|
|
15869
15919
|
if (!n) return null;
|
|
15870
|
-
if (n =
|
|
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
|
|
15927
|
+
function Av(e, t) {
|
|
15878
15928
|
if (typeof e != "object" || !e || !t) return e;
|
|
15879
|
-
let n =
|
|
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) =>
|
|
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] =
|
|
15940
|
+
i[t] = Av(n, r[t]);
|
|
15891
15941
|
}
|
|
15892
15942
|
return i;
|
|
15893
15943
|
}
|
|
15894
|
-
function
|
|
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
|
|
15901
|
-
function
|
|
15902
|
-
|
|
15950
|
+
var Mv = !1;
|
|
15951
|
+
function Nv() {
|
|
15952
|
+
Mv ||= !0;
|
|
15903
15953
|
}
|
|
15904
|
-
function
|
|
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
|
|
15961
|
+
function Fv(e) {
|
|
15912
15962
|
return e === -(2 ** 53 - 1) || e === -Infinity;
|
|
15913
15963
|
}
|
|
15914
|
-
function
|
|
15964
|
+
function Iv(e) {
|
|
15915
15965
|
return e === 2 ** 53 - 1 || e === Infinity;
|
|
15916
15966
|
}
|
|
15917
|
-
function
|
|
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 ||
|
|
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 =
|
|
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 && !
|
|
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 =
|
|
15960
|
-
for (let e of
|
|
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,
|
|
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) =>
|
|
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 =
|
|
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
|
|
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
|
|
15981
|
-
let n = t.constraints ?
|
|
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
|
|
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]) =>
|
|
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
|
|
16057
|
+
return zv("(root)", Lv(e));
|
|
16008
16058
|
} catch {}
|
|
16009
16059
|
return "";
|
|
16010
16060
|
}
|
|
16011
|
-
function
|
|
16012
|
-
let n =
|
|
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
|
|
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]) =>
|
|
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
|
|
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
|
-
},
|
|
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") },
|
|
16063
|
-
function
|
|
16112
|
+
].join("\n") }, Gv = 15, Kv = 4e3;
|
|
16113
|
+
function qv(e, t) {
|
|
16064
16114
|
if (!e) return "";
|
|
16065
|
-
let n =
|
|
16115
|
+
let n = Bv(e);
|
|
16066
16116
|
if (n) {
|
|
16067
|
-
let r = t?.maxKeys ??
|
|
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 =
|
|
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
|
|
16128
|
+
var Jv = [
|
|
16079
16129
|
"你是一个 JSON 操作助手。集成方声明了一个主数据对象(含 zod schema 校验),你通过专用工具安全地读写它来完成任务。",
|
|
16080
16130
|
"所有写操作都经范围控制(仅 schema 声明字段内)与 schema 校验(不合法会返回结构化错误而非写入),并自动留快照可回退。",
|
|
16081
16131
|
"大对象/数组优先用增量 patch(只发改动)而非整体重传,避免输出被截断。",
|
|
16082
16132
|
"---",
|
|
16083
|
-
|
|
16133
|
+
Wv.reliableWriteRules
|
|
16084
16134
|
].join("\n\n");
|
|
16085
|
-
function
|
|
16135
|
+
function Yv(e, t) {
|
|
16086
16136
|
if (!e) return "";
|
|
16087
|
-
let n =
|
|
16137
|
+
let n = qv(e.schema, t);
|
|
16088
16138
|
return `\n\n## 可操作数据(字段以 read 工具返回的实际值为准)\n${e.description ? e.description + "\n" : ""}${n}`;
|
|
16089
16139
|
}
|
|
16090
|
-
function
|
|
16140
|
+
function Xv(e) {
|
|
16091
16141
|
let t = e.appendReliableWriteRules !== !1;
|
|
16092
|
-
return e.systemPrompt ? t ? e.systemPrompt + "\n\n---\n\n" +
|
|
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
|
|
16146
|
+
function Zv(e) {
|
|
16097
16147
|
return !!e && typeof e == "object" && typeof e.invoke == "function" && typeof e.stream == "function";
|
|
16098
16148
|
}
|
|
16099
|
-
function
|
|
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
|
|
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 (
|
|
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
|
|
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
|
|
16136
|
-
let t =
|
|
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:
|
|
16193
|
+
summaryLlmInvoke: $v(e)
|
|
16144
16194
|
};
|
|
16145
16195
|
}
|
|
16146
16196
|
//#endregion
|
|
16147
16197
|
//#region src/core/sdk/conflictManager.ts
|
|
16148
|
-
function
|
|
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
|
|
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
|
|
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
|
|
16249
|
+
function hy(e, t, n, r) {
|
|
16200
16250
|
return [
|
|
16201
|
-
|
|
16251
|
+
dy,
|
|
16202
16252
|
e,
|
|
16203
16253
|
t,
|
|
16204
16254
|
n,
|
|
16205
16255
|
r
|
|
16206
16256
|
].join("::");
|
|
16207
16257
|
}
|
|
16208
|
-
function
|
|
16258
|
+
function gy(e, t, n) {
|
|
16209
16259
|
return [
|
|
16210
|
-
|
|
16260
|
+
dy,
|
|
16211
16261
|
e,
|
|
16212
16262
|
t,
|
|
16213
16263
|
n
|
|
16214
16264
|
].join("::") + "::";
|
|
16215
16265
|
}
|
|
16216
|
-
function
|
|
16266
|
+
function _y(e, t) {
|
|
16217
16267
|
return [
|
|
16218
|
-
|
|
16268
|
+
dy,
|
|
16219
16269
|
e,
|
|
16220
16270
|
t
|
|
16221
16271
|
].join("::") + "::";
|
|
16222
16272
|
}
|
|
16223
|
-
function
|
|
16224
|
-
return [
|
|
16273
|
+
function vy(e) {
|
|
16274
|
+
return [dy, e].join("::") + "::";
|
|
16225
16275
|
}
|
|
16226
|
-
var
|
|
16227
|
-
function
|
|
16228
|
-
|
|
16276
|
+
var yy = null;
|
|
16277
|
+
function by(e) {
|
|
16278
|
+
yy ||= new TextEncoder();
|
|
16229
16279
|
try {
|
|
16230
|
-
return
|
|
16280
|
+
return yy.encode(JSON.stringify(e)).length;
|
|
16231
16281
|
} catch {
|
|
16232
16282
|
return 0;
|
|
16233
16283
|
}
|
|
16234
16284
|
}
|
|
16235
|
-
function
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
16365
|
-
let t = e.dbName ??
|
|
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
|
|
16428
|
+
l = await Cy(t), d(!0);
|
|
16379
16429
|
} else if (n === "session") {
|
|
16380
16430
|
if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
|
|
16381
|
-
l =
|
|
16431
|
+
l = wy(sessionStorage), d(!0);
|
|
16382
16432
|
} else if (n === "local") {
|
|
16383
16433
|
if (typeof localStorage > "u") throw Error("localStorage 不可用");
|
|
16384
|
-
l =
|
|
16385
|
-
} else l =
|
|
16434
|
+
l = wy(localStorage), d(!0);
|
|
16435
|
+
} else l = Sy(), d(!1);
|
|
16386
16436
|
} catch (e) {
|
|
16387
|
-
l =
|
|
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 =
|
|
16398
|
-
return
|
|
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 :
|
|
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 (
|
|
16472
|
+
if (my(e) && !u) {
|
|
16423
16473
|
u = !0;
|
|
16424
16474
|
try {
|
|
16425
16475
|
await b();
|
|
16426
16476
|
} catch {}
|
|
16427
|
-
l =
|
|
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 =
|
|
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
|
-
},
|
|
16516
|
+
}, ly);
|
|
16467
16517
|
}
|
|
16468
16518
|
async function b() {
|
|
16469
16519
|
let e = [];
|
|
16470
|
-
await l.scan(
|
|
16520
|
+
await l.scan(vy(t), (t, n) => {
|
|
16471
16521
|
t.endsWith("::__meta__") && e.push(n);
|
|
16472
16522
|
});
|
|
16473
|
-
let n =
|
|
16474
|
-
for (let e of n) await l.clearPrefix(
|
|
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(
|
|
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 =
|
|
16491
|
-
return await
|
|
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
|
|
16501
|
-
let i = await l.get(
|
|
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
|
|
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(
|
|
16573
|
+
await l.clearPrefix(gy(t, e, n));
|
|
16524
16574
|
},
|
|
16525
16575
|
async createSession(e, n, r) {
|
|
16526
|
-
let i = r ??
|
|
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(
|
|
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
|
|
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
|
|
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
|
-
},
|
|
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
|
|
16623
|
-
let n =
|
|
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
|
|
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
|
|
16700
|
+
function Py(e) {
|
|
16651
16701
|
return e.map((e, t) => ({
|
|
16652
16702
|
m: e,
|
|
16653
16703
|
i: t,
|
|
16654
|
-
p:
|
|
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
|
|
16709
|
+
var Fy = /* @__PURE__ */ new Set([
|
|
16660
16710
|
"__proto__",
|
|
16661
16711
|
"constructor",
|
|
16662
16712
|
"prototype"
|
|
16663
16713
|
]);
|
|
16664
|
-
function
|
|
16665
|
-
return e.split(".").some((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 (
|
|
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
|
|
16681
|
-
if (!t ||
|
|
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
|
|
16690
|
-
if (!t ||
|
|
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
|
|
16749
|
+
function Vy(e) {
|
|
16700
16750
|
return e === void 0 ? void 0 : JSON.parse(JSON.stringify(e));
|
|
16701
16751
|
}
|
|
16702
|
-
function
|
|
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
|
|
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) =>
|
|
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
|
|
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) =>
|
|
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] =
|
|
16776
|
+
for (let r of Object.keys(e)) n[r] = Wy(e[r], t - 1);
|
|
16727
16777
|
return n;
|
|
16728
16778
|
}
|
|
16729
|
-
function
|
|
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
|
|
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
|
|
16757
|
-
return Gy(
|
|
16806
|
+
function qy(e) {
|
|
16807
|
+
return Ky(Gy(e)).toString(36);
|
|
16758
16808
|
}
|
|
16759
|
-
function
|
|
16760
|
-
if (t === "set") return n ? (
|
|
16761
|
-
if (t === "remove") return n ? (
|
|
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 ?
|
|
16764
|
-
return typeof t != "object" || !t || Array.isArray(t) ? `merge 目标${n ? `(${n})` : "(根)"}不是对象` : (
|
|
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 ?
|
|
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
|
|
16770
|
-
if (t === "set")
|
|
16771
|
-
else if (t === "remove")
|
|
16772
|
-
else if (t === "merge")
|
|
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 ?
|
|
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
|
|
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(...
|
|
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(...
|
|
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
|
|
16878
|
+
var $y = {
|
|
16829
16879
|
largeResults: 4194304,
|
|
16830
16880
|
drafts: 2097152,
|
|
16831
16881
|
userFiles: 2097152
|
|
16832
|
-
},
|
|
16882
|
+
}, eb = [
|
|
16833
16883
|
"largeResults",
|
|
16834
16884
|
"drafts",
|
|
16835
16885
|
"userFiles"
|
|
16836
|
-
],
|
|
16837
|
-
function
|
|
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[
|
|
16889
|
+
if (e) for (let [t, r] of Object.entries(e)) n[ob(t)] = {
|
|
16840
16890
|
content: r,
|
|
16841
|
-
updatedAt:
|
|
16891
|
+
updatedAt: cb()
|
|
16842
16892
|
};
|
|
16843
16893
|
let { persist: r } = t, i = t.maxBytes ?? 8388608, a = {
|
|
16844
|
-
|
|
16894
|
+
...$y,
|
|
16845
16895
|
...t.poolBytes ?? {}
|
|
16846
16896
|
};
|
|
16847
16897
|
function o(e) {
|
|
16848
|
-
let t =
|
|
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 +=
|
|
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
|
|
16907
|
+
for (let e of eb) {
|
|
16858
16908
|
let t = a[e];
|
|
16859
16909
|
if (s(e) <= t) continue;
|
|
16860
|
-
let r = t *
|
|
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 (
|
|
16864
|
-
let e = i *
|
|
16865
|
-
for (let [r] of t) if (delete n[r],
|
|
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[
|
|
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
|
|
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 +=
|
|
16956
|
+
for (let n of Object.values(e)) t += ib(n.content);
|
|
16907
16957
|
return t;
|
|
16908
16958
|
}
|
|
16909
|
-
function
|
|
16959
|
+
function ob(e) {
|
|
16910
16960
|
return e.replace(/^\/+/, "").replace(/\/+/g, "/");
|
|
16911
16961
|
}
|
|
16912
|
-
function
|
|
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
|
|
16970
|
+
function cb() {
|
|
16921
16971
|
return Date.now();
|
|
16922
16972
|
}
|
|
16923
|
-
var
|
|
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
|
|
16983
|
+
function ub(e) {
|
|
16934
16984
|
return [
|
|
16935
16985
|
r(async ({ path: t, offset: n, limit: r }) => {
|
|
16936
|
-
let i = e.files[
|
|
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[
|
|
17015
|
+
return e.files[ob(t)] = {
|
|
16966
17016
|
content: n,
|
|
16967
|
-
updatedAt:
|
|
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 =
|
|
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:
|
|
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 =
|
|
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 ? [
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
17182
|
+
let o = Vy(a), s = [];
|
|
17133
17183
|
for (let e of n) {
|
|
17134
|
-
let n =
|
|
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:
|
|
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
|
|
17218
|
+
function db(e) {
|
|
17169
17219
|
return {
|
|
17170
17220
|
name: "vfs",
|
|
17171
|
-
tools:
|
|
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
|
|
17178
|
-
function
|
|
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 &&
|
|
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 &&
|
|
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
|
|
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
|
|
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(),
|
|
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
|
|
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
|
|
17404
|
+
function gb(e) {
|
|
17355
17405
|
return !!e && e !== 0 && e !== "" && e !== null;
|
|
17356
17406
|
}
|
|
17357
|
-
function
|
|
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
|
|
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
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
-
|
|
17437
|
-
path:
|
|
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
|
-
|
|
17445
|
-
path:
|
|
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
|
|
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
|
|
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,
|
|
17481
|
-
else for (let t of Object.keys(e)) c(e[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 =
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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
|
-
]),
|
|
17589
|
-
function
|
|
17590
|
-
return t === "advanced" ? e : t === "minimal" ? e.filter((e) =>
|
|
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
|
|
17593
|
-
let i = e.schema, a = e.bind, o = e.description ?? "主数据对象", s =
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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)。当前值:${
|
|
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 `已保留外部修改(未写入)。当前值:${
|
|
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 `无历史快照可回退(本次为首次操作)。当前值:${
|
|
17688
|
+
if (!c.length) return `无历史快照可回退(本次为首次操作)。当前值:${Gy(a, 400)} (hash=${i})。请重新 read 再改或选「强制覆盖」。`;
|
|
17639
17689
|
let e = c[c.length - 1];
|
|
17640
|
-
return
|
|
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 (
|
|
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 ?
|
|
17658
|
-
t || (n =
|
|
17659
|
-
let r =
|
|
17660
|
-
return u = r, n === void 0 ? `主数据${t ? ` @ ${t}` : ""} = (undefined) (hash=${r})` : `主数据${t ? ` @ ${t}` : ""} = ${
|
|
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 =
|
|
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 ?
|
|
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 =
|
|
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 (
|
|
17691
|
-
let
|
|
17692
|
-
if (
|
|
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 "${
|
|
17755
|
+
message: `jsonPath "${c}" 含非法段(__proto__/constructor/prototype)`,
|
|
17695
17756
|
hint: "使用正常的属性路径,如 components.0.text(数组索引用数字)"
|
|
17696
17757
|
});
|
|
17697
|
-
if (!
|
|
17758
|
+
if (!Dv(c, i, s)) return $({
|
|
17698
17759
|
code: "PATH_DENIED",
|
|
17699
|
-
message: `edit_data @ "${
|
|
17760
|
+
message: `edit_data @ "${c}" 不在 schema 声明字段内`,
|
|
17700
17761
|
hint: "仅 schema 声明的 key 可写;若需操作该字段,集成方需在 schema 中声明它"
|
|
17701
17762
|
});
|
|
17702
|
-
let
|
|
17703
|
-
if (
|
|
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
|
|
17710
|
-
if (
|
|
17711
|
-
if (
|
|
17770
|
+
let f;
|
|
17771
|
+
if (t !== "remove") {
|
|
17772
|
+
if (r === void 0 || r === "") return $({
|
|
17712
17773
|
code: "MISSING_VALUE",
|
|
17713
|
-
message: `${
|
|
17714
|
-
hint: `op 为 ${
|
|
17774
|
+
message: `${t} 操作需要 value`,
|
|
17775
|
+
hint: `op 为 ${t} 时 value 必填;删除请用 op:'remove'`
|
|
17715
17776
|
});
|
|
17716
|
-
let
|
|
17717
|
-
if (
|
|
17718
|
-
|
|
17777
|
+
let e = Hy(r);
|
|
17778
|
+
if (e.parseError) return Sg("", r, e.parseError);
|
|
17779
|
+
f = e.parsed;
|
|
17719
17780
|
}
|
|
17720
|
-
let
|
|
17721
|
-
if (
|
|
17781
|
+
let g = Vy(a), _ = Jy(g, t, c, f);
|
|
17782
|
+
if (_) return $({
|
|
17722
17783
|
code: "PATCH_FAILED",
|
|
17723
|
-
message:
|
|
17784
|
+
message: _,
|
|
17724
17785
|
hint: "检查 op 与目标类型:merge 需对象,append 需数组;jsonPath 指向需存在"
|
|
17725
17786
|
});
|
|
17726
|
-
let
|
|
17727
|
-
return
|
|
17787
|
+
let v = i.safeParse(g);
|
|
17788
|
+
return v.success ? (m("edit"), Yy(a, t, c, f), p({
|
|
17728
17789
|
op: "edit",
|
|
17729
|
-
detail: `${
|
|
17730
|
-
value:
|
|
17790
|
+
detail: `${t}${c ? "@" + c : ""}`,
|
|
17791
|
+
value: f,
|
|
17731
17792
|
timestamp: Date.now()
|
|
17732
|
-
}), u =
|
|
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
|
|
17744
|
-
value: t.unknown().optional().describe("JSON 对象(推荐直传,如 {text:\"x\"})或 JSON
|
|
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 (
|
|
17825
|
+
if (Iy(e)) return $({
|
|
17755
17826
|
code: "PATH_UNSAFE",
|
|
17756
17827
|
message: `jsonPath "${e}" 含非法段`,
|
|
17757
17828
|
hint: "使用正常属性路径"
|
|
17758
17829
|
});
|
|
17759
|
-
if (!
|
|
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 =
|
|
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 =
|
|
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 ? (
|
|
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 =
|
|
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 =
|
|
17909
|
+
let r = Vy(n.value), a = t || "";
|
|
17839
17910
|
if (a) {
|
|
17840
|
-
if (
|
|
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 =
|
|
17846
|
-
let e =
|
|
17847
|
-
e && (r =
|
|
17848
|
-
} else s && (r =
|
|
17849
|
-
return `快照 #${n.id}[${n.op}]${n.label ? `(${n.label})` : ""}${a ? ` @ ${a}` : ""} = ${
|
|
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 ?
|
|
17940
|
+
let n = s ? jv(a, s) : a, r;
|
|
17865
17941
|
try {
|
|
17866
|
-
r =
|
|
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":${
|
|
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 =
|
|
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
|
|
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 (!
|
|
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 =
|
|
17938
|
-
let e =
|
|
17939
|
-
e && (o =
|
|
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 ?
|
|
17942
|
-
let c =
|
|
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 =
|
|
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"),
|
|
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 =
|
|
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 =
|
|
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 (
|
|
18061
|
+
if (Iy(o)) return $({
|
|
17986
18062
|
code: "PATH_UNSAFE",
|
|
17987
18063
|
message: `patches[${e}] jsonPath "${o}" 含非法段`,
|
|
17988
18064
|
hint: "使用正常属性路径"
|
|
17989
18065
|
});
|
|
17990
|
-
if (!
|
|
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 =
|
|
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 =
|
|
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)
|
|
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 =
|
|
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 ?
|
|
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 =
|
|
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
|
|
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 =
|
|
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 (!
|
|
18069
|
-
let o = t ?
|
|
18070
|
-
if (!t) o =
|
|
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 =
|
|
18073
|
-
e && (o =
|
|
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 =
|
|
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 (
|
|
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 ?
|
|
18092
|
-
if (!p) m =
|
|
18172
|
+
let m = p ? Ry(a, p) : a;
|
|
18173
|
+
if (!p) m = jv(m, s);
|
|
18093
18174
|
else if (s) {
|
|
18094
|
-
let e =
|
|
18095
|
-
e && (m =
|
|
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 =
|
|
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} = ${
|
|
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} = ${
|
|
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:
|
|
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 =
|
|
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 (
|
|
18250
|
+
if (Iy(t.jsonPath)) return $({
|
|
18170
18251
|
code: "PATH_UNSAFE",
|
|
18171
18252
|
message: `jsonPath "${t.jsonPath}" 含非法段`,
|
|
18172
18253
|
hint: "使用正常属性路径"
|
|
18173
18254
|
});
|
|
18174
|
-
if (!
|
|
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 =
|
|
18183
|
-
return
|
|
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 =
|
|
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 =
|
|
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 =
|
|
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 (
|
|
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 (!
|
|
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 =
|
|
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 =
|
|
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)。预览结果:${
|
|
18324
|
+
if (c) return `dryRun(edit): ${l.length} 个 patch 预检通过(schema 校验 OK)。预览结果:${Gy(o, 600)}。未实际写入、未入快照。`;
|
|
18244
18325
|
m("edit");
|
|
18245
|
-
for (let e of l)
|
|
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 =
|
|
18332
|
+
}), u = qy(a), `已 write(edit) 主数据(${l.length} 个 patch)。当前值:${Gy(a, 600)} (新 hash=${qy(a)})`;
|
|
18252
18333
|
}
|
|
18253
|
-
let v, y =
|
|
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 校验通过。预览新值:${
|
|
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 ?
|
|
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 =
|
|
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
|
|
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
|
-
|
|
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 ?
|
|
18298
|
-
return n ? `schema${t ? ` @ ${t}` : ""} = ${
|
|
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)
|
|
18311
|
-
|
|
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 ?
|
|
18326
|
-
return l.length ? `差异(当前 vs ${i},共 ${l.length} 处):\n${l.map((e) => ` ${e.path}: ${
|
|
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
|
|
18346
|
-
let n = new AbortController(), r = setTimeout(() => n.abort(),
|
|
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 ? `获取失败:请求超时(${
|
|
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
|
-
})],
|
|
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
|
|
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 ??
|
|
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
|
|
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 =
|
|
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
|
-
}),
|
|
18427
|
-
function
|
|
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 (!
|
|
18431
|
-
console.warn(`[page-agent-sdk][actions] 动作名 "${i}" 非法(须匹配 ${
|
|
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
|
|
18538
|
+
function zb(e) {
|
|
18452
18539
|
let t = {};
|
|
18453
|
-
for (let [n, r] of Object.entries(e))
|
|
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
|
|
18462
|
-
function
|
|
18463
|
-
return
|
|
18548
|
+
var Bb = Mb, Vb = Ib;
|
|
18549
|
+
function Hb(e, t) {
|
|
18550
|
+
return Ab(e, t);
|
|
18464
18551
|
}
|
|
18465
|
-
function
|
|
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
|
|
18476
|
-
function
|
|
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})
|
|
18483
|
-
let t = e.subagents.filter((e) => (e.temperature ?? 0) >=
|
|
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
|
|
18493
|
-
function
|
|
18494
|
-
return `${
|
|
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
|
|
18497
|
-
return `${
|
|
18583
|
+
function Yb(e, t) {
|
|
18584
|
+
return `${Kb}::${e}::${t}::`;
|
|
18498
18585
|
}
|
|
18499
|
-
function
|
|
18500
|
-
let t = e.dbName ??
|
|
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
|
|
18594
|
+
i = await Cy(t), a(!0);
|
|
18508
18595
|
} else if (n === "session") {
|
|
18509
18596
|
if (typeof sessionStorage > "u") throw Error("sessionStorage 不可用");
|
|
18510
|
-
i =
|
|
18597
|
+
i = wy(sessionStorage), a(!0);
|
|
18511
18598
|
} else if (n === "local") {
|
|
18512
18599
|
if (typeof localStorage > "u") throw Error("localStorage 不可用");
|
|
18513
|
-
i =
|
|
18514
|
-
} else i =
|
|
18600
|
+
i = wy(localStorage), a(!0);
|
|
18601
|
+
} else i = Sy(), a(!1);
|
|
18515
18602
|
} catch {
|
|
18516
|
-
i =
|
|
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(
|
|
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(
|
|
18614
|
+
return await i.get(Jb(t, r, e));
|
|
18528
18615
|
},
|
|
18529
18616
|
async put(e) {
|
|
18530
18617
|
try {
|
|
18531
|
-
await i.set(
|
|
18618
|
+
await i.set(Jb(t, r, e.name), e);
|
|
18532
18619
|
} catch (e) {
|
|
18533
|
-
|
|
18620
|
+
my(e) && (i = Sy());
|
|
18534
18621
|
}
|
|
18535
18622
|
},
|
|
18536
18623
|
async remove(e) {
|
|
18537
|
-
let n =
|
|
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(
|
|
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
|
|
18549
|
-
function
|
|
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
|
|
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 =
|
|
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
|
|
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 =
|
|
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 } =
|
|
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 =
|
|
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 ?
|
|
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 =
|
|
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 ?
|
|
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 =
|
|
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 ?
|
|
18635
|
-
ee && M.set(
|
|
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
|
|
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 :
|
|
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 ?
|
|
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 ?
|
|
18695
|
-
check: e.verify.check ??
|
|
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 =
|
|
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: () =>
|
|
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 =
|
|
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 :
|
|
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 =
|
|
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 ? [
|
|
18765
|
-
...ce ? [
|
|
18766
|
-
...
|
|
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) ??
|
|
18856
|
+
preserveLastToolResults: (e.contextOptions && e.contextOptions.preserveLastToolResults) ?? jy[e.contextPreset ?? "auto"]
|
|
18770
18857
|
})] : [],
|
|
18771
18858
|
...ae ? [_] : [],
|
|
18772
18859
|
...le ? [v] : [],
|
|
18773
|
-
...e.permissions?.length ? [
|
|
18774
|
-
...S && w && C ? [
|
|
18775
|
-
...L ? [
|
|
18776
|
-
...e.approval && (e.approval.tools !== void 0 || e.approval.confirm) ? [
|
|
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
|
-
|
|
18783
|
-
]), Pe = e.maxMemoryRounds ??
|
|
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())),
|
|
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 =
|
|
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:
|
|
18948
|
-
systemPrompt: B.agent?.getEffectiveSystemPrompt?.() ?? D +
|
|
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:
|
|
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 =
|
|
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) =>
|
|
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
|
-
...
|
|
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 =
|
|
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
|
|
19095
|
-
let t = e.id ??
|
|
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 ?
|
|
19098
|
-
a ? i = a : (i =
|
|
19099
|
-
let o = null, s = null, c =
|
|
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 =
|
|
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
|
|
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
|
|
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 {
|
|
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 };
|