arise-browser 0.1.0
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/LICENSE +190 -0
- package/README.md +247 -0
- package/deploy/neko/CONTEXT.md +37 -0
- package/deploy/neko/arise-browser.service +13 -0
- package/deploy/neko/neko.yaml +12 -0
- package/deploy/neko/openbox.xml +763 -0
- package/deploy/neko/policies.json +28 -0
- package/deploy/neko/pulseaudio.pa +16 -0
- package/deploy/neko/setup.sh +308 -0
- package/deploy/neko/xorg.conf +118 -0
- package/dist/bin/arise-browser.d.ts +26 -0
- package/dist/bin/arise-browser.d.ts.map +1 -0
- package/dist/bin/arise-browser.js +224 -0
- package/dist/bin/arise-browser.js.map +1 -0
- package/dist/src/browser/action-executor.d.ts +98 -0
- package/dist/src/browser/action-executor.d.ts.map +1 -0
- package/dist/src/browser/action-executor.js +2726 -0
- package/dist/src/browser/action-executor.js.map +1 -0
- package/dist/src/browser/behavior-recorder.d.ts +61 -0
- package/dist/src/browser/behavior-recorder.d.ts.map +1 -0
- package/dist/src/browser/behavior-recorder.js +442 -0
- package/dist/src/browser/behavior-recorder.js.map +1 -0
- package/dist/src/browser/browser-session.d.ts +202 -0
- package/dist/src/browser/browser-session.d.ts.map +1 -0
- package/dist/src/browser/browser-session.js +1647 -0
- package/dist/src/browser/browser-session.js.map +1 -0
- package/dist/src/browser/config.d.ts +43 -0
- package/dist/src/browser/config.d.ts.map +1 -0
- package/dist/src/browser/config.js +59 -0
- package/dist/src/browser/config.js.map +1 -0
- package/dist/src/browser/page-snapshot.d.ts +38 -0
- package/dist/src/browser/page-snapshot.d.ts.map +1 -0
- package/dist/src/browser/page-snapshot.js +241 -0
- package/dist/src/browser/page-snapshot.js.map +1 -0
- package/dist/src/browser/scripts/behavior_tracker.js +424 -0
- package/dist/src/browser/scripts/unified_analyzer.js +1576 -0
- package/dist/src/index.d.ts +15 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +15 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/lock.d.ts +11 -0
- package/dist/src/lock.d.ts.map +1 -0
- package/dist/src/lock.js +47 -0
- package/dist/src/lock.js.map +1 -0
- package/dist/src/logger.d.ts +17 -0
- package/dist/src/logger.d.ts.map +1 -0
- package/dist/src/logger.js +29 -0
- package/dist/src/logger.js.map +1 -0
- package/dist/src/server/middleware/auth.d.ts +6 -0
- package/dist/src/server/middleware/auth.d.ts.map +1 -0
- package/dist/src/server/middleware/auth.js +24 -0
- package/dist/src/server/middleware/auth.js.map +1 -0
- package/dist/src/server/route-utils.d.ts +15 -0
- package/dist/src/server/route-utils.d.ts.map +1 -0
- package/dist/src/server/route-utils.js +33 -0
- package/dist/src/server/route-utils.js.map +1 -0
- package/dist/src/server/routes/action.d.ts +5 -0
- package/dist/src/server/routes/action.d.ts.map +1 -0
- package/dist/src/server/routes/action.js +69 -0
- package/dist/src/server/routes/action.js.map +1 -0
- package/dist/src/server/routes/actions.d.ts +3 -0
- package/dist/src/server/routes/actions.d.ts.map +1 -0
- package/dist/src/server/routes/actions.js +53 -0
- package/dist/src/server/routes/actions.js.map +1 -0
- package/dist/src/server/routes/cookies.d.ts +3 -0
- package/dist/src/server/routes/cookies.d.ts.map +1 -0
- package/dist/src/server/routes/cookies.js +27 -0
- package/dist/src/server/routes/cookies.js.map +1 -0
- package/dist/src/server/routes/download.d.ts +3 -0
- package/dist/src/server/routes/download.d.ts.map +1 -0
- package/dist/src/server/routes/download.js +35 -0
- package/dist/src/server/routes/download.js.map +1 -0
- package/dist/src/server/routes/evaluate.d.ts +3 -0
- package/dist/src/server/routes/evaluate.d.ts.map +1 -0
- package/dist/src/server/routes/evaluate.js +27 -0
- package/dist/src/server/routes/evaluate.js.map +1 -0
- package/dist/src/server/routes/health.d.ts +3 -0
- package/dist/src/server/routes/health.d.ts.map +1 -0
- package/dist/src/server/routes/health.js +11 -0
- package/dist/src/server/routes/health.js.map +1 -0
- package/dist/src/server/routes/navigate.d.ts +3 -0
- package/dist/src/server/routes/navigate.d.ts.map +1 -0
- package/dist/src/server/routes/navigate.js +36 -0
- package/dist/src/server/routes/navigate.js.map +1 -0
- package/dist/src/server/routes/page-model.d.ts +3 -0
- package/dist/src/server/routes/page-model.d.ts.map +1 -0
- package/dist/src/server/routes/page-model.js +22 -0
- package/dist/src/server/routes/page-model.js.map +1 -0
- package/dist/src/server/routes/pdf.d.ts +3 -0
- package/dist/src/server/routes/pdf.d.ts.map +1 -0
- package/dist/src/server/routes/pdf.js +20 -0
- package/dist/src/server/routes/pdf.js.map +1 -0
- package/dist/src/server/routes/recording.d.ts +5 -0
- package/dist/src/server/routes/recording.d.ts.map +1 -0
- package/dist/src/server/routes/recording.js +217 -0
- package/dist/src/server/routes/recording.js.map +1 -0
- package/dist/src/server/routes/screenshot.d.ts +3 -0
- package/dist/src/server/routes/screenshot.d.ts.map +1 -0
- package/dist/src/server/routes/screenshot.js +32 -0
- package/dist/src/server/routes/screenshot.js.map +1 -0
- package/dist/src/server/routes/snapshot.d.ts +3 -0
- package/dist/src/server/routes/snapshot.d.ts.map +1 -0
- package/dist/src/server/routes/snapshot.js +454 -0
- package/dist/src/server/routes/snapshot.js.map +1 -0
- package/dist/src/server/routes/tab-lock.d.ts +3 -0
- package/dist/src/server/routes/tab-lock.d.ts.map +1 -0
- package/dist/src/server/routes/tab-lock.js +30 -0
- package/dist/src/server/routes/tab-lock.js.map +1 -0
- package/dist/src/server/routes/tab.d.ts +3 -0
- package/dist/src/server/routes/tab.d.ts.map +1 -0
- package/dist/src/server/routes/tab.js +47 -0
- package/dist/src/server/routes/tab.js.map +1 -0
- package/dist/src/server/routes/tabs.d.ts +3 -0
- package/dist/src/server/routes/tabs.d.ts.map +1 -0
- package/dist/src/server/routes/tabs.js +13 -0
- package/dist/src/server/routes/tabs.js.map +1 -0
- package/dist/src/server/routes/text.d.ts +3 -0
- package/dist/src/server/routes/text.d.ts.map +1 -0
- package/dist/src/server/routes/text.js +20 -0
- package/dist/src/server/routes/text.js.map +1 -0
- package/dist/src/server/routes/upload.d.ts +3 -0
- package/dist/src/server/routes/upload.d.ts.map +1 -0
- package/dist/src/server/routes/upload.js +38 -0
- package/dist/src/server/routes/upload.js.map +1 -0
- package/dist/src/server/server.d.ts +7 -0
- package/dist/src/server/server.d.ts.map +1 -0
- package/dist/src/server/server.js +69 -0
- package/dist/src/server/server.js.map +1 -0
- package/dist/src/types/index.d.ts +125 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +5 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/virtual-display/manager.d.ts +37 -0
- package/dist/src/virtual-display/manager.d.ts.map +1 -0
- package/dist/src/virtual-display/manager.js +229 -0
- package/dist/src/virtual-display/manager.js.map +1 -0
- package/dist/src/virtual-display/process-runner.d.ts +43 -0
- package/dist/src/virtual-display/process-runner.d.ts.map +1 -0
- package/dist/src/virtual-display/process-runner.js +174 -0
- package/dist/src/virtual-display/process-runner.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +57 -0
- package/plugin/openclaw.plugin.json +148 -0
- package/skill/arise-browser/SKILL.md +275 -0
- package/skill/arise-browser/TRUST.md +42 -0
- package/skill/arise-browser/references/api.md +198 -0
- package/src/browser/scripts/behavior_tracker.js +424 -0
- package/src/browser/scripts/unified_analyzer.js +1576 -0
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* AriseBrowser CLI — Start the HTTP server.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* npx arise-browser [options]
|
|
7
|
+
*
|
|
8
|
+
* Options:
|
|
9
|
+
* --port, -p Server port (default: 9867)
|
|
10
|
+
* --host Bind address (default: 127.0.0.1)
|
|
11
|
+
* --token Auth token
|
|
12
|
+
* --headless Run headless (default: true)
|
|
13
|
+
* --no-headless Run with visible browser
|
|
14
|
+
* --profile Browser profile directory (enables managed mode)
|
|
15
|
+
* --cdp CDP endpoint URL (enables cdp mode)
|
|
16
|
+
* --help Show help
|
|
17
|
+
*
|
|
18
|
+
* Environment variables (Pinchtab-compatible):
|
|
19
|
+
* ARISE_BROWSER_PORT / BRIDGE_PORT
|
|
20
|
+
* ARISE_BROWSER_BIND / BRIDGE_BIND
|
|
21
|
+
* ARISE_BROWSER_TOKEN / BRIDGE_TOKEN
|
|
22
|
+
* ARISE_BROWSER_HEADLESS
|
|
23
|
+
* ARISE_BROWSER_PROFILE
|
|
24
|
+
*/
|
|
25
|
+
import { createServer } from "../src/server/server.js";
|
|
26
|
+
import { VirtualDisplayManager } from "../src/virtual-display/manager.js";
|
|
27
|
+
import { readFileSync } from "node:fs";
|
|
28
|
+
function getPackageVersion() {
|
|
29
|
+
const candidates = [
|
|
30
|
+
new URL("../package.json", import.meta.url),
|
|
31
|
+
new URL("../../package.json", import.meta.url),
|
|
32
|
+
];
|
|
33
|
+
for (const candidate of candidates) {
|
|
34
|
+
try {
|
|
35
|
+
const pkg = JSON.parse(readFileSync(candidate, "utf-8"));
|
|
36
|
+
if (pkg.version) {
|
|
37
|
+
return pkg.version;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// try next path
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
throw new Error(`Could not locate package.json for CLI version. Tried: ${candidates.join(", ")}`);
|
|
45
|
+
}
|
|
46
|
+
const PKG_VERSION = getPackageVersion();
|
|
47
|
+
const args = process.argv.slice(2);
|
|
48
|
+
function getArg(names) {
|
|
49
|
+
for (const name of names) {
|
|
50
|
+
const idx = args.indexOf(name);
|
|
51
|
+
if (idx !== -1 && idx + 1 < args.length) {
|
|
52
|
+
return args[idx + 1];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return undefined;
|
|
56
|
+
}
|
|
57
|
+
function hasFlag(names) {
|
|
58
|
+
return names.some((n) => args.includes(n));
|
|
59
|
+
}
|
|
60
|
+
if (hasFlag(["--help", "-h"])) {
|
|
61
|
+
console.log(`
|
|
62
|
+
AriseBrowser — AI browser automation engine
|
|
63
|
+
|
|
64
|
+
Usage: arise-browser [options]
|
|
65
|
+
|
|
66
|
+
Options:
|
|
67
|
+
--port, -p <port> Server port (default: 9867)
|
|
68
|
+
--host <host> Bind address (default: 127.0.0.1)
|
|
69
|
+
--token <token> Bearer auth token
|
|
70
|
+
--headless Run headless (default)
|
|
71
|
+
--no-headless Run with visible browser
|
|
72
|
+
--profile <dir> Browser profile dir (managed mode)
|
|
73
|
+
--cdp <url> CDP endpoint URL (cdp mode)
|
|
74
|
+
--help Show this help
|
|
75
|
+
|
|
76
|
+
Virtual display mode (Linux server):
|
|
77
|
+
--virtual-display Enable Xvfb + Neko streaming
|
|
78
|
+
--neko-port <port> Neko HTTP/WS port (default: 6090)
|
|
79
|
+
--neko-password <pwd> Neko user password (default: "neko")
|
|
80
|
+
--neko-admin-password <pwd> Neko admin password (default: "admin")
|
|
81
|
+
|
|
82
|
+
Environment variables:
|
|
83
|
+
ARISE_BROWSER_PORT / BRIDGE_PORT Default: 9867
|
|
84
|
+
ARISE_BROWSER_BIND / BRIDGE_BIND Default: 127.0.0.1
|
|
85
|
+
ARISE_BROWSER_TOKEN / BRIDGE_TOKEN Auth token
|
|
86
|
+
ARISE_BROWSER_HEADLESS "true" or "false"
|
|
87
|
+
ARISE_BROWSER_PROFILE Profile dir (managed mode)
|
|
88
|
+
ARISE_BROWSER_VIRTUAL_DISPLAY "true" to enable virtual display
|
|
89
|
+
ARISE_BROWSER_NEKO_PORT Neko port (default: 6090)
|
|
90
|
+
ARISE_BROWSER_NEKO_PASSWORD Neko user password
|
|
91
|
+
ARISE_BROWSER_NEKO_ADMIN_PASSWORD Neko admin password
|
|
92
|
+
`);
|
|
93
|
+
process.exit(0);
|
|
94
|
+
}
|
|
95
|
+
const port = parseInt(getArg(["--port", "-p"])
|
|
96
|
+
|| process.env.ARISE_BROWSER_PORT
|
|
97
|
+
|| process.env.BRIDGE_PORT
|
|
98
|
+
|| "9867", 10);
|
|
99
|
+
if (Number.isNaN(port) || port < 0 || port > 65535) {
|
|
100
|
+
console.error("Error: invalid port number");
|
|
101
|
+
process.exit(1);
|
|
102
|
+
}
|
|
103
|
+
const host = getArg(["--host"])
|
|
104
|
+
|| process.env.ARISE_BROWSER_BIND
|
|
105
|
+
|| process.env.BRIDGE_BIND
|
|
106
|
+
|| "127.0.0.1";
|
|
107
|
+
const token = getArg(["--token"])
|
|
108
|
+
|| process.env.ARISE_BROWSER_TOKEN
|
|
109
|
+
|| process.env.BRIDGE_TOKEN;
|
|
110
|
+
const cdpUrl = getArg(["--cdp"]);
|
|
111
|
+
const profileDir = getArg(["--profile"])
|
|
112
|
+
|| process.env.ARISE_BROWSER_PROFILE;
|
|
113
|
+
let headless = true;
|
|
114
|
+
if (hasFlag(["--no-headless"])) {
|
|
115
|
+
headless = false;
|
|
116
|
+
}
|
|
117
|
+
else if (process.env.ARISE_BROWSER_HEADLESS === "false") {
|
|
118
|
+
headless = false;
|
|
119
|
+
}
|
|
120
|
+
// Virtual display mode
|
|
121
|
+
const virtualDisplayEnabled = hasFlag(["--virtual-display"])
|
|
122
|
+
|| process.env.ARISE_BROWSER_VIRTUAL_DISPLAY === "true";
|
|
123
|
+
const nekoPort = parseInt(getArg(["--neko-port"])
|
|
124
|
+
|| process.env.ARISE_BROWSER_NEKO_PORT
|
|
125
|
+
|| "6090", 10);
|
|
126
|
+
const nekoPassword = getArg(["--neko-password"])
|
|
127
|
+
|| process.env.ARISE_BROWSER_NEKO_PASSWORD
|
|
128
|
+
|| "neko";
|
|
129
|
+
const nekoAdminPassword = getArg(["--neko-admin-password"])
|
|
130
|
+
|| process.env.ARISE_BROWSER_NEKO_ADMIN_PASSWORD
|
|
131
|
+
|| "admin";
|
|
132
|
+
// Determine mode
|
|
133
|
+
let mode = "standalone";
|
|
134
|
+
let effectiveCdpUrl = cdpUrl;
|
|
135
|
+
if (virtualDisplayEnabled) {
|
|
136
|
+
// Virtual display forces CDP mode — Chrome is launched by VirtualDisplayManager
|
|
137
|
+
mode = "cdp";
|
|
138
|
+
effectiveCdpUrl = "http://localhost:9222";
|
|
139
|
+
}
|
|
140
|
+
else if (cdpUrl) {
|
|
141
|
+
mode = "cdp";
|
|
142
|
+
}
|
|
143
|
+
else if (profileDir) {
|
|
144
|
+
mode = "managed";
|
|
145
|
+
}
|
|
146
|
+
const browserConfig = {
|
|
147
|
+
mode,
|
|
148
|
+
cdpUrl: effectiveCdpUrl,
|
|
149
|
+
headless,
|
|
150
|
+
profileDir,
|
|
151
|
+
stealthHeaders: true,
|
|
152
|
+
...(virtualDisplayEnabled && {
|
|
153
|
+
virtualDisplay: {
|
|
154
|
+
enabled: true,
|
|
155
|
+
nekoPort,
|
|
156
|
+
nekoPassword,
|
|
157
|
+
nekoAdminPassword,
|
|
158
|
+
},
|
|
159
|
+
}),
|
|
160
|
+
};
|
|
161
|
+
async function main() {
|
|
162
|
+
console.log(`AriseBrowser v${PKG_VERSION}`);
|
|
163
|
+
console.log(`Mode: ${mode} | Headless: ${headless} | Port: ${port}`);
|
|
164
|
+
let displayManager = null;
|
|
165
|
+
// Start virtual display environment before the HTTP server
|
|
166
|
+
if (virtualDisplayEnabled) {
|
|
167
|
+
console.log(`Virtual display: enabled (Neko :${nekoPort})`);
|
|
168
|
+
displayManager = new VirtualDisplayManager({
|
|
169
|
+
nekoPort,
|
|
170
|
+
nekoPassword,
|
|
171
|
+
nekoAdminPassword,
|
|
172
|
+
});
|
|
173
|
+
await displayManager.start();
|
|
174
|
+
}
|
|
175
|
+
const server = await createServer(browserConfig, { port, host, token });
|
|
176
|
+
await server.listen({ port, host });
|
|
177
|
+
console.log(`Server listening on http://${host}:${port}`);
|
|
178
|
+
if (token) {
|
|
179
|
+
console.log(`Auth: Bearer token required`);
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
console.log(`Auth: disabled (set ARISE_BROWSER_TOKEN to enable)`);
|
|
183
|
+
}
|
|
184
|
+
if (displayManager) {
|
|
185
|
+
console.log(`Neko streaming on http://0.0.0.0:${nekoPort}`);
|
|
186
|
+
}
|
|
187
|
+
// Graceful shutdown with forced exit timeout
|
|
188
|
+
let shuttingDown = false;
|
|
189
|
+
const shutdown = async () => {
|
|
190
|
+
if (shuttingDown) {
|
|
191
|
+
console.log("Forced exit.");
|
|
192
|
+
process.exit(1);
|
|
193
|
+
}
|
|
194
|
+
shuttingDown = true;
|
|
195
|
+
console.log("\nShutting down...");
|
|
196
|
+
const forceTimer = setTimeout(() => {
|
|
197
|
+
console.error("Shutdown timed out — forcing exit");
|
|
198
|
+
process.exit(1);
|
|
199
|
+
}, 15_000);
|
|
200
|
+
forceTimer.unref();
|
|
201
|
+
try {
|
|
202
|
+
await server.close();
|
|
203
|
+
}
|
|
204
|
+
catch (e) {
|
|
205
|
+
console.error("Error during server shutdown:", e);
|
|
206
|
+
}
|
|
207
|
+
if (displayManager) {
|
|
208
|
+
try {
|
|
209
|
+
await displayManager.stop();
|
|
210
|
+
}
|
|
211
|
+
catch (e) {
|
|
212
|
+
console.error("Error during display shutdown:", e);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
process.exit(0);
|
|
216
|
+
};
|
|
217
|
+
process.on("SIGINT", shutdown);
|
|
218
|
+
process.on("SIGTERM", shutdown);
|
|
219
|
+
}
|
|
220
|
+
main().catch((err) => {
|
|
221
|
+
console.error("Fatal:", err);
|
|
222
|
+
process.exit(1);
|
|
223
|
+
});
|
|
224
|
+
//# sourceMappingURL=arise-browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arise-browser.js","sourceRoot":"","sources":["../../bin/arise-browser.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,SAAS,iBAAiB;IACxB,MAAM,UAAU,GAAG;QACjB,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAC3C,IAAI,GAAG,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;KAC/C,CAAC;IAEF,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAyB,CAAC;YACjF,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;gBAChB,OAAO,GAAG,CAAC,OAAO,CAAC;YACrB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,yDAAyD,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACpG,CAAC;AAED,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAC;AAExC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAEnC,SAAS,MAAM,CAAC,KAAe;IAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACxC,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,OAAO,CAAC,KAAe;IAC9B,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,EAAE,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Bb,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,IAAI,GAAG,QAAQ,CACnB,MAAM,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;OACnB,OAAO,CAAC,GAAG,CAAC,kBAAkB;OAC9B,OAAO,CAAC,GAAG,CAAC,WAAW;OACvB,MAAM,EACX,EAAE,CACH,CAAC;AACF,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE,CAAC;IACnD,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,IAAI,GACR,MAAM,CAAC,CAAC,QAAQ,CAAC,CAAC;OACb,OAAO,CAAC,GAAG,CAAC,kBAAkB;OAC9B,OAAO,CAAC,GAAG,CAAC,WAAW;OACvB,WAAW,CAAC;AAEnB,MAAM,KAAK,GACT,MAAM,CAAC,CAAC,SAAS,CAAC,CAAC;OACd,OAAO,CAAC,GAAG,CAAC,mBAAmB;OAC/B,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;AAEhC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACjC,MAAM,UAAU,GACd,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;OAChB,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;AAEzC,IAAI,QAAQ,GAAG,IAAI,CAAC;AACpB,IAAI,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC;IAC/B,QAAQ,GAAG,KAAK,CAAC;AACnB,CAAC;KAAM,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,KAAK,OAAO,EAAE,CAAC;IAC1D,QAAQ,GAAG,KAAK,CAAC;AACnB,CAAC;AAED,uBAAuB;AACvB,MAAM,qBAAqB,GACzB,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC;OAC3B,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,MAAM,CAAC;AAE1D,MAAM,QAAQ,GAAG,QAAQ,CACvB,MAAM,CAAC,CAAC,aAAa,CAAC,CAAC;OAClB,OAAO,CAAC,GAAG,CAAC,uBAAuB;OACnC,MAAM,EACX,EAAE,CACH,CAAC;AAEF,MAAM,YAAY,GAChB,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;OACtB,OAAO,CAAC,GAAG,CAAC,2BAA2B;OACvC,MAAM,CAAC;AAEd,MAAM,iBAAiB,GACrB,MAAM,CAAC,CAAC,uBAAuB,CAAC,CAAC;OAC5B,OAAO,CAAC,GAAG,CAAC,iCAAiC;OAC7C,OAAO,CAAC;AAEf,iBAAiB;AACjB,IAAI,IAAI,GAA+B,YAAY,CAAC;AACpD,IAAI,eAAe,GAAG,MAAM,CAAC;AAE7B,IAAI,qBAAqB,EAAE,CAAC;IAC1B,gFAAgF;IAChF,IAAI,GAAG,KAAK,CAAC;IACb,eAAe,GAAG,uBAAuB,CAAC;AAC5C,CAAC;KAAM,IAAI,MAAM,EAAE,CAAC;IAClB,IAAI,GAAG,KAAK,CAAC;AACf,CAAC;KAAM,IAAI,UAAU,EAAE,CAAC;IACtB,IAAI,GAAG,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,aAAa,GAAuB;IACxC,IAAI;IACJ,MAAM,EAAE,eAAe;IACvB,QAAQ;IACR,UAAU;IACV,cAAc,EAAE,IAAI;IACpB,GAAG,CAAC,qBAAqB,IAAI;QAC3B,cAAc,EAAE;YACd,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,YAAY;YACZ,iBAAiB;SAClB;KACF,CAAC;CACH,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,OAAO,CAAC,GAAG,CAAC,iBAAiB,WAAW,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,gBAAgB,QAAQ,YAAY,IAAI,EAAE,CAAC,CAAC;IAErE,IAAI,cAAc,GAAiC,IAAI,CAAC;IAExD,2DAA2D;IAC3D,IAAI,qBAAqB,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,mCAAmC,QAAQ,GAAG,CAAC,CAAC;QAC5D,cAAc,GAAG,IAAI,qBAAqB,CAAC;YACzC,QAAQ;YACR,YAAY;YACZ,iBAAiB;SAClB,CAAC,CAAC;QACH,MAAM,cAAc,CAAC,KAAK,EAAE,CAAC;IAC/B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAExE,MAAM,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;IAC1D,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;IAC7C,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,6CAA6C;IAC7C,IAAI,YAAY,GAAG,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,KAAK,IAAI,EAAE;QAC1B,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,YAAY,GAAG,IAAI,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAElC,MAAM,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;YACjC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,UAAU,CAAC,KAAK,EAAE,CAAC;QAEnB,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,CAAC,CAAC,CAAC;QACpD,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,cAAc,CAAC,IAAI,EAAE,CAAC;YAC9B,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ActionExecutor — Executes high-level actions on a Playwright Page.
|
|
3
|
+
*
|
|
4
|
+
* Action types: click, type, select, wait, extract, scroll, enter,
|
|
5
|
+
* mouse_control, mouse_drag, press_key, navigate, back, forward,
|
|
6
|
+
* hover, focus
|
|
7
|
+
*
|
|
8
|
+
* Click: supports aria-ref/CSS selector, prefers regular click,
|
|
9
|
+
* and validates observable state change to avoid false success.
|
|
10
|
+
* Mouse control: JS elementFromPoint + dispatchEvent.
|
|
11
|
+
*/
|
|
12
|
+
import type { Page } from "playwright";
|
|
13
|
+
import type { ActionDict, ActionResult, SessionRef } from "../types/index.js";
|
|
14
|
+
export declare class ActionExecutor {
|
|
15
|
+
private page;
|
|
16
|
+
private session;
|
|
17
|
+
private defaultTimeout;
|
|
18
|
+
private shortTimeout;
|
|
19
|
+
private maxScrollAmount;
|
|
20
|
+
constructor(page: Page, session?: SessionRef);
|
|
21
|
+
execute(action: ActionDict): Promise<ActionResult>;
|
|
22
|
+
static shouldUpdateSnapshot(action: ActionDict): boolean;
|
|
23
|
+
private _click;
|
|
24
|
+
private _type;
|
|
25
|
+
private _select;
|
|
26
|
+
private _wait;
|
|
27
|
+
private _extract;
|
|
28
|
+
private _scroll;
|
|
29
|
+
private _enter;
|
|
30
|
+
private _mouseControl;
|
|
31
|
+
private _mouseDrag;
|
|
32
|
+
private _pressKey;
|
|
33
|
+
private _navigate;
|
|
34
|
+
private _back;
|
|
35
|
+
private _forward;
|
|
36
|
+
private _hover;
|
|
37
|
+
private _focus;
|
|
38
|
+
private _normalizeClickIntent;
|
|
39
|
+
private _normalizeClickExpectedEffect;
|
|
40
|
+
private _deriveClickIntent;
|
|
41
|
+
private _resolveExpectedHref;
|
|
42
|
+
private _resolveAbsoluteUrl;
|
|
43
|
+
private _classifyExpectedHref;
|
|
44
|
+
private _tryParseUrl;
|
|
45
|
+
private _normalizePath;
|
|
46
|
+
private _urlMatchesExpected;
|
|
47
|
+
private _arraysEqual;
|
|
48
|
+
private _recoverClickTarget;
|
|
49
|
+
private _clearRecoveryMarker;
|
|
50
|
+
private _executeAutoClick;
|
|
51
|
+
private _attemptCtrlClickNewTab;
|
|
52
|
+
private _executeSameTabLinkClick;
|
|
53
|
+
private _clickAndVerifyLinkAttempt;
|
|
54
|
+
private _waitForLinkVerification;
|
|
55
|
+
private _executeUiClick;
|
|
56
|
+
private _executeCalendarClick;
|
|
57
|
+
private _classifyCalendarTarget;
|
|
58
|
+
private _captureCalendarObservation;
|
|
59
|
+
private _evaluateCalendarObservationChange;
|
|
60
|
+
private _didMeaningfulUiChange;
|
|
61
|
+
private _isLikelyLink;
|
|
62
|
+
private _captureClickObservation;
|
|
63
|
+
private _didClickObservationChange;
|
|
64
|
+
private _toMeaningfulClickTargetState;
|
|
65
|
+
private _toSemanticPageVector;
|
|
66
|
+
private _evaluateObservedClickEffect;
|
|
67
|
+
private _getClickObservationDelta;
|
|
68
|
+
private _formatFocusOnlyClickMessage;
|
|
69
|
+
private _readTypeIdentity;
|
|
70
|
+
private _readTypeState;
|
|
71
|
+
private _readTypeStateWithFallback;
|
|
72
|
+
private _reacquireTypeControl;
|
|
73
|
+
private _buildTypeIdentityLocators;
|
|
74
|
+
private _shouldPreferKeyboardTyping;
|
|
75
|
+
private _typeStateMatchesExpected;
|
|
76
|
+
private _normalizeTypeToken;
|
|
77
|
+
private _normalizeSelectToken;
|
|
78
|
+
private _escapeAttributeValue;
|
|
79
|
+
private _parseTimeToken;
|
|
80
|
+
private _parseCountToken;
|
|
81
|
+
private _inferSelectDomain;
|
|
82
|
+
private _resolveSelectOption;
|
|
83
|
+
private _selectStateMatchesOption;
|
|
84
|
+
private _selectModelMatchesResolution;
|
|
85
|
+
private _readSelectModel;
|
|
86
|
+
private _clickFirstVisible;
|
|
87
|
+
private _readScopedSelectOptions;
|
|
88
|
+
private _reacquireSelectModel;
|
|
89
|
+
private _buildSelectIdentityLocators;
|
|
90
|
+
private _openCustomSelectScope;
|
|
91
|
+
private _findVisiblePopupScope;
|
|
92
|
+
private _clickScopedSelectOption;
|
|
93
|
+
private _toSelectStateDebug;
|
|
94
|
+
private _toSelectOptionDebug;
|
|
95
|
+
private _toSelectResolutionDebug;
|
|
96
|
+
private _validCoordinates;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=action-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-executor.d.ts","sourceRoot":"","sources":["../../../src/browser/action-executor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,YAAY,CAAC;AAGhD,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAsL9E,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAAO;IACnB,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,eAAe,CAAS;gBAEpB,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,UAAU;IAQtC,OAAO,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC;IAkDxD,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO;YAW1C,MAAM;YAuNN,KAAK;YAuHL,OAAO;YAkHP,KAAK;YA4BL,QAAQ;YA6BR,OAAO;YAmCP,MAAM;YAQN,aAAa;YAsFb,UAAU;YAkFV,SAAS;YAuBT,SAAS;YAoBT,KAAK;YAWL,QAAQ;YAaR,MAAM;YA0BN,MAAM;IA0BpB,OAAO,CAAC,qBAAqB;IAQ7B,OAAO,CAAC,6BAA6B;IAQrC,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,qBAAqB;IAwB7B,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,mBAAmB;IAiB3B,OAAO,CAAC,YAAY;YAKN,mBAAmB;YAiJnB,oBAAoB;YAYpB,iBAAiB;YA2IjB,uBAAuB;YAuEvB,wBAAwB;YAiFxB,0BAA0B;YAkD1B,wBAAwB;YAkGxB,eAAe;YAuGf,qBAAqB;IAwEnC,OAAO,CAAC,uBAAuB;YAwBjB,2BAA2B;IAyIzC,OAAO,CAAC,kCAAkC;IAgD1C,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,aAAa;YAcP,wBAAwB;IA2NtC,OAAO,CAAC,0BAA0B;IAIlC,OAAO,CAAC,6BAA6B;IAgBrC,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,4BAA4B;IAqCpC,OAAO,CAAC,yBAAyB;IAwBjC,OAAO,CAAC,4BAA4B;YAItB,iBAAiB;YAuBjB,cAAc;YA4Bd,0BAA0B;YA2B1B,qBAAqB;IAYnC,OAAO,CAAC,0BAA0B;IAiDlC,OAAO,CAAC,2BAA2B;IAWnC,OAAO,CAAC,yBAAyB;IAoBjC,OAAO,CAAC,mBAAmB;IAI3B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,eAAe;IAmCvB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,kBAAkB;IAqB1B,OAAO,CAAC,oBAAoB;IA8C5B,OAAO,CAAC,yBAAyB;IA+CjC,OAAO,CAAC,6BAA6B;YAIvB,gBAAgB;YAmFhB,kBAAkB;YAmClB,wBAAwB;YAsDxB,qBAAqB;IAQnC,OAAO,CAAC,4BAA4B;YA4BtB,sBAAsB;YAsCtB,sBAAsB;YA6BtB,wBAAwB;IA+CtC,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,wBAAwB;IAShC,OAAO,CAAC,iBAAiB;CAO1B"}
|