@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,94 @@
1
+ import { initDebugConfig } from "./init-debug.mjs";
2
+ import { ALL_ENV_KEYS, BOOLEAN_ENV_KEYS, GLOBAL_ENV_KEYS, MATCH_BY_POSITION, MODEL_ENV_KEYS, NUMBER_ENV_KEYS, STRING_ENV_KEYS } from "./types.mjs";
3
+ function _define_property(obj, key, value) {
4
+ if (key in obj) Object.defineProperty(obj, key, {
5
+ value: value,
6
+ enumerable: true,
7
+ configurable: true,
8
+ writable: true
9
+ });
10
+ else obj[key] = value;
11
+ return obj;
12
+ }
13
+ class GlobalConfigManager {
14
+ getAllEnvConfig() {
15
+ const envConfig = ALL_ENV_KEYS.reduce((p, name)=>{
16
+ p[name] = process.env[name];
17
+ return p;
18
+ }, Object.create(null));
19
+ if (!this.override) return envConfig;
20
+ {
21
+ const { newConfig, extendMode } = this.override;
22
+ if (extendMode) return {
23
+ ...envConfig,
24
+ ...newConfig
25
+ };
26
+ return {
27
+ ...newConfig
28
+ };
29
+ }
30
+ }
31
+ getEnvConfigValue(key) {
32
+ const allConfig = this.getAllEnvConfig();
33
+ if (key === MATCH_BY_POSITION) throw new Error('MATCH_BY_POSITION is discarded, use MIDSCENE_MODEL_FAMILY instead');
34
+ if (!STRING_ENV_KEYS.includes(key)) throw new Error(`getEnvConfigValue with key ${key} is not supported.`);
35
+ const value = allConfig[key];
36
+ this.keysHaveBeenRead[key] = true;
37
+ if ('string' == typeof value) return value.trim();
38
+ return value;
39
+ }
40
+ getEnvConfigInBoolean(key) {
41
+ const allConfig = this.getAllEnvConfig();
42
+ if (!BOOLEAN_ENV_KEYS.includes(key)) throw new Error(`getEnvConfigInBoolean with key ${key} is not supported`);
43
+ const value = allConfig[key];
44
+ this.keysHaveBeenRead[key] = true;
45
+ if (!value) return false;
46
+ if (/^(true|1)$/i.test(value)) return true;
47
+ if (/^(false|0)$/i.test(value)) return false;
48
+ return !!value.trim();
49
+ }
50
+ getEnvConfigValueAsNumber(key) {
51
+ if (!STRING_ENV_KEYS.includes(key) && !NUMBER_ENV_KEYS.includes(key)) throw new Error(`getEnvConfigValueAsNumber with key ${key} is not supported.`);
52
+ const allConfig = this.getAllEnvConfig();
53
+ const value = allConfig[key];
54
+ this.keysHaveBeenRead[key] = true;
55
+ if ('string' != typeof value) return;
56
+ const trimmed = value.trim();
57
+ if (!trimmed) return;
58
+ const numValue = Number(trimmed);
59
+ return Number.isNaN(numValue) ? void 0 : numValue;
60
+ }
61
+ registerModelConfigManager(globalModelConfigManager) {
62
+ this.globalModelConfigManager = globalModelConfigManager;
63
+ }
64
+ overrideAIConfig(newConfig, extendMode = false) {
65
+ for(const key in newConfig){
66
+ if (![
67
+ ...GLOBAL_ENV_KEYS,
68
+ ...MODEL_ENV_KEYS
69
+ ].includes(key)) throw new Error(`Failed to override AI config, invalid key: ${key}`);
70
+ const value = newConfig[key];
71
+ if ('string' != typeof value) throw new Error(`Failed to override AI config, value for key ${key} must be a string, but got with type ${typeof value}`);
72
+ if (this.keysHaveBeenRead[key]) console.warn(`Warning: try to override AI config with key ${key} ,but it has been read.`);
73
+ }
74
+ const savedNewConfig = extendMode ? {
75
+ ...this.override?.newConfig,
76
+ ...newConfig
77
+ } : newConfig;
78
+ this.override = {
79
+ newConfig: {
80
+ ...savedNewConfig
81
+ },
82
+ extendMode
83
+ };
84
+ if (!this.globalModelConfigManager) throw new Error('globalModelConfigManager is not registered, which should not happen');
85
+ this.globalModelConfigManager.clearModelConfigMap();
86
+ }
87
+ constructor(){
88
+ _define_property(this, "override", void 0);
89
+ _define_property(this, "keysHaveBeenRead", {});
90
+ _define_property(this, "globalModelConfigManager", void 0);
91
+ initDebugConfig();
92
+ }
93
+ }
94
+ export { GlobalConfigManager };
@@ -0,0 +1,94 @@
1
+ import { initDebugConfig } from "./init-debug.mjs";
2
+ import { ALL_ENV_KEYS, BOOLEAN_ENV_KEYS, GLOBAL_ENV_KEYS, MATCH_BY_POSITION, MODEL_ENV_KEYS, NUMBER_ENV_KEYS, STRING_ENV_KEYS } from "./types.mjs";
3
+ function _define_property(obj, key, value) {
4
+ if (key in obj) Object.defineProperty(obj, key, {
5
+ value: value,
6
+ enumerable: true,
7
+ configurable: true,
8
+ writable: true
9
+ });
10
+ else obj[key] = value;
11
+ return obj;
12
+ }
13
+ class GlobalConfigManager {
14
+ getAllEnvConfig() {
15
+ const envConfig = ALL_ENV_KEYS.reduce((p, name)=>{
16
+ p[name] = process.env[name];
17
+ return p;
18
+ }, Object.create(null));
19
+ if (!this.override) return envConfig;
20
+ {
21
+ const { newConfig, extendMode } = this.override;
22
+ if (extendMode) return {
23
+ ...envConfig,
24
+ ...newConfig
25
+ };
26
+ return {
27
+ ...newConfig
28
+ };
29
+ }
30
+ }
31
+ getEnvConfigValue(key) {
32
+ const allConfig = this.getAllEnvConfig();
33
+ if (key === MATCH_BY_POSITION) throw new Error('MATCH_BY_POSITION is discarded, use MIDSCENE_MODEL_FAMILY instead');
34
+ if (!STRING_ENV_KEYS.includes(key)) throw new Error(`getEnvConfigValue with key ${key} is not supported.`);
35
+ const value = allConfig[key];
36
+ this.keysHaveBeenRead[key] = true;
37
+ if ('string' == typeof value) return value.trim();
38
+ return value;
39
+ }
40
+ getEnvConfigInBoolean(key) {
41
+ const allConfig = this.getAllEnvConfig();
42
+ if (!BOOLEAN_ENV_KEYS.includes(key)) throw new Error(`getEnvConfigInBoolean with key ${key} is not supported`);
43
+ const value = allConfig[key];
44
+ this.keysHaveBeenRead[key] = true;
45
+ if (!value) return false;
46
+ if (/^(true|1)$/i.test(value)) return true;
47
+ if (/^(false|0)$/i.test(value)) return false;
48
+ return !!value.trim();
49
+ }
50
+ getEnvConfigValueAsNumber(key) {
51
+ if (!STRING_ENV_KEYS.includes(key) && !NUMBER_ENV_KEYS.includes(key)) throw new Error(`getEnvConfigValueAsNumber with key ${key} is not supported.`);
52
+ const allConfig = this.getAllEnvConfig();
53
+ const value = allConfig[key];
54
+ this.keysHaveBeenRead[key] = true;
55
+ if ('string' != typeof value) return;
56
+ const trimmed = value.trim();
57
+ if (!trimmed) return;
58
+ const numValue = Number(trimmed);
59
+ return Number.isNaN(numValue) ? void 0 : numValue;
60
+ }
61
+ registerModelConfigManager(globalModelConfigManager) {
62
+ this.globalModelConfigManager = globalModelConfigManager;
63
+ }
64
+ overrideAIConfig(newConfig, extendMode = false) {
65
+ for(const key in newConfig){
66
+ if (![
67
+ ...GLOBAL_ENV_KEYS,
68
+ ...MODEL_ENV_KEYS
69
+ ].includes(key)) throw new Error(`Failed to override AI config, invalid key: ${key}`);
70
+ const value = newConfig[key];
71
+ if ('string' != typeof value) throw new Error(`Failed to override AI config, value for key ${key} must be a string, but got with type ${typeof value}`);
72
+ if (this.keysHaveBeenRead[key]) console.warn(`Warning: try to override AI config with key ${key} ,but it has been read.`);
73
+ }
74
+ const savedNewConfig = extendMode ? {
75
+ ...this.override?.newConfig,
76
+ ...newConfig
77
+ } : newConfig;
78
+ this.override = {
79
+ newConfig: {
80
+ ...savedNewConfig
81
+ },
82
+ extendMode
83
+ };
84
+ if (!this.globalModelConfigManager) throw new Error('globalModelConfigManager is not registered, which should not happen');
85
+ this.globalModelConfigManager.clearModelConfigMap();
86
+ }
87
+ constructor(){
88
+ _define_property(this, "override", void 0);
89
+ _define_property(this, "keysHaveBeenRead", {});
90
+ _define_property(this, "globalModelConfigManager", void 0);
91
+ initDebugConfig();
92
+ }
93
+ }
94
+ export { GlobalConfigManager };
@@ -0,0 +1,43 @@
1
+ const maskKey = (key, maskChar = '*')=>{
2
+ if ('string' != typeof key || 0 === key.length) return key;
3
+ const prefixLen = 3;
4
+ const suffixLen = 3;
5
+ const keepLength = prefixLen + suffixLen;
6
+ if (key.length <= keepLength) return key;
7
+ const prefix = key.substring(0, prefixLen);
8
+ const suffix = key.substring(key.length - suffixLen);
9
+ const maskLength = key.length - keepLength;
10
+ const mask = maskChar.repeat(maskLength);
11
+ return `${prefix}${mask}${suffix}`;
12
+ };
13
+ const maskConfig = (config)=>Object.fromEntries(Object.entries(config).map(([key, value])=>{
14
+ if (!value) return [
15
+ key,
16
+ value
17
+ ];
18
+ if ('string' == typeof value && /key/i.test(key)) return [
19
+ key,
20
+ maskKey(value)
21
+ ];
22
+ if ('object' == typeof value) {
23
+ const valueStr = JSON.stringify(value);
24
+ if (/key/i.test(valueStr)) return [
25
+ key,
26
+ maskKey(valueStr)
27
+ ];
28
+ }
29
+ return [
30
+ key,
31
+ value
32
+ ];
33
+ }));
34
+ const parseJson = (key, value)=>{
35
+ if (value) try {
36
+ return JSON.parse(value);
37
+ } catch (e) {
38
+ throw new Error(`Failed to parse ${key} as a JSON. ${e.message}`, {
39
+ cause: e
40
+ });
41
+ }
42
+ };
43
+ export { maskConfig, parseJson };
@@ -0,0 +1,43 @@
1
+ const maskKey = (key, maskChar = '*')=>{
2
+ if ('string' != typeof key || 0 === key.length) return key;
3
+ const prefixLen = 3;
4
+ const suffixLen = 3;
5
+ const keepLength = prefixLen + suffixLen;
6
+ if (key.length <= keepLength) return key;
7
+ const prefix = key.substring(0, prefixLen);
8
+ const suffix = key.substring(key.length - suffixLen);
9
+ const maskLength = key.length - keepLength;
10
+ const mask = maskChar.repeat(maskLength);
11
+ return `${prefix}${mask}${suffix}`;
12
+ };
13
+ const maskConfig = (config)=>Object.fromEntries(Object.entries(config).map(([key, value])=>{
14
+ if (!value) return [
15
+ key,
16
+ value
17
+ ];
18
+ if ('string' == typeof value && /key/i.test(key)) return [
19
+ key,
20
+ maskKey(value)
21
+ ];
22
+ if ('object' == typeof value) {
23
+ const valueStr = JSON.stringify(value);
24
+ if (/key/i.test(valueStr)) return [
25
+ key,
26
+ maskKey(valueStr)
27
+ ];
28
+ }
29
+ return [
30
+ key,
31
+ value
32
+ ];
33
+ }));
34
+ const parseJson = (key, value)=>{
35
+ if (value) try {
36
+ return JSON.parse(value);
37
+ } catch (e) {
38
+ throw new Error(`Failed to parse ${key} as a JSON. ${e.message}`, {
39
+ cause: e
40
+ });
41
+ }
42
+ };
43
+ export { maskConfig, parseJson };
@@ -0,0 +1,5 @@
1
+ import { ModelConfigManager } from "./model-config-manager.mjs";
2
+ import { GlobalConfigManager } from "./global-config-manager.mjs";
3
+ export * from "./utils.mjs";
4
+ export * from "./types.mjs";
5
+ export { GlobalConfigManager, ModelConfigManager };
@@ -0,0 +1,5 @@
1
+ import { ModelConfigManager } from "./model-config-manager.mjs";
2
+ import { GlobalConfigManager } from "./global-config-manager.mjs";
3
+ export * from "./utils.mjs";
4
+ export * from "./types.mjs";
5
+ export { GlobalConfigManager, ModelConfigManager };
@@ -0,0 +1,18 @@
1
+ import { enableDebug } from "../logger.mjs";
2
+ import { getBasicEnvValue } from "./basic.mjs";
3
+ import { MIDSCENE_DEBUG_MODEL_PROFILE, MIDSCENE_DEBUG_MODEL_RESPONSE } from "./types.mjs";
4
+ const initDebugConfig = ()=>{
5
+ const shouldPrintTiming = getBasicEnvValue(MIDSCENE_DEBUG_MODEL_PROFILE);
6
+ let debugConfig = '';
7
+ if (shouldPrintTiming) {
8
+ console.warn('MIDSCENE_DEBUG_MODEL_PROFILE is deprecated, use DEBUG=midscene:ai:profile instead');
9
+ debugConfig = 'ai:profile';
10
+ }
11
+ const shouldPrintModelResponse = getBasicEnvValue(MIDSCENE_DEBUG_MODEL_RESPONSE);
12
+ if (shouldPrintModelResponse) {
13
+ console.warn('MIDSCENE_DEBUG_MODEL_RESPONSE is deprecated, use DEBUG=midscene:ai:response instead');
14
+ debugConfig = debugConfig ? 'ai:*' : 'ai:call';
15
+ }
16
+ if (debugConfig) enableDebug(debugConfig);
17
+ };
18
+ export { initDebugConfig };
@@ -0,0 +1,18 @@
1
+ import { enableDebug } from "../logger.mjs";
2
+ import { getBasicEnvValue } from "./basic.mjs";
3
+ import { MIDSCENE_DEBUG_MODEL_PROFILE, MIDSCENE_DEBUG_MODEL_RESPONSE } from "./types.mjs";
4
+ const initDebugConfig = ()=>{
5
+ const shouldPrintTiming = getBasicEnvValue(MIDSCENE_DEBUG_MODEL_PROFILE);
6
+ let debugConfig = '';
7
+ if (shouldPrintTiming) {
8
+ console.warn('MIDSCENE_DEBUG_MODEL_PROFILE is deprecated, use DEBUG=midscene:ai:profile instead');
9
+ debugConfig = 'ai:profile';
10
+ }
11
+ const shouldPrintModelResponse = getBasicEnvValue(MIDSCENE_DEBUG_MODEL_RESPONSE);
12
+ if (shouldPrintModelResponse) {
13
+ console.warn('MIDSCENE_DEBUG_MODEL_RESPONSE is deprecated, use DEBUG=midscene:ai:response instead');
14
+ debugConfig = debugConfig ? 'ai:*' : 'ai:call';
15
+ }
16
+ if (debugConfig) enableDebug(debugConfig);
17
+ };
18
+ export { initDebugConfig };
@@ -0,0 +1,79 @@
1
+ import { decideModelConfigFromIntentConfig } from "./parse-model-config.mjs";
2
+ function _define_property(obj, key, value) {
3
+ if (key in obj) Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ else obj[key] = value;
10
+ return obj;
11
+ }
12
+ class ModelConfigManager {
13
+ initialize() {
14
+ if (this.isInitialized) return;
15
+ let configMap;
16
+ if (this.modelConfig) {
17
+ this.isolatedMode = true;
18
+ configMap = this.normalizeModelConfig(this.modelConfig);
19
+ } else configMap = this.globalConfigManager?.getAllEnvConfig() || {};
20
+ const defaultConfig = decideModelConfigFromIntentConfig('default', configMap);
21
+ if (!defaultConfig) throw new Error('Model configuration is incomplete: model name (MIDSCENE_MODEL_NAME) is required. See https://midscenejs.com/model-strategy.html');
22
+ const insightConfig = decideModelConfigFromIntentConfig('insight', configMap);
23
+ const planningConfig = decideModelConfigFromIntentConfig('planning', configMap);
24
+ this.modelConfigMap = {
25
+ default: {
26
+ ...defaultConfig,
27
+ createOpenAIClient: this.createOpenAIClientFn
28
+ },
29
+ insight: {
30
+ ...insightConfig || defaultConfig,
31
+ createOpenAIClient: this.createOpenAIClientFn
32
+ },
33
+ planning: {
34
+ ...planningConfig || defaultConfig,
35
+ createOpenAIClient: this.createOpenAIClientFn
36
+ }
37
+ };
38
+ this.isInitialized = true;
39
+ }
40
+ normalizeModelConfig(config) {
41
+ return Object.entries(config).reduce((acc, [key, value])=>{
42
+ if (null == value) return acc;
43
+ acc[key] = String(value);
44
+ return acc;
45
+ }, Object.create(null));
46
+ }
47
+ clearModelConfigMap() {
48
+ if (this.isolatedMode) throw new Error('ModelConfigManager work in isolated mode, so clearModelConfigMap should not be called');
49
+ this.isInitialized = false;
50
+ }
51
+ getModelConfig(intent) {
52
+ if (!this.isInitialized) this.initialize();
53
+ if (!this.modelConfigMap) throw new Error('modelConfigMap is not initialized, which should not happen');
54
+ return this.modelConfigMap[intent];
55
+ }
56
+ getUploadTestServerUrl() {
57
+ const { openaiExtraConfig } = this.getModelConfig('default');
58
+ const serverUrl = openaiExtraConfig?.REPORT_SERVER_URL;
59
+ return serverUrl;
60
+ }
61
+ registerGlobalConfigManager(globalConfigManager) {
62
+ this.globalConfigManager = globalConfigManager;
63
+ }
64
+ throwErrorIfNonVLModel() {
65
+ const modelConfig = this.getModelConfig('default');
66
+ if (!modelConfig.modelFamily) throw new Error('MIDSCENE_MODEL_FAMILY is not set to a visual language model (VL model), the element localization can not be achieved. Check your model configuration. See https://midscenejs.com/model-strategy.html');
67
+ }
68
+ constructor(modelConfig, createOpenAIClientFn){
69
+ _define_property(this, "modelConfigMap", void 0);
70
+ _define_property(this, "isInitialized", false);
71
+ _define_property(this, "isolatedMode", false);
72
+ _define_property(this, "globalConfigManager", void 0);
73
+ _define_property(this, "modelConfig", void 0);
74
+ _define_property(this, "createOpenAIClientFn", void 0);
75
+ this.modelConfig = modelConfig;
76
+ this.createOpenAIClientFn = createOpenAIClientFn;
77
+ }
78
+ }
79
+ export { ModelConfigManager };
@@ -0,0 +1,79 @@
1
+ import { decideModelConfigFromIntentConfig } from "./parse-model-config.mjs";
2
+ function _define_property(obj, key, value) {
3
+ if (key in obj) Object.defineProperty(obj, key, {
4
+ value: value,
5
+ enumerable: true,
6
+ configurable: true,
7
+ writable: true
8
+ });
9
+ else obj[key] = value;
10
+ return obj;
11
+ }
12
+ class ModelConfigManager {
13
+ initialize() {
14
+ if (this.isInitialized) return;
15
+ let configMap;
16
+ if (this.modelConfig) {
17
+ this.isolatedMode = true;
18
+ configMap = this.normalizeModelConfig(this.modelConfig);
19
+ } else configMap = this.globalConfigManager?.getAllEnvConfig() || {};
20
+ const defaultConfig = decideModelConfigFromIntentConfig('default', configMap);
21
+ if (!defaultConfig) throw new Error('Model configuration is incomplete: model name (MIDSCENE_MODEL_NAME) is required. See https://midscenejs.com/model-strategy.html');
22
+ const insightConfig = decideModelConfigFromIntentConfig('insight', configMap);
23
+ const planningConfig = decideModelConfigFromIntentConfig('planning', configMap);
24
+ this.modelConfigMap = {
25
+ default: {
26
+ ...defaultConfig,
27
+ createOpenAIClient: this.createOpenAIClientFn
28
+ },
29
+ insight: {
30
+ ...insightConfig || defaultConfig,
31
+ createOpenAIClient: this.createOpenAIClientFn
32
+ },
33
+ planning: {
34
+ ...planningConfig || defaultConfig,
35
+ createOpenAIClient: this.createOpenAIClientFn
36
+ }
37
+ };
38
+ this.isInitialized = true;
39
+ }
40
+ normalizeModelConfig(config) {
41
+ return Object.entries(config).reduce((acc, [key, value])=>{
42
+ if (null == value) return acc;
43
+ acc[key] = String(value);
44
+ return acc;
45
+ }, Object.create(null));
46
+ }
47
+ clearModelConfigMap() {
48
+ if (this.isolatedMode) throw new Error('ModelConfigManager work in isolated mode, so clearModelConfigMap should not be called');
49
+ this.isInitialized = false;
50
+ }
51
+ getModelConfig(intent) {
52
+ if (!this.isInitialized) this.initialize();
53
+ if (!this.modelConfigMap) throw new Error('modelConfigMap is not initialized, which should not happen');
54
+ return this.modelConfigMap[intent];
55
+ }
56
+ getUploadTestServerUrl() {
57
+ const { openaiExtraConfig } = this.getModelConfig('default');
58
+ const serverUrl = openaiExtraConfig?.REPORT_SERVER_URL;
59
+ return serverUrl;
60
+ }
61
+ registerGlobalConfigManager(globalConfigManager) {
62
+ this.globalConfigManager = globalConfigManager;
63
+ }
64
+ throwErrorIfNonVLModel() {
65
+ const modelConfig = this.getModelConfig('default');
66
+ if (!modelConfig.modelFamily) throw new Error('MIDSCENE_MODEL_FAMILY is not set to a visual language model (VL model), the element localization can not be achieved. Check your model configuration. See https://midscenejs.com/model-strategy.html');
67
+ }
68
+ constructor(modelConfig, createOpenAIClientFn){
69
+ _define_property(this, "modelConfigMap", void 0);
70
+ _define_property(this, "isInitialized", false);
71
+ _define_property(this, "isolatedMode", false);
72
+ _define_property(this, "globalConfigManager", void 0);
73
+ _define_property(this, "modelConfig", void 0);
74
+ _define_property(this, "createOpenAIClientFn", void 0);
75
+ this.modelConfig = modelConfig;
76
+ this.createOpenAIClientFn = createOpenAIClientFn;
77
+ }
78
+ }
79
+ export { ModelConfigManager };
@@ -0,0 +1,132 @@
1
+ import { DEFAULT_MODEL_CONFIG_KEYS, INSIGHT_MODEL_CONFIG_KEYS, PLANNING_MODEL_CONFIG_KEYS } from "./constants.mjs";
2
+ import { MIDSCENE_OPENAI_HTTP_PROXY, MIDSCENE_OPENAI_INIT_CONFIG_JSON, MIDSCENE_OPENAI_SOCKS_PROXY, MIDSCENE_USE_DOUBAO_VISION, MIDSCENE_USE_GEMINI, MIDSCENE_USE_QWEN3_VL, MIDSCENE_USE_QWEN_VL, MIDSCENE_USE_VLM_UI_TARS, MODEL_FAMILY_VALUES, OPENAI_API_KEY, OPENAI_BASE_URL, UITarsModelVersion } from "./types.mjs";
3
+ import { getDebug } from "../logger.mjs";
4
+ import { assert } from "../utils.mjs";
5
+ import { maskConfig, parseJson } from "./helper.mjs";
6
+ import { initDebugConfig } from "./init-debug.mjs";
7
+ const KEYS_MAP = {
8
+ insight: INSIGHT_MODEL_CONFIG_KEYS,
9
+ planning: PLANNING_MODEL_CONFIG_KEYS,
10
+ default: DEFAULT_MODEL_CONFIG_KEYS
11
+ };
12
+ const getUITarsModelVersion = (modelFamily)=>{
13
+ if ('vlm-ui-tars' === modelFamily) return UITarsModelVersion.V1_0;
14
+ if ('vlm-ui-tars-doubao' === modelFamily || 'vlm-ui-tars-doubao-1.5' === modelFamily) return UITarsModelVersion.DOUBAO_1_5_20B;
15
+ };
16
+ const validateModelFamily = (modelFamily)=>{
17
+ if (modelFamily && !MODEL_FAMILY_VALUES.includes(modelFamily)) throw new Error(`Invalid MIDSCENE_MODEL_FAMILY value: ${modelFamily}`);
18
+ };
19
+ const legacyConfigToModelFamily = (provider)=>{
20
+ const isDoubao = provider[MIDSCENE_USE_DOUBAO_VISION];
21
+ const isQwen = provider[MIDSCENE_USE_QWEN_VL];
22
+ const isQwen3 = provider[MIDSCENE_USE_QWEN3_VL];
23
+ const isUiTars = provider[MIDSCENE_USE_VLM_UI_TARS];
24
+ const isGemini = provider[MIDSCENE_USE_GEMINI];
25
+ const enabledModes = [
26
+ isDoubao && MIDSCENE_USE_DOUBAO_VISION,
27
+ isQwen && MIDSCENE_USE_QWEN_VL,
28
+ isQwen3 && MIDSCENE_USE_QWEN3_VL,
29
+ isUiTars && MIDSCENE_USE_VLM_UI_TARS,
30
+ isGemini && MIDSCENE_USE_GEMINI
31
+ ].filter(Boolean);
32
+ if (enabledModes.length > 1) throw new Error(`Only one vision mode can be enabled at a time. Currently enabled modes: ${enabledModes.join(', ')}. Please disable all but one mode.`);
33
+ if (isQwen3) return 'qwen3-vl';
34
+ if (isQwen) return 'qwen2.5-vl';
35
+ if (isDoubao) return 'doubao-vision';
36
+ if (isGemini) return 'gemini';
37
+ if (isUiTars) if ('1' === isUiTars) return 'vlm-ui-tars';
38
+ else if ('DOUBAO' === isUiTars || 'DOUBAO-1.5' === isUiTars) return 'vlm-ui-tars-doubao-1.5';
39
+ else return 'vlm-ui-tars-doubao';
40
+ };
41
+ const getModelDescription = (modelFamily, uiTarsModelVersion)=>{
42
+ if (uiTarsModelVersion) return `UI-TARS=${uiTarsModelVersion}`;
43
+ if (modelFamily) return `${modelFamily} mode`;
44
+ return '';
45
+ };
46
+ const parseOpenaiSdkConfig = ({ keys, provider, useLegacyLogic = false })=>{
47
+ initDebugConfig();
48
+ const debugLog = getDebug('ai:config');
49
+ debugLog('enter parseOpenaiSdkConfig with keys:', keys);
50
+ const legacyAPIKey = useLegacyLogic ? provider[OPENAI_API_KEY] : void 0;
51
+ const legacyBaseURL = useLegacyLogic ? provider[OPENAI_BASE_URL] : void 0;
52
+ const legacySocksProxy = useLegacyLogic ? provider[MIDSCENE_OPENAI_SOCKS_PROXY] : void 0;
53
+ const legacyHttpProxy = useLegacyLogic ? provider[MIDSCENE_OPENAI_HTTP_PROXY] : void 0;
54
+ const legacyOpenaiExtraConfig = useLegacyLogic ? provider[MIDSCENE_OPENAI_INIT_CONFIG_JSON] : void 0;
55
+ const legacyModelFamily = useLegacyLogic ? legacyConfigToModelFamily(provider) : void 0;
56
+ const modelFamilyRaw = provider[keys.modelFamily] || legacyModelFamily;
57
+ const openaiApiKey = provider[keys.openaiApiKey] || legacyAPIKey;
58
+ const openaiBaseURL = provider[keys.openaiBaseURL] || legacyBaseURL;
59
+ const socksProxy = provider[keys.socksProxy] || legacySocksProxy;
60
+ const httpProxy = provider[keys.httpProxy] || legacyHttpProxy;
61
+ const modelName = provider[keys.modelName];
62
+ const openaiExtraConfigStr = provider[keys.openaiExtraConfig];
63
+ const openaiExtraConfig = parseJson(keys.openaiExtraConfig, openaiExtraConfigStr || legacyOpenaiExtraConfig);
64
+ const extraBodyStr = provider[keys.extraBody];
65
+ const extraBody = parseJson(keys.extraBody, extraBodyStr);
66
+ const temperature = provider[keys.temperature] ? Number(provider[keys.temperature]) : 0;
67
+ const modelFamily = modelFamilyRaw;
68
+ validateModelFamily(modelFamily);
69
+ const uiTarsModelVersion = getUITarsModelVersion(modelFamily);
70
+ const modelDescription = getModelDescription(modelFamily, uiTarsModelVersion);
71
+ return {
72
+ socksProxy,
73
+ httpProxy,
74
+ openaiBaseURL,
75
+ openaiApiKey,
76
+ openaiExtraConfig,
77
+ extraBody,
78
+ modelFamily,
79
+ uiTarsModelVersion,
80
+ modelName: modelName,
81
+ modelDescription,
82
+ intent: '-',
83
+ timeout: provider[keys.timeout] ? Number(provider[keys.timeout]) : void 0,
84
+ temperature,
85
+ retryCount: (()=>{
86
+ if (!provider[keys.retryCount]) return 1;
87
+ const val = Number(provider[keys.retryCount]);
88
+ if (!Number.isFinite(val)) return 1;
89
+ if (val < 0) throw new Error(`${keys.retryCount} must be non-negative, got ${val}`);
90
+ return val;
91
+ })(),
92
+ retryInterval: (()=>{
93
+ if (!provider[keys.retryInterval]) return 2000;
94
+ const val = Number(provider[keys.retryInterval]);
95
+ if (!Number.isFinite(val)) return 2000;
96
+ if (val < 0) throw new Error(`${keys.retryInterval} must be non-negative, got ${val}`);
97
+ return val;
98
+ })(),
99
+ reasoningEffort: provider[keys.reasoningEffort]?.trim() || void 0,
100
+ reasoningEnabled: (()=>{
101
+ const val = provider[keys.reasoningEnabled]?.trim()?.toLowerCase();
102
+ if ('true' === val || '1' === val) return true;
103
+ if ('false' === val || '0' === val) return false;
104
+ })(),
105
+ reasoningBudget: (()=>{
106
+ const val = provider[keys.reasoningBudget]?.trim();
107
+ if (!val) return;
108
+ const num = Number(val);
109
+ return Number.isFinite(num) ? num : void 0;
110
+ })()
111
+ };
112
+ };
113
+ const decideModelConfigFromIntentConfig = (intent, configMap)=>{
114
+ const debugLog = getDebug('ai:config');
115
+ debugLog('will decideModelConfig base on agent.modelConfig()', intent, maskConfig(configMap));
116
+ const keysForFn = KEYS_MAP[intent];
117
+ const modelName = configMap[keysForFn.modelName];
118
+ if (!modelName) return void debugLog('no modelName found for intent', intent);
119
+ const finalResult = parseOpenaiSdkConfig({
120
+ keys: keysForFn,
121
+ provider: configMap,
122
+ useLegacyLogic: 'default' === intent
123
+ });
124
+ finalResult.intent = intent;
125
+ debugLog('decideModelConfig result by agent.modelConfig() with intent', intent, maskConfig({
126
+ ...finalResult
127
+ }));
128
+ assert(finalResult.openaiBaseURL, `failed to get base URL of model (intent=${intent}). See https://midscenejs.com/model-strategy`);
129
+ if (!finalResult.modelName) console.warn(`modelName is not set for intent ${intent}, this may cause unexpected behavior. See https://midscenejs.com/model-strategy`);
130
+ return finalResult;
131
+ };
132
+ export { decideModelConfigFromIntentConfig, getUITarsModelVersion, legacyConfigToModelFamily, parseOpenaiSdkConfig, validateModelFamily };