agentpage 0.0.31 → 0.0.32
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/dist/index.d.mts +3 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +61 -20
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -192,7 +192,7 @@ declare class RefStore {
|
|
|
192
192
|
//#region src/web/tools/page-info-tool.d.ts
|
|
193
193
|
/** 快照配置选项 */
|
|
194
194
|
type SnapshotOptions = {
|
|
195
|
-
/** 最大遍历深度(默认
|
|
195
|
+
/** 最大遍历深度(默认 7) */maxDepth?: number;
|
|
196
196
|
/**
|
|
197
197
|
* 视口裁剪:只保留与视口相交的元素(默认 true)。
|
|
198
198
|
* 开启后,完全在视口外的元素会被跳过,大幅减少 token 消耗。
|
|
@@ -210,8 +210,8 @@ type SnapshotOptions = {
|
|
|
210
210
|
* 传入 RefStore 实例后,每个元素使用确定性 hash ID 替代完整 XPath,
|
|
211
211
|
* 大幅减少 token 消耗。dom-tool 通过 RefStore.get(id) 解析回 DOM 元素。
|
|
212
212
|
*/
|
|
213
|
-
refStore?: RefStore; /** 最大输出节点数(默认
|
|
214
|
-
maxNodes?: number; /** 每个父节点最多输出的子元素数(默认
|
|
213
|
+
refStore?: RefStore; /** 最大输出节点数(默认 280),超过后停止继续遍历。 */
|
|
214
|
+
maxNodes?: number; /** 每个父节点最多输出的子元素数(默认 32),超出部分会折叠。 */
|
|
215
215
|
maxChildren?: number; /** 文本截断长度(默认 40)。 */
|
|
216
216
|
maxTextLength?: number;
|
|
217
217
|
/**
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/tool-registry.ts","../src/core/types.ts","../src/core/agent-loop/types.ts","../src/web/ref-store.ts","../src/web/tools/page-info-tool.ts","../src/web/tools/dom-tool/index.ts","../src/web/tools/navigate-tool.ts","../src/web/tools/wait-tool.ts","../src/web/tools/evaluate-tool.ts","../src/web/messaging.ts","../src/web/index.ts"],"mappings":";;;;;;KA0BY,cAAA;EAuBV,qCArBA,OAAA,WAAkB,MAAA,mBAqBR;EAnBV,OAAA,GAAU,MAAA;AAAA;;;;;;ACfZ;;;KD0BY,cAAA;ECxBV,4CD0BA,IAAA,UCtBA;EDwBA,WAAA,UCxBK;ED0BL,MAAA,EAAQ,OAAA,ECpBW;EDsBnB,OAAA,GAAU,MAAA,EAAQ,MAAA,sBAA4B,OAAA,CAAQ,cAAA;AAAA;;;;KClC5C,UAAA;ED0BA,0BCxBV,EAAA;EAEA,IAAA,UD8BkB;EC5BlB,KAAA;AAAA;;KAMU,SAAA;EACV,IAAA,4CDiBA;ECfA,OAAA,WAAkB,KAAA;IAAQ,UAAA;IAAoB,MAAA;EAAA,IDmBpC;ECjBV,SAAA,GAAY,UAAA;AAAA;;KAMF,cAAA;iBAEV,IAAA;EAEA,SAAA,GAAY,UAAA,IA3BQ;EA6BpB,KAAA;IAAU,WAAA;IAAqB,YAAA;EAAA;AAAA;;;AAjBjC;;;KA2BY,QAAA;EACV,IAAA,CAAK,MAAA;IACH,YAAA;IACA,QAAA,EAAU,SAAA;IACV,KAAA,GAAQ,cAAA;EAAA,IACN,OAAA,CAAQ,cAAA;AAAA;;;;KCjDF,yBAAA;EFoBA,2BElBV,OAAA,YFkBgB;EEhBhB,SAAA,WF2BwB;EEzBxB,OAAA,WF+BQ;EE7BR,gBAAA;AAAA;AAAA,KAGU,gBAAA;EACV,UAAA;EACA,cAAA;EACA,mBAAA;EACA,eAAA;EACA,eAAA;EACA,aAAA;EACA,uBAAA;EACA,iBAAA;EACA,kBAAA;EACA,eAAA;EACA,eAAA;EACA,WAAA;EACA,YAAA;AAAA;;KAMU,kBAAA;EDzBA,mBC2BV,MAAA,IAAU,IAAA;EAEV,UAAA,IAAc,IAAA,UAAc,KAAA,oBD3B5B;EC6BA,YAAA,IAAgB,IAAA,UAAc,MAAA,EAAQ,cAAA,WDzBtC;EC2BA,OAAA,IAAW,KAAA;ED3BN;AAMP;;;;;;;EC8BE,wBAAA,IAA4B,MAAA,oBD3BkB;EC6B9C,SAAA,IAAa,OAAA,EAAS,gBAAA;AAAA;AAAA,KA4BZ,eAAA;EDhCV,iBCkCA,KAAA,UDhCE;ECkCF,SAAA,EAAW,KAAA;IAAQ,IAAA;IAAc,KAAA;IAAgB,MAAA,EAAQ,cAAA;EAAA,IDhC7C;ECkCZ,QAAA,EAAU,SAAA,IDlCgB;ECoC1B,OAAA,EAAS,gBAAA;AAAA;;;;;;AFrEX;;;;;;;;;;AAeA;;;;;;;;;;;;;;cGAa,QAAA;EAAA,QACH,GAAA;EHOsC;EAAA,QGLtC,MAAA;EHK4D;;;;cGCxD,GAAA;EFnCF;;;;;;;EE8CV,GAAA,CAAI,EAAA,EAAI,OAAA,EAAS,IAAA;EFxCZ;AAMP;;;EEkDE,GAAA,CAAI,EAAA,WAAa,OAAA;EFjDjB;EEsDA,GAAA,CAAI,EAAA;EFpDc;EEyDlB,MAAA,CAAO,EAAA;EFzDuC;;;;;AAQhD;;EE4DE,KAAA,CAAM,OAAA,GAAU,WAAA;EFxDM;EEsEtB,KAAA,CAAA;EFtEA;;;;;;;AAYF;EEsEE,KAAA,CAAM,GAAA;;MAQF,IAAA,CAAA;AAAA;;;;KC/GM,eAAA;EJKc,mBIHxB,QAAA;EJOgB;;;;;EIDhB,YAAA;EJCgB;AAWlB;;;;EINE,WAAA;EJcsD;;;;;EIRtD,QAAA,GAAW,QAAA,EJMX;EIJA,QAAA,WJMA;EIJA,WAAA,WJIU;EIFV,aAAA;EJEsD;;;;EIGtD,iBAAA;;AHrCF;;;EG0CE,kBAAA,aHxCA;EG0CA,qBAAA;AAAA;;;AHhCF;;;;;;;;;;;;;AAWA;;;;;iBG0GgB,gBAAA,CACd,IAAA,GAAM,OAAA,EACN,OAAA,GAAS,eAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/core/tool-registry.ts","../src/core/types.ts","../src/core/agent-loop/types.ts","../src/web/ref-store.ts","../src/web/tools/page-info-tool.ts","../src/web/tools/dom-tool/index.ts","../src/web/tools/navigate-tool.ts","../src/web/tools/wait-tool.ts","../src/web/tools/evaluate-tool.ts","../src/web/messaging.ts","../src/web/index.ts"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -308,6 +308,12 @@ function hasToolError(result) {
|
|
|
308
308
|
* - `pruneLayout=true` 时:无 id/无语义/无交互/无直接文本的布局容器会被“折叠”,
|
|
309
309
|
* 子节点直接提升输出,减少无意义层级;当同一折叠容器提升出多个相邻节点时,
|
|
310
310
|
* 快照会用括号分组块标记其关联来源(collapsed-group)。
|
|
311
|
+
* - 布局主干保留:浅层结构优先保留(避免页面主骨架被过早折叠导致业务区域缺失)。
|
|
312
|
+
* - 事件信号保留:节点自身存在事件绑定(inline/on* 或 addEventListener 追踪)时优先保留;
|
|
313
|
+
* 中浅层会做受预算约束的子树事件探测,尽量保留潜在可操作链路。
|
|
314
|
+
* - 语义文本保留:包含语义文本的容器优先保留,避免“有意义但非控件”信息被误删。
|
|
315
|
+
* - 噪音过滤:跳过 `svg` 等装饰节点及 `__SVG_SPRITE_NODE__` sprite 容器,
|
|
316
|
+
* 避免图标定义树挤占节点预算。
|
|
311
317
|
* - `maxNodes`:全局节点预算,超限后停止继续遍历并追加 truncation 提示。
|
|
312
318
|
* - `maxChildren`:每个父节点只保留前 N 个子元素,其余用 `... (n children omitted)` 汇总。
|
|
313
319
|
* - `maxTextLength`:节点文本按长度截断,避免长段文案占满上下文。
|
|
@@ -3030,11 +3036,11 @@ function sanitizeSnapshotAttrValue(value) {
|
|
|
3030
3036
|
*/
|
|
3031
3037
|
function generateSnapshot(root = document.body, options = {}) {
|
|
3032
3038
|
const opts = typeof options === "number" ? { maxDepth: options } : options;
|
|
3033
|
-
const maxDepth = opts.maxDepth ??
|
|
3039
|
+
const maxDepth = opts.maxDepth ?? 7;
|
|
3034
3040
|
const viewportOnly = opts.viewportOnly ?? true;
|
|
3035
3041
|
const pruneLayout = opts.pruneLayout ?? true;
|
|
3036
|
-
const maxNodes = opts.maxNodes ??
|
|
3037
|
-
const maxChildren = opts.maxChildren ??
|
|
3042
|
+
const maxNodes = opts.maxNodes ?? 280;
|
|
3043
|
+
const maxChildren = opts.maxChildren ?? 32;
|
|
3038
3044
|
const maxTextLength = opts.maxTextLength ?? 40;
|
|
3039
3045
|
const expandOptionLists = opts.expandOptionLists ?? false;
|
|
3040
3046
|
const expandedChildrenLimit = Math.min(MAX_EXPANDED_CHILDREN_LIMIT, Math.max(1, opts.expandedChildrenLimit ?? MAX_EXPANDED_LIST_CHILDREN));
|
|
@@ -3163,21 +3169,54 @@ function generateSnapshot(root = document.body, options = {}) {
|
|
|
3163
3169
|
return false;
|
|
3164
3170
|
}
|
|
3165
3171
|
/**
|
|
3166
|
-
*
|
|
3167
|
-
*
|
|
3168
|
-
* 说明:
|
|
3169
|
-
* - 该判定只用于“是否允许剪枝布局容器”。
|
|
3170
|
-
* - 命中扫描预算上限时保守返回 true,避免误剪导致交互目标丢失。
|
|
3172
|
+
* 轻量检测:当前容器浅层子树里是否出现事件绑定节点。
|
|
3173
|
+
* 仅用于是否保留布局容器,预算受控避免再次吞掉整页层级。
|
|
3171
3174
|
*/
|
|
3172
|
-
function
|
|
3175
|
+
function hasBoundEventsInShallowSubtree(el, scanBudget = 48, maxTreeDepth = 2) {
|
|
3176
|
+
const queue = Array.from(el.children).map((node) => ({
|
|
3177
|
+
node,
|
|
3178
|
+
depth: 1
|
|
3179
|
+
}));
|
|
3180
|
+
let scanned = 0;
|
|
3181
|
+
while (queue.length > 0) {
|
|
3182
|
+
const current = queue.shift();
|
|
3183
|
+
if (!current) continue;
|
|
3184
|
+
if (hasBoundEvents(current.node)) return true;
|
|
3185
|
+
scanned += 1;
|
|
3186
|
+
if (scanned >= scanBudget) return false;
|
|
3187
|
+
if (current.depth >= maxTreeDepth) continue;
|
|
3188
|
+
for (const child of Array.from(current.node.children)) queue.push({
|
|
3189
|
+
node: child,
|
|
3190
|
+
depth: current.depth + 1
|
|
3191
|
+
});
|
|
3192
|
+
}
|
|
3193
|
+
return false;
|
|
3194
|
+
}
|
|
3195
|
+
/** 判断文本是否具有语义信息(过滤纯符号/超短噪音)。 */
|
|
3196
|
+
function isSemanticText(text) {
|
|
3197
|
+
const normalized = text.replace(/\s+/g, "").trim();
|
|
3198
|
+
if (!normalized) return false;
|
|
3199
|
+
if (normalized.length < 2) return false;
|
|
3200
|
+
return /[\p{Script=Han}A-Za-z0-9]/u.test(normalized);
|
|
3201
|
+
}
|
|
3202
|
+
/** 在子树内查找语义文本(浅层限流,避免额外大开销)。 */
|
|
3203
|
+
function hasSemanticTextInSubtree(el, scanBudget = 180) {
|
|
3173
3204
|
const stack = Array.from(el.children);
|
|
3174
3205
|
let scanned = 0;
|
|
3175
3206
|
while (stack.length > 0) {
|
|
3176
3207
|
const current = stack.pop();
|
|
3177
3208
|
if (!current) continue;
|
|
3178
|
-
|
|
3209
|
+
let directText = "";
|
|
3210
|
+
for (let i = 0; i < current.childNodes.length; i++) {
|
|
3211
|
+
const node = current.childNodes[i];
|
|
3212
|
+
if (node.nodeType === Node.TEXT_NODE) {
|
|
3213
|
+
const t = node.textContent?.trim();
|
|
3214
|
+
if (t) directText += t + " ";
|
|
3215
|
+
}
|
|
3216
|
+
}
|
|
3217
|
+
if (isSemanticText(directText.trim())) return true;
|
|
3179
3218
|
scanned += 1;
|
|
3180
|
-
if (scanned >= scanBudget) return
|
|
3219
|
+
if (scanned >= scanBudget) return false;
|
|
3181
3220
|
const children = Array.from(current.children);
|
|
3182
3221
|
for (let i = children.length - 1; i >= 0; i--) stack.push(children[i]);
|
|
3183
3222
|
}
|
|
@@ -3191,14 +3230,16 @@ function generateSnapshot(root = document.body, options = {}) {
|
|
|
3191
3230
|
* 3. 没有交互属性(href/role/aria-label/onclick 等)
|
|
3192
3231
|
* 4. 没有直接文本内容
|
|
3193
3232
|
*/
|
|
3194
|
-
function isEmptyLayoutContainer(el, directText) {
|
|
3233
|
+
function isEmptyLayoutContainer(el, directText, depth) {
|
|
3195
3234
|
if (!pruneLayout) return false;
|
|
3235
|
+
if (depth <= 2) return false;
|
|
3196
3236
|
if (!LAYOUT_TAGS.has(getTagKey(el))) return false;
|
|
3197
3237
|
if (el.getAttribute("id")) return false;
|
|
3198
3238
|
if (el.getAttribute("role") || el.getAttribute("aria-label")) return false;
|
|
3199
3239
|
if (hasBoundEvents(el)) return false;
|
|
3240
|
+
if (depth <= 4 && hasBoundEventsInShallowSubtree(el)) return false;
|
|
3241
|
+
if (isSemanticText(directText) || hasSemanticTextInSubtree(el)) return false;
|
|
3200
3242
|
if (directText) return false;
|
|
3201
|
-
if (hasBoundEventsInSubtree(el)) return false;
|
|
3202
3243
|
return true;
|
|
3203
3244
|
}
|
|
3204
3245
|
function hasInteractiveTrackedEvents(el) {
|
|
@@ -3306,7 +3347,7 @@ function generateSnapshot(root = document.body, options = {}) {
|
|
|
3306
3347
|
}
|
|
3307
3348
|
}
|
|
3308
3349
|
directText = directText.trim();
|
|
3309
|
-
if (isEmptyLayoutContainer(el, directText)) {
|
|
3350
|
+
if (isEmptyLayoutContainer(el, directText, depth)) {
|
|
3310
3351
|
const allChildren = Array.from(el.children);
|
|
3311
3352
|
const interactiveChildren = allChildren.filter(isInteractiveElement);
|
|
3312
3353
|
const nonInteractiveChildren = allChildren.filter((child) => !isInteractiveElement(child));
|
|
@@ -3396,11 +3437,11 @@ function createPageInfoTool() {
|
|
|
3396
3437
|
schema: Type.Object({
|
|
3397
3438
|
action: Type.String({ description: "Info action: get_url | get_title | get_selection | get_viewport | snapshot | query_all" }),
|
|
3398
3439
|
selector: Type.Optional(Type.String({ description: "CSS selector for query_all action" })),
|
|
3399
|
-
maxDepth: Type.Optional(Type.Number({ description: "Max depth for snapshot (default:
|
|
3440
|
+
maxDepth: Type.Optional(Type.Number({ description: "Max depth for snapshot (default: 7)" })),
|
|
3400
3441
|
viewportOnly: Type.Optional(Type.Boolean({ description: "Only snapshot elements visible in viewport (default: true)" })),
|
|
3401
3442
|
pruneLayout: Type.Optional(Type.Boolean({ description: "Collapse empty layout containers like div/span (default: true)" })),
|
|
3402
|
-
maxNodes: Type.Optional(Type.Number({ description: "Maximum nodes to include in snapshot (default:
|
|
3403
|
-
maxChildren: Type.Optional(Type.Number({ description: "Maximum children per element (default:
|
|
3443
|
+
maxNodes: Type.Optional(Type.Number({ description: "Maximum nodes to include in snapshot (default: 280)" })),
|
|
3444
|
+
maxChildren: Type.Optional(Type.Number({ description: "Maximum children per element (default: 32)" })),
|
|
3404
3445
|
maxTextLength: Type.Optional(Type.Number({ description: "Maximum text length per node (default: 40)" })),
|
|
3405
3446
|
expandOptionLists: Type.Optional(Type.Boolean({ description: "Expand option-list containers to avoid child truncation (default: false)" })),
|
|
3406
3447
|
expandChildrenRefs: Type.Optional(Type.Array(Type.String({ description: "Hash refs to expand child truncation for (e.g. #abc123)" }))),
|
|
@@ -3425,11 +3466,11 @@ function createPageInfoTool() {
|
|
|
3425
3466
|
return { content: JSON.stringify(info, null, 2) };
|
|
3426
3467
|
}
|
|
3427
3468
|
case "snapshot": {
|
|
3428
|
-
const maxDepth = params.maxDepth ??
|
|
3469
|
+
const maxDepth = params.maxDepth ?? 7;
|
|
3429
3470
|
const viewportOnly = params.viewportOnly ?? true;
|
|
3430
3471
|
const pruneLayout = params.pruneLayout ?? true;
|
|
3431
|
-
const maxNodes = params.maxNodes ??
|
|
3432
|
-
const maxChildren = params.maxChildren ??
|
|
3472
|
+
const maxNodes = params.maxNodes ?? 280;
|
|
3473
|
+
const maxChildren = params.maxChildren ?? 32;
|
|
3433
3474
|
const maxTextLength = params.maxTextLength ?? 40;
|
|
3434
3475
|
const expandOptionLists = params.expandOptionLists ?? false;
|
|
3435
3476
|
const expandChildrenRefs = Array.isArray(params.expandChildrenRefs) ? params.expandChildrenRefs.filter((ref) => typeof ref === "string") : void 0;
|