imperium-crawl 2.4.0 → 2.5.2

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.
Files changed (166) hide show
  1. package/README.md +130 -11
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +23 -3
  4. package/dist/cli.js.map +1 -1
  5. package/dist/constants.d.ts +1 -1
  6. package/dist/constants.d.ts.map +1 -1
  7. package/dist/constants.js +31 -1
  8. package/dist/constants.js.map +1 -1
  9. package/dist/flows/engine.d.ts +7 -0
  10. package/dist/flows/engine.d.ts.map +1 -0
  11. package/dist/flows/engine.js +183 -0
  12. package/dist/flows/engine.js.map +1 -0
  13. package/dist/flows/index.d.ts +6 -0
  14. package/dist/flows/index.d.ts.map +1 -0
  15. package/dist/flows/index.js +6 -0
  16. package/dist/flows/index.js.map +1 -0
  17. package/dist/flows/server.d.ts +11 -0
  18. package/dist/flows/server.d.ts.map +1 -0
  19. package/dist/flows/server.js +81 -0
  20. package/dist/flows/server.js.map +1 -0
  21. package/dist/flows/smart-target.d.ts +9 -0
  22. package/dist/flows/smart-target.d.ts.map +1 -0
  23. package/dist/flows/smart-target.js +84 -0
  24. package/dist/flows/smart-target.js.map +1 -0
  25. package/dist/flows/storage.d.ts +26 -0
  26. package/dist/flows/storage.d.ts.map +1 -0
  27. package/dist/flows/storage.js +118 -0
  28. package/dist/flows/storage.js.map +1 -0
  29. package/dist/flows/templates.d.ts +4 -0
  30. package/dist/flows/templates.d.ts.map +1 -0
  31. package/dist/flows/templates.js +35 -0
  32. package/dist/flows/templates.js.map +1 -0
  33. package/dist/flows/types.d.ts +3356 -0
  34. package/dist/flows/types.d.ts.map +1 -0
  35. package/dist/flows/types.js +133 -0
  36. package/dist/flows/types.js.map +1 -0
  37. package/dist/knowledge/store.d.ts +19 -0
  38. package/dist/knowledge/store.d.ts.map +1 -1
  39. package/dist/knowledge/store.js +63 -4
  40. package/dist/knowledge/store.js.map +1 -1
  41. package/dist/sessions/browser-connect.d.ts +30 -0
  42. package/dist/sessions/browser-connect.d.ts.map +1 -0
  43. package/dist/sessions/browser-connect.js +68 -0
  44. package/dist/sessions/browser-connect.js.map +1 -0
  45. package/dist/sessions/browser-state.d.ts +35 -0
  46. package/dist/sessions/browser-state.d.ts.map +1 -0
  47. package/dist/sessions/browser-state.js +74 -0
  48. package/dist/sessions/browser-state.js.map +1 -0
  49. package/dist/sessions/inject-cookies.d.ts +20 -0
  50. package/dist/sessions/inject-cookies.d.ts.map +1 -0
  51. package/dist/sessions/inject-cookies.js +57 -0
  52. package/dist/sessions/inject-cookies.js.map +1 -0
  53. package/dist/sessions/manager.d.ts +11 -1
  54. package/dist/sessions/manager.d.ts.map +1 -1
  55. package/dist/sessions/manager.js +40 -6
  56. package/dist/sessions/manager.js.map +1 -1
  57. package/dist/snapshot/store.d.ts +8 -0
  58. package/dist/snapshot/store.d.ts.map +1 -1
  59. package/dist/snapshot/store.js +48 -0
  60. package/dist/snapshot/store.js.map +1 -1
  61. package/dist/stealth/antibot-detector.d.ts +1 -1
  62. package/dist/stealth/antibot-detector.d.ts.map +1 -1
  63. package/dist/stealth/antibot-detector.js +56 -0
  64. package/dist/stealth/antibot-detector.js.map +1 -1
  65. package/dist/stealth/browser-image-extract.d.ts +43 -0
  66. package/dist/stealth/browser-image-extract.d.ts.map +1 -0
  67. package/dist/stealth/browser-image-extract.js +268 -0
  68. package/dist/stealth/browser-image-extract.js.map +1 -0
  69. package/dist/stealth/browser.d.ts +5 -0
  70. package/dist/stealth/browser.d.ts.map +1 -1
  71. package/dist/stealth/browser.js +82 -1
  72. package/dist/stealth/browser.js.map +1 -1
  73. package/dist/stealth/chrome-profile.d.ts +1 -0
  74. package/dist/stealth/chrome-profile.d.ts.map +1 -1
  75. package/dist/stealth/chrome-profile.js +28 -5
  76. package/dist/stealth/chrome-profile.js.map +1 -1
  77. package/dist/stealth/detector.d.ts +10 -1
  78. package/dist/stealth/detector.d.ts.map +1 -1
  79. package/dist/stealth/detector.js +117 -25
  80. package/dist/stealth/detector.js.map +1 -1
  81. package/dist/stealth/headers.d.ts +1 -1
  82. package/dist/stealth/headers.d.ts.map +1 -1
  83. package/dist/stealth/headers.js +94 -2
  84. package/dist/stealth/headers.js.map +1 -1
  85. package/dist/stealth/index.d.ts +4 -0
  86. package/dist/stealth/index.d.ts.map +1 -1
  87. package/dist/stealth/index.js +207 -25
  88. package/dist/stealth/index.js.map +1 -1
  89. package/dist/stealth/proxy.d.ts +40 -1
  90. package/dist/stealth/proxy.d.ts.map +1 -1
  91. package/dist/stealth/proxy.js +90 -6
  92. package/dist/stealth/proxy.js.map +1 -1
  93. package/dist/tools/action-executor.d.ts +2 -0
  94. package/dist/tools/action-executor.d.ts.map +1 -1
  95. package/dist/tools/action-executor.js +38 -0
  96. package/dist/tools/action-executor.js.map +1 -1
  97. package/dist/tools/batch-download.d.ts +33 -0
  98. package/dist/tools/batch-download.d.ts.map +1 -0
  99. package/dist/tools/batch-download.js +208 -0
  100. package/dist/tools/batch-download.js.map +1 -0
  101. package/dist/tools/browser.d.ts +100 -0
  102. package/dist/tools/browser.d.ts.map +1 -0
  103. package/dist/tools/browser.js +448 -0
  104. package/dist/tools/browser.js.map +1 -0
  105. package/dist/tools/download.d.ts +35 -2
  106. package/dist/tools/download.d.ts.map +1 -1
  107. package/dist/tools/download.js +245 -44
  108. package/dist/tools/download.js.map +1 -1
  109. package/dist/tools/index.d.ts.map +1 -1
  110. package/dist/tools/index.js +23 -0
  111. package/dist/tools/index.js.map +1 -1
  112. package/dist/tools/inspect-flow.d.ts +24 -0
  113. package/dist/tools/inspect-flow.d.ts.map +1 -0
  114. package/dist/tools/inspect-flow.js +23 -0
  115. package/dist/tools/inspect-flow.js.map +1 -0
  116. package/dist/tools/interact.d.ts +28 -15
  117. package/dist/tools/interact.d.ts.map +1 -1
  118. package/dist/tools/interact.js +48 -1
  119. package/dist/tools/interact.js.map +1 -1
  120. package/dist/tools/list-flows.d.ts +21 -0
  121. package/dist/tools/list-flows.d.ts.map +1 -0
  122. package/dist/tools/list-flows.js +18 -0
  123. package/dist/tools/list-flows.js.map +1 -0
  124. package/dist/tools/manifest.d.ts.map +1 -1
  125. package/dist/tools/manifest.js +43 -0
  126. package/dist/tools/manifest.js.map +1 -1
  127. package/dist/tools/monitor.d.ts +46 -0
  128. package/dist/tools/monitor.d.ts.map +1 -0
  129. package/dist/tools/monitor.js +213 -0
  130. package/dist/tools/monitor.js.map +1 -0
  131. package/dist/tools/pdf-extract.d.ts +38 -0
  132. package/dist/tools/pdf-extract.d.ts.map +1 -0
  133. package/dist/tools/pdf-extract.js +244 -0
  134. package/dist/tools/pdf-extract.js.map +1 -0
  135. package/dist/tools/record-flow.d.ts +39 -0
  136. package/dist/tools/record-flow.d.ts.map +1 -0
  137. package/dist/tools/record-flow.js +406 -0
  138. package/dist/tools/record-flow.js.map +1 -0
  139. package/dist/tools/run-flow.d.ts +54 -0
  140. package/dist/tools/run-flow.d.ts.map +1 -0
  141. package/dist/tools/run-flow.js +47 -0
  142. package/dist/tools/run-flow.js.map +1 -0
  143. package/dist/tools/run-skill.d.ts +2 -2
  144. package/dist/tools/run-skill.d.ts.map +1 -1
  145. package/dist/tools/run-skill.js +1 -0
  146. package/dist/tools/run-skill.js.map +1 -1
  147. package/dist/tools/scrape.d.ts.map +1 -1
  148. package/dist/tools/scrape.js +17 -1
  149. package/dist/tools/scrape.js.map +1 -1
  150. package/dist/tools/serve-flow.d.ts +36 -0
  151. package/dist/tools/serve-flow.d.ts.map +1 -0
  152. package/dist/tools/serve-flow.js +42 -0
  153. package/dist/tools/serve-flow.js.map +1 -0
  154. package/dist/tools/validate-flow.d.ts +24 -0
  155. package/dist/tools/validate-flow.d.ts.map +1 -0
  156. package/dist/tools/validate-flow.js +23 -0
  157. package/dist/tools/validate-flow.js.map +1 -0
  158. package/dist/tools/watch.d.ts +68 -0
  159. package/dist/tools/watch.d.ts.map +1 -0
  160. package/dist/tools/watch.js +224 -0
  161. package/dist/tools/watch.js.map +1 -0
  162. package/dist/utils/fetcher.d.ts +13 -4
  163. package/dist/utils/fetcher.d.ts.map +1 -1
  164. package/dist/utils/fetcher.js +121 -24
  165. package/dist/utils/fetcher.js.map +1 -1
  166. package/package.json +15 -4
@@ -0,0 +1,448 @@
1
+ /**
2
+ * Persistent Browser tool — Chrome lives between CLI invocations via CDP.
3
+ *
4
+ * Subcommands:
5
+ * start — Launch Chrome with CDP debugging, save endpoint + PID
6
+ * stop — Close Chrome, clean up state
7
+ * snapshot — ARIA tree with refs (saved to disk for cross-process access)
8
+ * click — Click an element by ref or selector
9
+ * type — Fill text into an element
10
+ * navigate — Go to a URL
11
+ * scroll — Scroll the page
12
+ * wait — Wait for element, text, or timeout
13
+ * eval — Execute JavaScript in page context
14
+ * get-url — Return current page URL
15
+ * screenshot — Take a screenshot
16
+ *
17
+ * Architecture:
18
+ * - Chrome is spawned as a detached process (survives Node exit)
19
+ * - Each CLI call connects via connectOverCDP, does work, then disconnects
20
+ * - Snapshot refs are persisted to disk so click/type can use them
21
+ * - Cookies are synced to SessionManager on each disconnect
22
+ *
23
+ * Note: The eval action uses new Function() intentionally — same pattern as
24
+ * action-executor.ts. Users explicitly provide JS for browser-side execution.
25
+ */
26
+ import { z } from "zod";
27
+ import { MAX_URL_LENGTH } from "../constants.js";
28
+ export const name = "browser";
29
+ export const description = "Persistent browser session. Start a Chrome instance that stays alive between CLI calls. Use snapshot to see the page, then click/type/navigate to interact. All cookies are shared via --session.";
30
+ export const schema = z.object({
31
+ action: z.enum([
32
+ "start", "stop", "snapshot", "click", "type", "navigate",
33
+ "scroll", "wait", "eval", "get-url", "screenshot",
34
+ ]).describe("Browser action to perform"),
35
+ session: z.string().default("default").describe("Session name for browser persistence"),
36
+ url: z.string().max(MAX_URL_LENGTH).optional().describe("URL for start/navigate actions"),
37
+ headed: z.boolean().default(false).describe("Launch Chrome in headed (visible) mode"),
38
+ ref: z.string().optional().describe("Element ref from snapshot (e.g. @e1)"),
39
+ selector: z.string().optional().describe("CSS selector to target an element"),
40
+ text: z.string().optional().describe("Text to type into an element"),
41
+ script: z.string().optional().describe("JavaScript to evaluate in page context"),
42
+ direction: z.enum(["up", "down", "left", "right"]).optional().describe("Scroll direction"),
43
+ px: z.number().optional().describe("Scroll distance in pixels (default: 500)"),
44
+ ms: z.number().optional().describe("Wait duration in milliseconds"),
45
+ wait_for: z.string().optional().describe("Wait for selector or text to appear"),
46
+ output: z.string().optional().describe("Output file path for screenshot"),
47
+ full: z.boolean().default(false).describe("Full page screenshot"),
48
+ depth: z.enum(["full", "interactive"]).default("interactive").describe("Snapshot depth: full=all elements, interactive=only interactive"),
49
+ scope: z.string().optional().describe("CSS selector to scope snapshot to a subtree"),
50
+ });
51
+ // ── Helpers ──
52
+ function result(data) {
53
+ return {
54
+ content: [{
55
+ type: "text",
56
+ text: JSON.stringify(data, null, 2),
57
+ }],
58
+ };
59
+ }
60
+ function findFreePort() {
61
+ return new Promise((resolve, reject) => {
62
+ import("node:net").then(({ createServer }) => {
63
+ const server = createServer();
64
+ server.listen(0, "127.0.0.1", () => {
65
+ const addr = server.address();
66
+ if (addr && typeof addr === "object") {
67
+ const port = addr.port;
68
+ server.close(() => resolve(port));
69
+ }
70
+ else {
71
+ reject(new Error("Could not find free port"));
72
+ }
73
+ });
74
+ server.on("error", reject);
75
+ });
76
+ });
77
+ }
78
+ // ── Action Handlers ──
79
+ async function handleStart(input) {
80
+ const { saveBrowserState, loadBrowserState, isBrowserAlive } = await import("../sessions/browser-state.js");
81
+ // Check if browser already running for this session
82
+ const existing = await loadBrowserState(input.session);
83
+ if (existing && await isBrowserAlive(input.session)) {
84
+ return result({
85
+ status: "already_running",
86
+ session: input.session,
87
+ endpoint: existing.endpoint,
88
+ pid: existing.pid,
89
+ message: `Browser already running for session "${input.session}". Use browser stop to close it first.`,
90
+ });
91
+ }
92
+ const port = await findFreePort();
93
+ const { spawn } = await import("node:child_process");
94
+ const { STEALTH_ARGS, DEFAULT_VIEWPORT } = await import("../constants.js");
95
+ // Get Chrome/Chromium executable path
96
+ let chromePath;
97
+ // Try to get playwright's chromium path first (most reliable)
98
+ try {
99
+ const { chromium } = await import("rebrowser-playwright");
100
+ chromePath = chromium.executablePath();
101
+ }
102
+ catch {
103
+ // Fall back to well-known paths
104
+ }
105
+ if (!chromePath) {
106
+ const { execFileSync } = await import("node:child_process");
107
+ const candidates = [
108
+ "google-chrome", "google-chrome-stable", "chromium", "chromium-browser",
109
+ ];
110
+ for (const bin of candidates) {
111
+ try {
112
+ const found = execFileSync("which", [bin], { stdio: "pipe" }).toString().trim();
113
+ if (found) {
114
+ chromePath = found;
115
+ break;
116
+ }
117
+ }
118
+ catch {
119
+ continue;
120
+ }
121
+ }
122
+ }
123
+ if (!chromePath) {
124
+ throw new Error("Chrome/Chromium not found. Install Chrome or run: npx playwright install chromium");
125
+ }
126
+ const args = [
127
+ `--remote-debugging-port=${port}`,
128
+ `--remote-debugging-address=127.0.0.1`,
129
+ `--window-size=${DEFAULT_VIEWPORT.width},${DEFAULT_VIEWPORT.height}`,
130
+ "--no-sandbox", // Required on Ubuntu 23.10+ / AppArmor
131
+ "--disable-gpu", // Avoid GPU issues in headless
132
+ ...STEALTH_ARGS,
133
+ ...(input.headed ? [] : ["--headless=new"]),
134
+ ...(input.url ? [input.url] : ["about:blank"]),
135
+ ];
136
+ const chromeProcess = spawn(chromePath, args, {
137
+ detached: true,
138
+ stdio: "ignore",
139
+ });
140
+ chromeProcess.unref();
141
+ if (!chromeProcess.pid) {
142
+ throw new Error("Failed to start Chrome process");
143
+ }
144
+ // Wait for CDP to be ready
145
+ const endpoint = `http://127.0.0.1:${port}`;
146
+ let ready = false;
147
+ for (let i = 0; i < 30; i++) {
148
+ try {
149
+ const res = await fetch(`${endpoint}/json/version`);
150
+ if (res.ok) {
151
+ ready = true;
152
+ break;
153
+ }
154
+ }
155
+ catch {
156
+ // Not ready yet
157
+ }
158
+ await new Promise((r) => setTimeout(r, 200));
159
+ }
160
+ if (!ready) {
161
+ try {
162
+ process.kill(chromeProcess.pid);
163
+ }
164
+ catch { /* ignore */ }
165
+ throw new Error(`Chrome started but CDP not responding on port ${port} after 6s`);
166
+ }
167
+ const state = {
168
+ endpoint,
169
+ pid: chromeProcess.pid,
170
+ startedAt: new Date().toISOString(),
171
+ headed: input.headed,
172
+ port,
173
+ };
174
+ await saveBrowserState(input.session, state);
175
+ return result({
176
+ status: "started",
177
+ session: input.session,
178
+ endpoint,
179
+ pid: chromeProcess.pid,
180
+ headed: input.headed,
181
+ url: input.url ?? "about:blank",
182
+ });
183
+ }
184
+ async function handleStop(input) {
185
+ const { loadBrowserState, clearBrowserState } = await import("../sessions/browser-state.js");
186
+ const { clearSnapshotFromDisk } = await import("../snapshot/store.js");
187
+ const state = await loadBrowserState(input.session);
188
+ if (!state) {
189
+ return result({
190
+ status: "not_running",
191
+ session: input.session,
192
+ message: `No browser running for session "${input.session}".`,
193
+ });
194
+ }
195
+ // Try to close gracefully via CDP first
196
+ try {
197
+ const { connectToSession } = await import("../sessions/browser-connect.js");
198
+ const conn = await connectToSession(input.session);
199
+ await conn.disconnect();
200
+ }
201
+ catch {
202
+ // Chrome might already be dead — that's OK
203
+ }
204
+ // Kill the process
205
+ try {
206
+ process.kill(state.pid, "SIGTERM");
207
+ }
208
+ catch {
209
+ // Already dead
210
+ }
211
+ await clearBrowserState(input.session);
212
+ await clearSnapshotFromDisk(input.session);
213
+ return result({
214
+ status: "stopped",
215
+ session: input.session,
216
+ pid: state.pid,
217
+ });
218
+ }
219
+ async function handleSnapshot(input) {
220
+ const { connectToSession } = await import("../sessions/browser-connect.js");
221
+ const { getEnhancedSnapshot } = await import("../snapshot/extractor.js");
222
+ const { getSnapshotStore, saveSnapshotToDisk } = await import("../snapshot/store.js");
223
+ const conn = await connectToSession(input.session);
224
+ try {
225
+ const snapshot = await getEnhancedSnapshot(conn.page, {
226
+ interactive: input.depth === "interactive",
227
+ compact: true,
228
+ selector: input.scope,
229
+ });
230
+ // Save refs both in memory and on disk
231
+ getSnapshotStore().save(input.session, snapshot.refs, conn.page.url());
232
+ await saveSnapshotToDisk(input.session, snapshot.refs, conn.page.url());
233
+ return result({
234
+ url: conn.page.url(),
235
+ title: await conn.page.title(),
236
+ tree: snapshot.tree,
237
+ stats: snapshot.stats,
238
+ ref_count: Object.keys(snapshot.refs).length,
239
+ });
240
+ }
241
+ finally {
242
+ await conn.disconnect();
243
+ }
244
+ }
245
+ async function handleClick(input) {
246
+ const { connectToSession } = await import("../sessions/browser-connect.js");
247
+ if (!input.ref && !input.selector) {
248
+ return result({ error: "ref or selector required for click" });
249
+ }
250
+ const conn = await connectToSession(input.session);
251
+ try {
252
+ if (input.ref) {
253
+ await ensureRefsLoaded(input.session);
254
+ const { getSnapshotStore } = await import("../snapshot/store.js");
255
+ const entry = getSnapshotStore().resolveRef(input.session, input.ref);
256
+ if (!entry) {
257
+ return result({ error: `ref '${input.ref}' not found. Run: browser snapshot --session ${input.session}` });
258
+ }
259
+ const { resolveRefToLocator } = await import("./action-executor.js");
260
+ await resolveRefToLocator(conn.page, entry).click({ timeout: 10_000 });
261
+ }
262
+ else {
263
+ await conn.page.click(input.selector, { timeout: 10_000 });
264
+ }
265
+ await conn.page.waitForLoadState("networkidle", { timeout: 5000 }).catch(() => { });
266
+ return result({ action: "click", success: true, url: conn.page.url() });
267
+ }
268
+ finally {
269
+ await conn.disconnect();
270
+ }
271
+ }
272
+ async function handleType(input) {
273
+ const { connectToSession } = await import("../sessions/browser-connect.js");
274
+ if (!input.ref && !input.selector) {
275
+ return result({ error: "ref or selector required for type" });
276
+ }
277
+ if (input.text === undefined) {
278
+ return result({ error: "text required for type action" });
279
+ }
280
+ const conn = await connectToSession(input.session);
281
+ try {
282
+ if (input.ref) {
283
+ await ensureRefsLoaded(input.session);
284
+ const { getSnapshotStore } = await import("../snapshot/store.js");
285
+ const entry = getSnapshotStore().resolveRef(input.session, input.ref);
286
+ if (!entry) {
287
+ return result({ error: `ref '${input.ref}' not found. Run: browser snapshot --session ${input.session}` });
288
+ }
289
+ const { resolveRefToLocator } = await import("./action-executor.js");
290
+ await resolveRefToLocator(conn.page, entry).fill(input.text, { timeout: 10_000 });
291
+ }
292
+ else {
293
+ await conn.page.fill(input.selector, input.text, { timeout: 10_000 });
294
+ }
295
+ return result({ action: "type", success: true });
296
+ }
297
+ finally {
298
+ await conn.disconnect();
299
+ }
300
+ }
301
+ async function handleNavigate(input) {
302
+ if (!input.url) {
303
+ return result({ error: "url required for navigate action" });
304
+ }
305
+ const { connectToSession } = await import("../sessions/browser-connect.js");
306
+ const conn = await connectToSession(input.session);
307
+ try {
308
+ await conn.page.goto(input.url, { waitUntil: "load", timeout: 30_000 });
309
+ await Promise.race([
310
+ conn.page.waitForLoadState("networkidle").catch(() => { }),
311
+ new Promise((r) => setTimeout(r, 5000)),
312
+ ]);
313
+ return result({ action: "navigate", success: true, url: conn.page.url(), title: await conn.page.title() });
314
+ }
315
+ finally {
316
+ await conn.disconnect();
317
+ }
318
+ }
319
+ async function handleScroll(input) {
320
+ const { connectToSession } = await import("../sessions/browser-connect.js");
321
+ const conn = await connectToSession(input.session);
322
+ try {
323
+ const distance = input.px ?? 500;
324
+ let dx = 0, dy = 0;
325
+ switch (input.direction ?? "down") {
326
+ case "up":
327
+ dy = -distance;
328
+ break;
329
+ case "down":
330
+ dy = distance;
331
+ break;
332
+ case "left":
333
+ dx = -distance;
334
+ break;
335
+ case "right":
336
+ dx = distance;
337
+ break;
338
+ }
339
+ await conn.page.evaluate(({ dx, dy }) => window.scrollBy(dx, dy), { dx, dy });
340
+ return result({ action: "scroll", success: true, direction: input.direction ?? "down", px: distance });
341
+ }
342
+ finally {
343
+ await conn.disconnect();
344
+ }
345
+ }
346
+ async function handleWait(input) {
347
+ const { connectToSession } = await import("../sessions/browser-connect.js");
348
+ const conn = await connectToSession(input.session);
349
+ try {
350
+ if (input.wait_for) {
351
+ // Try as selector first, then text
352
+ try {
353
+ await conn.page.waitForSelector(input.wait_for, { timeout: input.ms ?? 10_000 });
354
+ }
355
+ catch {
356
+ await conn.page.waitForFunction((text) => document.body.innerText.includes(text), input.wait_for, { timeout: input.ms ?? 10_000 });
357
+ }
358
+ }
359
+ else {
360
+ await conn.page.waitForTimeout(input.ms ?? 1000);
361
+ }
362
+ return result({ action: "wait", success: true });
363
+ }
364
+ finally {
365
+ await conn.disconnect();
366
+ }
367
+ }
368
+ async function handleEval(input) {
369
+ if (!input.script) {
370
+ return result({ error: "script required for eval action" });
371
+ }
372
+ const { connectToSession } = await import("../sessions/browser-connect.js");
373
+ const conn = await connectToSession(input.session);
374
+ try {
375
+ // Same pattern as action-executor.ts — user explicitly provides JS for browser execution
376
+ // eslint-disable-next-line @typescript-eslint/no-implied-eval
377
+ const evalFn = new Function(input.script);
378
+ const evalResult = await conn.page.evaluate(evalFn);
379
+ return result({ action: "eval", success: true, result: evalResult });
380
+ }
381
+ finally {
382
+ await conn.disconnect();
383
+ }
384
+ }
385
+ async function handleGetUrl(input) {
386
+ const { connectToSession } = await import("../sessions/browser-connect.js");
387
+ const conn = await connectToSession(input.session);
388
+ try {
389
+ const url = conn.page.url();
390
+ const title = await conn.page.title();
391
+ return result({ url, title });
392
+ }
393
+ finally {
394
+ await conn.disconnect();
395
+ }
396
+ }
397
+ async function handleScreenshot(input) {
398
+ const { connectToSession } = await import("../sessions/browser-connect.js");
399
+ const conn = await connectToSession(input.session);
400
+ try {
401
+ const buf = await conn.page.screenshot({ fullPage: input.full });
402
+ const base64 = buf.toString("base64");
403
+ if (input.output) {
404
+ const { writeFileSync } = await import("node:fs");
405
+ writeFileSync(input.output, buf);
406
+ return result({ action: "screenshot", success: true, path: input.output, size: buf.length });
407
+ }
408
+ return {
409
+ content: [
410
+ { type: "image", data: base64, mimeType: "image/png" },
411
+ { type: "text", text: JSON.stringify({ action: "screenshot", success: true, size: buf.length }) },
412
+ ],
413
+ };
414
+ }
415
+ finally {
416
+ await conn.disconnect();
417
+ }
418
+ }
419
+ /**
420
+ * Ensure snapshot refs are loaded into memory for this session.
421
+ * Checks memory first, then falls back to disk.
422
+ */
423
+ async function ensureRefsLoaded(session) {
424
+ const { getSnapshotStore, loadSnapshotFromDisk } = await import("../snapshot/store.js");
425
+ const store = getSnapshotStore();
426
+ if (store.getRefs(session))
427
+ return;
428
+ await loadSnapshotFromDisk(session);
429
+ }
430
+ // ── Main Execute ──
431
+ export async function execute(input) {
432
+ switch (input.action) {
433
+ case "start": return handleStart(input);
434
+ case "stop": return handleStop(input);
435
+ case "snapshot": return handleSnapshot(input);
436
+ case "click": return handleClick(input);
437
+ case "type": return handleType(input);
438
+ case "navigate": return handleNavigate(input);
439
+ case "scroll": return handleScroll(input);
440
+ case "wait": return handleWait(input);
441
+ case "eval": return handleEval(input);
442
+ case "get-url": return handleGetUrl(input);
443
+ case "screenshot": return handleScreenshot(input);
444
+ default:
445
+ return result({ error: `Unknown browser action: ${input.action}` });
446
+ }
447
+ }
448
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/tools/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,MAAM,CAAC,MAAM,IAAI,GAAG,SAAS,CAAC;AAE9B,MAAM,CAAC,MAAM,WAAW,GACtB,mMAAmM,CAAC;AAEtM,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC;QACb,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU;QACxD,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY;KAClD,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IACvF,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACzF,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACrF,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;IAC3E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC7E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACpE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IAChF,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC1F,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;IAC9E,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IACnE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC/E,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IACzE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACjE,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,iEAAiE,CAAC;IACzI,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6CAA6C,CAAC;CACrF,CAAC,CAAC;AAIH,gBAAgB;AAEhB,SAAS,MAAM,CAAC,IAAa;IAC3B,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAe;gBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;aACpC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,SAAS,YAAY;IACnB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;YAC3C,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;YAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE;gBACjC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC9B,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;oBACvB,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpC,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wBAAwB;AAExB,KAAK,UAAU,WAAW,CAAC,KAAmB;IAC5C,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAE5G,oDAAoD;IACpD,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvD,IAAI,QAAQ,IAAI,MAAM,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACpD,OAAO,MAAM,CAAC;YACZ,MAAM,EAAE,iBAAiB;YACzB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,GAAG,EAAE,QAAQ,CAAC,GAAG;YACjB,OAAO,EAAE,wCAAwC,KAAK,CAAC,OAAO,wCAAwC;SACvG,CAAC,CAAC;IACL,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,YAAY,EAAE,CAAC;IAClC,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACrD,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;IAE3E,sCAAsC;IACtC,IAAI,UAA8B,CAAC;IAEnC,8DAA8D;IAC9D,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC1D,UAAU,GAAG,QAAQ,CAAC,cAAc,EAAE,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC5D,MAAM,UAAU,GAAG;YACjB,eAAe,EAAE,sBAAsB,EAAE,UAAU,EAAE,kBAAkB;SACxE,CAAC;QACF,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;gBAChF,IAAI,KAAK,EAAE,CAAC;oBAAC,UAAU,GAAG,KAAK,CAAC;oBAAC,MAAM;gBAAC,CAAC;YAC3C,CAAC;YAAC,MAAM,CAAC;gBAAC,SAAS;YAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACvG,CAAC;IAED,MAAM,IAAI,GAAG;QACX,2BAA2B,IAAI,EAAE;QACjC,sCAAsC;QACtC,iBAAiB,gBAAgB,CAAC,KAAK,IAAI,gBAAgB,CAAC,MAAM,EAAE;QACpE,cAAc,EAAU,uCAAuC;QAC/D,eAAe,EAAS,+BAA+B;QACvD,GAAG,YAAY;QACf,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAC3C,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;KAC/C,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;QAC5C,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,QAAQ;KAChB,CAAC,CAAC;IAEH,aAAa,CAAC,KAAK,EAAE,CAAC;IAEtB,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,CAAC;IAED,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,oBAAoB,IAAI,EAAE,CAAC;IAC5C,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,QAAQ,eAAe,CAAC,CAAC;YACpD,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;gBACX,KAAK,GAAG,IAAI,CAAC;gBACb,MAAM;YACR,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,iDAAiD,IAAI,WAAW,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,KAAK,GAAG;QACZ,QAAQ;QACR,GAAG,EAAE,aAAa,CAAC,GAAG;QACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,IAAI;KACL,CAAC;IACF,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAE7C,OAAO,MAAM,CAAC;QACZ,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ;QACR,GAAG,EAAE,aAAa,CAAC,GAAG;QACtB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,GAAG,EAAE,KAAK,CAAC,GAAG,IAAI,aAAa;KAChC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAmB;IAC3C,MAAM,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,8BAA8B,CAAC,CAAC;IAC7F,MAAM,EAAE,qBAAqB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAEvE,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACpD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,MAAM,CAAC;YACZ,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO,EAAE,mCAAmC,KAAK,CAAC,OAAO,IAAI;SAC9D,CAAC,CAAC;IACL,CAAC;IAED,wCAAwC;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;QAC5E,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;IAED,mBAAmB;IACnB,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,eAAe;IACjB,CAAC;IAED,MAAM,iBAAiB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,qBAAqB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAE3C,OAAO,MAAM,CAAC;QACZ,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,KAAmB;IAC/C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAC5E,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACzE,MAAM,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IAEtF,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE;YACpD,WAAW,EAAE,KAAK,CAAC,KAAK,KAAK,aAAa;YAC1C,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,KAAK,CAAC,KAAK;SACtB,CAAC,CAAC;QAEH,uCAAuC;QACvC,gBAAgB,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACvE,MAAM,kBAAkB,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAExE,OAAO,MAAM,CAAC;YACZ,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;YACpB,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YAC9B,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,KAAK,EAAE,QAAQ,CAAC,KAAK;YACrB,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM;SAC7C,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,KAAmB;IAC5C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAE5E,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAClE,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YACtE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,KAAK,CAAC,GAAG,gDAAgD,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7G,CAAC;YACD,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YACrE,MAAM,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAS,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnF,OAAO,MAAM,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IAC1E,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAmB;IAC3C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAE5E,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YACd,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACtC,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAClE,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;YACtE,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,KAAK,CAAC,GAAG,gDAAgD,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YAC7G,CAAC;YACD,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YACrE,MAAM,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACpF,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAS,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACzE,CAAC;QAED,OAAO,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,KAAmB;IAC/C,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QACf,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;QACxE,MAAM,OAAO,CAAC,IAAI,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;YACzD,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;SACxC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7G,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,KAAmB;IAC7C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,KAAK,CAAC,EAAE,IAAI,GAAG,CAAC;QACjC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QACnB,QAAQ,KAAK,CAAC,SAAS,IAAI,MAAM,EAAE,CAAC;YAClC,KAAK,IAAI;gBAAE,EAAE,GAAG,CAAC,QAAQ,CAAC;gBAAC,MAAM;YACjC,KAAK,MAAM;gBAAE,EAAE,GAAG,QAAQ,CAAC;gBAAC,MAAM;YAClC,KAAK,MAAM;gBAAE,EAAE,GAAG,CAAC,QAAQ,CAAC;gBAAC,MAAM;YACnC,KAAK,OAAO;gBAAE,EAAE,GAAG,QAAQ,CAAC;gBAAC,MAAM;QACrC,CAAC;QACD,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC9E,OAAO,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzG,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAmB;IAC3C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,mCAAmC;YACnC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,MAAM,EAAE,CAAC,CAAC;YACnF,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAC7B,CAAC,IAAY,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EACxD,KAAK,CAAC,QAAQ,EACd,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,IAAI,MAAM,EAAE,CAChC,CAAC;YACJ,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,KAAmB;IAC3C,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,iCAAiC,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,yFAAyF;QACzF,8DAA8D;QAC9D,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAkB,CAAC;QAC3D,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IACvE,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,KAAmB;IAC7C,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACtC,OAAO,MAAM,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IAChC,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,KAAmB;IACjD,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,gCAAgC,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEtC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;YAClD,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACjC,OAAO,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/F,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP,EAAE,IAAI,EAAE,OAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE;gBAC/D,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;aAC3G;SACF,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,gBAAgB,CAAC,OAAe;IAC7C,MAAM,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACxF,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;IACjC,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO;IACnC,MAAM,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED,qBAAqB;AAErB,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAmB;IAC/C,QAAQ,KAAK,CAAC,MAAM,EAAE,CAAC;QACrB,KAAK,OAAO,CAAC,CAAC,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QACtC,KAAK,UAAU,CAAC,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9C,KAAK,OAAO,CAAC,CAAC,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QACtC,KAAK,UAAU,CAAC,CAAC,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;QAC9C,KAAK,QAAQ,CAAC,CAAC,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;QAC1C,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QACtC,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QACtC,KAAK,SAAS,CAAC,CAAC,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;QAC3C,KAAK,YAAY,CAAC,CAAC,OAAO,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAClD;YACE,OAAO,MAAM,CAAC,EAAE,KAAK,EAAE,2BAA4B,KAA4B,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAChG,CAAC;AACH,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
2
  export declare const name = "download";
3
- export declare const description = "Download media files (images, videos) from URLs. Supports direct files, page media extraction, YouTube, TikTok, and bulk downloads.";
3
+ export declare const description = "Download media files (images, videos) from URLs. Supports direct files, page media extraction, YouTube, TikTok, and bulk downloads. Browser-based image extraction with 100% coverage: lazy-load, shadow DOM, JSON-LD, CSS backgrounds, same-origin iframes.";
4
4
  export declare const schema: z.ZodObject<{
5
5
  url: z.ZodOptional<z.ZodString>;
6
6
  urls: z.ZodOptional<z.ZodString>;
@@ -10,24 +10,57 @@ export declare const schema: z.ZodObject<{
10
10
  og_only: z.ZodDefault<z.ZodBoolean>;
11
11
  video: z.ZodDefault<z.ZodBoolean>;
12
12
  all: z.ZodDefault<z.ZodBoolean>;
13
+ session_id: z.ZodOptional<z.ZodString>;
14
+ selector: z.ZodOptional<z.ZodString>;
15
+ index: z.ZodOptional<z.ZodNumber>;
16
+ alt_match: z.ZodOptional<z.ZodString>;
17
+ min_width: z.ZodOptional<z.ZodNumber>;
18
+ max_width: z.ZodOptional<z.ZodNumber>;
19
+ wait_for: z.ZodOptional<z.ZodString>;
20
+ scroll_full: z.ZodDefault<z.ZodBoolean>;
21
+ auto_click: z.ZodDefault<z.ZodBoolean>;
22
+ iframe_scan: z.ZodDefault<z.ZodBoolean>;
23
+ limit: z.ZodDefault<z.ZodNumber>;
13
24
  }, "strip", z.ZodTypeAny, {
14
25
  output: string;
15
26
  video: boolean;
27
+ auto_click: boolean;
16
28
  images: boolean;
29
+ limit: number;
17
30
  all: boolean;
18
31
  og_only: boolean;
32
+ scroll_full: boolean;
33
+ iframe_scan: boolean;
34
+ selector?: string | undefined;
19
35
  url?: string | undefined;
20
36
  urls?: string | undefined;
37
+ session_id?: string | undefined;
21
38
  file?: string | undefined;
39
+ index?: number | undefined;
40
+ alt_match?: string | undefined;
41
+ min_width?: number | undefined;
42
+ max_width?: number | undefined;
43
+ wait_for?: string | undefined;
22
44
  }, {
23
45
  output: string;
46
+ selector?: string | undefined;
24
47
  video?: boolean | undefined;
25
48
  url?: string | undefined;
26
- urls?: string | undefined;
49
+ auto_click?: boolean | undefined;
27
50
  images?: boolean | undefined;
51
+ urls?: string | undefined;
52
+ limit?: number | undefined;
53
+ session_id?: string | undefined;
28
54
  all?: boolean | undefined;
29
55
  file?: string | undefined;
30
56
  og_only?: boolean | undefined;
57
+ index?: number | undefined;
58
+ alt_match?: string | undefined;
59
+ min_width?: number | undefined;
60
+ max_width?: number | undefined;
61
+ wait_for?: string | undefined;
62
+ scroll_full?: boolean | undefined;
63
+ iframe_scan?: boolean | undefined;
31
64
  }>;
32
65
  export type DownloadInput = z.infer<typeof schema>;
33
66
  export declare function execute(input: DownloadInput): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/tools/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAYxB,eAAO,MAAM,IAAI,aAAa,CAAC;AAE/B,eAAO,MAAM,WAAW,wIAC+G,CAAC;AAExI,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;EASjB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AA6RnD,wBAAsB,OAAO,CAAC,KAAK,EAAE,aAAa;;;;;GA8GjD"}
1
+ {"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/tools/download.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAcxB,eAAO,MAAM,IAAI,aAAa,CAAC;AAE/B,eAAO,MAAM,WAAW,iQACwO,CAAC;AAEjQ,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqBjB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,MAAM,CAAC,CAAC;AAydnD,wBAAsB,OAAO,CAAC,KAAK,EAAE,aAAa;;;;;GAwIjD"}