zan-browser 1.3.5 → 1.3.6
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/dist/ai.d.ts +0 -4
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +8 -66
- package/dist/ai.js.map +1 -1
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +27 -57
- package/dist/browser.js.map +1 -1
- package/dist/interceptor.d.ts +1 -1
- package/dist/interceptor.d.ts.map +1 -1
- package/dist/interceptor.js +12 -24
- package/dist/interceptor.js.map +1 -1
- package/dist/observer.d.ts +0 -2
- package/dist/observer.d.ts.map +1 -1
- package/dist/observer.js +16 -41
- package/dist/observer.js.map +1 -1
- package/dist/session.d.ts +0 -6
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +6 -120
- package/dist/session.js.map +1 -1
- package/dist/types.d.ts +0 -6
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/ai.d.ts
CHANGED
|
@@ -4,10 +4,6 @@ export declare class AIClient {
|
|
|
4
4
|
private model;
|
|
5
5
|
constructor(apiKey: string, model?: string);
|
|
6
6
|
decideFromObservation(goal: string, observation: ObserveResult, history: string[]): Promise<AgentAction>;
|
|
7
|
-
checkGoalAchieved(goal: string, screenshotBase64: string): Promise<{
|
|
8
|
-
achieved: boolean;
|
|
9
|
-
summary: string;
|
|
10
|
-
}>;
|
|
11
7
|
decideFromScreenshot(goal: string, screenshotBase64: string, history: string[]): Promise<AgentAction>;
|
|
12
8
|
private parseAction;
|
|
13
9
|
}
|
package/dist/ai.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAM1D,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,SAAgB;IAM3C,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAM1D,qBAAa,QAAQ;IACnB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;gBAEV,MAAM,EAAE,MAAM,EAAE,KAAK,SAAgB;IAM3C,qBAAqB,CACzB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,aAAa,EAC1B,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,WAAW,CAAC;IA+CjB,oBAAoB,CACxB,IAAI,EAAE,MAAM,EACZ,gBAAgB,EAAE,MAAM,EACxB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,WAAW,CAAC;IAsDvB,OAAO,CAAC,WAAW;CA2BpB"}
|
package/dist/ai.js
CHANGED
|
@@ -36,14 +36,12 @@ IMPORTANT RULES:
|
|
|
36
36
|
- Take the minimum actions needed — stop as soon as the goal is achievable
|
|
37
37
|
- If you cannot achieve the goal, return "impossible"
|
|
38
38
|
- If the goal is achieved, return "done"
|
|
39
|
-
- After a "fill" action on a search/query input, ALWAYS follow with pressKey "Enter" to submit — do not look for a button unless Enter doesn't work
|
|
40
39
|
|
|
41
40
|
Respond with a JSON object (no markdown):
|
|
42
41
|
{
|
|
43
|
-
"type": "click" | "fill" | "
|
|
42
|
+
"type": "click" | "fill" | "scroll" | "wait" | "screenshot" | "done" | "impossible",
|
|
44
43
|
"elementId": "@B3" (required for click/fill),
|
|
45
44
|
"value": "text to type" (required for fill),
|
|
46
|
-
"key": "Enter" (required for pressKey — e.g. "Enter", "Tab", "Escape"),
|
|
47
45
|
"direction": "up" | "down" (required for scroll),
|
|
48
46
|
"amount": 300 (optional for scroll, pixels),
|
|
49
47
|
"ms": 1000 (required for wait),
|
|
@@ -51,42 +49,12 @@ Respond with a JSON object (no markdown):
|
|
|
51
49
|
}`;
|
|
52
50
|
const response = await this.client.messages.create({
|
|
53
51
|
model: this.model,
|
|
54
|
-
max_tokens:
|
|
52
|
+
max_tokens: 256,
|
|
55
53
|
messages: [{ role: "user", content: prompt }],
|
|
56
54
|
});
|
|
57
55
|
const text = response.content[0].type === "text" ? response.content[0].text : "";
|
|
58
56
|
return this.parseAction(text);
|
|
59
57
|
}
|
|
60
|
-
// After a meaningful action (fill, click, pressKey), check if the goal data appeared on screen.
|
|
61
|
-
// This is the Notte approach: correlate screen content with network traffic, don't wait for AI to say "done".
|
|
62
|
-
async checkGoalAchieved(goal, screenshotBase64) {
|
|
63
|
-
const response = await this.client.messages.create({
|
|
64
|
-
model: this.model,
|
|
65
|
-
max_tokens: 256,
|
|
66
|
-
messages: [{
|
|
67
|
-
role: "user",
|
|
68
|
-
content: [
|
|
69
|
-
{
|
|
70
|
-
type: "image",
|
|
71
|
-
source: { type: "base64", media_type: "image/jpeg", data: screenshotBase64 },
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
type: "text",
|
|
75
|
-
text: `GOAL: ${goal}\n\nLook at this screenshot. Has the data we need actually appeared on screen?\nDo NOT say achieved=true just because the page loaded — only if the actual data (numbers, status, results) is visible.\n\nRespond with JSON only: { "achieved": true/false, "summary": "what you see on screen relevant to the goal" }`,
|
|
76
|
-
},
|
|
77
|
-
],
|
|
78
|
-
}],
|
|
79
|
-
});
|
|
80
|
-
const text = response.content[0].type === "text" ? response.content[0].text : "{}";
|
|
81
|
-
try {
|
|
82
|
-
const cleaned = text.replace(/```json\n?/g, "").replace(/```\n?/g, "").trim();
|
|
83
|
-
const parsed = JSON.parse(cleaned);
|
|
84
|
-
return { achieved: !!parsed.achieved, summary: parsed.summary ?? "" };
|
|
85
|
-
}
|
|
86
|
-
catch {
|
|
87
|
-
return { achieved: false, summary: "" };
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
58
|
// Vision fallback — only called when observe() returns ambiguous state
|
|
91
59
|
// e.g. canvas-rendered UI, complex dynamic content
|
|
92
60
|
async decideFromScreenshot(goal, screenshotBase64, history) {
|
|
@@ -102,14 +70,12 @@ ${historyText}
|
|
|
102
70
|
|
|
103
71
|
RULES: Take minimum actions needed. Return "done" when goal is achievable.
|
|
104
72
|
Return "impossible" if it cannot be done.
|
|
105
|
-
After filling a search/query field, always follow with pressKey "Enter".
|
|
106
73
|
|
|
107
74
|
Respond with JSON (no markdown):
|
|
108
75
|
{
|
|
109
|
-
"type": "click" | "fill" | "
|
|
76
|
+
"type": "click" | "fill" | "scroll" | "wait" | "screenshot" | "done" | "impossible",
|
|
110
77
|
"elementId": "describe the element visually if no ID available",
|
|
111
78
|
"value": "text to type" (for fill),
|
|
112
|
-
"key": "Enter" (for pressKey),
|
|
113
79
|
"direction": "up" | "down" (for scroll),
|
|
114
80
|
"ms": 1000 (for wait),
|
|
115
81
|
"reason": "why"
|
|
@@ -143,23 +109,10 @@ Respond with JSON (no markdown):
|
|
|
143
109
|
const cleaned = raw.replace(/```json\n?/g, "").replace(/```\n?/g, "").trim();
|
|
144
110
|
const parsed = JSON.parse(cleaned);
|
|
145
111
|
switch (parsed.type) {
|
|
146
|
-
case "click":
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
return { type: "impossible", reason: "AI returned click action without a valid elementId" };
|
|
151
|
-
}
|
|
152
|
-
return { type: "click", elementId, reason: parsed.reason ?? "" };
|
|
153
|
-
}
|
|
154
|
-
case "fill": {
|
|
155
|
-
const elementId = (parsed.elementId ?? "").trim();
|
|
156
|
-
if (!elementId) {
|
|
157
|
-
return { type: "impossible", reason: "AI returned fill action without a valid elementId" };
|
|
158
|
-
}
|
|
159
|
-
return { type: "fill", elementId, value: parsed.value ?? "", reason: parsed.reason ?? "" };
|
|
160
|
-
}
|
|
161
|
-
case "pressKey":
|
|
162
|
-
return { type: "pressKey", key: parsed.key ?? "Enter", reason: parsed.reason ?? "" };
|
|
112
|
+
case "click":
|
|
113
|
+
return { type: "click", elementId: parsed.elementId ?? "", reason: parsed.reason ?? "" };
|
|
114
|
+
case "fill":
|
|
115
|
+
return { type: "fill", elementId: parsed.elementId ?? "", value: parsed.value ?? "", reason: parsed.reason ?? "" };
|
|
163
116
|
case "scroll":
|
|
164
117
|
return { type: "scroll", direction: parsed.direction ?? "down", amount: parsed.amount, reason: parsed.reason ?? "" };
|
|
165
118
|
case "wait":
|
|
@@ -175,18 +128,7 @@ Respond with JSON (no markdown):
|
|
|
175
128
|
}
|
|
176
129
|
}
|
|
177
130
|
catch {
|
|
178
|
-
|
|
179
|
-
const lower = raw.toLowerCase();
|
|
180
|
-
if (lower.includes("screenshot"))
|
|
181
|
-
return { type: "screenshot", reason: "extracted from prose" };
|
|
182
|
-
if (lower.includes("scroll down"))
|
|
183
|
-
return { type: "scroll", direction: "down", reason: "extracted from prose" };
|
|
184
|
-
if (lower.includes("done") || lower.includes("goal is achieved"))
|
|
185
|
-
return { type: "done", reason: "extracted from prose" };
|
|
186
|
-
return {
|
|
187
|
-
type: "screenshot",
|
|
188
|
-
reason: `parse failed — taking screenshot to reassess: ${raw.slice(0, 100)}`,
|
|
189
|
-
};
|
|
131
|
+
return { type: "impossible", reason: `failed to parse AI response: ${raw.slice(0, 100)}` };
|
|
190
132
|
}
|
|
191
133
|
}
|
|
192
134
|
}
|
package/dist/ai.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA0C;AAG1C,MAAM,aAAa,GAAG,2BAA2B,CAAC;AAElD,mEAAmE;AACnE,sCAAsC;AACtC,MAAa,QAAQ;IACX,MAAM,CAAY;IAClB,KAAK,CAAS;IAEtB,YAAY,MAAc,EAAE,KAAK,GAAG,aAAa;QAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,aAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,kFAAkF;IAClF,KAAK,CAAC,qBAAqB,CACzB,IAAY,EACZ,WAA0B,EAC1B,OAAiB;QAEjB,MAAM,WAAW,GACf,OAAO,CAAC,MAAM,GAAG,CAAC;YAChB,CAAC,CAAC,sBAAsB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACtD,CAAC,CAAC,EAAE,CAAC;QAET,MAAM,MAAM,GAAG;;;QAGX,IAAI;EACV,WAAW;;;EAGX,WAAW,CAAC,IAAI
|
|
1
|
+
{"version":3,"file":"ai.js","sourceRoot":"","sources":["../src/ai.ts"],"names":[],"mappings":"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"}
|
package/dist/browser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,EAAE,CAAW;gBAET,MAAM,EAAE,aAAa;IAQ3B,UAAU,IAAI,OAAO,CAAC,OAAO,CAAC;YAyCtB,wBAAwB;CAoCvC"}
|
package/dist/browser.js
CHANGED
|
@@ -4,8 +4,6 @@ exports.RensanBrowser = void 0;
|
|
|
4
4
|
const playwright_1 = require("playwright");
|
|
5
5
|
const session_1 = require("./session");
|
|
6
6
|
const ai_1 = require("./ai");
|
|
7
|
-
// Delay helper for retry backoff
|
|
8
|
-
const sleep = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
9
7
|
class RensanBrowser {
|
|
10
8
|
config;
|
|
11
9
|
ai;
|
|
@@ -21,10 +19,7 @@ class RensanBrowser {
|
|
|
21
19
|
let wsEndpoint;
|
|
22
20
|
let viewerUrl;
|
|
23
21
|
if (this.config.session.browserbase) {
|
|
24
|
-
const bb = await this.createBrowserbaseSession(
|
|
25
|
-
...this.config.session.browserbase,
|
|
26
|
-
contextId: this.config.session.browserbase.contextId,
|
|
27
|
-
});
|
|
22
|
+
const bb = await this.createBrowserbaseSession(this.config.session.browserbase);
|
|
28
23
|
wsEndpoint = bb.connectUrl;
|
|
29
24
|
viewerUrl = bb.viewerUrl;
|
|
30
25
|
}
|
|
@@ -34,15 +29,10 @@ class RensanBrowser {
|
|
|
34
29
|
else {
|
|
35
30
|
throw new Error("BrowserConfig requires either wsEndpoint or browserbase config");
|
|
36
31
|
}
|
|
37
|
-
|
|
38
|
-
const isPlaywrightServer = !wsEndpoint.includes('?') && !wsEndpoint.includes('browserbase');
|
|
39
|
-
const browser = isPlaywrightServer
|
|
40
|
-
? await playwright_1.chromium.connect(wsEndpoint)
|
|
41
|
-
: await playwright_1.chromium.connectOverCDP(wsEndpoint);
|
|
32
|
+
const browser = await playwright_1.chromium.connectOverCDP(wsEndpoint);
|
|
42
33
|
const contextOptions = {
|
|
43
34
|
viewport: viewport ?? { width: 1280, height: 800 },
|
|
44
|
-
|
|
45
|
-
userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36",
|
|
35
|
+
userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
|
|
46
36
|
locale: "en-US",
|
|
47
37
|
timezoneId: "America/New_York",
|
|
48
38
|
};
|
|
@@ -58,51 +48,31 @@ class RensanBrowser {
|
|
|
58
48
|
return new session_1.Session(page, browser, this.ai, timeout, viewerUrl);
|
|
59
49
|
}
|
|
60
50
|
// ─── Browserbase session creation ─────────────────────────────────────────────
|
|
61
|
-
async createBrowserbaseSession(config
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
}),
|
|
80
|
-
signal: AbortSignal.timeout(15_000),
|
|
81
|
-
});
|
|
82
|
-
if (!response.ok) {
|
|
83
|
-
const body = await response.text();
|
|
84
|
-
// Don't retry on client errors (4xx) — they won't resolve on retry
|
|
85
|
-
if (response.status >= 400 && response.status < 500) {
|
|
86
|
-
throw new Error(`Browserbase session creation failed (${response.status}): ${body}`);
|
|
87
|
-
}
|
|
88
|
-
throw new Error(`Browserbase session creation failed (${response.status})`);
|
|
89
|
-
}
|
|
90
|
-
const data = await response.json();
|
|
91
|
-
return {
|
|
92
|
-
id: data.id,
|
|
93
|
-
connectUrl: data.connectUrl,
|
|
94
|
-
viewerUrl: data.debuggerFullscreenUrl ?? data.debuggerUrl ?? `https://www.browserbase.com/sessions/${data.id}`,
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
catch (err) {
|
|
98
|
-
lastError = err;
|
|
99
|
-
if (attempt < maxRetries) {
|
|
100
|
-
// Exponential backoff: 1s, 2s, 4s
|
|
101
|
-
await sleep(1000 * attempt);
|
|
102
|
-
}
|
|
103
|
-
}
|
|
51
|
+
async createBrowserbaseSession(config) {
|
|
52
|
+
const response = await fetch("https://www.browserbase.com/v1/sessions", {
|
|
53
|
+
method: "POST",
|
|
54
|
+
headers: {
|
|
55
|
+
"Content-Type": "application/json",
|
|
56
|
+
"x-bb-api-key": config.apiKey,
|
|
57
|
+
},
|
|
58
|
+
body: JSON.stringify({
|
|
59
|
+
projectId: config.projectId,
|
|
60
|
+
browserSettings: {
|
|
61
|
+
viewport: this.config.session.viewport ?? { width: 1280, height: 800 },
|
|
62
|
+
},
|
|
63
|
+
}),
|
|
64
|
+
signal: AbortSignal.timeout(15_000),
|
|
65
|
+
});
|
|
66
|
+
if (!response.ok) {
|
|
67
|
+
const body = await response.text();
|
|
68
|
+
throw new Error(`Browserbase session creation failed (${response.status}): ${body}`);
|
|
104
69
|
}
|
|
105
|
-
|
|
70
|
+
const data = await response.json();
|
|
71
|
+
return {
|
|
72
|
+
id: data.id,
|
|
73
|
+
connectUrl: data.connectUrl,
|
|
74
|
+
viewerUrl: data.debuggerFullscreenUrl ?? data.debuggerUrl ?? `https://www.browserbase.com/sessions/${data.id}`,
|
|
75
|
+
};
|
|
106
76
|
}
|
|
107
77
|
}
|
|
108
78
|
exports.RensanBrowser = RensanBrowser;
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":";;;AAAA,2CAAsC;AAEtC,uCAAoC;AACpC,6BAAgC;AAEhC,
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/interceptor.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { Page } from "playwright";
|
|
|
3
3
|
import type { CapturedRequest } from "./types";
|
|
4
4
|
export declare class Interceptor extends EventEmitter {
|
|
5
5
|
private captured;
|
|
6
|
-
private
|
|
6
|
+
private requestMap;
|
|
7
7
|
private active;
|
|
8
8
|
private page;
|
|
9
9
|
constructor(page: Page);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAqB,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"interceptor.d.ts","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAqB,MAAM,YAAY,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAgD/C,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,QAAQ,CAA2C;IAC3D,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,IAAI,CAAO;gBAEP,IAAI,EAAE,IAAI;IAMtB,KAAK,IAAI,IAAI;IASb,IAAI,IAAI,IAAI;IASZ,MAAM,IAAI,eAAe,EAAE;IAK3B,SAAS,CAAC,QAAQ,SAAI,GAAG,eAAe,EAAE;IAM1C,KAAK,IAAI,IAAI;IAOb,OAAO,CAAC,SAAS,CAoBf;IAEF,OAAO,CAAC,UAAU,CAkChB;IAEF,OAAO,CAAC,eAAe,CASrB;IAIF,OAAO,CAAC,YAAY;IA2DpB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,OAAO;IASf,OAAO,CAAC,KAAK;IAKb,OAAO,CAAC,mBAAmB;CAG5B"}
|
package/dist/interceptor.js
CHANGED
|
@@ -43,13 +43,9 @@ const USEFUL_CONTENT_TYPES = [
|
|
|
43
43
|
"text/plain",
|
|
44
44
|
"application/x-www-form-urlencoded",
|
|
45
45
|
];
|
|
46
|
-
// Max response body size to read into memory (5 MB)
|
|
47
|
-
const MAX_BODY_BYTES = 5 * 1024 * 1024;
|
|
48
46
|
class Interceptor extends events_1.EventEmitter {
|
|
49
47
|
captured = new Map();
|
|
50
|
-
|
|
51
|
-
// because response.request() always returns the same object that fired the request event.
|
|
52
|
-
requestIds = new WeakMap();
|
|
48
|
+
requestMap = new Map(); // playwright req id → our id
|
|
53
49
|
active = false;
|
|
54
50
|
page;
|
|
55
51
|
constructor(page) {
|
|
@@ -82,6 +78,7 @@ class Interceptor extends events_1.EventEmitter {
|
|
|
82
78
|
}
|
|
83
79
|
clear() {
|
|
84
80
|
this.captured.clear();
|
|
81
|
+
this.requestMap.clear();
|
|
85
82
|
}
|
|
86
83
|
// ─── Private handlers ───────────────────────────────────────────────────────
|
|
87
84
|
onRequest = (request) => {
|
|
@@ -89,8 +86,7 @@ class Interceptor extends events_1.EventEmitter {
|
|
|
89
86
|
if (this.shouldIgnore(url))
|
|
90
87
|
return;
|
|
91
88
|
const id = (0, crypto_1.randomUUID)();
|
|
92
|
-
|
|
93
|
-
this.requestIds.set(request, id);
|
|
89
|
+
this.requestMap.set(request.url() + request.method(), id);
|
|
94
90
|
const entry = {
|
|
95
91
|
id,
|
|
96
92
|
timestamp: Date.now(),
|
|
@@ -108,31 +104,22 @@ class Interceptor extends events_1.EventEmitter {
|
|
|
108
104
|
const url = response.url();
|
|
109
105
|
if (this.shouldIgnore(url))
|
|
110
106
|
return;
|
|
111
|
-
|
|
112
|
-
const id = this.
|
|
107
|
+
const key = url + response.request().method();
|
|
108
|
+
const id = this.requestMap.get(key);
|
|
113
109
|
if (!id)
|
|
114
110
|
return;
|
|
115
111
|
const entry = this.captured.get(id);
|
|
116
112
|
if (!entry)
|
|
117
113
|
return;
|
|
118
114
|
const contentType = response.headers()["content-type"] ?? "";
|
|
119
|
-
// Only read body for useful content types
|
|
115
|
+
// Only read body for useful content types to avoid wasting memory
|
|
120
116
|
let body;
|
|
121
117
|
if (this.isUsefulContentType(contentType)) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
// Skip — body is too large to be a useful JSON/XML API response
|
|
125
|
-
body = undefined;
|
|
118
|
+
try {
|
|
119
|
+
body = await response.text();
|
|
126
120
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
const raw = await response.text();
|
|
130
|
-
// Hard cap: even if Content-Length was missing or wrong, truncate
|
|
131
|
-
body = raw.length > MAX_BODY_BYTES ? raw.slice(0, MAX_BODY_BYTES) : raw;
|
|
132
|
-
}
|
|
133
|
-
catch {
|
|
134
|
-
body = undefined;
|
|
135
|
-
}
|
|
121
|
+
catch {
|
|
122
|
+
body = undefined;
|
|
136
123
|
}
|
|
137
124
|
}
|
|
138
125
|
const updated = {
|
|
@@ -147,7 +134,8 @@ class Interceptor extends events_1.EventEmitter {
|
|
|
147
134
|
this.emit("request", updated); // real-time stream
|
|
148
135
|
};
|
|
149
136
|
onRequestFailed = (request) => {
|
|
150
|
-
const
|
|
137
|
+
const key = request.url() + request.method();
|
|
138
|
+
const id = this.requestMap.get(key);
|
|
151
139
|
if (!id)
|
|
152
140
|
return;
|
|
153
141
|
const entry = this.captured.get(id);
|
package/dist/interceptor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAGtC,mCAAoC;AAEpC,kDAAkD;AAClD,MAAM,iBAAiB,GAAG;IACxB,UAAU;IACV,WAAW;IACX,YAAY;IACZ,WAAW;IACX,WAAW;IACX,SAAS;IACT,WAAW;IACX,UAAU;CACX,CAAC;AAEF,MAAM,qBAAqB,GAAG;IAC5B,aAAa;IACb,aAAa;IACb,YAAY;IACZ,WAAW;IACX,UAAU;IACV,YAAY;IACZ,UAAU;CACX,CAAC;AAEF,mCAAmC;AACnC,MAAM,eAAe,GAAG;IACtB,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU;IACrE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ;CACrD,CAAC;AAEF,wCAAwC;AACxC,MAAM,gBAAgB,GAAG;IACvB,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;IAC/D,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM;IAClE,MAAM,EAAE,MAAM;CACf,CAAC;AAEF,8BAA8B;AAC9B,MAAM,oBAAoB,GAAG;IAC3B,kBAAkB;IAClB,iBAAiB;IACjB,UAAU;IACV,qBAAqB;IACrB,YAAY;IACZ,mCAAmC;CACpC,CAAC;AAEF,
|
|
1
|
+
{"version":3,"file":"interceptor.js","sourceRoot":"","sources":["../src/interceptor.ts"],"names":[],"mappings":"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"}
|
package/dist/observer.d.ts
CHANGED
|
@@ -2,14 +2,12 @@ import type { Page } from "playwright";
|
|
|
2
2
|
import type { ObserveResult } from "./types";
|
|
3
3
|
export declare class Observer {
|
|
4
4
|
private page;
|
|
5
|
-
private _lastElements;
|
|
6
5
|
constructor(page: Page);
|
|
7
6
|
observe(): Promise<ObserveResult>;
|
|
8
7
|
resolveElementId(id: string): Promise<{
|
|
9
8
|
x: number;
|
|
10
9
|
y: number;
|
|
11
10
|
} | null>;
|
|
12
|
-
private resolveCoords;
|
|
13
11
|
private resolveType;
|
|
14
12
|
private buildTextRepresentation;
|
|
15
13
|
}
|
package/dist/observer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAmB,aAAa,EAAe,MAAM,SAAS,CAAC;AAc3E,qBAAa,QAAQ;IACnB,OAAO,CAAC,IAAI,CAAO;
|
|
1
|
+
{"version":3,"file":"observer.d.ts","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAmB,aAAa,EAAe,MAAM,SAAS,CAAC;AAc3E,qBAAa,QAAQ;IACnB,OAAO,CAAC,IAAI,CAAO;gBAEP,IAAI,EAAE,IAAI;IAMhB,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAwLjC,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IA2B5E,OAAO,CAAC,WAAW;IAenB,OAAO,CAAC,uBAAuB;CAkChC"}
|
package/dist/observer.js
CHANGED
|
@@ -14,8 +14,6 @@ const PREFIX = {
|
|
|
14
14
|
};
|
|
15
15
|
class Observer {
|
|
16
16
|
page;
|
|
17
|
-
// Cache the last observation's elements so resolveElementId doesn't need to re-scan the DOM
|
|
18
|
-
_lastElements = [];
|
|
19
17
|
constructor(page) {
|
|
20
18
|
this.page = page;
|
|
21
19
|
}
|
|
@@ -31,8 +29,7 @@ class Observer {
|
|
|
31
29
|
rect.height > 0 &&
|
|
32
30
|
style.display !== "none" &&
|
|
33
31
|
style.visibility !== "hidden" &&
|
|
34
|
-
style.opacity !== "0"
|
|
35
|
-
style.pointerEvents !== "none");
|
|
32
|
+
style.opacity !== "0");
|
|
36
33
|
};
|
|
37
34
|
const getText = (el) => {
|
|
38
35
|
const aria = el.getAttribute("aria-label");
|
|
@@ -123,22 +120,10 @@ class Observer {
|
|
|
123
120
|
"[aria-modal='true']",
|
|
124
121
|
];
|
|
125
122
|
const hasModal = modalSelectors.some((s) => document.querySelector(s) !== null);
|
|
126
|
-
// Cookie banner detection
|
|
127
|
-
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
"[class*='cookie-banner']", "[class*='cookie-consent']", "[class*='gdpr']",
|
|
131
|
-
"[class*='consent-banner']", "[class*='privacy-banner']",
|
|
132
|
-
"[aria-label*='cookie']", "[aria-label*='consent']",
|
|
133
|
-
"[data-testid*='cookie']", "[data-testid*='consent']",
|
|
134
|
-
];
|
|
135
|
-
const hasCookieBanner = cookieBannerSelectors.some((s) => {
|
|
136
|
-
const el = document.querySelector(s);
|
|
137
|
-
if (!el)
|
|
138
|
-
return false;
|
|
139
|
-
const rect = el.getBoundingClientRect();
|
|
140
|
-
return rect.width > 0 && rect.height > 0;
|
|
141
|
-
});
|
|
123
|
+
// Cookie banner detection
|
|
124
|
+
const cookieKeywords = ["cookie", "gdpr", "consent", "accept all"];
|
|
125
|
+
const bodyText = document.body.innerText.toLowerCase();
|
|
126
|
+
const hasCookieBanner = cookieKeywords.some((k) => bodyText.includes(k));
|
|
142
127
|
// Loading detection
|
|
143
128
|
const loadingSelectors = [
|
|
144
129
|
"[aria-busy='true']",
|
|
@@ -174,8 +159,6 @@ class Observer {
|
|
|
174
159
|
visible: raw.visible,
|
|
175
160
|
});
|
|
176
161
|
}
|
|
177
|
-
// Update cache — used by resolveElementId to avoid a second DOM scan
|
|
178
|
-
this._lastElements = typedElements;
|
|
179
162
|
const text = this.buildTextRepresentation(typedElements, result);
|
|
180
163
|
return {
|
|
181
164
|
url: result.url,
|
|
@@ -187,22 +170,13 @@ class Observer {
|
|
|
187
170
|
text,
|
|
188
171
|
};
|
|
189
172
|
}
|
|
190
|
-
// Find an element by ID (@B3, @I1, etc.) and return its
|
|
191
|
-
// Uses the cached elements from the last observe() call — avoids a second full DOM scan.
|
|
192
|
-
// Falls back to a fresh observe() only if the element isn't in cache (DOM may have changed).
|
|
173
|
+
// Find an element by ID (@B3, @I1, etc.) and return its locator
|
|
193
174
|
async resolveElementId(id) {
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
if (!el)
|
|
200
|
-
return null;
|
|
201
|
-
}
|
|
202
|
-
return this.resolveCoords(el);
|
|
203
|
-
}
|
|
204
|
-
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
205
|
-
async resolveCoords(el) {
|
|
175
|
+
const elements = await this.observe();
|
|
176
|
+
const el = elements.elements.find((e) => e.id === id);
|
|
177
|
+
if (!el)
|
|
178
|
+
return null;
|
|
179
|
+
// Get coordinates by re-querying the DOM
|
|
206
180
|
return await this.page.evaluate((targetText) => {
|
|
207
181
|
const all = document.querySelectorAll("button, input, a, select, textarea, [role='button']");
|
|
208
182
|
for (const el of Array.from(all)) {
|
|
@@ -219,6 +193,7 @@ class Observer {
|
|
|
219
193
|
return null;
|
|
220
194
|
}, el.text ?? el.placeholder ?? "");
|
|
221
195
|
}
|
|
196
|
+
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
222
197
|
resolveType(tag, inputType) {
|
|
223
198
|
if (tag === "button")
|
|
224
199
|
return "button";
|
|
@@ -247,11 +222,11 @@ class Observer {
|
|
|
247
222
|
`URL: ${meta.url}`,
|
|
248
223
|
];
|
|
249
224
|
if (meta.isLoading)
|
|
250
|
-
lines.push("[PAGE IS LOADING]");
|
|
225
|
+
lines.push("[⏳ PAGE IS LOADING]");
|
|
251
226
|
if (meta.hasModal)
|
|
252
|
-
lines.push("[MODAL IS OPEN — may block interactions]");
|
|
227
|
+
lines.push("[⚠️ MODAL IS OPEN — may block interactions]");
|
|
253
228
|
if (meta.hasCookieBanner)
|
|
254
|
-
lines.push("[COOKIE BANNER DETECTED — dismiss first]");
|
|
229
|
+
lines.push("[🍪 COOKIE BANNER DETECTED — dismiss first]");
|
|
255
230
|
lines.push("", "INTERACTIVE ELEMENTS:");
|
|
256
231
|
const visible = elements.filter((e) => e.visible !== false);
|
|
257
232
|
const hidden = elements.filter((e) => e.visible === false);
|
|
@@ -264,7 +239,7 @@ class Observer {
|
|
|
264
239
|
if (el.value)
|
|
265
240
|
desc += ` value="${el.value}"`;
|
|
266
241
|
if (el.href)
|
|
267
|
-
desc += `
|
|
242
|
+
desc += ` → ${el.href.slice(0, 80)}`;
|
|
268
243
|
if (el.disabled)
|
|
269
244
|
desc += " (disabled)";
|
|
270
245
|
lines.push(desc);
|
package/dist/observer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observer.js","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":";;;AAGA,6BAA6B;AAC7B,MAAM,MAAM,GAAgC;IAC1C,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,GAAG;IACV,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;CACX,CAAC;AAEF,MAAa,QAAQ;IACX,IAAI,CAAO;
|
|
1
|
+
{"version":3,"file":"observer.js","sourceRoot":"","sources":["../src/observer.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
CHANGED
|
@@ -20,16 +20,10 @@ export declare class Session {
|
|
|
20
20
|
getCapturedRequests(): CapturedRequest[];
|
|
21
21
|
getUsefulRequests(minScore?: number): CapturedRequest[];
|
|
22
22
|
onRequest(handler: (req: CapturedRequest) => void): void;
|
|
23
|
-
getRequestsInWindow(startMs: number, endMs: number): CapturedRequest[];
|
|
24
23
|
act(goal: string, maxSteps?: number): Promise<ActResult>;
|
|
25
24
|
findData(goal: string, maxSteps?: number): Promise<FindDataResult>;
|
|
26
|
-
extractEmbeddedData(): Promise<{
|
|
27
|
-
source: string;
|
|
28
|
-
data: unknown;
|
|
29
|
-
} | null>;
|
|
30
25
|
close(): Promise<void>;
|
|
31
26
|
closeAll(): Promise<void>;
|
|
32
|
-
private dismissCookieBanner;
|
|
33
27
|
private executeAction;
|
|
34
28
|
}
|
|
35
29
|
//# sourceMappingURL=session.d.ts.map
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,SAAS,EACT,cAAc,EAEd,UAAU,EACX,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,SAAS,EACT,cAAc,EAEd,UAAU,EACX,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,qBAAa,OAAO;IAClB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,EAAE,CAAW;IACrB,OAAO,CAAC,cAAc,CAAS;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;gBAGrC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,EAAE,EAAE,QAAQ,EACZ,OAAO,SAAS,EAChB,SAAS,CAAC,EAAE,MAAM;IAkBd,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOhC,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrC,IAAI,GAAG,IAAI,MAAM,CAEhB;IAIK,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;IAMjC,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC;IAYjC,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3C,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAW/D,mBAAmB,IAAI,eAAe,EAAE;IAKxC,iBAAiB,CAAC,QAAQ,SAAI,GAAG,eAAe,EAAE;IAKlD,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI;IAMlD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,OAAO,CAAC,SAAS,CAAC;IAgDpD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,OAAO,CAAC,cAAc,CAAC;IAgB9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;YAOjB,aAAa;CAoC5B"}
|
package/dist/session.js
CHANGED
|
@@ -3,8 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Session = void 0;
|
|
4
4
|
const interceptor_1 = require("./interceptor");
|
|
5
5
|
const observer_1 = require("./observer");
|
|
6
|
-
// Maximum entries kept in the AI history array to bound prompt size
|
|
7
|
-
const MAX_HISTORY = 20;
|
|
8
6
|
class Session {
|
|
9
7
|
page;
|
|
10
8
|
browser;
|
|
@@ -60,14 +58,12 @@ class Session {
|
|
|
60
58
|
await this.page.mouse.click(coords.x, coords.y);
|
|
61
59
|
}
|
|
62
60
|
// Fill input by element ID from observe()
|
|
63
|
-
// Uses platform-appropriate select-all shortcut (Meta on macOS, Control elsewhere)
|
|
64
61
|
async fillById(elementId, value) {
|
|
65
62
|
const coords = await this.observer.resolveElementId(elementId);
|
|
66
63
|
if (!coords)
|
|
67
64
|
throw new Error(`Element ${elementId} not found in DOM`);
|
|
68
65
|
await this.page.mouse.click(coords.x, coords.y);
|
|
69
|
-
|
|
70
|
-
await this.page.keyboard.press(`${modifier}+a`);
|
|
66
|
+
await this.page.keyboard.press("Control+a");
|
|
71
67
|
await this.page.keyboard.type(value);
|
|
72
68
|
}
|
|
73
69
|
// ─── Captured requests ────────────────────────────────────────────────────────
|
|
@@ -83,10 +79,6 @@ class Session {
|
|
|
83
79
|
onRequest(handler) {
|
|
84
80
|
this.interceptor.on("request", handler);
|
|
85
81
|
}
|
|
86
|
-
// Returns requests that fired within a time window (used for action-triggered correlation)
|
|
87
|
-
getRequestsInWindow(startMs, endMs) {
|
|
88
|
-
return this.interceptor.getAll().filter(r => r.timestamp >= startMs && r.timestamp <= endMs);
|
|
89
|
-
}
|
|
90
82
|
// ─── act() — achieve a goal through multi-step navigation ────────────────────
|
|
91
83
|
async act(goal, maxSteps = 10) {
|
|
92
84
|
const steps = [];
|
|
@@ -106,43 +98,19 @@ class Session {
|
|
|
106
98
|
action = await this.ai.decideFromScreenshot(goal, shot.base64, history);
|
|
107
99
|
usedScreenshot = true;
|
|
108
100
|
}
|
|
109
|
-
|
|
101
|
+
steps.push({ action, observeBefore: observation, usedScreenshot });
|
|
110
102
|
history.push(`Step ${i + 1}: ${action.type} — ${action.reason}`);
|
|
111
|
-
if (history.length > MAX_HISTORY)
|
|
112
|
-
history.shift();
|
|
113
103
|
// Terminal states
|
|
114
104
|
if (action.type === "done") {
|
|
115
|
-
steps.push({ action, observeBefore: observation, usedScreenshot, triggeredRequests: [] });
|
|
116
105
|
return { success: true, steps, finalUrl: this.url, reason: action.reason };
|
|
117
106
|
}
|
|
118
107
|
if (action.type === "impossible") {
|
|
119
|
-
steps.push({ action, observeBefore: observation, usedScreenshot, triggeredRequests: [] });
|
|
120
108
|
return { success: false, steps, finalUrl: this.url, reason: action.reason };
|
|
121
109
|
}
|
|
122
|
-
// Execute action
|
|
123
|
-
const actionTs = Date.now();
|
|
110
|
+
// Execute action
|
|
124
111
|
await this.executeAction(action);
|
|
125
|
-
//
|
|
126
|
-
|
|
127
|
-
const isDataAction = action.type === "fill" || action.type === "pressKey" || action.type === "click";
|
|
128
|
-
if (isDataAction) {
|
|
129
|
-
// Wait longer — data needs time to load after interaction
|
|
130
|
-
await this.page.waitForTimeout(1200);
|
|
131
|
-
const shot = await this.screenshot();
|
|
132
|
-
const check = await this.ai.checkGoalAchieved(goal, shot.base64);
|
|
133
|
-
// Capture requests in the window triggered by this action
|
|
134
|
-
const triggeredRequests = this.getRequestsInWindow(actionTs, actionTs + 1400);
|
|
135
|
-
steps.push({ action, observeBefore: observation, usedScreenshot: true, triggeredRequests });
|
|
136
|
-
if (check.achieved) {
|
|
137
|
-
return { success: true, steps, finalUrl: this.url, reason: check.summary };
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
else {
|
|
141
|
-
// Non-data actions: short wait, no screenshot check
|
|
142
|
-
await this.page.waitForTimeout(500);
|
|
143
|
-
const triggeredRequests = this.getRequestsInWindow(actionTs, actionTs + 600);
|
|
144
|
-
steps.push({ action, observeBefore: observation, usedScreenshot, triggeredRequests });
|
|
145
|
-
}
|
|
112
|
+
// Short wait after interactions for page to settle
|
|
113
|
+
await this.page.waitForTimeout(500);
|
|
146
114
|
}
|
|
147
115
|
return {
|
|
148
116
|
success: false,
|
|
@@ -156,9 +124,6 @@ class Session {
|
|
|
156
124
|
// Do NOT clear — requests captured during goto() (t=0) are valuable.
|
|
157
125
|
// Give the page a moment to finish firing initial requests before acting.
|
|
158
126
|
await this.page.waitForTimeout(500);
|
|
159
|
-
// Dismiss any cookie/consent banner before starting navigation.
|
|
160
|
-
// This runs only when observe() detects hasCookieBanner=true — zero cost otherwise.
|
|
161
|
-
await this.dismissCookieBanner();
|
|
162
127
|
const actResult = await this.act(goal, maxSteps);
|
|
163
128
|
const capturedRequests = this.interceptor.getUseful();
|
|
164
129
|
return {
|
|
@@ -166,45 +131,6 @@ class Session {
|
|
|
166
131
|
capturedRequests,
|
|
167
132
|
};
|
|
168
133
|
}
|
|
169
|
-
// ─── Embedded data extraction ─────────────────────────────────────────────────
|
|
170
|
-
// Finds JSON data baked into the page HTML by SSR frameworks (Next.js, Nuxt, etc.)
|
|
171
|
-
// Useful when a site renders data server-side with no XHR traffic to capture.
|
|
172
|
-
async extractEmbeddedData() {
|
|
173
|
-
return this.page.evaluate(() => {
|
|
174
|
-
// Next.js: <script id="__NEXT_DATA__" type="application/json">
|
|
175
|
-
const nextEl = document.getElementById('__NEXT_DATA__');
|
|
176
|
-
if (nextEl?.textContent) {
|
|
177
|
-
try {
|
|
178
|
-
return { source: '__NEXT_DATA__', data: JSON.parse(nextEl.textContent) };
|
|
179
|
-
}
|
|
180
|
-
catch { /* */ }
|
|
181
|
-
}
|
|
182
|
-
// Nuxt 3: <script id="__NUXT_DATA__"> or inline hydration script
|
|
183
|
-
const nuxtEl = document.getElementById('__NUXT_DATA__') ?? document.querySelector('script[data-nuxt-data]');
|
|
184
|
-
if (nuxtEl?.textContent) {
|
|
185
|
-
try {
|
|
186
|
-
return { source: '__NUXT_DATA__', data: JSON.parse(nuxtEl.textContent) };
|
|
187
|
-
}
|
|
188
|
-
catch { /* */ }
|
|
189
|
-
}
|
|
190
|
-
// JSON-LD: <script type="application/ld+json">
|
|
191
|
-
const ldEl = document.querySelector('script[type="application/ld+json"]');
|
|
192
|
-
if (ldEl?.textContent) {
|
|
193
|
-
try {
|
|
194
|
-
return { source: 'json-ld', data: JSON.parse(ldEl.textContent) };
|
|
195
|
-
}
|
|
196
|
-
catch { /* */ }
|
|
197
|
-
}
|
|
198
|
-
// Generic window state variables common in SPAs
|
|
199
|
-
const win = window;
|
|
200
|
-
for (const key of ['__STATE__', '__INITIAL_STATE__', '__APP_STATE__', '__DATA__', '__REDUX_STATE__', 'APP_DATA']) {
|
|
201
|
-
if (win[key] && typeof win[key] === 'object') {
|
|
202
|
-
return { source: `window.${key}`, data: win[key] };
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
return null;
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
134
|
// ─── Cleanup ──────────────────────────────────────────────────────────────────
|
|
209
135
|
async close() {
|
|
210
136
|
this.interceptor.stop();
|
|
@@ -214,43 +140,6 @@ class Session {
|
|
|
214
140
|
this.interceptor.stop();
|
|
215
141
|
await this.browser.close();
|
|
216
142
|
}
|
|
217
|
-
// ─── Cookie banner dismissal ─────────────────────────────────────────────────
|
|
218
|
-
// Called once after page load. Only proceeds if observe() detects a banner.
|
|
219
|
-
// Layer 1: AI-driven (works for any language, any framework, any text).
|
|
220
|
-
// Layer 2: Known framework CSS selectors as fallback.
|
|
221
|
-
async dismissCookieBanner() {
|
|
222
|
-
try {
|
|
223
|
-
const observation = await this.observe();
|
|
224
|
-
if (!observation.hasCookieBanner)
|
|
225
|
-
return;
|
|
226
|
-
const action = await this.ai.decideFromObservation('dismiss the cookie/consent/GDPR banner — click the accept or dismiss button', observation, []);
|
|
227
|
-
if (action.type === 'click') {
|
|
228
|
-
await this.clickById(action.elementId).catch(() => { });
|
|
229
|
-
await this.page.waitForTimeout(400);
|
|
230
|
-
return;
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
catch { /* non-fatal */ }
|
|
234
|
-
// Layer 2: framework-specific selectors (OneTrust, CookieBot, etc.)
|
|
235
|
-
const selectors = [
|
|
236
|
-
'#onetrust-accept-btn-handler',
|
|
237
|
-
'#CybotCookiebotDialogBodyLevelButtonLevelOptinAllowAll',
|
|
238
|
-
'.cc-btn.cc-accept',
|
|
239
|
-
'[data-testid="cookie-accept"]',
|
|
240
|
-
'[id*="cookie"][id*="accept" i]',
|
|
241
|
-
];
|
|
242
|
-
for (const sel of selectors) {
|
|
243
|
-
try {
|
|
244
|
-
const el = this.page.locator(sel).first();
|
|
245
|
-
if (await el.isVisible({ timeout: 300 })) {
|
|
246
|
-
await el.click();
|
|
247
|
-
await this.page.waitForTimeout(400);
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
catch { /* try next */ }
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
143
|
// ─── Execute action ───────────────────────────────────────────────────────────
|
|
255
144
|
async executeAction(action) {
|
|
256
145
|
switch (action.type) {
|
|
@@ -265,9 +154,6 @@ class Session {
|
|
|
265
154
|
await this.page.getByRole("textbox").first().fill(action.value);
|
|
266
155
|
});
|
|
267
156
|
break;
|
|
268
|
-
case "pressKey":
|
|
269
|
-
await this.page.keyboard.press(action.key);
|
|
270
|
-
break;
|
|
271
157
|
case "scroll":
|
|
272
158
|
await this.page.evaluate(({ direction, amount }) => {
|
|
273
159
|
window.scrollBy(0, direction === "down" ? amount : -amount);
|
|
@@ -277,7 +163,7 @@ class Session {
|
|
|
277
163
|
await this.page.waitForTimeout(action.ms);
|
|
278
164
|
break;
|
|
279
165
|
case "screenshot":
|
|
280
|
-
//
|
|
166
|
+
// Already handled in act() loop — screenshot triggers AI vision fallback
|
|
281
167
|
break;
|
|
282
168
|
default:
|
|
283
169
|
break;
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":";;;AASA,+CAA4C;AAC5C,yCAAsC;AAGtC,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -42,10 +42,6 @@ export type AgentAction = {
|
|
|
42
42
|
elementId: string;
|
|
43
43
|
value: string;
|
|
44
44
|
reason: string;
|
|
45
|
-
} | {
|
|
46
|
-
type: "pressKey";
|
|
47
|
-
key: string;
|
|
48
|
-
reason: string;
|
|
49
45
|
} | {
|
|
50
46
|
type: "scroll";
|
|
51
47
|
direction: "up" | "down";
|
|
@@ -71,7 +67,6 @@ export interface ActResult {
|
|
|
71
67
|
action: AgentAction;
|
|
72
68
|
observeBefore: ObserveResult;
|
|
73
69
|
usedScreenshot: boolean;
|
|
74
|
-
triggeredRequests: CapturedRequest[];
|
|
75
70
|
}>;
|
|
76
71
|
finalUrl: string;
|
|
77
72
|
reason: string;
|
|
@@ -84,7 +79,6 @@ export interface SessionConfig {
|
|
|
84
79
|
browserbase?: {
|
|
85
80
|
apiKey: string;
|
|
86
81
|
projectId: string;
|
|
87
|
-
contextId?: string;
|
|
88
82
|
};
|
|
89
83
|
proxy?: {
|
|
90
84
|
server: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,OAAO,GACP,MAAM,GACN,QAAQ,GACR,UAAU,GACV,UAAU,GACV,OAAO,GACP,OAAO,CAAC;AAEZ,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,OAAO,CAAC;IACzB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAID,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAID,MAAM,MAAM,WAAW,GACnB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|