@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
package/README.md ADDED
@@ -0,0 +1,9 @@
1
+ ## Documentation
2
+
3
+ An AI-powered automation SDK can control the page, perform assertions, and extract data in JSON format using natural language.
4
+
5
+ See https://midscenejs.com/ for details.
6
+
7
+ ## License
8
+
9
+ Midscene is MIT licensed.
@@ -0,0 +1,109 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) Object.defineProperty(obj, key, {
3
+ value: value,
4
+ enumerable: true,
5
+ configurable: true,
6
+ writable: true
7
+ });
8
+ else obj[key] = value;
9
+ return obj;
10
+ }
11
+ class IndexedDBManager {
12
+ initDB() {
13
+ return new Promise((resolve, reject)=>{
14
+ const request = indexedDB.open(this.dbName, this.version);
15
+ request.onerror = ()=>reject(request.error);
16
+ request.onsuccess = ()=>resolve(request.result);
17
+ request.onupgradeneeded = (event)=>{
18
+ const db = event.target.result;
19
+ this.storeConfigs.forEach(({ name, keyPath })=>{
20
+ if (!db.objectStoreNames.contains(name)) {
21
+ const store = db.createObjectStore(name, {
22
+ keyPath
23
+ });
24
+ store.createIndex('timestamp', 'timestamp', {
25
+ unique: false
26
+ });
27
+ }
28
+ });
29
+ };
30
+ });
31
+ }
32
+ async withTransaction(storeNames, mode, operation) {
33
+ const db = await this.dbPromise;
34
+ const transaction = db.transaction(storeNames, mode);
35
+ const stores = Array.isArray(storeNames) ? storeNames.map((name)=>transaction.objectStore(name)) : transaction.objectStore(storeNames);
36
+ return operation(stores);
37
+ }
38
+ promisifyRequest(request) {
39
+ return new Promise((resolve, reject)=>{
40
+ request.onsuccess = ()=>resolve(request.result);
41
+ request.onerror = ()=>reject(request.error);
42
+ });
43
+ }
44
+ async put(storeName, data) {
45
+ await this.withTransaction(storeName, 'readwrite', async (store)=>{
46
+ await this.promisifyRequest(store.put(data));
47
+ });
48
+ }
49
+ async get(storeName, key) {
50
+ return this.withTransaction(storeName, 'readonly', async (store)=>this.promisifyRequest(store.get(key)));
51
+ }
52
+ async getAll(storeName, sortByTimestamp = true) {
53
+ return this.withTransaction(storeName, 'readonly', async (store)=>{
54
+ const objectStore = store;
55
+ const results = sortByTimestamp ? await this.promisifyRequest(objectStore.index('timestamp').getAll()) : await this.promisifyRequest(objectStore.getAll());
56
+ return sortByTimestamp ? results.sort((a, b)=>a.timestamp - b.timestamp) : results;
57
+ });
58
+ }
59
+ async clear(storeName) {
60
+ await this.withTransaction(storeName, 'readwrite', async (store)=>{
61
+ await this.promisifyRequest(store.clear());
62
+ });
63
+ }
64
+ async delete(storeName, key) {
65
+ await this.withTransaction(storeName, 'readwrite', async (store)=>{
66
+ await this.promisifyRequest(store.delete(key));
67
+ });
68
+ }
69
+ async count(storeName) {
70
+ return this.withTransaction(storeName, 'readonly', async (store)=>this.promisifyRequest(store.count()));
71
+ }
72
+ getDBPromise() {
73
+ return this.dbPromise;
74
+ }
75
+ constructor(dbName, version, storeConfigs){
76
+ _define_property(this, "dbPromise", void 0);
77
+ _define_property(this, "dbName", void 0);
78
+ _define_property(this, "version", void 0);
79
+ _define_property(this, "storeConfigs", void 0);
80
+ this.dbName = dbName;
81
+ this.version = version;
82
+ this.storeConfigs = storeConfigs;
83
+ this.dbPromise = this.initDB();
84
+ }
85
+ }
86
+ const withErrorHandling = async (operation, errorMessage, defaultValue, onQuotaExceeded)=>{
87
+ try {
88
+ return await operation();
89
+ } catch (e) {
90
+ console.error(errorMessage, e);
91
+ if (e instanceof Error && 'QuotaExceededError' === e.name && onQuotaExceeded) {
92
+ console.log('Storage quota exceeded, running cleanup...');
93
+ await onQuotaExceeded();
94
+ }
95
+ return defaultValue;
96
+ }
97
+ };
98
+ const createCleanupFunction = (dbManager, storeName, maxItems)=>async ()=>{
99
+ try {
100
+ const results = await dbManager.getAll(storeName);
101
+ if (results.length > maxItems) {
102
+ const toDelete = results.sort((a, b)=>a.timestamp - b.timestamp).slice(0, results.length - maxItems);
103
+ await Promise.all(toDelete.map((item)=>dbManager.delete(storeName, item.id)));
104
+ }
105
+ } catch (e) {
106
+ console.error(`Failed to cleanup ${storeName}:`, e);
107
+ }
108
+ };
109
+ export { IndexedDBManager, createCleanupFunction, withErrorHandling };
@@ -0,0 +1,109 @@
1
+ function _define_property(obj, key, value) {
2
+ if (key in obj) Object.defineProperty(obj, key, {
3
+ value: value,
4
+ enumerable: true,
5
+ configurable: true,
6
+ writable: true
7
+ });
8
+ else obj[key] = value;
9
+ return obj;
10
+ }
11
+ class IndexedDBManager {
12
+ initDB() {
13
+ return new Promise((resolve, reject)=>{
14
+ const request = indexedDB.open(this.dbName, this.version);
15
+ request.onerror = ()=>reject(request.error);
16
+ request.onsuccess = ()=>resolve(request.result);
17
+ request.onupgradeneeded = (event)=>{
18
+ const db = event.target.result;
19
+ this.storeConfigs.forEach(({ name, keyPath })=>{
20
+ if (!db.objectStoreNames.contains(name)) {
21
+ const store = db.createObjectStore(name, {
22
+ keyPath
23
+ });
24
+ store.createIndex('timestamp', 'timestamp', {
25
+ unique: false
26
+ });
27
+ }
28
+ });
29
+ };
30
+ });
31
+ }
32
+ async withTransaction(storeNames, mode, operation) {
33
+ const db = await this.dbPromise;
34
+ const transaction = db.transaction(storeNames, mode);
35
+ const stores = Array.isArray(storeNames) ? storeNames.map((name)=>transaction.objectStore(name)) : transaction.objectStore(storeNames);
36
+ return operation(stores);
37
+ }
38
+ promisifyRequest(request) {
39
+ return new Promise((resolve, reject)=>{
40
+ request.onsuccess = ()=>resolve(request.result);
41
+ request.onerror = ()=>reject(request.error);
42
+ });
43
+ }
44
+ async put(storeName, data) {
45
+ await this.withTransaction(storeName, 'readwrite', async (store)=>{
46
+ await this.promisifyRequest(store.put(data));
47
+ });
48
+ }
49
+ async get(storeName, key) {
50
+ return this.withTransaction(storeName, 'readonly', async (store)=>this.promisifyRequest(store.get(key)));
51
+ }
52
+ async getAll(storeName, sortByTimestamp = true) {
53
+ return this.withTransaction(storeName, 'readonly', async (store)=>{
54
+ const objectStore = store;
55
+ const results = sortByTimestamp ? await this.promisifyRequest(objectStore.index('timestamp').getAll()) : await this.promisifyRequest(objectStore.getAll());
56
+ return sortByTimestamp ? results.sort((a, b)=>a.timestamp - b.timestamp) : results;
57
+ });
58
+ }
59
+ async clear(storeName) {
60
+ await this.withTransaction(storeName, 'readwrite', async (store)=>{
61
+ await this.promisifyRequest(store.clear());
62
+ });
63
+ }
64
+ async delete(storeName, key) {
65
+ await this.withTransaction(storeName, 'readwrite', async (store)=>{
66
+ await this.promisifyRequest(store.delete(key));
67
+ });
68
+ }
69
+ async count(storeName) {
70
+ return this.withTransaction(storeName, 'readonly', async (store)=>this.promisifyRequest(store.count()));
71
+ }
72
+ getDBPromise() {
73
+ return this.dbPromise;
74
+ }
75
+ constructor(dbName, version, storeConfigs){
76
+ _define_property(this, "dbPromise", void 0);
77
+ _define_property(this, "dbName", void 0);
78
+ _define_property(this, "version", void 0);
79
+ _define_property(this, "storeConfigs", void 0);
80
+ this.dbName = dbName;
81
+ this.version = version;
82
+ this.storeConfigs = storeConfigs;
83
+ this.dbPromise = this.initDB();
84
+ }
85
+ }
86
+ const withErrorHandling = async (operation, errorMessage, defaultValue, onQuotaExceeded)=>{
87
+ try {
88
+ return await operation();
89
+ } catch (e) {
90
+ console.error(errorMessage, e);
91
+ if (e instanceof Error && 'QuotaExceededError' === e.name && onQuotaExceeded) {
92
+ console.log('Storage quota exceeded, running cleanup...');
93
+ await onQuotaExceeded();
94
+ }
95
+ return defaultValue;
96
+ }
97
+ };
98
+ const createCleanupFunction = (dbManager, storeName, maxItems)=>async ()=>{
99
+ try {
100
+ const results = await dbManager.getAll(storeName);
101
+ if (results.length > maxItems) {
102
+ const toDelete = results.sort((a, b)=>a.timestamp - b.timestamp).slice(0, results.length - maxItems);
103
+ await Promise.all(toDelete.map((item)=>dbManager.delete(storeName, item.id)));
104
+ }
105
+ } catch (e) {
106
+ console.error(`Failed to cleanup ${storeName}:`, e);
107
+ }
108
+ };
109
+ export { IndexedDBManager, createCleanupFunction, withErrorHandling };
@@ -0,0 +1,31 @@
1
+ import node_fs from "node:fs";
2
+ import node_path from "node:path";
3
+ const createCopyStaticPlugin = (options)=>({
4
+ name: options.pluginName || 'copy-static',
5
+ setup (api) {
6
+ api.onAfterBuild(async ()=>{
7
+ const { srcDir, destDir, faviconPath } = options;
8
+ const stat = await node_fs.promises.lstat(destDir).catch(()=>null);
9
+ if (stat?.isSymbolicLink()) await node_fs.promises.unlink(destDir);
10
+ await node_fs.promises.mkdir(destDir, {
11
+ recursive: true
12
+ });
13
+ await node_fs.promises.cp(srcDir, destDir, {
14
+ recursive: true
15
+ });
16
+ console.log(`Copied build artifacts from ${srcDir} to ${destDir}`);
17
+ if (faviconPath) {
18
+ const faviconDest = node_path.join(destDir, 'favicon.ico');
19
+ await node_fs.promises.copyFile(faviconPath, faviconDest);
20
+ console.log(`Copied favicon from ${faviconPath} to ${faviconDest}`);
21
+ }
22
+ });
23
+ }
24
+ });
25
+ const createPlaygroundCopyPlugin = (srcDir, destDir, pluginName, faviconSrc)=>createCopyStaticPlugin({
26
+ srcDir,
27
+ destDir,
28
+ faviconPath: faviconSrc,
29
+ pluginName
30
+ });
31
+ export { createCopyStaticPlugin, createPlaygroundCopyPlugin };
@@ -0,0 +1,31 @@
1
+ import node_fs from "node:fs";
2
+ import node_path from "node:path";
3
+ const createCopyStaticPlugin = (options)=>({
4
+ name: options.pluginName || 'copy-static',
5
+ setup (api) {
6
+ api.onAfterBuild(async ()=>{
7
+ const { srcDir, destDir, faviconPath } = options;
8
+ const stat = await node_fs.promises.lstat(destDir).catch(()=>null);
9
+ if (stat?.isSymbolicLink()) await node_fs.promises.unlink(destDir);
10
+ await node_fs.promises.mkdir(destDir, {
11
+ recursive: true
12
+ });
13
+ await node_fs.promises.cp(srcDir, destDir, {
14
+ recursive: true
15
+ });
16
+ console.log(`Copied build artifacts from ${srcDir} to ${destDir}`);
17
+ if (faviconPath) {
18
+ const faviconDest = node_path.join(destDir, 'favicon.ico');
19
+ await node_fs.promises.copyFile(faviconPath, faviconDest);
20
+ console.log(`Copied favicon from ${faviconPath} to ${faviconDest}`);
21
+ }
22
+ });
23
+ }
24
+ });
25
+ const createPlaygroundCopyPlugin = (srcDir, destDir, pluginName, faviconSrc)=>createCopyStaticPlugin({
26
+ srcDir,
27
+ destDir,
28
+ faviconPath: faviconSrc,
29
+ pluginName
30
+ });
31
+ export { createCopyStaticPlugin, createPlaygroundCopyPlugin };
@@ -0,0 +1,4 @@
1
+ const commonIgnoreWarnings = [
2
+ /Critical dependency: the request of a dependency is an expression/
3
+ ];
4
+ export { commonIgnoreWarnings };
@@ -0,0 +1,4 @@
1
+ const commonIgnoreWarnings = [
2
+ /Critical dependency: the request of a dependency is an expression/
3
+ ];
4
+ export { commonIgnoreWarnings };
@@ -0,0 +1,140 @@
1
+ import { existsSync, writeFileSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import dotenv from "dotenv";
5
+ import { getDebug } from "../logger.mjs";
6
+ function _define_property(obj, key, value) {
7
+ if (key in obj) Object.defineProperty(obj, key, {
8
+ value: value,
9
+ enumerable: true,
10
+ configurable: true,
11
+ writable: true
12
+ });
13
+ else obj[key] = value;
14
+ return obj;
15
+ }
16
+ const debug = getDebug('cli-runner');
17
+ class CLIError extends Error {
18
+ constructor(message, exitCode = 1){
19
+ super(message), _define_property(this, "exitCode", void 0), this.exitCode = exitCode;
20
+ }
21
+ }
22
+ function parseValue(raw) {
23
+ if (raw.startsWith('{') || raw.startsWith('[')) try {
24
+ return JSON.parse(raw);
25
+ } catch {}
26
+ if (/^-?\d+(\.\d+)?$/.test(raw)) return Number(raw);
27
+ return raw;
28
+ }
29
+ function parseCliArgs(args) {
30
+ const result = {};
31
+ for(let i = 0; i < args.length; i++){
32
+ const arg = args[i];
33
+ if (!arg.startsWith('--')) continue;
34
+ const body = arg.slice(2);
35
+ const eqIdx = body.indexOf('=');
36
+ if (eqIdx >= 0) result[body.slice(0, eqIdx)] = parseValue(body.slice(eqIdx + 1));
37
+ else if (args[i + 1] && !args[i + 1].startsWith('--')) {
38
+ i++;
39
+ result[body] = parseValue(args[i]);
40
+ } else result[body] = true;
41
+ }
42
+ return result;
43
+ }
44
+ function outputContentItem(item, isError) {
45
+ switch(item.type){
46
+ case 'text':
47
+ if (isError) console.error(item.text);
48
+ else console.log(item.text);
49
+ break;
50
+ case 'image':
51
+ {
52
+ const filename = `screenshot-${Date.now()}.png`;
53
+ const filepath = join(tmpdir(), filename);
54
+ writeFileSync(filepath, Buffer.from(item.data, 'base64'));
55
+ console.log(`Screenshot saved: ${filepath}`);
56
+ break;
57
+ }
58
+ default:
59
+ console.log(`[${item.type} content not displayed in CLI]`);
60
+ }
61
+ }
62
+ function outputResult(result) {
63
+ for (const item of result.content)outputContentItem(item, result.isError ?? false);
64
+ }
65
+ function removePrefix(name, prefix) {
66
+ if (prefix && name.startsWith(prefix)) return name.slice(prefix.length);
67
+ return name;
68
+ }
69
+ function printCommandHelp(scriptName, cmd) {
70
+ const { def } = cmd;
71
+ console.log(`\nUsage: ${scriptName} ${cmd.name} [options]\n`);
72
+ console.log(def.description);
73
+ const schemaEntries = Object.entries(def.schema);
74
+ if (schemaEntries.length > 0) {
75
+ console.log('\nOptions:');
76
+ for (const [key, zodType] of schemaEntries){
77
+ const desc = zodType.description ?? '';
78
+ console.log(` --${key.padEnd(20)} ${desc}`);
79
+ }
80
+ }
81
+ }
82
+ function printVersion(scriptName, version) {
83
+ console.log(`${scriptName} v${version}`);
84
+ }
85
+ function printHelp(scriptName, commands, version) {
86
+ if (version) {
87
+ printVersion(scriptName, version);
88
+ console.log('');
89
+ }
90
+ console.log(`\nUsage: ${scriptName} <command> [options]\n`);
91
+ console.log('Commands:');
92
+ for (const { name, def } of commands)console.log(` ${name.padEnd(30)} ${def.description}`);
93
+ console.log(` ${'version'.padEnd(30)} Show CLI version`);
94
+ console.log(`\nRun "${scriptName} <command> --help" for more info.`);
95
+ }
96
+ async function runToolsCLI(tools, scriptName, options) {
97
+ const rawArgs = options?.argv ?? process.argv.slice(2);
98
+ debug('CLI invoked: %s %s', scriptName, rawArgs.join(' '));
99
+ const envFile = join(process.cwd(), '.env');
100
+ if (existsSync(envFile)) dotenv.config({
101
+ path: envFile
102
+ });
103
+ await tools.initTools();
104
+ const commands = tools.getToolDefinitions().map((def)=>({
105
+ name: removePrefix(def.name, options?.stripPrefix).toLowerCase(),
106
+ def
107
+ }));
108
+ const cliVersion = options?.version;
109
+ const [commandName, ...restArgs] = rawArgs;
110
+ if (!commandName || '--help' === commandName || '-h' === commandName) {
111
+ debug('showing help (no command or --help flag)');
112
+ printHelp(scriptName, commands, cliVersion);
113
+ return;
114
+ }
115
+ if ('--version' === commandName || '-v' === commandName || 'version' === commandName.toLowerCase()) {
116
+ if (!cliVersion) throw new CLIError('Failed to determine CLI version');
117
+ printVersion(scriptName, cliVersion);
118
+ return;
119
+ }
120
+ const match = commands.find((c)=>c.name.toLowerCase() === commandName.toLowerCase());
121
+ if (!match) {
122
+ debug('unknown command: %s', commandName);
123
+ console.error(`Unknown command: ${commandName}`);
124
+ printHelp(scriptName, commands, cliVersion);
125
+ throw new CLIError(`Unknown command: ${commandName}`);
126
+ }
127
+ const parsedArgs = parseCliArgs(restArgs);
128
+ debug('command: %s, args: %s', match.name, JSON.stringify(parsedArgs));
129
+ if (true === parsedArgs.help) {
130
+ debug('showing command help for: %s', match.name);
131
+ printCommandHelp(scriptName, match);
132
+ return;
133
+ }
134
+ const result = await match.def.handler(parsedArgs);
135
+ debug('command %s completed, isError: %s', match.name, result.isError ?? false);
136
+ outputResult(result);
137
+ await tools.destroy();
138
+ if (result.isError) throw new CLIError('Command failed', 1);
139
+ }
140
+ export { CLIError, parseCliArgs, parseValue, removePrefix, runToolsCLI };
@@ -0,0 +1,140 @@
1
+ import { existsSync, writeFileSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import { join } from "node:path";
4
+ import dotenv from "dotenv";
5
+ import { getDebug } from "../logger.mjs";
6
+ function _define_property(obj, key, value) {
7
+ if (key in obj) Object.defineProperty(obj, key, {
8
+ value: value,
9
+ enumerable: true,
10
+ configurable: true,
11
+ writable: true
12
+ });
13
+ else obj[key] = value;
14
+ return obj;
15
+ }
16
+ const debug = getDebug('cli-runner');
17
+ class CLIError extends Error {
18
+ constructor(message, exitCode = 1){
19
+ super(message), _define_property(this, "exitCode", void 0), this.exitCode = exitCode;
20
+ }
21
+ }
22
+ function parseValue(raw) {
23
+ if (raw.startsWith('{') || raw.startsWith('[')) try {
24
+ return JSON.parse(raw);
25
+ } catch {}
26
+ if (/^-?\d+(\.\d+)?$/.test(raw)) return Number(raw);
27
+ return raw;
28
+ }
29
+ function parseCliArgs(args) {
30
+ const result = {};
31
+ for(let i = 0; i < args.length; i++){
32
+ const arg = args[i];
33
+ if (!arg.startsWith('--')) continue;
34
+ const body = arg.slice(2);
35
+ const eqIdx = body.indexOf('=');
36
+ if (eqIdx >= 0) result[body.slice(0, eqIdx)] = parseValue(body.slice(eqIdx + 1));
37
+ else if (args[i + 1] && !args[i + 1].startsWith('--')) {
38
+ i++;
39
+ result[body] = parseValue(args[i]);
40
+ } else result[body] = true;
41
+ }
42
+ return result;
43
+ }
44
+ function outputContentItem(item, isError) {
45
+ switch(item.type){
46
+ case 'text':
47
+ if (isError) console.error(item.text);
48
+ else console.log(item.text);
49
+ break;
50
+ case 'image':
51
+ {
52
+ const filename = `screenshot-${Date.now()}.png`;
53
+ const filepath = join(tmpdir(), filename);
54
+ writeFileSync(filepath, Buffer.from(item.data, 'base64'));
55
+ console.log(`Screenshot saved: ${filepath}`);
56
+ break;
57
+ }
58
+ default:
59
+ console.log(`[${item.type} content not displayed in CLI]`);
60
+ }
61
+ }
62
+ function outputResult(result) {
63
+ for (const item of result.content)outputContentItem(item, result.isError ?? false);
64
+ }
65
+ function removePrefix(name, prefix) {
66
+ if (prefix && name.startsWith(prefix)) return name.slice(prefix.length);
67
+ return name;
68
+ }
69
+ function printCommandHelp(scriptName, cmd) {
70
+ const { def } = cmd;
71
+ console.log(`\nUsage: ${scriptName} ${cmd.name} [options]\n`);
72
+ console.log(def.description);
73
+ const schemaEntries = Object.entries(def.schema);
74
+ if (schemaEntries.length > 0) {
75
+ console.log('\nOptions:');
76
+ for (const [key, zodType] of schemaEntries){
77
+ const desc = zodType.description ?? '';
78
+ console.log(` --${key.padEnd(20)} ${desc}`);
79
+ }
80
+ }
81
+ }
82
+ function printVersion(scriptName, version) {
83
+ console.log(`${scriptName} v${version}`);
84
+ }
85
+ function printHelp(scriptName, commands, version) {
86
+ if (version) {
87
+ printVersion(scriptName, version);
88
+ console.log('');
89
+ }
90
+ console.log(`\nUsage: ${scriptName} <command> [options]\n`);
91
+ console.log('Commands:');
92
+ for (const { name, def } of commands)console.log(` ${name.padEnd(30)} ${def.description}`);
93
+ console.log(` ${'version'.padEnd(30)} Show CLI version`);
94
+ console.log(`\nRun "${scriptName} <command> --help" for more info.`);
95
+ }
96
+ async function runToolsCLI(tools, scriptName, options) {
97
+ const rawArgs = options?.argv ?? process.argv.slice(2);
98
+ debug('CLI invoked: %s %s', scriptName, rawArgs.join(' '));
99
+ const envFile = join(process.cwd(), '.env');
100
+ if (existsSync(envFile)) dotenv.config({
101
+ path: envFile
102
+ });
103
+ await tools.initTools();
104
+ const commands = tools.getToolDefinitions().map((def)=>({
105
+ name: removePrefix(def.name, options?.stripPrefix).toLowerCase(),
106
+ def
107
+ }));
108
+ const cliVersion = options?.version;
109
+ const [commandName, ...restArgs] = rawArgs;
110
+ if (!commandName || '--help' === commandName || '-h' === commandName) {
111
+ debug('showing help (no command or --help flag)');
112
+ printHelp(scriptName, commands, cliVersion);
113
+ return;
114
+ }
115
+ if ('--version' === commandName || '-v' === commandName || 'version' === commandName.toLowerCase()) {
116
+ if (!cliVersion) throw new CLIError('Failed to determine CLI version');
117
+ printVersion(scriptName, cliVersion);
118
+ return;
119
+ }
120
+ const match = commands.find((c)=>c.name.toLowerCase() === commandName.toLowerCase());
121
+ if (!match) {
122
+ debug('unknown command: %s', commandName);
123
+ console.error(`Unknown command: ${commandName}`);
124
+ printHelp(scriptName, commands, cliVersion);
125
+ throw new CLIError(`Unknown command: ${commandName}`);
126
+ }
127
+ const parsedArgs = parseCliArgs(restArgs);
128
+ debug('command: %s, args: %s', match.name, JSON.stringify(parsedArgs));
129
+ if (true === parsedArgs.help) {
130
+ debug('showing command help for: %s', match.name);
131
+ printCommandHelp(scriptName, match);
132
+ return;
133
+ }
134
+ const result = await match.def.handler(parsedArgs);
135
+ debug('command %s completed, isError: %s', match.name, result.isError ?? false);
136
+ outputResult(result);
137
+ await tools.destroy();
138
+ if (result.isError) throw new CLIError('Command failed', 1);
139
+ }
140
+ export { CLIError, parseCliArgs, parseValue, removePrefix, runToolsCLI };
@@ -0,0 +1,2 @@
1
+ import { CLIError, parseCliArgs, parseValue, removePrefix, runToolsCLI } from "./cli-runner.mjs";
2
+ export { CLIError, parseCliArgs, parseValue, removePrefix, runToolsCLI };
@@ -0,0 +1,2 @@
1
+ import { CLIError, parseCliArgs, parseValue, removePrefix, runToolsCLI } from "./cli-runner.mjs";
2
+ export { CLIError, parseCliArgs, parseValue, removePrefix, runToolsCLI };
@@ -0,0 +1,37 @@
1
+ import { existsSync, mkdirSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import node_path from "node:path";
4
+ import { getBasicEnvValue } from "./env/basic.mjs";
5
+ import { MIDSCENE_RUN_DIR } from "./env/types.mjs";
6
+ import { ifInNode } from "./utils.mjs";
7
+ const defaultRunDirName = 'midscene_run';
8
+ const getMidsceneRunDir = ()=>{
9
+ if (!ifInNode) return '';
10
+ return getBasicEnvValue(MIDSCENE_RUN_DIR) || defaultRunDirName;
11
+ };
12
+ const getMidsceneRunBaseDir = ()=>{
13
+ if (!ifInNode) return '';
14
+ let basePath = node_path.resolve(process.cwd(), getMidsceneRunDir());
15
+ if (!existsSync(basePath)) try {
16
+ mkdirSync(basePath, {
17
+ recursive: true
18
+ });
19
+ } catch (error) {
20
+ basePath = node_path.join(tmpdir(), defaultRunDirName);
21
+ mkdirSync(basePath, {
22
+ recursive: true
23
+ });
24
+ }
25
+ return basePath;
26
+ };
27
+ const getMidsceneRunSubDir = (subdir)=>{
28
+ if (!ifInNode) return '';
29
+ const basePath = getMidsceneRunBaseDir();
30
+ const logPath = node_path.join(basePath, subdir);
31
+ if (!existsSync(logPath)) mkdirSync(logPath, {
32
+ recursive: true
33
+ });
34
+ return logPath;
35
+ };
36
+ const ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED = 'NOT_IMPLEMENTED_AS_DESIGNED';
37
+ export { ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED, defaultRunDirName, getMidsceneRunBaseDir, getMidsceneRunDir, getMidsceneRunSubDir };
@@ -0,0 +1,37 @@
1
+ import { existsSync, mkdirSync } from "node:fs";
2
+ import { tmpdir } from "node:os";
3
+ import node_path from "node:path";
4
+ import { getBasicEnvValue } from "./env/basic.mjs";
5
+ import { MIDSCENE_RUN_DIR } from "./env/types.mjs";
6
+ import { ifInNode } from "./utils.mjs";
7
+ const defaultRunDirName = 'midscene_run';
8
+ const getMidsceneRunDir = ()=>{
9
+ if (!ifInNode) return '';
10
+ return getBasicEnvValue(MIDSCENE_RUN_DIR) || defaultRunDirName;
11
+ };
12
+ const getMidsceneRunBaseDir = ()=>{
13
+ if (!ifInNode) return '';
14
+ let basePath = node_path.resolve(process.cwd(), getMidsceneRunDir());
15
+ if (!existsSync(basePath)) try {
16
+ mkdirSync(basePath, {
17
+ recursive: true
18
+ });
19
+ } catch (error) {
20
+ basePath = node_path.join(tmpdir(), defaultRunDirName);
21
+ mkdirSync(basePath, {
22
+ recursive: true
23
+ });
24
+ }
25
+ return basePath;
26
+ };
27
+ const getMidsceneRunSubDir = (subdir)=>{
28
+ if (!ifInNode) return '';
29
+ const basePath = getMidsceneRunBaseDir();
30
+ const logPath = node_path.join(basePath, subdir);
31
+ if (!existsSync(logPath)) mkdirSync(logPath, {
32
+ recursive: true
33
+ });
34
+ return logPath;
35
+ };
36
+ const ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED = 'NOT_IMPLEMENTED_AS_DESIGNED';
37
+ export { ERROR_CODE_NOT_IMPLEMENTED_AS_DESIGNED, defaultRunDirName, getMidsceneRunBaseDir, getMidsceneRunDir, getMidsceneRunSubDir };