@xiuchang-midscene/shared 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (382) hide show
  1. package/README.md +9 -0
  2. package/dist/es/baseDB.mjs +109 -0
  3. package/dist/es/baseDB.mjs.bak +109 -0
  4. package/dist/es/build/copy-static.mjs +31 -0
  5. package/dist/es/build/copy-static.mjs.bak +31 -0
  6. package/dist/es/build/rspack-config.mjs +4 -0
  7. package/dist/es/build/rspack-config.mjs.bak +4 -0
  8. package/dist/es/cli/cli-runner.mjs +140 -0
  9. package/dist/es/cli/cli-runner.mjs.bak +140 -0
  10. package/dist/es/cli/index.mjs +2 -0
  11. package/dist/es/cli/index.mjs.bak +2 -0
  12. package/dist/es/common.mjs +37 -0
  13. package/dist/es/common.mjs.bak +37 -0
  14. package/dist/es/constants/example-code.mjs +223 -0
  15. package/dist/es/constants/example-code.mjs.bak +223 -0
  16. package/dist/es/constants/index.mjs +23 -0
  17. package/dist/es/constants/index.mjs.bak +23 -0
  18. package/dist/es/env/basic.mjs +6 -0
  19. package/dist/es/env/basic.mjs.bak +6 -0
  20. package/dist/es/env/constants.mjs +70 -0
  21. package/dist/es/env/constants.mjs.bak +70 -0
  22. package/dist/es/env/global-config-manager.mjs +94 -0
  23. package/dist/es/env/global-config-manager.mjs.bak +94 -0
  24. package/dist/es/env/helper.mjs +43 -0
  25. package/dist/es/env/helper.mjs.bak +43 -0
  26. package/dist/es/env/index.mjs +5 -0
  27. package/dist/es/env/index.mjs.bak +5 -0
  28. package/dist/es/env/init-debug.mjs +18 -0
  29. package/dist/es/env/init-debug.mjs.bak +18 -0
  30. package/dist/es/env/model-config-manager.mjs +79 -0
  31. package/dist/es/env/model-config-manager.mjs.bak +79 -0
  32. package/dist/es/env/parse-model-config.mjs +132 -0
  33. package/dist/es/env/parse-model-config.mjs.bak +132 -0
  34. package/dist/es/env/types.mjs +220 -0
  35. package/dist/es/env/types.mjs.bak +220 -0
  36. package/dist/es/env/utils.mjs +26 -0
  37. package/dist/es/env/utils.mjs.bak +26 -0
  38. package/dist/es/extractor/constants.mjs +2 -0
  39. package/dist/es/extractor/constants.mjs.bak +2 -0
  40. package/dist/es/extractor/debug.mjs +6 -0
  41. package/dist/es/extractor/debug.mjs.bak +6 -0
  42. package/dist/es/extractor/dom-util.mjs +92 -0
  43. package/dist/es/extractor/dom-util.mjs.bak +92 -0
  44. package/dist/es/extractor/index.mjs +5 -0
  45. package/dist/es/extractor/index.mjs.bak +5 -0
  46. package/dist/es/extractor/locator.mjs +250 -0
  47. package/dist/es/extractor/locator.mjs.bak +250 -0
  48. package/dist/es/extractor/tree.mjs +78 -0
  49. package/dist/es/extractor/tree.mjs.bak +78 -0
  50. package/dist/es/extractor/util.mjs +245 -0
  51. package/dist/es/extractor/util.mjs.bak +245 -0
  52. package/dist/es/extractor/web-extractor.mjs +303 -0
  53. package/dist/es/extractor/web-extractor.mjs.bak +303 -0
  54. package/dist/es/img/box-select.mjs +824 -0
  55. package/dist/es/img/box-select.mjs.bak +824 -0
  56. package/dist/es/img/canvas-fallback.mjs +238 -0
  57. package/dist/es/img/canvas-fallback.mjs.bak +238 -0
  58. package/dist/es/img/get-photon.mjs +45 -0
  59. package/dist/es/img/get-photon.mjs.bak +45 -0
  60. package/dist/es/img/get-sharp.mjs +11 -0
  61. package/dist/es/img/get-sharp.mjs.bak +11 -0
  62. package/dist/es/img/index.mjs +4 -0
  63. package/dist/es/img/index.mjs.bak +4 -0
  64. package/dist/es/img/info.mjs +29 -0
  65. package/dist/es/img/info.mjs.bak +29 -0
  66. package/dist/es/img/transform.mjs +295 -0
  67. package/dist/es/img/transform.mjs.bak +295 -0
  68. package/dist/es/index.mjs +4 -0
  69. package/dist/es/index.mjs.bak +4 -0
  70. package/dist/es/logger.mjs +64 -0
  71. package/dist/es/logger.mjs.bak +64 -0
  72. package/dist/es/mcp/base-server.mjs +281 -0
  73. package/dist/es/mcp/base-server.mjs.bak +281 -0
  74. package/dist/es/mcp/base-tools.mjs +91 -0
  75. package/dist/es/mcp/base-tools.mjs.bak +91 -0
  76. package/dist/es/mcp/chrome-path.mjs +35 -0
  77. package/dist/es/mcp/chrome-path.mjs.bak +35 -0
  78. package/dist/es/mcp/index.mjs +7 -0
  79. package/dist/es/mcp/index.mjs.bak +7 -0
  80. package/dist/es/mcp/inject-report-html-plugin.mjs +53 -0
  81. package/dist/es/mcp/inject-report-html-plugin.mjs.bak +53 -0
  82. package/dist/es/mcp/launcher-helper.mjs +52 -0
  83. package/dist/es/mcp/launcher-helper.mjs.bak +52 -0
  84. package/dist/es/mcp/tool-generator.mjs +297 -0
  85. package/dist/es/mcp/tool-generator.mjs.bak +297 -0
  86. package/dist/es/mcp/types.mjs +3 -0
  87. package/dist/es/mcp/types.mjs.bak +3 -0
  88. package/dist/es/node/fs.mjs +44 -0
  89. package/dist/es/node/fs.mjs.bak +44 -0
  90. package/dist/es/node/index.mjs +2 -0
  91. package/dist/es/node/index.mjs.bak +2 -0
  92. package/dist/es/node/port.mjs +24 -0
  93. package/dist/es/node/port.mjs.bak +24 -0
  94. package/dist/es/oss/demo.mjs +30 -0
  95. package/dist/es/oss/demo.mjs.bak +30 -0
  96. package/dist/es/oss/index.mjs +90 -0
  97. package/dist/es/oss/index.mjs.bak +90 -0
  98. package/dist/es/polyfills/async-hooks.mjs +2 -0
  99. package/dist/es/polyfills/async-hooks.mjs.bak +2 -0
  100. package/dist/es/polyfills/index.mjs +1 -0
  101. package/dist/es/polyfills/index.mjs.bak +1 -0
  102. package/dist/es/types/index.mjs +3 -0
  103. package/dist/es/types/index.mjs.bak +3 -0
  104. package/dist/es/us-keyboard-layout.mjs +1414 -0
  105. package/dist/es/us-keyboard-layout.mjs.LICENSE.txt +5 -0
  106. package/dist/es/us-keyboard-layout.mjs.bak +1414 -0
  107. package/dist/es/utils.mjs +72 -0
  108. package/dist/es/utils.mjs.bak +72 -0
  109. package/dist/es/zod-schema-utils.mjs +54 -0
  110. package/dist/es/zod-schema-utils.mjs.bak +54 -0
  111. package/dist/lib/baseDB.js +149 -0
  112. package/dist/lib/baseDB.js.bak +149 -0
  113. package/dist/lib/build/copy-static.js +79 -0
  114. package/dist/lib/build/copy-static.js.bak +79 -0
  115. package/dist/lib/build/rspack-config.js +38 -0
  116. package/dist/lib/build/rspack-config.js.bak +38 -0
  117. package/dist/lib/cli/cli-runner.js +196 -0
  118. package/dist/lib/cli/cli-runner.js.bak +196 -0
  119. package/dist/lib/cli/index.js +48 -0
  120. package/dist/lib/cli/index.js.bak +48 -0
  121. package/dist/lib/common.js +93 -0
  122. package/dist/lib/common.js.bak +93 -0
  123. package/dist/lib/constants/example-code.js +260 -0
  124. package/dist/lib/constants/example-code.js.bak +260 -0
  125. package/dist/lib/constants/index.js +96 -0
  126. package/dist/lib/constants/index.js.bak +96 -0
  127. package/dist/lib/env/basic.js +40 -0
  128. package/dist/lib/env/basic.js.bak +40 -0
  129. package/dist/lib/env/constants.js +113 -0
  130. package/dist/lib/env/constants.js.bak +113 -0
  131. package/dist/lib/env/global-config-manager.js +128 -0
  132. package/dist/lib/env/global-config-manager.js.bak +128 -0
  133. package/dist/lib/env/helper.js +80 -0
  134. package/dist/lib/env/helper.js.bak +80 -0
  135. package/dist/lib/env/index.js +90 -0
  136. package/dist/lib/env/index.js.bak +90 -0
  137. package/dist/lib/env/init-debug.js +52 -0
  138. package/dist/lib/env/init-debug.js.bak +52 -0
  139. package/dist/lib/env/model-config-manager.js +113 -0
  140. package/dist/lib/env/model-config-manager.js.bak +113 -0
  141. package/dist/lib/env/parse-model-config.js +178 -0
  142. package/dist/lib/env/parse-model-config.js.bak +178 -0
  143. package/dist/lib/env/types.js +554 -0
  144. package/dist/lib/env/types.js.bak +554 -0
  145. package/dist/lib/env/utils.js +72 -0
  146. package/dist/lib/env/utils.js.bak +72 -0
  147. package/dist/lib/extractor/constants.js +42 -0
  148. package/dist/lib/extractor/constants.js.bak +42 -0
  149. package/dist/lib/extractor/debug.js +12 -0
  150. package/dist/lib/extractor/debug.js.bak +12 -0
  151. package/dist/lib/extractor/dom-util.js +153 -0
  152. package/dist/lib/extractor/dom-util.js.bak +153 -0
  153. package/dist/lib/extractor/index.js +81 -0
  154. package/dist/lib/extractor/index.js.bak +81 -0
  155. package/dist/lib/extractor/locator.js +296 -0
  156. package/dist/lib/extractor/locator.js.bak +296 -0
  157. package/dist/lib/extractor/tree.js +124 -0
  158. package/dist/lib/extractor/tree.js.bak +124 -0
  159. package/dist/lib/extractor/util.js +336 -0
  160. package/dist/lib/extractor/util.js.bak +336 -0
  161. package/dist/lib/extractor/web-extractor.js +349 -0
  162. package/dist/lib/extractor/web-extractor.js.bak +349 -0
  163. package/dist/lib/img/box-select.js +875 -0
  164. package/dist/lib/img/box-select.js.bak +875 -0
  165. package/dist/lib/img/canvas-fallback.js +305 -0
  166. package/dist/lib/img/canvas-fallback.js.bak +305 -0
  167. package/dist/lib/img/get-photon.js +82 -0
  168. package/dist/lib/img/get-photon.js.bak +82 -0
  169. package/dist/lib/img/get-sharp.js +45 -0
  170. package/dist/lib/img/get-sharp.js.bak +45 -0
  171. package/dist/lib/img/index.js +95 -0
  172. package/dist/lib/img/index.js.bak +95 -0
  173. package/dist/lib/img/info.js +83 -0
  174. package/dist/lib/img/info.js.bak +83 -0
  175. package/dist/lib/img/transform.js +387 -0
  176. package/dist/lib/img/transform.js.bak +387 -0
  177. package/dist/lib/index.js +47 -0
  178. package/dist/lib/index.js.bak +47 -0
  179. package/dist/lib/logger.js +114 -0
  180. package/dist/lib/logger.js.bak +114 -0
  181. package/dist/lib/mcp/base-server.js +331 -0
  182. package/dist/lib/mcp/base-server.js.bak +331 -0
  183. package/dist/lib/mcp/base-tools.js +125 -0
  184. package/dist/lib/mcp/base-tools.js.bak +125 -0
  185. package/dist/lib/mcp/chrome-path.js +72 -0
  186. package/dist/lib/mcp/chrome-path.js.bak +72 -0
  187. package/dist/lib/mcp/index.js +100 -0
  188. package/dist/lib/mcp/index.js.bak +100 -0
  189. package/dist/lib/mcp/inject-report-html-plugin.js +98 -0
  190. package/dist/lib/mcp/inject-report-html-plugin.js.bak +98 -0
  191. package/dist/lib/mcp/launcher-helper.js +86 -0
  192. package/dist/lib/mcp/launcher-helper.js.bak +86 -0
  193. package/dist/lib/mcp/tool-generator.js +334 -0
  194. package/dist/lib/mcp/tool-generator.js.bak +334 -0
  195. package/dist/lib/mcp/types.js +40 -0
  196. package/dist/lib/mcp/types.js.bak +40 -0
  197. package/dist/lib/node/fs.js +97 -0
  198. package/dist/lib/node/fs.js.bak +97 -0
  199. package/dist/lib/node/index.js +65 -0
  200. package/dist/lib/node/index.js.bak +65 -0
  201. package/dist/lib/node/port.js +61 -0
  202. package/dist/lib/node/port.js.bak +61 -0
  203. package/dist/lib/oss/demo.js +36 -0
  204. package/dist/lib/oss/demo.js.bak +36 -0
  205. package/dist/lib/oss/index.js +138 -0
  206. package/dist/lib/oss/index.js.bak +138 -0
  207. package/dist/lib/polyfills/async-hooks.js +36 -0
  208. package/dist/lib/polyfills/async-hooks.js.bak +36 -0
  209. package/dist/lib/polyfills/index.js +58 -0
  210. package/dist/lib/polyfills/index.js.bak +58 -0
  211. package/dist/lib/types/index.js +37 -0
  212. package/dist/lib/types/index.js.bak +37 -0
  213. package/dist/lib/us-keyboard-layout.js +1457 -0
  214. package/dist/lib/us-keyboard-layout.js.LICENSE.txt +5 -0
  215. package/dist/lib/us-keyboard-layout.js.bak +1457 -0
  216. package/dist/lib/utils.js +148 -0
  217. package/dist/lib/utils.js.bak +148 -0
  218. package/dist/lib/zod-schema-utils.js +97 -0
  219. package/dist/lib/zod-schema-utils.js.bak +97 -0
  220. package/dist/types/baseDB.d.ts +25 -0
  221. package/dist/types/baseDB.d.ts.bak +25 -0
  222. package/dist/types/build/copy-static.d.ts +31 -0
  223. package/dist/types/build/copy-static.d.ts.bak +31 -0
  224. package/dist/types/build/rspack-config.d.ts +8 -0
  225. package/dist/types/build/rspack-config.d.ts.bak +8 -0
  226. package/dist/types/cli/cli-runner.d.ts +14 -0
  227. package/dist/types/cli/cli-runner.d.ts.bak +14 -0
  228. package/dist/types/cli/index.d.ts +2 -0
  229. package/dist/types/cli/index.d.ts.bak +2 -0
  230. package/dist/types/common.d.ts +12 -0
  231. package/dist/types/common.d.ts.bak +12 -0
  232. package/dist/types/constants/example-code.d.ts +2 -0
  233. package/dist/types/constants/example-code.d.ts.bak +2 -0
  234. package/dist/types/constants/index.d.ts +21 -0
  235. package/dist/types/constants/index.d.ts.bak +21 -0
  236. package/dist/types/env/basic.d.ts +6 -0
  237. package/dist/types/env/basic.d.ts.bak +6 -0
  238. package/dist/types/env/constants.d.ts +40 -0
  239. package/dist/types/env/constants.d.ts.bak +40 -0
  240. package/dist/types/env/global-config-manager.d.ts +32 -0
  241. package/dist/types/env/global-config-manager.d.ts.bak +32 -0
  242. package/dist/types/env/helper.d.ts +4 -0
  243. package/dist/types/env/helper.d.ts.bak +4 -0
  244. package/dist/types/env/index.d.ts +4 -0
  245. package/dist/types/env/index.d.ts.bak +4 -0
  246. package/dist/types/env/init-debug.d.ts +1 -0
  247. package/dist/types/env/init-debug.d.ts.bak +1 -0
  248. package/dist/types/env/model-config-manager.d.ts +25 -0
  249. package/dist/types/env/model-config-manager.d.ts.bak +25 -0
  250. package/dist/types/env/parse-model-config.d.ts +31 -0
  251. package/dist/types/env/parse-model-config.d.ts.bak +31 -0
  252. package/dist/types/env/types.d.ts +318 -0
  253. package/dist/types/env/types.d.ts.bak +318 -0
  254. package/dist/types/env/utils.d.ts +38 -0
  255. package/dist/types/env/utils.d.ts.bak +38 -0
  256. package/dist/types/extractor/constants.d.ts +1 -0
  257. package/dist/types/extractor/constants.d.ts.bak +1 -0
  258. package/dist/types/extractor/debug.d.ts +1 -0
  259. package/dist/types/extractor/debug.d.ts.bak +1 -0
  260. package/dist/types/extractor/dom-util.d.ts +56 -0
  261. package/dist/types/extractor/dom-util.d.ts.bak +56 -0
  262. package/dist/types/extractor/index.d.ts +32 -0
  263. package/dist/types/extractor/index.d.ts.bak +32 -0
  264. package/dist/types/extractor/locator.d.ts +9 -0
  265. package/dist/types/extractor/locator.d.ts.bak +9 -0
  266. package/dist/types/extractor/tree.d.ts +6 -0
  267. package/dist/types/extractor/tree.d.ts.bak +6 -0
  268. package/dist/types/extractor/util.d.ts +47 -0
  269. package/dist/types/extractor/util.d.ts.bak +47 -0
  270. package/dist/types/extractor/web-extractor.d.ts +19 -0
  271. package/dist/types/extractor/web-extractor.d.ts.bak +19 -0
  272. package/dist/types/img/box-select.d.ts +26 -0
  273. package/dist/types/img/box-select.d.ts.bak +26 -0
  274. package/dist/types/img/canvas-fallback.d.ts +105 -0
  275. package/dist/types/img/canvas-fallback.d.ts.bak +105 -0
  276. package/dist/types/img/get-photon.d.ts +19 -0
  277. package/dist/types/img/get-photon.d.ts.bak +19 -0
  278. package/dist/types/img/get-sharp.d.ts +3 -0
  279. package/dist/types/img/get-sharp.d.ts.bak +3 -0
  280. package/dist/types/img/index.d.ts +3 -0
  281. package/dist/types/img/index.d.ts.bak +3 -0
  282. package/dist/types/img/info.d.ts +29 -0
  283. package/dist/types/img/info.d.ts.bak +29 -0
  284. package/dist/types/img/transform.d.ts +107 -0
  285. package/dist/types/img/transform.d.ts.bak +107 -0
  286. package/dist/types/index.d.ts +4 -0
  287. package/dist/types/index.d.ts.bak +4 -0
  288. package/dist/types/logger.d.ts +5 -0
  289. package/dist/types/logger.d.ts.bak +5 -0
  290. package/dist/types/mcp/base-server.d.ts +93 -0
  291. package/dist/types/mcp/base-server.d.ts.bak +93 -0
  292. package/dist/types/mcp/base-tools.d.ts +79 -0
  293. package/dist/types/mcp/base-tools.d.ts.bak +79 -0
  294. package/dist/types/mcp/chrome-path.d.ts +2 -0
  295. package/dist/types/mcp/chrome-path.d.ts.bak +2 -0
  296. package/dist/types/mcp/index.d.ts +7 -0
  297. package/dist/types/mcp/index.d.ts.bak +7 -0
  298. package/dist/types/mcp/inject-report-html-plugin.d.ts +18 -0
  299. package/dist/types/mcp/inject-report-html-plugin.d.ts.bak +18 -0
  300. package/dist/types/mcp/launcher-helper.d.ts +94 -0
  301. package/dist/types/mcp/launcher-helper.d.ts.bak +94 -0
  302. package/dist/types/mcp/tool-generator.d.ts +10 -0
  303. package/dist/types/mcp/tool-generator.d.ts.bak +10 -0
  304. package/dist/types/mcp/types.d.ts +103 -0
  305. package/dist/types/mcp/types.d.ts.bak +103 -0
  306. package/dist/types/node/fs.d.ts +15 -0
  307. package/dist/types/node/fs.d.ts.bak +15 -0
  308. package/dist/types/node/index.d.ts +2 -0
  309. package/dist/types/node/index.d.ts.bak +2 -0
  310. package/dist/types/node/port.d.ts +8 -0
  311. package/dist/types/node/port.d.ts.bak +8 -0
  312. package/dist/types/oss/demo.d.ts +1 -0
  313. package/dist/types/oss/demo.d.ts.bak +1 -0
  314. package/dist/types/oss/index.d.ts +34 -0
  315. package/dist/types/oss/index.d.ts.bak +34 -0
  316. package/dist/types/polyfills/async-hooks.d.ts +6 -0
  317. package/dist/types/polyfills/async-hooks.d.ts.bak +6 -0
  318. package/dist/types/polyfills/index.d.ts +4 -0
  319. package/dist/types/polyfills/index.d.ts.bak +4 -0
  320. package/dist/types/types/index.d.ts +34 -0
  321. package/dist/types/types/index.d.ts.bak +34 -0
  322. package/dist/types/us-keyboard-layout.d.ts +32 -0
  323. package/dist/types/us-keyboard-layout.d.ts.bak +32 -0
  324. package/dist/types/utils.d.ts +34 -0
  325. package/dist/types/utils.d.ts.bak +34 -0
  326. package/dist/types/zod-schema-utils.d.ts +23 -0
  327. package/dist/types/zod-schema-utils.d.ts.bak +23 -0
  328. package/package.json +132 -0
  329. package/src/baseDB.ts +158 -0
  330. package/src/build/copy-static.ts +68 -0
  331. package/src/build/rspack-config.ts +12 -0
  332. package/src/cli/cli-runner.ts +224 -0
  333. package/src/cli/index.ts +8 -0
  334. package/src/common.ts +67 -0
  335. package/src/constants/example-code.ts +223 -0
  336. package/src/constants/index.ts +29 -0
  337. package/src/env/basic.ts +12 -0
  338. package/src/env/constants.ts +234 -0
  339. package/src/env/global-config-manager.ts +191 -0
  340. package/src/env/helper.ts +58 -0
  341. package/src/env/index.ts +4 -0
  342. package/src/env/init-debug.ts +34 -0
  343. package/src/env/model-config-manager.ts +149 -0
  344. package/src/env/parse-model-config.ts +294 -0
  345. package/src/env/types.ts +547 -0
  346. package/src/env/utils.ts +89 -0
  347. package/src/extractor/constants.ts +5 -0
  348. package/src/extractor/debug.ts +10 -0
  349. package/src/extractor/dom-util.ts +226 -0
  350. package/src/extractor/index.ts +48 -0
  351. package/src/extractor/locator.ts +469 -0
  352. package/src/extractor/tree.ts +179 -0
  353. package/src/extractor/util.ts +482 -0
  354. package/src/extractor/web-extractor.ts +481 -0
  355. package/src/img/box-select.ts +588 -0
  356. package/src/img/canvas-fallback.ts +393 -0
  357. package/src/img/get-photon.ts +108 -0
  358. package/src/img/get-sharp.ts +18 -0
  359. package/src/img/index.ts +26 -0
  360. package/src/img/info.ts +75 -0
  361. package/src/img/transform.ts +594 -0
  362. package/src/index.ts +8 -0
  363. package/src/logger.ts +96 -0
  364. package/src/mcp/base-server.ts +502 -0
  365. package/src/mcp/base-tools.ts +185 -0
  366. package/src/mcp/chrome-path.ts +48 -0
  367. package/src/mcp/index.ts +7 -0
  368. package/src/mcp/inject-report-html-plugin.ts +119 -0
  369. package/src/mcp/launcher-helper.ts +200 -0
  370. package/src/mcp/tool-generator.ts +429 -0
  371. package/src/mcp/types.ts +112 -0
  372. package/src/node/fs.ts +84 -0
  373. package/src/node/index.ts +2 -0
  374. package/src/node/port.ts +37 -0
  375. package/src/oss/demo.ts +61 -0
  376. package/src/oss/index.ts +187 -0
  377. package/src/polyfills/async-hooks.ts +6 -0
  378. package/src/polyfills/index.ts +4 -0
  379. package/src/types/index.ts +52 -0
  380. package/src/us-keyboard-layout.ts +723 -0
  381. package/src/utils.ts +149 -0
  382. package/src/zod-schema-utils.ts +133 -0
@@ -0,0 +1,297 @@
1
+ import { parseBase64 } from "@xiuchang-midscene/shared/img";
2
+ import { z } from "zod";
3
+ import { getZodDescription, getZodTypeName } from "../zod-schema-utils.mjs";
4
+ function getErrorMessage(error) {
5
+ return error instanceof Error ? error.message : String(error);
6
+ }
7
+ function describeActionForMCP(action) {
8
+ const actionDesc = action.description || `Execute ${action.name} action`;
9
+ if (!action.paramSchema) return `${action.name} action, ${actionDesc}`;
10
+ const schema = action.paramSchema;
11
+ const isZodObjectType = schema._def?.typeName === 'ZodObject';
12
+ if (!isZodObjectType || !schema.shape) {
13
+ const typeName = getZodTypeName(schema);
14
+ const description = getZodDescription(schema);
15
+ const paramDesc = description ? `${typeName} - ${description}` : typeName;
16
+ return `${action.name} action, ${actionDesc}. Parameter: ${paramDesc}`;
17
+ }
18
+ const paramDescriptions = [];
19
+ for (const [key, field] of Object.entries(schema.shape))if (field && 'object' == typeof field) {
20
+ const isFieldOptional = 'function' == typeof field.isOptional && field.isOptional();
21
+ const typeName = getZodTypeName(field);
22
+ const description = getZodDescription(field);
23
+ let paramStr = `${key}${isFieldOptional ? '?' : ''} (${typeName})`;
24
+ if (description) paramStr += ` - ${description}`;
25
+ paramDescriptions.push(paramStr);
26
+ }
27
+ if (0 === paramDescriptions.length) return `${action.name} action, ${actionDesc}`;
28
+ return `${action.name} action, ${actionDesc}. Parameters: ${paramDescriptions.join('; ')}`;
29
+ }
30
+ function isZodOptional(value) {
31
+ return '_def' in value && value._def?.typeName === 'ZodOptional';
32
+ }
33
+ function isZodObject(value) {
34
+ return '_def' in value && value._def?.typeName === 'ZodObject' && 'shape' in value;
35
+ }
36
+ function unwrapOptional(value) {
37
+ if (isZodOptional(value)) return {
38
+ innerValue: value._def.innerType,
39
+ isOptional: true
40
+ };
41
+ return {
42
+ innerValue: value,
43
+ isOptional: false
44
+ };
45
+ }
46
+ function isLocateField(value) {
47
+ if (!isZodObject(value)) return false;
48
+ return 'prompt' in value.shape;
49
+ }
50
+ function makePromptOptional(value, wrapInOptional) {
51
+ const newShape = {
52
+ ...value.shape
53
+ };
54
+ newShape.prompt = value.shape.prompt.optional();
55
+ let newSchema = z.object(newShape).passthrough();
56
+ if (wrapInOptional) newSchema = newSchema.optional();
57
+ return newSchema;
58
+ }
59
+ function transformSchemaField(key, value) {
60
+ const { innerValue, isOptional } = unwrapOptional(value);
61
+ if (isZodObject(innerValue) && isLocateField(innerValue)) return [
62
+ key,
63
+ makePromptOptional(innerValue, isOptional)
64
+ ];
65
+ return [
66
+ key,
67
+ value
68
+ ];
69
+ }
70
+ function extractActionSchema(paramSchema) {
71
+ if (!paramSchema) return {};
72
+ const schema = paramSchema;
73
+ if (!isZodObject(schema)) return schema;
74
+ return Object.fromEntries(Object.entries(schema.shape).map(([key, value])=>transformSchemaField(key, value)));
75
+ }
76
+ function serializeArgsToDescription(args) {
77
+ try {
78
+ return Object.entries(args).map(([key, value])=>{
79
+ if ('object' == typeof value && null !== value) try {
80
+ return `${key}: ${JSON.stringify(value)}`;
81
+ } catch {
82
+ return `${key}: [object]`;
83
+ }
84
+ return `${key}: "${value}"`;
85
+ }).join(', ');
86
+ } catch (error) {
87
+ const errorMessage = getErrorMessage(error);
88
+ console.error('Error serializing args:', errorMessage);
89
+ return `[args serialization failed: ${errorMessage}]`;
90
+ }
91
+ }
92
+ function buildActionInstruction(actionName, args) {
93
+ const locatePrompt = args.locate && 'object' == typeof args.locate ? args.locate.prompt : void 0;
94
+ switch(actionName){
95
+ case 'Tap':
96
+ return locatePrompt ? `Tap on "${locatePrompt}"` : 'Tap';
97
+ case 'Input':
98
+ {
99
+ const value = args.value ?? args.content ?? '';
100
+ return locatePrompt ? `Input "${value}" into "${locatePrompt}"` : `Input "${value}"`;
101
+ }
102
+ case 'Scroll':
103
+ {
104
+ const direction = args.direction ?? 'down';
105
+ return locatePrompt ? `Scroll ${direction} on "${locatePrompt}"` : `Scroll ${direction}`;
106
+ }
107
+ case 'Hover':
108
+ return locatePrompt ? `Hover over "${locatePrompt}"` : 'Hover';
109
+ case 'KeyboardPress':
110
+ {
111
+ const key = args.value ?? args.key ?? '';
112
+ return `Press key "${key}"`;
113
+ }
114
+ default:
115
+ {
116
+ const argsDescription = serializeArgsToDescription(args);
117
+ return argsDescription ? `${actionName}: ${argsDescription}` : actionName;
118
+ }
119
+ }
120
+ }
121
+ async function captureScreenshotResult(agent, actionName) {
122
+ try {
123
+ const screenshot = await agent.page?.screenshotBase64();
124
+ if (!screenshot) return {
125
+ content: [
126
+ {
127
+ type: 'text',
128
+ text: `Action "${actionName}" completed.`
129
+ }
130
+ ]
131
+ };
132
+ const { mimeType, body } = parseBase64(screenshot);
133
+ return {
134
+ content: [
135
+ {
136
+ type: 'text',
137
+ text: `Action "${actionName}" completed.`
138
+ },
139
+ {
140
+ type: 'image',
141
+ data: body,
142
+ mimeType
143
+ }
144
+ ]
145
+ };
146
+ } catch (error) {
147
+ const errorMessage = getErrorMessage(error);
148
+ console.error('Error capturing screenshot:', errorMessage);
149
+ return {
150
+ content: [
151
+ {
152
+ type: 'text',
153
+ text: `Action "${actionName}" completed (screenshot unavailable: ${errorMessage})`
154
+ }
155
+ ]
156
+ };
157
+ }
158
+ }
159
+ function createErrorResult(message) {
160
+ return {
161
+ content: [
162
+ {
163
+ type: 'text',
164
+ text: message
165
+ }
166
+ ],
167
+ isError: true
168
+ };
169
+ }
170
+ async function captureFailureResult(agent, actionName, errorMessage) {
171
+ const warningText = `Warning: Action "${actionName}" failed: ${errorMessage}. Check the screenshot below for the current page state and decide how to proceed.`;
172
+ try {
173
+ const screenshot = await agent.page?.screenshotBase64();
174
+ if (!screenshot) return {
175
+ content: [
176
+ {
177
+ type: 'text',
178
+ text: warningText
179
+ }
180
+ ]
181
+ };
182
+ const { mimeType, body } = parseBase64(screenshot);
183
+ return {
184
+ content: [
185
+ {
186
+ type: 'text',
187
+ text: warningText
188
+ },
189
+ {
190
+ type: 'image',
191
+ data: body,
192
+ mimeType
193
+ }
194
+ ]
195
+ };
196
+ } catch {
197
+ return {
198
+ content: [
199
+ {
200
+ type: 'text',
201
+ text: warningText
202
+ }
203
+ ]
204
+ };
205
+ }
206
+ }
207
+ function generateToolsFromActionSpace(actionSpace, getAgent) {
208
+ return actionSpace.map((action)=>{
209
+ const schema = extractActionSchema(action.paramSchema);
210
+ return {
211
+ name: action.name,
212
+ description: describeActionForMCP(action),
213
+ schema,
214
+ handler: async (args)=>{
215
+ try {
216
+ const agent = await getAgent();
217
+ if (agent.aiAction) {
218
+ const instruction = buildActionInstruction(action.name, args);
219
+ try {
220
+ await agent.aiAction(instruction);
221
+ } catch (error) {
222
+ const errorMessage = getErrorMessage(error);
223
+ console.error(`Error executing action "${action.name}":`, errorMessage);
224
+ return await captureFailureResult(agent, action.name, errorMessage);
225
+ }
226
+ }
227
+ return await captureScreenshotResult(agent, action.name);
228
+ } catch (error) {
229
+ const errorMessage = getErrorMessage(error);
230
+ console.error(`Error in handler for "${action.name}":`, errorMessage);
231
+ return createErrorResult(`Failed to get agent or execute action "${action.name}": ${errorMessage}`);
232
+ }
233
+ }
234
+ };
235
+ });
236
+ }
237
+ function generateCommonTools(getAgent) {
238
+ return [
239
+ {
240
+ name: 'take_screenshot',
241
+ description: 'Capture screenshot of current page/screen',
242
+ schema: {},
243
+ handler: async ()=>{
244
+ try {
245
+ const agent = await getAgent();
246
+ const screenshot = await agent.page?.screenshotBase64();
247
+ if (!screenshot) return createErrorResult('Screenshot not available');
248
+ const { mimeType, body } = parseBase64(screenshot);
249
+ return {
250
+ content: [
251
+ {
252
+ type: 'image',
253
+ data: body,
254
+ mimeType
255
+ }
256
+ ]
257
+ };
258
+ } catch (error) {
259
+ const errorMessage = getErrorMessage(error);
260
+ console.error('Error taking screenshot:', errorMessage);
261
+ return createErrorResult(`Failed to capture screenshot: ${errorMessage}`);
262
+ }
263
+ }
264
+ },
265
+ {
266
+ name: 'act',
267
+ description: 'Execute a natural language action. The AI will plan and perform multi-step operations in a single invocation, useful for transient UI interactions (e.g., Spotlight, dropdown menus) that disappear between separate commands.',
268
+ schema: {
269
+ prompt: z.string().describe('Natural language description of the action to perform, e.g. "press Command+Space, type Safari, press Enter"')
270
+ },
271
+ handler: async (args)=>{
272
+ const prompt = args.prompt;
273
+ try {
274
+ const agent = await getAgent();
275
+ if (!agent.aiAction) return createErrorResult('act is not supported by this agent');
276
+ const result = await agent.aiAction(prompt, {
277
+ deepThink: false
278
+ });
279
+ const screenshotResult = await captureScreenshotResult(agent, 'act');
280
+ if (result) {
281
+ const message = 'string' == typeof result ? result : JSON.stringify(result);
282
+ screenshotResult.content.unshift({
283
+ type: 'text',
284
+ text: `Task finished, message: ${message}`
285
+ });
286
+ }
287
+ return screenshotResult;
288
+ } catch (error) {
289
+ const errorMessage = getErrorMessage(error);
290
+ console.error('Error executing act:', errorMessage);
291
+ return createErrorResult(`Failed to execute act: ${errorMessage}`);
292
+ }
293
+ }
294
+ }
295
+ ];
296
+ }
297
+ export { generateCommonTools, generateToolsFromActionSpace };
@@ -0,0 +1,297 @@
1
+ import { parseBase64 } from "@midscene/shared/img";
2
+ import { z } from "zod";
3
+ import { getZodDescription, getZodTypeName } from "../zod-schema-utils.mjs";
4
+ function getErrorMessage(error) {
5
+ return error instanceof Error ? error.message : String(error);
6
+ }
7
+ function describeActionForMCP(action) {
8
+ const actionDesc = action.description || `Execute ${action.name} action`;
9
+ if (!action.paramSchema) return `${action.name} action, ${actionDesc}`;
10
+ const schema = action.paramSchema;
11
+ const isZodObjectType = schema._def?.typeName === 'ZodObject';
12
+ if (!isZodObjectType || !schema.shape) {
13
+ const typeName = getZodTypeName(schema);
14
+ const description = getZodDescription(schema);
15
+ const paramDesc = description ? `${typeName} - ${description}` : typeName;
16
+ return `${action.name} action, ${actionDesc}. Parameter: ${paramDesc}`;
17
+ }
18
+ const paramDescriptions = [];
19
+ for (const [key, field] of Object.entries(schema.shape))if (field && 'object' == typeof field) {
20
+ const isFieldOptional = 'function' == typeof field.isOptional && field.isOptional();
21
+ const typeName = getZodTypeName(field);
22
+ const description = getZodDescription(field);
23
+ let paramStr = `${key}${isFieldOptional ? '?' : ''} (${typeName})`;
24
+ if (description) paramStr += ` - ${description}`;
25
+ paramDescriptions.push(paramStr);
26
+ }
27
+ if (0 === paramDescriptions.length) return `${action.name} action, ${actionDesc}`;
28
+ return `${action.name} action, ${actionDesc}. Parameters: ${paramDescriptions.join('; ')}`;
29
+ }
30
+ function isZodOptional(value) {
31
+ return '_def' in value && value._def?.typeName === 'ZodOptional';
32
+ }
33
+ function isZodObject(value) {
34
+ return '_def' in value && value._def?.typeName === 'ZodObject' && 'shape' in value;
35
+ }
36
+ function unwrapOptional(value) {
37
+ if (isZodOptional(value)) return {
38
+ innerValue: value._def.innerType,
39
+ isOptional: true
40
+ };
41
+ return {
42
+ innerValue: value,
43
+ isOptional: false
44
+ };
45
+ }
46
+ function isLocateField(value) {
47
+ if (!isZodObject(value)) return false;
48
+ return 'prompt' in value.shape;
49
+ }
50
+ function makePromptOptional(value, wrapInOptional) {
51
+ const newShape = {
52
+ ...value.shape
53
+ };
54
+ newShape.prompt = value.shape.prompt.optional();
55
+ let newSchema = z.object(newShape).passthrough();
56
+ if (wrapInOptional) newSchema = newSchema.optional();
57
+ return newSchema;
58
+ }
59
+ function transformSchemaField(key, value) {
60
+ const { innerValue, isOptional } = unwrapOptional(value);
61
+ if (isZodObject(innerValue) && isLocateField(innerValue)) return [
62
+ key,
63
+ makePromptOptional(innerValue, isOptional)
64
+ ];
65
+ return [
66
+ key,
67
+ value
68
+ ];
69
+ }
70
+ function extractActionSchema(paramSchema) {
71
+ if (!paramSchema) return {};
72
+ const schema = paramSchema;
73
+ if (!isZodObject(schema)) return schema;
74
+ return Object.fromEntries(Object.entries(schema.shape).map(([key, value])=>transformSchemaField(key, value)));
75
+ }
76
+ function serializeArgsToDescription(args) {
77
+ try {
78
+ return Object.entries(args).map(([key, value])=>{
79
+ if ('object' == typeof value && null !== value) try {
80
+ return `${key}: ${JSON.stringify(value)}`;
81
+ } catch {
82
+ return `${key}: [object]`;
83
+ }
84
+ return `${key}: "${value}"`;
85
+ }).join(', ');
86
+ } catch (error) {
87
+ const errorMessage = getErrorMessage(error);
88
+ console.error('Error serializing args:', errorMessage);
89
+ return `[args serialization failed: ${errorMessage}]`;
90
+ }
91
+ }
92
+ function buildActionInstruction(actionName, args) {
93
+ const locatePrompt = args.locate && 'object' == typeof args.locate ? args.locate.prompt : void 0;
94
+ switch(actionName){
95
+ case 'Tap':
96
+ return locatePrompt ? `Tap on "${locatePrompt}"` : 'Tap';
97
+ case 'Input':
98
+ {
99
+ const value = args.value ?? args.content ?? '';
100
+ return locatePrompt ? `Input "${value}" into "${locatePrompt}"` : `Input "${value}"`;
101
+ }
102
+ case 'Scroll':
103
+ {
104
+ const direction = args.direction ?? 'down';
105
+ return locatePrompt ? `Scroll ${direction} on "${locatePrompt}"` : `Scroll ${direction}`;
106
+ }
107
+ case 'Hover':
108
+ return locatePrompt ? `Hover over "${locatePrompt}"` : 'Hover';
109
+ case 'KeyboardPress':
110
+ {
111
+ const key = args.value ?? args.key ?? '';
112
+ return `Press key "${key}"`;
113
+ }
114
+ default:
115
+ {
116
+ const argsDescription = serializeArgsToDescription(args);
117
+ return argsDescription ? `${actionName}: ${argsDescription}` : actionName;
118
+ }
119
+ }
120
+ }
121
+ async function captureScreenshotResult(agent, actionName) {
122
+ try {
123
+ const screenshot = await agent.page?.screenshotBase64();
124
+ if (!screenshot) return {
125
+ content: [
126
+ {
127
+ type: 'text',
128
+ text: `Action "${actionName}" completed.`
129
+ }
130
+ ]
131
+ };
132
+ const { mimeType, body } = parseBase64(screenshot);
133
+ return {
134
+ content: [
135
+ {
136
+ type: 'text',
137
+ text: `Action "${actionName}" completed.`
138
+ },
139
+ {
140
+ type: 'image',
141
+ data: body,
142
+ mimeType
143
+ }
144
+ ]
145
+ };
146
+ } catch (error) {
147
+ const errorMessage = getErrorMessage(error);
148
+ console.error('Error capturing screenshot:', errorMessage);
149
+ return {
150
+ content: [
151
+ {
152
+ type: 'text',
153
+ text: `Action "${actionName}" completed (screenshot unavailable: ${errorMessage})`
154
+ }
155
+ ]
156
+ };
157
+ }
158
+ }
159
+ function createErrorResult(message) {
160
+ return {
161
+ content: [
162
+ {
163
+ type: 'text',
164
+ text: message
165
+ }
166
+ ],
167
+ isError: true
168
+ };
169
+ }
170
+ async function captureFailureResult(agent, actionName, errorMessage) {
171
+ const warningText = `Warning: Action "${actionName}" failed: ${errorMessage}. Check the screenshot below for the current page state and decide how to proceed.`;
172
+ try {
173
+ const screenshot = await agent.page?.screenshotBase64();
174
+ if (!screenshot) return {
175
+ content: [
176
+ {
177
+ type: 'text',
178
+ text: warningText
179
+ }
180
+ ]
181
+ };
182
+ const { mimeType, body } = parseBase64(screenshot);
183
+ return {
184
+ content: [
185
+ {
186
+ type: 'text',
187
+ text: warningText
188
+ },
189
+ {
190
+ type: 'image',
191
+ data: body,
192
+ mimeType
193
+ }
194
+ ]
195
+ };
196
+ } catch {
197
+ return {
198
+ content: [
199
+ {
200
+ type: 'text',
201
+ text: warningText
202
+ }
203
+ ]
204
+ };
205
+ }
206
+ }
207
+ function generateToolsFromActionSpace(actionSpace, getAgent) {
208
+ return actionSpace.map((action)=>{
209
+ const schema = extractActionSchema(action.paramSchema);
210
+ return {
211
+ name: action.name,
212
+ description: describeActionForMCP(action),
213
+ schema,
214
+ handler: async (args)=>{
215
+ try {
216
+ const agent = await getAgent();
217
+ if (agent.aiAction) {
218
+ const instruction = buildActionInstruction(action.name, args);
219
+ try {
220
+ await agent.aiAction(instruction);
221
+ } catch (error) {
222
+ const errorMessage = getErrorMessage(error);
223
+ console.error(`Error executing action "${action.name}":`, errorMessage);
224
+ return await captureFailureResult(agent, action.name, errorMessage);
225
+ }
226
+ }
227
+ return await captureScreenshotResult(agent, action.name);
228
+ } catch (error) {
229
+ const errorMessage = getErrorMessage(error);
230
+ console.error(`Error in handler for "${action.name}":`, errorMessage);
231
+ return createErrorResult(`Failed to get agent or execute action "${action.name}": ${errorMessage}`);
232
+ }
233
+ }
234
+ };
235
+ });
236
+ }
237
+ function generateCommonTools(getAgent) {
238
+ return [
239
+ {
240
+ name: 'take_screenshot',
241
+ description: 'Capture screenshot of current page/screen',
242
+ schema: {},
243
+ handler: async ()=>{
244
+ try {
245
+ const agent = await getAgent();
246
+ const screenshot = await agent.page?.screenshotBase64();
247
+ if (!screenshot) return createErrorResult('Screenshot not available');
248
+ const { mimeType, body } = parseBase64(screenshot);
249
+ return {
250
+ content: [
251
+ {
252
+ type: 'image',
253
+ data: body,
254
+ mimeType
255
+ }
256
+ ]
257
+ };
258
+ } catch (error) {
259
+ const errorMessage = getErrorMessage(error);
260
+ console.error('Error taking screenshot:', errorMessage);
261
+ return createErrorResult(`Failed to capture screenshot: ${errorMessage}`);
262
+ }
263
+ }
264
+ },
265
+ {
266
+ name: 'act',
267
+ description: 'Execute a natural language action. The AI will plan and perform multi-step operations in a single invocation, useful for transient UI interactions (e.g., Spotlight, dropdown menus) that disappear between separate commands.',
268
+ schema: {
269
+ prompt: z.string().describe('Natural language description of the action to perform, e.g. "press Command+Space, type Safari, press Enter"')
270
+ },
271
+ handler: async (args)=>{
272
+ const prompt = args.prompt;
273
+ try {
274
+ const agent = await getAgent();
275
+ if (!agent.aiAction) return createErrorResult('act is not supported by this agent');
276
+ const result = await agent.aiAction(prompt, {
277
+ deepThink: false
278
+ });
279
+ const screenshotResult = await captureScreenshotResult(agent, 'act');
280
+ if (result) {
281
+ const message = 'string' == typeof result ? result : JSON.stringify(result);
282
+ screenshotResult.content.unshift({
283
+ type: 'text',
284
+ text: `Task finished, message: ${message}`
285
+ });
286
+ }
287
+ return screenshotResult;
288
+ } catch (error) {
289
+ const errorMessage = getErrorMessage(error);
290
+ console.error('Error executing act:', errorMessage);
291
+ return createErrorResult(`Failed to execute act: ${errorMessage}`);
292
+ }
293
+ }
294
+ }
295
+ ];
296
+ }
297
+ export { generateCommonTools, generateToolsFromActionSpace };
@@ -0,0 +1,3 @@
1
+ const defaultAppLoadingTimeoutMs = 10000;
2
+ const defaultAppLoadingCheckIntervalMs = 2000;
3
+ export { defaultAppLoadingCheckIntervalMs, defaultAppLoadingTimeoutMs };
@@ -0,0 +1,3 @@
1
+ const defaultAppLoadingTimeoutMs = 10000;
2
+ const defaultAppLoadingCheckIntervalMs = 2000;
3
+ export { defaultAppLoadingCheckIntervalMs, defaultAppLoadingTimeoutMs };