@midscene/android 1.9.7 → 1.9.8-beta-20260618014851.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/cli.mjs +27 -11
- package/dist/es/index.mjs +26 -10
- package/dist/lib/cli.js +27 -11
- package/dist/lib/index.js +26 -10
- package/dist/types/index.d.ts +13 -15
- package/package.json +4 -9
- package/dist/es/mcp-server.mjs +0 -2074
- package/dist/lib/mcp-server.js +0 -2116
- package/dist/types/mcp-server.d.ts +0 -300
package/dist/es/cli.mjs
CHANGED
|
@@ -4,7 +4,8 @@ import * as __rspack_external_node_module_ab9f2194 from "node:module";
|
|
|
4
4
|
import * as __rspack_external_node_path_c5b9b54f from "node:path";
|
|
5
5
|
import { createReportCliCommands, getMidsceneLocationSchema, z } from "@midscene/core";
|
|
6
6
|
import { reportCLIError, runToolsCLI } from "@midscene/shared/cli";
|
|
7
|
-
import {
|
|
7
|
+
import { agentBehaviorInitArgShape, extractAgentBehaviorInitArgs, getAgentInitArgsSignature, shouldRebuildAgentForInitArgs } from "@midscene/shared/agent-tools/agent-behavior-init-args";
|
|
8
|
+
import { BaseMidsceneTools } from "@midscene/shared/agent-tools/base-tools";
|
|
8
9
|
import { Agent } from "@midscene/core/agent";
|
|
9
10
|
import { mergeAndNormalizeAppNameMapping, normalizeForComparison, repeat } from "@midscene/shared/utils";
|
|
10
11
|
import node_assert from "node:assert";
|
|
@@ -1939,7 +1940,7 @@ async function agentFromAdbDevice(deviceId, opts) {
|
|
|
1939
1940
|
await device.connect();
|
|
1940
1941
|
return new AndroidAgent(device, opts);
|
|
1941
1942
|
}
|
|
1942
|
-
function
|
|
1943
|
+
function agent_tools_define_property(obj, key, value) {
|
|
1943
1944
|
if (key in obj) Object.defineProperty(obj, key, {
|
|
1944
1945
|
value: value,
|
|
1945
1946
|
enumerable: true,
|
|
@@ -1949,7 +1950,20 @@ function mcp_tools_define_property(obj, key, value) {
|
|
|
1949
1950
|
else obj[key] = value;
|
|
1950
1951
|
return obj;
|
|
1951
1952
|
}
|
|
1952
|
-
const debug = (0, logger_.getDebug)('
|
|
1953
|
+
const debug = (0, logger_.getDebug)('agent-tools:android');
|
|
1954
|
+
function adaptAndroidInitArgs(extracted) {
|
|
1955
|
+
if (!extracted) return;
|
|
1956
|
+
const initArgs = {
|
|
1957
|
+
...'string' == typeof extracted.deviceId ? {
|
|
1958
|
+
deviceId: extracted.deviceId
|
|
1959
|
+
} : {},
|
|
1960
|
+
...'boolean' == typeof extracted.useScrcpy ? {
|
|
1961
|
+
useScrcpy: extracted.useScrcpy
|
|
1962
|
+
} : {},
|
|
1963
|
+
...extractAgentBehaviorInitArgs(extracted) ?? {}
|
|
1964
|
+
};
|
|
1965
|
+
return Object.keys(initArgs).length > 0 ? initArgs : void 0;
|
|
1966
|
+
}
|
|
1953
1967
|
class AndroidMidsceneTools extends BaseMidsceneTools {
|
|
1954
1968
|
getCliReportSessionName() {
|
|
1955
1969
|
return 'midscene-android';
|
|
@@ -1959,7 +1973,8 @@ class AndroidMidsceneTools extends BaseMidsceneTools {
|
|
|
1959
1973
|
}
|
|
1960
1974
|
async ensureAgent(initArgs) {
|
|
1961
1975
|
const deviceId = initArgs?.deviceId;
|
|
1962
|
-
|
|
1976
|
+
const nextSignature = getAgentInitArgsSignature(initArgs);
|
|
1977
|
+
if (this.agent && shouldRebuildAgentForInitArgs(this.lastInitArgsSignature, nextSignature)) {
|
|
1963
1978
|
try {
|
|
1964
1979
|
await this.agent.destroy?.();
|
|
1965
1980
|
} catch (error) {
|
|
@@ -1972,6 +1987,7 @@ class AndroidMidsceneTools extends BaseMidsceneTools {
|
|
|
1972
1987
|
const reportOptions = this.readCliReportAgentOptions();
|
|
1973
1988
|
const agent = await agentFromAdbDevice(deviceId, {
|
|
1974
1989
|
autoDismissKeyboard: false,
|
|
1990
|
+
...extractAgentBehaviorInitArgs(initArgs) ?? {},
|
|
1975
1991
|
...initArgs?.useScrcpy ? {
|
|
1976
1992
|
scrcpyConfig: {
|
|
1977
1993
|
enabled: true
|
|
@@ -1980,6 +1996,7 @@ class AndroidMidsceneTools extends BaseMidsceneTools {
|
|
|
1980
1996
|
...reportOptions ?? {}
|
|
1981
1997
|
});
|
|
1982
1998
|
this.agent = agent;
|
|
1999
|
+
this.lastInitArgsSignature = nextSignature;
|
|
1983
2000
|
return agent;
|
|
1984
2001
|
}
|
|
1985
2002
|
preparePlatformTools() {
|
|
@@ -2001,6 +2018,7 @@ class AndroidMidsceneTools extends BaseMidsceneTools {
|
|
|
2001
2018
|
debug('Failed to destroy agent during connect:', error);
|
|
2002
2019
|
}
|
|
2003
2020
|
this.agent = void 0;
|
|
2021
|
+
this.lastInitArgsSignature = void 0;
|
|
2004
2022
|
}
|
|
2005
2023
|
const agent = await this.ensureAgent(initArgs);
|
|
2006
2024
|
const screenshot = await agent.page.screenshotBase64();
|
|
@@ -2025,26 +2043,24 @@ class AndroidMidsceneTools extends BaseMidsceneTools {
|
|
|
2025
2043
|
];
|
|
2026
2044
|
}
|
|
2027
2045
|
constructor(...args){
|
|
2028
|
-
super(...args),
|
|
2046
|
+
super(...args), agent_tools_define_property(this, "lastInitArgsSignature", void 0), agent_tools_define_property(this, "initArgSpec", {
|
|
2029
2047
|
namespace: 'android',
|
|
2030
2048
|
shape: {
|
|
2031
2049
|
deviceId: z.string().optional().describe('Android device ID (from adb devices)'),
|
|
2032
|
-
useScrcpy: z.boolean().optional().describe('Enable scrcpy accelerated screenshots')
|
|
2050
|
+
useScrcpy: z.boolean().optional().describe('Enable scrcpy accelerated screenshots'),
|
|
2051
|
+
...agentBehaviorInitArgShape
|
|
2033
2052
|
},
|
|
2034
2053
|
cli: {
|
|
2035
2054
|
preferBareKeys: true
|
|
2036
2055
|
},
|
|
2037
|
-
adapt:
|
|
2038
|
-
deviceId: extracted?.deviceId,
|
|
2039
|
-
useScrcpy: extracted?.useScrcpy
|
|
2040
|
-
})
|
|
2056
|
+
adapt: adaptAndroidInitArgs
|
|
2041
2057
|
});
|
|
2042
2058
|
}
|
|
2043
2059
|
}
|
|
2044
2060
|
const tools = new AndroidMidsceneTools();
|
|
2045
2061
|
runToolsCLI(tools, 'midscene-android', {
|
|
2046
2062
|
stripPrefix: 'android_',
|
|
2047
|
-
version: "1.9.
|
|
2063
|
+
version: "1.9.8-beta-20260618014851.0",
|
|
2048
2064
|
extraCommands: createReportCliCommands()
|
|
2049
2065
|
}).catch((e)=>{
|
|
2050
2066
|
process.exit(reportCLIError(e));
|
package/dist/es/index.mjs
CHANGED
|
@@ -12,7 +12,8 @@ import { createImgBase64ByFormat, validateScreenshotBuffer } from "@midscene/sha
|
|
|
12
12
|
import { mergeAndNormalizeAppNameMapping, normalizeForComparison, repeat } from "@midscene/shared/utils";
|
|
13
13
|
import { ADB } from "appium-adb";
|
|
14
14
|
import { Agent } from "@midscene/core/agent";
|
|
15
|
-
import {
|
|
15
|
+
import { agentBehaviorInitArgShape, extractAgentBehaviorInitArgs, getAgentInitArgsSignature, shouldRebuildAgentForInitArgs } from "@midscene/shared/agent-tools/agent-behavior-init-args";
|
|
16
|
+
import { BaseMidsceneTools } from "@midscene/shared/agent-tools/base-tools";
|
|
16
17
|
var __webpack_modules__ = {
|
|
17
18
|
"./src/scrcpy-manager.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
18
19
|
__webpack_require__.d(__webpack_exports__, {
|
|
@@ -2005,7 +2006,7 @@ async function agentFromAdbDevice(deviceId, opts) {
|
|
|
2005
2006
|
await device.connect();
|
|
2006
2007
|
return new AndroidAgent(device, opts);
|
|
2007
2008
|
}
|
|
2008
|
-
function
|
|
2009
|
+
function agent_tools_define_property(obj, key, value) {
|
|
2009
2010
|
if (key in obj) Object.defineProperty(obj, key, {
|
|
2010
2011
|
value: value,
|
|
2011
2012
|
enumerable: true,
|
|
@@ -2015,7 +2016,20 @@ function mcp_tools_define_property(obj, key, value) {
|
|
|
2015
2016
|
else obj[key] = value;
|
|
2016
2017
|
return obj;
|
|
2017
2018
|
}
|
|
2018
|
-
const debug = (0, logger_.getDebug)('
|
|
2019
|
+
const debug = (0, logger_.getDebug)('agent-tools:android');
|
|
2020
|
+
function adaptAndroidInitArgs(extracted) {
|
|
2021
|
+
if (!extracted) return;
|
|
2022
|
+
const initArgs = {
|
|
2023
|
+
...'string' == typeof extracted.deviceId ? {
|
|
2024
|
+
deviceId: extracted.deviceId
|
|
2025
|
+
} : {},
|
|
2026
|
+
...'boolean' == typeof extracted.useScrcpy ? {
|
|
2027
|
+
useScrcpy: extracted.useScrcpy
|
|
2028
|
+
} : {},
|
|
2029
|
+
...extractAgentBehaviorInitArgs(extracted) ?? {}
|
|
2030
|
+
};
|
|
2031
|
+
return Object.keys(initArgs).length > 0 ? initArgs : void 0;
|
|
2032
|
+
}
|
|
2019
2033
|
class AndroidMidsceneTools extends BaseMidsceneTools {
|
|
2020
2034
|
getCliReportSessionName() {
|
|
2021
2035
|
return 'midscene-android';
|
|
@@ -2025,7 +2039,8 @@ class AndroidMidsceneTools extends BaseMidsceneTools {
|
|
|
2025
2039
|
}
|
|
2026
2040
|
async ensureAgent(initArgs) {
|
|
2027
2041
|
const deviceId = initArgs?.deviceId;
|
|
2028
|
-
|
|
2042
|
+
const nextSignature = getAgentInitArgsSignature(initArgs);
|
|
2043
|
+
if (this.agent && shouldRebuildAgentForInitArgs(this.lastInitArgsSignature, nextSignature)) {
|
|
2029
2044
|
try {
|
|
2030
2045
|
await this.agent.destroy?.();
|
|
2031
2046
|
} catch (error) {
|
|
@@ -2038,6 +2053,7 @@ class AndroidMidsceneTools extends BaseMidsceneTools {
|
|
|
2038
2053
|
const reportOptions = this.readCliReportAgentOptions();
|
|
2039
2054
|
const agent = await agentFromAdbDevice(deviceId, {
|
|
2040
2055
|
autoDismissKeyboard: false,
|
|
2056
|
+
...extractAgentBehaviorInitArgs(initArgs) ?? {},
|
|
2041
2057
|
...initArgs?.useScrcpy ? {
|
|
2042
2058
|
scrcpyConfig: {
|
|
2043
2059
|
enabled: true
|
|
@@ -2046,6 +2062,7 @@ class AndroidMidsceneTools extends BaseMidsceneTools {
|
|
|
2046
2062
|
...reportOptions ?? {}
|
|
2047
2063
|
});
|
|
2048
2064
|
this.agent = agent;
|
|
2065
|
+
this.lastInitArgsSignature = nextSignature;
|
|
2049
2066
|
return agent;
|
|
2050
2067
|
}
|
|
2051
2068
|
preparePlatformTools() {
|
|
@@ -2067,6 +2084,7 @@ class AndroidMidsceneTools extends BaseMidsceneTools {
|
|
|
2067
2084
|
debug('Failed to destroy agent during connect:', error);
|
|
2068
2085
|
}
|
|
2069
2086
|
this.agent = void 0;
|
|
2087
|
+
this.lastInitArgsSignature = void 0;
|
|
2070
2088
|
}
|
|
2071
2089
|
const agent = await this.ensureAgent(initArgs);
|
|
2072
2090
|
const screenshot = await agent.page.screenshotBase64();
|
|
@@ -2091,19 +2109,17 @@ class AndroidMidsceneTools extends BaseMidsceneTools {
|
|
|
2091
2109
|
];
|
|
2092
2110
|
}
|
|
2093
2111
|
constructor(...args){
|
|
2094
|
-
super(...args),
|
|
2112
|
+
super(...args), agent_tools_define_property(this, "lastInitArgsSignature", void 0), agent_tools_define_property(this, "initArgSpec", {
|
|
2095
2113
|
namespace: 'android',
|
|
2096
2114
|
shape: {
|
|
2097
2115
|
deviceId: z.string().optional().describe('Android device ID (from adb devices)'),
|
|
2098
|
-
useScrcpy: z.boolean().optional().describe('Enable scrcpy accelerated screenshots')
|
|
2116
|
+
useScrcpy: z.boolean().optional().describe('Enable scrcpy accelerated screenshots'),
|
|
2117
|
+
...agentBehaviorInitArgShape
|
|
2099
2118
|
},
|
|
2100
2119
|
cli: {
|
|
2101
2120
|
preferBareKeys: true
|
|
2102
2121
|
},
|
|
2103
|
-
adapt:
|
|
2104
|
-
deviceId: extracted?.deviceId,
|
|
2105
|
-
useScrcpy: extracted?.useScrcpy
|
|
2106
|
-
})
|
|
2122
|
+
adapt: adaptAndroidInitArgs
|
|
2107
2123
|
});
|
|
2108
2124
|
}
|
|
2109
2125
|
}
|
package/dist/lib/cli.js
CHANGED
|
@@ -448,8 +448,9 @@ var __webpack_exports__ = {};
|
|
|
448
448
|
(()=>{
|
|
449
449
|
const core_namespaceObject = require("@midscene/core");
|
|
450
450
|
const cli_namespaceObject = require("@midscene/shared/cli");
|
|
451
|
+
const agent_behavior_init_args_namespaceObject = require("@midscene/shared/agent-tools/agent-behavior-init-args");
|
|
452
|
+
const base_tools_namespaceObject = require("@midscene/shared/agent-tools/base-tools");
|
|
451
453
|
var logger_ = __webpack_require__("@midscene/shared/logger");
|
|
452
|
-
const base_tools_namespaceObject = require("@midscene/shared/mcp/base-tools");
|
|
453
454
|
const agent_namespaceObject = require("@midscene/core/agent");
|
|
454
455
|
const utils_namespaceObject = require("@midscene/shared/utils");
|
|
455
456
|
const EMPTY_ADB_SHELL_STDOUT = '<empty>';
|
|
@@ -1954,7 +1955,7 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
1954
1955
|
await device.connect();
|
|
1955
1956
|
return new AndroidAgent(device, opts);
|
|
1956
1957
|
}
|
|
1957
|
-
function
|
|
1958
|
+
function agent_tools_define_property(obj, key, value) {
|
|
1958
1959
|
if (key in obj) Object.defineProperty(obj, key, {
|
|
1959
1960
|
value: value,
|
|
1960
1961
|
enumerable: true,
|
|
@@ -1964,7 +1965,20 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
1964
1965
|
else obj[key] = value;
|
|
1965
1966
|
return obj;
|
|
1966
1967
|
}
|
|
1967
|
-
const debug = (0, logger_.getDebug)('
|
|
1968
|
+
const debug = (0, logger_.getDebug)('agent-tools:android');
|
|
1969
|
+
function adaptAndroidInitArgs(extracted) {
|
|
1970
|
+
if (!extracted) return;
|
|
1971
|
+
const initArgs = {
|
|
1972
|
+
...'string' == typeof extracted.deviceId ? {
|
|
1973
|
+
deviceId: extracted.deviceId
|
|
1974
|
+
} : {},
|
|
1975
|
+
...'boolean' == typeof extracted.useScrcpy ? {
|
|
1976
|
+
useScrcpy: extracted.useScrcpy
|
|
1977
|
+
} : {},
|
|
1978
|
+
...(0, agent_behavior_init_args_namespaceObject.extractAgentBehaviorInitArgs)(extracted) ?? {}
|
|
1979
|
+
};
|
|
1980
|
+
return Object.keys(initArgs).length > 0 ? initArgs : void 0;
|
|
1981
|
+
}
|
|
1968
1982
|
class AndroidMidsceneTools extends base_tools_namespaceObject.BaseMidsceneTools {
|
|
1969
1983
|
getCliReportSessionName() {
|
|
1970
1984
|
return 'midscene-android';
|
|
@@ -1974,7 +1988,8 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
1974
1988
|
}
|
|
1975
1989
|
async ensureAgent(initArgs) {
|
|
1976
1990
|
const deviceId = initArgs?.deviceId;
|
|
1977
|
-
|
|
1991
|
+
const nextSignature = (0, agent_behavior_init_args_namespaceObject.getAgentInitArgsSignature)(initArgs);
|
|
1992
|
+
if (this.agent && (0, agent_behavior_init_args_namespaceObject.shouldRebuildAgentForInitArgs)(this.lastInitArgsSignature, nextSignature)) {
|
|
1978
1993
|
try {
|
|
1979
1994
|
await this.agent.destroy?.();
|
|
1980
1995
|
} catch (error) {
|
|
@@ -1987,6 +2002,7 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
1987
2002
|
const reportOptions = this.readCliReportAgentOptions();
|
|
1988
2003
|
const agent = await agentFromAdbDevice(deviceId, {
|
|
1989
2004
|
autoDismissKeyboard: false,
|
|
2005
|
+
...(0, agent_behavior_init_args_namespaceObject.extractAgentBehaviorInitArgs)(initArgs) ?? {},
|
|
1990
2006
|
...initArgs?.useScrcpy ? {
|
|
1991
2007
|
scrcpyConfig: {
|
|
1992
2008
|
enabled: true
|
|
@@ -1995,6 +2011,7 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
1995
2011
|
...reportOptions ?? {}
|
|
1996
2012
|
});
|
|
1997
2013
|
this.agent = agent;
|
|
2014
|
+
this.lastInitArgsSignature = nextSignature;
|
|
1998
2015
|
return agent;
|
|
1999
2016
|
}
|
|
2000
2017
|
preparePlatformTools() {
|
|
@@ -2016,6 +2033,7 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
2016
2033
|
debug('Failed to destroy agent during connect:', error);
|
|
2017
2034
|
}
|
|
2018
2035
|
this.agent = void 0;
|
|
2036
|
+
this.lastInitArgsSignature = void 0;
|
|
2019
2037
|
}
|
|
2020
2038
|
const agent = await this.ensureAgent(initArgs);
|
|
2021
2039
|
const screenshot = await agent.page.screenshotBase64();
|
|
@@ -2040,26 +2058,24 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
2040
2058
|
];
|
|
2041
2059
|
}
|
|
2042
2060
|
constructor(...args){
|
|
2043
|
-
super(...args),
|
|
2061
|
+
super(...args), agent_tools_define_property(this, "lastInitArgsSignature", void 0), agent_tools_define_property(this, "initArgSpec", {
|
|
2044
2062
|
namespace: 'android',
|
|
2045
2063
|
shape: {
|
|
2046
2064
|
deviceId: core_namespaceObject.z.string().optional().describe('Android device ID (from adb devices)'),
|
|
2047
|
-
useScrcpy: core_namespaceObject.z.boolean().optional().describe('Enable scrcpy accelerated screenshots')
|
|
2065
|
+
useScrcpy: core_namespaceObject.z.boolean().optional().describe('Enable scrcpy accelerated screenshots'),
|
|
2066
|
+
...agent_behavior_init_args_namespaceObject.agentBehaviorInitArgShape
|
|
2048
2067
|
},
|
|
2049
2068
|
cli: {
|
|
2050
2069
|
preferBareKeys: true
|
|
2051
2070
|
},
|
|
2052
|
-
adapt:
|
|
2053
|
-
deviceId: extracted?.deviceId,
|
|
2054
|
-
useScrcpy: extracted?.useScrcpy
|
|
2055
|
-
})
|
|
2071
|
+
adapt: adaptAndroidInitArgs
|
|
2056
2072
|
});
|
|
2057
2073
|
}
|
|
2058
2074
|
}
|
|
2059
2075
|
const tools = new AndroidMidsceneTools();
|
|
2060
2076
|
(0, cli_namespaceObject.runToolsCLI)(tools, 'midscene-android', {
|
|
2061
2077
|
stripPrefix: 'android_',
|
|
2062
|
-
version: "1.9.
|
|
2078
|
+
version: "1.9.8-beta-20260618014851.0",
|
|
2063
2079
|
extraCommands: (0, core_namespaceObject.createReportCliCommands)()
|
|
2064
2080
|
}).catch((e)=>{
|
|
2065
2081
|
process.exit((0, cli_namespaceObject.reportCLIError)(e));
|
package/dist/lib/index.js
CHANGED
|
@@ -2040,8 +2040,9 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
2040
2040
|
await device.connect();
|
|
2041
2041
|
return new AndroidAgent(device, opts);
|
|
2042
2042
|
}
|
|
2043
|
-
const
|
|
2044
|
-
|
|
2043
|
+
const agent_behavior_init_args_namespaceObject = require("@midscene/shared/agent-tools/agent-behavior-init-args");
|
|
2044
|
+
const base_tools_namespaceObject = require("@midscene/shared/agent-tools/base-tools");
|
|
2045
|
+
function agent_tools_define_property(obj, key, value) {
|
|
2045
2046
|
if (key in obj) Object.defineProperty(obj, key, {
|
|
2046
2047
|
value: value,
|
|
2047
2048
|
enumerable: true,
|
|
@@ -2051,7 +2052,20 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
2051
2052
|
else obj[key] = value;
|
|
2052
2053
|
return obj;
|
|
2053
2054
|
}
|
|
2054
|
-
const debug = (0, logger_.getDebug)('
|
|
2055
|
+
const debug = (0, logger_.getDebug)('agent-tools:android');
|
|
2056
|
+
function adaptAndroidInitArgs(extracted) {
|
|
2057
|
+
if (!extracted) return;
|
|
2058
|
+
const initArgs = {
|
|
2059
|
+
...'string' == typeof extracted.deviceId ? {
|
|
2060
|
+
deviceId: extracted.deviceId
|
|
2061
|
+
} : {},
|
|
2062
|
+
...'boolean' == typeof extracted.useScrcpy ? {
|
|
2063
|
+
useScrcpy: extracted.useScrcpy
|
|
2064
|
+
} : {},
|
|
2065
|
+
...(0, agent_behavior_init_args_namespaceObject.extractAgentBehaviorInitArgs)(extracted) ?? {}
|
|
2066
|
+
};
|
|
2067
|
+
return Object.keys(initArgs).length > 0 ? initArgs : void 0;
|
|
2068
|
+
}
|
|
2055
2069
|
class AndroidMidsceneTools extends base_tools_namespaceObject.BaseMidsceneTools {
|
|
2056
2070
|
getCliReportSessionName() {
|
|
2057
2071
|
return 'midscene-android';
|
|
@@ -2061,7 +2075,8 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
2061
2075
|
}
|
|
2062
2076
|
async ensureAgent(initArgs) {
|
|
2063
2077
|
const deviceId = initArgs?.deviceId;
|
|
2064
|
-
|
|
2078
|
+
const nextSignature = (0, agent_behavior_init_args_namespaceObject.getAgentInitArgsSignature)(initArgs);
|
|
2079
|
+
if (this.agent && (0, agent_behavior_init_args_namespaceObject.shouldRebuildAgentForInitArgs)(this.lastInitArgsSignature, nextSignature)) {
|
|
2065
2080
|
try {
|
|
2066
2081
|
await this.agent.destroy?.();
|
|
2067
2082
|
} catch (error) {
|
|
@@ -2074,6 +2089,7 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
2074
2089
|
const reportOptions = this.readCliReportAgentOptions();
|
|
2075
2090
|
const agent = await agentFromAdbDevice(deviceId, {
|
|
2076
2091
|
autoDismissKeyboard: false,
|
|
2092
|
+
...(0, agent_behavior_init_args_namespaceObject.extractAgentBehaviorInitArgs)(initArgs) ?? {},
|
|
2077
2093
|
...initArgs?.useScrcpy ? {
|
|
2078
2094
|
scrcpyConfig: {
|
|
2079
2095
|
enabled: true
|
|
@@ -2082,6 +2098,7 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
2082
2098
|
...reportOptions ?? {}
|
|
2083
2099
|
});
|
|
2084
2100
|
this.agent = agent;
|
|
2101
|
+
this.lastInitArgsSignature = nextSignature;
|
|
2085
2102
|
return agent;
|
|
2086
2103
|
}
|
|
2087
2104
|
preparePlatformTools() {
|
|
@@ -2103,6 +2120,7 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
2103
2120
|
debug('Failed to destroy agent during connect:', error);
|
|
2104
2121
|
}
|
|
2105
2122
|
this.agent = void 0;
|
|
2123
|
+
this.lastInitArgsSignature = void 0;
|
|
2106
2124
|
}
|
|
2107
2125
|
const agent = await this.ensureAgent(initArgs);
|
|
2108
2126
|
const screenshot = await agent.page.screenshotBase64();
|
|
@@ -2127,19 +2145,17 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
2127
2145
|
];
|
|
2128
2146
|
}
|
|
2129
2147
|
constructor(...args){
|
|
2130
|
-
super(...args),
|
|
2148
|
+
super(...args), agent_tools_define_property(this, "lastInitArgsSignature", void 0), agent_tools_define_property(this, "initArgSpec", {
|
|
2131
2149
|
namespace: 'android',
|
|
2132
2150
|
shape: {
|
|
2133
2151
|
deviceId: core_namespaceObject.z.string().optional().describe('Android device ID (from adb devices)'),
|
|
2134
|
-
useScrcpy: core_namespaceObject.z.boolean().optional().describe('Enable scrcpy accelerated screenshots')
|
|
2152
|
+
useScrcpy: core_namespaceObject.z.boolean().optional().describe('Enable scrcpy accelerated screenshots'),
|
|
2153
|
+
...agent_behavior_init_args_namespaceObject.agentBehaviorInitArgShape
|
|
2135
2154
|
},
|
|
2136
2155
|
cli: {
|
|
2137
2156
|
preferBareKeys: true
|
|
2138
2157
|
},
|
|
2139
|
-
adapt:
|
|
2140
|
-
deviceId: extracted?.deviceId,
|
|
2141
|
-
useScrcpy: extracted?.useScrcpy
|
|
2142
|
-
})
|
|
2158
|
+
adapt: adaptAndroidInitArgs
|
|
2143
2159
|
});
|
|
2144
2160
|
}
|
|
2145
2161
|
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -4,20 +4,21 @@ import type { ActionReturn } from '@midscene/core';
|
|
|
4
4
|
import { ADB } from 'appium-adb';
|
|
5
5
|
import type { Adb } from '@yume-chan/adb';
|
|
6
6
|
import { Agent } from '@midscene/core/agent';
|
|
7
|
+
import { AgentBehaviorInitArgs } from '@midscene/shared/agent-tools/agent-behavior-init-args';
|
|
7
8
|
import { AgentOpt } from '@midscene/core/agent';
|
|
8
9
|
import { AndroidDeviceInputOpt } from '@midscene/core/device';
|
|
9
10
|
import { AndroidDeviceOpt } from '@midscene/core/device';
|
|
10
|
-
import { BaseMidsceneTools } from '@midscene/shared/
|
|
11
|
+
import { BaseMidsceneTools } from '@midscene/shared/agent-tools/base-tools';
|
|
11
12
|
import { Device } from 'appium-adb';
|
|
12
13
|
import { DeviceAction } from '@midscene/core';
|
|
13
14
|
import type { ElementInfo } from '@midscene/shared/extractor';
|
|
14
|
-
import { InitArgSpec } from '@midscene/shared/
|
|
15
|
+
import { InitArgSpec } from '@midscene/shared/agent-tools/base-tools';
|
|
15
16
|
import { InterfaceType } from '@midscene/core';
|
|
16
17
|
import { MobileInputPrimitives } from '@midscene/core/device';
|
|
17
18
|
import { overrideAIConfig } from '@midscene/shared/env';
|
|
18
19
|
import { Point } from '@midscene/core';
|
|
19
20
|
import { Size } from '@midscene/core';
|
|
20
|
-
import type { ToolDefinition } from '@midscene/shared/
|
|
21
|
+
import type { ToolDefinition } from '@midscene/shared/agent-tools/types';
|
|
21
22
|
|
|
22
23
|
declare type ActionArgs<T extends DeviceAction> = [ActionParam<T>] extends [undefined] ? [] : [ActionParam<T>];
|
|
23
24
|
|
|
@@ -234,24 +235,21 @@ export declare class AndroidDevice implements AbstractInterface {
|
|
|
234
235
|
hideKeyboard(options?: AndroidDeviceInputOpt, timeoutMs?: number): Promise<boolean>;
|
|
235
236
|
}
|
|
236
237
|
|
|
238
|
+
declare type AndroidInitArgs = AgentBehaviorInitArgs & {
|
|
239
|
+
deviceId?: string;
|
|
240
|
+
useScrcpy?: boolean;
|
|
241
|
+
};
|
|
242
|
+
|
|
237
243
|
/**
|
|
238
244
|
* Android-specific tools manager
|
|
239
245
|
* Extends BaseMidsceneTools to provide Android ADB device connection tools
|
|
240
246
|
*/
|
|
241
|
-
export declare class AndroidMidsceneTools extends BaseMidsceneTools<AndroidAgent, {
|
|
242
|
-
|
|
243
|
-
useScrcpy?: boolean;
|
|
244
|
-
}> {
|
|
247
|
+
export declare class AndroidMidsceneTools extends BaseMidsceneTools<AndroidAgent, AndroidInitArgs> {
|
|
248
|
+
private lastInitArgsSignature?;
|
|
245
249
|
protected getCliReportSessionName(): string;
|
|
246
|
-
protected readonly initArgSpec: InitArgSpec<
|
|
247
|
-
deviceId?: string;
|
|
248
|
-
useScrcpy?: boolean;
|
|
249
|
-
}>;
|
|
250
|
+
protected readonly initArgSpec: InitArgSpec<AndroidInitArgs>;
|
|
250
251
|
protected createTemporaryDevice(): AndroidDevice;
|
|
251
|
-
protected ensureAgent(initArgs?:
|
|
252
|
-
deviceId?: string;
|
|
253
|
-
useScrcpy?: boolean;
|
|
254
|
-
}): Promise<AndroidAgent>;
|
|
252
|
+
protected ensureAgent(initArgs?: AndroidInitArgs): Promise<AndroidAgent>;
|
|
255
253
|
/**
|
|
256
254
|
* Provide Android-specific platform tools
|
|
257
255
|
*/
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@midscene/android",
|
|
3
|
-
"version": "1.9.
|
|
3
|
+
"version": "1.9.8-beta-20260618014851.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/web-infra-dev/midscene.git",
|
|
@@ -31,11 +31,6 @@
|
|
|
31
31
|
"import": "./dist/es/index.mjs",
|
|
32
32
|
"require": "./dist/lib/index.js"
|
|
33
33
|
},
|
|
34
|
-
"./mcp-server": {
|
|
35
|
-
"types": "./dist/types/mcp-server.d.ts",
|
|
36
|
-
"import": "./dist/es/mcp-server.mjs",
|
|
37
|
-
"require": "./dist/lib/mcp-server.js"
|
|
38
|
-
},
|
|
39
34
|
"./package.json": "./package.json"
|
|
40
35
|
},
|
|
41
36
|
"dependencies": {
|
|
@@ -46,8 +41,8 @@
|
|
|
46
41
|
"@yume-chan/stream-extra": "2.1.0",
|
|
47
42
|
"appium-adb": "12.12.1",
|
|
48
43
|
"sharp": "^0.34.3",
|
|
49
|
-
"@midscene/core": "1.9.
|
|
50
|
-
"@midscene/shared": "1.9.
|
|
44
|
+
"@midscene/core": "1.9.8-beta-20260618014851.0",
|
|
45
|
+
"@midscene/shared": "1.9.8-beta-20260618014851.0"
|
|
51
46
|
},
|
|
52
47
|
"optionalDependencies": {
|
|
53
48
|
"@ffmpeg-installer/ffmpeg": "^1.1.0"
|
|
@@ -61,7 +56,7 @@
|
|
|
61
56
|
"undici": "^6.0.0",
|
|
62
57
|
"vitest": "3.0.5",
|
|
63
58
|
"zod": "^3.25.1",
|
|
64
|
-
"@midscene/playground": "1.9.
|
|
59
|
+
"@midscene/playground": "1.9.8-beta-20260618014851.0"
|
|
65
60
|
},
|
|
66
61
|
"license": "MIT",
|
|
67
62
|
"scripts": {
|