page-agent-sdk 4.2.2 → 4.2.3
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 +1 -1
- package/README.zh-CN.md +1 -1
- package/dist/page-agent-sdk.headless.js +86 -55
- package/dist/page-agent-sdk.iife.js +10 -10
- package/dist/page-agent-sdk.js +89 -59
- package/dist/page-agent-sdk.legacy.js +95 -59
- package/dist/page-agent-sdk.umd.cjs +10 -10
- package/dist/style.css +1 -1
- package/package.json +1 -1
- package/style.css +1 -1
package/dist/page-agent-sdk.js
CHANGED
|
@@ -198,6 +198,22 @@ var b = [
|
|
|
198
198
|
vision: !0
|
|
199
199
|
}
|
|
200
200
|
},
|
|
201
|
+
{
|
|
202
|
+
pattern: /qwen3(\.\d+)?-vl/i,
|
|
203
|
+
caps: {
|
|
204
|
+
contextWindow: 262144,
|
|
205
|
+
maxOutputTokens: 32768,
|
|
206
|
+
vision: !0
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
pattern: /qwen3(\.\d+)?-(max|plus|flash)/i,
|
|
211
|
+
caps: {
|
|
212
|
+
contextWindow: 262144,
|
|
213
|
+
maxOutputTokens: 32768,
|
|
214
|
+
thinking: !0
|
|
215
|
+
}
|
|
216
|
+
},
|
|
201
217
|
{
|
|
202
218
|
pattern: /qwen-max|qwen-plus/i,
|
|
203
219
|
caps: {
|
|
@@ -7623,63 +7639,70 @@ function Up(e, t) {
|
|
|
7623
7639
|
return Array.isArray(a) && Number(i) >= a.length;
|
|
7624
7640
|
}
|
|
7625
7641
|
function Wp(e) {
|
|
7626
|
-
let t = e.initialFocuses ? [...e.initialFocuses] : [], n =
|
|
7642
|
+
let t = e.initialFocuses ? [...e.initialFocuses] : [], n = null, r = () => n ?? t, i = () => e.onChange?.([...t]), a = (e, r) => {
|
|
7643
|
+
t = r(t), n !== null && e === "agent" && (n = r(n)), i();
|
|
7644
|
+
}, o = e.unfocusGuidance ?? "tool", s = (e) => `若你的意图是修改聚焦组件本身(如给它新增页签/子项),请改写焦点路径的子路径重试${e ? `(如 ${e})` : ""};`, c = o === "tool" ? `需改其他组件请先 remove_focus / clear_focus 或换焦点。${s()}` : o === "ask-user" ? `焦点由用户在输入框设定与移除(聚焦 chip ✕);用户要求改其他组件时,提示用户移除聚焦后重试,勿尝试写焦点外(会被拒)。${s()}` : `需改其他组件时,在收口回复中说明需先取消焦点(焦点由主会话管理),勿尝试越界写。${s()}`, l = (e) => o === "tool" ? `${s(e)}需操作焦点外组件请先 remove_focus / clear_focus 或换焦点后重试。` : o === "ask-user" ? `${s(e)}焦点由用户在输入框管理,请提示用户移除输入框中的聚焦 chip 后重试(当前模式无 focus 工具)。` : `${s(e)}请只改焦点子树;需改其他组件时,在收口回复中说明需先取消焦点。`;
|
|
7627
7645
|
return {
|
|
7628
7646
|
name: "focus",
|
|
7629
|
-
beforeAgent: () => t.length ? {
|
|
7630
|
-
focuses: [...
|
|
7631
|
-
focus:
|
|
7632
|
-
} : {},
|
|
7647
|
+
beforeAgent: () => (n = [...t], n.length ? {
|
|
7648
|
+
focuses: [...n],
|
|
7649
|
+
focus: n[0]
|
|
7650
|
+
} : {}),
|
|
7651
|
+
afterAgent: () => {
|
|
7652
|
+
n = null;
|
|
7653
|
+
},
|
|
7633
7654
|
augmentPrompt: () => {
|
|
7655
|
+
let t = r();
|
|
7634
7656
|
if (!t.length) return;
|
|
7635
7657
|
let n = [
|
|
7636
7658
|
"## 当前精修目标",
|
|
7637
7659
|
t.map((e) => `· ${e.path}${e.label ? `(${e.label})` : ""}`).join("\n"),
|
|
7638
|
-
`仅操作上述 ${t.length} 个聚焦子树${t.length > 1 ? "之一" : ""},用户未指明目标的指令默认作用于聚焦组件(「增加/修改/删除 X」类指令优先理解为对聚焦组件本身的改动 —— 如为其加页签/子项,写焦点路径的子路径;仅用户明确要求新建独立组件时才需解除焦点);不要改动其他组件;${
|
|
7660
|
+
`仅操作上述 ${t.length} 个聚焦子树${t.length > 1 ? "之一" : ""},用户未指明目标的指令默认作用于聚焦组件(「增加/修改/删除 X」类指令优先理解为对聚焦组件本身的改动 —— 如为其加页签/子项,写焦点路径的子路径;仅用户明确要求新建独立组件时才需解除焦点);不要改动其他组件;${c}`,
|
|
7639
7661
|
"用户用指示代词提问(「这是啥/这个/它是干什么的」等)时,所指默认是聚焦目标 —— 先 read 聚焦子树,再围绕聚焦组件回答,勿泛答整页",
|
|
7640
7662
|
"read 不带路径时默认只返回聚焦子树;需要全量主数据时显式列顶层键(read({jsonPaths:[...]}) )"
|
|
7641
|
-
],
|
|
7642
|
-
if (
|
|
7663
|
+
], i = e.getSchema();
|
|
7664
|
+
if (i) {
|
|
7643
7665
|
let e = t.map((e) => {
|
|
7644
|
-
let t = wf(
|
|
7666
|
+
let t = wf(i, e.path);
|
|
7645
7667
|
return t ? rp(t) : null;
|
|
7646
7668
|
}).filter((e) => !!e);
|
|
7647
7669
|
e.length && n.push("", "## 焦点子树结构(仅此范围可操作)", ...e);
|
|
7648
7670
|
}
|
|
7649
7671
|
return n.join("\n");
|
|
7650
7672
|
},
|
|
7651
|
-
wrapToolCall: async (
|
|
7652
|
-
|
|
7653
|
-
|
|
7654
|
-
|
|
7673
|
+
wrapToolCall: async (t, n) => {
|
|
7674
|
+
let i = r();
|
|
7675
|
+
if (i.length) {
|
|
7676
|
+
let r = i.map((e) => e.label ? `${e.path}(${e.label})` : e.path).join(", "), a = i.length === 1 ? `${i[0].path}.props.xxx` : void 0, o = (e) => ({
|
|
7677
|
+
content: `PATH_DENIED · 聚焦越界:当前聚焦 [${r}],不可操作「${e}」。${l(a)}`,
|
|
7655
7678
|
status: "error"
|
|
7656
7679
|
});
|
|
7657
|
-
if (
|
|
7658
|
-
if (
|
|
7659
|
-
let
|
|
7660
|
-
if (!
|
|
7661
|
-
for (let
|
|
7662
|
-
return
|
|
7680
|
+
if (t.name === "eval_script") {
|
|
7681
|
+
if (t.args?.mode !== "transform") return n(t);
|
|
7682
|
+
let r = Vp(t.args);
|
|
7683
|
+
if (!r.length) return o("(整体数据)");
|
|
7684
|
+
for (let t of r) if (!i.some((e) => Hp(t, e.path)) && !Up(t, e.getBind?.())) return o(t);
|
|
7685
|
+
return n(t);
|
|
7663
7686
|
}
|
|
7664
|
-
if (Bp.has(
|
|
7665
|
-
let
|
|
7666
|
-
if (!
|
|
7667
|
-
for (let
|
|
7687
|
+
if (Bp.has(t.name)) {
|
|
7688
|
+
let n = Vp(t.args);
|
|
7689
|
+
if (!n.length) return o("(整体数据)");
|
|
7690
|
+
for (let t of n) if (!i.some((e) => Hp(t, e.path)) && !Up(t, e.getBind?.())) return o(t);
|
|
7668
7691
|
}
|
|
7669
|
-
if (
|
|
7670
|
-
|
|
7671
|
-
...
|
|
7672
|
-
__pgFullTextPaths:
|
|
7692
|
+
if (t.name === "read") {
|
|
7693
|
+
t.callConfig = {
|
|
7694
|
+
...t.callConfig ?? {},
|
|
7695
|
+
__pgFullTextPaths: i.map((e) => e.path)
|
|
7673
7696
|
};
|
|
7674
|
-
let e =
|
|
7697
|
+
let e = t.args;
|
|
7675
7698
|
if (!e?.jsonPath && !e?.jsonPaths) {
|
|
7676
|
-
let
|
|
7677
|
-
...
|
|
7699
|
+
let r = i.map((e) => e.path), a = await n({
|
|
7700
|
+
...t,
|
|
7678
7701
|
args: {
|
|
7679
7702
|
...e,
|
|
7680
|
-
jsonPaths:
|
|
7703
|
+
jsonPaths: r
|
|
7681
7704
|
}
|
|
7682
|
-
}), o = `【聚焦模式】read 未带路径 → 默认返回聚焦子树(${
|
|
7705
|
+
}), o = `【聚焦模式】read 未带路径 → 默认返回聚焦子树(${r.join(", ")});需要全量主数据时显式列顶层键,如 read({jsonPaths:['<顶层键1>','<顶层键2>']})\n`;
|
|
7683
7706
|
return {
|
|
7684
7707
|
...a,
|
|
7685
7708
|
content: o + a.content
|
|
@@ -7687,26 +7710,33 @@ function Wp(e) {
|
|
|
7687
7710
|
}
|
|
7688
7711
|
}
|
|
7689
7712
|
}
|
|
7690
|
-
return
|
|
7713
|
+
return n(t);
|
|
7691
7714
|
},
|
|
7692
|
-
setFocus: (e) => {
|
|
7693
|
-
t
|
|
7715
|
+
setFocus: (e, t) => {
|
|
7716
|
+
a(t, () => e ? [e] : []);
|
|
7694
7717
|
},
|
|
7695
7718
|
getFocus: () => t[0],
|
|
7696
7719
|
getFocuses: () => [...t],
|
|
7697
|
-
addFocus: (e) => {
|
|
7698
|
-
|
|
7699
|
-
|
|
7720
|
+
addFocus: (e, t) => {
|
|
7721
|
+
a(t, (t) => {
|
|
7722
|
+
let n = t.findIndex((t) => t.path === e.path);
|
|
7723
|
+
if (n >= 0) {
|
|
7724
|
+
let r = [...t];
|
|
7725
|
+
return r[n] = e, r;
|
|
7726
|
+
}
|
|
7727
|
+
return [...t, e];
|
|
7728
|
+
});
|
|
7700
7729
|
},
|
|
7701
|
-
removeFocus: (e) => {
|
|
7702
|
-
t
|
|
7730
|
+
removeFocus: (e, t) => {
|
|
7731
|
+
a(t, (t) => t.filter((t) => t.path !== e));
|
|
7703
7732
|
},
|
|
7704
|
-
clearFocus: () => {
|
|
7705
|
-
|
|
7733
|
+
clearFocus: (e) => {
|
|
7734
|
+
a(e, () => []);
|
|
7706
7735
|
},
|
|
7707
7736
|
reset: () => {
|
|
7708
|
-
t = [], n();
|
|
7709
|
-
}
|
|
7737
|
+
t = [], n = null, i();
|
|
7738
|
+
},
|
|
7739
|
+
isInvokeActive: () => n !== null
|
|
7710
7740
|
};
|
|
7711
7741
|
}
|
|
7712
7742
|
//#endregion
|
|
@@ -14752,7 +14782,7 @@ function qy(e, n) {
|
|
|
14752
14782
|
return n ? wf(n, e) ? (j.setFocus({
|
|
14753
14783
|
path: e,
|
|
14754
14784
|
...t ? { label: t } : {}
|
|
14755
|
-
}), `已聚焦到 ${e}${t ? `(${t})` : ""}。后续仅可写该子树(越界被拒),每轮只看到该组件结构。完成精修后调 clear_focus 退出。`) : `PATH_DENIED · 聚焦失败:path "${e}" 不在 schema 内。请先用 read 查看可操作路径再聚焦。` : "聚焦失败:当前无主数据 schema,无法聚焦。";
|
|
14785
|
+
}, "agent"), `已聚焦到 ${e}${t ? `(${t})` : ""}。后续仅可写该子树(越界被拒),每轮只看到该组件结构。完成精修后调 clear_focus 退出。`) : `PATH_DENIED · 聚焦失败:path "${e}" 不在 schema 内。请先用 read 查看可操作路径再聚焦。` : "聚焦失败:当前无主数据 schema,无法聚焦。";
|
|
14756
14786
|
}, {
|
|
14757
14787
|
name: "set_focus",
|
|
14758
14788
|
description: "聚焦到指定组件子树(如 components.3)精修,替换全部已有焦点(非累积;要保留已有焦点追加用 add_focus)。聚焦后:仅可写该子树(越界 PATH_DENIED)+ 每轮只看到该组件结构。多组件页面精修其中一个时用,避免改到别处。先 read 定位 path 再聚焦;完成调 clear_focus。",
|
|
@@ -14760,7 +14790,7 @@ function qy(e, n) {
|
|
|
14760
14790
|
path: t.string().describe("要聚焦的组件 jsonPath,如 components.3"),
|
|
14761
14791
|
label: t.string().optional().describe("人类可读标签,如「导航栏」")
|
|
14762
14792
|
})
|
|
14763
|
-
}), Me = r(async () => (j.clearFocus(), "已清除聚焦,恢复全量可操作范围(可读写所有组件)。"), {
|
|
14793
|
+
}), Me = r(async () => (j.clearFocus("agent"), "已清除聚焦,恢复全量可操作范围(可读写所有组件)。"), {
|
|
14764
14794
|
name: "clear_focus",
|
|
14765
14795
|
description: "清除当前聚焦,退出精修模式,恢复对全部组件的读写权限。",
|
|
14766
14796
|
schema: t.object({}).optional()
|
|
@@ -14771,7 +14801,7 @@ function qy(e, n) {
|
|
|
14771
14801
|
j.addFocus({
|
|
14772
14802
|
path: e,
|
|
14773
14803
|
...t ? { label: t } : {}
|
|
14774
|
-
});
|
|
14804
|
+
}, "agent");
|
|
14775
14805
|
let r = j.getFocuses();
|
|
14776
14806
|
return `已聚焦 ${e}${t ? `(${t})` : ""}(当前共 ${r.length} 个焦点:${r.map((e) => e.path).join(", ")})。后续仅可写这些子树之一(越界被拒)。`;
|
|
14777
14807
|
}, {
|
|
@@ -14783,7 +14813,7 @@ function qy(e, n) {
|
|
|
14783
14813
|
})
|
|
14784
14814
|
}), Pe = r(async ({ path: e }) => {
|
|
14785
14815
|
let t = j.getFocuses().length;
|
|
14786
|
-
j.removeFocus(e);
|
|
14816
|
+
j.removeFocus(e, "agent");
|
|
14787
14817
|
let n = j.getFocuses();
|
|
14788
14818
|
return n.length === t ? `path "${e}" 不在当前焦点列表中(当前:${n.map((e) => e.path).join(", ") || "无"})。` : n.length ? `已移除焦点 ${e}(剩余 ${n.length} 个:${n.map((e) => e.path).join(", ")})。` : `已移除焦点 ${e},聚焦已清空,恢复全量操作范围。`;
|
|
14789
14819
|
}, {
|
|
@@ -15610,14 +15640,14 @@ function qy(e, n) {
|
|
|
15610
15640
|
},
|
|
15611
15641
|
setFocus(t) {
|
|
15612
15642
|
let n = Ky(t, "setFocus", Ae, () => ge()?.schema, e.debug);
|
|
15613
|
-
return n.ok ? (j.setFocus(t), G.infoTick.value++, { ok: !0 }) : n;
|
|
15643
|
+
return n.ok ? (j.setFocus(t), e.debug && j.isInvokeActive() && console.info("[page-agent-sdk][focus] 在途流程进行中,聚焦将在下一次输入生效(当前流程不受影响)"), G.infoTick.value++, { ok: !0 }) : n;
|
|
15614
15644
|
},
|
|
15615
15645
|
addFocus(t) {
|
|
15616
15646
|
let n = Ky(t, "addFocus", Ae, () => ge()?.schema, e.debug);
|
|
15617
15647
|
return n.ok ? j.getFocuses().length >= 8 ? (e.debug && console.warn("[page-agent-sdk][focus] addFocus 拒绝:焦点数已达上限 8(augmentPrompt 注入每焦点子树 schema,过多致 system prompt 超预算)"), {
|
|
15618
15648
|
ok: !1,
|
|
15619
15649
|
error: "焦点数上限 8(避免 system prompt 撑爆)"
|
|
15620
|
-
}) : (j.addFocus(t), G.infoTick.value++, { ok: !0 }) : n;
|
|
15650
|
+
}) : (j.addFocus(t), e.debug && j.isInvokeActive() && console.info("[page-agent-sdk][focus] 在途流程进行中,聚焦将在下一次输入生效(当前流程不受影响)"), G.infoTick.value++, { ok: !0 }) : n;
|
|
15621
15651
|
},
|
|
15622
15652
|
removeFocus(e) {
|
|
15623
15653
|
Ae && (j.removeFocus(e), G.infoTick.value++);
|
|
@@ -17629,8 +17659,8 @@ function nw(e = {}) {
|
|
|
17629
17659
|
await r?.(s.messages);
|
|
17630
17660
|
} catch {}
|
|
17631
17661
|
s.loading = !1, u = null;
|
|
17632
|
-
let
|
|
17633
|
-
|
|
17662
|
+
let t = d.value.shift();
|
|
17663
|
+
t !== void 0 && (g("user", t, e.getFocuses?.()), s.loading = !0, s.error = null, u = new AbortController(), await _(u.signal));
|
|
17634
17664
|
}
|
|
17635
17665
|
function b(e) {
|
|
17636
17666
|
d.value.splice(e, 1);
|
|
@@ -17787,7 +17817,7 @@ var ow = {
|
|
|
17787
17817
|
copyThinkingTruncTitle: "复制完整思考(渲染已截尾,复制取全量)",
|
|
17788
17818
|
focusChipTitlePrefix: "精修中:",
|
|
17789
17819
|
focusChipTitleHint: "(点击回看 · ✕ 移除)",
|
|
17790
|
-
historyFocusChipTitlePrefix: "
|
|
17820
|
+
historyFocusChipTitlePrefix: "发送时聚焦(路径可能已变):",
|
|
17791
17821
|
removeFocus: "移除此焦点",
|
|
17792
17822
|
sendHint: "Enter 发送 · Shift+Enter 换行",
|
|
17793
17823
|
sendTitle: "发送",
|
|
@@ -18011,7 +18041,7 @@ var ow = {
|
|
|
18011
18041
|
copyThinkingTruncTitle: "Copy full reasoning (display truncated, copy gets all)",
|
|
18012
18042
|
focusChipTitlePrefix: "Focus:",
|
|
18013
18043
|
focusChipTitleHint: "(click to view · ✕ remove)",
|
|
18014
|
-
historyFocusChipTitlePrefix: "
|
|
18044
|
+
historyFocusChipTitlePrefix: "Focused at send (path may have changed): ",
|
|
18015
18045
|
removeFocus: "Remove this focus",
|
|
18016
18046
|
sendHint: "Enter to send · Shift+Enter for newline",
|
|
18017
18047
|
sendTitle: "Send",
|
|
@@ -18217,7 +18247,8 @@ function dw(e = {}) {
|
|
|
18217
18247
|
onPersist: e.onPersist,
|
|
18218
18248
|
onClear: e.onClear,
|
|
18219
18249
|
onQueuedCleared: e.onQueuedCleared,
|
|
18220
|
-
onBeforeRegenerate: e.onBeforeRegenerate
|
|
18250
|
+
onBeforeRegenerate: e.onBeforeRegenerate,
|
|
18251
|
+
getFocuses: e.getFocuses
|
|
18221
18252
|
}), { state: n, sendMessage: r, removeQueuedTask: i, queuedTasks: a } = t, o = /* @__PURE__ */ Mn(""), s = /* @__PURE__ */ Mn(!0), c = () => {
|
|
18222
18253
|
s.value = !s.value;
|
|
18223
18254
|
}, l = /* @__PURE__ */ Mn(!1), u = () => {
|
|
@@ -28237,7 +28268,7 @@ var Gk = ["innerHTML"], Kk = /* @__PURE__ */ Wi({
|
|
|
28237
28268
|
}, cA = { class: "message-content" }, lA = {
|
|
28238
28269
|
key: 2,
|
|
28239
28270
|
class: "msg-focuses"
|
|
28240
|
-
}, uA = ["title"
|
|
28271
|
+
}, uA = ["title"], dA = ["data-img-count"], fA = ["href", "title"], pA = ["src", "alt"], mA = {
|
|
28241
28272
|
key: 1,
|
|
28242
28273
|
class: "msg-image-lost"
|
|
28243
28274
|
}, hA = /*#__PURE__*/ qT(/* @__PURE__ */ Wi({
|
|
@@ -28294,8 +28325,7 @@ var Gk = ["innerHTML"], Kk = /* @__PURE__ */ Wi({
|
|
|
28294
28325
|
e.message.role === "user" && e.message.focuses?.length ? (Y(), X("div", lA, [(Y(!0), X(J, null, ga(e.message.focuses, (e) => (Y(), X("span", {
|
|
28295
28326
|
key: e.path,
|
|
28296
28327
|
class: "msg-focus-chip",
|
|
28297
|
-
title: K(n).messages.historyFocusChipTitlePrefix + e.path
|
|
28298
|
-
onClick: (t) => K(n).focusChipClick(e)
|
|
28328
|
+
title: K(n).messages.historyFocusChipTitlePrefix + e.path
|
|
28299
28329
|
}, [xs(JT, { icon: K(n).icons.focus }, null, 8, ["icon"]), Es(" " + W(e.path), 1)], 8, uA))), 128))])) : Q("", !0),
|
|
28300
28330
|
e.message.role === "user" && e.message.images?.length ? (Y(), X("div", {
|
|
28301
28331
|
key: 3,
|
|
@@ -28340,7 +28370,7 @@ var Gk = ["innerHTML"], Kk = /* @__PURE__ */ Wi({
|
|
|
28340
28370
|
}, null, 8, ["messages", "copied"])) : Q("", !0)
|
|
28341
28371
|
])], 10, oA));
|
|
28342
28372
|
}
|
|
28343
|
-
}), [["__scopeId", "data-v-
|
|
28373
|
+
}), [["__scopeId", "data-v-053034ee"]]), gA = { class: "chat-body" }, _A = {
|
|
28344
28374
|
key: 0,
|
|
28345
28375
|
class: "empty-state"
|
|
28346
28376
|
}, vA = { class: "empty-icon" }, yA = {
|
|
@@ -43065,6 +43065,22 @@ var xge = [
|
|
|
43065
43065
|
vision: !0
|
|
43066
43066
|
}
|
|
43067
43067
|
},
|
|
43068
|
+
{
|
|
43069
|
+
pattern: /qwen3(\.\d+)?-vl/i,
|
|
43070
|
+
caps: {
|
|
43071
|
+
contextWindow: 262144,
|
|
43072
|
+
maxOutputTokens: 32768,
|
|
43073
|
+
vision: !0
|
|
43074
|
+
}
|
|
43075
|
+
},
|
|
43076
|
+
{
|
|
43077
|
+
pattern: /qwen3(\.\d+)?-(max|plus|flash)/i,
|
|
43078
|
+
caps: {
|
|
43079
|
+
contextWindow: 262144,
|
|
43080
|
+
maxOutputTokens: 32768,
|
|
43081
|
+
thinking: !0
|
|
43082
|
+
}
|
|
43083
|
+
},
|
|
43068
43084
|
{
|
|
43069
43085
|
pattern: /qwen-max|qwen-plus/i,
|
|
43070
43086
|
caps: {
|
|
@@ -57473,89 +57489,106 @@ function D$(e, t) {
|
|
|
57473
57489
|
}
|
|
57474
57490
|
function O$(e) {
|
|
57475
57491
|
var t;
|
|
57476
|
-
let n = e.initialFocuses ? [...e.initialFocuses] : [], r = () => {
|
|
57492
|
+
let n = e.initialFocuses ? [...e.initialFocuses] : [], r = null, i = () => {
|
|
57493
|
+
var e;
|
|
57494
|
+
return (e = r) == null ? n : e;
|
|
57495
|
+
}, a = () => {
|
|
57477
57496
|
var t;
|
|
57478
57497
|
return (t = e.onChange) == null ? void 0 : t.call(e, [...n]);
|
|
57479
|
-
},
|
|
57498
|
+
}, o = (e, t) => {
|
|
57499
|
+
n = t(n), r !== null && e === "agent" && (r = t(r)), a();
|
|
57500
|
+
}, s = (t = e.unfocusGuidance) == null ? "tool" : t, c = (e) => `若你的意图是修改聚焦组件本身(如给它新增页签/子项),请改写焦点路径的子路径重试${e ? `(如 ${e})` : ""};`, l = s === "tool" ? `需改其他组件请先 remove_focus / clear_focus 或换焦点。${c()}` : s === "ask-user" ? `焦点由用户在输入框设定与移除(聚焦 chip ✕);用户要求改其他组件时,提示用户移除聚焦后重试,勿尝试写焦点外(会被拒)。${c()}` : `需改其他组件时,在收口回复中说明需先取消焦点(焦点由主会话管理),勿尝试越界写。${c()}`, u = (e) => s === "tool" ? `${c(e)}需操作焦点外组件请先 remove_focus / clear_focus 或换焦点后重试。` : s === "ask-user" ? `${c(e)}焦点由用户在输入框管理,请提示用户移除输入框中的聚焦 chip 后重试(当前模式无 focus 工具)。` : `${c(e)}请只改焦点子树;需改其他组件时,在收口回复中说明需先取消焦点。`;
|
|
57480
57501
|
return {
|
|
57481
57502
|
name: "focus",
|
|
57482
|
-
beforeAgent: () => n.length ? {
|
|
57483
|
-
focuses: [...
|
|
57484
|
-
focus:
|
|
57485
|
-
} : {},
|
|
57503
|
+
beforeAgent: () => (r = [...n], r.length ? {
|
|
57504
|
+
focuses: [...r],
|
|
57505
|
+
focus: r[0]
|
|
57506
|
+
} : {}),
|
|
57507
|
+
afterAgent: () => {
|
|
57508
|
+
r = null;
|
|
57509
|
+
},
|
|
57486
57510
|
augmentPrompt: () => {
|
|
57487
|
-
|
|
57488
|
-
|
|
57511
|
+
let t = i();
|
|
57512
|
+
if (!t.length) return;
|
|
57513
|
+
let n = [
|
|
57489
57514
|
"## 当前精修目标",
|
|
57490
|
-
|
|
57491
|
-
`仅操作上述 ${
|
|
57515
|
+
t.map((e) => `· ${e.path}${e.label ? `(${e.label})` : ""}`).join("\n"),
|
|
57516
|
+
`仅操作上述 ${t.length} 个聚焦子树${t.length > 1 ? "之一" : ""},用户未指明目标的指令默认作用于聚焦组件(「增加/修改/删除 X」类指令优先理解为对聚焦组件本身的改动 —— 如为其加页签/子项,写焦点路径的子路径;仅用户明确要求新建独立组件时才需解除焦点);不要改动其他组件;${l}`,
|
|
57492
57517
|
"用户用指示代词提问(「这是啥/这个/它是干什么的」等)时,所指默认是聚焦目标 —— 先 read 聚焦子树,再围绕聚焦组件回答,勿泛答整页",
|
|
57493
57518
|
"read 不带路径时默认只返回聚焦子树;需要全量主数据时显式列顶层键(read({jsonPaths:[...]}) )"
|
|
57494
57519
|
], r = e.getSchema();
|
|
57495
57520
|
if (r) {
|
|
57496
|
-
let e =
|
|
57521
|
+
let e = t.map((e) => {
|
|
57497
57522
|
let t = FQ(r, e.path);
|
|
57498
57523
|
return t ? r$(t) : null;
|
|
57499
57524
|
}).filter((e) => !!e);
|
|
57500
|
-
e.length &&
|
|
57525
|
+
e.length && n.push("", "## 焦点子树结构(仅此范围可操作)", ...e);
|
|
57501
57526
|
}
|
|
57502
|
-
return
|
|
57527
|
+
return n.join("\n");
|
|
57503
57528
|
},
|
|
57504
|
-
wrapToolCall: async (t,
|
|
57505
|
-
|
|
57506
|
-
|
|
57507
|
-
|
|
57529
|
+
wrapToolCall: async (t, n) => {
|
|
57530
|
+
let r = i();
|
|
57531
|
+
if (r.length) {
|
|
57532
|
+
let i = r.map((e) => e.label ? `${e.path}(${e.label})` : e.path).join(", "), l = r.length === 1 ? `${r[0].path}.props.xxx` : void 0, d = (e) => ({
|
|
57533
|
+
content: `PATH_DENIED · 聚焦越界:当前聚焦 [${i}],不可操作「${e}」。${u(l)}`,
|
|
57508
57534
|
status: "error"
|
|
57509
57535
|
});
|
|
57510
57536
|
if (t.name === "eval_script") {
|
|
57511
|
-
var
|
|
57512
|
-
if (((
|
|
57513
|
-
let
|
|
57514
|
-
if (!
|
|
57515
|
-
for (let t of
|
|
57516
|
-
var
|
|
57517
|
-
if (!
|
|
57537
|
+
var a;
|
|
57538
|
+
if (((a = t.args) == null ? void 0 : a.mode) !== "transform") return n(t);
|
|
57539
|
+
let i = T$(t.args);
|
|
57540
|
+
if (!i.length) return d("(整体数据)");
|
|
57541
|
+
for (let t of i) {
|
|
57542
|
+
var o;
|
|
57543
|
+
if (!r.some((e) => E$(t, e.path)) && !D$(t, (o = e.getBind) == null ? void 0 : o.call(e))) return d(t);
|
|
57518
57544
|
}
|
|
57519
|
-
return
|
|
57545
|
+
return n(t);
|
|
57520
57546
|
}
|
|
57521
57547
|
if (Vwe.has(t.name)) {
|
|
57522
|
-
let
|
|
57523
|
-
if (!
|
|
57524
|
-
for (let t of
|
|
57525
|
-
var
|
|
57526
|
-
if (!
|
|
57548
|
+
let n = T$(t.args);
|
|
57549
|
+
if (!n.length) return d("(整体数据)");
|
|
57550
|
+
for (let t of n) {
|
|
57551
|
+
var s;
|
|
57552
|
+
if (!r.some((e) => E$(t, e.path)) && !D$(t, (s = e.getBind) == null ? void 0 : s.call(e))) return d(t);
|
|
57527
57553
|
}
|
|
57528
57554
|
}
|
|
57529
57555
|
if (t.name === "read") {
|
|
57530
57556
|
var c;
|
|
57531
|
-
t.callConfig = j(j({}, (c = t.callConfig) == null ? {} : c), {}, { __pgFullTextPaths:
|
|
57557
|
+
t.callConfig = j(j({}, (c = t.callConfig) == null ? {} : c), {}, { __pgFullTextPaths: r.map((e) => e.path) });
|
|
57532
57558
|
let e = t.args;
|
|
57533
57559
|
if (!(e != null && e.jsonPath) && !(e != null && e.jsonPaths)) {
|
|
57534
|
-
let i =
|
|
57560
|
+
let i = r.map((e) => e.path), a = await n(j(j({}, t), {}, { args: j(j({}, e), {}, { jsonPaths: i }) })), o = `【聚焦模式】read 未带路径 → 默认返回聚焦子树(${i.join(", ")});需要全量主数据时显式列顶层键,如 read({jsonPaths:['<顶层键1>','<顶层键2>']})\n`;
|
|
57535
57561
|
return j(j({}, a), {}, { content: o + a.content });
|
|
57536
57562
|
}
|
|
57537
57563
|
}
|
|
57538
57564
|
}
|
|
57539
|
-
return
|
|
57565
|
+
return n(t);
|
|
57540
57566
|
},
|
|
57541
|
-
setFocus: (e) => {
|
|
57542
|
-
|
|
57567
|
+
setFocus: (e, t) => {
|
|
57568
|
+
o(t, () => e ? [e] : []);
|
|
57543
57569
|
},
|
|
57544
57570
|
getFocus: () => n[0],
|
|
57545
57571
|
getFocuses: () => [...n],
|
|
57546
|
-
addFocus: (e) => {
|
|
57547
|
-
|
|
57548
|
-
|
|
57572
|
+
addFocus: (e, t) => {
|
|
57573
|
+
o(t, (t) => {
|
|
57574
|
+
let n = t.findIndex((t) => t.path === e.path);
|
|
57575
|
+
if (n >= 0) {
|
|
57576
|
+
let r = [...t];
|
|
57577
|
+
return r[n] = e, r;
|
|
57578
|
+
}
|
|
57579
|
+
return [...t, e];
|
|
57580
|
+
});
|
|
57549
57581
|
},
|
|
57550
|
-
removeFocus: (e) => {
|
|
57551
|
-
|
|
57582
|
+
removeFocus: (e, t) => {
|
|
57583
|
+
o(t, (t) => t.filter((t) => t.path !== e));
|
|
57552
57584
|
},
|
|
57553
|
-
clearFocus: () => {
|
|
57554
|
-
|
|
57585
|
+
clearFocus: (e) => {
|
|
57586
|
+
o(e, () => []);
|
|
57555
57587
|
},
|
|
57556
57588
|
reset: () => {
|
|
57557
|
-
n = [], r();
|
|
57558
|
-
}
|
|
57589
|
+
n = [], r = null, a();
|
|
57590
|
+
},
|
|
57591
|
+
isInvokeActive: () => r !== null
|
|
57559
57592
|
};
|
|
57560
57593
|
}
|
|
57561
57594
|
_F(), Xf();
|
|
@@ -72519,7 +72552,7 @@ function aMe(e, t) {
|
|
|
72519
72552
|
let mt = Ge.focus, ht = fF(async ({ path: e, label: t }) => {
|
|
72520
72553
|
var n;
|
|
72521
72554
|
let r = (n = et()) == null ? void 0 : n.schema;
|
|
72522
|
-
return r ? FQ(r, e) ? (Ee.setFocus(j({ path: e }, t ? { label: t } : {})), `已聚焦到 ${e}${t ? `(${t})` : ""}。后续仅可写该子树(越界被拒),每轮只看到该组件结构。完成精修后调 clear_focus 退出。`) : `PATH_DENIED · 聚焦失败:path "${e}" 不在 schema 内。请先用 read 查看可操作路径再聚焦。` : "聚焦失败:当前无主数据 schema,无法聚焦。";
|
|
72555
|
+
return r ? FQ(r, e) ? (Ee.setFocus(j({ path: e }, t ? { label: t } : {}), "agent"), `已聚焦到 ${e}${t ? `(${t})` : ""}。后续仅可写该子树(越界被拒),每轮只看到该组件结构。完成精修后调 clear_focus 退出。`) : `PATH_DENIED · 聚焦失败:path "${e}" 不在 schema 内。请先用 read 查看可操作路径再聚焦。` : "聚焦失败:当前无主数据 schema,无法聚焦。";
|
|
72523
72556
|
}, {
|
|
72524
72557
|
name: "set_focus",
|
|
72525
72558
|
description: "聚焦到指定组件子树(如 components.3)精修,替换全部已有焦点(非累积;要保留已有焦点追加用 add_focus)。聚焦后:仅可写该子树(越界 PATH_DENIED)+ 每轮只看到该组件结构。多组件页面精修其中一个时用,避免改到别处。先 read 定位 path 再聚焦;完成调 clear_focus。",
|
|
@@ -72527,7 +72560,7 @@ function aMe(e, t) {
|
|
|
72527
72560
|
path: z().describe("要聚焦的组件 jsonPath,如 components.3"),
|
|
72528
72561
|
label: z().optional().describe("人类可读标签,如「导航栏」")
|
|
72529
72562
|
})
|
|
72530
|
-
}), gt = fF(async () => (Ee.clearFocus(), "已清除聚焦,恢复全量可操作范围(可读写所有组件)。"), {
|
|
72563
|
+
}), gt = fF(async () => (Ee.clearFocus("agent"), "已清除聚焦,恢复全量可操作范围(可读写所有组件)。"), {
|
|
72531
72564
|
name: "clear_focus",
|
|
72532
72565
|
description: "清除当前聚焦,退出精修模式,恢复对全部组件的读写权限。",
|
|
72533
72566
|
schema: B({}).optional()
|
|
@@ -72536,7 +72569,7 @@ function aMe(e, t) {
|
|
|
72536
72569
|
let r = (n = et()) == null ? void 0 : n.schema;
|
|
72537
72570
|
if (!r) return "聚焦失败:当前无主数据 schema,无法聚焦。";
|
|
72538
72571
|
if (!FQ(r, e)) return `PATH_DENIED · 聚焦失败:path "${e}" 不在 schema 内。请先用 read 查看可操作路径再聚焦。`;
|
|
72539
|
-
Ee.addFocus(j({ path: e }, t ? { label: t } : {}));
|
|
72572
|
+
Ee.addFocus(j({ path: e }, t ? { label: t } : {}), "agent");
|
|
72540
72573
|
let i = Ee.getFocuses();
|
|
72541
72574
|
return `已聚焦 ${e}${t ? `(${t})` : ""}(当前共 ${i.length} 个焦点:${i.map((e) => e.path).join(", ")})。后续仅可写这些子树之一(越界被拒)。`;
|
|
72542
72575
|
}, {
|
|
@@ -72548,7 +72581,7 @@ function aMe(e, t) {
|
|
|
72548
72581
|
})
|
|
72549
72582
|
}), vt = fF(async ({ path: e }) => {
|
|
72550
72583
|
let t = Ee.getFocuses().length;
|
|
72551
|
-
Ee.removeFocus(e);
|
|
72584
|
+
Ee.removeFocus(e, "agent");
|
|
72552
72585
|
let n = Ee.getFocuses();
|
|
72553
72586
|
return n.length === t ? `path "${e}" 不在当前焦点列表中(当前:${n.map((e) => e.path).join(", ") || "无"})。` : n.length ? `已移除焦点 ${e}(剩余 ${n.length} 个:${n.map((e) => e.path).join(", ")})。` : `已移除焦点 ${e},聚焦已清空,恢复全量操作范围。`;
|
|
72554
72587
|
}, {
|
|
@@ -73450,7 +73483,7 @@ function aMe(e, t) {
|
|
|
73450
73483
|
var e;
|
|
73451
73484
|
return (e = et()) == null ? void 0 : e.schema;
|
|
73452
73485
|
}, e.debug);
|
|
73453
|
-
return n.ok ? (Ee.setFocus(t), R.infoTick.value++, { ok: !0 }) : n;
|
|
73486
|
+
return n.ok ? (Ee.setFocus(t), e.debug && Ee.isInvokeActive() && console.info("[page-agent-sdk][focus] 在途流程进行中,聚焦将在下一次输入生效(当前流程不受影响)"), R.infoTick.value++, { ok: !0 }) : n;
|
|
73454
73487
|
},
|
|
73455
73488
|
addFocus(t) {
|
|
73456
73489
|
let n = iMe(t, "addFocus", mt, () => {
|
|
@@ -73460,7 +73493,7 @@ function aMe(e, t) {
|
|
|
73460
73493
|
return n.ok ? Ee.getFocuses().length >= 8 ? (e.debug && console.warn("[page-agent-sdk][focus] addFocus 拒绝:焦点数已达上限 8(augmentPrompt 注入每焦点子树 schema,过多致 system prompt 超预算)"), {
|
|
73461
73494
|
ok: !1,
|
|
73462
73495
|
error: "焦点数上限 8(避免 system prompt 撑爆)"
|
|
73463
|
-
}) : (Ee.addFocus(t), R.infoTick.value++, { ok: !0 }) : n;
|
|
73496
|
+
}) : (Ee.addFocus(t), e.debug && Ee.isInvokeActive() && console.info("[page-agent-sdk][focus] 在途流程进行中,聚焦将在下一次输入生效(当前流程不受影响)"), R.infoTick.value++, { ok: !0 }) : n;
|
|
73464
73497
|
},
|
|
73465
73498
|
removeFocus(e) {
|
|
73466
73499
|
mt && (Ee.removeFocus(e), R.infoTick.value++);
|
|
@@ -75518,8 +75551,11 @@ function bPe(e = {}) {
|
|
|
75518
75551
|
await (i == null ? void 0 : i(c.messages));
|
|
75519
75552
|
} catch (e) {}
|
|
75520
75553
|
c.loading = !1, d = null;
|
|
75521
|
-
let
|
|
75522
|
-
|
|
75554
|
+
let t = f.value.shift();
|
|
75555
|
+
if (t !== void 0) {
|
|
75556
|
+
var n;
|
|
75557
|
+
_("user", t, (n = e.getFocuses) == null ? void 0 : n.call(e)), c.loading = !0, c.error = null, d = new AbortController(), await v(d.signal);
|
|
75558
|
+
}
|
|
75523
75559
|
}
|
|
75524
75560
|
function x(e) {
|
|
75525
75561
|
f.value.splice(e, 1);
|
|
@@ -75681,7 +75717,7 @@ var B7 = {
|
|
|
75681
75717
|
copyThinkingTruncTitle: "复制完整思考(渲染已截尾,复制取全量)",
|
|
75682
75718
|
focusChipTitlePrefix: "精修中:",
|
|
75683
75719
|
focusChipTitleHint: "(点击回看 · ✕ 移除)",
|
|
75684
|
-
historyFocusChipTitlePrefix: "
|
|
75720
|
+
historyFocusChipTitlePrefix: "发送时聚焦(路径可能已变):",
|
|
75685
75721
|
removeFocus: "移除此焦点",
|
|
75686
75722
|
sendHint: "Enter 发送 · Shift+Enter 换行",
|
|
75687
75723
|
sendTitle: "发送",
|
|
@@ -75905,7 +75941,7 @@ var B7 = {
|
|
|
75905
75941
|
copyThinkingTruncTitle: "Copy full reasoning (display truncated, copy gets all)",
|
|
75906
75942
|
focusChipTitlePrefix: "Focus:",
|
|
75907
75943
|
focusChipTitleHint: "(click to view · ✕ remove)",
|
|
75908
|
-
historyFocusChipTitlePrefix: "
|
|
75944
|
+
historyFocusChipTitlePrefix: "Focused at send (path may have changed): ",
|
|
75909
75945
|
removeFocus: "Remove this focus",
|
|
75910
75946
|
sendHint: "Enter to send · Shift+Enter for newline",
|
|
75911
75947
|
sendTitle: "Send",
|
|
@@ -76109,7 +76145,8 @@ function TPe(e = {}) {
|
|
|
76109
76145
|
onPersist: e.onPersist,
|
|
76110
76146
|
onClear: e.onClear,
|
|
76111
76147
|
onQueuedCleared: e.onQueuedCleared,
|
|
76112
|
-
onBeforeRegenerate: e.onBeforeRegenerate
|
|
76148
|
+
onBeforeRegenerate: e.onBeforeRegenerate,
|
|
76149
|
+
getFocuses: e.getFocuses
|
|
76113
76150
|
}), { state: r, sendMessage: i, removeQueuedTask: a, queuedTasks: o } = n, s = /* @__PURE__ */ Xq(""), c = /* @__PURE__ */ Xq(!0), l = () => {
|
|
76114
76151
|
c.value = !c.value;
|
|
76115
76152
|
}, u = /* @__PURE__ */ Xq(!1), d = () => {
|
|
@@ -86160,7 +86197,7 @@ var nze = { class: "msg-actions" }, rze = ["title"], ize = {
|
|
|
86160
86197
|
}, fze = { class: "message-content" }, pze = {
|
|
86161
86198
|
key: 2,
|
|
86162
86199
|
class: "msg-focuses"
|
|
86163
|
-
}, mze = ["title"
|
|
86200
|
+
}, mze = ["title"], hze = ["data-img-count"], gze = ["href", "title"], _ze = ["src", "alt"], vze = {
|
|
86164
86201
|
key: 1,
|
|
86165
86202
|
class: "msg-image-lost"
|
|
86166
86203
|
}, yze = /*#__PURE__*/ _9(/* @__PURE__ */ nY({
|
|
@@ -86225,8 +86262,7 @@ var nze = { class: "msg-actions" }, rze = ["title"], ize = {
|
|
|
86225
86262
|
e.message.role === "user" && (u = e.message.focuses) != null && u.length ? (X(), Z("div", pze, [(X(!0), Z(oX, null, gY(e.message.focuses, (e) => (X(), Z("span", {
|
|
86226
86263
|
key: e.path,
|
|
86227
86264
|
class: "msg-focus-chip",
|
|
86228
|
-
title: Y(n).messages.historyFocusChipTitlePrefix + e.path
|
|
86229
|
-
onClick: (t) => Y(n).focusChipClick(e)
|
|
86265
|
+
title: Y(n).messages.historyFocusChipTitlePrefix + e.path
|
|
86230
86266
|
}, [bX(v9, { icon: Y(n).icons.focus }, null, 8, ["icon"]), SX(" " + J(e.path), 1)], 8, mze))), 128))])) : $("", !0),
|
|
86231
86267
|
e.message.role === "user" && (d = e.message.images) != null && d.length ? (X(), Z("div", {
|
|
86232
86268
|
key: 3,
|
|
@@ -86272,7 +86308,7 @@ var nze = { class: "msg-actions" }, rze = ["title"], ize = {
|
|
|
86272
86308
|
])], 10, uze);
|
|
86273
86309
|
};
|
|
86274
86310
|
}
|
|
86275
|
-
}), [["__scopeId", "data-v-
|
|
86311
|
+
}), [["__scopeId", "data-v-053034ee"]]), bze = { class: "chat-body" }, xze = {
|
|
86276
86312
|
key: 0,
|
|
86277
86313
|
class: "empty-state"
|
|
86278
86314
|
}, Sze = { class: "empty-icon" }, Cze = {
|