agentpage 0.0.29 → 0.0.30

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.
@@ -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":";;;;;;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,iBAudK,kBAAA,CAAA,GAAsB,cAAA;;;iBCljBtB,aAAA,CAAA,GAAiB,cAAA;;;iBC7BjB,kBAAA,CAAA,GAAsB,cAAA;;;iBCuMtB,cAAA,CAAA,GAAkB,cAAA;;;iBC/JlB,kBAAA,CAAA,GAAsB,cAAA;;;;;;ARxCtC;;;;;;;;;;AAeA;;;;;;;;;;;;;;KSXY,eAAA;EACV,IAAA;EACA,QAAA;EACA,MAAA,EAAQ,MAAA;EACR,MAAA;AAAA;;KAIU,gBAAA;EACV,IAAA;EACA,MAAA;EACA,MAAA;IACE,OAAA,WAAkB,MAAA;IAClB,OAAA,GAAU,MAAA;EAAA;AAAA;;;;ARhBd;;;;;iBQ8BgB,mBAAA,CAAA,IAEZ,QAAA,UACA,MAAA,EAAQ,MAAA,sBACP,OAAA;EAAU,OAAA,WAAkB,MAAA;EAAyB,OAAA,GAAU,MAAA;AAAA;;KAgCxD,eAAA,GAAkB,GAAA,UAE3B,MAAA,EAAQ,MAAA,sBAA4B,OAAA;EACnC,OAAA,WAAkB,MAAA;EAClB,OAAA,GAAU,MAAA;AAAA;;;;;;;;;iBAYE,mBAAA,CAAoB,SAAA,EAAW,eAAA;;;;KCrDnC,iBAAA,GAAoB,kBAAA;oBAE9B,UAAA,IAAc,QAAA;AAAA;AAAA,KAKJ,eAAA;EThDU;;;;;;AAYtB;;;;;ESgDE,MAAA,GAAS,QAAA,ET7CS;ES+ClB,KAAA,WT/C8C;ESiD9C,QAAA,WT/CY;ESiDZ,KAAA,WTjDsB;ESmDtB,OAAA,WT7CwB;ES+CxB,MAAA,YT3CsB;ES6CtB,MAAA;ET7CA;;;;;ESmDA,YAAA,YAAwB,MAAA,kBTjDmB;ESmD3C,SAAA,WTzCkB;ES2ClB,MAAA,YTxCY;ES0CZ,YAAA,YTxCY;ES0CZ,eAAA,GAAkB,eAAA,ET1CP;ES4CX,kBAAA,GAAqB,yBAAA;AAAA;AAAA,cAKV,QAAA;ETnDT;EAAA,wBSqDsB,yBAAA;ETpDtB;EAAA,wBSsDsB,kBAAA;ETzDnB;EAAA,QS4DG,MAAA;EAAA,QACA,KAAA;EAAA,QACA,QAAA;EAAA,QACA,KAAA;EAAA,QACA,OAAA;EAAA,QACA,MAAA;EAAA,QACA,MAAA;EAAA,QACA,SAAA;ERhH2B;EAAA,QQkH3B,oBAAA;ERlH2B;EAAA,QQoH3B,kBAAA;ERhHR;EAAA,QQmHQ,MAAA;ER/GR;EAAA,QQiHQ,OAAA;ERjHQ;EAAA,QQmHR,YAAA;ERhHkB;EAAA,QQkHlB,eAAA;ERlHkB;EAAA,QQoHlB,kBAAA;ERlHR;EAAA,QQqHQ,QAAA;ERnHR;EQsHA,SAAA,EAAW,iBAAA;cAEC,OAAA,EAAS,eAAA;ERrHrB;EQ6IA,aAAA,CAAA;ER3IA;EQwJA,YAAA,CAAa,IAAA,EAAM,cAAA;ERtJnB;;;;;EQ+JA,UAAA,CAAW,IAAA;ERvJiB;EQ6J5B,OAAA,CAAQ,IAAA;ER1I8B;EQ+ItC,YAAA,CAAA;ERhKU;;;;EQwKV,gBAAA,CAAA;ERpKgB;EQgLhB,QAAA,CAAA,GAAY,cAAA;ERhLkB;EQuL9B,QAAA,CAAS,KAAA;ERrLE;;;;;;EQ+LX,SAAA,CAAU,MAAA,EAAQ,QAAA;ERpLoB;EQyLtC,WAAA,CAAY,QAAA;ER7Ja;EQkKzB,QAAA,CAAS,KAAA;ER9JgD;EQmKzD,SAAA,CAAU,OAAA;ERjKA;EQsKV,SAAA,CAAA;ERpKyB;EQyKzB,SAAA,CAAU,OAAA;ER/KV;;;;;EQwLA,eAAA,CAAgB,MAAA;EAChB,eAAA,CAAgB,GAAA,UAAa,MAAA;ERrL7B;EQoMA,gBAAA,CAAiB,OAAA,EAAS,MAAA;ERlM1B;EQyMA,kBAAA,CAAmB,GAAA;ERzMM;EQ8MzB,oBAAA,CAAqB,GAAA;;EASrB,gBAAA,CAAA,GAAoB,MAAA;;EAKpB,kBAAA,CAAA;EPlRmB;EOuRnB,SAAA,CAAU,OAAA;EPnQF;EOyQR,SAAA,CAAA;EPpOgB;EOyOhB,eAAA,CAAgB,OAAA;EPzOW;EO8O3B,eAAA,CAAA;EPpSQ;EOySR,kBAAA,CAAmB,OAAA,EAAS,eAAA;EPnShB;EOwSZ,kBAAA,CAAA,GAAsB,eAAA;EP7Rd;EOkSR,YAAA,CAAA;EPlSiB;;;;;;;;;EOiTX,IAAA,CAAK,OAAA,WAAkB,OAAA,CAAQ,eAAA;EP5Q/B;;;;;EAAA,QOqWE,mBAAA;AAAA"}
package/dist/index.mjs CHANGED
@@ -2353,6 +2353,30 @@ function resolvePointerActionTarget(el) {
2353
2353
  return el;
2354
2354
  }
2355
2355
  /**
2356
+ * 点击目标上卷:当命中文本/装饰子节点时,优先上卷到最近可点击祖先。
2357
+ *
2358
+ * 典型场景:
2359
+ * - 列表项文本本身无 click,但父级容器(如 .g-pointer)有点击语义
2360
+ * - 事件委托绑定在祖先,子节点点击命中不稳定
2361
+ */
2362
+ function resolveClickableAncestorTarget(el) {
2363
+ const isSelfClickable = (node) => {
2364
+ if (node.matches("a, button, input, textarea, select, summary, [role=button], [role=link], [role=menuitem]")) return true;
2365
+ if (node.hasAttribute("onclick")) return true;
2366
+ const tabIndexAttr = node.getAttribute("tabindex");
2367
+ if (tabIndexAttr !== null && tabIndexAttr !== "-1") return true;
2368
+ if (getTrackedElementEvents(node).some((name) => name === "click" || name === "pointerdown" || name === "mousedown")) return true;
2369
+ return false;
2370
+ };
2371
+ if (isSelfClickable(el)) return el;
2372
+ let ancestor = el.parentElement;
2373
+ for (let depth = 0; ancestor && depth < 6; depth++, ancestor = ancestor.parentElement) {
2374
+ if (!isElementVisible(ancestor)) continue;
2375
+ if (isSelfClickable(ancestor)) return ancestor;
2376
+ }
2377
+ return el;
2378
+ }
2379
+ /**
2356
2380
  * 当命中表单项说明 label(如 Element Plus el-form-item__label)时,
2357
2381
  * 自动重定向到同一表单项中的首个可交互控件。
2358
2382
  */
@@ -2519,13 +2543,13 @@ function createDomTool() {
2519
2543
  "type",
2520
2544
  "clear"
2521
2545
  ].includes(action)) el = resolveEditableTarget(retarget(el, "follow-label"));
2522
- const actionabilityTarget = action === "click" || action === "check" || action === "uncheck" ? resolvePointerActionTarget(resolveFormItemControlTarget(el)) : el;
2546
+ const actionabilityTarget = action === "click" || action === "check" || action === "uncheck" ? resolvePointerActionTarget(resolveClickableAncestorTarget(resolveFormItemControlTarget(el))) : el;
2523
2547
  try {
2524
2548
  const checkResult = ensureActionable(actionabilityTarget, action, selector, force);
2525
2549
  if (checkResult) return checkResult;
2526
2550
  switch (action) {
2527
2551
  case "click": {
2528
- const target = resolvePointerActionTarget(resolveFormItemControlTarget(retarget(el, force ? "none" : "button-link")));
2552
+ const target = resolvePointerActionTarget(resolveClickableAncestorTarget(resolveFormItemControlTarget(retarget(el, force ? "none" : "button-link"))));
2529
2553
  const clickCount = typeof params.clickCount === "number" ? params.clickCount : 1;
2530
2554
  if (target instanceof HTMLOptionElement) {
2531
2555
  const parent = target.parentElement;
@@ -3053,6 +3077,7 @@ function generateSnapshot(root = document.body, options = {}) {
3053
3077
  "value",
3054
3078
  "name",
3055
3079
  "role",
3080
+ "tabindex",
3056
3081
  "aria-label",
3057
3082
  "aria-valuenow",
3058
3083
  "aria-valuemin",
@@ -3127,6 +3152,37 @@ function generateSnapshot(root = document.body, options = {}) {
3127
3152
  if (rect.width === 0 && rect.height === 0) return false;
3128
3153
  return true;
3129
3154
  }
3155
+ /** 统一标签名键值(HTML/SVG 在不同环境可能大小写不一致)。 */
3156
+ function getTagKey(el) {
3157
+ return (el.tagName || "").toUpperCase();
3158
+ }
3159
+ /** 判断元素是否存在绑定事件(inline 或 addEventListener 追踪)。 */
3160
+ function hasBoundEvents(el) {
3161
+ if (hasTrackedElementEvents(el)) return true;
3162
+ for (const attr of Array.from(el.attributes)) if (attr.name.startsWith("on")) return true;
3163
+ return false;
3164
+ }
3165
+ /**
3166
+ * 判断子树内是否存在绑定事件元素。
3167
+ *
3168
+ * 说明:
3169
+ * - 该判定只用于“是否允许剪枝布局容器”。
3170
+ * - 命中扫描预算上限时保守返回 true,避免误剪导致交互目标丢失。
3171
+ */
3172
+ function hasBoundEventsInSubtree(el, scanBudget = 180) {
3173
+ const stack = Array.from(el.children);
3174
+ let scanned = 0;
3175
+ while (stack.length > 0) {
3176
+ const current = stack.pop();
3177
+ if (!current) continue;
3178
+ if (hasBoundEvents(current)) return true;
3179
+ scanned += 1;
3180
+ if (scanned >= scanBudget) return true;
3181
+ const children = Array.from(current.children);
3182
+ for (let i = children.length - 1; i >= 0; i--) stack.push(children[i]);
3183
+ }
3184
+ return false;
3185
+ }
3130
3186
  /**
3131
3187
  * 判断元素是否为「无意义布局容器」(智能剪枝候选)。
3132
3188
  * 满足所有条件时返回 true:
@@ -3137,12 +3193,12 @@ function generateSnapshot(root = document.body, options = {}) {
3137
3193
  */
3138
3194
  function isEmptyLayoutContainer(el, directText) {
3139
3195
  if (!pruneLayout) return false;
3140
- if (!LAYOUT_TAGS.has(el.tagName)) return false;
3196
+ if (!LAYOUT_TAGS.has(getTagKey(el))) return false;
3141
3197
  if (el.getAttribute("id")) return false;
3142
3198
  if (el.getAttribute("role") || el.getAttribute("aria-label")) return false;
3143
- for (const attr of Array.from(el.attributes)) if (attr.name.startsWith("on")) return false;
3144
- if (hasTrackedElementEvents(el)) return false;
3199
+ if (hasBoundEvents(el)) return false;
3145
3200
  if (directText) return false;
3201
+ if (hasBoundEventsInSubtree(el)) return false;
3146
3202
  return true;
3147
3203
  }
3148
3204
  function hasInteractiveTrackedEvents(el) {
@@ -3151,7 +3207,7 @@ function generateSnapshot(root = document.body, options = {}) {
3151
3207
  return trackedEvents.some((eventName) => INTERACTIVE_EVENTS.has(eventName));
3152
3208
  }
3153
3209
  function isInteractiveElement(el) {
3154
- if (INTERACTIVE_TAGS.has(el.tagName)) return true;
3210
+ if (INTERACTIVE_TAGS.has(getTagKey(el))) return true;
3155
3211
  if (el.hasAttribute("onclick")) return true;
3156
3212
  if (el.hasAttribute("role")) return true;
3157
3213
  if (el.hasAttribute("tabindex")) return true;
@@ -3185,7 +3241,9 @@ function generateSnapshot(root = document.body, options = {}) {
3185
3241
  return "";
3186
3242
  }
3187
3243
  if (depth > maxDepth) return "";
3188
- if (SKIP_TAGS.has(el.tagName)) return "";
3244
+ const tagKey = getTagKey(el);
3245
+ if (SKIP_TAGS.has(tagKey)) return "";
3246
+ if (el.getAttribute("id") === "__SVG_SPRITE_NODE__") return "";
3189
3247
  if (el.hasAttribute("data-autopilot-ignore")) return "";
3190
3248
  const style = window.getComputedStyle(el);
3191
3249
  if (style.display === "none" || style.visibility === "hidden") return "";