@workglow/tasks 0.2.5 → 0.2.7

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 (107) hide show
  1. package/dist/browser.d.ts +2 -1
  2. package/dist/browser.d.ts.map +1 -1
  3. package/dist/browser.js +4047 -986
  4. package/dist/browser.js.map +43 -8
  5. package/dist/bun.d.ts +3 -1
  6. package/dist/bun.d.ts.map +1 -1
  7. package/dist/bun.js +4153 -580
  8. package/dist/bun.js.map +43 -6
  9. package/dist/common.d.ts +8 -4
  10. package/dist/common.d.ts.map +1 -1
  11. package/dist/electron.d.ts +19 -0
  12. package/dist/electron.d.ts.map +1 -0
  13. package/dist/electron.js +16526 -0
  14. package/dist/electron.js.map +146 -0
  15. package/dist/node.d.ts +3 -1
  16. package/dist/node.d.ts.map +1 -1
  17. package/dist/node.js +4153 -580
  18. package/dist/node.js.map +43 -6
  19. package/dist/server.d.ts +8 -0
  20. package/dist/server.d.ts.map +1 -0
  21. package/dist/task/ArrayTask.d.ts +1 -1
  22. package/dist/task/ArrayTask.d.ts.map +1 -1
  23. package/dist/task/browser-control/BrowserSessionRegistry.d.ts +34 -0
  24. package/dist/task/browser-control/BrowserSessionRegistry.d.ts.map +1 -0
  25. package/dist/task/browser-control/BunWebViewBackend.d.ts +59 -0
  26. package/dist/task/browser-control/BunWebViewBackend.d.ts.map +1 -0
  27. package/dist/task/browser-control/CDPBrowserBackend.d.ts +52 -0
  28. package/dist/task/browser-control/CDPBrowserBackend.d.ts.map +1 -0
  29. package/dist/task/browser-control/ElectronBackend.d.ts +57 -0
  30. package/dist/task/browser-control/ElectronBackend.d.ts.map +1 -0
  31. package/dist/task/browser-control/IBrowserContext.d.ts +177 -0
  32. package/dist/task/browser-control/IBrowserContext.d.ts.map +1 -0
  33. package/dist/task/browser-control/PlaywrightBackend.d.ts +78 -0
  34. package/dist/task/browser-control/PlaywrightBackend.d.ts.map +1 -0
  35. package/dist/task/browser-control/index.d.ts +11 -0
  36. package/dist/task/browser-control/index.d.ts.map +1 -0
  37. package/dist/task/browser-control/register.d.ts +34 -0
  38. package/dist/task/browser-control/register.d.ts.map +1 -0
  39. package/dist/task/browser-control/tasks/BrowserAttributeTask.d.ts +84 -0
  40. package/dist/task/browser-control/tasks/BrowserAttributeTask.d.ts.map +1 -0
  41. package/dist/task/browser-control/tasks/BrowserBackTask.d.ts +78 -0
  42. package/dist/task/browser-control/tasks/BrowserBackTask.d.ts.map +1 -0
  43. package/dist/task/browser-control/tasks/BrowserClickTask.d.ts +101 -0
  44. package/dist/task/browser-control/tasks/BrowserClickTask.d.ts.map +1 -0
  45. package/dist/task/browser-control/tasks/BrowserCloseTabTask.d.ts +71 -0
  46. package/dist/task/browser-control/tasks/BrowserCloseTabTask.d.ts.map +1 -0
  47. package/dist/task/browser-control/tasks/BrowserCloseTask.d.ts +54 -0
  48. package/dist/task/browser-control/tasks/BrowserCloseTask.d.ts.map +1 -0
  49. package/dist/task/browser-control/tasks/BrowserEvaluateTask.d.ts +74 -0
  50. package/dist/task/browser-control/tasks/BrowserEvaluateTask.d.ts.map +1 -0
  51. package/dist/task/browser-control/tasks/BrowserExtractHtmlTask.d.ts +82 -0
  52. package/dist/task/browser-control/tasks/BrowserExtractHtmlTask.d.ts.map +1 -0
  53. package/dist/task/browser-control/tasks/BrowserExtractTextTask.d.ts +81 -0
  54. package/dist/task/browser-control/tasks/BrowserExtractTextTask.d.ts.map +1 -0
  55. package/dist/task/browser-control/tasks/BrowserFillTask.d.ts +101 -0
  56. package/dist/task/browser-control/tasks/BrowserFillTask.d.ts.map +1 -0
  57. package/dist/task/browser-control/tasks/BrowserForwardTask.d.ts +78 -0
  58. package/dist/task/browser-control/tasks/BrowserForwardTask.d.ts.map +1 -0
  59. package/dist/task/browser-control/tasks/BrowserHoverTask.d.ts +98 -0
  60. package/dist/task/browser-control/tasks/BrowserHoverTask.d.ts.map +1 -0
  61. package/dist/task/browser-control/tasks/BrowserLoginTask.d.ts +87 -0
  62. package/dist/task/browser-control/tasks/BrowserLoginTask.d.ts.map +1 -0
  63. package/dist/task/browser-control/tasks/BrowserNavigateTask.d.ts +104 -0
  64. package/dist/task/browser-control/tasks/BrowserNavigateTask.d.ts.map +1 -0
  65. package/dist/task/browser-control/tasks/BrowserNewTabTask.d.ts +89 -0
  66. package/dist/task/browser-control/tasks/BrowserNewTabTask.d.ts.map +1 -0
  67. package/dist/task/browser-control/tasks/BrowserPressKeyTask.d.ts +82 -0
  68. package/dist/task/browser-control/tasks/BrowserPressKeyTask.d.ts.map +1 -0
  69. package/dist/task/browser-control/tasks/BrowserQuerySelectorTask.d.ts +94 -0
  70. package/dist/task/browser-control/tasks/BrowserQuerySelectorTask.d.ts.map +1 -0
  71. package/dist/task/browser-control/tasks/BrowserReloadTask.d.ts +68 -0
  72. package/dist/task/browser-control/tasks/BrowserReloadTask.d.ts.map +1 -0
  73. package/dist/task/browser-control/tasks/BrowserScreenshotTask.d.ts +69 -0
  74. package/dist/task/browser-control/tasks/BrowserScreenshotTask.d.ts.map +1 -0
  75. package/dist/task/browser-control/tasks/BrowserScrollTask.d.ts +73 -0
  76. package/dist/task/browser-control/tasks/BrowserScrollTask.d.ts.map +1 -0
  77. package/dist/task/browser-control/tasks/BrowserSelectTask.d.ts +98 -0
  78. package/dist/task/browser-control/tasks/BrowserSelectTask.d.ts.map +1 -0
  79. package/dist/task/browser-control/tasks/BrowserSessionTask.d.ts +63 -0
  80. package/dist/task/browser-control/tasks/BrowserSessionTask.d.ts.map +1 -0
  81. package/dist/task/browser-control/tasks/BrowserSnapshotTask.d.ts +66 -0
  82. package/dist/task/browser-control/tasks/BrowserSnapshotTask.d.ts.map +1 -0
  83. package/dist/task/browser-control/tasks/BrowserSwitchTabTask.d.ts +79 -0
  84. package/dist/task/browser-control/tasks/BrowserSwitchTabTask.d.ts.map +1 -0
  85. package/dist/task/browser-control/tasks/BrowserTypeTask.d.ts +79 -0
  86. package/dist/task/browser-control/tasks/BrowserTypeTask.d.ts.map +1 -0
  87. package/dist/task/browser-control/tasks/BrowserUploadTask.d.ts +96 -0
  88. package/dist/task/browser-control/tasks/BrowserUploadTask.d.ts.map +1 -0
  89. package/dist/task/browser-control/tasks/BrowserWaitTask.d.ts +73 -0
  90. package/dist/task/browser-control/tasks/BrowserWaitTask.d.ts.map +1 -0
  91. package/dist/task/browser-control/tasks/index.d.ts +32 -0
  92. package/dist/task/browser-control/tasks/index.d.ts.map +1 -0
  93. package/dist/task/image/ImageTextTask.d.ts +392 -0
  94. package/dist/task/image/ImageTextTask.d.ts.map +1 -0
  95. package/dist/task/image/imageTextRender.browser.d.ts +8 -0
  96. package/dist/task/image/imageTextRender.browser.d.ts.map +1 -0
  97. package/dist/task/image/imageTextRender.d.ts +42 -0
  98. package/dist/task/image/imageTextRender.d.ts.map +1 -0
  99. package/dist/task/image/imageTextRender.server.d.ts +8 -0
  100. package/dist/task/image/imageTextRender.server.d.ts.map +1 -0
  101. package/dist/task/image/registerImageTextRenderer.browser.d.ts +7 -0
  102. package/dist/task/image/registerImageTextRenderer.browser.d.ts.map +1 -0
  103. package/dist/task/image/registerImageTextRenderer.node.d.ts +7 -0
  104. package/dist/task/image/registerImageTextRenderer.node.d.ts.map +1 -0
  105. package/dist/util/BrowserTaskDeps.d.ts +21 -0
  106. package/dist/util/BrowserTaskDeps.d.ts.map +1 -0
  107. package/package.json +21 -14
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export declare function registerMcpTaskDepsServer(): void;
7
+ export declare function registerBrowserDepsServer(): void;
8
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAqBH,wBAAgB,yBAAyB,IAAI,IAAI,CAahD;AAED,wBAAgB,yBAAyB,IAAI,IAAI,CAwDhD"}
@@ -3,8 +3,8 @@
3
3
  * Copyright 2025 Steven Roussey <sroussey@gmail.com>
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import { DataPortSchemaNonBoolean, TypedArray, VectorFromSchema } from "@workglow/util/schema";
7
6
  import type { DataPortSchema } from "@workglow/util/schema";
7
+ import { DataPortSchemaNonBoolean, TypedArray, VectorFromSchema } from "@workglow/util/schema";
8
8
  import { GraphAsTask, GraphAsTaskConfig, GraphAsTaskRunner, GraphResultArray, JsonTaskItem, TaskGraphItemJson, TaskInput, TaskOutput } from "@workglow/task-graph";
9
9
  export declare function TypeReplicateArray<const T extends DataPortSchemaNonBoolean>(type: T, annotations?: Record<string, unknown>): DataPortSchemaNonBoolean;
10
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ArrayTask.d.ts","sourceRoot":"","sources":["../../src/task/ArrayTask.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ArrayTask.d.ts","sourceRoot":"","sources":["../../src/task/ArrayTask.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE/F,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EAGZ,iBAAiB,EACjB,SAAS,EACT,UAAU,EACX,MAAM,sBAAsB,CAAC;AAE9B,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,CAAC,SAAS,wBAAwB,EACzE,IAAI,EAAE,CAAC,EACP,WAAW,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,GACxC,wBAAwB,CAS1B;AAED;;;;;;;GAOG;AACH,KAAK,gBAAgB,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,EAAE,GAC/C,CAAC,SAAS,UAAU,GAClB,CAAC,GACD,KAAK,GACP,MAAM,SAAS,MAAM,CAAC,GACpB,MAAM,SAAS,MAAM,CAAC,GACpB,KAAK,GACL,CAAC,GACH,CAAC,CAAC;AAER;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS;IAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,IAAI;KAChF,CAAC,IAAI,MAAM,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS;QAAE,aAAa,EAAE,IAAI,CAAA;KAAE,GAC5E,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACtD,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;CACzC,CAAC;AAEF;;;;;GAKG;AACH,8BAAsB,SAAS,CAC7B,KAAK,SAAS,SAAS,GAAG,SAAS,EACnC,MAAM,SAAS,UAAU,GAAG,UAAU,EACtC,MAAM,SAAS,iBAAiB,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAClE,SAAQ,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;IAC1C;;OAEG;IACH,OAAuB,IAAI,SAAe;IAE1C;;OAEG;IACH,gBAAgC,aAAa,mBAAkB;IAE/D;;OAEG;IACa,WAAW,IAAI,cAAc,CAE5C;IAED;;OAEG;IACa,YAAY,IAAI,cAAc,CAE7C;IAED;;;;;;OAMG;IACI,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEzD;IAED;;OAEG;IACa,eAAe,IAAI,IAAI,CA0DtC;IAED;;;;;OAKG;IACH,SAAS,CAAC,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,EAAE,CAqCxF;IAEQ,MAAM,IAAI,iBAAiB,CAGnC;IAEQ,gBAAgB,IAAI,YAAY,CAGxC;IAED;;;OAGG;IAEK,OAAO,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAExD;;OAEG;IACH,IAAa,MAAM,IAAI,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAK5D;CACF;AAED;;;;GAIG;AACH,cAAM,eAAe,CACnB,KAAK,SAAS,SAAS,GAAG,SAAS,EACnC,MAAM,SAAS,UAAU,GAAG,UAAU,EACtC,MAAM,SAAS,iBAAiB,CAAC,KAAK,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAClE,SAAQ,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC;IACxC,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE/C;;;OAGG;IACH,UAAyB,mBAAmB,CAAC,MAAM,EAAE,KAAK,GAAG,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAE7F;IAED;;;OAGG;IACH,UAAyB,2BAA2B,IAAI,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAGxF;IAEqB,mBAAmB,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAMvF;IACqB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAM/D;CACF"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { IBrowserContext } from "./IBrowserContext";
7
+ export declare const BrowserSessionRegistry: {
8
+ /**
9
+ * Register a browser context and return a unique session ID.
10
+ */
11
+ register(context: IBrowserContext): string;
12
+ /**
13
+ * Retrieve a registered browser context by session ID.
14
+ * Throws if the session does not exist or has been disconnected.
15
+ */
16
+ get(sessionId: string): IBrowserContext;
17
+ /**
18
+ * Remove a session from the registry.
19
+ */
20
+ unregister(sessionId: string): void;
21
+ /**
22
+ * Returns true if a session with the given ID exists.
23
+ */
24
+ has(sessionId: string): boolean;
25
+ /**
26
+ * Disconnect all registered contexts using Promise.allSettled, then clear the registry.
27
+ */
28
+ disconnectAll(): Promise<void>;
29
+ /**
30
+ * Clear all sessions without disconnecting (for tests).
31
+ */
32
+ clear(): void;
33
+ };
34
+ //# sourceMappingURL=BrowserSessionRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserSessionRegistry.d.ts","sourceRoot":"","sources":["../../../src/task/browser-control/BrowserSessionRegistry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD,eAAO,MAAM,sBAAsB;IACjC;;OAEG;IACH,QAAQ,UAAU,eAAe,GAAG,MAAM;IAM1C;;;OAGG;IACH,GAAG,YAAY,MAAM,GAAG,eAAe;IAYvC;;OAEG;IACH,UAAU,YAAY,MAAM,GAAG,IAAI;IAInC;;OAEG;IACH,GAAG,YAAY,MAAM,GAAG,OAAO;IAI/B;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAMpC;;OAEG;IACH,KAAK,IAAI,IAAI;CAGL,CAAC"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CDPBrowserBackend } from "./CDPBrowserBackend";
7
+ import type { BrowserConnectOptions, ConsoleMessage, DialogAction, DialogInfo, DownloadOptions, DownloadResult, ElementRef, IBrowserContext, NavigateOptions, NetworkFilter, NetworkRequest, ScreenshotOptions, TabInfo, WaitOptions } from "./IBrowserContext";
8
+ /**
9
+ * IBrowserContext implementation using Bun's built-in WebView API + CDP.
10
+ *
11
+ * Bun.WebView provides a headless browser with Chrome DevTools Protocol
12
+ * access. This backend wraps the WebView, delegating CDP operations to the
13
+ * abstract CDPBrowserBackend base class and using native WebView methods
14
+ * for navigation, screenshots, and keyboard input.
15
+ *
16
+ * This file should only be imported in Bun environments.
17
+ */
18
+ export declare class BunWebViewBackend extends CDPBrowserBackend implements IBrowserContext {
19
+ private readonly defaultChromePath?;
20
+ private _wv;
21
+ private _connected;
22
+ private _dialogHandler;
23
+ protected readonly backendName = "BunWebViewBackend";
24
+ /**
25
+ * @param defaultChromePath Optional default Chrome binary path. Used when
26
+ * `connect()` is called without `chromePath` in options (e.g., via
27
+ * BrowserSessionTask which doesn't expose chromePath in its config).
28
+ */
29
+ constructor(defaultChromePath?: string | undefined);
30
+ protected cdp(method: string, params?: Record<string, unknown>): Promise<unknown>;
31
+ protected evaluateInPage<T>(script: string): Promise<T>;
32
+ connect(options?: BrowserConnectOptions): Promise<void>;
33
+ disconnect(): Promise<void>;
34
+ isConnected(): boolean;
35
+ private get wv();
36
+ navigate(url: string, options?: NavigateOptions): Promise<void>;
37
+ goBack(_options?: NavigateOptions): Promise<void>;
38
+ goForward(_options?: NavigateOptions): Promise<void>;
39
+ reload(_options?: NavigateOptions): Promise<void>;
40
+ currentUrl(): Promise<string>;
41
+ title(): Promise<string>;
42
+ content(): Promise<string>;
43
+ evaluate<T>(expression: string): Promise<T>;
44
+ screenshot(options?: ScreenshotOptions): Promise<Buffer>;
45
+ pressKey(key: string, _options?: WaitOptions): Promise<void>;
46
+ type(text: string, _options?: WaitOptions): Promise<void>;
47
+ download(_trigger: () => Promise<void>, _options?: DownloadOptions): Promise<DownloadResult>;
48
+ onDialog(handler: (info: DialogInfo) => DialogAction | Promise<DialogAction>): void;
49
+ tabs(): Promise<readonly TabInfo[]>;
50
+ switchTab(_tabId: string): Promise<void>;
51
+ newTab(url?: string): Promise<TabInfo>;
52
+ closeTab(_tabId: string): Promise<void>;
53
+ waitForNavigation(options?: NavigateOptions): Promise<void>;
54
+ waitForSelector(selector: string, options?: WaitOptions): Promise<ElementRef>;
55
+ waitForIdle(options?: WaitOptions): Promise<void>;
56
+ readonly networkRequests: (_filter?: NetworkFilter) => Promise<readonly NetworkRequest[]>;
57
+ readonly consoleMessages: () => Promise<readonly ConsoleMessage[]>;
58
+ }
59
+ //# sourceMappingURL=BunWebViewBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BunWebViewBackend.d.ts","sourceRoot":"","sources":["../../../src/task/browser-control/BunWebViewBackend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { AccessibilityTree, AriaRole, ClickOptions, ElementRef, SnapshotOptions, WaitOptions } from "./IBrowserContext";
7
+ export declare abstract class CDPBrowserBackend {
8
+ protected _refMap: Map<string, number | null>;
9
+ protected _refCounter: {
10
+ count: number;
11
+ };
12
+ /** Send a CDP command. Subclasses wire this to their transport. */
13
+ protected abstract cdp(method: string, params?: Record<string, unknown>): Promise<unknown>;
14
+ /** Human-readable backend name for error messages. */
15
+ protected abstract readonly backendName: string;
16
+ /** Evaluate a JavaScript expression in the page and return the result. */
17
+ protected abstract evaluateInPage<T>(script: string): Promise<T>;
18
+ /**
19
+ * Resolve an ElementRef to a backendDOMNodeId. Throws if unknown.
20
+ */
21
+ protected resolveRefToNodeId(ref: ElementRef): number;
22
+ /**
23
+ * Get the bounding box of a DOM node by backendDOMNodeId via CDP.
24
+ */
25
+ protected getBoundingBox(backendNodeId: number): Promise<{
26
+ x: number;
27
+ y: number;
28
+ width: number;
29
+ height: number;
30
+ }>;
31
+ /**
32
+ * Get the root nodeId of the DOM document.
33
+ */
34
+ protected getDocumentRootNodeId(): Promise<number>;
35
+ snapshot(_options?: SnapshotOptions): Promise<AccessibilityTree>;
36
+ click(ref: ElementRef, options?: ClickOptions): Promise<void>;
37
+ fill(ref: ElementRef, value: string, _options?: WaitOptions): Promise<void>;
38
+ selectOption(ref: ElementRef, values: string | readonly string[], _options?: WaitOptions): Promise<void>;
39
+ hover(ref: ElementRef, _options?: WaitOptions): Promise<void>;
40
+ clickByRole(role: AriaRole, name: string, options?: ClickOptions): Promise<void>;
41
+ fillByLabel(label: string, value: string, _options?: WaitOptions): Promise<void>;
42
+ innerHTML(ref: ElementRef): Promise<string>;
43
+ textContent(ref: ElementRef): Promise<string | null>;
44
+ attribute(ref: ElementRef, name: string): Promise<string | null>;
45
+ querySelector(selector: string): Promise<ElementRef | null>;
46
+ querySelectorAll(selector: string): Promise<readonly ElementRef[]>;
47
+ pressKey(key: string, _options?: WaitOptions): Promise<void>;
48
+ type(text: string, _options?: WaitOptions): Promise<void>;
49
+ scroll(x: number, y: number, ref?: ElementRef): Promise<void>;
50
+ uploadFile(ref: ElementRef, paths: string | readonly string[]): Promise<void>;
51
+ }
52
+ //# sourceMappingURL=CDPBrowserBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CDPBrowserBackend.d.ts","sourceRoot":"","sources":["../../../src/task/browser-control/CDPBrowserBackend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CDPBrowserBackend } from "./CDPBrowserBackend";
7
+ import type { BrowserConnectOptions, ConsoleMessage, DialogAction, DialogInfo, DownloadOptions, DownloadResult, ElementRef, IBrowserContext, NavigateOptions, NetworkFilter, NetworkRequest, ScreenshotOptions, TabInfo, WaitOptions } from "./IBrowserContext";
8
+ /**
9
+ * IBrowserContext implementation using Electron's native webContents + CDP.
10
+ *
11
+ * This file is only imported from the Electron main process. It must NOT be
12
+ * included in browser/bun/node entry points.
13
+ *
14
+ * Session isolation is achieved via `session.fromPartition(partitionString)`
15
+ * scoped to projectId + profileName.
16
+ */
17
+ export declare class ElectronBackend extends CDPBrowserBackend implements IBrowserContext {
18
+ /** @type {AnyBrowserWindow} Electron BrowserWindow instance */
19
+ private _window;
20
+ /** @type {AnyWebContents} Electron webContents instance */
21
+ private _webContents;
22
+ private _connected;
23
+ private _dialogHandler;
24
+ protected readonly backendName = "ElectronBackend";
25
+ /**
26
+ * Send a Chrome DevTools Protocol command via the Electron debugger.
27
+ * @param method CDP method name (e.g. "DOM.getBoxModel")
28
+ * @param params CDP parameters
29
+ */
30
+ protected cdp(method: string, params?: Record<string, unknown>): Promise<unknown>;
31
+ protected evaluateInPage<T>(script: string): Promise<T>;
32
+ connect(options?: BrowserConnectOptions): Promise<void>;
33
+ disconnect(): Promise<void>;
34
+ isConnected(): boolean;
35
+ private get wc();
36
+ navigate(url: string, _options?: NavigateOptions): Promise<void>;
37
+ goBack(_options?: NavigateOptions): Promise<void>;
38
+ goForward(_options?: NavigateOptions): Promise<void>;
39
+ reload(_options?: NavigateOptions): Promise<void>;
40
+ currentUrl(): Promise<string>;
41
+ title(): Promise<string>;
42
+ content(): Promise<string>;
43
+ evaluate<T>(expression: string): Promise<T>;
44
+ screenshot(options?: ScreenshotOptions): Promise<Buffer>;
45
+ download(trigger: () => Promise<void>, options?: DownloadOptions): Promise<DownloadResult>;
46
+ onDialog(handler: (info: DialogInfo) => DialogAction | Promise<DialogAction>): void;
47
+ tabs(): Promise<readonly TabInfo[]>;
48
+ switchTab(_tabId: string): Promise<void>;
49
+ newTab(url?: string): Promise<TabInfo>;
50
+ closeTab(_tabId: string): Promise<void>;
51
+ waitForNavigation(options?: NavigateOptions): Promise<void>;
52
+ waitForSelector(selector: string, options?: WaitOptions): Promise<ElementRef>;
53
+ waitForIdle(options?: WaitOptions): Promise<void>;
54
+ readonly networkRequests: (_filter?: NetworkFilter) => Promise<readonly NetworkRequest[]>;
55
+ readonly consoleMessages: () => Promise<readonly ConsoleMessage[]>;
56
+ }
57
+ //# sourceMappingURL=ElectronBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ElectronBackend.d.ts","sourceRoot":"","sources":["../../../src/task/browser-control/ElectronBackend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ /** Opaque reference to a specific element in the browser context. */
7
+ export type ElementRef = string;
8
+ /** Common ARIA roles with an escape hatch for non-standard values. */
9
+ export type AriaRole = "alert" | "alertdialog" | "application" | "article" | "banner" | "button" | "cell" | "checkbox" | "columnheader" | "combobox" | "complementary" | "contentinfo" | "definition" | "dialog" | "directory" | "document" | "feed" | "figure" | "form" | "grid" | "gridcell" | "group" | "heading" | "img" | "link" | "list" | "listbox" | "listitem" | "log" | "main" | "marquee" | "math" | "menu" | "menubar" | "menuitem" | "menuitemcheckbox" | "menuitemradio" | "navigation" | "none" | "note" | "option" | "presentation" | "progressbar" | "radio" | "radiogroup" | "region" | "row" | "rowgroup" | "rowheader" | "scrollbar" | "search" | "searchbox" | "separator" | "slider" | "spinbutton" | "status" | "switch" | "tab" | "table" | "tablist" | "tabpanel" | "term" | "textbox" | "timer" | "toolbar" | "tooltip" | "tree" | "treegrid" | "treeitem" | (string & {});
10
+ export interface AccessibilityNode {
11
+ readonly ref: ElementRef;
12
+ readonly role: AriaRole;
13
+ readonly name: string;
14
+ readonly level?: number;
15
+ readonly checked?: boolean | "mixed";
16
+ readonly disabled?: boolean;
17
+ readonly expanded?: boolean;
18
+ readonly pressed?: boolean | "mixed";
19
+ readonly selected?: boolean;
20
+ readonly value?: string | number;
21
+ readonly children?: readonly AccessibilityNode[];
22
+ }
23
+ export interface AccessibilityTree {
24
+ readonly root: AccessibilityNode;
25
+ readonly yaml: string;
26
+ }
27
+ export type BrowserBackendType = "local" | "cloud" | "electron-native";
28
+ export interface BrowserConnectOptions {
29
+ readonly backend?: BrowserBackendType;
30
+ readonly projectId?: string;
31
+ readonly profileName?: string;
32
+ readonly headless?: boolean;
33
+ readonly cdpUrl?: string;
34
+ readonly chromePath?: string;
35
+ }
36
+ export interface NavigateOptions {
37
+ readonly waitUntil?: "load" | "domcontentloaded" | "networkidle";
38
+ readonly timeout?: number;
39
+ }
40
+ export interface ClickOptions {
41
+ readonly modifiers?: ReadonlyArray<"Alt" | "Control" | "Meta" | "Shift">;
42
+ readonly button?: "left" | "middle" | "right";
43
+ readonly clickCount?: number;
44
+ readonly timeout?: number;
45
+ }
46
+ export interface SnapshotOptions {
47
+ readonly ref?: ElementRef;
48
+ }
49
+ export interface ScreenshotOptions {
50
+ readonly format?: "png" | "jpeg";
51
+ readonly quality?: number;
52
+ readonly fullPage?: boolean;
53
+ }
54
+ export interface WaitOptions {
55
+ readonly timeout?: number;
56
+ }
57
+ export interface DownloadOptions {
58
+ readonly timeout?: number;
59
+ }
60
+ export interface DownloadResult {
61
+ readonly path: string;
62
+ readonly suggestedFilename: string;
63
+ }
64
+ export interface DialogInfo {
65
+ readonly type: "alert" | "confirm" | "prompt" | "beforeunload";
66
+ readonly message: string;
67
+ readonly defaultValue?: string;
68
+ }
69
+ export type DialogAction = {
70
+ readonly accept: true;
71
+ readonly promptText?: string;
72
+ } | {
73
+ readonly accept: false;
74
+ };
75
+ export interface TabInfo {
76
+ readonly tabId: string;
77
+ readonly url: string;
78
+ readonly title: string;
79
+ }
80
+ export interface NetworkFilter {
81
+ readonly urlPattern?: string;
82
+ readonly method?: string;
83
+ }
84
+ export interface NetworkRequest {
85
+ readonly url: string;
86
+ readonly method: string;
87
+ readonly status?: number;
88
+ readonly headers: Readonly<Record<string, string>>;
89
+ }
90
+ export interface ConsoleMessage {
91
+ readonly type: "log" | "warn" | "error" | "info" | "debug";
92
+ readonly text: string;
93
+ }
94
+ export interface IBrowserContext {
95
+ /** Establish a connection to the browser backend. */
96
+ connect(options?: BrowserConnectOptions): Promise<void>;
97
+ /** Disconnect from the browser backend and release resources. */
98
+ disconnect(): Promise<void>;
99
+ /** Returns true if the context is currently connected. */
100
+ isConnected(): boolean;
101
+ /** Navigate to the given URL. */
102
+ navigate(url: string, options?: NavigateOptions): Promise<void>;
103
+ /** Navigate back in history. */
104
+ goBack(options?: NavigateOptions): Promise<void>;
105
+ /** Navigate forward in history. */
106
+ goForward(options?: NavigateOptions): Promise<void>;
107
+ /** Reload the current page. */
108
+ reload(options?: NavigateOptions): Promise<void>;
109
+ /** Return the current page URL. */
110
+ currentUrl(): Promise<string>;
111
+ /** Return the current page title. */
112
+ title(): Promise<string>;
113
+ /** Return the accessibility tree of the current page or a subtree. */
114
+ snapshot(options?: SnapshotOptions): Promise<AccessibilityTree>;
115
+ /** Click the element identified by the given ref. */
116
+ click(ref: ElementRef, options?: ClickOptions): Promise<void>;
117
+ /** Fill a text input identified by the given ref. */
118
+ fill(ref: ElementRef, value: string, options?: WaitOptions): Promise<void>;
119
+ /** Select an option in a <select> element identified by the given ref. */
120
+ selectOption(ref: ElementRef, values: string | readonly string[], options?: WaitOptions): Promise<void>;
121
+ /** Hover over the element identified by the given ref. */
122
+ hover(ref: ElementRef, options?: WaitOptions): Promise<void>;
123
+ /** Click the first element matching the given ARIA role and accessible name. */
124
+ clickByRole(role: AriaRole, name: string, options?: ClickOptions): Promise<void>;
125
+ /** Fill the input associated with the given label text. */
126
+ fillByLabel(label: string, value: string, options?: WaitOptions): Promise<void>;
127
+ /** Return the full HTML content of the page. */
128
+ content(): Promise<string>;
129
+ /** Return the innerHTML of the element identified by the given ref. */
130
+ innerHTML(ref: ElementRef): Promise<string>;
131
+ /** Return the textContent of the element identified by the given ref. */
132
+ textContent(ref: ElementRef): Promise<string | null>;
133
+ /** Return the value of a named attribute on the element identified by the given ref. */
134
+ attribute(ref: ElementRef, name: string): Promise<string | null>;
135
+ /** Return the ElementRef of the first element matching the CSS selector. */
136
+ querySelector(selector: string): Promise<ElementRef | null>;
137
+ /** Return the ElementRefs of all elements matching the CSS selector. */
138
+ querySelectorAll(selector: string): Promise<readonly ElementRef[]>;
139
+ /** Evaluate a JavaScript expression in the page context and return the result. */
140
+ evaluate<T>(expression: string): Promise<T>;
141
+ /** Take a screenshot of the current page and return it as a Buffer. */
142
+ screenshot(options?: ScreenshotOptions): Promise<Buffer>;
143
+ /** Press a keyboard key or chord (e.g. "Enter", "Control+a"). */
144
+ pressKey(key: string, options?: WaitOptions): Promise<void>;
145
+ /** Type text into the currently focused element. */
146
+ type(text: string, options?: WaitOptions): Promise<void>;
147
+ /** Scroll the page or an element by the given pixel deltas. */
148
+ scroll(x: number, y: number, ref?: ElementRef): Promise<void>;
149
+ /** Upload one or more files to a file input identified by the given ref. */
150
+ uploadFile(ref: ElementRef, paths: string | readonly string[]): Promise<void>;
151
+ /** Wait for a download triggered by the callback and return the result. */
152
+ download(trigger: () => Promise<void>, options?: DownloadOptions): Promise<DownloadResult>;
153
+ /**
154
+ * Register a handler that will be called whenever a dialog appears.
155
+ * The handler must return a DialogAction synchronously or as a Promise.
156
+ */
157
+ onDialog(handler: (info: DialogInfo) => DialogAction | Promise<DialogAction>): void;
158
+ /** Return metadata for all open tabs. */
159
+ tabs(): Promise<readonly TabInfo[]>;
160
+ /** Switch the active tab to the one with the given tabId. */
161
+ switchTab(tabId: string): Promise<void>;
162
+ /** Open a new blank tab and return its TabInfo. */
163
+ newTab(url?: string): Promise<TabInfo>;
164
+ /** Close the tab with the given tabId. */
165
+ closeTab(tabId: string): Promise<void>;
166
+ /** Wait for the next navigation to complete. */
167
+ waitForNavigation(options?: NavigateOptions): Promise<void>;
168
+ /** Wait until the element matching selector is present in the DOM. */
169
+ waitForSelector(selector: string, options?: WaitOptions): Promise<ElementRef>;
170
+ /** Wait until there are no outstanding network requests. */
171
+ waitForIdle(options?: WaitOptions): Promise<void>;
172
+ /** Return captured network requests (if supported by the backend). */
173
+ readonly networkRequests?: (filter?: NetworkFilter) => Promise<readonly NetworkRequest[]>;
174
+ /** Return captured console messages (if supported by the backend). */
175
+ readonly consoleMessages?: () => Promise<readonly ConsoleMessage[]>;
176
+ }
177
+ //# sourceMappingURL=IBrowserContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBrowserContext.d.ts","sourceRoot":"","sources":["../../../src/task/browser-control/IBrowserContext.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import type { AccessibilityTree, AriaRole, BrowserConnectOptions, ClickOptions, ConsoleMessage, DialogAction, DialogInfo, DownloadOptions, DownloadResult, ElementRef, IBrowserContext, NavigateOptions, NetworkFilter, NetworkRequest, ScreenshotOptions, SnapshotOptions, TabInfo, WaitOptions } from "./IBrowserContext";
7
+ type AnyBrowser = any;
8
+ export declare class PlaywrightBackend implements IBrowserContext {
9
+ private readonly sharedLocalBrowser?;
10
+ /**
11
+ * When set, `connect()` reuses this browser for local mode instead of launching a new process.
12
+ * Used by integration tests to avoid per-test launch/teardown flakiness. The caller must not
13
+ * close the browser until all backends that reference it have disconnected.
14
+ */
15
+ constructor(sharedLocalBrowser?: AnyBrowser);
16
+ private _browser;
17
+ private _context;
18
+ private _page;
19
+ private _connected;
20
+ /** True when this backend launched Chromium locally (owns full process tree). */
21
+ private _launchedLocalChromium;
22
+ private _refMap;
23
+ private _refCounter;
24
+ private _dialogHandler;
25
+ connect(options?: BrowserConnectOptions): Promise<void>;
26
+ disconnect(): Promise<void>;
27
+ isConnected(): boolean;
28
+ private get page();
29
+ private get context();
30
+ /**
31
+ * Resolve an ElementRef to a Playwright Locator.
32
+ * The refMap stores descriptor strings like:
33
+ * "getByRole:button:Sign In"
34
+ * "getByText:some text"
35
+ * "css:.my-class"
36
+ * "nth:getByRole:listitem::2"
37
+ */
38
+ private resolveRef;
39
+ private descriptorToLocator;
40
+ navigate(url: string, options?: NavigateOptions): Promise<void>;
41
+ goBack(options?: NavigateOptions): Promise<void>;
42
+ goForward(options?: NavigateOptions): Promise<void>;
43
+ reload(options?: NavigateOptions): Promise<void>;
44
+ currentUrl(): Promise<string>;
45
+ title(): Promise<string>;
46
+ snapshot(options?: SnapshotOptions): Promise<AccessibilityTree>;
47
+ click(ref: ElementRef, options?: ClickOptions): Promise<void>;
48
+ fill(ref: ElementRef, value: string, options?: WaitOptions): Promise<void>;
49
+ selectOption(ref: ElementRef, values: string | readonly string[], options?: WaitOptions): Promise<void>;
50
+ hover(ref: ElementRef, options?: WaitOptions): Promise<void>;
51
+ clickByRole(role: AriaRole, name: string, options?: ClickOptions): Promise<void>;
52
+ fillByLabel(label: string, value: string, options?: WaitOptions): Promise<void>;
53
+ content(): Promise<string>;
54
+ innerHTML(ref: ElementRef): Promise<string>;
55
+ textContent(ref: ElementRef): Promise<string | null>;
56
+ attribute(ref: ElementRef, name: string): Promise<string | null>;
57
+ querySelector(selector: string): Promise<ElementRef | null>;
58
+ querySelectorAll(selector: string): Promise<readonly ElementRef[]>;
59
+ evaluate<T>(expression: string): Promise<T>;
60
+ screenshot(options?: ScreenshotOptions): Promise<Buffer>;
61
+ pressKey(key: string, _options?: WaitOptions): Promise<void>;
62
+ type(text: string, _options?: WaitOptions): Promise<void>;
63
+ scroll(x: number, y: number, ref?: ElementRef): Promise<void>;
64
+ uploadFile(ref: ElementRef, paths: string | readonly string[]): Promise<void>;
65
+ download(trigger: () => Promise<void>, options?: DownloadOptions): Promise<DownloadResult>;
66
+ onDialog(handler: (info: DialogInfo) => DialogAction | Promise<DialogAction>): void;
67
+ tabs(): Promise<readonly TabInfo[]>;
68
+ switchTab(tabId: string): Promise<void>;
69
+ newTab(url?: string): Promise<TabInfo>;
70
+ closeTab(tabId: string): Promise<void>;
71
+ waitForNavigation(options?: NavigateOptions): Promise<void>;
72
+ waitForSelector(selector: string, options?: WaitOptions): Promise<ElementRef>;
73
+ waitForIdle(options?: WaitOptions): Promise<void>;
74
+ readonly networkRequests: (_filter?: NetworkFilter) => Promise<readonly NetworkRequest[]>;
75
+ readonly consoleMessages: () => Promise<readonly ConsoleMessage[]>;
76
+ }
77
+ export {};
78
+ //# sourceMappingURL=PlaywrightBackend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PlaywrightBackend.d.ts","sourceRoot":"","sources":["../../../src/task/browser-control/PlaywrightBackend.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ export * from "./BrowserSessionRegistry";
7
+ export * from "./BunWebViewBackend";
8
+ export * from "./CDPBrowserBackend";
9
+ export * from "./IBrowserContext";
10
+ export * from "./tasks";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/task/browser-control/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,mBAAmB,CAAC;AAClC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Steven Roussey <sroussey@gmail.com>
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { BrowserSessionTask } from "./tasks/BrowserSessionTask";
7
+ import { BrowserCloseTask } from "./tasks/BrowserCloseTask";
8
+ import { BrowserNavigateTask } from "./tasks/BrowserNavigateTask";
9
+ import { BrowserBackTask } from "./tasks/BrowserBackTask";
10
+ import { BrowserForwardTask } from "./tasks/BrowserForwardTask";
11
+ import { BrowserReloadTask } from "./tasks/BrowserReloadTask";
12
+ import { BrowserSnapshotTask } from "./tasks/BrowserSnapshotTask";
13
+ import { BrowserScreenshotTask } from "./tasks/BrowserScreenshotTask";
14
+ import { BrowserClickTask } from "./tasks/BrowserClickTask";
15
+ import { BrowserFillTask } from "./tasks/BrowserFillTask";
16
+ import { BrowserSelectTask } from "./tasks/BrowserSelectTask";
17
+ import { BrowserHoverTask } from "./tasks/BrowserHoverTask";
18
+ import { BrowserExtractTextTask } from "./tasks/BrowserExtractTextTask";
19
+ import { BrowserExtractHtmlTask } from "./tasks/BrowserExtractHtmlTask";
20
+ import { BrowserAttributeTask } from "./tasks/BrowserAttributeTask";
21
+ import { BrowserQuerySelectorTask } from "./tasks/BrowserQuerySelectorTask";
22
+ import { BrowserEvaluateTask } from "./tasks/BrowserEvaluateTask";
23
+ import { BrowserPressKeyTask } from "./tasks/BrowserPressKeyTask";
24
+ import { BrowserTypeTask } from "./tasks/BrowserTypeTask";
25
+ import { BrowserScrollTask } from "./tasks/BrowserScrollTask";
26
+ import { BrowserUploadTask } from "./tasks/BrowserUploadTask";
27
+ import { BrowserWaitTask } from "./tasks/BrowserWaitTask";
28
+ import { BrowserNewTabTask } from "./tasks/BrowserNewTabTask";
29
+ import { BrowserSwitchTabTask } from "./tasks/BrowserSwitchTabTask";
30
+ import { BrowserCloseTabTask } from "./tasks/BrowserCloseTabTask";
31
+ import { BrowserLoginTask } from "./tasks/BrowserLoginTask";
32
+ export declare const browserTasks: readonly [typeof BrowserSessionTask, typeof BrowserCloseTask, typeof BrowserNavigateTask, typeof BrowserBackTask, typeof BrowserForwardTask, typeof BrowserReloadTask, typeof BrowserSnapshotTask, typeof BrowserScreenshotTask, typeof BrowserClickTask, typeof BrowserFillTask, typeof BrowserSelectTask, typeof BrowserHoverTask, typeof BrowserExtractTextTask, typeof BrowserExtractHtmlTask, typeof BrowserAttributeTask, typeof BrowserQuerySelectorTask, typeof BrowserEvaluateTask, typeof BrowserPressKeyTask, typeof BrowserTypeTask, typeof BrowserScrollTask, typeof BrowserUploadTask, typeof BrowserWaitTask, typeof BrowserNewTabTask, typeof BrowserSwitchTabTask, typeof BrowserCloseTabTask, typeof BrowserLoginTask];
33
+ export declare function registerBrowserTasks(): void;
34
+ //# sourceMappingURL=register.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../src/task/browser-control/register.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,eAAO,MAAM,YAAY,0sBA2Bf,CAAC;AAEX,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}