agentpage 0.0.32 → 0.0.34
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 +81 -92
- package/dist/index.d.mts +4 -14
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +508 -417
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -177,23 +177,6 @@ console.log(result.reply);
|
|
|
177
177
|
pnpm demo
|
|
178
178
|
```
|
|
179
179
|
|
|
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
180
|
### 按路由构建 AI Skill(推荐范式)
|
|
198
181
|
|
|
199
182
|
```ts
|
|
@@ -380,33 +363,14 @@ agent.clearHistory(); // 手动清空历史
|
|
|
380
363
|
|
|
381
364
|
| 参数 | 类型 | 默认值 | 说明 |
|
|
382
365
|
| --- | --- | --- | --- |
|
|
383
|
-
| `maxDepth` | `number` | `
|
|
366
|
+
| `maxDepth` | `number` | `12`(chat 首轮)/ `12`(page_info.snapshot) | DOM 最大遍历深度,超过该深度的子树不会输出 |
|
|
384
367
|
| `viewportOnly` | `boolean` | `false`(chat 首轮)/ `true`(page_info.snapshot) | 是否仅保留与视口相交的元素 |
|
|
385
368
|
| `pruneLayout` | `boolean` | `true` | 是否折叠无意义纯布局容器(div/span/section 等) |
|
|
386
|
-
| `maxNodes` | `number` | `500`(chat 首轮)/ `
|
|
387
|
-
| `maxChildren` | `number` | `30`(chat 首轮)/ `
|
|
369
|
+
| `maxNodes` | `number` | `500`(chat 首轮)/ `220`(page_info.snapshot) | 快照最大节点输出数量,超出后停止遍历并追加截断提示 |
|
|
370
|
+
| `maxChildren` | `number` | `30`(chat 首轮)/ `25`(page_info.snapshot) | 每个父节点最多保留的子元素数量 |
|
|
388
371
|
| `maxTextLength` | `number` | `40` | 单节点文本截断长度(字符数) |
|
|
389
372
|
| `refStore` | `RefStore` | 自动创建 | hash ID 映射表(一般无需手动传入,WebAgent 自动管理) |
|
|
390
373
|
|
|
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
374
|
### 快照参数详细说明
|
|
411
375
|
|
|
412
376
|
#### `maxDepth`(遍历深度)
|
|
@@ -415,7 +379,7 @@ agent.clearHistory(); // 手动清空历史
|
|
|
415
379
|
|
|
416
380
|
- 设置过低(如 3-4):可能遗漏深层嵌套的表单控件或弹窗内容
|
|
417
381
|
- 设置过高(如 12+):快照体积膨胀,浪费 token 且可能包含大量无用结构层
|
|
418
|
-
- 推荐值:`
|
|
382
|
+
- 推荐值:`10-12`,覆盖大多数组件库深层嵌套场景
|
|
419
383
|
|
|
420
384
|
#### `viewportOnly`(视口裁剪)
|
|
421
385
|
|
|
@@ -442,10 +406,6 @@ agent.clearHistory(); // 手动清空历史
|
|
|
442
406
|
|
|
443
407
|
折叠规则:
|
|
444
408
|
- 没有 `id`、没有语义标签(如 `main`/`nav`)、没有交互属性、没有直接文本的纯布局div/span
|
|
445
|
-
- 浅层布局主干默认保留(避免页面主结构被过早折叠)
|
|
446
|
-
- 自身有事件绑定(`on*` 或追踪到 listeners)的容器优先保留
|
|
447
|
-
- 中浅层子树出现事件绑定时,在预算范围内尽量保留相关容器
|
|
448
|
-
- `svg` 装饰节点与 `__SVG_SPRITE_NODE__` sprite 容器会被过滤,避免噪音吞掉节点预算
|
|
449
409
|
- 子节点直接**提升**输出到父级位置
|
|
450
410
|
- 当同一折叠容器提升出多个相邻节点时,用 `collapsed-group` 括号块标记它们的来源关联
|
|
451
411
|
|
|
@@ -467,9 +427,9 @@ agent.clearHistory(); // 手动清空历史
|
|
|
467
427
|
|
|
468
428
|
| 场景 | maxDepth | viewportOnly | maxNodes | maxChildren | 原因 |
|
|
469
429
|
| --- | --- | --- | --- | --- | --- |
|
|
470
|
-
| `chat()` 首轮 |
|
|
471
|
-
| `page_info.snapshot`(loop 内) |
|
|
472
|
-
| `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 | 较小体积,适合局部更新 |
|
|
473
433
|
|
|
474
434
|
---
|
|
475
435
|
|
|
@@ -893,7 +853,7 @@ AutoPilot 内置 5 个工具,覆盖浏览器交互的核心能力。所有工
|
|
|
893
853
|
| --- | --- | --- | --- |
|
|
894
854
|
| `action` | `string` | ✅ | 信息获取动作类型 |
|
|
895
855
|
| `selector` | `string` | query_all | CSS 选择器(用于 `query_all` 动作) |
|
|
896
|
-
| `maxDepth` | `number` | snapshot | 最大遍历深度(默认
|
|
856
|
+
| `maxDepth` | `number` | snapshot | 最大遍历深度(默认 12) |
|
|
897
857
|
| `viewportOnly` | `boolean` | snapshot | 是否仅保留视口内元素(默认 true) |
|
|
898
858
|
| `pruneLayout` | `boolean` | snapshot | 是否折叠布局容器(默认 true) |
|
|
899
859
|
| `maxNodes` | `number` | snapshot | 最大节点数(默认 220) |
|
|
@@ -1000,7 +960,8 @@ src/
|
|
|
1000
960
|
│ │ ├── helpers.ts
|
|
1001
961
|
│ │ ├── snapshot.ts
|
|
1002
962
|
│ │ ├── messages.ts
|
|
1003
|
-
│ │
|
|
963
|
+
│ │ ├── recovery.ts
|
|
964
|
+
│ │ └── LOOP_MECHANISM.md
|
|
1004
965
|
│ └── ai-client/
|
|
1005
966
|
│ ├── index.ts
|
|
1006
967
|
│ ├── constants.ts
|
|
@@ -1008,26 +969,21 @@ src/
|
|
|
1008
969
|
│ ├── openai.ts
|
|
1009
970
|
│ ├── anthropic.ts
|
|
1010
971
|
│ ├── deepseek.ts
|
|
972
|
+
│ ├── doubao.ts
|
|
973
|
+
│ ├── qwen.ts
|
|
1011
974
|
│ └── sse.ts
|
|
1012
975
|
└── web/
|
|
1013
976
|
├── index.ts
|
|
1014
|
-
├── event-listener-tracker.ts # 全局事件监听追踪(WeakMap<Element, Set<string>>)
|
|
1015
977
|
├── dom-tool.ts # 兼容转发层(re-export)
|
|
1016
978
|
├── navigate-tool.ts # 兼容转发层(re-export)
|
|
1017
979
|
├── page-info-tool.ts # 兼容转发层(re-export)
|
|
1018
980
|
├── wait-tool.ts # 兼容转发层(re-export)
|
|
1019
981
|
├── evaluate-tool.ts # 兼容转发层(re-export)
|
|
982
|
+
├── event-listener-tracker.ts # 全局事件监听追踪器
|
|
1020
983
|
├── ref-store.ts
|
|
1021
984
|
├── messaging.ts
|
|
1022
985
|
└── 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)
|
|
986
|
+
├── dom-tool.ts
|
|
1031
987
|
├── navigate-tool.ts
|
|
1032
988
|
├── page-info-tool.ts
|
|
1033
989
|
├── wait-tool.ts
|
|
@@ -1144,7 +1100,7 @@ loop 对本轮返回做以下处理:
|
|
|
1144
1100
|
5. 刷新快照进入下一轮
|
|
1145
1101
|
6. 更新下一轮任务文本:
|
|
1146
1102
|
- 优先使用 `REMAINING`
|
|
1147
|
-
- 若缺失 `REMAINING`
|
|
1103
|
+
- 若缺失 `REMAINING` 且本轮有执行动作:按线性任务剔除做启发式推进(避免整段原任务重复)
|
|
1148
1104
|
- 若缺失 `REMAINING` 且本轮无执行进展:保持当前任务不推进(按协议回退)
|
|
1149
1105
|
7. 若“remaining 未完成 + 无工具调用”:
|
|
1150
1106
|
- 不直接结束
|
|
@@ -1173,8 +1129,6 @@ loop 对本轮返回做以下处理:
|
|
|
1173
1129
|
|
|
1174
1130
|
### 5) 线性任务剔除示例(标准范式)
|
|
1175
1131
|
|
|
1176
|
-
注意:该示例仅适用于任务文本中包含明确顺序连接词的场景(例如 `然后`、`next`、`->`)。
|
|
1177
|
-
|
|
1178
1132
|
总任务:`点击按钮 -> 输入框输入 "abc" -> 发送`
|
|
1179
1133
|
|
|
1180
1134
|
- 第 1 轮
|
|
@@ -1203,13 +1157,13 @@ loop 对本轮返回做以下处理:
|
|
|
1203
1157
|
|
|
1204
1158
|
### A. System Prompt(全局规则层)
|
|
1205
1159
|
|
|
1206
|
-
由 `src/core/system-prompt.ts`
|
|
1160
|
+
由 `src/core/system-prompt.ts` 生成,职责是定义不可变执行约束:
|
|
1207
1161
|
|
|
1208
|
-
-
|
|
1209
|
-
-
|
|
1210
|
-
-
|
|
1211
|
-
-
|
|
1212
|
-
-
|
|
1162
|
+
- 从当前快照直接执行,不复述任务
|
|
1163
|
+
- 任务按“剔除模型”推进(current + previous + this-round -> new remaining)
|
|
1164
|
+
- 禁止 `page_info` 作为规划手段
|
|
1165
|
+
- 可见目标尽量同轮批量执行
|
|
1166
|
+
- DOM 会变化的动作执行后在下一轮继续
|
|
1213
1167
|
- 统一输出 `REMAINING` 协议
|
|
1214
1168
|
|
|
1215
1169
|
### B. Round Messages(轮次状态层)
|
|
@@ -1231,7 +1185,7 @@ loop 对本轮返回做以下处理:
|
|
|
1231
1185
|
- 首轮使用前端注入的 `initialSnapshot`
|
|
1232
1186
|
- 每轮执行后刷新快照
|
|
1233
1187
|
- 推进 `remainingInstruction`
|
|
1234
|
-
- `REMAINING`
|
|
1188
|
+
- `REMAINING` 缺失且本轮有执行动作时:按线性任务剔除做启发式推进
|
|
1235
1189
|
- `REMAINING` 缺失且本轮无执行进展时:保持当前 remaining
|
|
1236
1190
|
- 防空转、防重复、防无限循环
|
|
1237
1191
|
- DOM 变更动作触发强制断轮(等待下一轮新快照)
|
|
@@ -1276,6 +1230,7 @@ flowchart LR
|
|
|
1276
1230
|
subgraph Web[web 层]
|
|
1277
1231
|
WI[web/index.ts\nWebAgent]
|
|
1278
1232
|
WT[web tools]
|
|
1233
|
+
ELT[event-listener-tracker.ts]
|
|
1279
1234
|
RS[ref-store.ts]
|
|
1280
1235
|
MG[messaging.ts]
|
|
1281
1236
|
end
|
|
@@ -1292,6 +1247,7 @@ flowchart LR
|
|
|
1292
1247
|
WI --> SP
|
|
1293
1248
|
WI --> WT
|
|
1294
1249
|
WT --> RS
|
|
1250
|
+
WT --> ELT
|
|
1295
1251
|
WI --> MG
|
|
1296
1252
|
|
|
1297
1253
|
AL --> AI
|
|
@@ -1493,8 +1449,37 @@ agent.registerTool({
|
|
|
1493
1449
|
- `web`(浏览器实现):
|
|
1494
1450
|
- `WebAgent`:入口编排、记忆、autoSnapshot、callbacks
|
|
1495
1451
|
- `tools`:DOM/导航/页面信息/等待/evaluate
|
|
1452
|
+
- `event-listener-tracker`:全局事件监听追踪(`EventTarget.prototype` 补丁)
|
|
1496
1453
|
- `RefStore`:`#hashID -> Element` 映射
|
|
1497
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
|
+
|
|
1498
1483
|
#### 1.2 Chat 生命周期(从 `WebAgent.chat()` 到收敛)
|
|
1499
1484
|
|
|
1500
1485
|
1. 创建本次会话 `RefStore`,并激活到 DOM 工具层。
|
|
@@ -1547,7 +1532,7 @@ agent.registerTool({
|
|
|
1547
1532
|
|
|
1548
1533
|
#### 2.3 缺失协议时的回退策略
|
|
1549
1534
|
|
|
1550
|
-
-
|
|
1535
|
+
- 若本轮有执行动作:启发式线性剔除(`reduceRemainingHeuristically`)
|
|
1551
1536
|
- 若本轮无推进:保持 remaining 不变,并标记协议违约风险
|
|
1552
1537
|
|
|
1553
1538
|
#### 2.4 协议修复回合(Protocol Violation Round)
|
|
@@ -1614,14 +1599,14 @@ agent.registerTool({
|
|
|
1614
1599
|
#### 5.2 Core 与 Web 的参数默认值差异(很重要)
|
|
1615
1600
|
|
|
1616
1601
|
- `core/agent-loop/snapshot.ts` 默认读取:
|
|
1617
|
-
- `maxDepth=
|
|
1602
|
+
- `maxDepth=12`
|
|
1618
1603
|
- `viewportOnly=false`(优先完整性)
|
|
1619
1604
|
- `pruneLayout=true`
|
|
1620
1605
|
- `maxNodes=500`
|
|
1621
1606
|
- `maxChildren=30`
|
|
1622
1607
|
- `maxTextLength=40`
|
|
1623
1608
|
- `web/tools/page-info-tool.ts` 的 `snapshot` action 默认值:
|
|
1624
|
-
- `maxDepth=
|
|
1609
|
+
- `maxDepth=12`
|
|
1625
1610
|
- `viewportOnly=true`
|
|
1626
1611
|
- `pruneLayout=true`
|
|
1627
1612
|
- `maxNodes=220`
|
|
@@ -1640,13 +1625,17 @@ agent.registerTool({
|
|
|
1640
1625
|
- 子节点提升输出
|
|
1641
1626
|
- 多子节点提升时输出 `collapsed-group` 括号块
|
|
1642
1627
|
5. 交互优先:同层先输出 interactive children
|
|
1643
|
-
6.
|
|
1644
|
-
7.
|
|
1645
|
-
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,..."` 简写,帮助模型识别真实交互链路
|
|
1646
1634
|
|
|
1647
1635
|
#### 5.4 RefStore 与 hash selector
|
|
1648
1636
|
|
|
1649
|
-
-
|
|
1637
|
+
- 快照中仅交互元素携带 `#hashId`(而非长 CSS/XPath),非交互元素(标题/标签/纯文本)无标识
|
|
1638
|
+
- 交互性判定:运行时事件绑定(`hasInteractiveTrackedEvents`)> 语义标签(`input/button/a`)> ARIA role(`INTERACTIVE_ROLES` 集合)> `tabindex`/`contenteditable`
|
|
1650
1639
|
- 工具执行时优先按 hash 命中真实 Element
|
|
1651
1640
|
- 页面变化/恢复快照时会重建映射,避免旧引用污染
|
|
1652
1641
|
|
|
@@ -1654,7 +1643,7 @@ agent.registerTool({
|
|
|
1654
1643
|
|
|
1655
1644
|
### 6. Tools 能力总表(详细)
|
|
1656
1645
|
|
|
1657
|
-
#### 6.1 `dom` 工具(`src/web/tools/dom-tool
|
|
1646
|
+
#### 6.1 `dom` 工具(`src/web/tools/dom-tool.ts`)
|
|
1658
1647
|
|
|
1659
1648
|
支持动作:
|
|
1660
1649
|
|
|
@@ -1763,36 +1752,36 @@ agent.registerTool({
|
|
|
1763
1752
|
|
|
1764
1753
|
1. **System Prompt(稳定规则层)**
|
|
1765
1754
|
- 由 `buildSystemPrompt()` 生成
|
|
1766
|
-
-
|
|
1767
|
-
- 包含 Targeting Rules、Constraints、Listener Abbreviations
|
|
1768
|
-
- 工具部分由各工具 `t.description` 动态注入,prompt 不重复工具能力描述
|
|
1755
|
+
- 永久规则:快照优先、批处理、输入顺序、禁止 page_info、REMAINING 协议
|
|
1769
1756
|
2. **Round Message(动态状态层)**
|
|
1770
1757
|
- 由 `buildCompactMessages()` 生成
|
|
1771
|
-
- 包含当前 remaining、
|
|
1758
|
+
- 包含当前 remaining、done steps、上轮计划、上轮输出归一化、最新快照
|
|
1772
1759
|
3. **Recovery Context(修复层)**
|
|
1773
1760
|
- Not-found retry context
|
|
1774
1761
|
- Protocol violation hint
|
|
1775
1762
|
|
|
1776
1763
|
#### 7.2 System Prompt 的关键规则(当前实现)
|
|
1777
1764
|
|
|
1778
|
-
`buildSystemPrompt()`
|
|
1765
|
+
`buildSystemPrompt()` 中的核心约束(英文原文语义):
|
|
1779
1766
|
|
|
1780
|
-
-
|
|
1781
|
-
-
|
|
1782
|
-
-
|
|
1783
|
-
-
|
|
1784
|
-
-
|
|
1785
|
-
-
|
|
1767
|
+
- 从“当前快照 + 当前 remaining”直接执行,不复述任务
|
|
1768
|
+
- 每轮按 task reduction 推进
|
|
1769
|
+
- 仅交互元素(有事件/输入框/按钮/链接等)携带 `#hashID`,无 `#hashID` 的元素为上下文
|
|
1770
|
+
- 角色优先标签:方括号标签可能是 ARIA role 而非 HTML tag(如 `[combobox]`/`[slider]`),表示交互模式
|
|
1771
|
+
- 使用 hash selector,不猜 CSS
|
|
1772
|
+
- 可见且互不依赖的动作同轮批量执行
|
|
1773
|
+
- 输入顺序强约束:`focus/click -> fill/type/select_option`
|
|
1774
|
+
- 多字段交替对执行(防止 focus-only 空轮)
|
|
1775
|
+
- DOM 结构变化动作后断轮
|
|
1776
|
+
- 禁用 `page_info` 作为规划手段
|
|
1777
|
+
- 输出 `REMAINING: ...` 或 `REMAINING: DONE`
|
|
1786
1778
|
|
|
1787
1779
|
#### 7.3 Round 0 与 Round 1+ 差异
|
|
1788
1780
|
|
|
1789
1781
|
- Round 0:原始任务 + 首轮快照
|
|
1790
|
-
- Round 1
|
|
1782
|
+
- Round 1+:不再重复原始用户输入,改为“remaining 驱动”
|
|
1791
1783
|
|
|
1792
|
-
|
|
1793
|
-
- 防止 remaining 因模型错误缩减而偏离原始目标(任务漂移)
|
|
1794
|
-
- 标注 `reference only — do NOT restart from scratch`,避免模型回头重做
|
|
1795
|
-
- 让模型能随时交叉校验当前行动是否符合原始意图
|
|
1784
|
+
这能显著降低“回头重做”的概率。
|
|
1796
1785
|
|
|
1797
1786
|
#### 7.4 显式 UI 意图判定
|
|
1798
1787
|
|
package/dist/index.d.mts
CHANGED
|
@@ -164,16 +164,6 @@ declare class RefStore {
|
|
|
164
164
|
get(id: string): Element | undefined;
|
|
165
165
|
/** 检查 hash ID 是否存在 */
|
|
166
166
|
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
167
|
/** 清空所有映射 */
|
|
178
168
|
clear(): void;
|
|
179
169
|
/**
|
|
@@ -192,7 +182,7 @@ declare class RefStore {
|
|
|
192
182
|
//#region src/web/tools/page-info-tool.d.ts
|
|
193
183
|
/** 快照配置选项 */
|
|
194
184
|
type SnapshotOptions = {
|
|
195
|
-
/** 最大遍历深度(默认
|
|
185
|
+
/** 最大遍历深度(默认 12) */maxDepth?: number;
|
|
196
186
|
/**
|
|
197
187
|
* 视口裁剪:只保留与视口相交的元素(默认 true)。
|
|
198
188
|
* 开启后,完全在视口外的元素会被跳过,大幅减少 token 消耗。
|
|
@@ -210,8 +200,8 @@ type SnapshotOptions = {
|
|
|
210
200
|
* 传入 RefStore 实例后,每个元素使用确定性 hash ID 替代完整 XPath,
|
|
211
201
|
* 大幅减少 token 消耗。dom-tool 通过 RefStore.get(id) 解析回 DOM 元素。
|
|
212
202
|
*/
|
|
213
|
-
refStore?: RefStore; /** 最大输出节点数(默认
|
|
214
|
-
maxNodes?: number; /** 每个父节点最多输出的子元素数(默认
|
|
203
|
+
refStore?: RefStore; /** 最大输出节点数(默认 220),超过后停止继续遍历。 */
|
|
204
|
+
maxNodes?: number; /** 每个父节点最多输出的子元素数(默认 25),超出部分会折叠。 */
|
|
215
205
|
maxChildren?: number; /** 文本截断长度(默认 40)。 */
|
|
216
206
|
maxTextLength?: number;
|
|
217
207
|
/**
|
|
@@ -249,7 +239,7 @@ type SnapshotOptions = {
|
|
|
249
239
|
declare function generateSnapshot(root?: Element, options?: SnapshotOptions | number): string;
|
|
250
240
|
declare function createPageInfoTool(): ToolDefinition;
|
|
251
241
|
//#endregion
|
|
252
|
-
//#region src/web/tools/dom-tool
|
|
242
|
+
//#region src/web/tools/dom-tool.d.ts
|
|
253
243
|
declare function createDomTool(): ToolDefinition;
|
|
254
244
|
//#endregion
|
|
255
245
|
//#region src/web/tools/navigate-tool.d.ts
|
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
|
|
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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"}
|