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 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
- /** 最大遍历深度(默认 6) */maxDepth?: number;
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; /** 最大输出节点数(默认 220),超过后停止继续遍历。 */
214
- maxNodes?: number; /** 每个父节点最多输出的子元素数(默认 25),超出部分会折叠。 */
213
+ refStore?: RefStore; /** 最大输出节点数(默认 280),超过后停止继续遍历。 */
214
+ maxNodes?: number; /** 每个父节点最多输出的子元素数(默认 32),超出部分会折叠。 */
215
215
  maxChildren?: number; /** 文本截断长度(默认 40)。 */
216
216
  maxTextLength?: number;
217
217
  /**
@@ -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":"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"}
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 ?? 6;
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 ?? 220;
3037
- const maxChildren = opts.maxChildren ?? 25;
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 hasBoundEventsInSubtree(el, scanBudget = 180) {
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
- if (hasBoundEvents(current)) return true;
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 true;
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: 6)" })),
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: 220)" })),
3403
- maxChildren: Type.Optional(Type.Number({ description: "Maximum children per element (default: 25)" })),
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 ?? 6;
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 ?? 220;
3432
- const maxChildren = params.maxChildren ?? 25;
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;