agentpage 0.0.32 → 0.0.33

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 CHANGED
@@ -1,9 +1,5 @@
1
1
  # AutoPilot
2
2
 
3
- <p align="center">
4
- <img src="./assets/logo/contours%20(2).svg" alt="AutoPilot Logo" width="180" />
5
- </p>
6
-
7
3
  > 浏览器内嵌 AI Agent SDK:让 AI 通过 tool-calling 操作网页。
8
4
 
9
5
  > 核心主张:通过 **Prompt + Tools + 路由**,快速为网站实现 AI 赋能,并构建**前端运行时 AI Skill**。AutoPilot 本质上是一个运行在前端浏览器中的 AI Agent。
@@ -177,23 +173,6 @@ console.log(result.reply);
177
173
  pnpm demo
178
174
  ```
179
175
 
180
- ### Demo Prompt 建议(Element Plus)
181
-
182
- 在 `demo/App.vue` 中,推荐为 Demo 场景单独注册一条 prompt(key: `demo`),以减少无效调用和重复验证:
183
-
184
- ```ts
185
- agent.setSystemPrompt("demo", [
186
- "You are operating the Element Plus demo page.",
187
- "Prefer minimal action arrays and complete independent visible actions in one round.",
188
- "Do not repeat verification calls unless the user explicitly asks for verification.",
189
- ].join(" "));
190
- ```
191
-
192
- 这三条规则分别约束:
193
- - 最小化动作数组,减少冗余工具调用。
194
- - 同一轮优先完成当前可见且彼此独立的动作,提升收敛速度。
195
- - 非用户明确要求时,不重复做验证型调用,避免空转。
196
-
197
176
  ### 按路由构建 AI Skill(推荐范式)
198
177
 
199
178
  ```ts
@@ -259,7 +238,6 @@ applyRouteSkill(location.pathname);
259
238
  | `memory` | `boolean` | `false` | 是否开启多轮对话记忆(跨 chat 调用保留历史消息) |
260
239
  | `autoSnapshot` | `boolean` | `true` | chat 前是否自动生成首轮页面快照并注入 system prompt |
261
240
  | `snapshotOptions` | `SnapshotOptions` | `{}` | 快照生成参数覆盖(深度、裁剪、剪枝、节点上限等) |
262
- | `roundStabilityWait` | `RoundStabilityWaitOptions` | `{ enabled: true }` | 轮次后稳定等待配置(loading hidden + DOM stable);`loadingSelectors` 为“与默认值合并去重”,不会覆盖默认列表 |
263
241
 
264
242
  ### 参数详细说明
265
243
 
@@ -380,33 +358,14 @@ agent.clearHistory(); // 手动清空历史
380
358
 
381
359
  | 参数 | 类型 | 默认值 | 说明 |
382
360
  | --- | --- | --- | --- |
383
- | `maxDepth` | `number` | `8`(chat 首轮)/ `7`(page_info.snapshot) | DOM 最大遍历深度,超过该深度的子树不会输出 |
361
+ | `maxDepth` | `number` | `8`(chat 首轮)/ `6`(page_info.snapshot) | DOM 最大遍历深度,超过该深度的子树不会输出 |
384
362
  | `viewportOnly` | `boolean` | `false`(chat 首轮)/ `true`(page_info.snapshot) | 是否仅保留与视口相交的元素 |
385
363
  | `pruneLayout` | `boolean` | `true` | 是否折叠无意义纯布局容器(div/span/section 等) |
386
- | `maxNodes` | `number` | `500`(chat 首轮)/ `280`(page_info.snapshot) | 快照最大节点输出数量,超出后停止遍历并追加截断提示 |
387
- | `maxChildren` | `number` | `30`(chat 首轮)/ `32`(page_info.snapshot) | 每个父节点最多保留的子元素数量 |
364
+ | `maxNodes` | `number` | `500`(chat 首轮)/ `220`(page_info.snapshot) | 快照最大节点输出数量,超出后停止遍历并追加截断提示 |
365
+ | `maxChildren` | `number` | `30`(chat 首轮)/ `25`(page_info.snapshot) | 每个父节点最多保留的子元素数量 |
388
366
  | `maxTextLength` | `number` | `40` | 单节点文本截断长度(字符数) |
389
367
  | `refStore` | `RefStore` | 自动创建 | hash ID 映射表(一般无需手动传入,WebAgent 自动管理) |
390
368
 
391
- ### 全局事件监听追踪(默认开启)
392
-
393
- 从 `0.0.26` 开始,`web` 入口会在模块加载时默认安装全局监听追踪补丁:
394
-
395
- - 劫持 `EventTarget.prototype.addEventListener/removeEventListener`
396
- - 先执行原生调用,再记录事件(不阻断业务逻辑)
397
- - 仅记录 `Element` 目标,使用 `WeakMap<Element, Set<string>>`
398
-
399
- 快照侧联动:
400
-
401
- - `page_info.snapshot` 会为命中事件追踪的元素输出 `listeners="click,input,..."`
402
- - 交互优先级识别会把运行时监听事件纳入判断(不仅依赖 `onclick/role` 等静态属性)
403
- - 智能剪枝会优先保留“自身有事件绑定”的容器,并在中浅层对子树事件做受预算探测,尽量保留可操作链路
404
-
405
- 边界说明:
406
-
407
- - 事件委托场景只能记录到父容器(这是浏览器事件机制本身决定的)
408
- - 补丁安装前已绑定的历史监听不会被回溯记录;建议尽早初始化 `WebAgent`
409
-
410
369
  ### 快照参数详细说明
411
370
 
412
371
  #### `maxDepth`(遍历深度)
@@ -442,10 +401,6 @@ agent.clearHistory(); // 手动清空历史
442
401
 
443
402
  折叠规则:
444
403
  - 没有 `id`、没有语义标签(如 `main`/`nav`)、没有交互属性、没有直接文本的纯布局div/span
445
- - 浅层布局主干默认保留(避免页面主结构被过早折叠)
446
- - 自身有事件绑定(`on*` 或追踪到 listeners)的容器优先保留
447
- - 中浅层子树出现事件绑定时,在预算范围内尽量保留相关容器
448
- - `svg` 装饰节点与 `__SVG_SPRITE_NODE__` sprite 容器会被过滤,避免噪音吞掉节点预算
449
404
  - 子节点直接**提升**输出到父级位置
450
405
  - 当同一折叠容器提升出多个相邻节点时,用 `collapsed-group` 括号块标记它们的来源关联
451
406
 
@@ -469,7 +424,7 @@ agent.clearHistory(); // 手动清空历史
469
424
  | --- | --- | --- | --- | --- | --- |
470
425
  | `chat()` 首轮 | 8 | false | 500 | 30 | 优先完整性,提供充足的页面上下文 |
471
426
  | `page_info.snapshot`(loop 内) | 8 | false | 500 | 30 | 与首轮对齐,保证一致性 |
472
- | `page_info.snapshot`(手动调用) | 7 | true | 280 | 32 | 略放宽额度,兼顾结构完整与可操作性 |
427
+ | `page_info.snapshot`(手动调用) | 6 | true | 220 | 25 | 较小体积,适合局部更新 |
473
428
 
474
429
  ---
475
430
 
@@ -749,7 +704,7 @@ AutoPilot 内置 5 个工具,覆盖浏览器交互的核心能力。所有工
749
704
  | `attribute` | `string` | get_attr/set_attr | 属性名称 |
750
705
  | `className` | `string` | add_class/remove_class | CSS 类名(旧参数名,已被 `value` 兼容) |
751
706
  | `clickCount` | `number` | click | 点击次数(默认 1,双击传 2,三击传 3) |
752
- | `waitMs` | `number` | 所有动作 | 等待元素出现的超时时间(毫秒,默认 1200) |
707
+ | `waitMs` | `number` | 所有动作 | 等待元素出现的超时时间(毫秒,默认 2000) |
753
708
  | `waitSeconds` | `number` | 所有动作 | 等待超时(秒,`waitMs` 优先级更高) |
754
709
  | `force` | `boolean` | 所有动作 | 跳过 actionability 检查(默认 false) |
755
710
 
@@ -859,7 +814,7 @@ AutoPilot 内置 5 个工具,覆盖浏览器交互的核心能力。所有工
859
814
  | `selector` | `string` | wait_for_selector/hidden | 目标元素选择器 |
860
815
  | `state` | `string` | wait_for_selector | 目标状态:`attached`/`visible`/`hidden`/`detached` |
861
816
  | `text` | `string` | wait_for_text | 要等待出现的文本内容 |
862
- | `timeout` | `number` | 所有动作 | 超时时间(毫秒,默认 6000) |
817
+ | `timeout` | `number` | 所有动作 | 超时时间(毫秒,默认 10000) |
863
818
  | `quietMs` | `number` | wait_for_stable | DOM 静默窗口时长(毫秒,默认 300) |
864
819
 
865
820
  **动作详解:**
@@ -1011,7 +966,6 @@ src/
1011
966
  │ └── sse.ts
1012
967
  └── web/
1013
968
  ├── index.ts
1014
- ├── event-listener-tracker.ts # 全局事件监听追踪(WeakMap<Element, Set<string>>)
1015
969
  ├── dom-tool.ts # 兼容转发层(re-export)
1016
970
  ├── navigate-tool.ts # 兼容转发层(re-export)
1017
971
  ├── page-info-tool.ts # 兼容转发层(re-export)
@@ -1020,14 +974,7 @@ src/
1020
974
  ├── ref-store.ts
1021
975
  ├── messaging.ts
1022
976
  └── tools/
1023
- ├── dom-tool/
1024
- │ ├── index.ts # createDomTool 入口 + schema + execute 路由
1025
- │ ├── constants.ts # 常量(DEFAULT_WAIT_MS, KEY_CODE_MAP 等)
1026
- │ ├── query.ts # 元素查找、RefStore 管理、describeElement
1027
- │ ├── actionability.ts # 可操作性检查(可见/禁用/可编辑/稳定/命中)
1028
- │ ├── events.ts # 事件派发(click/hover/input 链、键盘 press)
1029
- │ ├── resolve.ts # 目标解析(retarget、checkable/editable 穿透、ARIA widget→input 穿透)
1030
- │ └── dropdown.ts # 自定义下拉增强(findVisibleOptionByText)
977
+ ├── dom-tool.ts
1031
978
  ├── navigate-tool.ts
1032
979
  ├── page-info-tool.ts
1033
980
  ├── wait-tool.ts
@@ -1089,8 +1036,6 @@ AI 每一轮不是“凭记忆猜页面”,而是基于最新快照选择可
1089
1036
  例子:
1090
1037
  - 可同轮:同时填写两个已可见输入框
1091
1038
  - 不可同轮:点击“打开弹窗”后立即填写弹窗字段(应等下一轮新快照)
1092
- - 当前实现:若本轮出现潜在 DOM 变化动作,轮次结束会自动执行双重等待(先 loading hidden,再 DOM quiet window),默认 `quietMs=200`、`timeoutMs=4000`。
1093
- - `loadingSelectors` 默认内置 AntD / Element Plus / BK / TDesign(TD)及通用加载态选择器;用户自定义会在默认列表基础上追加并去重,不会覆盖默认值。
1094
1039
 
1095
1040
  ---
1096
1041
 
@@ -1140,13 +1085,12 @@ loop 对本轮返回做以下处理:
1140
1085
  1. 执行工具调用批次
1141
1086
  2. 拦截 `page_info.*`(在 loop 内视为冗余,不让其成为主流程)
1142
1087
  3. 处理恢复(元素找不到时自动刷新快照)
1143
- 4. 若本轮存在潜在 DOM 变化动作:执行轮次后稳定等待(loading hidden + DOM stable)
1144
- 5. 刷新快照进入下一轮
1145
- 6. 更新下一轮任务文本:
1088
+ 4. 刷新快照进入下一轮
1089
+ 5. 更新下一轮任务文本:
1146
1090
  - 优先使用 `REMAINING`
1147
- - 若缺失 `REMAINING` 且本轮有执行动作:仅在存在明确顺序连接词(如 `然后`/`next`/`->`)时,保守地启发式推进一步
1091
+ - 若缺失 `REMAINING` 且本轮有执行动作:按线性任务剔除做启发式推进(避免整段原任务重复)
1148
1092
  - 若缺失 `REMAINING` 且本轮无执行进展:保持当前任务不推进(按协议回退)
1149
- 7. 若“remaining 未完成 + 无工具调用”:
1093
+ 6. 若“remaining 未完成 + 无工具调用”:
1150
1094
  - 不直接结束
1151
1095
  - 下一轮注入 `Protocol violation` 强约束提示,要求“要么给可执行工具调用,要么严格 `REMAINING: DONE`”
1152
1096
 
@@ -1157,12 +1101,12 @@ loop 对本轮返回做以下处理:
1157
1101
  1. 收集失败工具调用(name/input)及失败原因
1158
1102
  2. 将“失败工具集合 + 最新快照 + 当前任务”一起发给模型重试
1159
1103
  3. 在消息中标注重试次数:`attempt x/y`
1160
- 4. 若仍未命中,默认 `await 1000ms` 后刷新快照再重试
1104
+ 4. 若仍未命中,默认 `await 2000ms` 后刷新快照再重试
1161
1105
  5. 超过最大尝试次数后退出重试流,交由模型给出剩余任务或结束
1162
1106
 
1163
1107
  默认参数:
1164
1108
  - `DEFAULT_NOT_FOUND_RETRY_ROUNDS = 2`
1165
- - `DEFAULT_NOT_FOUND_RETRY_WAIT_MS = 1000`
1109
+ - `DEFAULT_NOT_FOUND_RETRY_WAIT_MS = 2000`
1166
1110
 
1167
1111
  ### 4) 停机条件
1168
1112
 
@@ -1173,8 +1117,6 @@ loop 对本轮返回做以下处理:
1173
1117
 
1174
1118
  ### 5) 线性任务剔除示例(标准范式)
1175
1119
 
1176
- 注意:该示例仅适用于任务文本中包含明确顺序连接词的场景(例如 `然后`、`next`、`->`)。
1177
-
1178
1120
  总任务:`点击按钮 -> 输入框输入 "abc" -> 发送`
1179
1121
 
1180
1122
  - 第 1 轮
@@ -1203,13 +1145,13 @@ loop 对本轮返回做以下处理:
1203
1145
 
1204
1146
  ### A. System Prompt(全局规则层)
1205
1147
 
1206
- 由 `src/core/system-prompt.ts` 生成,采用 Decision Framework 架构:
1148
+ 由 `src/core/system-prompt.ts` 生成,职责是定义不可变执行约束:
1207
1149
 
1208
- - 五阶段决策流:ANALYZE → ASSESS → CHOOSE → EXECUTE → OUTPUT
1209
- - Targeting Rules:hash selector 优先、ordinal 1-based 视觉序
1210
- - Constraints:form-input 顺序、DOM 变化断轮、禁止冗余 page_info
1211
- - Listener Abbreviations:快照中缩写到原始事件的映射
1212
- - 工具部分由各工具 `t.description` 动态注入,不在 prompt 正文重复
1150
+ - 从当前快照直接执行,不复述任务
1151
+ - 任务按“剔除模型”推进(current + previous + this-round -> new remaining)
1152
+ - 禁止 `page_info` 作为规划手段
1153
+ - 可见目标尽量同轮批量执行
1154
+ - DOM 会变化的动作执行后在下一轮继续
1213
1155
  - 统一输出 `REMAINING` 协议
1214
1156
 
1215
1157
  ### B. Round Messages(轮次状态层)
@@ -1231,7 +1173,7 @@ loop 对本轮返回做以下处理:
1231
1173
  - 首轮使用前端注入的 `initialSnapshot`
1232
1174
  - 每轮执行后刷新快照
1233
1175
  - 推进 `remainingInstruction`
1234
- - `REMAINING` 缺失且本轮有执行动作时:仅在显式序列任务下启发式推进一步
1176
+ - `REMAINING` 缺失且本轮有执行动作时:按线性任务剔除做启发式推进
1235
1177
  - `REMAINING` 缺失且本轮无执行进展时:保持当前 remaining
1236
1178
  - 防空转、防重复、防无限循环
1237
1179
  - DOM 变更动作触发强制断轮(等待下一轮新快照)
@@ -1489,7 +1431,7 @@ agent.registerTool({
1489
1431
  - `agent-loop`:轮次编排、停机判定、恢复/重试、指标汇总
1490
1432
  - `system-prompt`:系统规则模板
1491
1433
  - `tool-registry`:工具注册/分发/错误兜底
1492
- - `ai-client`:多 provider 协议适配(OpenAI/Copilot/Anthropic/DeepSeek/Doubao/Qwen
1434
+ - `ai-client`:多 provider 协议适配(OpenAI/Copilot/Anthropic/DeepSeek)
1493
1435
  - `web`(浏览器实现):
1494
1436
  - `WebAgent`:入口编排、记忆、autoSnapshot、callbacks
1495
1437
  - `tools`:DOM/导航/页面信息/等待/evaluate
@@ -1547,7 +1489,7 @@ agent.registerTool({
1547
1489
 
1548
1490
  #### 2.3 缺失协议时的回退策略
1549
1491
 
1550
- - 若本轮有执行动作:仅当当前任务包含显式顺序连接词时,启发式推进一步(`reduceRemainingHeuristically`)
1492
+ - 若本轮有执行动作:启发式线性剔除(`reduceRemainingHeuristically`)
1551
1493
  - 若本轮无推进:保持 remaining 不变,并标记协议违约风险
1552
1494
 
1553
1495
  #### 2.4 协议修复回合(Protocol Violation Round)
@@ -1583,7 +1525,7 @@ agent.registerTool({
1583
1525
  | 冗余 page_info 拦截 | `page_info.snapshot/query_all/get_url/get_title/get_viewport` | - | 直接返回拦截结果,不执行真实调用 | `recovery.ts#checkRedundantSnapshot` |
1584
1526
  | 连续 snapshot 防抖 | 连续 page_info.snapshot | 阈值=2 | 标记 `REDUNDANT_SNAPSHOT` | `recovery.ts#applySnapshotDebounce` |
1585
1527
  | 元素未找到自动恢复 | `dom` 且结果为 element not found | `DEFAULT_ACTION_RECOVERY_ROUNDS=2`,`DEFAULT_RECOVERY_WAIT_MS=100` | 等待 -> 刷新快照 -> 返回 recovery 结果 | `recovery.ts#handleElementRecovery` |
1586
- | Not-found 重试对话流 | 本轮有 not-found 失败任务 | `DEFAULT_NOT_FOUND_RETRY_ROUNDS=2`,`DEFAULT_NOT_FOUND_RETRY_WAIT_MS=1000` | 注入失败任务上下文 + attempt x/y,必要时等待后重试 | `index.ts` 主循环 |
1528
+ | Not-found 重试对话流 | 本轮有 not-found 失败任务 | `DEFAULT_NOT_FOUND_RETRY_ROUNDS=2`,`DEFAULT_NOT_FOUND_RETRY_WAIT_MS=2000` | 注入失败任务上下文 + attempt x/y,必要时等待后重试 | `index.ts` 主循环 |
1587
1529
  | 导航后上下文刷新 | `navigate` 成功且动作为 goto/back/forward/reload | - | 立即刷新快照 | `recovery.ts#handleNavigationUrlChange` |
1588
1530
  | 空转检测 | 连续只读轮次 | 连续 2 轮 | 返回 -1 终止 | `recovery.ts#detectIdleLoop` |
1589
1531
 
@@ -1654,7 +1596,7 @@ agent.registerTool({
1654
1596
 
1655
1597
  ### 6. Tools 能力总表(详细)
1656
1598
 
1657
- #### 6.1 `dom` 工具(`src/web/tools/dom-tool/`)
1599
+ #### 6.1 `dom` 工具(`src/web/tools/dom-tool.ts`)
1658
1600
 
1659
1601
  支持动作:
1660
1602
 
@@ -1763,36 +1705,34 @@ agent.registerTool({
1763
1705
 
1764
1706
  1. **System Prompt(稳定规则层)**
1765
1707
  - 由 `buildSystemPrompt()` 生成
1766
- - 采用 Decision Framework 架构:ANALYZE → ASSESS → CHOOSE → EXECUTE → OUTPUT
1767
- - 包含 Targeting Rules、Constraints、Listener Abbreviations
1768
- - 工具部分由各工具 `t.description` 动态注入,prompt 不重复工具能力描述
1708
+ - 永久规则:快照优先、批处理、输入顺序、禁止 page_info、REMAINING 协议
1769
1709
  2. **Round Message(动态状态层)**
1770
1710
  - 由 `buildCompactMessages()` 生成
1771
- - 包含当前 remaining、Master goal 锚点(防漂移)、done steps、上轮计划、上轮输出归一化、最新快照
1711
+ - 包含当前 remaining、done steps、上轮计划、上轮输出归一化、最新快照
1772
1712
  3. **Recovery Context(修复层)**
1773
1713
  - Not-found retry context
1774
1714
  - Protocol violation hint
1775
1715
 
1776
1716
  #### 7.2 System Prompt 的关键规则(当前实现)
1777
1717
 
1778
- `buildSystemPrompt()` 采用 Decision Framework 架构,不再逐条罗列规则:
1718
+ `buildSystemPrompt()` 中的核心约束(英文原文语义):
1779
1719
 
1780
- - 五阶段决策流:ANALYZE snapshot ASSESS targets → CHOOSE action → EXECUTE → OUTPUT
1781
- - Targeting Rules:hash selector 优先、ordinal 为 1-based 视觉序
1782
- - Constraints:form-input 顺序约束(focus/click fill/type/select_option)、DOM 结构变化后断轮
1783
- - Listener Abbreviations:`clk`/`inp`/`chg`/`kdn`/`kup` 等缩写映射
1784
- - 工具描述去重:工具部分完全由各工具 `t.description` 动态注入,prompt 不再重复
1785
- - 统一输出 `REMAINING: <text>` 或 `REMAINING: DONE`
1720
+ - 从“当前快照 + 当前 remaining”直接执行,不复述任务
1721
+ - 每轮按 task reduction 推进
1722
+ - 使用 hash selector,不猜 CSS
1723
+ - 可见且互不依赖的动作同轮批量执行
1724
+ - 输入顺序强约束:`focus/click -> fill/type/select_option`
1725
+ - 多字段交替对执行(防止 focus-only 空轮)
1726
+ - DOM 结构变化动作后断轮
1727
+ - 禁用 `page_info` 作为规划手段
1728
+ - 输出 `REMAINING: ...` 或 `REMAINING: DONE`
1786
1729
 
1787
1730
  #### 7.3 Round 0 与 Round 1+ 差异
1788
1731
 
1789
1732
  - Round 0:原始任务 + 首轮快照
1790
- - Round 1+:以 remaining 驱动;当 remaining 与原始任务不同时,注入 `Master goal (reference only)` 锚点
1733
+ - Round 1+:不再重复原始用户输入,改为“remaining 驱动”
1791
1734
 
1792
- Master goal 锚点的设计目的:
1793
- - 防止 remaining 因模型错误缩减而偏离原始目标(任务漂移)
1794
- - 标注 `reference only — do NOT restart from scratch`,避免模型回头重做
1795
- - 让模型能随时交叉校验当前行动是否符合原始意图
1735
+ 这能显著降低“回头重做”的概率。
1796
1736
 
1797
1737
  #### 7.4 显式 UI 意图判定
1798
1738
 
@@ -1838,38 +1778,27 @@ Master goal 锚点的设计目的:
1838
1778
  - `DEFAULT_RECOVERY_WAIT_MS = 100`
1839
1779
  - `DEFAULT_ACTION_RECOVERY_ROUNDS = 2`
1840
1780
  - `DEFAULT_NOT_FOUND_RETRY_ROUNDS = 2`
1841
- - `DEFAULT_NOT_FOUND_RETRY_WAIT_MS = 1000`
1781
+ - `DEFAULT_NOT_FOUND_RETRY_WAIT_MS = 2000`
1842
1782
 
1843
1783
  `src/web/tools/wait-tool.ts`:
1844
1784
 
1845
- - `DEFAULT_TIMEOUT = 6000`
1785
+ - `DEFAULT_TIMEOUT = 10000`
1846
1786
 
1847
1787
  ---
1848
1788
 
1849
1789
  ### 10. 文档与实现一致性清单(维护者必看)
1850
1790
 
1851
- Agent Loop 机制权威文档:`src/core/agent-loop/LOOP_MECHANISM.md`。
1852
-
1853
1791
  任何涉及“渐进式任务消费”的改动,至少同步以下文件:
1854
1792
 
1855
1793
  1. `src/core/agent-loop/messages.ts`(输入语义)
1856
1794
  2. `src/core/agent-loop/index.ts`(停机判定与推进逻辑)
1857
- 3. `src/core/agent-loop/LOOP_MECHANISM.md`(机制权威说明)
1858
- 4. `README.md`(机制说明)
1795
+ 3. `README.md`(机制说明)
1859
1796
 
1860
1797
  任何涉及“找不到元素重试流”的改动,至少同步:
1861
1798
 
1862
1799
  1. `src/core/agent-loop/index.ts`
1863
1800
  2. `src/core/agent-loop/recovery.ts`
1864
- 3. `src/core/agent-loop/LOOP_MECHANISM.md`
1865
- 4. `README.md`
1866
-
1867
- 任何涉及 provider 新增/调整的改动,至少同步:
1868
-
1869
- 1. `src/core/ai-client/index.ts`(provider 路由)
1870
- 2. `src/core/ai-client/constants.ts`(默认端点)
1871
- 3. `src/web/index.ts`(WebAgentOptions 注释/提示)
1872
- 4. `README.md`(配置示例与支持矩阵)
1801
+ 3. `README.md`
1873
1802
 
1874
1803
  这样才能保证“实现、提示词、文档”三者一致,不出现行为漂移。
1875
1804
 
@@ -1921,4 +1850,4 @@ MIT
1921
1850
  4. **RefStore - 生命周期图**:从 `chat()` 创建到 `clear()` 释放的完整流程
1922
1851
  5. **AI Client - 自定义接入**:`BaseAIClient` 和纯对象两种方式的代码示例
1923
1852
  6. **快照格式 - 生成管线**:从 `document.body` 到最终文本的 10 步管线流程
1924
- 7. **错误处理 - 恢复常量**:`DEFAULT_ACTION_RECOVERY_ROUNDS=2` / `DEFAULT_NOT_FOUND_RETRY_ROUNDS=2` / `DEFAULT_NOT_FOUND_RETRY_WAIT_MS=1000` 等关键参数说明
1853
+ 7. **错误处理 - 恢复常量**:`DEFAULT_ACTION_RECOVERY_ROUNDS=2` / `DEFAULT_NOT_FOUND_RETRY_ROUNDS=2` / `DEFAULT_NOT_FOUND_RETRY_WAIT_MS=2000` 等关键参数说明
package/dist/index.d.mts CHANGED
@@ -62,13 +62,6 @@ type AIClient = {
62
62
  };
63
63
  //#endregion
64
64
  //#region src/core/agent-loop/types.d.ts
65
- /** 轮次后稳定等待配置(加载态 + DOM 静默) */
66
- type RoundStabilityWaitOptions = {
67
- /** 是否启用轮次后稳定等待(默认 true) */enabled?: boolean; /** 双重等待总超时(毫秒,默认 4000) */
68
- timeoutMs?: number; /** DOM 静默窗口(毫秒,默认 200) */
69
- quietMs?: number; /** 页面加载态选择器列表(会与默认列表合并去重,不会覆盖默认值) */
70
- loadingSelectors?: string[];
71
- };
72
65
  type AgentLoopMetrics = {
73
66
  roundCount: number;
74
67
  totalToolCalls: number;
@@ -164,16 +157,6 @@ declare class RefStore {
164
157
  get(id: string): Element | undefined;
165
158
  /** 检查 hash ID 是否存在 */
166
159
  has(id: string): boolean;
167
- /** 删除指定 hash ID 映射,返回是否删除成功。 */
168
- delete(id: string): boolean;
169
- /**
170
- * 清理失效引用:
171
- * - 仅保留 keepIds 中的映射(若提供)
172
- * - 自动移除已脱离文档(isConnected=false)的元素
173
- *
174
- * @returns 被移除的映射数量
175
- */
176
- prune(keepIds?: ReadonlySet<string>): number;
177
160
  /** 清空所有映射 */
178
161
  clear(): void;
179
162
  /**
@@ -192,7 +175,7 @@ declare class RefStore {
192
175
  //#region src/web/tools/page-info-tool.d.ts
193
176
  /** 快照配置选项 */
194
177
  type SnapshotOptions = {
195
- /** 最大遍历深度(默认 7) */maxDepth?: number;
178
+ /** 最大遍历深度(默认 6) */maxDepth?: number;
196
179
  /**
197
180
  * 视口裁剪:只保留与视口相交的元素(默认 true)。
198
181
  * 开启后,完全在视口外的元素会被跳过,大幅减少 token 消耗。
@@ -210,8 +193,8 @@ type SnapshotOptions = {
210
193
  * 传入 RefStore 实例后,每个元素使用确定性 hash ID 替代完整 XPath,
211
194
  * 大幅减少 token 消耗。dom-tool 通过 RefStore.get(id) 解析回 DOM 元素。
212
195
  */
213
- refStore?: RefStore; /** 最大输出节点数(默认 280),超过后停止继续遍历。 */
214
- maxNodes?: number; /** 每个父节点最多输出的子元素数(默认 32),超出部分会折叠。 */
196
+ refStore?: RefStore; /** 最大输出节点数(默认 220),超过后停止继续遍历。 */
197
+ maxNodes?: number; /** 每个父节点最多输出的子元素数(默认 25),超出部分会折叠。 */
215
198
  maxChildren?: number; /** 文本截断长度(默认 40)。 */
216
199
  maxTextLength?: number;
217
200
  /**
@@ -249,7 +232,7 @@ type SnapshotOptions = {
249
232
  declare function generateSnapshot(root?: Element, options?: SnapshotOptions | number): string;
250
233
  declare function createPageInfoTool(): ToolDefinition;
251
234
  //#endregion
252
- //#region src/web/tools/dom-tool/index.d.ts
235
+ //#region src/web/tools/dom-tool.d.ts
253
236
  declare function createDomTool(): ToolDefinition;
254
237
  //#endregion
255
238
  //#region src/web/tools/navigate-tool.d.ts
@@ -364,8 +347,7 @@ type WebAgentOptions = {
364
347
  maxRounds?: number; /** 是否启用多轮对话记忆(默认 false) */
365
348
  memory?: boolean; /** 是否在每次对话前自动生成页面快照(默认 true) */
366
349
  autoSnapshot?: boolean; /** 快照选项(视口裁剪、智能剪枝等,autoSnapshot 开启时生效) */
367
- snapshotOptions?: SnapshotOptions; /** 轮次后稳定等待(加载态 + DOM 静默)配置 */
368
- roundStabilityWait?: RoundStabilityWaitOptions;
350
+ snapshotOptions?: SnapshotOptions;
369
351
  };
370
352
  declare class WebAgent {
371
353
  /** 默认系统提示词 key(兼容旧版 setSystemPrompt(prompt))。 */
@@ -393,8 +375,6 @@ declare class WebAgent {
393
375
  private autoSnapshot;
394
376
  /** 快照选项 */
395
377
  private snapshotOptions;
396
- /** 轮次后稳定等待配置 */
397
- private roundStabilityWait?;
398
378
  /** 工具注册表实例 — 每个 WebAgent 拥有独立的工具集 */
399
379
  private registry;
400
380
  /** 事件回调 — 绑定后可实时获取 Agent 进度,用于 UI 展示 */
@@ -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.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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"}