@midscene/shared 0.29.0 → 0.29.2-beta-20250924120255.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/es/build/copy-static.mjs +29 -0
- package/dist/es/constants/index.mjs +3 -1
- package/dist/es/env/parse.mjs +7 -1
- package/dist/es/env/types.mjs +8 -1
- package/dist/es/img/transform.mjs +27 -7
- package/dist/es/index.mjs +2 -1
- package/dist/lib/build/copy-static.js +77 -0
- package/dist/lib/constants/index.js +11 -3
- package/dist/lib/env/parse.js +6 -0
- package/dist/lib/env/types.js +16 -0
- package/dist/lib/img/transform.js +27 -7
- package/dist/lib/index.js +9 -2
- package/dist/types/build/copy-static.d.ts +31 -0
- package/dist/types/constants/index.d.ts +2 -0
- package/dist/types/env/types.d.ts +9 -6
- package/dist/types/img/transform.d.ts +15 -3
- package/dist/types/index.d.ts +1 -0
- package/package.json +1 -1
- package/src/build/copy-static.ts +62 -0
- package/src/constants/index.ts +4 -0
- package/src/env/parse.ts +10 -0
- package/src/env/types.ts +10 -0
- package/src/img/transform.ts +35 -10
- package/src/index.ts +5 -0
|
@@ -0,0 +1,29 @@
|
|
|
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
|
+
await node_fs.promises.mkdir(destDir, {
|
|
9
|
+
recursive: true
|
|
10
|
+
});
|
|
11
|
+
await node_fs.promises.cp(srcDir, destDir, {
|
|
12
|
+
recursive: true
|
|
13
|
+
});
|
|
14
|
+
console.log(`Copied build artifacts from ${srcDir} to ${destDir}`);
|
|
15
|
+
if (faviconPath) {
|
|
16
|
+
const faviconDest = node_path.join(destDir, 'favicon.ico');
|
|
17
|
+
await node_fs.promises.copyFile(faviconPath, faviconDest);
|
|
18
|
+
console.log(`Copied favicon from ${faviconPath} to ${faviconDest}`);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
const createPlaygroundCopyPlugin = (srcDir, destDir, pluginName, faviconSrc)=>createCopyStaticPlugin({
|
|
24
|
+
srcDir,
|
|
25
|
+
destDir,
|
|
26
|
+
faviconPath: faviconSrc,
|
|
27
|
+
pluginName
|
|
28
|
+
});
|
|
29
|
+
export { createCopyStaticPlugin, createPlaygroundCopyPlugin };
|
|
@@ -15,8 +15,10 @@ var constants_NodeType = /*#__PURE__*/ function(NodeType) {
|
|
|
15
15
|
}({});
|
|
16
16
|
const PLAYGROUND_SERVER_PORT = 5800;
|
|
17
17
|
const SCRCPY_SERVER_PORT = 5700;
|
|
18
|
+
const WEBDRIVER_ELEMENT_ID_KEY = 'element-6066-11e4-a52e-4f735466cecf';
|
|
19
|
+
const DEFAULT_WDA_PORT = 8100;
|
|
18
20
|
const DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT = 5000;
|
|
19
21
|
const DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT = 2000;
|
|
20
22
|
const DEFAULT_WAIT_FOR_NETWORK_IDLE_TIME = 300;
|
|
21
23
|
const DEFAULT_WAIT_FOR_NETWORK_IDLE_CONCURRENCY = 2;
|
|
22
|
-
export { CONTAINER_MINI_HEIGHT, CONTAINER_MINI_WIDTH, DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT, DEFAULT_WAIT_FOR_NETWORK_IDLE_CONCURRENCY, DEFAULT_WAIT_FOR_NETWORK_IDLE_TIME, DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT, constants_NodeType as NodeType, PLAYGROUND_SERVER_PORT, PLAYWRIGHT_EXAMPLE_CODE, SCRCPY_SERVER_PORT, TEXT_MAX_SIZE, TEXT_SIZE_THRESHOLD, YAML_EXAMPLE_CODE };
|
|
24
|
+
export { CONTAINER_MINI_HEIGHT, CONTAINER_MINI_WIDTH, DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT, DEFAULT_WAIT_FOR_NETWORK_IDLE_CONCURRENCY, DEFAULT_WAIT_FOR_NETWORK_IDLE_TIME, DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT, DEFAULT_WDA_PORT, constants_NodeType as NodeType, PLAYGROUND_SERVER_PORT, PLAYWRIGHT_EXAMPLE_CODE, SCRCPY_SERVER_PORT, TEXT_MAX_SIZE, TEXT_SIZE_THRESHOLD, WEBDRIVER_ELEMENT_ID_KEY, YAML_EXAMPLE_CODE };
|
package/dist/es/env/parse.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MIDSCENE_USE_DOUBAO_VISION, MIDSCENE_USE_GEMINI, MIDSCENE_USE_QWEN_VL, MIDSCENE_USE_VLM_UI_TARS, UITarsModelVersion, VL_MODE_RAW_VALID_VALUES } from "./types.mjs";
|
|
1
|
+
import { MIDSCENE_USE_DOUBAO_VISION, MIDSCENE_USE_GEMINI, MIDSCENE_USE_QWEN3_VL, MIDSCENE_USE_QWEN_VL, MIDSCENE_USE_VLM_UI_TARS, UITarsModelVersion, VL_MODE_RAW_VALID_VALUES } from "./types.mjs";
|
|
2
2
|
const parseVlModeAndUiTarsModelVersionFromRawValue = (vlModeRaw)=>{
|
|
3
3
|
if (!vlModeRaw) return {
|
|
4
4
|
vlMode: void 0,
|
|
@@ -22,15 +22,21 @@ const parseVlModeAndUiTarsModelVersionFromRawValue = (vlModeRaw)=>{
|
|
|
22
22
|
const parseVlModeAndUiTarsFromGlobalConfig = (provider)=>{
|
|
23
23
|
const isDoubao = provider[MIDSCENE_USE_DOUBAO_VISION];
|
|
24
24
|
const isQwen = provider[MIDSCENE_USE_QWEN_VL];
|
|
25
|
+
const isQwen3 = provider[MIDSCENE_USE_QWEN3_VL];
|
|
25
26
|
const isUiTars = provider[MIDSCENE_USE_VLM_UI_TARS];
|
|
26
27
|
const isGemini = provider[MIDSCENE_USE_GEMINI];
|
|
27
28
|
const enabledModes = [
|
|
28
29
|
isDoubao && MIDSCENE_USE_DOUBAO_VISION,
|
|
29
30
|
isQwen && MIDSCENE_USE_QWEN_VL,
|
|
31
|
+
isQwen3 && MIDSCENE_USE_QWEN3_VL,
|
|
30
32
|
isUiTars && MIDSCENE_USE_VLM_UI_TARS,
|
|
31
33
|
isGemini && MIDSCENE_USE_GEMINI
|
|
32
34
|
].filter(Boolean);
|
|
33
35
|
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.`);
|
|
36
|
+
if (isQwen3) return {
|
|
37
|
+
vlMode: 'qwen3-vl',
|
|
38
|
+
uiTarsVersion: void 0
|
|
39
|
+
};
|
|
34
40
|
if (isQwen) return {
|
|
35
41
|
vlMode: 'qwen-vl',
|
|
36
42
|
uiTarsVersion: void 0
|
package/dist/es/env/types.mjs
CHANGED
|
@@ -19,9 +19,12 @@ const MIDSCENE_ADB_PATH = 'MIDSCENE_ADB_PATH';
|
|
|
19
19
|
const MIDSCENE_ADB_REMOTE_HOST = 'MIDSCENE_ADB_REMOTE_HOST';
|
|
20
20
|
const MIDSCENE_ADB_REMOTE_PORT = 'MIDSCENE_ADB_REMOTE_PORT';
|
|
21
21
|
const MIDSCENE_ANDROID_IME_STRATEGY = 'MIDSCENE_ANDROID_IME_STRATEGY';
|
|
22
|
+
const MIDSCENE_IOS_DEVICE_UDID = 'MIDSCENE_IOS_DEVICE_UDID';
|
|
23
|
+
const MIDSCENE_IOS_SIMULATOR_UDID = 'MIDSCENE_IOS_SIMULATOR_UDID';
|
|
22
24
|
const MIDSCENE_CACHE = 'MIDSCENE_CACHE';
|
|
23
25
|
const MIDSCENE_USE_VLM_UI_TARS = 'MIDSCENE_USE_VLM_UI_TARS';
|
|
24
26
|
const MIDSCENE_USE_QWEN_VL = 'MIDSCENE_USE_QWEN_VL';
|
|
27
|
+
const MIDSCENE_USE_QWEN3_VL = 'MIDSCENE_USE_QWEN3_VL';
|
|
25
28
|
const MIDSCENE_USE_DOUBAO_VISION = 'MIDSCENE_USE_DOUBAO_VISION';
|
|
26
29
|
const MIDSCENE_USE_GEMINI = 'MIDSCENE_USE_GEMINI';
|
|
27
30
|
const MIDSCENE_USE_VL_MODEL = 'MIDSCENE_USE_VL_MODEL';
|
|
@@ -128,6 +131,8 @@ const STRING_ENV_KEYS = [
|
|
|
128
131
|
MIDSCENE_ADB_REMOTE_HOST,
|
|
129
132
|
MIDSCENE_ADB_REMOTE_PORT,
|
|
130
133
|
MIDSCENE_ANDROID_IME_STRATEGY,
|
|
134
|
+
MIDSCENE_IOS_DEVICE_UDID,
|
|
135
|
+
MIDSCENE_IOS_SIMULATOR_UDID,
|
|
131
136
|
MIDSCENE_REPORT_TAG_NAME,
|
|
132
137
|
MIDSCENE_PREFERRED_LANGUAGE,
|
|
133
138
|
MATCH_BY_POSITION,
|
|
@@ -153,6 +158,7 @@ const MODEL_ENV_KEYS = [
|
|
|
153
158
|
MIDSCENE_USE_ANTHROPIC_SDK,
|
|
154
159
|
MIDSCENE_USE_VLM_UI_TARS,
|
|
155
160
|
MIDSCENE_USE_QWEN_VL,
|
|
161
|
+
MIDSCENE_USE_QWEN3_VL,
|
|
156
162
|
MIDSCENE_USE_DOUBAO_VISION,
|
|
157
163
|
MIDSCENE_USE_GEMINI,
|
|
158
164
|
MIDSCENE_USE_VL_MODEL,
|
|
@@ -239,8 +245,9 @@ const VL_MODE_RAW_VALID_VALUES = [
|
|
|
239
245
|
'doubao-vision',
|
|
240
246
|
'gemini',
|
|
241
247
|
'qwen-vl',
|
|
248
|
+
'qwen3-vl',
|
|
242
249
|
'vlm-ui-tars',
|
|
243
250
|
'vlm-ui-tars-doubao',
|
|
244
251
|
'vlm-ui-tars-doubao-1.5'
|
|
245
252
|
];
|
|
246
|
-
export { ALL_ENV_KEYS, ANTHROPIC_API_KEY, AZURE_OPENAI_API_VERSION, AZURE_OPENAI_DEPLOYMENT, AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_KEY, BASIC_ENV_KEYS, BOOLEAN_ENV_KEYS, DOCKER_CONTAINER, GLOBAL_ENV_KEYS, MATCH_BY_POSITION, MIDSCENE_ADB_PATH, MIDSCENE_ADB_REMOTE_HOST, MIDSCENE_ADB_REMOTE_PORT, MIDSCENE_ANDROID_IME_STRATEGY, MIDSCENE_ANTHROPIC_API_KEY, MIDSCENE_API_TYPE, MIDSCENE_AZURE_OPENAI_API_VERSION, MIDSCENE_AZURE_OPENAI_DEPLOYMENT, MIDSCENE_AZURE_OPENAI_ENDPOINT, MIDSCENE_AZURE_OPENAI_INIT_CONFIG_JSON, MIDSCENE_AZURE_OPENAI_KEY, MIDSCENE_AZURE_OPENAI_SCOPE, MIDSCENE_CACHE, MIDSCENE_CACHE_MAX_FILENAME_LENGTH, MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG, MIDSCENE_DEBUG_AI_PROFILE, MIDSCENE_DEBUG_AI_RESPONSE, MIDSCENE_DEBUG_MODE, MIDSCENE_FORCE_DEEP_THINK, MIDSCENE_GROUNDING_ANTHROPIC_API_KEY, MIDSCENE_GROUNDING_AZURE_OPENAI_API_VERSION, MIDSCENE_GROUNDING_AZURE_OPENAI_DEPLOYMENT, MIDSCENE_GROUNDING_AZURE_OPENAI_ENDPOINT, MIDSCENE_GROUNDING_AZURE_OPENAI_INIT_CONFIG_JSON, MIDSCENE_GROUNDING_AZURE_OPENAI_KEY, MIDSCENE_GROUNDING_AZURE_OPENAI_SCOPE, MIDSCENE_GROUNDING_MODEL_NAME, MIDSCENE_GROUNDING_OPENAI_API_KEY, MIDSCENE_GROUNDING_OPENAI_BASE_URL, MIDSCENE_GROUNDING_OPENAI_HTTP_PROXY, MIDSCENE_GROUNDING_OPENAI_INIT_CONFIG_JSON, MIDSCENE_GROUNDING_OPENAI_SOCKS_PROXY, MIDSCENE_GROUNDING_OPENAI_USE_AZURE, MIDSCENE_GROUNDING_USE_ANTHROPIC_SDK, MIDSCENE_GROUNDING_USE_AZURE_OPENAI, MIDSCENE_GROUNDING_VL_MODE, MIDSCENE_LANGSMITH_DEBUG, MIDSCENE_MCP_ANDROID_MODE, MIDSCENE_MCP_CHROME_PATH, MIDSCENE_MCP_USE_PUPPETEER_MODE, MIDSCENE_MODEL_NAME, MIDSCENE_OPENAI_API_KEY, MIDSCENE_OPENAI_BASE_URL, MIDSCENE_OPENAI_HTTP_PROXY, MIDSCENE_OPENAI_INIT_CONFIG_JSON, MIDSCENE_OPENAI_SOCKS_PROXY, MIDSCENE_OPENAI_USE_AZURE, MIDSCENE_PLANNING_ANTHROPIC_API_KEY, MIDSCENE_PLANNING_AZURE_OPENAI_API_VERSION, MIDSCENE_PLANNING_AZURE_OPENAI_DEPLOYMENT, MIDSCENE_PLANNING_AZURE_OPENAI_ENDPOINT, MIDSCENE_PLANNING_AZURE_OPENAI_INIT_CONFIG_JSON, MIDSCENE_PLANNING_AZURE_OPENAI_KEY, MIDSCENE_PLANNING_AZURE_OPENAI_SCOPE, MIDSCENE_PLANNING_MODEL_NAME, MIDSCENE_PLANNING_OPENAI_API_KEY, MIDSCENE_PLANNING_OPENAI_BASE_URL, MIDSCENE_PLANNING_OPENAI_HTTP_PROXY, MIDSCENE_PLANNING_OPENAI_INIT_CONFIG_JSON, MIDSCENE_PLANNING_OPENAI_SOCKS_PROXY, MIDSCENE_PLANNING_OPENAI_USE_AZURE, MIDSCENE_PLANNING_USE_ANTHROPIC_SDK, MIDSCENE_PLANNING_USE_AZURE_OPENAI, MIDSCENE_PLANNING_VL_MODE, MIDSCENE_PREFERRED_LANGUAGE, MIDSCENE_REPLANNING_CYCLE_LIMIT, MIDSCENE_REPORT_TAG_NAME, MIDSCENE_RUN_DIR, MIDSCENE_USE_ANTHROPIC_SDK, MIDSCENE_USE_AZURE_OPENAI, MIDSCENE_USE_DOUBAO_VISION, MIDSCENE_USE_GEMINI, MIDSCENE_USE_QWEN_VL, MIDSCENE_USE_VLM_UI_TARS, MIDSCENE_USE_VL_MODEL, MIDSCENE_VL_MODE, MIDSCENE_VQA_ANTHROPIC_API_KEY, MIDSCENE_VQA_AZURE_OPENAI_API_VERSION, MIDSCENE_VQA_AZURE_OPENAI_DEPLOYMENT, MIDSCENE_VQA_AZURE_OPENAI_ENDPOINT, MIDSCENE_VQA_AZURE_OPENAI_INIT_CONFIG_JSON, MIDSCENE_VQA_AZURE_OPENAI_KEY, MIDSCENE_VQA_AZURE_OPENAI_SCOPE, MIDSCENE_VQA_MODEL_NAME, MIDSCENE_VQA_OPENAI_API_KEY, MIDSCENE_VQA_OPENAI_BASE_URL, MIDSCENE_VQA_OPENAI_HTTP_PROXY, MIDSCENE_VQA_OPENAI_INIT_CONFIG_JSON, MIDSCENE_VQA_OPENAI_SOCKS_PROXY, MIDSCENE_VQA_OPENAI_USE_AZURE, MIDSCENE_VQA_USE_ANTHROPIC_SDK, MIDSCENE_VQA_USE_AZURE_OPENAI, MIDSCENE_VQA_VL_MODE, MODEL_ENV_KEYS, NUMBER_ENV_KEYS, OPENAI_API_KEY, OPENAI_BASE_URL, OPENAI_MAX_TOKENS, OPENAI_USE_AZURE, STRING_ENV_KEYS, types_UITarsModelVersion as UITarsModelVersion, UNUSED_ENV_KEYS, VL_MODE_RAW_VALID_VALUES };
|
|
253
|
+
export { ALL_ENV_KEYS, ANTHROPIC_API_KEY, AZURE_OPENAI_API_VERSION, AZURE_OPENAI_DEPLOYMENT, AZURE_OPENAI_ENDPOINT, AZURE_OPENAI_KEY, BASIC_ENV_KEYS, BOOLEAN_ENV_KEYS, DOCKER_CONTAINER, GLOBAL_ENV_KEYS, MATCH_BY_POSITION, MIDSCENE_ADB_PATH, MIDSCENE_ADB_REMOTE_HOST, MIDSCENE_ADB_REMOTE_PORT, MIDSCENE_ANDROID_IME_STRATEGY, MIDSCENE_ANTHROPIC_API_KEY, MIDSCENE_API_TYPE, MIDSCENE_AZURE_OPENAI_API_VERSION, MIDSCENE_AZURE_OPENAI_DEPLOYMENT, MIDSCENE_AZURE_OPENAI_ENDPOINT, MIDSCENE_AZURE_OPENAI_INIT_CONFIG_JSON, MIDSCENE_AZURE_OPENAI_KEY, MIDSCENE_AZURE_OPENAI_SCOPE, MIDSCENE_CACHE, MIDSCENE_CACHE_MAX_FILENAME_LENGTH, MIDSCENE_DANGEROUSLY_PRINT_ALL_CONFIG, MIDSCENE_DEBUG_AI_PROFILE, MIDSCENE_DEBUG_AI_RESPONSE, MIDSCENE_DEBUG_MODE, MIDSCENE_FORCE_DEEP_THINK, MIDSCENE_GROUNDING_ANTHROPIC_API_KEY, MIDSCENE_GROUNDING_AZURE_OPENAI_API_VERSION, MIDSCENE_GROUNDING_AZURE_OPENAI_DEPLOYMENT, MIDSCENE_GROUNDING_AZURE_OPENAI_ENDPOINT, MIDSCENE_GROUNDING_AZURE_OPENAI_INIT_CONFIG_JSON, MIDSCENE_GROUNDING_AZURE_OPENAI_KEY, MIDSCENE_GROUNDING_AZURE_OPENAI_SCOPE, MIDSCENE_GROUNDING_MODEL_NAME, MIDSCENE_GROUNDING_OPENAI_API_KEY, MIDSCENE_GROUNDING_OPENAI_BASE_URL, MIDSCENE_GROUNDING_OPENAI_HTTP_PROXY, MIDSCENE_GROUNDING_OPENAI_INIT_CONFIG_JSON, MIDSCENE_GROUNDING_OPENAI_SOCKS_PROXY, MIDSCENE_GROUNDING_OPENAI_USE_AZURE, MIDSCENE_GROUNDING_USE_ANTHROPIC_SDK, MIDSCENE_GROUNDING_USE_AZURE_OPENAI, MIDSCENE_GROUNDING_VL_MODE, MIDSCENE_IOS_DEVICE_UDID, MIDSCENE_IOS_SIMULATOR_UDID, MIDSCENE_LANGSMITH_DEBUG, MIDSCENE_MCP_ANDROID_MODE, MIDSCENE_MCP_CHROME_PATH, MIDSCENE_MCP_USE_PUPPETEER_MODE, MIDSCENE_MODEL_NAME, MIDSCENE_OPENAI_API_KEY, MIDSCENE_OPENAI_BASE_URL, MIDSCENE_OPENAI_HTTP_PROXY, MIDSCENE_OPENAI_INIT_CONFIG_JSON, MIDSCENE_OPENAI_SOCKS_PROXY, MIDSCENE_OPENAI_USE_AZURE, MIDSCENE_PLANNING_ANTHROPIC_API_KEY, MIDSCENE_PLANNING_AZURE_OPENAI_API_VERSION, MIDSCENE_PLANNING_AZURE_OPENAI_DEPLOYMENT, MIDSCENE_PLANNING_AZURE_OPENAI_ENDPOINT, MIDSCENE_PLANNING_AZURE_OPENAI_INIT_CONFIG_JSON, MIDSCENE_PLANNING_AZURE_OPENAI_KEY, MIDSCENE_PLANNING_AZURE_OPENAI_SCOPE, MIDSCENE_PLANNING_MODEL_NAME, MIDSCENE_PLANNING_OPENAI_API_KEY, MIDSCENE_PLANNING_OPENAI_BASE_URL, MIDSCENE_PLANNING_OPENAI_HTTP_PROXY, MIDSCENE_PLANNING_OPENAI_INIT_CONFIG_JSON, MIDSCENE_PLANNING_OPENAI_SOCKS_PROXY, MIDSCENE_PLANNING_OPENAI_USE_AZURE, MIDSCENE_PLANNING_USE_ANTHROPIC_SDK, MIDSCENE_PLANNING_USE_AZURE_OPENAI, MIDSCENE_PLANNING_VL_MODE, MIDSCENE_PREFERRED_LANGUAGE, MIDSCENE_REPLANNING_CYCLE_LIMIT, MIDSCENE_REPORT_TAG_NAME, MIDSCENE_RUN_DIR, MIDSCENE_USE_ANTHROPIC_SDK, MIDSCENE_USE_AZURE_OPENAI, MIDSCENE_USE_DOUBAO_VISION, MIDSCENE_USE_GEMINI, MIDSCENE_USE_QWEN3_VL, MIDSCENE_USE_QWEN_VL, MIDSCENE_USE_VLM_UI_TARS, MIDSCENE_USE_VL_MODEL, MIDSCENE_VL_MODE, MIDSCENE_VQA_ANTHROPIC_API_KEY, MIDSCENE_VQA_AZURE_OPENAI_API_VERSION, MIDSCENE_VQA_AZURE_OPENAI_DEPLOYMENT, MIDSCENE_VQA_AZURE_OPENAI_ENDPOINT, MIDSCENE_VQA_AZURE_OPENAI_INIT_CONFIG_JSON, MIDSCENE_VQA_AZURE_OPENAI_KEY, MIDSCENE_VQA_AZURE_OPENAI_SCOPE, MIDSCENE_VQA_MODEL_NAME, MIDSCENE_VQA_OPENAI_API_KEY, MIDSCENE_VQA_OPENAI_BASE_URL, MIDSCENE_VQA_OPENAI_HTTP_PROXY, MIDSCENE_VQA_OPENAI_INIT_CONFIG_JSON, MIDSCENE_VQA_OPENAI_SOCKS_PROXY, MIDSCENE_VQA_OPENAI_USE_AZURE, MIDSCENE_VQA_USE_ANTHROPIC_SDK, MIDSCENE_VQA_USE_AZURE_OPENAI, MIDSCENE_VQA_VL_MODE, MODEL_ENV_KEYS, NUMBER_ENV_KEYS, OPENAI_API_KEY, OPENAI_BASE_URL, OPENAI_MAX_TOKENS, OPENAI_USE_AZURE, STRING_ENV_KEYS, types_UITarsModelVersion as UITarsModelVersion, UNUSED_ENV_KEYS, VL_MODE_RAW_VALID_VALUES };
|
|
@@ -106,26 +106,46 @@ async function paddingToMatchBlock(image, blockSize = 28) {
|
|
|
106
106
|
const { width, height } = image.bitmap;
|
|
107
107
|
const targetWidth = Math.ceil(width / blockSize) * blockSize;
|
|
108
108
|
const targetHeight = Math.ceil(height / blockSize) * blockSize;
|
|
109
|
-
if (targetWidth === width && targetHeight === height) return
|
|
109
|
+
if (targetWidth === width && targetHeight === height) return {
|
|
110
|
+
width,
|
|
111
|
+
height,
|
|
112
|
+
image
|
|
113
|
+
};
|
|
110
114
|
const Jimp = await get_jimp();
|
|
111
115
|
const paddedImage = new Jimp(targetWidth, targetHeight, 0xffffffff);
|
|
112
116
|
paddedImage.composite(image, 0, 0);
|
|
113
|
-
return
|
|
117
|
+
return {
|
|
118
|
+
width: targetWidth,
|
|
119
|
+
height: targetHeight,
|
|
120
|
+
image: paddedImage
|
|
121
|
+
};
|
|
114
122
|
}
|
|
115
123
|
async function paddingToMatchBlockByBase64(imageBase64, blockSize = 28) {
|
|
116
124
|
const jimpImage = await jimpFromBase64(imageBase64);
|
|
117
|
-
const
|
|
118
|
-
return
|
|
125
|
+
const paddedResult = await paddingToMatchBlock(jimpImage, blockSize);
|
|
126
|
+
return {
|
|
127
|
+
width: paddedResult.width,
|
|
128
|
+
height: paddedResult.height,
|
|
129
|
+
imageBase64: await jimpToBase64(paddedResult.image)
|
|
130
|
+
};
|
|
119
131
|
}
|
|
120
132
|
async function cropByRect(imageBase64, rect, paddingImage) {
|
|
121
133
|
const jimpImage = await jimpFromBase64(imageBase64);
|
|
122
134
|
const { left, top, width, height } = rect;
|
|
123
135
|
jimpImage.crop(left, top, width, height);
|
|
124
136
|
if (paddingImage) {
|
|
125
|
-
const
|
|
126
|
-
return
|
|
137
|
+
const paddedResult = await paddingToMatchBlock(jimpImage);
|
|
138
|
+
return {
|
|
139
|
+
width: paddedResult.width,
|
|
140
|
+
height: paddedResult.height,
|
|
141
|
+
imageBase64: await jimpToBase64(paddedResult.image)
|
|
142
|
+
};
|
|
127
143
|
}
|
|
128
|
-
return
|
|
144
|
+
return {
|
|
145
|
+
width: jimpImage.bitmap.width,
|
|
146
|
+
height: jimpImage.bitmap.height,
|
|
147
|
+
imageBase64: await jimpToBase64(jimpImage)
|
|
148
|
+
};
|
|
129
149
|
}
|
|
130
150
|
async function jimpToBase64(image) {
|
|
131
151
|
const Jimp = await get_jimp();
|
package/dist/es/index.mjs
CHANGED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __webpack_require__ = {};
|
|
3
|
+
(()=>{
|
|
4
|
+
__webpack_require__.n = (module)=>{
|
|
5
|
+
var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
|
|
6
|
+
__webpack_require__.d(getter, {
|
|
7
|
+
a: getter
|
|
8
|
+
});
|
|
9
|
+
return getter;
|
|
10
|
+
};
|
|
11
|
+
})();
|
|
12
|
+
(()=>{
|
|
13
|
+
__webpack_require__.d = (exports1, definition)=>{
|
|
14
|
+
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: definition[key]
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
})();
|
|
20
|
+
(()=>{
|
|
21
|
+
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
22
|
+
})();
|
|
23
|
+
(()=>{
|
|
24
|
+
__webpack_require__.r = (exports1)=>{
|
|
25
|
+
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
26
|
+
value: 'Module'
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(exports1, '__esModule', {
|
|
29
|
+
value: true
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
})();
|
|
33
|
+
var __webpack_exports__ = {};
|
|
34
|
+
__webpack_require__.r(__webpack_exports__);
|
|
35
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
36
|
+
createPlaygroundCopyPlugin: ()=>createPlaygroundCopyPlugin,
|
|
37
|
+
createCopyStaticPlugin: ()=>createCopyStaticPlugin
|
|
38
|
+
});
|
|
39
|
+
const external_node_fs_namespaceObject = require("node:fs");
|
|
40
|
+
var external_node_fs_default = /*#__PURE__*/ __webpack_require__.n(external_node_fs_namespaceObject);
|
|
41
|
+
const external_node_path_namespaceObject = require("node:path");
|
|
42
|
+
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
43
|
+
const createCopyStaticPlugin = (options)=>({
|
|
44
|
+
name: options.pluginName || 'copy-static',
|
|
45
|
+
setup (api) {
|
|
46
|
+
api.onAfterBuild(async ()=>{
|
|
47
|
+
const { srcDir, destDir, faviconPath } = options;
|
|
48
|
+
await external_node_fs_default().promises.mkdir(destDir, {
|
|
49
|
+
recursive: true
|
|
50
|
+
});
|
|
51
|
+
await external_node_fs_default().promises.cp(srcDir, destDir, {
|
|
52
|
+
recursive: true
|
|
53
|
+
});
|
|
54
|
+
console.log(`Copied build artifacts from ${srcDir} to ${destDir}`);
|
|
55
|
+
if (faviconPath) {
|
|
56
|
+
const faviconDest = external_node_path_default().join(destDir, 'favicon.ico');
|
|
57
|
+
await external_node_fs_default().promises.copyFile(faviconPath, faviconDest);
|
|
58
|
+
console.log(`Copied favicon from ${faviconPath} to ${faviconDest}`);
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
const createPlaygroundCopyPlugin = (srcDir, destDir, pluginName, faviconSrc)=>createCopyStaticPlugin({
|
|
64
|
+
srcDir,
|
|
65
|
+
destDir,
|
|
66
|
+
faviconPath: faviconSrc,
|
|
67
|
+
pluginName
|
|
68
|
+
});
|
|
69
|
+
exports.createCopyStaticPlugin = __webpack_exports__.createCopyStaticPlugin;
|
|
70
|
+
exports.createPlaygroundCopyPlugin = __webpack_exports__.createPlaygroundCopyPlugin;
|
|
71
|
+
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
72
|
+
"createCopyStaticPlugin",
|
|
73
|
+
"createPlaygroundCopyPlugin"
|
|
74
|
+
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
75
|
+
Object.defineProperty(exports, '__esModule', {
|
|
76
|
+
value: true
|
|
77
|
+
});
|
|
@@ -24,17 +24,19 @@ var __webpack_require__ = {};
|
|
|
24
24
|
var __webpack_exports__ = {};
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
-
CONTAINER_MINI_HEIGHT: ()=>CONTAINER_MINI_HEIGHT,
|
|
28
27
|
PLAYGROUND_SERVER_PORT: ()=>PLAYGROUND_SERVER_PORT,
|
|
29
|
-
TEXT_MAX_SIZE: ()=>TEXT_MAX_SIZE,
|
|
30
28
|
DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT: ()=>DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT,
|
|
31
|
-
NodeType: ()=>constants_NodeType,
|
|
32
29
|
SCRCPY_SERVER_PORT: ()=>SCRCPY_SERVER_PORT,
|
|
33
30
|
TEXT_SIZE_THRESHOLD: ()=>TEXT_SIZE_THRESHOLD,
|
|
34
31
|
YAML_EXAMPLE_CODE: ()=>external_example_code_js_namespaceObject.YAML_EXAMPLE_CODE,
|
|
35
32
|
DEFAULT_WAIT_FOR_NETWORK_IDLE_CONCURRENCY: ()=>DEFAULT_WAIT_FOR_NETWORK_IDLE_CONCURRENCY,
|
|
36
33
|
DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT: ()=>DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT,
|
|
37
34
|
CONTAINER_MINI_WIDTH: ()=>CONTAINER_MINI_WIDTH,
|
|
35
|
+
CONTAINER_MINI_HEIGHT: ()=>CONTAINER_MINI_HEIGHT,
|
|
36
|
+
TEXT_MAX_SIZE: ()=>TEXT_MAX_SIZE,
|
|
37
|
+
NodeType: ()=>constants_NodeType,
|
|
38
|
+
WEBDRIVER_ELEMENT_ID_KEY: ()=>WEBDRIVER_ELEMENT_ID_KEY,
|
|
39
|
+
DEFAULT_WDA_PORT: ()=>DEFAULT_WDA_PORT,
|
|
38
40
|
DEFAULT_WAIT_FOR_NETWORK_IDLE_TIME: ()=>DEFAULT_WAIT_FOR_NETWORK_IDLE_TIME,
|
|
39
41
|
PLAYWRIGHT_EXAMPLE_CODE: ()=>external_example_code_js_namespaceObject.PLAYWRIGHT_EXAMPLE_CODE
|
|
40
42
|
});
|
|
@@ -55,6 +57,8 @@ var constants_NodeType = /*#__PURE__*/ function(NodeType) {
|
|
|
55
57
|
}({});
|
|
56
58
|
const PLAYGROUND_SERVER_PORT = 5800;
|
|
57
59
|
const SCRCPY_SERVER_PORT = 5700;
|
|
60
|
+
const WEBDRIVER_ELEMENT_ID_KEY = 'element-6066-11e4-a52e-4f735466cecf';
|
|
61
|
+
const DEFAULT_WDA_PORT = 8100;
|
|
58
62
|
const DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT = 5000;
|
|
59
63
|
const DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT = 2000;
|
|
60
64
|
const DEFAULT_WAIT_FOR_NETWORK_IDLE_TIME = 300;
|
|
@@ -65,12 +69,14 @@ exports.DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT = __webpack_exports__.DEFAULT_WAIT_F
|
|
|
65
69
|
exports.DEFAULT_WAIT_FOR_NETWORK_IDLE_CONCURRENCY = __webpack_exports__.DEFAULT_WAIT_FOR_NETWORK_IDLE_CONCURRENCY;
|
|
66
70
|
exports.DEFAULT_WAIT_FOR_NETWORK_IDLE_TIME = __webpack_exports__.DEFAULT_WAIT_FOR_NETWORK_IDLE_TIME;
|
|
67
71
|
exports.DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT = __webpack_exports__.DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT;
|
|
72
|
+
exports.DEFAULT_WDA_PORT = __webpack_exports__.DEFAULT_WDA_PORT;
|
|
68
73
|
exports.NodeType = __webpack_exports__.NodeType;
|
|
69
74
|
exports.PLAYGROUND_SERVER_PORT = __webpack_exports__.PLAYGROUND_SERVER_PORT;
|
|
70
75
|
exports.PLAYWRIGHT_EXAMPLE_CODE = __webpack_exports__.PLAYWRIGHT_EXAMPLE_CODE;
|
|
71
76
|
exports.SCRCPY_SERVER_PORT = __webpack_exports__.SCRCPY_SERVER_PORT;
|
|
72
77
|
exports.TEXT_MAX_SIZE = __webpack_exports__.TEXT_MAX_SIZE;
|
|
73
78
|
exports.TEXT_SIZE_THRESHOLD = __webpack_exports__.TEXT_SIZE_THRESHOLD;
|
|
79
|
+
exports.WEBDRIVER_ELEMENT_ID_KEY = __webpack_exports__.WEBDRIVER_ELEMENT_ID_KEY;
|
|
74
80
|
exports.YAML_EXAMPLE_CODE = __webpack_exports__.YAML_EXAMPLE_CODE;
|
|
75
81
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
76
82
|
"CONTAINER_MINI_HEIGHT",
|
|
@@ -79,12 +85,14 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
|
79
85
|
"DEFAULT_WAIT_FOR_NETWORK_IDLE_CONCURRENCY",
|
|
80
86
|
"DEFAULT_WAIT_FOR_NETWORK_IDLE_TIME",
|
|
81
87
|
"DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT",
|
|
88
|
+
"DEFAULT_WDA_PORT",
|
|
82
89
|
"NodeType",
|
|
83
90
|
"PLAYGROUND_SERVER_PORT",
|
|
84
91
|
"PLAYWRIGHT_EXAMPLE_CODE",
|
|
85
92
|
"SCRCPY_SERVER_PORT",
|
|
86
93
|
"TEXT_MAX_SIZE",
|
|
87
94
|
"TEXT_SIZE_THRESHOLD",
|
|
95
|
+
"WEBDRIVER_ELEMENT_ID_KEY",
|
|
88
96
|
"YAML_EXAMPLE_CODE"
|
|
89
97
|
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
90
98
|
Object.defineProperty(exports, '__esModule', {
|
package/dist/lib/env/parse.js
CHANGED
|
@@ -51,15 +51,21 @@ const parseVlModeAndUiTarsModelVersionFromRawValue = (vlModeRaw)=>{
|
|
|
51
51
|
const parseVlModeAndUiTarsFromGlobalConfig = (provider)=>{
|
|
52
52
|
const isDoubao = provider[external_types_js_namespaceObject.MIDSCENE_USE_DOUBAO_VISION];
|
|
53
53
|
const isQwen = provider[external_types_js_namespaceObject.MIDSCENE_USE_QWEN_VL];
|
|
54
|
+
const isQwen3 = provider[external_types_js_namespaceObject.MIDSCENE_USE_QWEN3_VL];
|
|
54
55
|
const isUiTars = provider[external_types_js_namespaceObject.MIDSCENE_USE_VLM_UI_TARS];
|
|
55
56
|
const isGemini = provider[external_types_js_namespaceObject.MIDSCENE_USE_GEMINI];
|
|
56
57
|
const enabledModes = [
|
|
57
58
|
isDoubao && external_types_js_namespaceObject.MIDSCENE_USE_DOUBAO_VISION,
|
|
58
59
|
isQwen && external_types_js_namespaceObject.MIDSCENE_USE_QWEN_VL,
|
|
60
|
+
isQwen3 && external_types_js_namespaceObject.MIDSCENE_USE_QWEN3_VL,
|
|
59
61
|
isUiTars && external_types_js_namespaceObject.MIDSCENE_USE_VLM_UI_TARS,
|
|
60
62
|
isGemini && external_types_js_namespaceObject.MIDSCENE_USE_GEMINI
|
|
61
63
|
].filter(Boolean);
|
|
62
64
|
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.`);
|
|
65
|
+
if (isQwen3) return {
|
|
66
|
+
vlMode: 'qwen3-vl',
|
|
67
|
+
uiTarsVersion: void 0
|
|
68
|
+
};
|
|
63
69
|
if (isQwen) return {
|
|
64
70
|
vlMode: 'qwen-vl',
|
|
65
71
|
uiTarsVersion: void 0
|
package/dist/lib/env/types.js
CHANGED
|
@@ -71,6 +71,8 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
71
71
|
MIDSCENE_GROUNDING_USE_ANTHROPIC_SDK: ()=>MIDSCENE_GROUNDING_USE_ANTHROPIC_SDK,
|
|
72
72
|
MIDSCENE_GROUNDING_USE_AZURE_OPENAI: ()=>MIDSCENE_GROUNDING_USE_AZURE_OPENAI,
|
|
73
73
|
MIDSCENE_GROUNDING_VL_MODE: ()=>MIDSCENE_GROUNDING_VL_MODE,
|
|
74
|
+
MIDSCENE_IOS_DEVICE_UDID: ()=>MIDSCENE_IOS_DEVICE_UDID,
|
|
75
|
+
MIDSCENE_IOS_SIMULATOR_UDID: ()=>MIDSCENE_IOS_SIMULATOR_UDID,
|
|
74
76
|
MIDSCENE_LANGSMITH_DEBUG: ()=>MIDSCENE_LANGSMITH_DEBUG,
|
|
75
77
|
MIDSCENE_MCP_ANDROID_MODE: ()=>MIDSCENE_MCP_ANDROID_MODE,
|
|
76
78
|
MIDSCENE_MCP_CHROME_PATH: ()=>MIDSCENE_MCP_CHROME_PATH,
|
|
@@ -107,6 +109,7 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
107
109
|
MIDSCENE_USE_AZURE_OPENAI: ()=>MIDSCENE_USE_AZURE_OPENAI,
|
|
108
110
|
MIDSCENE_USE_DOUBAO_VISION: ()=>MIDSCENE_USE_DOUBAO_VISION,
|
|
109
111
|
MIDSCENE_USE_GEMINI: ()=>MIDSCENE_USE_GEMINI,
|
|
112
|
+
MIDSCENE_USE_QWEN3_VL: ()=>MIDSCENE_USE_QWEN3_VL,
|
|
110
113
|
MIDSCENE_USE_QWEN_VL: ()=>MIDSCENE_USE_QWEN_VL,
|
|
111
114
|
MIDSCENE_USE_VLM_UI_TARS: ()=>MIDSCENE_USE_VLM_UI_TARS,
|
|
112
115
|
MIDSCENE_USE_VL_MODEL: ()=>MIDSCENE_USE_VL_MODEL,
|
|
@@ -160,9 +163,12 @@ const MIDSCENE_ADB_PATH = 'MIDSCENE_ADB_PATH';
|
|
|
160
163
|
const MIDSCENE_ADB_REMOTE_HOST = 'MIDSCENE_ADB_REMOTE_HOST';
|
|
161
164
|
const MIDSCENE_ADB_REMOTE_PORT = 'MIDSCENE_ADB_REMOTE_PORT';
|
|
162
165
|
const MIDSCENE_ANDROID_IME_STRATEGY = 'MIDSCENE_ANDROID_IME_STRATEGY';
|
|
166
|
+
const MIDSCENE_IOS_DEVICE_UDID = 'MIDSCENE_IOS_DEVICE_UDID';
|
|
167
|
+
const MIDSCENE_IOS_SIMULATOR_UDID = 'MIDSCENE_IOS_SIMULATOR_UDID';
|
|
163
168
|
const MIDSCENE_CACHE = 'MIDSCENE_CACHE';
|
|
164
169
|
const MIDSCENE_USE_VLM_UI_TARS = 'MIDSCENE_USE_VLM_UI_TARS';
|
|
165
170
|
const MIDSCENE_USE_QWEN_VL = 'MIDSCENE_USE_QWEN_VL';
|
|
171
|
+
const MIDSCENE_USE_QWEN3_VL = 'MIDSCENE_USE_QWEN3_VL';
|
|
166
172
|
const MIDSCENE_USE_DOUBAO_VISION = 'MIDSCENE_USE_DOUBAO_VISION';
|
|
167
173
|
const MIDSCENE_USE_GEMINI = 'MIDSCENE_USE_GEMINI';
|
|
168
174
|
const MIDSCENE_USE_VL_MODEL = 'MIDSCENE_USE_VL_MODEL';
|
|
@@ -269,6 +275,8 @@ const STRING_ENV_KEYS = [
|
|
|
269
275
|
MIDSCENE_ADB_REMOTE_HOST,
|
|
270
276
|
MIDSCENE_ADB_REMOTE_PORT,
|
|
271
277
|
MIDSCENE_ANDROID_IME_STRATEGY,
|
|
278
|
+
MIDSCENE_IOS_DEVICE_UDID,
|
|
279
|
+
MIDSCENE_IOS_SIMULATOR_UDID,
|
|
272
280
|
MIDSCENE_REPORT_TAG_NAME,
|
|
273
281
|
MIDSCENE_PREFERRED_LANGUAGE,
|
|
274
282
|
MATCH_BY_POSITION,
|
|
@@ -294,6 +302,7 @@ const MODEL_ENV_KEYS = [
|
|
|
294
302
|
MIDSCENE_USE_ANTHROPIC_SDK,
|
|
295
303
|
MIDSCENE_USE_VLM_UI_TARS,
|
|
296
304
|
MIDSCENE_USE_QWEN_VL,
|
|
305
|
+
MIDSCENE_USE_QWEN3_VL,
|
|
297
306
|
MIDSCENE_USE_DOUBAO_VISION,
|
|
298
307
|
MIDSCENE_USE_GEMINI,
|
|
299
308
|
MIDSCENE_USE_VL_MODEL,
|
|
@@ -380,6 +389,7 @@ const VL_MODE_RAW_VALID_VALUES = [
|
|
|
380
389
|
'doubao-vision',
|
|
381
390
|
'gemini',
|
|
382
391
|
'qwen-vl',
|
|
392
|
+
'qwen3-vl',
|
|
383
393
|
'vlm-ui-tars',
|
|
384
394
|
'vlm-ui-tars-doubao',
|
|
385
395
|
'vlm-ui-tars-doubao-1.5'
|
|
@@ -431,6 +441,8 @@ exports.MIDSCENE_GROUNDING_OPENAI_USE_AZURE = __webpack_exports__.MIDSCENE_GROUN
|
|
|
431
441
|
exports.MIDSCENE_GROUNDING_USE_ANTHROPIC_SDK = __webpack_exports__.MIDSCENE_GROUNDING_USE_ANTHROPIC_SDK;
|
|
432
442
|
exports.MIDSCENE_GROUNDING_USE_AZURE_OPENAI = __webpack_exports__.MIDSCENE_GROUNDING_USE_AZURE_OPENAI;
|
|
433
443
|
exports.MIDSCENE_GROUNDING_VL_MODE = __webpack_exports__.MIDSCENE_GROUNDING_VL_MODE;
|
|
444
|
+
exports.MIDSCENE_IOS_DEVICE_UDID = __webpack_exports__.MIDSCENE_IOS_DEVICE_UDID;
|
|
445
|
+
exports.MIDSCENE_IOS_SIMULATOR_UDID = __webpack_exports__.MIDSCENE_IOS_SIMULATOR_UDID;
|
|
434
446
|
exports.MIDSCENE_LANGSMITH_DEBUG = __webpack_exports__.MIDSCENE_LANGSMITH_DEBUG;
|
|
435
447
|
exports.MIDSCENE_MCP_ANDROID_MODE = __webpack_exports__.MIDSCENE_MCP_ANDROID_MODE;
|
|
436
448
|
exports.MIDSCENE_MCP_CHROME_PATH = __webpack_exports__.MIDSCENE_MCP_CHROME_PATH;
|
|
@@ -467,6 +479,7 @@ exports.MIDSCENE_USE_ANTHROPIC_SDK = __webpack_exports__.MIDSCENE_USE_ANTHROPIC_
|
|
|
467
479
|
exports.MIDSCENE_USE_AZURE_OPENAI = __webpack_exports__.MIDSCENE_USE_AZURE_OPENAI;
|
|
468
480
|
exports.MIDSCENE_USE_DOUBAO_VISION = __webpack_exports__.MIDSCENE_USE_DOUBAO_VISION;
|
|
469
481
|
exports.MIDSCENE_USE_GEMINI = __webpack_exports__.MIDSCENE_USE_GEMINI;
|
|
482
|
+
exports.MIDSCENE_USE_QWEN3_VL = __webpack_exports__.MIDSCENE_USE_QWEN3_VL;
|
|
470
483
|
exports.MIDSCENE_USE_QWEN_VL = __webpack_exports__.MIDSCENE_USE_QWEN_VL;
|
|
471
484
|
exports.MIDSCENE_USE_VLM_UI_TARS = __webpack_exports__.MIDSCENE_USE_VLM_UI_TARS;
|
|
472
485
|
exports.MIDSCENE_USE_VL_MODEL = __webpack_exports__.MIDSCENE_USE_VL_MODEL;
|
|
@@ -546,6 +559,8 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
|
546
559
|
"MIDSCENE_GROUNDING_USE_ANTHROPIC_SDK",
|
|
547
560
|
"MIDSCENE_GROUNDING_USE_AZURE_OPENAI",
|
|
548
561
|
"MIDSCENE_GROUNDING_VL_MODE",
|
|
562
|
+
"MIDSCENE_IOS_DEVICE_UDID",
|
|
563
|
+
"MIDSCENE_IOS_SIMULATOR_UDID",
|
|
549
564
|
"MIDSCENE_LANGSMITH_DEBUG",
|
|
550
565
|
"MIDSCENE_MCP_ANDROID_MODE",
|
|
551
566
|
"MIDSCENE_MCP_CHROME_PATH",
|
|
@@ -582,6 +597,7 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
|
582
597
|
"MIDSCENE_USE_AZURE_OPENAI",
|
|
583
598
|
"MIDSCENE_USE_DOUBAO_VISION",
|
|
584
599
|
"MIDSCENE_USE_GEMINI",
|
|
600
|
+
"MIDSCENE_USE_QWEN3_VL",
|
|
585
601
|
"MIDSCENE_USE_QWEN_VL",
|
|
586
602
|
"MIDSCENE_USE_VLM_UI_TARS",
|
|
587
603
|
"MIDSCENE_USE_VL_MODEL",
|
|
@@ -161,26 +161,46 @@ async function paddingToMatchBlock(image, blockSize = 28) {
|
|
|
161
161
|
const { width, height } = image.bitmap;
|
|
162
162
|
const targetWidth = Math.ceil(width / blockSize) * blockSize;
|
|
163
163
|
const targetHeight = Math.ceil(height / blockSize) * blockSize;
|
|
164
|
-
if (targetWidth === width && targetHeight === height) return
|
|
164
|
+
if (targetWidth === width && targetHeight === height) return {
|
|
165
|
+
width,
|
|
166
|
+
height,
|
|
167
|
+
image
|
|
168
|
+
};
|
|
165
169
|
const Jimp = await external_get_jimp_js_default()();
|
|
166
170
|
const paddedImage = new Jimp(targetWidth, targetHeight, 0xffffffff);
|
|
167
171
|
paddedImage.composite(image, 0, 0);
|
|
168
|
-
return
|
|
172
|
+
return {
|
|
173
|
+
width: targetWidth,
|
|
174
|
+
height: targetHeight,
|
|
175
|
+
image: paddedImage
|
|
176
|
+
};
|
|
169
177
|
}
|
|
170
178
|
async function paddingToMatchBlockByBase64(imageBase64, blockSize = 28) {
|
|
171
179
|
const jimpImage = await jimpFromBase64(imageBase64);
|
|
172
|
-
const
|
|
173
|
-
return
|
|
180
|
+
const paddedResult = await paddingToMatchBlock(jimpImage, blockSize);
|
|
181
|
+
return {
|
|
182
|
+
width: paddedResult.width,
|
|
183
|
+
height: paddedResult.height,
|
|
184
|
+
imageBase64: await jimpToBase64(paddedResult.image)
|
|
185
|
+
};
|
|
174
186
|
}
|
|
175
187
|
async function cropByRect(imageBase64, rect, paddingImage) {
|
|
176
188
|
const jimpImage = await jimpFromBase64(imageBase64);
|
|
177
189
|
const { left, top, width, height } = rect;
|
|
178
190
|
jimpImage.crop(left, top, width, height);
|
|
179
191
|
if (paddingImage) {
|
|
180
|
-
const
|
|
181
|
-
return
|
|
192
|
+
const paddedResult = await paddingToMatchBlock(jimpImage);
|
|
193
|
+
return {
|
|
194
|
+
width: paddedResult.width,
|
|
195
|
+
height: paddedResult.height,
|
|
196
|
+
imageBase64: await jimpToBase64(paddedResult.image)
|
|
197
|
+
};
|
|
182
198
|
}
|
|
183
|
-
return
|
|
199
|
+
return {
|
|
200
|
+
width: jimpImage.bitmap.width,
|
|
201
|
+
height: jimpImage.bitmap.height,
|
|
202
|
+
imageBase64: await jimpToBase64(jimpImage)
|
|
203
|
+
};
|
|
184
204
|
}
|
|
185
205
|
async function jimpToBase64(image) {
|
|
186
206
|
const Jimp = await external_get_jimp_js_default()();
|
package/dist/lib/index.js
CHANGED
|
@@ -24,11 +24,18 @@ var __webpack_require__ = {};
|
|
|
24
24
|
var __webpack_exports__ = {};
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
-
|
|
27
|
+
createPlaygroundCopyPlugin: ()=>copy_static_js_namespaceObject.createPlaygroundCopyPlugin,
|
|
28
|
+
createCopyStaticPlugin: ()=>copy_static_js_namespaceObject.createCopyStaticPlugin,
|
|
29
|
+
default: ()=>src
|
|
28
30
|
});
|
|
29
|
-
const
|
|
31
|
+
const copy_static_js_namespaceObject = require("./build/copy-static.js");
|
|
32
|
+
const src = {};
|
|
33
|
+
exports.createCopyStaticPlugin = __webpack_exports__.createCopyStaticPlugin;
|
|
34
|
+
exports.createPlaygroundCopyPlugin = __webpack_exports__.createPlaygroundCopyPlugin;
|
|
30
35
|
exports["default"] = __webpack_exports__["default"];
|
|
31
36
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
37
|
+
"createCopyStaticPlugin",
|
|
38
|
+
"createPlaygroundCopyPlugin",
|
|
32
39
|
"default"
|
|
33
40
|
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
34
41
|
Object.defineProperty(exports, '__esModule', {
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface CopyStaticOptions {
|
|
2
|
+
/** Source directory to copy from */
|
|
3
|
+
srcDir: string;
|
|
4
|
+
/** Destination directory to copy to */
|
|
5
|
+
destDir: string;
|
|
6
|
+
/** Optional favicon source path (relative to directory containing srcDir) */
|
|
7
|
+
faviconPath?: string;
|
|
8
|
+
/** Name for the rsbuild plugin */
|
|
9
|
+
pluginName?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Creates an rsbuild plugin that copies static files after build
|
|
13
|
+
* @param options Configuration options for copying static files
|
|
14
|
+
* @returns Rsbuild plugin object
|
|
15
|
+
*/
|
|
16
|
+
export declare const createCopyStaticPlugin: (options: CopyStaticOptions) => {
|
|
17
|
+
name: string;
|
|
18
|
+
setup(api: any): void;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Helper function to create a copy static plugin for playground builds
|
|
22
|
+
* @param srcDir Source directory (usually dist directory)
|
|
23
|
+
* @param destDir Destination directory
|
|
24
|
+
* @param pluginName Optional plugin name
|
|
25
|
+
* @param faviconSrc Optional favicon source path
|
|
26
|
+
* @returns Rsbuild plugin
|
|
27
|
+
*/
|
|
28
|
+
export declare const createPlaygroundCopyPlugin: (srcDir: string, destDir: string, pluginName?: string, faviconSrc?: string) => {
|
|
29
|
+
name: string;
|
|
30
|
+
setup(api: any): void;
|
|
31
|
+
};
|
|
@@ -13,6 +13,8 @@ export declare enum NodeType {
|
|
|
13
13
|
}
|
|
14
14
|
export declare const PLAYGROUND_SERVER_PORT = 5800;
|
|
15
15
|
export declare const SCRCPY_SERVER_PORT = 5700;
|
|
16
|
+
export declare const WEBDRIVER_ELEMENT_ID_KEY = "element-6066-11e4-a52e-4f735466cecf";
|
|
17
|
+
export declare const DEFAULT_WDA_PORT = 8100;
|
|
16
18
|
export declare const DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT = 5000;
|
|
17
19
|
export declare const DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT = 2000;
|
|
18
20
|
export declare const DEFAULT_WAIT_FOR_NETWORK_IDLE_TIME = 300;
|
|
@@ -19,9 +19,12 @@ export declare const MIDSCENE_ADB_PATH = "MIDSCENE_ADB_PATH";
|
|
|
19
19
|
export declare const MIDSCENE_ADB_REMOTE_HOST = "MIDSCENE_ADB_REMOTE_HOST";
|
|
20
20
|
export declare const MIDSCENE_ADB_REMOTE_PORT = "MIDSCENE_ADB_REMOTE_PORT";
|
|
21
21
|
export declare const MIDSCENE_ANDROID_IME_STRATEGY = "MIDSCENE_ANDROID_IME_STRATEGY";
|
|
22
|
+
export declare const MIDSCENE_IOS_DEVICE_UDID = "MIDSCENE_IOS_DEVICE_UDID";
|
|
23
|
+
export declare const MIDSCENE_IOS_SIMULATOR_UDID = "MIDSCENE_IOS_SIMULATOR_UDID";
|
|
22
24
|
export declare const MIDSCENE_CACHE = "MIDSCENE_CACHE";
|
|
23
25
|
export declare const MIDSCENE_USE_VLM_UI_TARS = "MIDSCENE_USE_VLM_UI_TARS";
|
|
24
26
|
export declare const MIDSCENE_USE_QWEN_VL = "MIDSCENE_USE_QWEN_VL";
|
|
27
|
+
export declare const MIDSCENE_USE_QWEN3_VL = "MIDSCENE_USE_QWEN3_VL";
|
|
25
28
|
export declare const MIDSCENE_USE_DOUBAO_VISION = "MIDSCENE_USE_DOUBAO_VISION";
|
|
26
29
|
export declare const MIDSCENE_USE_GEMINI = "MIDSCENE_USE_GEMINI";
|
|
27
30
|
export declare const MIDSCENE_USE_VL_MODEL = "MIDSCENE_USE_VL_MODEL";
|
|
@@ -113,24 +116,24 @@ export declare const UNUSED_ENV_KEYS: string[];
|
|
|
113
116
|
export declare const BASIC_ENV_KEYS: readonly ["MIDSCENE_DEBUG_MODE", "MIDSCENE_DEBUG_AI_PROFILE", "MIDSCENE_DEBUG_AI_RESPONSE", "MIDSCENE_RUN_DIR"];
|
|
114
117
|
export declare const BOOLEAN_ENV_KEYS: readonly ["MIDSCENE_CACHE", "MIDSCENE_LANGSMITH_DEBUG", "MIDSCENE_FORCE_DEEP_THINK", "MIDSCENE_MCP_USE_PUPPETEER_MODE", "MIDSCENE_MCP_ANDROID_MODE"];
|
|
115
118
|
export declare const NUMBER_ENV_KEYS: readonly ["MIDSCENE_CACHE_MAX_FILENAME_LENGTH", "MIDSCENE_REPLANNING_CYCLE_LIMIT"];
|
|
116
|
-
export declare const STRING_ENV_KEYS: readonly ["OPENAI_MAX_TOKENS", "MIDSCENE_ADB_PATH", "MIDSCENE_ADB_REMOTE_HOST", "MIDSCENE_ADB_REMOTE_PORT", "MIDSCENE_ANDROID_IME_STRATEGY", "MIDSCENE_REPORT_TAG_NAME", "MIDSCENE_PREFERRED_LANGUAGE", "MATCH_BY_POSITION", "MIDSCENE_MCP_CHROME_PATH", "DOCKER_CONTAINER"];
|
|
119
|
+
export declare const STRING_ENV_KEYS: readonly ["OPENAI_MAX_TOKENS", "MIDSCENE_ADB_PATH", "MIDSCENE_ADB_REMOTE_HOST", "MIDSCENE_ADB_REMOTE_PORT", "MIDSCENE_ANDROID_IME_STRATEGY", "MIDSCENE_IOS_DEVICE_UDID", "MIDSCENE_IOS_SIMULATOR_UDID", "MIDSCENE_REPORT_TAG_NAME", "MIDSCENE_PREFERRED_LANGUAGE", "MATCH_BY_POSITION", "MIDSCENE_MCP_CHROME_PATH", "DOCKER_CONTAINER"];
|
|
117
120
|
/**
|
|
118
121
|
* Non model related env keys, used for globally controlling the behavior of midscene
|
|
119
122
|
* Can not be override by agent.modelConfig but can be override by overrideAIConfig
|
|
120
123
|
* Can be access at any time
|
|
121
124
|
*/
|
|
122
|
-
export declare const GLOBAL_ENV_KEYS: readonly ["MIDSCENE_CACHE", "MIDSCENE_LANGSMITH_DEBUG", "MIDSCENE_FORCE_DEEP_THINK", "MIDSCENE_MCP_USE_PUPPETEER_MODE", "MIDSCENE_MCP_ANDROID_MODE", "MIDSCENE_CACHE_MAX_FILENAME_LENGTH", "MIDSCENE_REPLANNING_CYCLE_LIMIT", "OPENAI_MAX_TOKENS", "MIDSCENE_ADB_PATH", "MIDSCENE_ADB_REMOTE_HOST", "MIDSCENE_ADB_REMOTE_PORT", "MIDSCENE_ANDROID_IME_STRATEGY", "MIDSCENE_REPORT_TAG_NAME", "MIDSCENE_PREFERRED_LANGUAGE", "MATCH_BY_POSITION", "MIDSCENE_MCP_CHROME_PATH", "DOCKER_CONTAINER"];
|
|
125
|
+
export declare const GLOBAL_ENV_KEYS: readonly ["MIDSCENE_CACHE", "MIDSCENE_LANGSMITH_DEBUG", "MIDSCENE_FORCE_DEEP_THINK", "MIDSCENE_MCP_USE_PUPPETEER_MODE", "MIDSCENE_MCP_ANDROID_MODE", "MIDSCENE_CACHE_MAX_FILENAME_LENGTH", "MIDSCENE_REPLANNING_CYCLE_LIMIT", "OPENAI_MAX_TOKENS", "MIDSCENE_ADB_PATH", "MIDSCENE_ADB_REMOTE_HOST", "MIDSCENE_ADB_REMOTE_PORT", "MIDSCENE_ANDROID_IME_STRATEGY", "MIDSCENE_IOS_DEVICE_UDID", "MIDSCENE_IOS_SIMULATOR_UDID", "MIDSCENE_REPORT_TAG_NAME", "MIDSCENE_PREFERRED_LANGUAGE", "MATCH_BY_POSITION", "MIDSCENE_MCP_CHROME_PATH", "DOCKER_CONTAINER"];
|
|
123
126
|
/**
|
|
124
127
|
* Model related eve keys, used for declare which model to use.
|
|
125
128
|
* Can be override by both agent.modelConfig and overrideAIConfig
|
|
126
129
|
* Can only be access after agent.constructor
|
|
127
130
|
*/
|
|
128
|
-
export declare const MODEL_ENV_KEYS: readonly ["MIDSCENE_MODEL_NAME", "MIDSCENE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_OPENAI_API_KEY", "MIDSCENE_OPENAI_BASE_URL", "MIDSCENE_OPENAI_USE_AZURE", "MIDSCENE_OPENAI_SOCKS_PROXY", "MIDSCENE_OPENAI_HTTP_PROXY", "MIDSCENE_USE_AZURE_OPENAI", "MIDSCENE_AZURE_OPENAI_SCOPE", "MIDSCENE_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_USE_ANTHROPIC_SDK", "MIDSCENE_USE_VLM_UI_TARS", "MIDSCENE_USE_QWEN_VL", "MIDSCENE_USE_DOUBAO_VISION", "MIDSCENE_USE_GEMINI", "MIDSCENE_USE_VL_MODEL", "ANTHROPIC_API_KEY", "MIDSCENE_AZURE_OPENAI_ENDPOINT", "MIDSCENE_AZURE_OPENAI_KEY", "MIDSCENE_AZURE_OPENAI_API_VERSION", "MIDSCENE_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_VL_MODE", "OPENAI_API_KEY", "OPENAI_BASE_URL", "OPENAI_USE_AZURE", "ANTHROPIC_API_KEY", "AZURE_OPENAI_ENDPOINT", "AZURE_OPENAI_KEY", "AZURE_OPENAI_API_VERSION", "AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_VQA_MODEL_NAME", "MIDSCENE_VQA_OPENAI_SOCKS_PROXY", "MIDSCENE_VQA_OPENAI_HTTP_PROXY", "MIDSCENE_VQA_OPENAI_BASE_URL", "MIDSCENE_VQA_OPENAI_API_KEY", "MIDSCENE_VQA_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_VQA_OPENAI_USE_AZURE", "MIDSCENE_VQA_USE_AZURE_OPENAI", "MIDSCENE_VQA_AZURE_OPENAI_SCOPE", "MIDSCENE_VQA_AZURE_OPENAI_KEY", "MIDSCENE_VQA_AZURE_OPENAI_ENDPOINT", "MIDSCENE_VQA_AZURE_OPENAI_API_VERSION", "MIDSCENE_VQA_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_VQA_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_VQA_USE_ANTHROPIC_SDK", "MIDSCENE_VQA_ANTHROPIC_API_KEY", "MIDSCENE_VQA_VL_MODE", "MIDSCENE_PLANNING_MODEL_NAME", "MIDSCENE_PLANNING_OPENAI_SOCKS_PROXY", "MIDSCENE_PLANNING_OPENAI_HTTP_PROXY", "MIDSCENE_PLANNING_OPENAI_BASE_URL", "MIDSCENE_PLANNING_OPENAI_API_KEY", "MIDSCENE_PLANNING_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_PLANNING_OPENAI_USE_AZURE", "MIDSCENE_PLANNING_USE_AZURE_OPENAI", "MIDSCENE_PLANNING_AZURE_OPENAI_SCOPE", "MIDSCENE_PLANNING_AZURE_OPENAI_KEY", "MIDSCENE_PLANNING_AZURE_OPENAI_ENDPOINT", "MIDSCENE_PLANNING_AZURE_OPENAI_API_VERSION", "MIDSCENE_PLANNING_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_PLANNING_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_PLANNING_USE_ANTHROPIC_SDK", "MIDSCENE_PLANNING_ANTHROPIC_API_KEY", "MIDSCENE_PLANNING_VL_MODE", "MIDSCENE_GROUNDING_MODEL_NAME", "MIDSCENE_GROUNDING_OPENAI_SOCKS_PROXY", "MIDSCENE_GROUNDING_OPENAI_HTTP_PROXY", "MIDSCENE_GROUNDING_OPENAI_BASE_URL", "MIDSCENE_GROUNDING_OPENAI_API_KEY", "MIDSCENE_GROUNDING_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_GROUNDING_OPENAI_USE_AZURE", "MIDSCENE_GROUNDING_USE_AZURE_OPENAI", "MIDSCENE_GROUNDING_AZURE_OPENAI_SCOPE", "MIDSCENE_GROUNDING_AZURE_OPENAI_KEY", "MIDSCENE_GROUNDING_AZURE_OPENAI_ENDPOINT", "MIDSCENE_GROUNDING_AZURE_OPENAI_API_VERSION", "MIDSCENE_GROUNDING_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_GROUNDING_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_GROUNDING_USE_ANTHROPIC_SDK", "MIDSCENE_GROUNDING_ANTHROPIC_API_KEY", "MIDSCENE_GROUNDING_VL_MODE"];
|
|
129
|
-
export declare const ALL_ENV_KEYS: readonly [...string[], "MIDSCENE_DEBUG_MODE", "MIDSCENE_DEBUG_AI_PROFILE", "MIDSCENE_DEBUG_AI_RESPONSE", "MIDSCENE_RUN_DIR", "MIDSCENE_CACHE", "MIDSCENE_LANGSMITH_DEBUG", "MIDSCENE_FORCE_DEEP_THINK", "MIDSCENE_MCP_USE_PUPPETEER_MODE", "MIDSCENE_MCP_ANDROID_MODE", "MIDSCENE_CACHE_MAX_FILENAME_LENGTH", "MIDSCENE_REPLANNING_CYCLE_LIMIT", "OPENAI_MAX_TOKENS", "MIDSCENE_ADB_PATH", "MIDSCENE_ADB_REMOTE_HOST", "MIDSCENE_ADB_REMOTE_PORT", "MIDSCENE_ANDROID_IME_STRATEGY", "MIDSCENE_REPORT_TAG_NAME", "MIDSCENE_PREFERRED_LANGUAGE", "MATCH_BY_POSITION", "MIDSCENE_MCP_CHROME_PATH", "DOCKER_CONTAINER", "MIDSCENE_MODEL_NAME", "MIDSCENE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_OPENAI_API_KEY", "MIDSCENE_OPENAI_BASE_URL", "MIDSCENE_OPENAI_USE_AZURE", "MIDSCENE_OPENAI_SOCKS_PROXY", "MIDSCENE_OPENAI_HTTP_PROXY", "MIDSCENE_USE_AZURE_OPENAI", "MIDSCENE_AZURE_OPENAI_SCOPE", "MIDSCENE_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_USE_ANTHROPIC_SDK", "MIDSCENE_USE_VLM_UI_TARS", "MIDSCENE_USE_QWEN_VL", "MIDSCENE_USE_DOUBAO_VISION", "MIDSCENE_USE_GEMINI", "MIDSCENE_USE_VL_MODEL", "ANTHROPIC_API_KEY", "MIDSCENE_AZURE_OPENAI_ENDPOINT", "MIDSCENE_AZURE_OPENAI_KEY", "MIDSCENE_AZURE_OPENAI_API_VERSION", "MIDSCENE_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_VL_MODE", "OPENAI_API_KEY", "OPENAI_BASE_URL", "OPENAI_USE_AZURE", "ANTHROPIC_API_KEY", "AZURE_OPENAI_ENDPOINT", "AZURE_OPENAI_KEY", "AZURE_OPENAI_API_VERSION", "AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_VQA_MODEL_NAME", "MIDSCENE_VQA_OPENAI_SOCKS_PROXY", "MIDSCENE_VQA_OPENAI_HTTP_PROXY", "MIDSCENE_VQA_OPENAI_BASE_URL", "MIDSCENE_VQA_OPENAI_API_KEY", "MIDSCENE_VQA_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_VQA_OPENAI_USE_AZURE", "MIDSCENE_VQA_USE_AZURE_OPENAI", "MIDSCENE_VQA_AZURE_OPENAI_SCOPE", "MIDSCENE_VQA_AZURE_OPENAI_KEY", "MIDSCENE_VQA_AZURE_OPENAI_ENDPOINT", "MIDSCENE_VQA_AZURE_OPENAI_API_VERSION", "MIDSCENE_VQA_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_VQA_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_VQA_USE_ANTHROPIC_SDK", "MIDSCENE_VQA_ANTHROPIC_API_KEY", "MIDSCENE_VQA_VL_MODE", "MIDSCENE_PLANNING_MODEL_NAME", "MIDSCENE_PLANNING_OPENAI_SOCKS_PROXY", "MIDSCENE_PLANNING_OPENAI_HTTP_PROXY", "MIDSCENE_PLANNING_OPENAI_BASE_URL", "MIDSCENE_PLANNING_OPENAI_API_KEY", "MIDSCENE_PLANNING_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_PLANNING_OPENAI_USE_AZURE", "MIDSCENE_PLANNING_USE_AZURE_OPENAI", "MIDSCENE_PLANNING_AZURE_OPENAI_SCOPE", "MIDSCENE_PLANNING_AZURE_OPENAI_KEY", "MIDSCENE_PLANNING_AZURE_OPENAI_ENDPOINT", "MIDSCENE_PLANNING_AZURE_OPENAI_API_VERSION", "MIDSCENE_PLANNING_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_PLANNING_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_PLANNING_USE_ANTHROPIC_SDK", "MIDSCENE_PLANNING_ANTHROPIC_API_KEY", "MIDSCENE_PLANNING_VL_MODE", "MIDSCENE_GROUNDING_MODEL_NAME", "MIDSCENE_GROUNDING_OPENAI_SOCKS_PROXY", "MIDSCENE_GROUNDING_OPENAI_HTTP_PROXY", "MIDSCENE_GROUNDING_OPENAI_BASE_URL", "MIDSCENE_GROUNDING_OPENAI_API_KEY", "MIDSCENE_GROUNDING_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_GROUNDING_OPENAI_USE_AZURE", "MIDSCENE_GROUNDING_USE_AZURE_OPENAI", "MIDSCENE_GROUNDING_AZURE_OPENAI_SCOPE", "MIDSCENE_GROUNDING_AZURE_OPENAI_KEY", "MIDSCENE_GROUNDING_AZURE_OPENAI_ENDPOINT", "MIDSCENE_GROUNDING_AZURE_OPENAI_API_VERSION", "MIDSCENE_GROUNDING_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_GROUNDING_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_GROUNDING_USE_ANTHROPIC_SDK", "MIDSCENE_GROUNDING_ANTHROPIC_API_KEY", "MIDSCENE_GROUNDING_VL_MODE"];
|
|
131
|
+
export declare const MODEL_ENV_KEYS: readonly ["MIDSCENE_MODEL_NAME", "MIDSCENE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_OPENAI_API_KEY", "MIDSCENE_OPENAI_BASE_URL", "MIDSCENE_OPENAI_USE_AZURE", "MIDSCENE_OPENAI_SOCKS_PROXY", "MIDSCENE_OPENAI_HTTP_PROXY", "MIDSCENE_USE_AZURE_OPENAI", "MIDSCENE_AZURE_OPENAI_SCOPE", "MIDSCENE_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_USE_ANTHROPIC_SDK", "MIDSCENE_USE_VLM_UI_TARS", "MIDSCENE_USE_QWEN_VL", "MIDSCENE_USE_QWEN3_VL", "MIDSCENE_USE_DOUBAO_VISION", "MIDSCENE_USE_GEMINI", "MIDSCENE_USE_VL_MODEL", "ANTHROPIC_API_KEY", "MIDSCENE_AZURE_OPENAI_ENDPOINT", "MIDSCENE_AZURE_OPENAI_KEY", "MIDSCENE_AZURE_OPENAI_API_VERSION", "MIDSCENE_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_VL_MODE", "OPENAI_API_KEY", "OPENAI_BASE_URL", "OPENAI_USE_AZURE", "ANTHROPIC_API_KEY", "AZURE_OPENAI_ENDPOINT", "AZURE_OPENAI_KEY", "AZURE_OPENAI_API_VERSION", "AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_VQA_MODEL_NAME", "MIDSCENE_VQA_OPENAI_SOCKS_PROXY", "MIDSCENE_VQA_OPENAI_HTTP_PROXY", "MIDSCENE_VQA_OPENAI_BASE_URL", "MIDSCENE_VQA_OPENAI_API_KEY", "MIDSCENE_VQA_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_VQA_OPENAI_USE_AZURE", "MIDSCENE_VQA_USE_AZURE_OPENAI", "MIDSCENE_VQA_AZURE_OPENAI_SCOPE", "MIDSCENE_VQA_AZURE_OPENAI_KEY", "MIDSCENE_VQA_AZURE_OPENAI_ENDPOINT", "MIDSCENE_VQA_AZURE_OPENAI_API_VERSION", "MIDSCENE_VQA_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_VQA_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_VQA_USE_ANTHROPIC_SDK", "MIDSCENE_VQA_ANTHROPIC_API_KEY", "MIDSCENE_VQA_VL_MODE", "MIDSCENE_PLANNING_MODEL_NAME", "MIDSCENE_PLANNING_OPENAI_SOCKS_PROXY", "MIDSCENE_PLANNING_OPENAI_HTTP_PROXY", "MIDSCENE_PLANNING_OPENAI_BASE_URL", "MIDSCENE_PLANNING_OPENAI_API_KEY", "MIDSCENE_PLANNING_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_PLANNING_OPENAI_USE_AZURE", "MIDSCENE_PLANNING_USE_AZURE_OPENAI", "MIDSCENE_PLANNING_AZURE_OPENAI_SCOPE", "MIDSCENE_PLANNING_AZURE_OPENAI_KEY", "MIDSCENE_PLANNING_AZURE_OPENAI_ENDPOINT", "MIDSCENE_PLANNING_AZURE_OPENAI_API_VERSION", "MIDSCENE_PLANNING_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_PLANNING_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_PLANNING_USE_ANTHROPIC_SDK", "MIDSCENE_PLANNING_ANTHROPIC_API_KEY", "MIDSCENE_PLANNING_VL_MODE", "MIDSCENE_GROUNDING_MODEL_NAME", "MIDSCENE_GROUNDING_OPENAI_SOCKS_PROXY", "MIDSCENE_GROUNDING_OPENAI_HTTP_PROXY", "MIDSCENE_GROUNDING_OPENAI_BASE_URL", "MIDSCENE_GROUNDING_OPENAI_API_KEY", "MIDSCENE_GROUNDING_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_GROUNDING_OPENAI_USE_AZURE", "MIDSCENE_GROUNDING_USE_AZURE_OPENAI", "MIDSCENE_GROUNDING_AZURE_OPENAI_SCOPE", "MIDSCENE_GROUNDING_AZURE_OPENAI_KEY", "MIDSCENE_GROUNDING_AZURE_OPENAI_ENDPOINT", "MIDSCENE_GROUNDING_AZURE_OPENAI_API_VERSION", "MIDSCENE_GROUNDING_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_GROUNDING_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_GROUNDING_USE_ANTHROPIC_SDK", "MIDSCENE_GROUNDING_ANTHROPIC_API_KEY", "MIDSCENE_GROUNDING_VL_MODE"];
|
|
132
|
+
export declare const ALL_ENV_KEYS: readonly [...string[], "MIDSCENE_DEBUG_MODE", "MIDSCENE_DEBUG_AI_PROFILE", "MIDSCENE_DEBUG_AI_RESPONSE", "MIDSCENE_RUN_DIR", "MIDSCENE_CACHE", "MIDSCENE_LANGSMITH_DEBUG", "MIDSCENE_FORCE_DEEP_THINK", "MIDSCENE_MCP_USE_PUPPETEER_MODE", "MIDSCENE_MCP_ANDROID_MODE", "MIDSCENE_CACHE_MAX_FILENAME_LENGTH", "MIDSCENE_REPLANNING_CYCLE_LIMIT", "OPENAI_MAX_TOKENS", "MIDSCENE_ADB_PATH", "MIDSCENE_ADB_REMOTE_HOST", "MIDSCENE_ADB_REMOTE_PORT", "MIDSCENE_ANDROID_IME_STRATEGY", "MIDSCENE_IOS_DEVICE_UDID", "MIDSCENE_IOS_SIMULATOR_UDID", "MIDSCENE_REPORT_TAG_NAME", "MIDSCENE_PREFERRED_LANGUAGE", "MATCH_BY_POSITION", "MIDSCENE_MCP_CHROME_PATH", "DOCKER_CONTAINER", "MIDSCENE_MODEL_NAME", "MIDSCENE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_OPENAI_API_KEY", "MIDSCENE_OPENAI_BASE_URL", "MIDSCENE_OPENAI_USE_AZURE", "MIDSCENE_OPENAI_SOCKS_PROXY", "MIDSCENE_OPENAI_HTTP_PROXY", "MIDSCENE_USE_AZURE_OPENAI", "MIDSCENE_AZURE_OPENAI_SCOPE", "MIDSCENE_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_USE_ANTHROPIC_SDK", "MIDSCENE_USE_VLM_UI_TARS", "MIDSCENE_USE_QWEN_VL", "MIDSCENE_USE_QWEN3_VL", "MIDSCENE_USE_DOUBAO_VISION", "MIDSCENE_USE_GEMINI", "MIDSCENE_USE_VL_MODEL", "ANTHROPIC_API_KEY", "MIDSCENE_AZURE_OPENAI_ENDPOINT", "MIDSCENE_AZURE_OPENAI_KEY", "MIDSCENE_AZURE_OPENAI_API_VERSION", "MIDSCENE_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_VL_MODE", "OPENAI_API_KEY", "OPENAI_BASE_URL", "OPENAI_USE_AZURE", "ANTHROPIC_API_KEY", "AZURE_OPENAI_ENDPOINT", "AZURE_OPENAI_KEY", "AZURE_OPENAI_API_VERSION", "AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_VQA_MODEL_NAME", "MIDSCENE_VQA_OPENAI_SOCKS_PROXY", "MIDSCENE_VQA_OPENAI_HTTP_PROXY", "MIDSCENE_VQA_OPENAI_BASE_URL", "MIDSCENE_VQA_OPENAI_API_KEY", "MIDSCENE_VQA_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_VQA_OPENAI_USE_AZURE", "MIDSCENE_VQA_USE_AZURE_OPENAI", "MIDSCENE_VQA_AZURE_OPENAI_SCOPE", "MIDSCENE_VQA_AZURE_OPENAI_KEY", "MIDSCENE_VQA_AZURE_OPENAI_ENDPOINT", "MIDSCENE_VQA_AZURE_OPENAI_API_VERSION", "MIDSCENE_VQA_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_VQA_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_VQA_USE_ANTHROPIC_SDK", "MIDSCENE_VQA_ANTHROPIC_API_KEY", "MIDSCENE_VQA_VL_MODE", "MIDSCENE_PLANNING_MODEL_NAME", "MIDSCENE_PLANNING_OPENAI_SOCKS_PROXY", "MIDSCENE_PLANNING_OPENAI_HTTP_PROXY", "MIDSCENE_PLANNING_OPENAI_BASE_URL", "MIDSCENE_PLANNING_OPENAI_API_KEY", "MIDSCENE_PLANNING_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_PLANNING_OPENAI_USE_AZURE", "MIDSCENE_PLANNING_USE_AZURE_OPENAI", "MIDSCENE_PLANNING_AZURE_OPENAI_SCOPE", "MIDSCENE_PLANNING_AZURE_OPENAI_KEY", "MIDSCENE_PLANNING_AZURE_OPENAI_ENDPOINT", "MIDSCENE_PLANNING_AZURE_OPENAI_API_VERSION", "MIDSCENE_PLANNING_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_PLANNING_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_PLANNING_USE_ANTHROPIC_SDK", "MIDSCENE_PLANNING_ANTHROPIC_API_KEY", "MIDSCENE_PLANNING_VL_MODE", "MIDSCENE_GROUNDING_MODEL_NAME", "MIDSCENE_GROUNDING_OPENAI_SOCKS_PROXY", "MIDSCENE_GROUNDING_OPENAI_HTTP_PROXY", "MIDSCENE_GROUNDING_OPENAI_BASE_URL", "MIDSCENE_GROUNDING_OPENAI_API_KEY", "MIDSCENE_GROUNDING_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_GROUNDING_OPENAI_USE_AZURE", "MIDSCENE_GROUNDING_USE_AZURE_OPENAI", "MIDSCENE_GROUNDING_AZURE_OPENAI_SCOPE", "MIDSCENE_GROUNDING_AZURE_OPENAI_KEY", "MIDSCENE_GROUNDING_AZURE_OPENAI_ENDPOINT", "MIDSCENE_GROUNDING_AZURE_OPENAI_API_VERSION", "MIDSCENE_GROUNDING_AZURE_OPENAI_DEPLOYMENT", "MIDSCENE_GROUNDING_AZURE_OPENAI_INIT_CONFIG_JSON", "MIDSCENE_GROUNDING_USE_ANTHROPIC_SDK", "MIDSCENE_GROUNDING_ANTHROPIC_API_KEY", "MIDSCENE_GROUNDING_VL_MODE"];
|
|
130
133
|
export type TEnvKeys = (typeof ALL_ENV_KEYS)[number];
|
|
131
134
|
export type TGlobalConfig = Record<TEnvKeys, string | undefined>;
|
|
132
|
-
export type TVlModeValues = 'qwen-vl' | 'doubao-vision' | 'gemini' | 'vlm-ui-tars' | 'vlm-ui-tars-doubao' | 'vlm-ui-tars-doubao-1.5';
|
|
133
|
-
export type TVlModeTypes = 'qwen-vl' | 'doubao-vision' | 'gemini' | 'vlm-ui-tars';
|
|
135
|
+
export type TVlModeValues = 'qwen-vl' | 'qwen3-vl' | 'doubao-vision' | 'gemini' | 'vlm-ui-tars' | 'vlm-ui-tars-doubao' | 'vlm-ui-tars-doubao-1.5';
|
|
136
|
+
export type TVlModeTypes = 'qwen-vl' | 'qwen3-vl' | 'doubao-vision' | 'gemini' | 'vlm-ui-tars';
|
|
134
137
|
export interface IModelConfigForVQA {
|
|
135
138
|
[MIDSCENE_VQA_MODEL_NAME]: string;
|
|
136
139
|
[MIDSCENE_VQA_OPENAI_SOCKS_PROXY]?: string;
|
|
@@ -49,9 +49,21 @@ export declare function zoomForGPT4o(originalWidth: number, originalHeight: numb
|
|
|
49
49
|
height: number;
|
|
50
50
|
};
|
|
51
51
|
export declare function jimpFromBase64(base64: string): Promise<Jimp>;
|
|
52
|
-
export declare function paddingToMatchBlock(image: Jimp, blockSize?: number): Promise<
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
export declare function paddingToMatchBlock(image: Jimp, blockSize?: number): Promise<{
|
|
53
|
+
width: number;
|
|
54
|
+
height: number;
|
|
55
|
+
image: Jimp;
|
|
56
|
+
}>;
|
|
57
|
+
export declare function paddingToMatchBlockByBase64(imageBase64: string, blockSize?: number): Promise<{
|
|
58
|
+
width: number;
|
|
59
|
+
height: number;
|
|
60
|
+
imageBase64: string;
|
|
61
|
+
}>;
|
|
62
|
+
export declare function cropByRect(imageBase64: string, rect: Rect, paddingImage: boolean): Promise<{
|
|
63
|
+
width: number;
|
|
64
|
+
height: number;
|
|
65
|
+
imageBase64: string;
|
|
66
|
+
}>;
|
|
55
67
|
export declare function jimpToBase64(image: Jimp): Promise<string>;
|
|
56
68
|
export declare const httpImg2Base64: (url: string) => Promise<string>;
|
|
57
69
|
/**
|
package/dist/types/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
|
|
4
|
+
export interface CopyStaticOptions {
|
|
5
|
+
/** Source directory to copy from */
|
|
6
|
+
srcDir: string;
|
|
7
|
+
/** Destination directory to copy to */
|
|
8
|
+
destDir: string;
|
|
9
|
+
/** Optional favicon source path (relative to directory containing srcDir) */
|
|
10
|
+
faviconPath?: string;
|
|
11
|
+
/** Name for the rsbuild plugin */
|
|
12
|
+
pluginName?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Creates an rsbuild plugin that copies static files after build
|
|
17
|
+
* @param options Configuration options for copying static files
|
|
18
|
+
* @returns Rsbuild plugin object
|
|
19
|
+
*/
|
|
20
|
+
export const createCopyStaticPlugin = (options: CopyStaticOptions) => ({
|
|
21
|
+
name: options.pluginName || 'copy-static',
|
|
22
|
+
setup(api: any) {
|
|
23
|
+
api.onAfterBuild(async () => {
|
|
24
|
+
const { srcDir, destDir, faviconPath } = options;
|
|
25
|
+
|
|
26
|
+
await fs.promises.mkdir(destDir, { recursive: true });
|
|
27
|
+
|
|
28
|
+
// Copy directory contents recursively
|
|
29
|
+
await fs.promises.cp(srcDir, destDir, { recursive: true });
|
|
30
|
+
console.log(`Copied build artifacts from ${srcDir} to ${destDir}`);
|
|
31
|
+
|
|
32
|
+
// Copy favicon if specified
|
|
33
|
+
if (faviconPath) {
|
|
34
|
+
const faviconDest = path.join(destDir, 'favicon.ico');
|
|
35
|
+
await fs.promises.copyFile(faviconPath, faviconDest);
|
|
36
|
+
console.log(`Copied favicon from ${faviconPath} to ${faviconDest}`);
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* Helper function to create a copy static plugin for playground builds
|
|
44
|
+
* @param srcDir Source directory (usually dist directory)
|
|
45
|
+
* @param destDir Destination directory
|
|
46
|
+
* @param pluginName Optional plugin name
|
|
47
|
+
* @param faviconSrc Optional favicon source path
|
|
48
|
+
* @returns Rsbuild plugin
|
|
49
|
+
*/
|
|
50
|
+
export const createPlaygroundCopyPlugin = (
|
|
51
|
+
srcDir: string,
|
|
52
|
+
destDir: string,
|
|
53
|
+
pluginName?: string,
|
|
54
|
+
faviconSrc?: string,
|
|
55
|
+
) => {
|
|
56
|
+
return createCopyStaticPlugin({
|
|
57
|
+
srcDir,
|
|
58
|
+
destDir,
|
|
59
|
+
faviconPath: faviconSrc,
|
|
60
|
+
pluginName,
|
|
61
|
+
});
|
|
62
|
+
};
|
package/src/constants/index.ts
CHANGED
|
@@ -18,6 +18,10 @@ export enum NodeType {
|
|
|
18
18
|
export const PLAYGROUND_SERVER_PORT = 5800;
|
|
19
19
|
export const SCRCPY_SERVER_PORT = 5700;
|
|
20
20
|
|
|
21
|
+
// WebDriver constants
|
|
22
|
+
export const WEBDRIVER_ELEMENT_ID_KEY = 'element-6066-11e4-a52e-4f735466cecf';
|
|
23
|
+
export const DEFAULT_WDA_PORT = 8100;
|
|
24
|
+
|
|
21
25
|
export const DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT = 5000;
|
|
22
26
|
export const DEFAULT_WAIT_FOR_NETWORK_IDLE_TIMEOUT = 2000;
|
|
23
27
|
export const DEFAULT_WAIT_FOR_NETWORK_IDLE_TIME = 300;
|
package/src/env/parse.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
MIDSCENE_USE_DOUBAO_VISION,
|
|
3
3
|
MIDSCENE_USE_GEMINI,
|
|
4
|
+
MIDSCENE_USE_QWEN3_VL,
|
|
4
5
|
MIDSCENE_USE_QWEN_VL,
|
|
5
6
|
MIDSCENE_USE_VLM_UI_TARS,
|
|
6
7
|
type TVlModeTypes,
|
|
@@ -58,12 +59,14 @@ export const parseVlModeAndUiTarsFromGlobalConfig = (
|
|
|
58
59
|
} => {
|
|
59
60
|
const isDoubao = provider[MIDSCENE_USE_DOUBAO_VISION];
|
|
60
61
|
const isQwen = provider[MIDSCENE_USE_QWEN_VL];
|
|
62
|
+
const isQwen3 = provider[MIDSCENE_USE_QWEN3_VL];
|
|
61
63
|
const isUiTars = provider[MIDSCENE_USE_VLM_UI_TARS];
|
|
62
64
|
const isGemini = provider[MIDSCENE_USE_GEMINI];
|
|
63
65
|
|
|
64
66
|
const enabledModes = [
|
|
65
67
|
isDoubao && MIDSCENE_USE_DOUBAO_VISION,
|
|
66
68
|
isQwen && MIDSCENE_USE_QWEN_VL,
|
|
69
|
+
isQwen3 && MIDSCENE_USE_QWEN3_VL,
|
|
67
70
|
isUiTars && MIDSCENE_USE_VLM_UI_TARS,
|
|
68
71
|
isGemini && MIDSCENE_USE_GEMINI,
|
|
69
72
|
].filter(Boolean);
|
|
@@ -74,6 +77,13 @@ export const parseVlModeAndUiTarsFromGlobalConfig = (
|
|
|
74
77
|
);
|
|
75
78
|
}
|
|
76
79
|
|
|
80
|
+
if (isQwen3) {
|
|
81
|
+
return {
|
|
82
|
+
vlMode: 'qwen3-vl',
|
|
83
|
+
uiTarsVersion: undefined,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
77
87
|
if (isQwen) {
|
|
78
88
|
return {
|
|
79
89
|
vlMode: 'qwen-vl',
|
package/src/env/types.ts
CHANGED
|
@@ -26,9 +26,13 @@ export const MIDSCENE_ADB_REMOTE_HOST = 'MIDSCENE_ADB_REMOTE_HOST';
|
|
|
26
26
|
export const MIDSCENE_ADB_REMOTE_PORT = 'MIDSCENE_ADB_REMOTE_PORT';
|
|
27
27
|
export const MIDSCENE_ANDROID_IME_STRATEGY = 'MIDSCENE_ANDROID_IME_STRATEGY';
|
|
28
28
|
|
|
29
|
+
export const MIDSCENE_IOS_DEVICE_UDID = 'MIDSCENE_IOS_DEVICE_UDID';
|
|
30
|
+
export const MIDSCENE_IOS_SIMULATOR_UDID = 'MIDSCENE_IOS_SIMULATOR_UDID';
|
|
31
|
+
|
|
29
32
|
export const MIDSCENE_CACHE = 'MIDSCENE_CACHE';
|
|
30
33
|
export const MIDSCENE_USE_VLM_UI_TARS = 'MIDSCENE_USE_VLM_UI_TARS';
|
|
31
34
|
export const MIDSCENE_USE_QWEN_VL = 'MIDSCENE_USE_QWEN_VL';
|
|
35
|
+
export const MIDSCENE_USE_QWEN3_VL = 'MIDSCENE_USE_QWEN3_VL';
|
|
32
36
|
export const MIDSCENE_USE_DOUBAO_VISION = 'MIDSCENE_USE_DOUBAO_VISION';
|
|
33
37
|
export const MIDSCENE_USE_GEMINI = 'MIDSCENE_USE_GEMINI';
|
|
34
38
|
export const MIDSCENE_USE_VL_MODEL = 'MIDSCENE_USE_VL_MODEL';
|
|
@@ -204,6 +208,8 @@ export const STRING_ENV_KEYS = [
|
|
|
204
208
|
MIDSCENE_ADB_REMOTE_HOST,
|
|
205
209
|
MIDSCENE_ADB_REMOTE_PORT,
|
|
206
210
|
MIDSCENE_ANDROID_IME_STRATEGY,
|
|
211
|
+
MIDSCENE_IOS_DEVICE_UDID,
|
|
212
|
+
MIDSCENE_IOS_SIMULATOR_UDID,
|
|
207
213
|
MIDSCENE_REPORT_TAG_NAME,
|
|
208
214
|
MIDSCENE_PREFERRED_LANGUAGE,
|
|
209
215
|
MATCH_BY_POSITION,
|
|
@@ -242,6 +248,7 @@ export const MODEL_ENV_KEYS = [
|
|
|
242
248
|
MIDSCENE_USE_ANTHROPIC_SDK,
|
|
243
249
|
MIDSCENE_USE_VLM_UI_TARS,
|
|
244
250
|
MIDSCENE_USE_QWEN_VL,
|
|
251
|
+
MIDSCENE_USE_QWEN3_VL,
|
|
245
252
|
MIDSCENE_USE_DOUBAO_VISION,
|
|
246
253
|
MIDSCENE_USE_GEMINI,
|
|
247
254
|
MIDSCENE_USE_VL_MODEL,
|
|
@@ -328,6 +335,7 @@ export type TGlobalConfig = Record<TEnvKeys, string | undefined>;
|
|
|
328
335
|
|
|
329
336
|
export type TVlModeValues =
|
|
330
337
|
| 'qwen-vl'
|
|
338
|
+
| 'qwen3-vl'
|
|
331
339
|
| 'doubao-vision'
|
|
332
340
|
| 'gemini'
|
|
333
341
|
| 'vlm-ui-tars'
|
|
@@ -336,6 +344,7 @@ export type TVlModeValues =
|
|
|
336
344
|
|
|
337
345
|
export type TVlModeTypes =
|
|
338
346
|
| 'qwen-vl'
|
|
347
|
+
| 'qwen3-vl'
|
|
339
348
|
| 'doubao-vision'
|
|
340
349
|
| 'gemini'
|
|
341
350
|
| 'vlm-ui-tars';
|
|
@@ -497,6 +506,7 @@ export const VL_MODE_RAW_VALID_VALUES: TVlModeValues[] = [
|
|
|
497
506
|
'doubao-vision',
|
|
498
507
|
'gemini',
|
|
499
508
|
'qwen-vl',
|
|
509
|
+
'qwen3-vl',
|
|
500
510
|
'vlm-ui-tars',
|
|
501
511
|
'vlm-ui-tars-doubao',
|
|
502
512
|
'vlm-ui-tars-doubao-1.5',
|
package/src/img/transform.ts
CHANGED
|
@@ -228,14 +228,18 @@ export async function jimpFromBase64(base64: string): Promise<Jimp> {
|
|
|
228
228
|
export async function paddingToMatchBlock(
|
|
229
229
|
image: Jimp,
|
|
230
230
|
blockSize = 28,
|
|
231
|
-
): Promise<
|
|
231
|
+
): Promise<{
|
|
232
|
+
width: number;
|
|
233
|
+
height: number;
|
|
234
|
+
image: Jimp;
|
|
235
|
+
}> {
|
|
232
236
|
const { width, height } = image.bitmap;
|
|
233
237
|
|
|
234
238
|
const targetWidth = Math.ceil(width / blockSize) * blockSize;
|
|
235
239
|
const targetHeight = Math.ceil(height / blockSize) * blockSize;
|
|
236
240
|
|
|
237
241
|
if (targetWidth === width && targetHeight === height) {
|
|
238
|
-
return image;
|
|
242
|
+
return { width, height, image };
|
|
239
243
|
}
|
|
240
244
|
|
|
241
245
|
const Jimp = await getJimp();
|
|
@@ -243,31 +247,52 @@ export async function paddingToMatchBlock(
|
|
|
243
247
|
|
|
244
248
|
// Composite the original image onto the new canvas
|
|
245
249
|
paddedImage.composite(image, 0, 0);
|
|
246
|
-
return paddedImage;
|
|
250
|
+
return { width: targetWidth, height: targetHeight, image: paddedImage };
|
|
247
251
|
}
|
|
248
252
|
|
|
249
253
|
export async function paddingToMatchBlockByBase64(
|
|
250
254
|
imageBase64: string,
|
|
251
255
|
blockSize = 28,
|
|
252
|
-
): Promise<
|
|
256
|
+
): Promise<{
|
|
257
|
+
width: number;
|
|
258
|
+
height: number;
|
|
259
|
+
imageBase64: string;
|
|
260
|
+
}> {
|
|
253
261
|
const jimpImage = await jimpFromBase64(imageBase64);
|
|
254
|
-
const
|
|
255
|
-
return
|
|
262
|
+
const paddedResult = await paddingToMatchBlock(jimpImage, blockSize);
|
|
263
|
+
return {
|
|
264
|
+
width: paddedResult.width,
|
|
265
|
+
height: paddedResult.height,
|
|
266
|
+
imageBase64: await jimpToBase64(paddedResult.image),
|
|
267
|
+
};
|
|
256
268
|
}
|
|
269
|
+
|
|
257
270
|
export async function cropByRect(
|
|
258
271
|
imageBase64: string,
|
|
259
272
|
rect: Rect,
|
|
260
273
|
paddingImage: boolean,
|
|
261
|
-
): Promise<
|
|
274
|
+
): Promise<{
|
|
275
|
+
width: number;
|
|
276
|
+
height: number;
|
|
277
|
+
imageBase64: string;
|
|
278
|
+
}> {
|
|
262
279
|
const jimpImage = await jimpFromBase64(imageBase64);
|
|
263
280
|
const { left, top, width, height } = rect;
|
|
264
281
|
jimpImage.crop(left, top, width, height);
|
|
265
282
|
|
|
266
283
|
if (paddingImage) {
|
|
267
|
-
const
|
|
268
|
-
return
|
|
284
|
+
const paddedResult = await paddingToMatchBlock(jimpImage);
|
|
285
|
+
return {
|
|
286
|
+
width: paddedResult.width,
|
|
287
|
+
height: paddedResult.height,
|
|
288
|
+
imageBase64: await jimpToBase64(paddedResult.image),
|
|
289
|
+
};
|
|
269
290
|
}
|
|
270
|
-
return
|
|
291
|
+
return {
|
|
292
|
+
width: jimpImage.bitmap.width,
|
|
293
|
+
height: jimpImage.bitmap.height,
|
|
294
|
+
imageBase64: await jimpToBase64(jimpImage),
|
|
295
|
+
};
|
|
271
296
|
}
|
|
272
297
|
|
|
273
298
|
export async function jimpToBase64(image: Jimp): Promise<string> {
|