@donggui/web 1.5.5-donggui.3

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 +9 -0
  2. package/bin/midscene-playground +3 -0
  3. package/bin/midscene-web +2 -0
  4. package/dist/es/bin.mjs +23 -0
  5. package/dist/es/bin.mjs.map +1 -0
  6. package/dist/es/bridge-mode/agent-cli-side.mjs +137 -0
  7. package/dist/es/bridge-mode/agent-cli-side.mjs.map +1 -0
  8. package/dist/es/bridge-mode/browser.mjs +2 -0
  9. package/dist/es/bridge-mode/common.mjs +43 -0
  10. package/dist/es/bridge-mode/common.mjs.map +1 -0
  11. package/dist/es/bridge-mode/index.mjs +4 -0
  12. package/dist/es/bridge-mode/io-client.mjs +101 -0
  13. package/dist/es/bridge-mode/io-client.mjs.map +1 -0
  14. package/dist/es/bridge-mode/io-server.mjs +210 -0
  15. package/dist/es/bridge-mode/io-server.mjs.map +1 -0
  16. package/dist/es/bridge-mode/page-browser-side.mjs +118 -0
  17. package/dist/es/bridge-mode/page-browser-side.mjs.map +1 -0
  18. package/dist/es/chrome-extension/agent.mjs +9 -0
  19. package/dist/es/chrome-extension/agent.mjs.map +1 -0
  20. package/dist/es/chrome-extension/cdpInput.mjs +174 -0
  21. package/dist/es/chrome-extension/cdpInput.mjs.LICENSE.txt +5 -0
  22. package/dist/es/chrome-extension/cdpInput.mjs.map +1 -0
  23. package/dist/es/chrome-extension/dynamic-scripts.mjs +38 -0
  24. package/dist/es/chrome-extension/dynamic-scripts.mjs.map +1 -0
  25. package/dist/es/chrome-extension/index.mjs +5 -0
  26. package/dist/es/chrome-extension/page.mjs +651 -0
  27. package/dist/es/chrome-extension/page.mjs.map +1 -0
  28. package/dist/es/cli.mjs +16 -0
  29. package/dist/es/cli.mjs.map +1 -0
  30. package/dist/es/common/cache-helper.mjs +28 -0
  31. package/dist/es/common/cache-helper.mjs.map +1 -0
  32. package/dist/es/index.mjs +6 -0
  33. package/dist/es/mcp-server.mjs +35 -0
  34. package/dist/es/mcp-server.mjs.map +1 -0
  35. package/dist/es/mcp-tools-puppeteer.mjs +215 -0
  36. package/dist/es/mcp-tools-puppeteer.mjs.map +1 -0
  37. package/dist/es/mcp-tools.mjs +78 -0
  38. package/dist/es/mcp-tools.mjs.map +1 -0
  39. package/dist/es/playwright/ai-fixture.mjs +367 -0
  40. package/dist/es/playwright/ai-fixture.mjs.map +1 -0
  41. package/dist/es/playwright/index.mjs +40 -0
  42. package/dist/es/playwright/index.mjs.map +1 -0
  43. package/dist/es/playwright/page.mjs +44 -0
  44. package/dist/es/playwright/page.mjs.map +1 -0
  45. package/dist/es/playwright/reporter/index.mjs +216 -0
  46. package/dist/es/playwright/reporter/index.mjs.map +1 -0
  47. package/dist/es/puppeteer/agent-launcher.mjs +185 -0
  48. package/dist/es/puppeteer/agent-launcher.mjs.map +1 -0
  49. package/dist/es/puppeteer/base-page.mjs +564 -0
  50. package/dist/es/puppeteer/base-page.mjs.map +1 -0
  51. package/dist/es/puppeteer/index.mjs +34 -0
  52. package/dist/es/puppeteer/index.mjs.map +1 -0
  53. package/dist/es/puppeteer/page.mjs +9 -0
  54. package/dist/es/puppeteer/page.mjs.map +1 -0
  55. package/dist/es/static/index.mjs +3 -0
  56. package/dist/es/static/static-agent.mjs +12 -0
  57. package/dist/es/static/static-agent.mjs.map +1 -0
  58. package/dist/es/static/static-page.mjs +122 -0
  59. package/dist/es/static/static-page.mjs.map +1 -0
  60. package/dist/es/utils.mjs +8 -0
  61. package/dist/es/utils.mjs.map +1 -0
  62. package/dist/es/web-element.mjs +59 -0
  63. package/dist/es/web-element.mjs.map +1 -0
  64. package/dist/es/web-page.mjs +260 -0
  65. package/dist/es/web-page.mjs.map +1 -0
  66. package/dist/lib/bin.js +29 -0
  67. package/dist/lib/bin.js.map +1 -0
  68. package/dist/lib/bridge-mode/agent-cli-side.js +174 -0
  69. package/dist/lib/bridge-mode/agent-cli-side.js.map +1 -0
  70. package/dist/lib/bridge-mode/browser.js +38 -0
  71. package/dist/lib/bridge-mode/browser.js.map +1 -0
  72. package/dist/lib/bridge-mode/common.js +107 -0
  73. package/dist/lib/bridge-mode/common.js.map +1 -0
  74. package/dist/lib/bridge-mode/index.js +46 -0
  75. package/dist/lib/bridge-mode/index.js.map +1 -0
  76. package/dist/lib/bridge-mode/io-client.js +135 -0
  77. package/dist/lib/bridge-mode/io-client.js.map +1 -0
  78. package/dist/lib/bridge-mode/io-server.js +247 -0
  79. package/dist/lib/bridge-mode/io-server.js.map +1 -0
  80. package/dist/lib/bridge-mode/page-browser-side.js +162 -0
  81. package/dist/lib/bridge-mode/page-browser-side.js.map +1 -0
  82. package/dist/lib/chrome-extension/agent.js +43 -0
  83. package/dist/lib/chrome-extension/agent.js.map +1 -0
  84. package/dist/lib/chrome-extension/cdpInput.js +208 -0
  85. package/dist/lib/chrome-extension/cdpInput.js.LICENSE.txt +5 -0
  86. package/dist/lib/chrome-extension/cdpInput.js.map +1 -0
  87. package/dist/lib/chrome-extension/dynamic-scripts.js +88 -0
  88. package/dist/lib/chrome-extension/dynamic-scripts.js.map +1 -0
  89. package/dist/lib/chrome-extension/index.js +60 -0
  90. package/dist/lib/chrome-extension/index.js.map +1 -0
  91. package/dist/lib/chrome-extension/page.js +685 -0
  92. package/dist/lib/chrome-extension/page.js.map +1 -0
  93. package/dist/lib/cli.js +22 -0
  94. package/dist/lib/cli.js.map +1 -0
  95. package/dist/lib/common/cache-helper.js +68 -0
  96. package/dist/lib/common/cache-helper.js.map +1 -0
  97. package/dist/lib/index.js +60 -0
  98. package/dist/lib/index.js.map +1 -0
  99. package/dist/lib/mcp-server.js +75 -0
  100. package/dist/lib/mcp-server.js.map +1 -0
  101. package/dist/lib/mcp-tools-puppeteer.js +259 -0
  102. package/dist/lib/mcp-tools-puppeteer.js.map +1 -0
  103. package/dist/lib/mcp-tools.js +112 -0
  104. package/dist/lib/mcp-tools.js.map +1 -0
  105. package/dist/lib/playwright/ai-fixture.js +404 -0
  106. package/dist/lib/playwright/ai-fixture.js.map +1 -0
  107. package/dist/lib/playwright/index.js +93 -0
  108. package/dist/lib/playwright/index.js.map +1 -0
  109. package/dist/lib/playwright/page.js +78 -0
  110. package/dist/lib/playwright/page.js.map +1 -0
  111. package/dist/lib/playwright/reporter/index.js +250 -0
  112. package/dist/lib/playwright/reporter/index.js.map +1 -0
  113. package/dist/lib/puppeteer/agent-launcher.js +253 -0
  114. package/dist/lib/puppeteer/agent-launcher.js.map +1 -0
  115. package/dist/lib/puppeteer/base-page.js +607 -0
  116. package/dist/lib/puppeteer/base-page.js.map +1 -0
  117. package/dist/lib/puppeteer/index.js +84 -0
  118. package/dist/lib/puppeteer/index.js.map +1 -0
  119. package/dist/lib/puppeteer/page.js +43 -0
  120. package/dist/lib/puppeteer/page.js.map +1 -0
  121. package/dist/lib/static/index.js +52 -0
  122. package/dist/lib/static/index.js.map +1 -0
  123. package/dist/lib/static/static-agent.js +46 -0
  124. package/dist/lib/static/static-agent.js.map +1 -0
  125. package/dist/lib/static/static-page.js +156 -0
  126. package/dist/lib/static/static-page.js.map +1 -0
  127. package/dist/lib/utils.js +40 -0
  128. package/dist/lib/utils.js.map +1 -0
  129. package/dist/lib/web-element.js +96 -0
  130. package/dist/lib/web-element.js.map +1 -0
  131. package/dist/lib/web-page.js +310 -0
  132. package/dist/lib/web-page.js.map +1 -0
  133. package/dist/types/bin.d.ts +1 -0
  134. package/dist/types/bridge-mode/agent-cli-side.d.ts +49 -0
  135. package/dist/types/bridge-mode/browser.d.ts +2 -0
  136. package/dist/types/bridge-mode/common.d.ts +74 -0
  137. package/dist/types/bridge-mode/index.d.ts +4 -0
  138. package/dist/types/bridge-mode/io-client.d.ts +10 -0
  139. package/dist/types/bridge-mode/io-server.d.ts +27 -0
  140. package/dist/types/bridge-mode/page-browser-side.d.ts +21 -0
  141. package/dist/types/chrome-extension/agent.d.ts +5 -0
  142. package/dist/types/chrome-extension/cdpInput.d.ts +52 -0
  143. package/dist/types/chrome-extension/dynamic-scripts.d.ts +3 -0
  144. package/dist/types/chrome-extension/index.d.ts +5 -0
  145. package/dist/types/chrome-extension/page.d.ts +110 -0
  146. package/dist/types/cli.d.ts +1 -0
  147. package/dist/types/common/cache-helper.d.ts +20 -0
  148. package/dist/types/index.d.ts +7 -0
  149. package/dist/types/mcp-server.d.ts +26 -0
  150. package/dist/types/mcp-tools-puppeteer.d.ts +13 -0
  151. package/dist/types/mcp-tools.d.ts +12 -0
  152. package/dist/types/playwright/ai-fixture.d.ts +131 -0
  153. package/dist/types/playwright/index.d.ts +13 -0
  154. package/dist/types/playwright/page.d.ts +11 -0
  155. package/dist/types/playwright/reporter/index.d.ts +42 -0
  156. package/dist/types/puppeteer/agent-launcher.d.ts +61 -0
  157. package/dist/types/puppeteer/base-page.d.ts +106 -0
  158. package/dist/types/puppeteer/index.d.ts +10 -0
  159. package/dist/types/puppeteer/page.d.ts +6 -0
  160. package/dist/types/static/index.d.ts +2 -0
  161. package/dist/types/static/static-agent.d.ts +5 -0
  162. package/dist/types/static/static-page.d.ts +42 -0
  163. package/dist/types/utils.d.ts +6 -0
  164. package/dist/types/web-element.d.ts +48 -0
  165. package/dist/types/web-page.d.ts +62 -0
  166. package/package.json +166 -0
@@ -0,0 +1,106 @@
1
+ import type { WebPageAgentOpt } from '../web-element';
2
+ import type { DeviceAction, ElementCacheFeature, ElementTreeNode, Point, Rect, Size } from '@midscene/core';
3
+ import type { AbstractInterface } from '@midscene/core/device';
4
+ import type { ElementInfo } from '@midscene/shared/extractor';
5
+ import { type DebugFunction } from '@midscene/shared/logger';
6
+ import type { Page as PlaywrightPage } from 'playwright';
7
+ import type { Page as PuppeteerPage } from 'puppeteer';
8
+ import { type CacheFeatureOptions } from '../common/cache-helper';
9
+ import { type KeyInput, type MouseButton } from '../web-page';
10
+ export declare const debugPage: DebugFunction;
11
+ export declare class Page<AgentType extends 'puppeteer' | 'playwright', InterfaceType extends PuppeteerPage | PlaywrightPage> implements AbstractInterface {
12
+ underlyingPage: InterfaceType;
13
+ protected waitForNavigationTimeout: number;
14
+ protected waitForNetworkIdleTimeout: number;
15
+ private viewportSize?;
16
+ private onBeforeInvokeAction?;
17
+ private onAfterInvokeAction?;
18
+ private customActions?;
19
+ private enableTouchEventsInActionSpace;
20
+ private puppeteerFileChooserSession?;
21
+ private puppeteerFileChooserHandler?;
22
+ interfaceType: AgentType;
23
+ actionSpace(): DeviceAction[];
24
+ private evaluate;
25
+ constructor(underlyingPage: InterfaceType, interfaceType: AgentType, opts?: WebPageAgentOpt);
26
+ evaluateJavaScript<T = any>(script: string): Promise<T>;
27
+ waitForNavigation(moment: 'screenshot' | 'getElementsInfo' | 'getElementsNodeTree' | 'afterInvokeAction', actionName?: string): Promise<void>;
28
+ waitForNetworkIdle(moment: 'afterInvokeAction', actionName?: string): Promise<void>;
29
+ getElementsInfo(): Promise<ElementInfo[]>;
30
+ private getXpathsByPoint;
31
+ private getElementInfoByXpath;
32
+ cacheFeatureForPoint(center: [number, number], options?: CacheFeatureOptions): Promise<ElementCacheFeature>;
33
+ rectMatchesCacheFeature(feature: ElementCacheFeature): Promise<Rect>;
34
+ getElementsNodeTree(): Promise<ElementTreeNode<ElementInfo>>;
35
+ size(): Promise<Size>;
36
+ screenshotBase64(): Promise<string>;
37
+ url(): Promise<string>;
38
+ describe(): string;
39
+ get mouse(): {
40
+ click: (x: number, y: number, options?: {
41
+ button?: MouseButton;
42
+ count?: number;
43
+ }) => Promise<void>;
44
+ wheel: (deltaX: number, deltaY: number) => Promise<void>;
45
+ move: (x: number, y: number) => Promise<void>;
46
+ drag: (from: {
47
+ x: number;
48
+ y: number;
49
+ }, to: {
50
+ x: number;
51
+ y: number;
52
+ }) => Promise<void>;
53
+ };
54
+ get keyboard(): {
55
+ type: (text: string) => Promise<void>;
56
+ press: (action: {
57
+ key: KeyInput;
58
+ command?: string;
59
+ } | {
60
+ key: KeyInput;
61
+ command?: string;
62
+ }[]) => Promise<void>;
63
+ down: (key: KeyInput) => Promise<void>;
64
+ up: (key: KeyInput) => Promise<void>;
65
+ };
66
+ clearInput(element?: ElementInfo): Promise<void>;
67
+ private everMoved;
68
+ private moveToPointBeforeScroll;
69
+ scrollUntilTop(startingPoint?: Point): Promise<void>;
70
+ scrollUntilBottom(startingPoint?: Point): Promise<void>;
71
+ scrollUntilLeft(startingPoint?: Point): Promise<void>;
72
+ scrollUntilRight(startingPoint?: Point): Promise<void>;
73
+ scrollUp(distance?: number, startingPoint?: Point): Promise<void>;
74
+ scrollDown(distance?: number, startingPoint?: Point): Promise<void>;
75
+ scrollLeft(distance?: number, startingPoint?: Point): Promise<void>;
76
+ scrollRight(distance?: number, startingPoint?: Point): Promise<void>;
77
+ navigate(url: string): Promise<void>;
78
+ reload(): Promise<void>;
79
+ goBack(): Promise<void>;
80
+ beforeInvokeAction(name: string, param: any): Promise<void>;
81
+ afterInvokeAction(name: string, param: any): Promise<void>;
82
+ destroy(): Promise<void>;
83
+ swipe(from: {
84
+ x: number;
85
+ y: number;
86
+ }, to: {
87
+ x: number;
88
+ y: number;
89
+ }, duration?: number): Promise<void>;
90
+ longPress(x: number, y: number, duration?: number): Promise<void>;
91
+ private ensurePuppeteerFileChooserSession;
92
+ registerFileChooserListener(handler: (chooser: import('@midscene/core/device').FileChooserHandler) => Promise<void>): Promise<{
93
+ dispose: () => void;
94
+ getError: () => Error | undefined;
95
+ }>;
96
+ }
97
+ export declare function forceClosePopup(page: PuppeteerPage | PlaywrightPage, debugProfile: DebugFunction): void;
98
+ /**
99
+ * Force Chrome to render select elements using base-select appearance instead of OS-native rendering.
100
+ * This makes select elements visible in screenshots captured by Playwright/Puppeteer.
101
+ *
102
+ * Reference: https://developer.chrome.com/blog/a-customizable-select
103
+ *
104
+ * Adds a style tag with CSS rules to make all select elements use base-select appearance.
105
+ */
106
+ export declare function forceChromeSelectRendering(page: PuppeteerPage | PlaywrightPage): void;
@@ -0,0 +1,10 @@
1
+ import type { WebPageAgentOpt } from '../web-element';
2
+ import { Agent as PageAgent } from '@midscene/core/agent';
3
+ import type { Page as PuppeteerPage } from 'puppeteer';
4
+ import { PuppeteerWebPage } from './page';
5
+ export { PuppeteerWebPage } from './page';
6
+ export type { WebPageAgentOpt } from '../web-element';
7
+ export declare class PuppeteerAgent extends PageAgent<PuppeteerWebPage> {
8
+ constructor(page: PuppeteerPage, opts?: WebPageAgentOpt);
9
+ }
10
+ export { overrideAIConfig } from '@midscene/shared/env';
@@ -0,0 +1,6 @@
1
+ import type { WebPageOpt } from '../web-element';
2
+ import type { Page as PuppeteerPageType } from 'puppeteer';
3
+ import { Page as BasePage } from './base-page';
4
+ export declare class PuppeteerWebPage extends BasePage<'puppeteer', PuppeteerPageType> {
5
+ constructor(page: PuppeteerPageType, opts?: WebPageOpt);
6
+ }
@@ -0,0 +1,2 @@
1
+ export { StaticPageAgent } from './static-agent';
2
+ export { default as StaticPage } from './static-page';
@@ -0,0 +1,5 @@
1
+ import { Agent as PageAgent } from '@midscene/core/agent';
2
+ import type StaticPage from './static-page';
3
+ export declare class StaticPageAgent extends PageAgent {
4
+ constructor(page: StaticPage);
5
+ }
@@ -0,0 +1,42 @@
1
+ import type { DeviceAction, Point, UIContext } from '@midscene/core';
2
+ import type { AbstractInterface } from '@midscene/core/device';
3
+ type StaticPageUIContext = Omit<UIContext, 'deprecatedDpr'>;
4
+ export default class StaticPage implements AbstractInterface {
5
+ interfaceType: string;
6
+ private uiContext;
7
+ constructor(uiContext: StaticPageUIContext);
8
+ actionSpace(): DeviceAction[];
9
+ evaluateJavaScript<T = unknown>(script: string): Promise<T>;
10
+ getElementsInfo(): Promise<never>;
11
+ getElementsNodeTree(): Promise<never>;
12
+ getXpathsByPoint(point: Point): Promise<never>;
13
+ getElementInfoByXpath(xpath: string): Promise<never>;
14
+ size(): Promise<{
15
+ width: number;
16
+ height: number;
17
+ }>;
18
+ screenshotBase64(): Promise<string>;
19
+ url(): Promise<string>;
20
+ scrollUntilTop(startingPoint?: Point): Promise<never>;
21
+ scrollUntilBottom(startingPoint?: Point): Promise<never>;
22
+ scrollUntilLeft(startingPoint?: Point): Promise<never>;
23
+ scrollUntilRight(startingPoint?: Point): Promise<never>;
24
+ scrollUp(distance?: number, startingPoint?: Point): Promise<never>;
25
+ scrollDown(distance?: number, startingPoint?: Point): Promise<never>;
26
+ scrollLeft(distance?: number, startingPoint?: Point): Promise<never>;
27
+ scrollRight(distance?: number, startingPoint?: Point): Promise<never>;
28
+ clearInput(): Promise<never>;
29
+ mouse: {
30
+ click: () => never;
31
+ wheel: () => never;
32
+ move: () => never;
33
+ drag: () => never;
34
+ };
35
+ keyboard: {
36
+ type: () => never;
37
+ press: () => never;
38
+ };
39
+ destroy(): Promise<void>;
40
+ updateContext(newContext: StaticPageUIContext): void;
41
+ }
42
+ export {};
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Get a require function that won't be processed by webpack.
3
+ * Returns __non_webpack_require__ if available (in webpack environment),
4
+ * otherwise falls back to the standard require.
5
+ */
6
+ export declare function getWebpackRequire(): typeof require;
@@ -0,0 +1,48 @@
1
+ import type { AgentOpt, DeviceAction, Rect, WebElementInfo } from '@midscene/core';
2
+ import type { NodeType } from '@midscene/shared/constants';
3
+ export type { WebElementInfo };
4
+ export type WebPageAgentOpt = AgentOpt & WebPageOpt;
5
+ export type WebPageOpt = {
6
+ waitForNavigationTimeout?: number;
7
+ waitForNetworkIdleTimeout?: number;
8
+ forceSameTabNavigation?: boolean;
9
+ enableTouchEventsInActionSpace?: boolean;
10
+ /**
11
+ * Force Chrome to render select elements using base-select appearance instead of OS-native rendering.
12
+ * This makes select elements visible in screenshots captured by Playwright/Puppeteer.
13
+ *
14
+ * Reference: https://developer.chrome.com/blog/a-customizable-select
15
+ *
16
+ * When enabled, adds a style tag with `select { appearance: base-select !important; }` to the page.
17
+ */
18
+ forceChromeSelectRendering?: boolean;
19
+ beforeInvokeAction?: () => Promise<void>;
20
+ afterInvokeAction?: () => Promise<void>;
21
+ customActions?: DeviceAction<any>[];
22
+ };
23
+ export declare class WebElementInfoImpl implements WebElementInfo {
24
+ content: string;
25
+ rect: Rect;
26
+ center: [number, number];
27
+ id: string;
28
+ indexId: number;
29
+ attributes: {
30
+ nodeType: NodeType;
31
+ [key: string]: string;
32
+ };
33
+ xpaths?: string[];
34
+ isVisible: boolean;
35
+ constructor({ content, rect, id, attributes, indexId, xpaths, isVisible, }: {
36
+ content: string;
37
+ rect: Rect;
38
+ id: string;
39
+ attributes: {
40
+ nodeType: NodeType;
41
+ [key: string]: string;
42
+ };
43
+ indexId: number;
44
+ xpaths?: string[];
45
+ isVisible: boolean;
46
+ });
47
+ }
48
+ export declare const limitOpenNewTabScript = "\nif (!window.__MIDSCENE_NEW_TAB_INTERCEPTOR_INITIALIZED__) {\n window.__MIDSCENE_NEW_TAB_INTERCEPTOR_INITIALIZED__ = true;\n\n // Intercept the window.open method (only once)\n window.open = function(url) {\n console.log('Blocked window.open:', url);\n window.location.href = url;\n return null;\n };\n\n // Block all a tag clicks with target=\"_blank\" (only once)\n document.addEventListener('click', function(e) {\n const target = e.target.closest('a');\n if (target && target.target === '_blank') {\n e.preventDefault();\n console.log('Blocked new tab:', target.href);\n window.location.href = target.href;\n target.removeAttribute('target');\n }\n }, true);\n}\n";
@@ -0,0 +1,62 @@
1
+ import type { Point } from '@midscene/core';
2
+ import { AbstractInterface, type DeviceAction } from '@midscene/core/device';
3
+ import type { ElementInfo } from '@midscene/shared/extractor';
4
+ export declare function getKeyCommands(value: string | string[]): Array<{
5
+ key: string;
6
+ command?: string;
7
+ }>;
8
+ export declare type KeyInput = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | 'Power' | 'Eject' | 'Abort' | 'Help' | 'Backspace' | 'Tab' | 'Numpad5' | 'NumpadEnter' | 'Enter' | '\r' | '\n' | 'ShiftLeft' | 'ShiftRight' | 'ControlLeft' | 'ControlRight' | 'AltLeft' | 'AltRight' | 'Pause' | 'CapsLock' | 'Escape' | 'Convert' | 'NonConvert' | 'Space' | 'Numpad9' | 'PageUp' | 'Numpad3' | 'PageDown' | 'End' | 'Numpad1' | 'Home' | 'Numpad7' | 'ArrowLeft' | 'Numpad4' | 'Numpad8' | 'ArrowUp' | 'ArrowRight' | 'Numpad6' | 'Numpad2' | 'ArrowDown' | 'Select' | 'Open' | 'PrintScreen' | 'Insert' | 'Numpad0' | 'Delete' | 'NumpadDecimal' | 'Digit0' | 'Digit1' | 'Digit2' | 'Digit3' | 'Digit4' | 'Digit5' | 'Digit6' | 'Digit7' | 'Digit8' | 'Digit9' | 'KeyA' | 'KeyB' | 'KeyC' | 'KeyD' | 'KeyE' | 'KeyF' | 'KeyG' | 'KeyH' | 'KeyI' | 'KeyJ' | 'KeyK' | 'KeyL' | 'KeyM' | 'KeyN' | 'KeyO' | 'KeyP' | 'KeyQ' | 'KeyR' | 'KeyS' | 'KeyT' | 'KeyU' | 'KeyV' | 'KeyW' | 'KeyX' | 'KeyY' | 'KeyZ' | 'MetaLeft' | 'MetaRight' | 'ContextMenu' | 'NumpadMultiply' | 'NumpadAdd' | 'NumpadSubtract' | 'NumpadDivide' | 'F1' | 'F2' | 'F3' | 'F4' | 'F5' | 'F6' | 'F7' | 'F8' | 'F9' | 'F10' | 'F11' | 'F12' | 'F13' | 'F14' | 'F15' | 'F16' | 'F17' | 'F18' | 'F19' | 'F20' | 'F21' | 'F22' | 'F23' | 'F24' | 'NumLock' | 'ScrollLock' | 'AudioVolumeMute' | 'AudioVolumeDown' | 'AudioVolumeUp' | 'MediaTrackNext' | 'MediaTrackPrevious' | 'MediaStop' | 'MediaPlayPause' | 'Semicolon' | 'Equal' | 'NumpadEqual' | 'Comma' | 'Minus' | 'Period' | 'Slash' | 'Backquote' | 'BracketLeft' | 'Backslash' | 'BracketRight' | 'Quote' | 'AltGraph' | 'Props' | 'Cancel' | 'Clear' | 'Shift' | 'Control' | 'Alt' | 'Accept' | 'ModeChange' | ' ' | 'Print' | 'Execute' | '\u0000' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' | 'Meta' | '*' | '+' | '-' | '/' | ';' | '=' | ',' | '.' | '`' | '[' | '\\' | ']' | "'" | 'Attn' | 'CrSel' | 'ExSel' | 'EraseEof' | 'Play' | 'ZoomOut' | ')' | '!' | '@' | '#' | '$' | '%' | '^' | '&' | '(' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' | ':' | '<' | '_' | '>' | '?' | '~' | '{' | '|' | '}' | '"' | 'SoftLeft' | 'SoftRight' | 'Camera' | 'Call' | 'EndCall' | 'VolumeDown' | 'VolumeUp';
9
+ export type MouseButton = 'left' | 'right' | 'middle';
10
+ export interface MouseAction {
11
+ click: (x: number, y: number, options: {
12
+ button: MouseButton;
13
+ count?: number;
14
+ }) => Promise<void>;
15
+ wheel: (deltaX: number, deltaY: number) => Promise<void>;
16
+ move: (x: number, y: number) => Promise<void>;
17
+ drag: (from: {
18
+ x: number;
19
+ y: number;
20
+ }, to: {
21
+ x: number;
22
+ y: number;
23
+ }) => Promise<void>;
24
+ }
25
+ export interface KeyboardAction {
26
+ type: (text: string) => Promise<void>;
27
+ press: (action: {
28
+ key: KeyInput;
29
+ command?: string;
30
+ } | {
31
+ key: KeyInput;
32
+ command?: string;
33
+ }[]) => Promise<void>;
34
+ }
35
+ export interface ChromePageDestroyOptions {
36
+ closeTab?: boolean;
37
+ }
38
+ export declare abstract class AbstractWebPage extends AbstractInterface {
39
+ navigate?(url: string): Promise<void>;
40
+ reload?(): Promise<void>;
41
+ goBack?(): Promise<void>;
42
+ get mouse(): MouseAction;
43
+ get keyboard(): KeyboardAction;
44
+ clearInput(element?: ElementInfo): Promise<void>;
45
+ abstract scrollUntilTop(startingPoint?: Point): Promise<void>;
46
+ abstract scrollUntilBottom(startingPoint?: Point): Promise<void>;
47
+ abstract scrollUntilLeft(startingPoint?: Point): Promise<void>;
48
+ abstract scrollUntilRight(startingPoint?: Point): Promise<void>;
49
+ abstract scrollUp(distance?: number, startingPoint?: Point): Promise<void>;
50
+ abstract scrollDown(distance?: number, startingPoint?: Point): Promise<void>;
51
+ abstract scrollLeft(distance?: number, startingPoint?: Point): Promise<void>;
52
+ abstract scrollRight(distance?: number, startingPoint?: Point): Promise<void>;
53
+ abstract longPress(x: number, y: number, duration?: number): Promise<void>;
54
+ abstract swipe(from: {
55
+ x: number;
56
+ y: number;
57
+ }, to: {
58
+ x: number;
59
+ y: number;
60
+ }, duration?: number): Promise<void>;
61
+ }
62
+ export declare const commonWebActionsForWebPage: <T extends AbstractWebPage>(page: T, includeTouchEvents?: boolean) => DeviceAction<any>[];
package/package.json ADDED
@@ -0,0 +1,166 @@
1
+ {
2
+ "name": "@donggui/web",
3
+ "description": "DongGUI - AI-powered browser automation SDK. Internal version based on @midscene/web with custom enhancements.",
4
+ "keywords": [
5
+ "AI UI automation",
6
+ "AI testing",
7
+ "Computer use",
8
+ "Browser use",
9
+ "Android use",
10
+ "DongGUI"
11
+ ],
12
+ "version": "1.5.5-donggui.3",
13
+ "repository": {
14
+ "type": "git",
15
+ "url": "https://github.com/web-infra-dev/midscene.git"
16
+ },
17
+ "homepage": "https://midscenejs.com/",
18
+ "main": "./dist/lib/index.js",
19
+ "types": "./dist/types/index.d.ts",
20
+ "module": "./dist/es/index.mjs",
21
+ "exports": {
22
+ ".": {
23
+ "types": "./dist/types/index.d.ts",
24
+ "require": "./dist/lib/index.js",
25
+ "import": "./dist/es/index.mjs"
26
+ },
27
+ "./bridge-mode": {
28
+ "types": "./dist/types/bridge-mode/index.d.ts",
29
+ "require": "./dist/lib/bridge-mode/index.js",
30
+ "import": "./dist/es/bridge-mode/index.mjs"
31
+ },
32
+ "./bridge-mode-browser": {
33
+ "types": "./dist/types/bridge-mode/browser.d.ts",
34
+ "require": "./dist/lib/bridge-mode/browser.js",
35
+ "import": "./dist/es/bridge-mode/browser.mjs"
36
+ },
37
+ "./utils": {
38
+ "types": "./dist/types/common/utils.d.ts",
39
+ "require": "./dist/lib/common/utils.js",
40
+ "import": "./dist/es/common/utils.mjs"
41
+ },
42
+ "./ui-utils": {
43
+ "types": "./dist/types/common/ui-utils.d.ts",
44
+ "require": "./dist/lib/common/ui-utils.js",
45
+ "import": "./dist/es/common/ui-utils.mjs"
46
+ },
47
+ "./puppeteer": {
48
+ "types": "./dist/types/puppeteer/index.d.ts",
49
+ "require": "./dist/lib/puppeteer/index.js",
50
+ "import": "./dist/es/puppeteer/index.mjs"
51
+ },
52
+ "./puppeteer-agent-launcher": {
53
+ "types": "./dist/types/puppeteer/agent-launcher.d.ts",
54
+ "require": "./dist/lib/puppeteer/agent-launcher.js",
55
+ "import": "./dist/es/puppeteer/agent-launcher.mjs"
56
+ },
57
+ "./playwright": {
58
+ "types": "./dist/types/playwright/index.d.ts",
59
+ "require": "./dist/lib/playwright/index.js",
60
+ "import": "./dist/es/playwright/index.mjs"
61
+ },
62
+ "./playwright-report": {
63
+ "types": "./dist/types/playwright/reporter/index.d.ts",
64
+ "require": "./dist/lib/playwright/reporter/index.js",
65
+ "import": "./dist/es/playwright/reporter/index.mjs"
66
+ },
67
+ "./playwright-reporter": {
68
+ "types": "./dist/types/playwright/reporter/index.d.ts",
69
+ "require": "./dist/lib/playwright/reporter/index.js",
70
+ "import": "./dist/es/playwright/reporter/index.mjs"
71
+ },
72
+ "./chrome-extension": {
73
+ "types": "./dist/types/chrome-extension/index.d.ts",
74
+ "require": "./dist/lib/chrome-extension/index.js",
75
+ "import": "./dist/es/chrome-extension/index.mjs"
76
+ },
77
+ "./yaml": {
78
+ "types": "./dist/types/yaml/index.d.ts",
79
+ "require": "./dist/lib/yaml/index.js",
80
+ "import": "./dist/es/yaml/index.mjs"
81
+ },
82
+ "./agent": {
83
+ "types": "./dist/types/common/agent.d.ts",
84
+ "require": "./dist/lib/common/agent.js",
85
+ "import": "./dist/es/common/agent.mjs"
86
+ },
87
+ "./static": {
88
+ "types": "./dist/types/static/index.d.ts",
89
+ "require": "./dist/lib/static/index.js",
90
+ "import": "./dist/es/static/index.mjs"
91
+ },
92
+ "./mcp-server": {
93
+ "types": "./dist/types/mcp-server.d.ts",
94
+ "import": "./dist/es/mcp-server.mjs",
95
+ "require": "./dist/lib/mcp-server.js"
96
+ }
97
+ },
98
+ "scripts": {
99
+ "dev": "npm run build:watch",
100
+ "dev:server": "npm run build && ./bin/midscene-playground",
101
+ "build": "rslib build",
102
+ "build:watch": "rslib build --watch --no-clean",
103
+ "playground": "DEBUG=midscene:* tsx demo/playground.ts",
104
+ "test": "vitest --run",
105
+ "test:u": "vitest --run -u",
106
+ "test:ai": "AI_TEST_TYPE=web npm run test",
107
+ "test:ai:cache": "MIDSCENE_CACHE=true npm run test:ai",
108
+ "e2e": "playwright test --config=tests/playwright.config.ts",
109
+ "e2e:report": "MIDSCENE_REPORT=true playwright test --config=tests/playwright.config.ts",
110
+ "e2e:cache": "MIDSCENE_CACHE=true playwright test --config=tests/playwright.config.ts",
111
+ "e2e:ui": "playwright test --config=tests/playwright.config.ts --ui",
112
+ "e2e:ui:cache": "MIDSCENE_CACHE=true playwright test --config=tests/playwright.config.ts --ui"
113
+ },
114
+ "bin": {
115
+ "midscene-web": "./bin/midscene-web"
116
+ },
117
+ "files": ["static", "dist", "iife-script", "README.md", "bin"],
118
+ "dependencies": {
119
+ "@midscene/core": "workspace:*",
120
+ "cors": "^2.8.5",
121
+ "dayjs": "^1.11.11",
122
+ "dotenv": "^16.4.5",
123
+ "http-server": "14.1.1",
124
+ "puppeteer-core": "24.6.0",
125
+ "socket.io": "^4.8.1",
126
+ "socket.io-client": "4.8.1"
127
+ },
128
+ "devDependencies": {
129
+ "@playwright/test": "^1.45.0",
130
+ "@rslib/core": "^0.18.3",
131
+ "@types/chrome": "0.0.279",
132
+ "@types/cors": "^2.8.17",
133
+ "@types/http-server": "^0.12.4",
134
+ "@types/js-yaml": "4.0.9",
135
+ "@types/node": "^18.0.0",
136
+ "@types/semver": "7.7.0",
137
+ "devtools-protocol": "0.0.1380148",
138
+ "js-yaml": "4.1.0",
139
+ "playwright": "^1.45.0",
140
+ "puppeteer": "24.6.0",
141
+ "tsx": "^4.19.2",
142
+ "typescript": "^5.8.3",
143
+ "vitest": "3.0.5"
144
+ },
145
+ "peerDependencies": {
146
+ "@playwright/test": "^1.45.0",
147
+ "playwright": "^1.45.0",
148
+ "puppeteer": ">=20.0.0"
149
+ },
150
+ "peerDependenciesMeta": {
151
+ "@playwright/test": {
152
+ "optional": true
153
+ },
154
+ "puppeteer": {
155
+ "optional": true
156
+ }
157
+ },
158
+ "engines": {
159
+ "node": ">=18.19.0"
160
+ },
161
+ "publishConfig": {
162
+ "access": "public",
163
+ "registry": "https://registry.npmjs.org"
164
+ },
165
+ "license": "MIT"
166
+ }