@midscene/web 0.12.4 → 0.12.5-beta-20250306111616.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (261) hide show
  1. package/dist/es/appium/index.js +8 -0
  2. package/dist/es/appium/index.js.map +1 -0
  3. package/dist/es/appium/page.js +341 -0
  4. package/dist/es/appium/page.js.map +1 -0
  5. package/dist/es/bridge-mode/agent-cli-side.js +153 -0
  6. package/dist/es/bridge-mode/agent-cli-side.js.map +1 -0
  7. package/dist/es/bridge-mode/browser.js +6 -0
  8. package/dist/es/bridge-mode/browser.js.map +1 -0
  9. package/dist/es/bridge-mode/common.js +43 -0
  10. package/dist/es/bridge-mode/common.js.map +1 -0
  11. package/dist/es/bridge-mode/index.js +8 -0
  12. package/dist/es/bridge-mode/index.js.map +1 -0
  13. package/dist/es/bridge-mode/io-client.js +107 -0
  14. package/dist/es/bridge-mode/io-client.js.map +1 -0
  15. package/dist/es/bridge-mode/io-server.js +212 -0
  16. package/dist/es/bridge-mode/io-server.js.map +1 -0
  17. package/dist/es/bridge-mode/page-browser-side.js +168 -0
  18. package/dist/es/bridge-mode/page-browser-side.js.map +1 -0
  19. package/dist/es/chrome-extension/agent.js +11 -0
  20. package/dist/es/chrome-extension/agent.js.map +1 -0
  21. package/dist/es/chrome-extension/cdpInput.js +214 -0
  22. package/dist/es/chrome-extension/cdpInput.js.map +1 -0
  23. package/dist/es/chrome-extension/dynamic-scripts.js +67 -0
  24. package/dist/es/chrome-extension/dynamic-scripts.js.map +1 -0
  25. package/dist/es/chrome-extension/index.js +10 -0
  26. package/dist/es/chrome-extension/index.js.map +1 -0
  27. package/dist/es/chrome-extension/page.js +489 -0
  28. package/dist/es/chrome-extension/page.js.map +1 -0
  29. package/dist/es/common/agent.js +263 -0
  30. package/dist/es/common/agent.js.map +1 -0
  31. package/dist/es/common/task-cache.js +168 -0
  32. package/dist/es/common/task-cache.js.map +1 -0
  33. package/dist/es/common/tasks.js +927 -0
  34. package/dist/es/common/tasks.js.map +1 -0
  35. package/dist/es/{ui-utils.js → common/ui-utils.js} +3 -32
  36. package/dist/es/common/ui-utils.js.map +1 -0
  37. package/dist/es/common/utils.js +156 -0
  38. package/dist/es/common/utils.js.map +1 -0
  39. package/dist/es/index.js +9 -5399
  40. package/dist/es/index.js.map +1 -1
  41. package/dist/es/page.js +51 -0
  42. package/dist/es/page.js.map +1 -0
  43. package/dist/es/playground/agent.js +12 -0
  44. package/dist/es/playground/agent.js.map +1 -0
  45. package/dist/es/playground/bin.js +9 -0
  46. package/dist/es/playground/bin.js.map +1 -0
  47. package/dist/es/playground/index.js +10 -0
  48. package/dist/es/playground/index.js.map +1 -0
  49. package/dist/es/playground/server.js +171 -0
  50. package/dist/es/playground/server.js.map +1 -0
  51. package/dist/es/playground/static-page.js +145 -0
  52. package/dist/es/playground/static-page.js.map +1 -0
  53. package/dist/es/playwright/ai-fixture.js +184 -0
  54. package/dist/es/playwright/ai-fixture.js.map +1 -0
  55. package/dist/es/playwright/index.js +54 -0
  56. package/dist/es/playwright/index.js.map +1 -0
  57. package/dist/es/playwright/page.js +11 -0
  58. package/dist/es/playwright/page.js.map +1 -0
  59. package/dist/es/playwright/reporter/index.js +74 -0
  60. package/dist/es/playwright/reporter/index.js.map +1 -0
  61. package/dist/es/playwright/reporter/select-cache-file.js +98 -0
  62. package/dist/es/playwright/reporter/select-cache-file.js.map +1 -0
  63. package/dist/es/puppeteer/agent-launcher.js +162 -0
  64. package/dist/es/puppeteer/agent-launcher.js.map +1 -0
  65. package/dist/es/puppeteer/base-page.js +267 -0
  66. package/dist/es/puppeteer/base-page.js.map +1 -0
  67. package/dist/es/puppeteer/index.js +54 -0
  68. package/dist/es/puppeteer/index.js.map +1 -0
  69. package/dist/es/puppeteer/page.js +40 -0
  70. package/dist/es/puppeteer/page.js.map +1 -0
  71. package/dist/es/web-element.js +27 -0
  72. package/dist/es/web-element.js.map +1 -0
  73. package/dist/es/yaml/builder.js +15 -0
  74. package/dist/es/yaml/builder.js.map +1 -0
  75. package/dist/es/yaml/index.js +5 -0
  76. package/dist/es/yaml/index.js.map +1 -0
  77. package/dist/es/yaml/player.js +227 -0
  78. package/dist/es/yaml/player.js.map +1 -0
  79. package/dist/es/yaml/utils.js +73 -0
  80. package/dist/es/yaml/utils.js.map +1 -0
  81. package/dist/lib/appium/index.js +8 -0
  82. package/dist/lib/appium/index.js.map +1 -0
  83. package/dist/lib/appium/page.js +341 -0
  84. package/dist/lib/appium/page.js.map +1 -0
  85. package/dist/lib/bridge-mode/agent-cli-side.js +153 -0
  86. package/dist/lib/bridge-mode/agent-cli-side.js.map +1 -0
  87. package/dist/lib/bridge-mode/browser.js +6 -0
  88. package/dist/lib/bridge-mode/browser.js.map +1 -0
  89. package/dist/lib/bridge-mode/common.js +43 -0
  90. package/dist/lib/bridge-mode/common.js.map +1 -0
  91. package/dist/lib/bridge-mode/index.js +8 -0
  92. package/dist/lib/bridge-mode/index.js.map +1 -0
  93. package/dist/lib/bridge-mode/io-client.js +107 -0
  94. package/dist/lib/bridge-mode/io-client.js.map +1 -0
  95. package/dist/lib/bridge-mode/io-server.js +212 -0
  96. package/dist/lib/bridge-mode/io-server.js.map +1 -0
  97. package/dist/lib/bridge-mode/page-browser-side.js +168 -0
  98. package/dist/lib/bridge-mode/page-browser-side.js.map +1 -0
  99. package/dist/lib/chrome-extension/agent.js +11 -0
  100. package/dist/lib/chrome-extension/agent.js.map +1 -0
  101. package/dist/lib/chrome-extension/cdpInput.js +214 -0
  102. package/dist/lib/chrome-extension/cdpInput.js.map +1 -0
  103. package/dist/lib/chrome-extension/dynamic-scripts.js +67 -0
  104. package/dist/lib/chrome-extension/dynamic-scripts.js.map +1 -0
  105. package/dist/lib/chrome-extension/index.js +10 -0
  106. package/dist/lib/chrome-extension/index.js.map +1 -0
  107. package/dist/lib/chrome-extension/page.js +489 -0
  108. package/dist/lib/chrome-extension/page.js.map +1 -0
  109. package/dist/lib/common/agent.js +263 -0
  110. package/dist/lib/common/agent.js.map +1 -0
  111. package/dist/lib/common/task-cache.js +168 -0
  112. package/dist/lib/common/task-cache.js.map +1 -0
  113. package/dist/lib/common/tasks.js +927 -0
  114. package/dist/lib/common/tasks.js.map +1 -0
  115. package/dist/lib/{ui-utils.js → common/ui-utils.js} +3 -32
  116. package/dist/lib/common/ui-utils.js.map +1 -0
  117. package/dist/lib/common/utils.js +156 -0
  118. package/dist/lib/common/utils.js.map +1 -0
  119. package/dist/lib/index.js +9 -5399
  120. package/dist/lib/index.js.map +1 -1
  121. package/dist/lib/page.js +51 -0
  122. package/dist/lib/page.js.map +1 -0
  123. package/dist/lib/playground/agent.js +12 -0
  124. package/dist/lib/playground/agent.js.map +1 -0
  125. package/dist/lib/playground/bin.js +9 -0
  126. package/dist/lib/playground/bin.js.map +1 -0
  127. package/dist/lib/playground/index.js +10 -0
  128. package/dist/lib/playground/index.js.map +1 -0
  129. package/dist/lib/playground/server.js +171 -0
  130. package/dist/lib/playground/server.js.map +1 -0
  131. package/dist/lib/playground/static-page.js +145 -0
  132. package/dist/lib/playground/static-page.js.map +1 -0
  133. package/dist/lib/playwright/ai-fixture.js +184 -0
  134. package/dist/lib/playwright/ai-fixture.js.map +1 -0
  135. package/dist/lib/playwright/index.js +54 -0
  136. package/dist/lib/playwright/index.js.map +1 -0
  137. package/dist/lib/playwright/page.js +11 -0
  138. package/dist/lib/playwright/page.js.map +1 -0
  139. package/dist/lib/playwright/reporter/index.js +74 -0
  140. package/dist/lib/playwright/reporter/index.js.map +1 -0
  141. package/dist/lib/playwright/reporter/select-cache-file.js +98 -0
  142. package/dist/lib/playwright/reporter/select-cache-file.js.map +1 -0
  143. package/dist/lib/puppeteer/agent-launcher.js +162 -0
  144. package/dist/lib/puppeteer/agent-launcher.js.map +1 -0
  145. package/dist/lib/puppeteer/base-page.js +267 -0
  146. package/dist/lib/puppeteer/base-page.js.map +1 -0
  147. package/dist/lib/puppeteer/index.js +54 -0
  148. package/dist/lib/puppeteer/index.js.map +1 -0
  149. package/dist/lib/puppeteer/page.js +40 -0
  150. package/dist/lib/puppeteer/page.js.map +1 -0
  151. package/dist/lib/web-element.js +27 -0
  152. package/dist/lib/web-element.js.map +1 -0
  153. package/dist/lib/yaml/builder.js +15 -0
  154. package/dist/lib/yaml/builder.js.map +1 -0
  155. package/dist/lib/yaml/index.js +5 -0
  156. package/dist/lib/yaml/index.js.map +1 -0
  157. package/dist/lib/yaml/player.js +227 -0
  158. package/dist/lib/yaml/player.js.map +1 -0
  159. package/dist/lib/yaml/utils.js +73 -0
  160. package/dist/lib/yaml/utils.js.map +1 -0
  161. package/dist/types/appium/index.d.ts +2 -0
  162. package/dist/types/appium/page.d.ts +58 -0
  163. package/dist/types/bridge-mode/agent-cli-side.d.ts +17 -0
  164. package/dist/types/bridge-mode/browser.d.ts +2 -0
  165. package/dist/types/bridge-mode/common.d.ts +57 -0
  166. package/dist/types/bridge-mode/index.d.ts +3 -0
  167. package/dist/types/bridge-mode/io-client.d.ts +10 -0
  168. package/dist/types/bridge-mode/io-server.d.ts +21 -0
  169. package/dist/types/bridge-mode/page-browser-side.d.ts +18 -0
  170. package/dist/types/chrome-extension/agent.d.ts +5 -0
  171. package/dist/types/chrome-extension/cdpInput.d.ts +48 -0
  172. package/dist/types/chrome-extension/dynamic-scripts.d.ts +3 -0
  173. package/dist/types/chrome-extension/index.d.ts +4 -0
  174. package/dist/types/chrome-extension/page.d.ts +64 -0
  175. package/dist/types/common/agent.d.ts +47 -0
  176. package/dist/types/common/task-cache.d.ts +91 -0
  177. package/dist/types/common/tasks.d.ts +44 -0
  178. package/dist/types/common/ui-utils.d.ts +8 -0
  179. package/dist/types/common/utils.d.ts +16 -0
  180. package/dist/types/index.d.ts +9 -17
  181. package/dist/types/page.d.ts +57 -0
  182. package/dist/types/playground/agent.d.ts +5 -0
  183. package/dist/types/playground/bin.d.ts +1 -0
  184. package/dist/types/playground/index.d.ts +4 -0
  185. package/dist/types/playground/server.d.ts +14 -0
  186. package/dist/types/playground/static-page.d.ts +34 -0
  187. package/dist/types/playwright/ai-fixture.d.ts +35 -0
  188. package/dist/types/playwright/index.d.ts +9 -0
  189. package/dist/types/playwright/page.d.ts +5 -0
  190. package/dist/types/{playwright-report.d.ts → playwright/reporter/index.d.ts} +2 -4
  191. package/dist/types/playwright/reporter/select-cache-file.d.ts +1 -0
  192. package/dist/types/puppeteer/agent-launcher.d.ts +28 -0
  193. package/dist/types/puppeteer/base-page.d.ts +58 -0
  194. package/dist/types/puppeteer/index.d.ts +8 -0
  195. package/dist/types/puppeteer/page.d.ts +10 -0
  196. package/dist/types/web-element.d.ts +33 -0
  197. package/dist/types/yaml/builder.d.ts +2 -0
  198. package/dist/types/yaml/index.d.ts +3 -0
  199. package/dist/types/{utils-c05abdf8.d.ts → yaml/player.d.ts} +3 -9
  200. package/dist/types/yaml/utils.d.ts +4 -0
  201. package/package.json +64 -60
  202. package/dist/es/appium.js +0 -4909
  203. package/dist/es/appium.js.map +0 -1
  204. package/dist/es/bridge-mode-browser.js +0 -907
  205. package/dist/es/bridge-mode-browser.js.map +0 -1
  206. package/dist/es/bridge-mode.js +0 -4932
  207. package/dist/es/bridge-mode.js.map +0 -1
  208. package/dist/es/chrome-extension.js +0 -5302
  209. package/dist/es/chrome-extension.js.map +0 -1
  210. package/dist/es/midscene-playground.js +0 -5209
  211. package/dist/es/midscene-playground.js.map +0 -1
  212. package/dist/es/playground.js +0 -4735
  213. package/dist/es/playground.js.map +0 -1
  214. package/dist/es/playwright-report.js +0 -404
  215. package/dist/es/playwright-report.js.map +0 -1
  216. package/dist/es/playwright.js +0 -5036
  217. package/dist/es/playwright.js.map +0 -1
  218. package/dist/es/puppeteer.js +0 -5016
  219. package/dist/es/puppeteer.js.map +0 -1
  220. package/dist/es/ui-utils.js.map +0 -1
  221. package/dist/es/utils.js +0 -510
  222. package/dist/es/utils.js.map +0 -1
  223. package/dist/es/yaml.js +0 -3007
  224. package/dist/es/yaml.js.map +0 -1
  225. package/dist/lib/appium.js +0 -4909
  226. package/dist/lib/appium.js.map +0 -1
  227. package/dist/lib/bridge-mode-browser.js +0 -907
  228. package/dist/lib/bridge-mode-browser.js.map +0 -1
  229. package/dist/lib/bridge-mode.js +0 -4932
  230. package/dist/lib/bridge-mode.js.map +0 -1
  231. package/dist/lib/chrome-extension.js +0 -5302
  232. package/dist/lib/chrome-extension.js.map +0 -1
  233. package/dist/lib/midscene-playground.js +0 -5209
  234. package/dist/lib/midscene-playground.js.map +0 -1
  235. package/dist/lib/playground.js +0 -4735
  236. package/dist/lib/playground.js.map +0 -1
  237. package/dist/lib/playwright-report.js +0 -404
  238. package/dist/lib/playwright-report.js.map +0 -1
  239. package/dist/lib/playwright.js +0 -5036
  240. package/dist/lib/playwright.js.map +0 -1
  241. package/dist/lib/puppeteer.js +0 -5016
  242. package/dist/lib/puppeteer.js.map +0 -1
  243. package/dist/lib/ui-utils.js.map +0 -1
  244. package/dist/lib/utils.js +0 -510
  245. package/dist/lib/utils.js.map +0 -1
  246. package/dist/lib/yaml.js +0 -3007
  247. package/dist/lib/yaml.js.map +0 -1
  248. package/dist/types/agent-93ac4610.d.ts +0 -175
  249. package/dist/types/appium.d.ts +0 -11
  250. package/dist/types/bridge-mode-browser.d.ts +0 -9
  251. package/dist/types/bridge-mode.d.ts +0 -28
  252. package/dist/types/browser-3c8d24ff.d.ts +0 -37
  253. package/dist/types/chrome-extension.d.ts +0 -18
  254. package/dist/types/midscene-playground.d.ts +0 -2
  255. package/dist/types/page-09c548ff.d.ts +0 -321
  256. package/dist/types/playground.d.ts +0 -18
  257. package/dist/types/playwright.d.ts +0 -49
  258. package/dist/types/puppeteer.d.ts +0 -32
  259. package/dist/types/ui-utils.d.ts +0 -11
  260. package/dist/types/utils.d.ts +0 -8
  261. package/dist/types/yaml.d.ts +0 -16
@@ -0,0 +1,8 @@
1
+ import { PageAgent } from "../common/agent";
2
+ import { Page } from "./page";
3
+ export {
4
+ PageAgent as AppiumAgent,
5
+ Page as AppiumPage
6
+ };
7
+
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"AAAA,SAAsB,iBAAmB;AACzC,SAAiB,YAAkB","names":[],"ignoreList":[],"sources":["../../../src/appium/index.ts"],"sourcesContent":["export { PageAgent as AppiumAgent } from '../common/agent';\nexport { Page as AppiumPage } from './page';\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W119"]}
@@ -0,0 +1,341 @@
1
+ var __async = (__this, __arguments, generator) => {
2
+ return new Promise((resolve, reject) => {
3
+ var fulfilled = (value) => {
4
+ try {
5
+ step(generator.next(value));
6
+ } catch (e) {
7
+ reject(e);
8
+ }
9
+ };
10
+ var rejected = (value) => {
11
+ try {
12
+ step(generator.throw(value));
13
+ } catch (e) {
14
+ reject(e);
15
+ }
16
+ };
17
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
18
+ step((generator = generator.apply(__this, __arguments)).next());
19
+ });
20
+ };
21
+ import fs from "node:fs";
22
+ import { getTmpFile } from "@midscene/core/utils";
23
+ import {
24
+ clientExtractTextWithPosition
25
+ } from "@midscene/shared/extractor";
26
+ import { base64Encoded, resizeImg } from "@midscene/shared/img";
27
+ import { DOMParser } from "@xmldom/xmldom";
28
+ function buttonToNumber(button) {
29
+ return button === "left" ? 0 : button === "middle" ? 1 : 2;
30
+ }
31
+ class Page {
32
+ constructor(browser) {
33
+ this.pageType = "appium";
34
+ this.browser = browser;
35
+ }
36
+ getElementsInfo() {
37
+ return __async(this, null, function* () {
38
+ const pageSource = yield this.browser.getPageSource();
39
+ const { width, height } = yield this.browser.getWindowSize();
40
+ const parser = new DOMParser();
41
+ const doc = parser.parseFromString(pageSource, "text/xml");
42
+ const infos = clientExtractTextWithPosition(doc).filter(
43
+ (element) => element.rect.height !== height && element.rect.width !== width && element.rect.left !== 0 && element.rect.top !== 0 && element.attributes.visible === "true"
44
+ );
45
+ return infos;
46
+ });
47
+ }
48
+ getElementsNodeTree() {
49
+ return __async(this, null, function* () {
50
+ throw new Error("Not implemented");
51
+ });
52
+ }
53
+ size() {
54
+ return __async(this, null, function* () {
55
+ return this.browser.getWindowSize();
56
+ });
57
+ }
58
+ screenshotBase64() {
59
+ return __async(this, null, function* () {
60
+ const { width, height } = yield this.size();
61
+ const path = getTmpFile("png");
62
+ const screenshotBuffer = yield this.browser.saveScreenshot(path);
63
+ const resizedScreenshotBuffer = yield resizeImg(screenshotBuffer, {
64
+ width,
65
+ height
66
+ });
67
+ fs.writeFileSync(path, resizedScreenshotBuffer);
68
+ return base64Encoded(path);
69
+ });
70
+ }
71
+ get mouse() {
72
+ return {
73
+ click: (x, y, options) => this.mouseClick(x, y, (options == null ? void 0 : options.button) || "left"),
74
+ wheel: (deltaX, deltaY) => this.mouseWheel(deltaX, deltaY),
75
+ move: (x, y) => this.mouseMove(x, y),
76
+ drag: (from, to) => this.mouseDrag(from, to)
77
+ };
78
+ }
79
+ // Object that includes keyboard and mouse operations
80
+ get keyboard() {
81
+ return {
82
+ type: (text) => this.keyboardType(text),
83
+ press: (action) => this.keyboardPressAction(action)
84
+ };
85
+ }
86
+ clearInput(element) {
87
+ return __async(this, null, function* () {
88
+ if (!element) {
89
+ return;
90
+ }
91
+ const ele = yield this.browser.$(element.locator);
92
+ const blank = " ";
93
+ yield this.keyboardType(blank);
94
+ yield ele.clearValue();
95
+ });
96
+ }
97
+ url() {
98
+ var _a;
99
+ const platformName = (_a = this.browser.capabilities.platformName) == null ? void 0 : _a.toLowerCase();
100
+ if (platformName === "ios") {
101
+ const bundleId = this.browser.capabilities.bundleId;
102
+ return bundleId;
103
+ }
104
+ if (platformName === "android") {
105
+ const appActivity = this.browser.capabilities.appActivity;
106
+ return appActivity;
107
+ }
108
+ return "";
109
+ }
110
+ // Scroll to top element
111
+ scrollUntilTop(startingPoint) {
112
+ return __async(this, null, function* () {
113
+ if (startingPoint) {
114
+ yield this.mouse.move(startingPoint.left, startingPoint.top);
115
+ }
116
+ yield this.mouseWheel(0, -9999999, 100);
117
+ });
118
+ }
119
+ // Scroll to bottom element
120
+ scrollUntilBottom(startingPoint) {
121
+ return __async(this, null, function* () {
122
+ if (startingPoint) {
123
+ yield this.mouse.move(startingPoint.left, startingPoint.top);
124
+ }
125
+ yield this.mouseWheel(0, 9999999, 100);
126
+ });
127
+ }
128
+ scrollUntilLeft(startingPoint) {
129
+ return __async(this, null, function* () {
130
+ if (startingPoint) {
131
+ yield this.mouse.move(startingPoint.left, startingPoint.top);
132
+ }
133
+ yield this.mouseWheel(-9999999, 0, 100);
134
+ });
135
+ }
136
+ scrollUntilRight(startingPoint) {
137
+ return __async(this, null, function* () {
138
+ if (startingPoint) {
139
+ yield this.mouse.move(startingPoint.left, startingPoint.top);
140
+ }
141
+ yield this.mouseWheel(9999999, 0, 100);
142
+ });
143
+ }
144
+ // Scroll up one screen
145
+ scrollUp(distance, startingPoint) {
146
+ return __async(this, null, function* () {
147
+ const { height } = yield this.browser.getWindowSize();
148
+ const scrollDistance = distance || height * 0.7;
149
+ if (startingPoint) {
150
+ yield this.mouse.move(startingPoint.left, startingPoint.top);
151
+ }
152
+ yield this.mouseWheel(0, -scrollDistance, 1e3);
153
+ });
154
+ }
155
+ // Scroll down one screen
156
+ scrollDown(distance, startingPoint) {
157
+ return __async(this, null, function* () {
158
+ const { height } = yield this.browser.getWindowSize();
159
+ const scrollDistance = distance || height * 0.7;
160
+ if (startingPoint) {
161
+ yield this.mouse.move(startingPoint.left, startingPoint.top);
162
+ }
163
+ yield this.mouseWheel(0, scrollDistance, 1e3);
164
+ });
165
+ }
166
+ scrollLeft(distance, startingPoint) {
167
+ return __async(this, null, function* () {
168
+ const { width } = yield this.browser.getWindowSize();
169
+ const scrollDistance = distance || width * 0.7;
170
+ if (startingPoint) {
171
+ yield this.mouse.move(startingPoint.left, startingPoint.top);
172
+ }
173
+ yield this.mouseWheel(-scrollDistance, 0, 1e3);
174
+ });
175
+ }
176
+ scrollRight(distance, startingPoint) {
177
+ return __async(this, null, function* () {
178
+ const { width } = yield this.browser.getWindowSize();
179
+ const scrollDistance = distance || width * 0.7;
180
+ if (startingPoint) {
181
+ yield this.mouse.move(startingPoint.left, startingPoint.top);
182
+ }
183
+ yield this.mouseWheel(scrollDistance, 0, 1e3);
184
+ });
185
+ }
186
+ keyboardType(text) {
187
+ return __async(this, null, function* () {
188
+ const actions = [];
189
+ for (const char of text) {
190
+ actions.push({ type: "keyDown", value: char });
191
+ actions.push({ type: "keyUp", value: char });
192
+ }
193
+ if (!actions.length) {
194
+ return;
195
+ }
196
+ yield this.browser.performActions([
197
+ {
198
+ type: "key",
199
+ id: "keyboard",
200
+ actions
201
+ }
202
+ ]);
203
+ });
204
+ }
205
+ keyboardPress(key) {
206
+ return __async(this, null, function* () {
207
+ yield this.browser.performActions([
208
+ {
209
+ type: "key",
210
+ id: "keyboard",
211
+ actions: [
212
+ { type: "keyDown", value: key },
213
+ { type: "keyUp", value: key }
214
+ ]
215
+ }
216
+ ]);
217
+ });
218
+ }
219
+ keyboardPressAction(action) {
220
+ return __async(this, null, function* () {
221
+ if (Array.isArray(action)) {
222
+ for (const act of action) {
223
+ yield this.browser.performActions([
224
+ {
225
+ type: "key",
226
+ id: "keyboard",
227
+ actions: [
228
+ { type: "keyDown", value: act.key },
229
+ { type: "keyUp", value: act.key }
230
+ ]
231
+ }
232
+ ]);
233
+ }
234
+ } else {
235
+ yield this.browser.performActions([
236
+ {
237
+ type: "key",
238
+ id: "keyboard",
239
+ actions: [
240
+ { type: "keyDown", value: action.key },
241
+ { type: "keyUp", value: action.key }
242
+ ]
243
+ }
244
+ ]);
245
+ }
246
+ });
247
+ }
248
+ mouseClick(x, y, button = "left") {
249
+ return __async(this, null, function* () {
250
+ yield this.mouseMove(x, y);
251
+ yield this.browser.performActions([
252
+ {
253
+ type: "pointer",
254
+ id: "mouse",
255
+ parameters: { pointerType: "mouse" },
256
+ actions: [
257
+ { type: "pointerMove", duration: 0, x, y },
258
+ { type: "pointerDown", button: buttonToNumber(button) },
259
+ { type: "pause", duration: 100 },
260
+ { type: "pointerUp", button: buttonToNumber(button) }
261
+ ]
262
+ }
263
+ ]);
264
+ });
265
+ }
266
+ mouseMove(x, y) {
267
+ return __async(this, null, function* () {
268
+ yield this.browser.performActions([
269
+ {
270
+ type: "pointer",
271
+ id: "mouse",
272
+ parameters: { pointerType: "mouse" },
273
+ actions: [{ type: "pointerMove", duration: 0, x, y }]
274
+ }
275
+ ]);
276
+ });
277
+ }
278
+ mouseDrag(from, to) {
279
+ return __async(this, null, function* () {
280
+ yield this.browser.performActions([
281
+ {
282
+ type: "pointer",
283
+ id: "mouse",
284
+ parameters: { pointerType: "mouse" },
285
+ actions: [
286
+ { type: "pointerMove", duration: 0, x: from.x, y: from.y },
287
+ { type: "pointerDown", button: 0 },
288
+ { type: "pointerMove", duration: 500, x: to.x, y: to.y },
289
+ { type: "pointerUp", button: 0 }
290
+ ]
291
+ }
292
+ ]);
293
+ });
294
+ }
295
+ mouseWheel(deltaX, deltaY, duration = 1e3) {
296
+ return __async(this, null, function* () {
297
+ const n = 4;
298
+ const windowSize = yield this.browser.getWindowSize();
299
+ const startX = deltaX < 0 ? (n - 1) * (windowSize.width / n) : windowSize.width / n;
300
+ const startY = deltaY < 0 ? (n - 1) * (windowSize.height / n) : windowSize.height / n;
301
+ const maxNegativeDeltaX = startX;
302
+ const maxPositiveDeltaX = (n - 1) * (windowSize.width / n);
303
+ const maxNegativeDeltaY = startY;
304
+ const maxPositiveDeltaY = (n - 1) * (windowSize.height / n);
305
+ deltaX = Math.max(-maxNegativeDeltaX, Math.min(deltaX, maxPositiveDeltaX));
306
+ deltaY = Math.max(-maxNegativeDeltaY, Math.min(deltaY, maxPositiveDeltaY));
307
+ yield this.browser.performActions([
308
+ {
309
+ type: "pointer",
310
+ id: "finger1",
311
+ parameters: { pointerType: "touch" },
312
+ actions: [
313
+ { type: "pointerMove", duration: 0, x: startX, y: startY },
314
+ { type: "pointerDown", button: 0 },
315
+ { type: "pause", duration },
316
+ {
317
+ type: "pointerMove",
318
+ duration,
319
+ origin: "pointer",
320
+ // Use 'pointer' as the starting point
321
+ x: deltaX,
322
+ // X offset relative to the starting point
323
+ y: deltaY
324
+ // Y offset relative to the starting point
325
+ },
326
+ { type: "pointerUp", button: 0 }
327
+ ]
328
+ }
329
+ ]);
330
+ });
331
+ }
332
+ destroy() {
333
+ return __async(this, null, function* () {
334
+ });
335
+ }
336
+ }
337
+ export {
338
+ Page
339
+ };
340
+
341
+ //# sourceMappingURL=page.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../src/appium/page.ts"],"sourcesContent":["import fs from 'node:fs';\nimport type { Point, Size } from '@midscene/core';\nimport { getTmpFile } from '@midscene/core/utils';\nimport {\n type ElementInfo,\n clientExtractTextWithPosition,\n} from '@midscene/shared/extractor';\nimport { base64Encoded, resizeImg } from '@midscene/shared/img';\nimport { DOMParser } from '@xmldom/xmldom';\nimport type { KeyInput as PuppeteerKeyInput } from 'puppeteer';\nimport type { Browser } from 'webdriverio';\nimport type { AbstractPage, MouseButton } from '../page';\n\ntype WebKeyInput = PuppeteerKeyInput;\n\nfunction buttonToNumber(button: MouseButton): number {\n return button === 'left' ? 0 : button === 'middle' ? 1 : 2;\n}\n\nexport class Page implements AbstractPage {\n private browser: Browser;\n pageType = 'appium';\n\n constructor(browser: Browser) {\n this.browser = browser;\n }\n\n async getElementsInfo() {\n const pageSource = await this.browser.getPageSource();\n const { width, height } = await this.browser.getWindowSize();\n const parser = new DOMParser();\n const doc = parser.parseFromString(pageSource, 'text/xml');\n const infos = clientExtractTextWithPosition(doc).filter(\n (element) =>\n element.rect.height !== height &&\n element.rect.width !== width &&\n element.rect.left !== 0 &&\n element.rect.top !== 0 &&\n element.attributes.visible === 'true',\n );\n\n return infos;\n }\n\n async getElementsNodeTree(): Promise<any> {\n throw new Error('Not implemented');\n }\n\n async size(): Promise<Size> {\n return this.browser.getWindowSize();\n }\n\n async screenshotBase64(): Promise<string> {\n const { width, height } = await this.size();\n const path = getTmpFile('png')!;\n const screenshotBuffer = await this.browser.saveScreenshot(path);\n const resizedScreenshotBuffer = await resizeImg(screenshotBuffer, {\n width,\n height,\n });\n fs.writeFileSync(path, resizedScreenshotBuffer);\n\n return base64Encoded(path);\n }\n\n get mouse() {\n return {\n click: (x: number, y: number, options?: { button: MouseButton }) =>\n this.mouseClick(x, y, options?.button || 'left'),\n wheel: (deltaX: number, deltaY: number) =>\n this.mouseWheel(deltaX, deltaY),\n move: (x: number, y: number) => this.mouseMove(x, y),\n drag: (from: { x: number; y: number }, to: { x: number; y: number }) =>\n this.mouseDrag(from, to),\n };\n }\n\n // Object that includes keyboard and mouse operations\n get keyboard() {\n return {\n type: (text: string) => this.keyboardType(text),\n press: (\n action:\n | { key: WebKeyInput; command?: string }\n | { key: WebKeyInput; command?: string }[],\n ) => this.keyboardPressAction(action),\n };\n }\n\n async clearInput(element: ElementInfo): Promise<void> {\n if (!element) {\n return;\n }\n\n const ele = await this.browser.$(element.locator);\n const blank = ' ';\n await this.keyboardType(blank);\n await ele.clearValue();\n }\n\n url(): string {\n const platformName = this.browser.capabilities.platformName?.toLowerCase();\n\n if (platformName === 'ios') {\n const bundleId = (this.browser.capabilities as { bundleId: string })\n .bundleId;\n return bundleId;\n }\n\n if (platformName === 'android') {\n const appActivity = (this.browser.capabilities as { appActivity: string })\n .appActivity;\n return appActivity;\n }\n\n return '';\n }\n\n // Scroll to top element\n async scrollUntilTop(startingPoint?: Point): Promise<void> {\n if (startingPoint) {\n await this.mouse.move(startingPoint.left, startingPoint.top);\n }\n\n await this.mouseWheel(0, -9999999, 100);\n }\n\n // Scroll to bottom element\n async scrollUntilBottom(startingPoint?: Point): Promise<void> {\n if (startingPoint) {\n await this.mouse.move(startingPoint.left, startingPoint.top);\n }\n\n await this.mouseWheel(0, 9999999, 100);\n }\n\n async scrollUntilLeft(startingPoint?: Point): Promise<void> {\n if (startingPoint) {\n await this.mouse.move(startingPoint.left, startingPoint.top);\n }\n\n await this.mouseWheel(-9999999, 0, 100);\n }\n\n async scrollUntilRight(startingPoint?: Point): Promise<void> {\n if (startingPoint) {\n await this.mouse.move(startingPoint.left, startingPoint.top);\n }\n\n await this.mouseWheel(9999999, 0, 100);\n }\n\n // Scroll up one screen\n async scrollUp(distance?: number, startingPoint?: Point): Promise<void> {\n const { height } = await this.browser.getWindowSize();\n const scrollDistance = distance || height * 0.7;\n\n if (startingPoint) {\n await this.mouse.move(startingPoint.left, startingPoint.top);\n }\n\n await this.mouseWheel(0, -scrollDistance, 1000);\n }\n\n // Scroll down one screen\n async scrollDown(distance?: number, startingPoint?: Point): Promise<void> {\n const { height } = await this.browser.getWindowSize();\n const scrollDistance = distance || height * 0.7;\n\n if (startingPoint) {\n await this.mouse.move(startingPoint.left, startingPoint.top);\n }\n\n await this.mouseWheel(0, scrollDistance, 1000);\n }\n\n async scrollLeft(distance?: number, startingPoint?: Point): Promise<void> {\n const { width } = await this.browser.getWindowSize();\n const scrollDistance = distance || width * 0.7;\n\n if (startingPoint) {\n await this.mouse.move(startingPoint.left, startingPoint.top);\n }\n\n await this.mouseWheel(-scrollDistance, 0, 1000);\n }\n\n async scrollRight(distance?: number, startingPoint?: Point): Promise<void> {\n const { width } = await this.browser.getWindowSize();\n const scrollDistance = distance || width * 0.7;\n\n if (startingPoint) {\n await this.mouse.move(startingPoint.left, startingPoint.top);\n }\n\n await this.mouseWheel(scrollDistance, 0, 1000);\n }\n\n private async keyboardType(text: string): Promise<void> {\n const actions = [];\n\n for (const char of text) {\n actions.push({ type: 'keyDown', value: char });\n actions.push({ type: 'keyUp', value: char });\n }\n\n if (!actions.length) {\n return;\n }\n\n await this.browser.performActions([\n {\n type: 'key',\n id: 'keyboard',\n actions: actions,\n },\n ]);\n }\n\n private async keyboardPress(key: WebKeyInput): Promise<void> {\n await this.browser.performActions([\n {\n type: 'key',\n id: 'keyboard',\n actions: [\n { type: 'keyDown', value: key },\n { type: 'keyUp', value: key },\n ],\n },\n ]);\n }\n\n private async keyboardPressAction(\n action:\n | { key: WebKeyInput; command?: string }\n | { key: WebKeyInput; command?: string }[],\n ): Promise<void> {\n if (Array.isArray(action)) {\n for (const act of action) {\n await this.browser.performActions([\n {\n type: 'key',\n id: 'keyboard',\n actions: [\n { type: 'keyDown', value: act.key },\n { type: 'keyUp', value: act.key },\n ],\n },\n ]);\n }\n } else {\n await this.browser.performActions([\n {\n type: 'key',\n id: 'keyboard',\n actions: [\n { type: 'keyDown', value: action.key },\n { type: 'keyUp', value: action.key },\n ],\n },\n ]);\n }\n }\n\n private async mouseClick(\n x: number,\n y: number,\n button: MouseButton = 'left',\n ): Promise<void> {\n await this.mouseMove(x, y);\n await this.browser.performActions([\n {\n type: 'pointer',\n id: 'mouse',\n parameters: { pointerType: 'mouse' },\n actions: [\n { type: 'pointerMove', duration: 0, x, y },\n { type: 'pointerDown', button: buttonToNumber(button) },\n { type: 'pause', duration: 100 },\n { type: 'pointerUp', button: buttonToNumber(button) },\n ],\n },\n ]);\n }\n\n private async mouseMove(x: number, y: number): Promise<void> {\n await this.browser.performActions([\n {\n type: 'pointer',\n id: 'mouse',\n parameters: { pointerType: 'mouse' },\n actions: [{ type: 'pointerMove', duration: 0, x, y }],\n },\n ]);\n }\n\n private async mouseDrag(\n from: { x: number; y: number },\n to: { x: number; y: number },\n ): Promise<void> {\n await this.browser.performActions([\n {\n type: 'pointer',\n id: 'mouse',\n parameters: { pointerType: 'mouse' },\n actions: [\n { type: 'pointerMove', duration: 0, x: from.x, y: from.y },\n { type: 'pointerDown', button: 0 },\n { type: 'pointerMove', duration: 500, x: to.x, y: to.y },\n { type: 'pointerUp', button: 0 },\n ],\n },\n ]);\n }\n\n private async mouseWheel(\n deltaX: number,\n deltaY: number,\n duration = 1000,\n ): Promise<void> {\n const n = 4;\n // Get the size of the window\n const windowSize = await this.browser.getWindowSize();\n\n // Set the starting point based on the sign of deltaX and deltaY\n const startX =\n deltaX < 0 ? (n - 1) * (windowSize.width / n) : windowSize.width / n;\n const startY =\n deltaY < 0 ? (n - 1) * (windowSize.height / n) : windowSize.height / n;\n\n // Calculate the maximum allowable offset for non-symmetry\n const maxNegativeDeltaX = startX; // Maximum offset on the left\n const maxPositiveDeltaX = (n - 1) * (windowSize.width / n); // Maximum offset on the right\n\n const maxNegativeDeltaY = startY; // Maximum offset on the top\n const maxPositiveDeltaY = (n - 1) * (windowSize.height / n); // Maximum offset on the bottom\n\n // Limit the absolute value of deltaX and deltaY within the maximum offset\n deltaX = Math.max(-maxNegativeDeltaX, Math.min(deltaX, maxPositiveDeltaX));\n deltaY = Math.max(-maxNegativeDeltaY, Math.min(deltaY, maxPositiveDeltaY));\n\n await this.browser.performActions([\n {\n type: 'pointer',\n id: 'finger1',\n parameters: { pointerType: 'touch' },\n actions: [\n { type: 'pointerMove', duration: 0, x: startX, y: startY },\n { type: 'pointerDown', button: 0 },\n { type: 'pause', duration },\n {\n type: 'pointerMove',\n duration,\n origin: 'pointer', // Use 'pointer' as the starting point\n x: deltaX, // X offset relative to the starting point\n y: deltaY, // Y offset relative to the starting point\n },\n { type: 'pointerUp', button: 0 },\n ],\n },\n ]);\n }\n\n async destroy(): Promise<void> {\n //\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W119"]}
@@ -0,0 +1,153 @@
1
+ var __getProtoOf = Object.getPrototypeOf;
2
+ var __reflectGet = Reflect.get;
3
+ var __superGet = (cls, obj, key) => __reflectGet(__getProtoOf(cls), key, obj);
4
+ var __async = (__this, __arguments, generator) => {
5
+ return new Promise((resolve, reject) => {
6
+ var fulfilled = (value) => {
7
+ try {
8
+ step(generator.next(value));
9
+ } catch (e) {
10
+ reject(e);
11
+ }
12
+ };
13
+ var rejected = (value) => {
14
+ try {
15
+ step(generator.throw(value));
16
+ } catch (e) {
17
+ reject(e);
18
+ }
19
+ };
20
+ var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
21
+ step((generator = generator.apply(__this, __arguments)).next());
22
+ });
23
+ };
24
+ import { PageAgent } from "../common/agent";
25
+ import { assert } from "@midscene/shared/utils";
26
+ import {
27
+ BridgeEvent,
28
+ BridgePageType,
29
+ DefaultBridgeServerPort,
30
+ KeyboardEvent,
31
+ MouseEvent
32
+ } from "./common";
33
+ import { BridgeServer } from "./io-server";
34
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
35
+ const getBridgePageInCliSide = () => {
36
+ const server = new BridgeServer(DefaultBridgeServerPort);
37
+ server.listen();
38
+ const bridgeCaller = (method) => {
39
+ return (...args) => __async(void 0, null, function* () {
40
+ const response = yield server.call(method, args);
41
+ return response;
42
+ });
43
+ };
44
+ const page = {
45
+ showStatusMessage: (message) => __async(void 0, null, function* () {
46
+ yield server.call(BridgeEvent.UpdateAgentStatus, [message]);
47
+ })
48
+ };
49
+ return new Proxy(page, {
50
+ get(target, prop, receiver) {
51
+ assert(typeof prop === "string", "prop must be a string");
52
+ if (prop === "toJSON") {
53
+ return () => {
54
+ return {
55
+ pageType: BridgePageType
56
+ };
57
+ };
58
+ }
59
+ if (prop === "pageType") {
60
+ return BridgePageType;
61
+ }
62
+ if (prop === "_forceUsePageContext") {
63
+ return void 0;
64
+ }
65
+ if (Object.keys(page).includes(prop)) {
66
+ return page[prop];
67
+ }
68
+ if (prop === "mouse") {
69
+ const mouse = {
70
+ click: bridgeCaller(MouseEvent.Click),
71
+ wheel: bridgeCaller(MouseEvent.Wheel),
72
+ move: bridgeCaller(MouseEvent.Move),
73
+ drag: bridgeCaller(MouseEvent.Drag)
74
+ };
75
+ return mouse;
76
+ }
77
+ if (prop === "keyboard") {
78
+ const keyboard = {
79
+ type: bridgeCaller(KeyboardEvent.Type),
80
+ press: bridgeCaller(KeyboardEvent.Press)
81
+ };
82
+ return keyboard;
83
+ }
84
+ if (prop === "destroy") {
85
+ return (...args) => __async(this, null, function* () {
86
+ try {
87
+ const caller = bridgeCaller("destroy");
88
+ yield caller(...args);
89
+ } catch (e) {
90
+ }
91
+ return server.close();
92
+ });
93
+ }
94
+ return bridgeCaller(prop);
95
+ }
96
+ });
97
+ };
98
+ class AgentOverChromeBridge extends PageAgent {
99
+ constructor(opts) {
100
+ const page = getBridgePageInCliSide();
101
+ super(
102
+ page,
103
+ Object.assign(opts || {}, {
104
+ onTaskStartTip: (tip) => {
105
+ this.page.showStatusMessage(tip);
106
+ }
107
+ })
108
+ );
109
+ if (typeof (opts == null ? void 0 : opts.closeNewTabsAfterDisconnect) === "boolean") {
110
+ this.page.setDestroyOptions({
111
+ closeTab: opts.closeNewTabsAfterDisconnect
112
+ });
113
+ }
114
+ }
115
+ connectNewTabWithUrl(url, options) {
116
+ return __async(this, null, function* () {
117
+ yield this.page.connectNewTabWithUrl(url, options);
118
+ yield sleep(500);
119
+ });
120
+ }
121
+ connectCurrentTab(options) {
122
+ return __async(this, null, function* () {
123
+ yield this.page.connectCurrentTab(options);
124
+ yield sleep(500);
125
+ });
126
+ }
127
+ aiAction(prompt, options) {
128
+ return __async(this, null, function* () {
129
+ if (options) {
130
+ console.warn(
131
+ "the `options` parameter of aiAction is not supported in cli side"
132
+ );
133
+ }
134
+ return yield __superGet(AgentOverChromeBridge.prototype, this, "aiAction").call(this, prompt);
135
+ });
136
+ }
137
+ destroy(closeNewTabsAfterDisconnect) {
138
+ return __async(this, null, function* () {
139
+ if (typeof closeNewTabsAfterDisconnect === "boolean") {
140
+ yield this.page.setDestroyOptions({
141
+ closeTab: closeNewTabsAfterDisconnect
142
+ });
143
+ }
144
+ yield __superGet(AgentOverChromeBridge.prototype, this, "destroy").call(this);
145
+ });
146
+ }
147
+ }
148
+ export {
149
+ AgentOverChromeBridge,
150
+ getBridgePageInCliSide
151
+ };
152
+
153
+ //# sourceMappingURL=agent-cli-side.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../src/bridge-mode/agent-cli-side.ts"],"sourcesContent":["import { PageAgent, type PageAgentOpt } from '../common/agent';\nimport type {\n ChromePageDestroyOptions,\n KeyboardAction,\n MouseAction,\n} from '../page';\nimport { assert } from '@midscene/shared/utils';\nimport {\n type BridgeConnectTabOptions,\n BridgeEvent,\n BridgePageType,\n DefaultBridgeServerPort,\n KeyboardEvent,\n MouseEvent,\n} from './common';\nimport { BridgeServer } from './io-server';\nimport type { ExtensionBridgePageBrowserSide } from './page-browser-side';\n\ninterface ChromeExtensionPageCliSide extends ExtensionBridgePageBrowserSide {\n showStatusMessage: (message: string) => Promise<void>;\n}\n\nconst sleep = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms));\n\n// actually, this is a proxy to the page in browser side\nexport const getBridgePageInCliSide = (): ChromeExtensionPageCliSide => {\n const server = new BridgeServer(DefaultBridgeServerPort);\n server.listen();\n const bridgeCaller = (method: string) => {\n return async (...args: any[]) => {\n const response = await server.call(method, args);\n return response;\n };\n };\n const page = {\n showStatusMessage: async (message: string) => {\n await server.call(BridgeEvent.UpdateAgentStatus, [message]);\n },\n };\n\n return new Proxy(page, {\n get(target, prop, receiver) {\n assert(typeof prop === 'string', 'prop must be a string');\n\n if (prop === 'toJSON') {\n return () => {\n return {\n pageType: BridgePageType,\n };\n };\n }\n\n if (prop === 'pageType') {\n return BridgePageType;\n }\n\n if (prop === '_forceUsePageContext') {\n return undefined;\n }\n\n if (Object.keys(page).includes(prop)) {\n return page[prop as keyof typeof page];\n }\n\n if (prop === 'mouse') {\n const mouse: MouseAction = {\n click: bridgeCaller(MouseEvent.Click),\n wheel: bridgeCaller(MouseEvent.Wheel),\n move: bridgeCaller(MouseEvent.Move),\n drag: bridgeCaller(MouseEvent.Drag),\n };\n return mouse;\n }\n\n if (prop === 'keyboard') {\n const keyboard: KeyboardAction = {\n type: bridgeCaller(KeyboardEvent.Type),\n press: bridgeCaller(KeyboardEvent.Press),\n };\n return keyboard;\n }\n\n if (prop === 'destroy') {\n return async (...args: any[]) => {\n try {\n const caller = bridgeCaller('destroy');\n await caller(...args);\n } catch (e) {\n // console.error('error calling destroy', e);\n }\n return server.close();\n };\n }\n\n return bridgeCaller(prop);\n },\n }) as ChromeExtensionPageCliSide;\n};\n\nexport class AgentOverChromeBridge extends PageAgent<ChromeExtensionPageCliSide> {\n constructor(opts?: PageAgentOpt & { closeNewTabsAfterDisconnect?: boolean }) {\n const page = getBridgePageInCliSide();\n super(\n page,\n Object.assign(opts || {}, {\n onTaskStartTip: (tip: string) => {\n this.page.showStatusMessage(tip);\n },\n }),\n );\n\n if (typeof opts?.closeNewTabsAfterDisconnect === 'boolean') {\n this.page.setDestroyOptions({\n closeTab: opts.closeNewTabsAfterDisconnect,\n });\n }\n }\n\n async connectNewTabWithUrl(url: string, options?: BridgeConnectTabOptions) {\n await this.page.connectNewTabWithUrl(url, options);\n await sleep(500);\n }\n\n async connectCurrentTab(options?: BridgeConnectTabOptions) {\n await this.page.connectCurrentTab(options);\n await sleep(500);\n }\n\n async aiAction(prompt: string, options?: any) {\n if (options) {\n console.warn(\n 'the `options` parameter of aiAction is not supported in cli side',\n );\n }\n return await super.aiAction(prompt);\n }\n\n async destroy(closeNewTabsAfterDisconnect?: boolean) {\n if (typeof closeNewTabsAfterDisconnect === 'boolean') {\n await this.page.setDestroyOptions({\n closeTab: closeNewTabsAfterDisconnect,\n });\n }\n await super.destroy();\n }\n}\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W119"]}
@@ -0,0 +1,6 @@
1
+ import { ExtensionBridgePageBrowserSide } from "../bridge-mode/page-browser-side";
2
+ export {
3
+ ExtensionBridgePageBrowserSide
4
+ };
5
+
6
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"AAAA,SAAS,sCAAsC","names":[],"ignoreList":[],"sources":["../../../src/bridge-mode/browser.ts"],"sourcesContent":["import { ExtensionBridgePageBrowserSide } from '../bridge-mode/page-browser-side';\n\nexport { ExtensionBridgePageBrowserSide };\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W119"]}
@@ -0,0 +1,43 @@
1
+ const DefaultBridgeServerPort = 3766;
2
+ const DefaultLocalEndpoint = `http://127.0.0.1:${DefaultBridgeServerPort}`;
3
+ const BridgeCallTimeout = 3e4;
4
+ var BridgeEvent = /* @__PURE__ */ ((BridgeEvent2) => {
5
+ BridgeEvent2["Call"] = "bridge-call";
6
+ BridgeEvent2["CallResponse"] = "bridge-call-response";
7
+ BridgeEvent2["UpdateAgentStatus"] = "bridge-update-agent-status";
8
+ BridgeEvent2["Message"] = "bridge-message";
9
+ BridgeEvent2["Connected"] = "bridge-connected";
10
+ BridgeEvent2["Refused"] = "bridge-refused";
11
+ BridgeEvent2["ConnectNewTabWithUrl"] = "connectNewTabWithUrl";
12
+ BridgeEvent2["ConnectCurrentTab"] = "connectCurrentTab";
13
+ BridgeEvent2["SetDestroyOptions"] = "setDestroyOptions";
14
+ return BridgeEvent2;
15
+ })(BridgeEvent || {});
16
+ var MouseEvent = /* @__PURE__ */ ((MouseEvent2) => {
17
+ MouseEvent2["PREFIX"] = "mouse.";
18
+ MouseEvent2["Click"] = "mouse.click";
19
+ MouseEvent2["Wheel"] = "mouse.wheel";
20
+ MouseEvent2["Move"] = "mouse.move";
21
+ MouseEvent2["Drag"] = "mouse.drag";
22
+ return MouseEvent2;
23
+ })(MouseEvent || {});
24
+ var KeyboardEvent = /* @__PURE__ */ ((KeyboardEvent2) => {
25
+ KeyboardEvent2["PREFIX"] = "keyboard.";
26
+ KeyboardEvent2["Type"] = "keyboard.type";
27
+ KeyboardEvent2["Press"] = "keyboard.press";
28
+ return KeyboardEvent2;
29
+ })(KeyboardEvent || {});
30
+ const BridgePageType = "page-over-chrome-extension-bridge";
31
+ const BridgeErrorCodeNoClientConnected = "no-client-connected";
32
+ export {
33
+ BridgeCallTimeout,
34
+ BridgeErrorCodeNoClientConnected,
35
+ BridgeEvent,
36
+ BridgePageType,
37
+ DefaultBridgeServerPort,
38
+ DefaultLocalEndpoint,
39
+ KeyboardEvent,
40
+ MouseEvent
41
+ };
42
+
43
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"AAAO,MAAM,0BAA0B;AAChC,MAAM,uBAAuB,oBAAoB,uBAAuB;AACxE,MAAM,oBAAoB;AAE1B,IAAK,cAAL,kBAAKA,iBAAL;AACL,EAAAA,aAAA,UAAO;AACP,EAAAA,aAAA,kBAAe;AACf,EAAAA,aAAA,uBAAoB;AACpB,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,eAAY;AACZ,EAAAA,aAAA,aAAU;AACV,EAAAA,aAAA,0BAAuB;AACvB,EAAAA,aAAA,uBAAoB;AACpB,EAAAA,aAAA,uBAAoB;AATV,SAAAA;AAAA;AAoBL,IAAK,aAAL,kBAAKC,gBAAL;AACL,EAAAA,YAAA,YAAS;AACT,EAAAA,YAAA,WAAQ;AACR,EAAAA,YAAA,WAAQ;AACR,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,UAAO;AALG,SAAAA;AAAA;AAQL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,YAAS;AACT,EAAAA,eAAA,UAAO;AACP,EAAAA,eAAA,WAAQ;AAHE,SAAAA;AAAA;AAML,MAAM,iBAAiB;AAEvB,MAAM,mCAAmC","names":["BridgeEvent","MouseEvent","KeyboardEvent"],"ignoreList":[],"sources":["../../../src/bridge-mode/common.ts"],"sourcesContent":["export const DefaultBridgeServerPort = 3766;\nexport const DefaultLocalEndpoint = `http://127.0.0.1:${DefaultBridgeServerPort}`;\nexport const BridgeCallTimeout = 30000;\n\nexport enum BridgeEvent {\n Call = 'bridge-call',\n CallResponse = 'bridge-call-response',\n UpdateAgentStatus = 'bridge-update-agent-status',\n Message = 'bridge-message',\n Connected = 'bridge-connected',\n Refused = 'bridge-refused',\n ConnectNewTabWithUrl = 'connectNewTabWithUrl',\n ConnectCurrentTab = 'connectCurrentTab',\n SetDestroyOptions = 'setDestroyOptions',\n}\n\nexport interface BridgeConnectTabOptions {\n /**\n * If true, the page will always track the active tab.\n * @default true\n */\n forceSameTabNavigation?: boolean;\n}\n\nexport enum MouseEvent {\n PREFIX = 'mouse.',\n Click = 'mouse.click',\n Wheel = 'mouse.wheel',\n Move = 'mouse.move',\n Drag = 'mouse.drag',\n}\n\nexport enum KeyboardEvent {\n PREFIX = 'keyboard.',\n Type = 'keyboard.type',\n Press = 'keyboard.press',\n}\n\nexport const BridgePageType = 'page-over-chrome-extension-bridge';\n\nexport const BridgeErrorCodeNoClientConnected = 'no-client-connected';\n\nexport interface BridgeCall {\n method: string;\n args: any[];\n response: any;\n callTime: number;\n responseTime: number;\n callback: (error: Error | undefined, response: any) => void;\n error?: Error;\n}\n\nexport interface BridgeCallRequest {\n id: string;\n method: string;\n args: any[];\n}\n\nexport interface BridgeCallResponse {\n id: string;\n response: any;\n error?: any;\n}\n\nexport interface BridgeConnectedEventPayload {\n version: string;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import { AgentOverChromeBridge } from "./agent-cli-side";
2
+ import { overrideAIConfig } from "@midscene/core/env";
3
+ export {
4
+ AgentOverChromeBridge,
5
+ overrideAIConfig
6
+ };
7
+
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"mappings":"AAAA,SAAS,6BAA6B;AAItC,SAAS,wBAAwB","names":[],"ignoreList":[],"sources":["../../../src/bridge-mode/index.ts"],"sourcesContent":["import { AgentOverChromeBridge } from './agent-cli-side';\n\nexport { AgentOverChromeBridge };\n\nexport { overrideAIConfig } from '@midscene/core/env';\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6IiIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOltdLCJzb3VyY2VzQ29udGVudCI6W119"]}