@dyyz1993/agent-browser 0.9.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 (187) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +907 -0
  3. package/bin/agent-browser-darwin-arm64 +0 -0
  4. package/bin/agent-browser.js +120 -0
  5. package/dist/__tests__/e2e/utils/test-helpers.d.ts +5 -0
  6. package/dist/__tests__/e2e/utils/test-helpers.d.ts.map +1 -0
  7. package/dist/__tests__/e2e/utils/test-helpers.js +22 -0
  8. package/dist/__tests__/e2e/utils/test-helpers.js.map +1 -0
  9. package/dist/__tests__/test-iframe.d.ts +2 -0
  10. package/dist/__tests__/test-iframe.d.ts.map +1 -0
  11. package/dist/__tests__/test-iframe.js +52 -0
  12. package/dist/__tests__/test-iframe.js.map +1 -0
  13. package/dist/__tests__/utils/parseCli.d.ts +20 -0
  14. package/dist/__tests__/utils/parseCli.d.ts.map +1 -0
  15. package/dist/__tests__/utils/parseCli.js +1086 -0
  16. package/dist/__tests__/utils/parseCli.js.map +1 -0
  17. package/dist/actions.d.ts +50 -0
  18. package/dist/actions.d.ts.map +1 -0
  19. package/dist/actions.js +2164 -0
  20. package/dist/actions.js.map +1 -0
  21. package/dist/browser.d.ts +556 -0
  22. package/dist/browser.d.ts.map +1 -0
  23. package/dist/browser.js +2599 -0
  24. package/dist/browser.js.map +1 -0
  25. package/dist/cli/commands.d.ts +8 -0
  26. package/dist/cli/commands.d.ts.map +1 -0
  27. package/dist/cli/commands.js +1038 -0
  28. package/dist/cli/commands.js.map +1 -0
  29. package/dist/cli/connection.d.ts +50 -0
  30. package/dist/cli/connection.d.ts.map +1 -0
  31. package/dist/cli/connection.js +595 -0
  32. package/dist/cli/connection.js.map +1 -0
  33. package/dist/cli/flags.d.ts +36 -0
  34. package/dist/cli/flags.d.ts.map +1 -0
  35. package/dist/cli/flags.js +206 -0
  36. package/dist/cli/flags.js.map +1 -0
  37. package/dist/cli/help.d.ts +4 -0
  38. package/dist/cli/help.d.ts.map +1 -0
  39. package/dist/cli/help.js +1024 -0
  40. package/dist/cli/help.js.map +1 -0
  41. package/dist/cli/output.d.ts +14 -0
  42. package/dist/cli/output.d.ts.map +1 -0
  43. package/dist/cli/output.js +456 -0
  44. package/dist/cli/output.js.map +1 -0
  45. package/dist/cli-new.d.ts +3 -0
  46. package/dist/cli-new.d.ts.map +1 -0
  47. package/dist/cli-new.js +308 -0
  48. package/dist/cli-new.js.map +1 -0
  49. package/dist/cli-old.d.ts +3 -0
  50. package/dist/cli-old.d.ts.map +1 -0
  51. package/dist/cli-old.js +1101 -0
  52. package/dist/cli-old.js.map +1 -0
  53. package/dist/cli.d.ts +3 -0
  54. package/dist/cli.d.ts.map +1 -0
  55. package/dist/cli.js +403 -0
  56. package/dist/cli.js.map +1 -0
  57. package/dist/content-detection.d.ts +18 -0
  58. package/dist/content-detection.d.ts.map +1 -0
  59. package/dist/content-detection.js +68 -0
  60. package/dist/content-detection.js.map +1 -0
  61. package/dist/daemon.d.ts +55 -0
  62. package/dist/daemon.d.ts.map +1 -0
  63. package/dist/daemon.js +426 -0
  64. package/dist/daemon.js.map +1 -0
  65. package/dist/diff.d.ts +42 -0
  66. package/dist/diff.d.ts.map +1 -0
  67. package/dist/diff.js +166 -0
  68. package/dist/diff.js.map +1 -0
  69. package/dist/human-mouse.d.ts +31 -0
  70. package/dist/human-mouse.d.ts.map +1 -0
  71. package/dist/human-mouse.js +184 -0
  72. package/dist/human-mouse.js.map +1 -0
  73. package/dist/ios-actions.d.ts +11 -0
  74. package/dist/ios-actions.d.ts.map +1 -0
  75. package/dist/ios-actions.js +228 -0
  76. package/dist/ios-actions.js.map +1 -0
  77. package/dist/ios-manager.d.ts +266 -0
  78. package/dist/ios-manager.d.ts.map +1 -0
  79. package/dist/ios-manager.js +1076 -0
  80. package/dist/ios-manager.js.map +1 -0
  81. package/dist/message-bridge.d.ts +10 -0
  82. package/dist/message-bridge.d.ts.map +1 -0
  83. package/dist/message-bridge.js +60 -0
  84. package/dist/message-bridge.js.map +1 -0
  85. package/dist/protocol.d.ts +26 -0
  86. package/dist/protocol.d.ts.map +1 -0
  87. package/dist/protocol.js +912 -0
  88. package/dist/protocol.js.map +1 -0
  89. package/dist/recorder/binding.d.ts +24 -0
  90. package/dist/recorder/binding.d.ts.map +1 -0
  91. package/dist/recorder/binding.js +215 -0
  92. package/dist/recorder/binding.js.map +1 -0
  93. package/dist/recorder/index.d.ts +4 -0
  94. package/dist/recorder/index.d.ts.map +1 -0
  95. package/dist/recorder/index.js +4 -0
  96. package/dist/recorder/index.js.map +1 -0
  97. package/dist/recorder/inject.js +1913 -0
  98. package/dist/recorder/recorder.d.ts +19 -0
  99. package/dist/recorder/recorder.d.ts.map +1 -0
  100. package/dist/recorder/recorder.js +101 -0
  101. package/dist/recorder/recorder.js.map +1 -0
  102. package/dist/recorder/store.d.ts +22 -0
  103. package/dist/recorder/store.d.ts.map +1 -0
  104. package/dist/recorder/store.js +150 -0
  105. package/dist/recorder/store.js.map +1 -0
  106. package/dist/recorder/types.d.ts +73 -0
  107. package/dist/recorder/types.d.ts.map +1 -0
  108. package/dist/recorder/types.js +5 -0
  109. package/dist/recorder/types.js.map +1 -0
  110. package/dist/snapshot.d.ts +81 -0
  111. package/dist/snapshot.d.ts.map +1 -0
  112. package/dist/snapshot.js +1348 -0
  113. package/dist/snapshot.js.map +1 -0
  114. package/dist/stream-server-standalone.d.ts +38 -0
  115. package/dist/stream-server-standalone.d.ts.map +1 -0
  116. package/dist/stream-server-standalone.js +494 -0
  117. package/dist/stream-server-standalone.js.map +1 -0
  118. package/dist/stream-server.d.ts +214 -0
  119. package/dist/stream-server.d.ts.map +1 -0
  120. package/dist/stream-server.js +811 -0
  121. package/dist/stream-server.js.map +1 -0
  122. package/dist/types.d.ts +914 -0
  123. package/dist/types.d.ts.map +1 -0
  124. package/dist/types.js +4 -0
  125. package/dist/types.js.map +1 -0
  126. package/dist/viewer-html.d.ts +2 -0
  127. package/dist/viewer-html.d.ts.map +1 -0
  128. package/dist/viewer-html.js +185 -0
  129. package/dist/viewer-html.js.map +1 -0
  130. package/dist/viewer-script.d.ts +47 -0
  131. package/dist/viewer-script.d.ts.map +1 -0
  132. package/dist/viewer-script.js +586 -0
  133. package/dist/viewer-script.js.map +1 -0
  134. package/package.json +86 -0
  135. package/scripts/build-all-platforms.sh +68 -0
  136. package/scripts/check-version-sync.js +39 -0
  137. package/scripts/check_goods_container.js +35 -0
  138. package/scripts/check_page_content.js +36 -0
  139. package/scripts/click_applause_rate.js +30 -0
  140. package/scripts/copy-native.js +36 -0
  141. package/scripts/copy-recorder.js +21 -0
  142. package/scripts/e2e-test-recorder.ts +584 -0
  143. package/scripts/explore_jd_page.js +31 -0
  144. package/scripts/extract_all_jd_data.js +80 -0
  145. package/scripts/extract_jd_product_detail.js +62 -0
  146. package/scripts/extract_jd_products_correct_links.js +78 -0
  147. package/scripts/extract_jd_products_final.js +80 -0
  148. package/scripts/extract_jd_reviews.js +48 -0
  149. package/scripts/extract_jd_seafood_final.js +78 -0
  150. package/scripts/extract_multiple_products.js +77 -0
  151. package/scripts/extract_products_no_scroll.js +68 -0
  152. package/scripts/extract_products_simple.js +68 -0
  153. package/scripts/find_applause_rate.js +26 -0
  154. package/scripts/find_jd_links.js +28 -0
  155. package/scripts/find_main_content.js +20 -0
  156. package/scripts/find_product_cards.js +38 -0
  157. package/scripts/find_root_content.js +26 -0
  158. package/scripts/find_unique_products.js +55 -0
  159. package/scripts/get_jd_product_detail.js +16 -0
  160. package/scripts/get_jd_products.js +23 -0
  161. package/scripts/get_jd_seafood_products.js +44 -0
  162. package/scripts/get_product_details_from_images.js +54 -0
  163. package/scripts/postinstall.js +235 -0
  164. package/scripts/scroll_and_get_products.js +47 -0
  165. package/scripts/scroll_deep_and_find.js +45 -0
  166. package/scripts/sync-version.js +69 -0
  167. package/scripts/verify-baidu-enter.ts +116 -0
  168. package/skills/agent-browser/SKILL.md +310 -0
  169. package/skills/agent-browser/references/authentication.md +198 -0
  170. package/skills/agent-browser/references/commands.md +471 -0
  171. package/skills/agent-browser/references/data-extraction.md +377 -0
  172. package/skills/agent-browser/references/proxy-support.md +188 -0
  173. package/skills/agent-browser/references/session-management.md +197 -0
  174. package/skills/agent-browser/references/snapshot-refs.md +379 -0
  175. package/skills/agent-browser/references/video-recording.md +173 -0
  176. package/skills/agent-browser/templates/api-interception.sh +53 -0
  177. package/skills/agent-browser/templates/authenticated-session.sh +97 -0
  178. package/skills/agent-browser/templates/capture-workflow.sh +69 -0
  179. package/skills/agent-browser/templates/data-extraction.sh +210 -0
  180. package/skills/agent-browser/templates/form-automation.sh +62 -0
  181. package/skills/skill-creator/LICENSE.txt +202 -0
  182. package/skills/skill-creator/SKILL.md +356 -0
  183. package/skills/skill-creator/references/output-patterns.md +82 -0
  184. package/skills/skill-creator/references/workflows.md +28 -0
  185. package/skills/skill-creator/scripts/init_skill.py +303 -0
  186. package/skills/skill-creator/scripts/package_skill.py +113 -0
  187. package/skills/skill-creator/scripts/quick_validate.py +95 -0
@@ -0,0 +1,556 @@
1
+ import { devices, type Browser, type Page, type Frame, type Locator, type CDPSession } from 'playwright-core';
2
+ import type { LaunchCommand } from './types.js';
3
+ import { type RefMap, type EnhancedSnapshot } from './snapshot.js';
4
+ export interface ScreencastFrame {
5
+ data: string;
6
+ metadata: {
7
+ offsetTop: number;
8
+ pageScaleFactor: number;
9
+ deviceWidth: number;
10
+ deviceHeight: number;
11
+ scrollOffsetX: number;
12
+ scrollOffsetY: number;
13
+ timestamp?: number;
14
+ };
15
+ sessionId: number;
16
+ }
17
+ export interface ScreencastOptions {
18
+ format?: 'jpeg' | 'png';
19
+ quality?: number;
20
+ maxWidth?: number;
21
+ maxHeight?: number;
22
+ everyNthFrame?: number;
23
+ }
24
+ interface TrackedRequest {
25
+ url: string;
26
+ method: string;
27
+ headers: Record<string, string>;
28
+ timestamp: number;
29
+ resourceType: string;
30
+ }
31
+ interface ConsoleMessage {
32
+ type: string;
33
+ text: string;
34
+ timestamp: number;
35
+ }
36
+ interface PageError {
37
+ message: string;
38
+ timestamp: number;
39
+ }
40
+ /**
41
+ * Manages the Playwright browser lifecycle with multiple tabs/windows
42
+ */
43
+ export declare class BrowserManager {
44
+ private browser;
45
+ private cdpEndpoint;
46
+ private isPersistentContext;
47
+ private browserbaseSessionId;
48
+ private browserbaseApiKey;
49
+ private browserUseSessionId;
50
+ private browserUseApiKey;
51
+ private kernelSessionId;
52
+ private kernelApiKey;
53
+ private contexts;
54
+ private pages;
55
+ private activePageIndex;
56
+ private dialogHandler;
57
+ private trackedRequests;
58
+ private routes;
59
+ private consoleMessages;
60
+ private pageErrors;
61
+ private isRecordingHar;
62
+ private refMap;
63
+ private lastSnapshot;
64
+ private scopedHeaderRoutes;
65
+ private cdpSession;
66
+ private screencastActive;
67
+ private screencastShouldBeActive;
68
+ private screencastSessionId;
69
+ private frameCallback;
70
+ private screencastFrameHandler;
71
+ private lastScreencastOptions;
72
+ private recordingContext;
73
+ private recordingPage;
74
+ private recordingOutputPath;
75
+ private recordingTempDir;
76
+ private recorderSessionId;
77
+ private recorderBindingName;
78
+ private recorderStartTime;
79
+ private recorderSteps;
80
+ private recorderPages;
81
+ private recorderPageHandler;
82
+ private navigationHistory;
83
+ private navigationHistoryIndex;
84
+ private lastNavigationUrl;
85
+ private lastNavigationTime;
86
+ private recorderNavigatedHandler;
87
+ private recorderFrameAttachedHandler;
88
+ /**
89
+ * Check if browser is launched and still connected
90
+ */
91
+ isLaunched(): boolean;
92
+ /**
93
+ * Get enhanced snapshot with refs and cache the ref map
94
+ */
95
+ getSnapshot(options?: {
96
+ interactive?: boolean;
97
+ cursor?: boolean;
98
+ maxDepth?: number;
99
+ compact?: boolean;
100
+ selector?: string;
101
+ framePath?: string;
102
+ path?: boolean;
103
+ attrs?: boolean;
104
+ }): Promise<EnhancedSnapshot>;
105
+ /**
106
+ * Get the cached ref map from last snapshot
107
+ */
108
+ getRefMap(): RefMap;
109
+ /**
110
+ * Get a locator from a ref (e.g., "e1", "@e1", "ref=e1")
111
+ * Returns null if ref doesn't exist or is invalid
112
+ * @param refArg - The ref string (e.g., "e1", "@e1", "ref=e1")
113
+ * @param framePath - Optional path to iframe where the ref was captured
114
+ */
115
+ getLocatorFromRef(refArg: string, framePath?: string): Locator | null;
116
+ /**
117
+ * Check if a selector looks like a ref
118
+ */
119
+ isRef(selector: string): boolean;
120
+ /**
121
+ * Get locator - supports both refs and regular selectors
122
+ */
123
+ getLocator(selectorOrRef: string, framePath?: string): Locator;
124
+ /**
125
+ * Get the current active page, throws if not launched
126
+ */
127
+ getPage(): Page;
128
+ /**
129
+ * Get frame by optional path
130
+ * @param framePath - Optional path to iframe (e.g., "#frame1/#frame2/#frame3")
131
+ * - If not provided, returns the main frame of current page
132
+ * - Path is absolute from main frame, using "/" as separator
133
+ * - Supports multiple matching strategies:
134
+ * - Index: "0", "1", "2" - match by position
135
+ * - Name/ID: "#my-frame", "my-frame" - match by name or id attribute
136
+ * - URL: partial URL match like "httpbin.org"
137
+ * @returns Frame for the target iframe
138
+ */
139
+ getFrame(framePath?: string): Frame;
140
+ /**
141
+ * Internal method to get frame by path
142
+ * Path is absolute from main frame, using "/" as separator
143
+ */
144
+ private getFrameByPath;
145
+ /**
146
+ * Find a matching frame from a list of child frames
147
+ * Supports matching by:
148
+ * - Index: "0", "1", "2"
149
+ * - Name/ID: "#my-frame", "my-frame"
150
+ * - URL: partial URL match
151
+ */
152
+ private findMatchingFrame;
153
+ /**
154
+ * Set up dialog handler
155
+ */
156
+ setDialogHandler(response: 'accept' | 'dismiss', promptText?: string): void;
157
+ /**
158
+ * Clear dialog handler
159
+ */
160
+ clearDialogHandler(): void;
161
+ /**
162
+ * Start tracking requests
163
+ */
164
+ startRequestTracking(): void;
165
+ /**
166
+ * Get tracked requests
167
+ */
168
+ getRequests(filter?: string): TrackedRequest[];
169
+ /**
170
+ * Clear tracked requests
171
+ */
172
+ clearRequests(): void;
173
+ /**
174
+ * Add a route to intercept requests
175
+ */
176
+ addRoute(url: string, options: {
177
+ response?: {
178
+ status?: number;
179
+ body?: string;
180
+ contentType?: string;
181
+ headers?: Record<string, string>;
182
+ };
183
+ abort?: boolean;
184
+ }): Promise<void>;
185
+ /**
186
+ * Remove a route
187
+ */
188
+ removeRoute(url?: string): Promise<void>;
189
+ /**
190
+ * Set geolocation
191
+ */
192
+ setGeolocation(latitude: number, longitude: number, accuracy?: number): Promise<void>;
193
+ /**
194
+ * Set permissions
195
+ */
196
+ setPermissions(permissions: string[], grant: boolean): Promise<void>;
197
+ /**
198
+ * Set viewport
199
+ */
200
+ setViewport(width: number, height: number): Promise<void>;
201
+ /**
202
+ * Set device scale factor (devicePixelRatio) via CDP
203
+ * This sets window.devicePixelRatio which affects how the page renders and responds to media queries
204
+ *
205
+ * Note: When using CDP to set deviceScaleFactor, screenshots will be at logical pixel dimensions
206
+ * (viewport size), not physical pixel dimensions (viewport × scale). This is a Playwright limitation
207
+ * when using CDP emulation on existing contexts. For true HiDPI screenshots with physical pixels,
208
+ * deviceScaleFactor must be set at context creation time.
209
+ *
210
+ * Must be called after setViewport to work correctly
211
+ */
212
+ setDeviceScaleFactor(deviceScaleFactor: number, width: number, height: number, mobile?: boolean): Promise<void>;
213
+ /**
214
+ * Clear device metrics override to restore default devicePixelRatio
215
+ */
216
+ clearDeviceMetricsOverride(): Promise<void>;
217
+ /**
218
+ * Get device descriptor
219
+ */
220
+ getDevice(deviceName: string): (typeof devices)[keyof typeof devices] | undefined;
221
+ /**
222
+ * List available devices
223
+ */
224
+ listDevices(): string[];
225
+ /**
226
+ * Start console message tracking
227
+ */
228
+ startConsoleTracking(): void;
229
+ /**
230
+ * Get console messages
231
+ */
232
+ getConsoleMessages(): ConsoleMessage[];
233
+ /**
234
+ * Clear console messages
235
+ */
236
+ clearConsoleMessages(): void;
237
+ /**
238
+ * Start error tracking
239
+ */
240
+ startErrorTracking(): void;
241
+ /**
242
+ * Get page errors
243
+ */
244
+ getPageErrors(): PageError[];
245
+ /**
246
+ * Clear page errors
247
+ */
248
+ clearPageErrors(): void;
249
+ /**
250
+ * Start HAR recording
251
+ */
252
+ startHarRecording(): Promise<void>;
253
+ /**
254
+ * Check if HAR recording
255
+ */
256
+ isHarRecording(): boolean;
257
+ /**
258
+ * Set offline mode
259
+ */
260
+ setOffline(offline: boolean): Promise<void>;
261
+ /**
262
+ * Set extra HTTP headers (global - all requests)
263
+ */
264
+ setExtraHeaders(headers: Record<string, string>): Promise<void>;
265
+ /**
266
+ * Set scoped HTTP headers (only for requests matching the origin)
267
+ * Uses route interception to add headers only to matching requests
268
+ */
269
+ setScopedHeaders(origin: string, headers: Record<string, string>): Promise<void>;
270
+ /**
271
+ * Clear scoped headers for an origin (or all if no origin specified)
272
+ */
273
+ clearScopedHeaders(origin?: string): Promise<void>;
274
+ /**
275
+ * Start tracing
276
+ */
277
+ startTracing(options: {
278
+ screenshots?: boolean;
279
+ snapshots?: boolean;
280
+ }): Promise<void>;
281
+ /**
282
+ * Stop tracing and save
283
+ */
284
+ stopTracing(path: string): Promise<void>;
285
+ /**
286
+ * Save storage state (cookies, localStorage, etc.)
287
+ */
288
+ saveStorageState(path: string): Promise<void>;
289
+ /**
290
+ * Get all pages
291
+ */
292
+ getPages(): Page[];
293
+ /**
294
+ * Get current page index
295
+ */
296
+ getActiveIndex(): number;
297
+ /**
298
+ * Get the current browser instance
299
+ */
300
+ getBrowser(): Browser | null;
301
+ /**
302
+ * Check if an existing CDP connection is still alive
303
+ * by verifying we can access browser contexts and that at least one has pages
304
+ */
305
+ private isCdpConnectionAlive;
306
+ /**
307
+ * Check if CDP connection needs to be re-established
308
+ */
309
+ private needsCdpReconnect;
310
+ /**
311
+ * Close a Browserbase session via API
312
+ */
313
+ private closeBrowserbaseSession;
314
+ /**
315
+ * Close a Browser Use session via API
316
+ */
317
+ private closeBrowserUseSession;
318
+ /**
319
+ * Close a Kernel session via API
320
+ */
321
+ private closeKernelSession;
322
+ /**
323
+ * Connect to Browserbase remote browser via CDP.
324
+ * Requires BROWSERBASE_API_KEY and BROWSERBASE_PROJECT_ID environment variables.
325
+ */
326
+ private connectToBrowserbase;
327
+ /**
328
+ * Find or create a Kernel profile by name.
329
+ * Returns the profile object if successful.
330
+ */
331
+ private findOrCreateKernelProfile;
332
+ /**
333
+ * Connect to Kernel remote browser via CDP.
334
+ * Requires KERNEL_API_KEY environment variable.
335
+ */
336
+ private connectToKernel;
337
+ /**
338
+ * Connect to Browser Use remote browser via CDP.
339
+ * Requires BROWSER_USE_API_KEY environment variable.
340
+ */
341
+ private connectToBrowserUse;
342
+ /**
343
+ * Launch the browser with the specified options
344
+ * If already launched, this is a no-op (browser stays open)
345
+ */
346
+ launch(options: LaunchCommand): Promise<void>;
347
+ /**
348
+ * Connect to a running browser via CDP (Chrome DevTools Protocol)
349
+ * @param cdpEndpoint Either a port number (as string) or a full WebSocket URL (ws:// or wss://)
350
+ */
351
+ private connectViaCDP;
352
+ /**
353
+ * Set up console, error, and close tracking for a page
354
+ */
355
+ private setupPageTracking;
356
+ /**
357
+ * Set up tracking for new pages in a context (for CDP connections and popups/new tabs)
358
+ * This handles pages created externally (e.g., via target="_blank" links, window.open)
359
+ */
360
+ private setupContextTracking;
361
+ /**
362
+ * Create a new tab in the current context
363
+ */
364
+ newTab(): Promise<{
365
+ index: number;
366
+ total: number;
367
+ }>;
368
+ /**
369
+ * Create a new window (new context)
370
+ */
371
+ newWindow(viewport?: {
372
+ width: number;
373
+ height: number;
374
+ }): Promise<{
375
+ index: number;
376
+ total: number;
377
+ }>;
378
+ /**
379
+ * Invalidate the current CDP session (must be called before switching pages)
380
+ * This ensures screencast and input injection work correctly after tab switch
381
+ */
382
+ private invalidateCDPSession;
383
+ /**
384
+ * Switch to a specific tab/page by index
385
+ */
386
+ switchTo(index: number): Promise<{
387
+ index: number;
388
+ url: string;
389
+ title: string;
390
+ }>;
391
+ /**
392
+ * Close a specific tab/page
393
+ */
394
+ closeTab(index?: number): Promise<{
395
+ closed: number;
396
+ remaining: number;
397
+ }>;
398
+ /**
399
+ * List all tabs with their info
400
+ */
401
+ listTabs(): Promise<Array<{
402
+ index: number;
403
+ url: string;
404
+ title: string;
405
+ active: boolean;
406
+ }>>;
407
+ /**
408
+ * Get or create a CDP session for the current page
409
+ * Only works with Chromium-based browsers
410
+ */
411
+ getCDPSession(): Promise<CDPSession>;
412
+ /**
413
+ * Check if screencast is currently active
414
+ */
415
+ isScreencasting(): boolean;
416
+ /**
417
+ * Start screencast - streams viewport frames via CDP
418
+ * @param callback Function called for each frame
419
+ * @param options Screencast options
420
+ */
421
+ startScreencast(callback: (frame: ScreencastFrame) => void, options?: ScreencastOptions): Promise<void>;
422
+ /**
423
+ * Stop screencast (user initiated - will not auto-restart)
424
+ */
425
+ stopScreencast(): Promise<void>;
426
+ /**
427
+ * Internal method to stop screencast without changing the shouldBeActive flag
428
+ */
429
+ private stopScreencastInternal;
430
+ /**
431
+ * Inject a mouse event via CDP
432
+ */
433
+ injectMouseEvent(params: {
434
+ type: 'mousePressed' | 'mouseReleased' | 'mouseMoved' | 'mouseWheel';
435
+ x: number;
436
+ y: number;
437
+ button?: 'left' | 'right' | 'middle' | 'none';
438
+ clickCount?: number;
439
+ deltaX?: number;
440
+ deltaY?: number;
441
+ modifiers?: number;
442
+ }): Promise<void>;
443
+ /**
444
+ * Inject a keyboard event via CDP
445
+ */
446
+ injectKeyboardEvent(params: {
447
+ type: 'keyDown' | 'keyUp' | 'rawKeyDown' | 'char';
448
+ key?: string;
449
+ code?: string;
450
+ text?: string;
451
+ modifiers?: number;
452
+ }): Promise<void>;
453
+ /**
454
+ * Inject touch event via CDP (for mobile emulation)
455
+ */
456
+ injectTouchEvent(params: {
457
+ type: 'touchStart' | 'touchEnd' | 'touchMove' | 'touchCancel';
458
+ touchPoints: Array<{
459
+ x: number;
460
+ y: number;
461
+ id?: number;
462
+ }>;
463
+ modifiers?: number;
464
+ }): Promise<void>;
465
+ /**
466
+ * Insert text directly via CDP (for IME input, paste, etc.)
467
+ */
468
+ insertText(text: string): Promise<void>;
469
+ /**
470
+ * Check if video recording is currently active
471
+ */
472
+ isRecording(): boolean;
473
+ isRecordingSession(): boolean;
474
+ injectRecorderIfNeeded(): Promise<void>;
475
+ /**
476
+ * Whether recording is temporarily paused (e.g., during replay)
477
+ */
478
+ recorderPaused: boolean;
479
+ /**
480
+ * Pause recording temporarily
481
+ */
482
+ pauseRecording(): void;
483
+ /**
484
+ * Resume recording
485
+ */
486
+ resumeRecording(): void;
487
+ recordStep(step: {
488
+ action: string;
489
+ index?: number;
490
+ key?: string;
491
+ code?: string;
492
+ ctrlKey?: boolean;
493
+ metaKey?: boolean;
494
+ altKey?: boolean;
495
+ shiftKey?: boolean;
496
+ selector?: string;
497
+ value?: string;
498
+ }): void;
499
+ /**
500
+ * Start recording to a video file using Playwright's native video recording.
501
+ * Creates a fresh browser context with video recording enabled.
502
+ * Automatically captures current URL and transfers cookies/storage if no URL provided.
503
+ *
504
+ * @param outputPath - Path to the output video file (will be .webm)
505
+ * @param url - Optional URL to navigate to (defaults to current page URL)
506
+ */
507
+ startRecording(outputPath: string, url?: string): Promise<void>;
508
+ /**
509
+ * Stop recording and save the video file
510
+ * @returns Recording result with path
511
+ */
512
+ stopRecording(): Promise<{
513
+ path: string;
514
+ frames: number;
515
+ error?: string;
516
+ }>;
517
+ /**
518
+ * Restart recording - stops current recording (if any) and starts a new one.
519
+ * Convenience method that combines stopRecording and startRecording.
520
+ *
521
+ * @param outputPath - Path to the output video file (must be .webm)
522
+ * @param url - Optional URL to navigate to (defaults to current page URL)
523
+ * @returns Result from stopping the previous recording (if any)
524
+ */
525
+ restartRecording(outputPath: string, url?: string): Promise<{
526
+ previousPath?: string;
527
+ stopped: boolean;
528
+ }>;
529
+ private getPageIndex;
530
+ private getRecorderInjectScript;
531
+ startRecorder(url?: string, hide?: boolean): Promise<{
532
+ started: boolean;
533
+ sessionId: string;
534
+ }>;
535
+ stopRecorder(): Promise<{
536
+ yaml: string;
537
+ steps: number;
538
+ wasRecording?: boolean;
539
+ }>;
540
+ getRecorderStatus(): {
541
+ isRecording: boolean;
542
+ sessionId?: string;
543
+ steps: number;
544
+ };
545
+ private generateRecorderYaml;
546
+ /**
547
+ * Generate CLI command for a single recorder step
548
+ */
549
+ private generateStepCliCommand;
550
+ /**
551
+ * Close the browser and clean up
552
+ */
553
+ close(): Promise<void>;
554
+ }
555
+ export {};
556
+ //# sourceMappingURL=browser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}