agentpage 0.0.33 → 0.0.35
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 +88 -28
- package/dist/index.d.mts +12 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +630 -101
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
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
|
+
|
|
3
7
|
> 浏览器内嵌 AI Agent SDK:让 AI 通过 tool-calling 操作网页。
|
|
4
8
|
|
|
5
9
|
> 核心主张:通过 **Prompt + Tools + 路由**,快速为网站实现 AI 赋能,并构建**前端运行时 AI Skill**。AutoPilot 本质上是一个运行在前端浏览器中的 AI Agent。
|
|
@@ -238,6 +242,7 @@ applyRouteSkill(location.pathname);
|
|
|
238
242
|
| `memory` | `boolean` | `false` | 是否开启多轮对话记忆(跨 chat 调用保留历史消息) |
|
|
239
243
|
| `autoSnapshot` | `boolean` | `true` | chat 前是否自动生成首轮页面快照并注入 system prompt |
|
|
240
244
|
| `snapshotOptions` | `SnapshotOptions` | `{}` | 快照生成参数覆盖(深度、裁剪、剪枝、节点上限等) |
|
|
245
|
+
| `roundStabilityWait` | `RoundStabilityWaitOptions` | `{ enabled: true }` | 轮次后稳定等待配置(loading hidden + DOM stable);`loadingSelectors` 为“与默认值合并去重”,不会覆盖默认列表 |
|
|
241
246
|
|
|
242
247
|
### 参数详细说明
|
|
243
248
|
|
|
@@ -313,7 +318,7 @@ agent.clearSystemPrompts();
|
|
|
313
318
|
console.log(agent.getSystemPrompts());
|
|
314
319
|
```
|
|
315
320
|
|
|
316
|
-
内置 prompt 的核心规则包括:快照优先决策、任务增量消费(REMAINING 协议)、批量执行、禁止 page_info
|
|
321
|
+
内置 prompt 的核心规则包括:快照优先决策、任务增量消费(REMAINING 协议)、批量执行、禁止 page_info 空转等。并且在点击场景中要求优先选择具备明确点击信号(如 `clk/pdn/mdn`、`onclick`、链接/按钮语义)的目标;若点击无效,下一轮应优先尝试同语义组中邻近的可操作元素,避免重复点击无效节点。注册表中的 Prompt 会作为扩展段追加到内置 prompt 之后。
|
|
317
322
|
|
|
318
323
|
#### `dryRun`(干运行模式)
|
|
319
324
|
|
|
@@ -358,7 +363,7 @@ agent.clearHistory(); // 手动清空历史
|
|
|
358
363
|
|
|
359
364
|
| 参数 | 类型 | 默认值 | 说明 |
|
|
360
365
|
| --- | --- | --- | --- |
|
|
361
|
-
| `maxDepth` | `number` | `
|
|
366
|
+
| `maxDepth` | `number` | `12`(chat 首轮)/ `12`(page_info.snapshot) | DOM 最大遍历深度,超过该深度的子树不会输出 |
|
|
362
367
|
| `viewportOnly` | `boolean` | `false`(chat 首轮)/ `true`(page_info.snapshot) | 是否仅保留与视口相交的元素 |
|
|
363
368
|
| `pruneLayout` | `boolean` | `true` | 是否折叠无意义纯布局容器(div/span/section 等) |
|
|
364
369
|
| `maxNodes` | `number` | `500`(chat 首轮)/ `220`(page_info.snapshot) | 快照最大节点输出数量,超出后停止遍历并追加截断提示 |
|
|
@@ -374,7 +379,7 @@ agent.clearHistory(); // 手动清空历史
|
|
|
374
379
|
|
|
375
380
|
- 设置过低(如 3-4):可能遗漏深层嵌套的表单控件或弹窗内容
|
|
376
381
|
- 设置过高(如 12+):快照体积膨胀,浪费 token 且可能包含大量无用结构层
|
|
377
|
-
- 推荐值:`
|
|
382
|
+
- 推荐值:`10-12`,覆盖大多数组件库深层嵌套场景
|
|
378
383
|
|
|
379
384
|
#### `viewportOnly`(视口裁剪)
|
|
380
385
|
|
|
@@ -422,9 +427,9 @@ agent.clearHistory(); // 手动清空历史
|
|
|
422
427
|
|
|
423
428
|
| 场景 | maxDepth | viewportOnly | maxNodes | maxChildren | 原因 |
|
|
424
429
|
| --- | --- | --- | --- | --- | --- |
|
|
425
|
-
| `chat()` 首轮 |
|
|
426
|
-
| `page_info.snapshot`(loop 内) |
|
|
427
|
-
| `page_info.snapshot`(手动调用) |
|
|
430
|
+
| `chat()` 首轮 | 12 | false | 500 | 30 | 优先完整性,提供充足的页面上下文 |
|
|
431
|
+
| `page_info.snapshot`(loop 内) | 12 | false | 500 | 30 | 与首轮对齐,保证一致性 |
|
|
432
|
+
| `page_info.snapshot`(手动调用) | 12 | true | 220 | 25 | 较小体积,适合局部更新 |
|
|
428
433
|
|
|
429
434
|
---
|
|
430
435
|
|
|
@@ -704,7 +709,7 @@ AutoPilot 内置 5 个工具,覆盖浏览器交互的核心能力。所有工
|
|
|
704
709
|
| `attribute` | `string` | get_attr/set_attr | 属性名称 |
|
|
705
710
|
| `className` | `string` | add_class/remove_class | CSS 类名(旧参数名,已被 `value` 兼容) |
|
|
706
711
|
| `clickCount` | `number` | click | 点击次数(默认 1,双击传 2,三击传 3) |
|
|
707
|
-
| `waitMs` | `number` | 所有动作 | 等待元素出现的超时时间(毫秒,默认
|
|
712
|
+
| `waitMs` | `number` | 所有动作 | 等待元素出现的超时时间(毫秒,默认 1200) |
|
|
708
713
|
| `waitSeconds` | `number` | 所有动作 | 等待超时(秒,`waitMs` 优先级更高) |
|
|
709
714
|
| `force` | `boolean` | 所有动作 | 跳过 actionability 检查(默认 false) |
|
|
710
715
|
|
|
@@ -814,7 +819,7 @@ AutoPilot 内置 5 个工具,覆盖浏览器交互的核心能力。所有工
|
|
|
814
819
|
| `selector` | `string` | wait_for_selector/hidden | 目标元素选择器 |
|
|
815
820
|
| `state` | `string` | wait_for_selector | 目标状态:`attached`/`visible`/`hidden`/`detached` |
|
|
816
821
|
| `text` | `string` | wait_for_text | 要等待出现的文本内容 |
|
|
817
|
-
| `timeout` | `number` | 所有动作 | 超时时间(毫秒,默认
|
|
822
|
+
| `timeout` | `number` | 所有动作 | 超时时间(毫秒,默认 6000) |
|
|
818
823
|
| `quietMs` | `number` | wait_for_stable | DOM 静默窗口时长(毫秒,默认 300) |
|
|
819
824
|
|
|
820
825
|
**动作详解:**
|
|
@@ -848,7 +853,7 @@ AutoPilot 内置 5 个工具,覆盖浏览器交互的核心能力。所有工
|
|
|
848
853
|
| --- | --- | --- | --- |
|
|
849
854
|
| `action` | `string` | ✅ | 信息获取动作类型 |
|
|
850
855
|
| `selector` | `string` | query_all | CSS 选择器(用于 `query_all` 动作) |
|
|
851
|
-
| `maxDepth` | `number` | snapshot | 最大遍历深度(默认
|
|
856
|
+
| `maxDepth` | `number` | snapshot | 最大遍历深度(默认 12) |
|
|
852
857
|
| `viewportOnly` | `boolean` | snapshot | 是否仅保留视口内元素(默认 true) |
|
|
853
858
|
| `pruneLayout` | `boolean` | snapshot | 是否折叠布局容器(默认 true) |
|
|
854
859
|
| `maxNodes` | `number` | snapshot | 最大节点数(默认 220) |
|
|
@@ -955,7 +960,8 @@ src/
|
|
|
955
960
|
│ │ ├── helpers.ts
|
|
956
961
|
│ │ ├── snapshot.ts
|
|
957
962
|
│ │ ├── messages.ts
|
|
958
|
-
│ │
|
|
963
|
+
│ │ ├── recovery.ts
|
|
964
|
+
│ │ └── LOOP_MECHANISM.md
|
|
959
965
|
│ └── ai-client/
|
|
960
966
|
│ ├── index.ts
|
|
961
967
|
│ ├── constants.ts
|
|
@@ -963,6 +969,8 @@ src/
|
|
|
963
969
|
│ ├── openai.ts
|
|
964
970
|
│ ├── anthropic.ts
|
|
965
971
|
│ ├── deepseek.ts
|
|
972
|
+
│ ├── doubao.ts
|
|
973
|
+
│ ├── qwen.ts
|
|
966
974
|
│ └── sse.ts
|
|
967
975
|
└── web/
|
|
968
976
|
├── index.ts
|
|
@@ -971,6 +979,7 @@ src/
|
|
|
971
979
|
├── page-info-tool.ts # 兼容转发层(re-export)
|
|
972
980
|
├── wait-tool.ts # 兼容转发层(re-export)
|
|
973
981
|
├── evaluate-tool.ts # 兼容转发层(re-export)
|
|
982
|
+
├── event-listener-tracker.ts # 全局事件监听追踪器
|
|
974
983
|
├── ref-store.ts
|
|
975
984
|
├── messaging.ts
|
|
976
985
|
└── tools/
|
|
@@ -1036,6 +1045,8 @@ AI 每一轮不是“凭记忆猜页面”,而是基于最新快照选择可
|
|
|
1036
1045
|
例子:
|
|
1037
1046
|
- 可同轮:同时填写两个已可见输入框
|
|
1038
1047
|
- 不可同轮:点击“打开弹窗”后立即填写弹窗字段(应等下一轮新快照)
|
|
1048
|
+
- 当前实现:若本轮出现潜在 DOM 变化动作,轮次结束会自动执行双重等待(先 loading hidden,再 DOM quiet window),默认 `quietMs=200`、`timeoutMs=4000`。
|
|
1049
|
+
- `loadingSelectors` 默认内置 AntD / Element Plus / BK / TDesign(TD)及通用加载态选择器;用户自定义会在默认列表基础上追加并去重,不会覆盖默认值。
|
|
1039
1050
|
|
|
1040
1051
|
---
|
|
1041
1052
|
|
|
@@ -1085,12 +1096,13 @@ loop 对本轮返回做以下处理:
|
|
|
1085
1096
|
1. 执行工具调用批次
|
|
1086
1097
|
2. 拦截 `page_info.*`(在 loop 内视为冗余,不让其成为主流程)
|
|
1087
1098
|
3. 处理恢复(元素找不到时自动刷新快照)
|
|
1088
|
-
4.
|
|
1089
|
-
5.
|
|
1099
|
+
4. 若本轮存在潜在 DOM 变化动作:执行轮次后稳定等待(loading hidden + DOM stable)
|
|
1100
|
+
5. 刷新快照进入下一轮
|
|
1101
|
+
6. 更新下一轮任务文本:
|
|
1090
1102
|
- 优先使用 `REMAINING`
|
|
1091
1103
|
- 若缺失 `REMAINING` 且本轮有执行动作:按线性任务剔除做启发式推进(避免整段原任务重复)
|
|
1092
1104
|
- 若缺失 `REMAINING` 且本轮无执行进展:保持当前任务不推进(按协议回退)
|
|
1093
|
-
|
|
1105
|
+
7. 若“remaining 未完成 + 无工具调用”:
|
|
1094
1106
|
- 不直接结束
|
|
1095
1107
|
- 下一轮注入 `Protocol violation` 强约束提示,要求“要么给可执行工具调用,要么严格 `REMAINING: DONE`”
|
|
1096
1108
|
|
|
@@ -1101,12 +1113,12 @@ loop 对本轮返回做以下处理:
|
|
|
1101
1113
|
1. 收集失败工具调用(name/input)及失败原因
|
|
1102
1114
|
2. 将“失败工具集合 + 最新快照 + 当前任务”一起发给模型重试
|
|
1103
1115
|
3. 在消息中标注重试次数:`attempt x/y`
|
|
1104
|
-
4. 若仍未命中,默认 `await
|
|
1116
|
+
4. 若仍未命中,默认 `await 1000ms` 后刷新快照再重试
|
|
1105
1117
|
5. 超过最大尝试次数后退出重试流,交由模型给出剩余任务或结束
|
|
1106
1118
|
|
|
1107
1119
|
默认参数:
|
|
1108
1120
|
- `DEFAULT_NOT_FOUND_RETRY_ROUNDS = 2`
|
|
1109
|
-
- `DEFAULT_NOT_FOUND_RETRY_WAIT_MS =
|
|
1121
|
+
- `DEFAULT_NOT_FOUND_RETRY_WAIT_MS = 1000`
|
|
1110
1122
|
|
|
1111
1123
|
### 4) 停机条件
|
|
1112
1124
|
|
|
@@ -1218,6 +1230,7 @@ flowchart LR
|
|
|
1218
1230
|
subgraph Web[web 层]
|
|
1219
1231
|
WI[web/index.ts\nWebAgent]
|
|
1220
1232
|
WT[web tools]
|
|
1233
|
+
ELT[event-listener-tracker.ts]
|
|
1221
1234
|
RS[ref-store.ts]
|
|
1222
1235
|
MG[messaging.ts]
|
|
1223
1236
|
end
|
|
@@ -1234,6 +1247,7 @@ flowchart LR
|
|
|
1234
1247
|
WI --> SP
|
|
1235
1248
|
WI --> WT
|
|
1236
1249
|
WT --> RS
|
|
1250
|
+
WT --> ELT
|
|
1237
1251
|
WI --> MG
|
|
1238
1252
|
|
|
1239
1253
|
AL --> AI
|
|
@@ -1431,12 +1445,41 @@ agent.registerTool({
|
|
|
1431
1445
|
- `agent-loop`:轮次编排、停机判定、恢复/重试、指标汇总
|
|
1432
1446
|
- `system-prompt`:系统规则模板
|
|
1433
1447
|
- `tool-registry`:工具注册/分发/错误兜底
|
|
1434
|
-
- `ai-client`:多 provider 协议适配(OpenAI/Copilot/Anthropic/DeepSeek)
|
|
1448
|
+
- `ai-client`:多 provider 协议适配(OpenAI/Copilot/Anthropic/DeepSeek/Doubao/Qwen)
|
|
1435
1449
|
- `web`(浏览器实现):
|
|
1436
1450
|
- `WebAgent`:入口编排、记忆、autoSnapshot、callbacks
|
|
1437
1451
|
- `tools`:DOM/导航/页面信息/等待/evaluate
|
|
1452
|
+
- `event-listener-tracker`:全局事件监听追踪(`EventTarget.prototype` 补丁)
|
|
1438
1453
|
- `RefStore`:`#hashID -> Element` 映射
|
|
1439
1454
|
|
|
1455
|
+
#### 1.1.1 事件监听追踪器(event-listener-tracker)
|
|
1456
|
+
|
|
1457
|
+
`src/web/event-listener-tracker.ts` 是快照交互性判定的基础设施:
|
|
1458
|
+
|
|
1459
|
+
**原理:**
|
|
1460
|
+
- 在 `web/index.ts` 模块加载时默认调用 `installEventListenerTracking()`(幂等),一次性补丁 `EventTarget.prototype.addEventListener/removeEventListener`
|
|
1461
|
+
- 所有后续的 `addEventListener` 调用都会被拦截并记录,`removeEventListener` 同理反向清除
|
|
1462
|
+
- 仅记录 Element 实例(跳过 `document`/`window` 等非元素目标)
|
|
1463
|
+
- 内部用 `WeakMap<Element, Set<string>>` 存储,元素被 GC 后自动释放
|
|
1464
|
+
|
|
1465
|
+
**导出 API:**
|
|
1466
|
+
|
|
1467
|
+
| 函数 | 说明 |
|
|
1468
|
+
| --- | --- |
|
|
1469
|
+
| `installEventListenerTracking()` | 安装全局补丁(幂等) |
|
|
1470
|
+
| `getTrackedElementEvents(el)` | 返回元素已记录的事件名数组(排序后) |
|
|
1471
|
+
| `hasTrackedElementEvents(el)` | 判断元素是否存在至少一个被追踪的事件绑定 |
|
|
1472
|
+
|
|
1473
|
+
**下游消费方(page-info-tool.ts):**
|
|
1474
|
+
- `hasInteractiveTrackedEvents(el)` — 判断元素是否绑定了 INTERACTIVE_EVENTS 集合中的事件(click/input/change/focus 等 15 种),作为 hash ID 分配和优先级排序的首要判据
|
|
1475
|
+
- `getTrackedElementEvents(el)` — 输出快照中的 `listeners="clk,inp,..."` 事件简写标注
|
|
1476
|
+
- `getElementPriorityScore(el)` — 基于事件类型计算优先级分数,决定同层子元素输出顺序
|
|
1477
|
+
|
|
1478
|
+
**安全约束:**
|
|
1479
|
+
- 补丁不改变原调用语义(先执行原生方法,再做记录)
|
|
1480
|
+
- 追踪失败时静默兜底,不影响业务代码执行
|
|
1481
|
+
- 不记录 listener 函数引用,避免内存泄漏
|
|
1482
|
+
|
|
1440
1483
|
#### 1.2 Chat 生命周期(从 `WebAgent.chat()` 到收敛)
|
|
1441
1484
|
|
|
1442
1485
|
1. 创建本次会话 `RefStore`,并激活到 DOM 工具层。
|
|
@@ -1525,7 +1568,7 @@ agent.registerTool({
|
|
|
1525
1568
|
| 冗余 page_info 拦截 | `page_info.snapshot/query_all/get_url/get_title/get_viewport` | - | 直接返回拦截结果,不执行真实调用 | `recovery.ts#checkRedundantSnapshot` |
|
|
1526
1569
|
| 连续 snapshot 防抖 | 连续 page_info.snapshot | 阈值=2 | 标记 `REDUNDANT_SNAPSHOT` | `recovery.ts#applySnapshotDebounce` |
|
|
1527
1570
|
| 元素未找到自动恢复 | `dom` 且结果为 element not found | `DEFAULT_ACTION_RECOVERY_ROUNDS=2`,`DEFAULT_RECOVERY_WAIT_MS=100` | 等待 -> 刷新快照 -> 返回 recovery 结果 | `recovery.ts#handleElementRecovery` |
|
|
1528
|
-
| Not-found 重试对话流 | 本轮有 not-found 失败任务 | `DEFAULT_NOT_FOUND_RETRY_ROUNDS=2`,`DEFAULT_NOT_FOUND_RETRY_WAIT_MS=
|
|
1571
|
+
| Not-found 重试对话流 | 本轮有 not-found 失败任务 | `DEFAULT_NOT_FOUND_RETRY_ROUNDS=2`,`DEFAULT_NOT_FOUND_RETRY_WAIT_MS=1000` | 注入失败任务上下文 + attempt x/y,必要时等待后重试 | `index.ts` 主循环 |
|
|
1529
1572
|
| 导航后上下文刷新 | `navigate` 成功且动作为 goto/back/forward/reload | - | 立即刷新快照 | `recovery.ts#handleNavigationUrlChange` |
|
|
1530
1573
|
| 空转检测 | 连续只读轮次 | 连续 2 轮 | 返回 -1 终止 | `recovery.ts#detectIdleLoop` |
|
|
1531
1574
|
|
|
@@ -1556,14 +1599,14 @@ agent.registerTool({
|
|
|
1556
1599
|
#### 5.2 Core 与 Web 的参数默认值差异(很重要)
|
|
1557
1600
|
|
|
1558
1601
|
- `core/agent-loop/snapshot.ts` 默认读取:
|
|
1559
|
-
- `maxDepth=
|
|
1602
|
+
- `maxDepth=12`
|
|
1560
1603
|
- `viewportOnly=false`(优先完整性)
|
|
1561
1604
|
- `pruneLayout=true`
|
|
1562
1605
|
- `maxNodes=500`
|
|
1563
1606
|
- `maxChildren=30`
|
|
1564
1607
|
- `maxTextLength=40`
|
|
1565
1608
|
- `web/tools/page-info-tool.ts` 的 `snapshot` action 默认值:
|
|
1566
|
-
- `maxDepth=
|
|
1609
|
+
- `maxDepth=12`
|
|
1567
1610
|
- `viewportOnly=true`
|
|
1568
1611
|
- `pruneLayout=true`
|
|
1569
1612
|
- `maxNodes=220`
|
|
@@ -1582,13 +1625,17 @@ agent.registerTool({
|
|
|
1582
1625
|
- 子节点提升输出
|
|
1583
1626
|
- 多子节点提升时输出 `collapsed-group` 括号块
|
|
1584
1627
|
5. 交互优先:同层先输出 interactive children
|
|
1585
|
-
6.
|
|
1586
|
-
7.
|
|
1587
|
-
8.
|
|
1628
|
+
6. 仅交互节点分配 hash ID:通过 `hasInteractiveTrackedEvents()` + 语义标签 + ARIA role 判定交互性,非交互节点不输出 `#hashId`
|
|
1629
|
+
7. 角色优先标签:当元素有 `INTERACTIVE_ROLES` 中的 ARIA role 且与 tag 不等价时,用 role 作为显示标签(`[combobox]` 替代 `[input] role="combobox"`),同时去除冗余 `role` 属性
|
|
1630
|
+
8. 预算控制:`maxNodes` + `maxChildren` 截断
|
|
1631
|
+
9. 文字压缩:`maxTextLength`
|
|
1632
|
+
10. 属性压缩:仅保留关键属性、运行时状态(`checked/disabled/readonly/selected/val`)
|
|
1633
|
+
11. 事件信号压缩:输出 `listeners="clk,inp,chg,..."` 简写,帮助模型识别真实交互链路
|
|
1588
1634
|
|
|
1589
1635
|
#### 5.4 RefStore 与 hash selector
|
|
1590
1636
|
|
|
1591
|
-
-
|
|
1637
|
+
- 快照中仅交互元素携带 `#hashId`(而非长 CSS/XPath),非交互元素(标题/标签/纯文本)无标识
|
|
1638
|
+
- 交互性判定:运行时事件绑定(`hasInteractiveTrackedEvents`)> 语义标签(`input/button/a`)> ARIA role(`INTERACTIVE_ROLES` 集合)> `tabindex`/`contenteditable`
|
|
1592
1639
|
- 工具执行时优先按 hash 命中真实 Element
|
|
1593
1640
|
- 页面变化/恢复快照时会重建映射,避免旧引用污染
|
|
1594
1641
|
|
|
@@ -1719,6 +1766,8 @@ agent.registerTool({
|
|
|
1719
1766
|
|
|
1720
1767
|
- 从“当前快照 + 当前 remaining”直接执行,不复述任务
|
|
1721
1768
|
- 每轮按 task reduction 推进
|
|
1769
|
+
- 仅交互元素(有事件/输入框/按钮/链接等)携带 `#hashID`,无 `#hashID` 的元素为上下文
|
|
1770
|
+
- 角色优先标签:方括号标签可能是 ARIA role 而非 HTML tag(如 `[combobox]`/`[slider]`),表示交互模式
|
|
1722
1771
|
- 使用 hash selector,不猜 CSS
|
|
1723
1772
|
- 可见且互不依赖的动作同轮批量执行
|
|
1724
1773
|
- 输入顺序强约束:`focus/click -> fill/type/select_option`
|
|
@@ -1778,27 +1827,38 @@ agent.registerTool({
|
|
|
1778
1827
|
- `DEFAULT_RECOVERY_WAIT_MS = 100`
|
|
1779
1828
|
- `DEFAULT_ACTION_RECOVERY_ROUNDS = 2`
|
|
1780
1829
|
- `DEFAULT_NOT_FOUND_RETRY_ROUNDS = 2`
|
|
1781
|
-
- `DEFAULT_NOT_FOUND_RETRY_WAIT_MS =
|
|
1830
|
+
- `DEFAULT_NOT_FOUND_RETRY_WAIT_MS = 1000`
|
|
1782
1831
|
|
|
1783
1832
|
`src/web/tools/wait-tool.ts`:
|
|
1784
1833
|
|
|
1785
|
-
- `DEFAULT_TIMEOUT =
|
|
1834
|
+
- `DEFAULT_TIMEOUT = 6000`
|
|
1786
1835
|
|
|
1787
1836
|
---
|
|
1788
1837
|
|
|
1789
1838
|
### 10. 文档与实现一致性清单(维护者必看)
|
|
1790
1839
|
|
|
1840
|
+
Agent Loop 机制权威文档:`src/core/agent-loop/LOOP_MECHANISM.md`。
|
|
1841
|
+
|
|
1791
1842
|
任何涉及“渐进式任务消费”的改动,至少同步以下文件:
|
|
1792
1843
|
|
|
1793
1844
|
1. `src/core/agent-loop/messages.ts`(输入语义)
|
|
1794
1845
|
2. `src/core/agent-loop/index.ts`(停机判定与推进逻辑)
|
|
1795
|
-
3. `
|
|
1846
|
+
3. `src/core/agent-loop/LOOP_MECHANISM.md`(机制权威说明)
|
|
1847
|
+
4. `README.md`(机制说明)
|
|
1796
1848
|
|
|
1797
1849
|
任何涉及“找不到元素重试流”的改动,至少同步:
|
|
1798
1850
|
|
|
1799
1851
|
1. `src/core/agent-loop/index.ts`
|
|
1800
1852
|
2. `src/core/agent-loop/recovery.ts`
|
|
1801
|
-
3. `
|
|
1853
|
+
3. `src/core/agent-loop/LOOP_MECHANISM.md`
|
|
1854
|
+
4. `README.md`
|
|
1855
|
+
|
|
1856
|
+
任何涉及 provider 新增/调整的改动,至少同步:
|
|
1857
|
+
|
|
1858
|
+
1. `src/core/ai-client/index.ts`(provider 路由)
|
|
1859
|
+
2. `src/core/ai-client/constants.ts`(默认端点)
|
|
1860
|
+
3. `src/web/index.ts`(WebAgentOptions 注释/提示)
|
|
1861
|
+
4. `README.md`(配置示例与支持矩阵)
|
|
1802
1862
|
|
|
1803
1863
|
这样才能保证“实现、提示词、文档”三者一致,不出现行为漂移。
|
|
1804
1864
|
|
|
@@ -1850,4 +1910,4 @@ MIT
|
|
|
1850
1910
|
4. **RefStore - 生命周期图**:从 `chat()` 创建到 `clear()` 释放的完整流程
|
|
1851
1911
|
5. **AI Client - 自定义接入**:`BaseAIClient` 和纯对象两种方式的代码示例
|
|
1852
1912
|
6. **快照格式 - 生成管线**:从 `document.body` 到最终文本的 10 步管线流程
|
|
1853
|
-
7. **错误处理 - 恢复常量**:`DEFAULT_ACTION_RECOVERY_ROUNDS=2` / `DEFAULT_NOT_FOUND_RETRY_ROUNDS=2` / `DEFAULT_NOT_FOUND_RETRY_WAIT_MS=
|
|
1913
|
+
7. **错误处理 - 恢复常量**:`DEFAULT_ACTION_RECOVERY_ROUNDS=2` / `DEFAULT_NOT_FOUND_RETRY_ROUNDS=2` / `DEFAULT_NOT_FOUND_RETRY_WAIT_MS=1000` 等关键参数说明
|
package/dist/index.d.mts
CHANGED
|
@@ -62,6 +62,13 @@ 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
|
+
};
|
|
65
72
|
type AgentLoopMetrics = {
|
|
66
73
|
roundCount: number;
|
|
67
74
|
totalToolCalls: number;
|
|
@@ -175,7 +182,7 @@ declare class RefStore {
|
|
|
175
182
|
//#region src/web/tools/page-info-tool.d.ts
|
|
176
183
|
/** 快照配置选项 */
|
|
177
184
|
type SnapshotOptions = {
|
|
178
|
-
/** 最大遍历深度(默认
|
|
185
|
+
/** 最大遍历深度(默认 12) */maxDepth?: number;
|
|
179
186
|
/**
|
|
180
187
|
* 视口裁剪:只保留与视口相交的元素(默认 true)。
|
|
181
188
|
* 开启后,完全在视口外的元素会被跳过,大幅减少 token 消耗。
|
|
@@ -347,7 +354,8 @@ type WebAgentOptions = {
|
|
|
347
354
|
maxRounds?: number; /** 是否启用多轮对话记忆(默认 false) */
|
|
348
355
|
memory?: boolean; /** 是否在每次对话前自动生成页面快照(默认 true) */
|
|
349
356
|
autoSnapshot?: boolean; /** 快照选项(视口裁剪、智能剪枝等,autoSnapshot 开启时生效) */
|
|
350
|
-
snapshotOptions?: SnapshotOptions;
|
|
357
|
+
snapshotOptions?: SnapshotOptions; /** 轮次后稳定等待(加载态 + DOM 静默)配置 */
|
|
358
|
+
roundStabilityWait?: RoundStabilityWaitOptions;
|
|
351
359
|
};
|
|
352
360
|
declare class WebAgent {
|
|
353
361
|
/** 默认系统提示词 key(兼容旧版 setSystemPrompt(prompt))。 */
|
|
@@ -375,6 +383,8 @@ declare class WebAgent {
|
|
|
375
383
|
private autoSnapshot;
|
|
376
384
|
/** 快照选项 */
|
|
377
385
|
private snapshotOptions;
|
|
386
|
+
/** 轮次后稳定等待配置 */
|
|
387
|
+
private roundStabilityWait?;
|
|
378
388
|
/** 工具注册表实例 — 每个 WebAgent 拥有独立的工具集 */
|
|
379
389
|
private registry;
|
|
380
390
|
/** 事件回调 — 绑定后可实时获取 Agent 进度,用于 UI 展示 */
|
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.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
|
|
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":";;;;;;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,KAAA,CAAA;EFzD8C;;;;;AAQhD;;;EE6DE,KAAA,CAAM,GAAA;EF3DN;EAAA,IEmEI,IAAA,CAAA;AAAA;;;;KCtFM,eAAA;EJKc,oBIHxB,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;;;;;iBGoGgB,gBAAA,CACd,IAAA,GAAM,OAAA,EACN,OAAA,GAAS,eAAA;AAAA,iBAqhBK,kBAAA,CAAA,GAAsB,cAAA;;;iBC4CtB,aAAA,CAAA,GAAiB,cAAA;;;iBCnrBjB,kBAAA,CAAA,GAAsB,cAAA;;;iBCgMtB,cAAA,CAAA,GAAkB,cAAA;;;iBCxJlB,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;EPnPc;EOyPxB,SAAA,CAAA;EP1RQ;EO+RR,eAAA,CAAgB,OAAA;EPzRJ;EO8RZ,eAAA,CAAA;EPnRQ;EOwRR,kBAAA,CAAmB,OAAA,EAAS,eAAA;EPxRX;EO6RjB,kBAAA,CAAA,GAAsB,eAAA;EP7QlB;EOkRJ,YAAA,CAAA;EP7QA;;;;;;;;;EO4RM,IAAA,CAAK,OAAA,WAAkB,OAAA,CAAQ,eAAA;;ANzVvC;;;;UMkbU,mBAAA;AAAA"}
|