ai-browser 0.2.3 → 0.2.5
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 +62 -5
- package/dist/agent/agent-loop.d.ts +8 -2
- package/dist/agent/agent-loop.d.ts.map +1 -1
- package/dist/agent/agent-loop.js +138 -86
- package/dist/agent/agent-loop.js.map +1 -1
- package/dist/agent/config.d.ts +5 -0
- package/dist/agent/config.d.ts.map +1 -1
- package/dist/agent/config.js +5 -0
- package/dist/agent/config.js.map +1 -1
- package/dist/agent/content-budget.d.ts +11 -0
- package/dist/agent/content-budget.d.ts.map +1 -0
- package/dist/agent/content-budget.js +129 -0
- package/dist/agent/content-budget.js.map +1 -0
- package/dist/agent/conversation-manager.d.ts +48 -0
- package/dist/agent/conversation-manager.d.ts.map +1 -0
- package/dist/agent/conversation-manager.js +157 -0
- package/dist/agent/conversation-manager.js.map +1 -0
- package/dist/agent/error-recovery.d.ts +29 -0
- package/dist/agent/error-recovery.d.ts.map +1 -0
- package/dist/agent/error-recovery.js +72 -0
- package/dist/agent/error-recovery.js.map +1 -0
- package/dist/agent/page-state-cache.d.ts +22 -0
- package/dist/agent/page-state-cache.d.ts.map +1 -0
- package/dist/agent/page-state-cache.js +71 -0
- package/dist/agent/page-state-cache.js.map +1 -0
- package/dist/agent/progress-estimator.d.ts +17 -0
- package/dist/agent/progress-estimator.d.ts.map +1 -0
- package/dist/agent/progress-estimator.js +67 -0
- package/dist/agent/progress-estimator.js.map +1 -0
- package/dist/agent/prompt.d.ts +1 -1
- package/dist/agent/prompt.d.ts.map +1 -1
- package/dist/agent/prompt.js +83 -48
- package/dist/agent/prompt.js.map +1 -1
- package/dist/agent/task-agent.d.ts +89 -0
- package/dist/agent/task-agent.d.ts.map +1 -0
- package/dist/agent/task-agent.js +448 -0
- package/dist/agent/task-agent.js.map +1 -0
- package/dist/agent/token-tracker.d.ts +22 -0
- package/dist/agent/token-tracker.d.ts.map +1 -0
- package/dist/agent/token-tracker.js +29 -0
- package/dist/agent/token-tracker.js.map +1 -0
- package/dist/agent/tool-usage-tracker.d.ts +45 -0
- package/dist/agent/tool-usage-tracker.d.ts.map +1 -0
- package/dist/agent/tool-usage-tracker.js +145 -0
- package/dist/agent/tool-usage-tracker.js.map +1 -0
- package/dist/agent/types.d.ts +24 -0
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +305 -1
- package/dist/api/routes.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp/ai-markdown.d.ts +2 -0
- package/dist/mcp/ai-markdown.d.ts.map +1 -0
- package/dist/mcp/ai-markdown.js +1739 -0
- package/dist/mcp/ai-markdown.js.map +1 -0
- package/dist/mcp/browser-mcp-server.d.ts.map +1 -1
- package/dist/mcp/browser-mcp-server.js +279 -49
- package/dist/mcp/browser-mcp-server.js.map +1 -1
- package/dist/mcp/task-tools.d.ts.map +1 -1
- package/dist/mcp/task-tools.js +107 -13
- package/dist/mcp/task-tools.js.map +1 -1
- package/dist/task/tool-actions.d.ts +4 -0
- package/dist/task/tool-actions.d.ts.map +1 -1
- package/dist/task/tool-actions.js +72 -0
- package/dist/task/tool-actions.js.map +1 -1
- package/package.json +5 -2
- package/public/index.html +593 -41
- package/public/task-result.html +135 -0
- package/public/tasks.html +126 -0
package/README.md
CHANGED
|
@@ -33,6 +33,10 @@ Open `http://localhost:3000` — the homepage provides a semantic analysis demo
|
|
|
33
33
|
|
|
34
34
|
Click **Settings** in the Agent page to set your LLM API key, base URL, and model. The Agent supports any OpenAI-compatible API.
|
|
35
35
|
|
|
36
|
+
Task-oriented pages:
|
|
37
|
+
- `http://localhost:3000/tasks.html` — submit TaskAgent tasks
|
|
38
|
+
- `http://localhost:3000/task-result.html?taskId=...` — inspect task status/result/event stream
|
|
39
|
+
|
|
36
40
|
### 3. Use with Claude Desktop (stdio MCP)
|
|
37
41
|
|
|
38
42
|
Add to your `claude_desktop_config.json`:
|
|
@@ -80,6 +84,13 @@ Notes:
|
|
|
80
84
|
- This server currently exposes legacy HTTP+SSE MCP transport (`/mcp/sse` + `/mcp/message`).
|
|
81
85
|
- The message endpoint is `POST /mcp/message?sessionId=...` and is primarily for transport internals.
|
|
82
86
|
|
|
87
|
+
### 4.1 MCP AI Consumer Guide
|
|
88
|
+
|
|
89
|
+
For AI-oriented consumption rules (`nextActions`, `hasMore/nextCursor`, `topIssues`, detail levels), see:
|
|
90
|
+
- `docs/18-mcp-ai-consumer-guide.md`
|
|
91
|
+
- `docs/19-mcp-ai-readability-roadmap.md` (P0-P2 roadmap and execution checklist)
|
|
92
|
+
- benchmark command: `npm run baseline:v1` (includes `aiFieldCoverageRate` / `invalidToolCallRate`)
|
|
93
|
+
|
|
83
94
|
### 5. Use as a library
|
|
84
95
|
|
|
85
96
|
```typescript
|
|
@@ -140,6 +151,28 @@ The server currently exposes **35 MCP tools**:
|
|
|
140
151
|
|
|
141
152
|
Most browser tools accept an optional `sessionId` — omitting it auto-creates/reuses a default session.
|
|
142
153
|
|
|
154
|
+
AI-oriented tool responses now include additive helper fields on key tools:
|
|
155
|
+
- `aiSchemaVersion`: schema version for AI helper payload
|
|
156
|
+
- `aiDetailLevel`: applied detail level (`brief` / `normal` / `full`)
|
|
157
|
+
- `aiSummary`: short status sentence for fast decision-making
|
|
158
|
+
- `aiMarkdown`: compact, sectioned markdown with high-signal details
|
|
159
|
+
- `aiHints`: suggested next actions (text)
|
|
160
|
+
- `nextActions`: structured next-step suggestions (`tool`, `args`, `reason`)
|
|
161
|
+
- `deltaSummary`: polling-oriented change summary (`key`, `changes`)
|
|
162
|
+
- `schemaRepairGuidance`: repair-oriented hints for schema verification failures
|
|
163
|
+
|
|
164
|
+
List-like responses are also normalized with:
|
|
165
|
+
- `hasMore` + `nextCursor` for continuation semantics
|
|
166
|
+
- `topIssues` on log-oriented tools (network/console) for quick fault triage
|
|
167
|
+
|
|
168
|
+
These fields are additive and backward-compatible; existing JSON fields are unchanged.
|
|
169
|
+
|
|
170
|
+
You can control verbosity via environment variable `AI_MARKDOWN_DETAIL_LEVEL=brief|normal|full` (default: `normal`).
|
|
171
|
+
|
|
172
|
+
Optional adaptive policy (prototype): `AI_MARKDOWN_ADAPTIVE_POLICY=1`
|
|
173
|
+
- For polling-heavy tools, detail can auto-shift to `brief`
|
|
174
|
+
- On terminal failure states, detail can auto-escalate to `full`
|
|
175
|
+
|
|
143
176
|
### Session Management
|
|
144
177
|
|
|
145
178
|
| Tool | Description |
|
|
@@ -251,9 +284,30 @@ Error responses include an `errorCode` field for programmatic handling:
|
|
|
251
284
|
| `GET` | `/v1/sessions/:id/tabs` | List all tabs |
|
|
252
285
|
| `POST` | `/v1/agent/run` | Start an agent task |
|
|
253
286
|
| `GET` | `/v1/agent/:id/events` | SSE stream of agent events |
|
|
287
|
+
| `POST` | `/v1/tasks` | Submit a TaskAgent task |
|
|
288
|
+
| `GET` | `/v1/tasks/:taskId` | Query task status and result |
|
|
289
|
+
| `GET` | `/v1/tasks/:taskId/events` | SSE stream of task events |
|
|
254
290
|
| `GET` | `/mcp/sse` | SSE MCP connection |
|
|
255
291
|
| `POST` | `/mcp/message` | SSE MCP message endpoint |
|
|
256
292
|
|
|
293
|
+
|
|
294
|
+
## Task API Quick Start
|
|
295
|
+
|
|
296
|
+
Submit a task:
|
|
297
|
+
|
|
298
|
+
```bash
|
|
299
|
+
curl -sX POST http://127.0.0.1:3000/v1/tasks \
|
|
300
|
+
-H 'content-type: application/json' \
|
|
301
|
+
-d '{
|
|
302
|
+
"goal": "Batch extract page summaries",
|
|
303
|
+
"inputs": { "urls": ["https://example.com"] },
|
|
304
|
+
"constraints": { "maxDurationMs": 30000, "maxSteps": 20 },
|
|
305
|
+
"budget": { "maxRetries": 1, "maxToolCalls": 120 }
|
|
306
|
+
}'
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
Then poll status by `taskId` (`GET /v1/tasks/:taskId`) or subscribe to events (`GET /v1/tasks/:taskId/events`).
|
|
310
|
+
|
|
257
311
|
## Headless / Headful Mode
|
|
258
312
|
|
|
259
313
|
By default the browser runs in headless mode. To use headful mode (e.g. for manual login):
|
|
@@ -272,7 +326,7 @@ AI Browser uses a **trust level** system to control security policies across dif
|
|
|
272
326
|
|
|
273
327
|
| Level | Entry Point | Description |
|
|
274
328
|
|-------|-------------|-------------|
|
|
275
|
-
| `local` | stdio MCP (`ai-browser-mcp`), Agent API | Full access — allows `file:` URLs, no private IP blocking |
|
|
329
|
+
| `local` | stdio MCP (`ai-browser-mcp`), Agent API, Task API (`/v1/tasks`) | Full access — allows `file:` URLs, no private IP blocking |
|
|
276
330
|
| `remote` | SSE MCP (`/mcp/sse`) | Restricted — blocks private/loopback IPs, DNS rebinding protection, disables `upload_file` and `execute_javascript` |
|
|
277
331
|
|
|
278
332
|
### SSE Endpoint Restrictions (remote mode)
|
|
@@ -305,10 +359,13 @@ AI Browser is designed as a **single-user local tool**. All sessions share a sin
|
|
|
305
359
|
git clone https://github.com/chenpu17/ai-browser.git
|
|
306
360
|
cd ai-browser
|
|
307
361
|
npm install
|
|
308
|
-
npm run dev
|
|
309
|
-
npm run build
|
|
310
|
-
npm test
|
|
311
|
-
npm run test:run
|
|
362
|
+
npm run dev # Dev server with hot reload
|
|
363
|
+
npm run build # Build TypeScript
|
|
364
|
+
npm test # Run tests
|
|
365
|
+
npm run test:run # Run tests once
|
|
366
|
+
npm run baseline:v1 # Collect v1 baseline report
|
|
367
|
+
npm run benchmark:v1:expanded # Run expanded readability scenarios (P2 prototype)
|
|
368
|
+
npm run stress:v1 # Run 100-task stress report
|
|
312
369
|
```
|
|
313
370
|
|
|
314
371
|
## License
|
|
@@ -6,15 +6,20 @@ export declare class BrowsingAgent extends EventEmitter {
|
|
|
6
6
|
private openai;
|
|
7
7
|
private mcpClient;
|
|
8
8
|
private state;
|
|
9
|
-
private
|
|
9
|
+
private conversation;
|
|
10
10
|
private model;
|
|
11
11
|
private maxIterations;
|
|
12
12
|
private initialMessages;
|
|
13
13
|
private tools;
|
|
14
|
-
private
|
|
14
|
+
private toolTracker;
|
|
15
|
+
private tokenTracker;
|
|
16
|
+
private pageStateCache;
|
|
17
|
+
private progressEstimator;
|
|
18
|
+
private subGoals;
|
|
15
19
|
private stepWarningInjected;
|
|
16
20
|
private pendingInputResolve;
|
|
17
21
|
private pendingInputRequestId;
|
|
22
|
+
private _askHumanTimer;
|
|
18
23
|
constructor(options: {
|
|
19
24
|
apiKey?: string;
|
|
20
25
|
baseURL?: string;
|
|
@@ -22,6 +27,7 @@ export declare class BrowsingAgent extends EventEmitter {
|
|
|
22
27
|
mcpClient: Client;
|
|
23
28
|
maxIterations?: number;
|
|
24
29
|
initialMessages?: ChatCompletionMessageParam[];
|
|
30
|
+
subGoals?: string[];
|
|
25
31
|
});
|
|
26
32
|
get sessionId(): string;
|
|
27
33
|
resolveInput(requestId: string, response: Record<string, string>): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../src/agent/agent-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EAAE,0BAA0B,EAAsB,MAAM,sCAAsC,CAAC;AAC3G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGxE,OAAO,KAAK,EAAc,cAAc,EAA0B,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"agent-loop.d.ts","sourceRoot":"","sources":["../../src/agent/agent-loop.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,KAAK,EAAE,0BAA0B,EAAsB,MAAM,sCAAsC,CAAC;AAC3G,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAGxE,OAAO,KAAK,EAAc,cAAc,EAA0B,MAAM,YAAY,CAAC;AAUrF,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,cAAc,CAAwB;IAC9C,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,mBAAmB,CAA6D;IACxF,OAAO,CAAC,qBAAqB,CAAuB;IACpD,OAAO,CAAC,cAAc,CAA8C;gBAExD,OAAO,EAAE;QACnB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,eAAe,CAAC,EAAE,0BAA0B,EAAE,CAAC;QAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB;IAsBD,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO;IAe1E,OAAO,CAAC,SAAS;YAIH,aAAa;IA2DrB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;YAoDlC,IAAI;YAqFJ,gBAAgB;IA6MxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAiB/B"}
|
package/dist/agent/agent-loop.js
CHANGED
|
@@ -3,67 +3,31 @@ import { randomUUID } from 'node:crypto';
|
|
|
3
3
|
import OpenAI from 'openai';
|
|
4
4
|
import { config } from './config.js';
|
|
5
5
|
import { SYSTEM_PROMPT } from './prompt.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
try {
|
|
14
|
-
const data = JSON.parse(rawText);
|
|
15
|
-
if (toolName === 'get_page_info' && data?.elements) {
|
|
16
|
-
const summary = {
|
|
17
|
-
page: data.page,
|
|
18
|
-
elementCount: data.elements.length,
|
|
19
|
-
elements: data.elements.slice(0, 30).map((e) => ({
|
|
20
|
-
id: e.id,
|
|
21
|
-
type: e.type,
|
|
22
|
-
label: e.label,
|
|
23
|
-
})),
|
|
24
|
-
intents: data.intents,
|
|
25
|
-
};
|
|
26
|
-
if (data.stability)
|
|
27
|
-
summary.stability = data.stability;
|
|
28
|
-
if (data.pendingDialog)
|
|
29
|
-
summary.pendingDialog = data.pendingDialog;
|
|
30
|
-
if (data.elements.length > 30) {
|
|
31
|
-
summary.note = `显示前30个元素,共${data.elements.length}个`;
|
|
32
|
-
}
|
|
33
|
-
return truncate(JSON.stringify(summary, null, 2));
|
|
34
|
-
}
|
|
35
|
-
if (toolName === 'get_page_content') {
|
|
36
|
-
let md = `# ${data.title || ''}\n\n`;
|
|
37
|
-
const sections = Array.isArray(data.sections) ? data.sections : [];
|
|
38
|
-
for (const s of sections) {
|
|
39
|
-
const stars = s.attention >= 0.7 ? '★★★'
|
|
40
|
-
: s.attention >= 0.4 ? '★★'
|
|
41
|
-
: '★';
|
|
42
|
-
md += `[${stars}] ${s.text}\n\n`;
|
|
43
|
-
}
|
|
44
|
-
if (sections.length === 0)
|
|
45
|
-
md += '(未提取到内容)\n';
|
|
46
|
-
return truncate(md);
|
|
47
|
-
}
|
|
48
|
-
return truncate(JSON.stringify(data));
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
return truncate(rawText);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
6
|
+
import { formatToolResult } from './content-budget.js';
|
|
7
|
+
import { ToolUsageTracker } from './tool-usage-tracker.js';
|
|
8
|
+
import { determineRecovery, extractErrorCode } from './error-recovery.js';
|
|
9
|
+
import { ConversationManager } from './conversation-manager.js';
|
|
10
|
+
import { TokenTracker } from './token-tracker.js';
|
|
11
|
+
import { PageStateCache } from './page-state-cache.js';
|
|
12
|
+
import { ProgressEstimator } from './progress-estimator.js';
|
|
54
13
|
export class BrowsingAgent extends EventEmitter {
|
|
55
14
|
openai;
|
|
56
15
|
mcpClient;
|
|
57
16
|
state;
|
|
58
|
-
|
|
17
|
+
conversation = new ConversationManager();
|
|
59
18
|
model;
|
|
60
19
|
maxIterations;
|
|
61
20
|
initialMessages;
|
|
62
21
|
tools = [];
|
|
63
|
-
|
|
22
|
+
toolTracker = new ToolUsageTracker();
|
|
23
|
+
tokenTracker = new TokenTracker();
|
|
24
|
+
pageStateCache = new PageStateCache();
|
|
25
|
+
progressEstimator;
|
|
26
|
+
subGoals = [];
|
|
64
27
|
stepWarningInjected = false;
|
|
65
28
|
pendingInputResolve = null;
|
|
66
29
|
pendingInputRequestId = null;
|
|
30
|
+
_askHumanTimer = null;
|
|
67
31
|
constructor(options) {
|
|
68
32
|
super();
|
|
69
33
|
this.model = options.model || config.llm.model;
|
|
@@ -74,13 +38,16 @@ export class BrowsingAgent extends EventEmitter {
|
|
|
74
38
|
this.mcpClient = options.mcpClient;
|
|
75
39
|
this.maxIterations = options.maxIterations ?? config.maxIterations;
|
|
76
40
|
this.initialMessages = options.initialMessages || [];
|
|
41
|
+
this.progressEstimator = new ProgressEstimator(this.maxIterations);
|
|
42
|
+
if (options.subGoals?.length) {
|
|
43
|
+
this.subGoals = options.subGoals.map(d => ({ description: d, completed: false }));
|
|
44
|
+
}
|
|
77
45
|
this.state = {
|
|
78
46
|
sessionId: '',
|
|
79
47
|
iteration: 0,
|
|
80
48
|
consecutiveErrors: 0,
|
|
81
49
|
done: false,
|
|
82
50
|
};
|
|
83
|
-
this.messages = [];
|
|
84
51
|
}
|
|
85
52
|
get sessionId() {
|
|
86
53
|
return this.state.sessionId;
|
|
@@ -168,7 +135,9 @@ export class BrowsingAgent extends EventEmitter {
|
|
|
168
135
|
let sessionResult;
|
|
169
136
|
try {
|
|
170
137
|
sessionResult = await this.mcpClient.callTool({ name: 'create_session', arguments: {} });
|
|
171
|
-
const text = sessionResult.content[0]?.text;
|
|
138
|
+
const text = sessionResult.content?.[0]?.text;
|
|
139
|
+
if (!text)
|
|
140
|
+
throw new Error('create_session returned no text content');
|
|
172
141
|
const parsed = JSON.parse(text);
|
|
173
142
|
this.state.sessionId = parsed.sessionId;
|
|
174
143
|
}
|
|
@@ -180,11 +149,12 @@ export class BrowsingAgent extends EventEmitter {
|
|
|
180
149
|
console.log(`[Agent] 会话已创建: ${this.state.sessionId}`);
|
|
181
150
|
this.emitEvent({ type: 'session_created', sessionId: this.state.sessionId });
|
|
182
151
|
// Build messages: system + initialMessages (conversation memory) + user task
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
152
|
+
let systemPrompt = SYSTEM_PROMPT;
|
|
153
|
+
if (this.subGoals.length > 0) {
|
|
154
|
+
const goalList = this.subGoals.map((g, i) => `${i + 1}. ${g.description}`).join('\n');
|
|
155
|
+
systemPrompt += `\n\n## 子目标\n\n按顺序完成以下子目标:\n${goalList}\n\n完成每个子目标后,在思考中标注"[子目标完成: N]"(N为序号)。`;
|
|
156
|
+
}
|
|
157
|
+
this.conversation.init(systemPrompt, this.initialMessages, task);
|
|
188
158
|
let finalResult;
|
|
189
159
|
try {
|
|
190
160
|
finalResult = await this.loop();
|
|
@@ -192,12 +162,15 @@ export class BrowsingAgent extends EventEmitter {
|
|
|
192
162
|
catch (err) {
|
|
193
163
|
finalResult = { success: false, error: err.message, iterations: this.state.iteration };
|
|
194
164
|
}
|
|
165
|
+
// Attach token usage
|
|
166
|
+
finalResult.tokenUsage = this.tokenTracker.getUsage();
|
|
195
167
|
this.emitEvent({
|
|
196
168
|
type: 'done',
|
|
197
169
|
success: finalResult.success,
|
|
198
170
|
result: finalResult.result,
|
|
199
171
|
error: finalResult.error,
|
|
200
172
|
iterations: finalResult.iterations,
|
|
173
|
+
tokenUsage: finalResult.tokenUsage,
|
|
201
174
|
});
|
|
202
175
|
await this.cleanup();
|
|
203
176
|
return finalResult;
|
|
@@ -210,9 +183,9 @@ export class BrowsingAgent extends EventEmitter {
|
|
|
210
183
|
const remainingSteps = this.maxIterations - this.state.iteration;
|
|
211
184
|
if (!this.stepWarningInjected && remainingSteps <= 2 && remainingSteps > 0 && this.maxIterations > 3) {
|
|
212
185
|
this.stepWarningInjected = true;
|
|
213
|
-
this.
|
|
214
|
-
role: '
|
|
215
|
-
content:
|
|
186
|
+
this.conversation.push({
|
|
187
|
+
role: 'user',
|
|
188
|
+
content: `[系统提示] ⚠️ 你还剩 ${remainingSteps} 步就达到上限,请立即用 done 工具报告已获取的所有信息,不要再做额外操作。`,
|
|
216
189
|
});
|
|
217
190
|
console.log(`[Agent] 注入步数提醒,剩余 ${remainingSteps} 步`);
|
|
218
191
|
}
|
|
@@ -220,19 +193,26 @@ export class BrowsingAgent extends EventEmitter {
|
|
|
220
193
|
try {
|
|
221
194
|
response = await this.openai.chat.completions.create({
|
|
222
195
|
model: this.model,
|
|
223
|
-
messages: this.
|
|
196
|
+
messages: this.conversation.getMessages(),
|
|
224
197
|
tools: this.tools,
|
|
225
198
|
tool_choice: 'auto',
|
|
226
199
|
});
|
|
200
|
+
this.tokenTracker.recordLLMCall(response.usage);
|
|
227
201
|
}
|
|
228
202
|
catch (err) {
|
|
229
203
|
this.state.consecutiveErrors++;
|
|
230
204
|
console.log(`[Agent] LLM API 错误 (${this.state.consecutiveErrors}/${config.maxConsecutiveErrors}): ${err.message}`);
|
|
231
205
|
this.emitEvent({ type: 'error', message: err.message, iteration: this.state.iteration });
|
|
232
|
-
|
|
206
|
+
const recovery = determineRecovery({
|
|
207
|
+
errorMessage: err.message,
|
|
208
|
+
toolName: '_llm_api',
|
|
209
|
+
consecutiveErrors: this.state.consecutiveErrors,
|
|
210
|
+
});
|
|
211
|
+
if (recovery.type === 'abort' || this.state.consecutiveErrors >= config.maxConsecutiveErrors) {
|
|
233
212
|
return { success: false, error: `LLM API 连续失败: ${err.message}`, iterations: this.state.iteration };
|
|
234
213
|
}
|
|
235
|
-
|
|
214
|
+
const delay = recovery.type === 'retry' ? recovery.delayMs : 2000;
|
|
215
|
+
await new Promise(r => setTimeout(r, delay));
|
|
236
216
|
continue;
|
|
237
217
|
}
|
|
238
218
|
const message = response.choices[0]?.message;
|
|
@@ -242,8 +222,17 @@ export class BrowsingAgent extends EventEmitter {
|
|
|
242
222
|
if (message.content) {
|
|
243
223
|
console.log(`[Agent] 思考: ${message.content}`);
|
|
244
224
|
this.emitEvent({ type: 'thinking', content: message.content, iteration: this.state.iteration });
|
|
225
|
+
// Detect subgoal completion markers in thinking
|
|
226
|
+
const goalMatch = message.content.match(/\[子目标完成:\s*(\d+)\]/);
|
|
227
|
+
if (goalMatch) {
|
|
228
|
+
const idx = parseInt(goalMatch[1], 10) - 1;
|
|
229
|
+
if (idx >= 0 && idx < this.subGoals.length && !this.subGoals[idx].completed) {
|
|
230
|
+
this.subGoals[idx].completed = true;
|
|
231
|
+
this.emitEvent({ type: 'subgoal_completed', subGoal: this.subGoals[idx].description, iteration: this.state.iteration });
|
|
232
|
+
}
|
|
233
|
+
}
|
|
245
234
|
}
|
|
246
|
-
this.
|
|
235
|
+
this.conversation.push(message);
|
|
247
236
|
if (!message.tool_calls || message.tool_calls.length === 0) {
|
|
248
237
|
console.log('[Agent] LLM 未调用工具,任务结束');
|
|
249
238
|
return {
|
|
@@ -263,6 +252,7 @@ export class BrowsingAgent extends EventEmitter {
|
|
|
263
252
|
return { success: true, iterations: this.state.iteration };
|
|
264
253
|
}
|
|
265
254
|
async executeToolCalls(toolCalls) {
|
|
255
|
+
const deferredHints = [];
|
|
266
256
|
for (const toolCall of toolCalls) {
|
|
267
257
|
const name = toolCall.function.name;
|
|
268
258
|
let args;
|
|
@@ -271,7 +261,7 @@ export class BrowsingAgent extends EventEmitter {
|
|
|
271
261
|
}
|
|
272
262
|
catch {
|
|
273
263
|
console.log(`[Agent] 工具参数解析失败: ${toolCall.function.arguments}`);
|
|
274
|
-
this.
|
|
264
|
+
this.conversation.push({
|
|
275
265
|
role: 'tool',
|
|
276
266
|
tool_call_id: toolCall.id,
|
|
277
267
|
content: JSON.stringify({ error: '工具参数 JSON 解析失败' }),
|
|
@@ -281,22 +271,6 @@ export class BrowsingAgent extends EventEmitter {
|
|
|
281
271
|
}
|
|
282
272
|
console.log(`[Agent] 调用工具: ${name}(${JSON.stringify(args)})`);
|
|
283
273
|
this.emitEvent({ type: 'tool_call', name, args, iteration: this.state.iteration });
|
|
284
|
-
// 循环检测:记录工具调用签名
|
|
285
|
-
const callSig = `${name}:${JSON.stringify(args)}`;
|
|
286
|
-
this.recentToolCalls.push(callSig);
|
|
287
|
-
if (this.recentToolCalls.length > 3) {
|
|
288
|
-
this.recentToolCalls.shift();
|
|
289
|
-
}
|
|
290
|
-
if (this.recentToolCalls.length === 3 &&
|
|
291
|
-
this.recentToolCalls[0] === this.recentToolCalls[1] &&
|
|
292
|
-
this.recentToolCalls[1] === this.recentToolCalls[2]) {
|
|
293
|
-
console.log('[Agent] 检测到循环调用,注入提醒');
|
|
294
|
-
this.messages.push({
|
|
295
|
-
role: 'system',
|
|
296
|
-
content: '⚠️ 你已连续3次调用相同工具且参数相同,这不会产生新结果。请换一种方式操作,或用 done 工具报告当前已获取的信息。',
|
|
297
|
-
});
|
|
298
|
-
this.recentToolCalls = [];
|
|
299
|
-
}
|
|
300
274
|
if (name === 'done') {
|
|
301
275
|
const result = args.result || '任务完成';
|
|
302
276
|
console.log(`[Agent] 任务完成: ${result}`);
|
|
@@ -339,7 +313,7 @@ export class BrowsingAgent extends EventEmitter {
|
|
|
339
313
|
const responseText = JSON.stringify(userResponse);
|
|
340
314
|
console.log(`[Agent] 用户输入已收到`);
|
|
341
315
|
this.emitEvent({ type: 'tool_result', name: 'ask_human', success: true, summary: redactedText, iteration: this.state.iteration });
|
|
342
|
-
this.
|
|
316
|
+
this.conversation.push({ role: 'tool', tool_call_id: toolCall.id, content: responseText });
|
|
343
317
|
continue;
|
|
344
318
|
}
|
|
345
319
|
// 强制覆盖 sessionId,防止 LLM 猜测错误的值
|
|
@@ -360,23 +334,90 @@ export class BrowsingAgent extends EventEmitter {
|
|
|
360
334
|
rawText = JSON.stringify({ error: err.message });
|
|
361
335
|
success = false;
|
|
362
336
|
}
|
|
337
|
+
// Record in tracker
|
|
338
|
+
this.toolTracker.record({
|
|
339
|
+
toolName: name,
|
|
340
|
+
args,
|
|
341
|
+
success,
|
|
342
|
+
timestamp: Date.now(),
|
|
343
|
+
errorCode: success ? undefined : extractErrorCode(rawText),
|
|
344
|
+
});
|
|
363
345
|
if (!success) {
|
|
364
346
|
this.state.consecutiveErrors++;
|
|
365
347
|
console.log(`[Agent] 错误 (${this.state.consecutiveErrors}/${config.maxConsecutiveErrors}): ${rawText}`);
|
|
348
|
+
const errorCode = extractErrorCode(rawText);
|
|
349
|
+
const recovery = determineRecovery({
|
|
350
|
+
errorCode,
|
|
351
|
+
errorMessage: rawText,
|
|
352
|
+
toolName: name,
|
|
353
|
+
consecutiveErrors: this.state.consecutiveErrors,
|
|
354
|
+
});
|
|
355
|
+
if (recovery.type === 'abort') {
|
|
356
|
+
this.conversation.push({ role: 'tool', tool_call_id: toolCall.id, content: rawText });
|
|
357
|
+
return { success: false, error: recovery.reason, iterations: this.state.iteration };
|
|
358
|
+
}
|
|
366
359
|
if (this.state.consecutiveErrors >= config.maxConsecutiveErrors) {
|
|
367
|
-
this.
|
|
360
|
+
this.conversation.push({ role: 'tool', tool_call_id: toolCall.id, content: rawText });
|
|
368
361
|
return {
|
|
369
362
|
success: false,
|
|
370
363
|
error: `连续 ${config.maxConsecutiveErrors} 次错误,任务中止`,
|
|
371
364
|
iterations: this.state.iteration,
|
|
372
365
|
};
|
|
373
366
|
}
|
|
367
|
+
if (recovery.type === 'inject_hint') {
|
|
368
|
+
this.conversation.push({ role: 'tool', tool_call_id: toolCall.id, content: rawText });
|
|
369
|
+
deferredHints.push(`[系统提示] ⚠️ ${recovery.message}`);
|
|
370
|
+
continue;
|
|
371
|
+
}
|
|
374
372
|
}
|
|
375
373
|
else {
|
|
376
374
|
this.state.consecutiveErrors = 0;
|
|
377
375
|
}
|
|
378
|
-
//
|
|
379
|
-
const
|
|
376
|
+
// Loop/pattern detection — defer hint to avoid interleaving with tool results
|
|
377
|
+
const loopDetection = this.toolTracker.detectAny();
|
|
378
|
+
if (loopDetection) {
|
|
379
|
+
console.log(`[Agent] 检测到${loopDetection.type},注入提醒`);
|
|
380
|
+
deferredHints.push(`[系统提示] ⚠️ ${loopDetection.message}`);
|
|
381
|
+
}
|
|
382
|
+
// SSE event sends full content; LLM message gets budget-aware version
|
|
383
|
+
let formatted = formatToolResult(rawText, name);
|
|
384
|
+
// Apply page state diff for get_page_info on same-page refreshes
|
|
385
|
+
if (name === 'get_page_info' && success) {
|
|
386
|
+
try {
|
|
387
|
+
const pageData = JSON.parse(rawText);
|
|
388
|
+
const elements = Array.isArray(pageData.elements) ? pageData.elements : [];
|
|
389
|
+
const url = pageData.page?.url || '';
|
|
390
|
+
const diff = this.pageStateCache.update(this.state.sessionId, elements, url);
|
|
391
|
+
if (!diff.isNewPage && (diff.added.length + diff.removed.length + diff.changed.length) > 0) {
|
|
392
|
+
const diffLines = [
|
|
393
|
+
`## Page State Diff (unchanged: ${diff.unchangedCount})`,
|
|
394
|
+
'',
|
|
395
|
+
];
|
|
396
|
+
if (diff.added.length > 0) {
|
|
397
|
+
diffLines.push(`### Added (${diff.added.length})`);
|
|
398
|
+
for (const el of diff.added.slice(0, 20)) {
|
|
399
|
+
diffLines.push(`- \`${el.id}\` ${el.type || ''} ${el.label || ''}`);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
if (diff.removed.length > 0) {
|
|
403
|
+
diffLines.push(`### Removed (${diff.removed.length})`);
|
|
404
|
+
for (const id of diff.removed.slice(0, 20)) {
|
|
405
|
+
diffLines.push(`- \`${id}\``);
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
if (diff.changed.length > 0) {
|
|
409
|
+
diffLines.push(`### Changed (${diff.changed.length})`);
|
|
410
|
+
for (const el of diff.changed.slice(0, 20)) {
|
|
411
|
+
diffLines.push(`- \`${el.id}\` ${el.type || ''} ${el.label || ''}`);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
formatted = diffLines.join('\n');
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
catch {
|
|
418
|
+
// Parse failed — use the standard formatted output
|
|
419
|
+
}
|
|
420
|
+
}
|
|
380
421
|
console.log(`[Agent] 结果: ${formatted.slice(0, 200)}${formatted.length > 200 ? '...' : ''}`);
|
|
381
422
|
this.emitEvent({
|
|
382
423
|
type: 'tool_result',
|
|
@@ -385,15 +426,26 @@ export class BrowsingAgent extends EventEmitter {
|
|
|
385
426
|
summary: rawText,
|
|
386
427
|
iteration: this.state.iteration,
|
|
387
428
|
});
|
|
388
|
-
this.
|
|
429
|
+
this.conversation.push({
|
|
389
430
|
role: 'tool',
|
|
390
431
|
tool_call_id: toolCall.id,
|
|
391
432
|
content: formatted,
|
|
392
433
|
});
|
|
434
|
+
// Emit progress after each tool call
|
|
435
|
+
const progress = this.progressEstimator.record(name);
|
|
436
|
+
this.emitEvent({ type: 'progress', progress, iteration: this.state.iteration });
|
|
437
|
+
}
|
|
438
|
+
// Push all deferred hints after tool results to avoid breaking tool message contiguity
|
|
439
|
+
for (const hint of deferredHints) {
|
|
440
|
+
this.conversation.push({ role: 'user', content: hint });
|
|
393
441
|
}
|
|
394
442
|
return null;
|
|
395
443
|
}
|
|
396
444
|
async cleanup() {
|
|
445
|
+
if (this._askHumanTimer) {
|
|
446
|
+
clearTimeout(this._askHumanTimer);
|
|
447
|
+
this._askHumanTimer = null;
|
|
448
|
+
}
|
|
397
449
|
if (this.state.sessionId) {
|
|
398
450
|
console.log('[Agent] 清理浏览器会话...');
|
|
399
451
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../../src/agent/agent-loop.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"agent-loop.js","sourceRoot":"","sources":["../../src/agent/agent-loop.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/config.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/agent/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/agent/config.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,MAAM;;;;;;;;;;;;;CAalB,CAAC"}
|
package/dist/agent/config.js
CHANGED
|
@@ -4,6 +4,11 @@ export const config = {
|
|
|
4
4
|
apiKey: process.env.LLM_API_KEY || '',
|
|
5
5
|
model: process.env.LLM_MODEL || 'gpt-4o-mini',
|
|
6
6
|
},
|
|
7
|
+
reasoningModel: {
|
|
8
|
+
baseURL: process.env.REASONING_LLM_BASE_URL || process.env.LLM_BASE_URL || 'https://api.openai.com/v1',
|
|
9
|
+
apiKey: process.env.REASONING_LLM_API_KEY || process.env.LLM_API_KEY || '',
|
|
10
|
+
model: process.env.REASONING_LLM_MODEL || '',
|
|
11
|
+
},
|
|
7
12
|
maxIterations: 20,
|
|
8
13
|
maxConsecutiveErrors: 3,
|
|
9
14
|
};
|
package/dist/agent/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/agent/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,GAAG,EAAE;QACH,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,2BAA2B;QAChE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;QACrC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,aAAa;KAC9C;IACD,aAAa,EAAE,EAAE;IACjB,oBAAoB,EAAE,CAAC;CACxB,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/agent/config.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,GAAG,EAAE;QACH,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,2BAA2B;QAChE,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;QACrC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,aAAa;KAC9C;IACD,cAAc,EAAE;QACd,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,2BAA2B;QACtG,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE;QAC1E,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,EAAE;KAC7C;IACD,aAAa,EAAE,EAAE;IACjB,oBAAoB,EAAE,CAAC;CACxB,CAAC"}
|