agentpage 0.0.24 → 0.0.26
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 +102 -38
- 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。
|
|
@@ -145,8 +149,8 @@ import { WebAgent } from "agentpage";
|
|
|
145
149
|
|
|
146
150
|
const agent = new WebAgent({
|
|
147
151
|
token: "your-api-key",
|
|
148
|
-
provider: "
|
|
149
|
-
model: "
|
|
152
|
+
provider: "doubao", // openai | copilot | anthropic | deepseek | doubao | qwen
|
|
153
|
+
model: "doubao-1.5-pro-32k",
|
|
150
154
|
// 用户可自定义 Prompt 规则(项目级/路由级)
|
|
151
155
|
systemPrompt: "You are an assistant for this route. Follow route safety constraints.",
|
|
152
156
|
memory: true,
|
|
@@ -173,6 +177,23 @@ console.log(result.reply);
|
|
|
173
177
|
pnpm demo
|
|
174
178
|
```
|
|
175
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
|
+
|
|
176
197
|
### 按路由构建 AI Skill(推荐范式)
|
|
177
198
|
|
|
178
199
|
```ts
|
|
@@ -227,9 +248,9 @@ applyRouteSkill(location.pathname);
|
|
|
227
248
|
| 参数 | 类型 | 默认值 | 说明 |
|
|
228
249
|
| --- | --- | --- | --- |
|
|
229
250
|
| `client` | `AIClient` | - | 自定义 AI 客户端;传入后优先使用该实例,忽略 token/provider/model/baseURL |
|
|
230
|
-
| `token` | `string` | `""` | API Token(GitHub PAT / OpenAI API Key / Anthropic Key / DeepSeek Key) |
|
|
231
|
-
| `provider` | `string` | `"copilot"` | AI 服务商:`copilot` / `openai` / `anthropic` / `deepseek` |
|
|
232
|
-
| `model` | `string` | `"gpt-4o"` | 模型名称(需与 provider 匹配,如 `
|
|
251
|
+
| `token` | `string` | `""` | API Token(GitHub PAT / OpenAI API Key / Anthropic Key / DeepSeek Key / Doubao Ark Key / DashScope Key) |
|
|
252
|
+
| `provider` | `string` | `"copilot"` | AI 服务商:`copilot` / `openai` / `anthropic` / `deepseek` / `doubao` / `qwen` |
|
|
253
|
+
| `model` | `string` | `"gpt-4o"` | 模型名称(需与 provider 匹配,如 `doubao-1.5-pro-32k`、`qwen-plus`、`deepseek-chat`) |
|
|
233
254
|
| `baseURL` | `string` | - | 自定义 API 基础地址(用于代理/私有部署,覆盖 provider 默认端点) |
|
|
234
255
|
| `stream` | `boolean` | `true` | 是否启用流式返回(SSE);关闭后使用 JSON 非流式响应 |
|
|
235
256
|
| `dryRun` | `boolean` | `false` | 干运行模式:仅输出 AI 计划调用的工具列表,不执行真实操作 |
|
|
@@ -238,6 +259,7 @@ applyRouteSkill(location.pathname);
|
|
|
238
259
|
| `memory` | `boolean` | `false` | 是否开启多轮对话记忆(跨 chat 调用保留历史消息) |
|
|
239
260
|
| `autoSnapshot` | `boolean` | `true` | chat 前是否自动生成首轮页面快照并注入 system prompt |
|
|
240
261
|
| `snapshotOptions` | `SnapshotOptions` | `{}` | 快照生成参数覆盖(深度、裁剪、剪枝、节点上限等) |
|
|
262
|
+
| `roundStabilityWait` | `RoundStabilityWaitOptions` | `{ enabled: true }` | 轮次后稳定等待配置(loading hidden + DOM stable);`loadingSelectors` 为“与默认值合并去重”,不会覆盖默认列表 |
|
|
241
263
|
|
|
242
264
|
### 参数详细说明
|
|
243
265
|
|
|
@@ -282,6 +304,8 @@ type AIClient = {
|
|
|
282
304
|
| `openai` | `https://api.openai.com/v1` | `gpt-4o` / `gpt-4o-mini` | 标准 OpenAI 接口 |
|
|
283
305
|
| `anthropic` | `https://api.anthropic.com` | `claude-sonnet-4-20250514` | Anthropic 原生接口 |
|
|
284
306
|
| `deepseek` | `https://api.deepseek.com` | `deepseek-chat` | DeepSeek 接口 |
|
|
307
|
+
| `doubao` | `https://ark.cn-beijing.volces.com/api/v3` | `doubao-1.5-pro-32k` | 火山引擎 Ark(OpenAI 兼容) |
|
|
308
|
+
| `qwen` | `https://dashscope.aliyuncs.com/compatible-mode/v1` | `qwen-plus` | 阿里云百炼兼容模式(OpenAI 兼容) |
|
|
285
309
|
|
|
286
310
|
#### `systemPrompt`(Prompt 注册与维护)
|
|
287
311
|
|
|
@@ -364,6 +388,25 @@ agent.clearHistory(); // 手动清空历史
|
|
|
364
388
|
| `maxTextLength` | `number` | `40` | 单节点文本截断长度(字符数) |
|
|
365
389
|
| `refStore` | `RefStore` | 自动创建 | hash ID 映射表(一般无需手动传入,WebAgent 自动管理) |
|
|
366
390
|
|
|
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
|
+
|
|
367
410
|
### 快照参数详细说明
|
|
368
411
|
|
|
369
412
|
#### `maxDepth`(遍历深度)
|
|
@@ -702,7 +745,7 @@ AutoPilot 内置 5 个工具,覆盖浏览器交互的核心能力。所有工
|
|
|
702
745
|
| `attribute` | `string` | get_attr/set_attr | 属性名称 |
|
|
703
746
|
| `className` | `string` | add_class/remove_class | CSS 类名(旧参数名,已被 `value` 兼容) |
|
|
704
747
|
| `clickCount` | `number` | click | 点击次数(默认 1,双击传 2,三击传 3) |
|
|
705
|
-
| `waitMs` | `number` | 所有动作 | 等待元素出现的超时时间(毫秒,默认
|
|
748
|
+
| `waitMs` | `number` | 所有动作 | 等待元素出现的超时时间(毫秒,默认 1200) |
|
|
706
749
|
| `waitSeconds` | `number` | 所有动作 | 等待超时(秒,`waitMs` 优先级更高) |
|
|
707
750
|
| `force` | `boolean` | 所有动作 | 跳过 actionability 检查(默认 false) |
|
|
708
751
|
|
|
@@ -812,7 +855,7 @@ AutoPilot 内置 5 个工具,覆盖浏览器交互的核心能力。所有工
|
|
|
812
855
|
| `selector` | `string` | wait_for_selector/hidden | 目标元素选择器 |
|
|
813
856
|
| `state` | `string` | wait_for_selector | 目标状态:`attached`/`visible`/`hidden`/`detached` |
|
|
814
857
|
| `text` | `string` | wait_for_text | 要等待出现的文本内容 |
|
|
815
|
-
| `timeout` | `number` | 所有动作 | 超时时间(毫秒,默认
|
|
858
|
+
| `timeout` | `number` | 所有动作 | 超时时间(毫秒,默认 6000) |
|
|
816
859
|
| `quietMs` | `number` | wait_for_stable | DOM 静默窗口时长(毫秒,默认 300) |
|
|
817
860
|
|
|
818
861
|
**动作详解:**
|
|
@@ -964,6 +1007,7 @@ src/
|
|
|
964
1007
|
│ └── sse.ts
|
|
965
1008
|
└── web/
|
|
966
1009
|
├── index.ts
|
|
1010
|
+
├── event-listener-tracker.ts # 全局事件监听追踪(WeakMap<Element, Set<string>>)
|
|
967
1011
|
├── dom-tool.ts # 兼容转发层(re-export)
|
|
968
1012
|
├── navigate-tool.ts # 兼容转发层(re-export)
|
|
969
1013
|
├── page-info-tool.ts # 兼容转发层(re-export)
|
|
@@ -972,7 +1016,14 @@ src/
|
|
|
972
1016
|
├── ref-store.ts
|
|
973
1017
|
├── messaging.ts
|
|
974
1018
|
└── tools/
|
|
975
|
-
├── dom-tool
|
|
1019
|
+
├── dom-tool/
|
|
1020
|
+
│ ├── index.ts # createDomTool 入口 + schema + execute 路由
|
|
1021
|
+
│ ├── constants.ts # 常量(DEFAULT_WAIT_MS, KEY_CODE_MAP 等)
|
|
1022
|
+
│ ├── query.ts # 元素查找、RefStore 管理、describeElement
|
|
1023
|
+
│ ├── actionability.ts # 可操作性检查(可见/禁用/可编辑/稳定/命中)
|
|
1024
|
+
│ ├── events.ts # 事件派发(click/hover/input 链、键盘 press)
|
|
1025
|
+
│ ├── resolve.ts # 目标解析(retarget、checkable/editable 穿透、ARIA widget→input 穿透)
|
|
1026
|
+
│ └── dropdown.ts # 自定义下拉增强(findVisibleOptionByText)
|
|
976
1027
|
├── navigate-tool.ts
|
|
977
1028
|
├── page-info-tool.ts
|
|
978
1029
|
├── wait-tool.ts
|
|
@@ -1034,6 +1085,8 @@ AI 每一轮不是“凭记忆猜页面”,而是基于最新快照选择可
|
|
|
1034
1085
|
例子:
|
|
1035
1086
|
- 可同轮:同时填写两个已可见输入框
|
|
1036
1087
|
- 不可同轮:点击“打开弹窗”后立即填写弹窗字段(应等下一轮新快照)
|
|
1088
|
+
- 当前实现:若本轮出现潜在 DOM 变化动作,轮次结束会自动执行双重等待(先 loading hidden,再 DOM quiet window),默认 `quietMs=200`、`timeoutMs=4000`。
|
|
1089
|
+
- `loadingSelectors` 默认内置 AntD / Element Plus / BK / TDesign(TD)及通用加载态选择器;用户自定义会在默认列表基础上追加并去重,不会覆盖默认值。
|
|
1037
1090
|
|
|
1038
1091
|
---
|
|
1039
1092
|
|
|
@@ -1083,12 +1136,13 @@ loop 对本轮返回做以下处理:
|
|
|
1083
1136
|
1. 执行工具调用批次
|
|
1084
1137
|
2. 拦截 `page_info.*`(在 loop 内视为冗余,不让其成为主流程)
|
|
1085
1138
|
3. 处理恢复(元素找不到时自动刷新快照)
|
|
1086
|
-
4.
|
|
1087
|
-
5.
|
|
1139
|
+
4. 若本轮存在潜在 DOM 变化动作:执行轮次后稳定等待(loading hidden + DOM stable)
|
|
1140
|
+
5. 刷新快照进入下一轮
|
|
1141
|
+
6. 更新下一轮任务文本:
|
|
1088
1142
|
- 优先使用 `REMAINING`
|
|
1089
1143
|
- 若缺失 `REMAINING` 且本轮有执行动作:按线性任务剔除做启发式推进(避免整段原任务重复)
|
|
1090
1144
|
- 若缺失 `REMAINING` 且本轮无执行进展:保持当前任务不推进(按协议回退)
|
|
1091
|
-
|
|
1145
|
+
7. 若“remaining 未完成 + 无工具调用”:
|
|
1092
1146
|
- 不直接结束
|
|
1093
1147
|
- 下一轮注入 `Protocol violation` 强约束提示,要求“要么给可执行工具调用,要么严格 `REMAINING: DONE`”
|
|
1094
1148
|
|
|
@@ -1099,12 +1153,12 @@ loop 对本轮返回做以下处理:
|
|
|
1099
1153
|
1. 收集失败工具调用(name/input)及失败原因
|
|
1100
1154
|
2. 将“失败工具集合 + 最新快照 + 当前任务”一起发给模型重试
|
|
1101
1155
|
3. 在消息中标注重试次数:`attempt x/y`
|
|
1102
|
-
4. 若仍未命中,默认 `await
|
|
1156
|
+
4. 若仍未命中,默认 `await 1000ms` 后刷新快照再重试
|
|
1103
1157
|
5. 超过最大尝试次数后退出重试流,交由模型给出剩余任务或结束
|
|
1104
1158
|
|
|
1105
1159
|
默认参数:
|
|
1106
1160
|
- `DEFAULT_NOT_FOUND_RETRY_ROUNDS = 2`
|
|
1107
|
-
- `DEFAULT_NOT_FOUND_RETRY_WAIT_MS =
|
|
1161
|
+
- `DEFAULT_NOT_FOUND_RETRY_WAIT_MS = 1000`
|
|
1108
1162
|
|
|
1109
1163
|
### 4) 停机条件
|
|
1110
1164
|
|
|
@@ -1143,13 +1197,13 @@ loop 对本轮返回做以下处理:
|
|
|
1143
1197
|
|
|
1144
1198
|
### A. System Prompt(全局规则层)
|
|
1145
1199
|
|
|
1146
|
-
由 `src/core/system-prompt.ts`
|
|
1200
|
+
由 `src/core/system-prompt.ts` 生成,采用 Decision Framework 架构:
|
|
1147
1201
|
|
|
1148
|
-
-
|
|
1149
|
-
-
|
|
1150
|
-
-
|
|
1151
|
-
-
|
|
1152
|
-
-
|
|
1202
|
+
- 五阶段决策流:ANALYZE → ASSESS → CHOOSE → EXECUTE → OUTPUT
|
|
1203
|
+
- Targeting Rules:hash selector 优先、ordinal 1-based 视觉序
|
|
1204
|
+
- Constraints:form-input 顺序、DOM 变化断轮、禁止冗余 page_info
|
|
1205
|
+
- Listener Abbreviations:快照中缩写到原始事件的映射
|
|
1206
|
+
- 工具部分由各工具 `t.description` 动态注入,不在 prompt 正文重复
|
|
1153
1207
|
- 统一输出 `REMAINING` 协议
|
|
1154
1208
|
|
|
1155
1209
|
### B. Round Messages(轮次状态层)
|
|
@@ -1429,7 +1483,7 @@ agent.registerTool({
|
|
|
1429
1483
|
- `agent-loop`:轮次编排、停机判定、恢复/重试、指标汇总
|
|
1430
1484
|
- `system-prompt`:系统规则模板
|
|
1431
1485
|
- `tool-registry`:工具注册/分发/错误兜底
|
|
1432
|
-
- `ai-client`:多 provider 协议适配(OpenAI/Copilot/Anthropic/DeepSeek)
|
|
1486
|
+
- `ai-client`:多 provider 协议适配(OpenAI/Copilot/Anthropic/DeepSeek/Doubao/Qwen)
|
|
1433
1487
|
- `web`(浏览器实现):
|
|
1434
1488
|
- `WebAgent`:入口编排、记忆、autoSnapshot、callbacks
|
|
1435
1489
|
- `tools`:DOM/导航/页面信息/等待/evaluate
|
|
@@ -1523,7 +1577,7 @@ agent.registerTool({
|
|
|
1523
1577
|
| 冗余 page_info 拦截 | `page_info.snapshot/query_all/get_url/get_title/get_viewport` | - | 直接返回拦截结果,不执行真实调用 | `recovery.ts#checkRedundantSnapshot` |
|
|
1524
1578
|
| 连续 snapshot 防抖 | 连续 page_info.snapshot | 阈值=2 | 标记 `REDUNDANT_SNAPSHOT` | `recovery.ts#applySnapshotDebounce` |
|
|
1525
1579
|
| 元素未找到自动恢复 | `dom` 且结果为 element not found | `DEFAULT_ACTION_RECOVERY_ROUNDS=2`,`DEFAULT_RECOVERY_WAIT_MS=100` | 等待 -> 刷新快照 -> 返回 recovery 结果 | `recovery.ts#handleElementRecovery` |
|
|
1526
|
-
| Not-found 重试对话流 | 本轮有 not-found 失败任务 | `DEFAULT_NOT_FOUND_RETRY_ROUNDS=2`,`DEFAULT_NOT_FOUND_RETRY_WAIT_MS=
|
|
1580
|
+
| Not-found 重试对话流 | 本轮有 not-found 失败任务 | `DEFAULT_NOT_FOUND_RETRY_ROUNDS=2`,`DEFAULT_NOT_FOUND_RETRY_WAIT_MS=1000` | 注入失败任务上下文 + attempt x/y,必要时等待后重试 | `index.ts` 主循环 |
|
|
1527
1581
|
| 导航后上下文刷新 | `navigate` 成功且动作为 goto/back/forward/reload | - | 立即刷新快照 | `recovery.ts#handleNavigationUrlChange` |
|
|
1528
1582
|
| 空转检测 | 连续只读轮次 | 连续 2 轮 | 返回 -1 终止 | `recovery.ts#detectIdleLoop` |
|
|
1529
1583
|
|
|
@@ -1594,7 +1648,7 @@ agent.registerTool({
|
|
|
1594
1648
|
|
|
1595
1649
|
### 6. Tools 能力总表(详细)
|
|
1596
1650
|
|
|
1597
|
-
#### 6.1 `dom` 工具(`src/web/tools/dom-tool
|
|
1651
|
+
#### 6.1 `dom` 工具(`src/web/tools/dom-tool/`)
|
|
1598
1652
|
|
|
1599
1653
|
支持动作:
|
|
1600
1654
|
|
|
@@ -1703,7 +1757,9 @@ agent.registerTool({
|
|
|
1703
1757
|
|
|
1704
1758
|
1. **System Prompt(稳定规则层)**
|
|
1705
1759
|
- 由 `buildSystemPrompt()` 生成
|
|
1706
|
-
-
|
|
1760
|
+
- 采用 Decision Framework 架构:ANALYZE → ASSESS → CHOOSE → EXECUTE → OUTPUT
|
|
1761
|
+
- 包含 Targeting Rules、Constraints、Listener Abbreviations
|
|
1762
|
+
- 工具部分由各工具 `t.description` 动态注入,prompt 不重复工具能力描述
|
|
1707
1763
|
2. **Round Message(动态状态层)**
|
|
1708
1764
|
- 由 `buildCompactMessages()` 生成
|
|
1709
1765
|
- 包含当前 remaining、done steps、上轮计划、上轮输出归一化、最新快照
|
|
@@ -1713,17 +1769,14 @@ agent.registerTool({
|
|
|
1713
1769
|
|
|
1714
1770
|
#### 7.2 System Prompt 的关键规则(当前实现)
|
|
1715
1771
|
|
|
1716
|
-
`buildSystemPrompt()`
|
|
1772
|
+
`buildSystemPrompt()` 采用 Decision Framework 架构,不再逐条罗列规则:
|
|
1717
1773
|
|
|
1718
|
-
-
|
|
1719
|
-
-
|
|
1720
|
-
-
|
|
1721
|
-
-
|
|
1722
|
-
-
|
|
1723
|
-
-
|
|
1724
|
-
- DOM 结构变化动作后断轮
|
|
1725
|
-
- 禁用 `page_info` 作为规划手段
|
|
1726
|
-
- 输出 `REMAINING: ...` 或 `REMAINING: DONE`
|
|
1774
|
+
- 五阶段决策流:ANALYZE snapshot → ASSESS targets → CHOOSE action → EXECUTE → OUTPUT
|
|
1775
|
+
- Targeting Rules:hash selector 优先、ordinal 为 1-based 视觉序
|
|
1776
|
+
- Constraints:form-input 顺序约束(focus/click → fill/type/select_option)、DOM 结构变化后断轮
|
|
1777
|
+
- Listener Abbreviations:`clk`/`inp`/`chg`/`kdn`/`kup` 等缩写映射
|
|
1778
|
+
- 工具描述去重:工具部分完全由各工具 `t.description` 动态注入,prompt 不再重复
|
|
1779
|
+
- 统一输出 `REMAINING: <text>` 或 `REMAINING: DONE`
|
|
1727
1780
|
|
|
1728
1781
|
#### 7.3 Round 0 与 Round 1+ 差异
|
|
1729
1782
|
|
|
@@ -1776,27 +1829,38 @@ agent.registerTool({
|
|
|
1776
1829
|
- `DEFAULT_RECOVERY_WAIT_MS = 100`
|
|
1777
1830
|
- `DEFAULT_ACTION_RECOVERY_ROUNDS = 2`
|
|
1778
1831
|
- `DEFAULT_NOT_FOUND_RETRY_ROUNDS = 2`
|
|
1779
|
-
- `DEFAULT_NOT_FOUND_RETRY_WAIT_MS =
|
|
1832
|
+
- `DEFAULT_NOT_FOUND_RETRY_WAIT_MS = 1000`
|
|
1780
1833
|
|
|
1781
1834
|
`src/web/tools/wait-tool.ts`:
|
|
1782
1835
|
|
|
1783
|
-
- `DEFAULT_TIMEOUT =
|
|
1836
|
+
- `DEFAULT_TIMEOUT = 6000`
|
|
1784
1837
|
|
|
1785
1838
|
---
|
|
1786
1839
|
|
|
1787
1840
|
### 10. 文档与实现一致性清单(维护者必看)
|
|
1788
1841
|
|
|
1842
|
+
Agent Loop 机制权威文档:`src/core/agent-loop/LOOP_MECHANISM.md`。
|
|
1843
|
+
|
|
1789
1844
|
任何涉及“渐进式任务消费”的改动,至少同步以下文件:
|
|
1790
1845
|
|
|
1791
1846
|
1. `src/core/agent-loop/messages.ts`(输入语义)
|
|
1792
1847
|
2. `src/core/agent-loop/index.ts`(停机判定与推进逻辑)
|
|
1793
|
-
3. `
|
|
1848
|
+
3. `src/core/agent-loop/LOOP_MECHANISM.md`(机制权威说明)
|
|
1849
|
+
4. `README.md`(机制说明)
|
|
1794
1850
|
|
|
1795
1851
|
任何涉及“找不到元素重试流”的改动,至少同步:
|
|
1796
1852
|
|
|
1797
1853
|
1. `src/core/agent-loop/index.ts`
|
|
1798
1854
|
2. `src/core/agent-loop/recovery.ts`
|
|
1799
|
-
3. `
|
|
1855
|
+
3. `src/core/agent-loop/LOOP_MECHANISM.md`
|
|
1856
|
+
4. `README.md`
|
|
1857
|
+
|
|
1858
|
+
任何涉及 provider 新增/调整的改动,至少同步:
|
|
1859
|
+
|
|
1860
|
+
1. `src/core/ai-client/index.ts`(provider 路由)
|
|
1861
|
+
2. `src/core/ai-client/constants.ts`(默认端点)
|
|
1862
|
+
3. `src/web/index.ts`(WebAgentOptions 注释/提示)
|
|
1863
|
+
4. `README.md`(配置示例与支持矩阵)
|
|
1800
1864
|
|
|
1801
1865
|
这样才能保证“实现、提示词、文档”三者一致,不出现行为漂移。
|
|
1802
1866
|
|
|
@@ -1848,4 +1912,4 @@ MIT
|
|
|
1848
1912
|
4. **RefStore - 生命周期图**:从 `chat()` 创建到 `clear()` 释放的完整流程
|
|
1849
1913
|
5. **AI Client - 自定义接入**:`BaseAIClient` 和纯对象两种方式的代码示例
|
|
1850
1914
|
6. **快照格式 - 生成管线**:从 `document.body` 到最终文本的 10 步管线流程
|
|
1851
|
-
7. **错误处理 - 恢复常量**:`DEFAULT_ACTION_RECOVERY_ROUNDS=2` / `DEFAULT_NOT_FOUND_RETRY_ROUNDS=2` / `DEFAULT_NOT_FOUND_RETRY_WAIT_MS=
|
|
1915
|
+
7. **错误处理 - 恢复常量**:`DEFAULT_ACTION_RECOVERY_ROUNDS=2` / `DEFAULT_NOT_FOUND_RETRY_ROUNDS=2` / `DEFAULT_NOT_FOUND_RETRY_WAIT_MS=1000` 等关键参数说明
|