@midscene/android 1.9.6-beta-20260615083255.0 → 1.9.6
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 +1 -59
- package/dist/es/index.mjs +0 -58
- package/dist/es/mcp-server.mjs +1 -59
- package/dist/lib/cli.js +1 -65
- package/dist/lib/index.js +0 -64
- package/dist/lib/mcp-server.js +1 -65
- package/package.json +4 -9
- package/dist/es/internal/adb-server-client-features-fallback.mjs +0 -58
- package/dist/lib/internal/adb-server-client-features-fallback.js +0 -92
- package/dist/types/internal/adb-server-client-features-fallback.d.ts +0 -9
package/dist/es/cli.mjs
CHANGED
|
@@ -14,7 +14,6 @@ import { getTmpFile, sleep } from "@midscene/core/utils";
|
|
|
14
14
|
import { MIDSCENE_ADB_PATH, MIDSCENE_ADB_REMOTE_HOST, MIDSCENE_ADB_REMOTE_PORT, MIDSCENE_ANDROID_IME_STRATEGY, globalConfigManager } from "@midscene/shared/env";
|
|
15
15
|
import { createImgBase64ByFormat, validateScreenshotBuffer } from "@midscene/shared/img";
|
|
16
16
|
import { ADB as external_appium_adb_ADB } from "appium-adb";
|
|
17
|
-
import { AdbServerClient as adb_AdbServerClient } from "@yume-chan/adb";
|
|
18
17
|
var __webpack_modules__ = {
|
|
19
18
|
"./src/scrcpy-manager.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
20
19
|
__webpack_require__.d(__webpack_exports__, {
|
|
@@ -586,62 +585,6 @@ const defaultAppNameMapping = {
|
|
|
586
585
|
var external_node_fs_ = __webpack_require__("node:fs");
|
|
587
586
|
var external_node_module_ = __webpack_require__("node:module");
|
|
588
587
|
var external_node_path_ = __webpack_require__("node:path");
|
|
589
|
-
const patchedClients = new WeakSet();
|
|
590
|
-
function getErrorMessage(error) {
|
|
591
|
-
return error instanceof Error ? error.message : String(error);
|
|
592
|
-
}
|
|
593
|
-
function isMultiDeviceFeatureError(error) {
|
|
594
|
-
return getErrorMessage(error).includes('more than one device/emulator');
|
|
595
|
-
}
|
|
596
|
-
async function resolveTransportId(client, device) {
|
|
597
|
-
if (device && 'transportId' in device) return device.transportId;
|
|
598
|
-
if (device && 'serial' in device) {
|
|
599
|
-
const devices = await client.getDevices();
|
|
600
|
-
return devices.find((info)=>info.serial === device.serial)?.transportId;
|
|
601
|
-
}
|
|
602
|
-
if (!device) {
|
|
603
|
-
const devices = await client.getDevices();
|
|
604
|
-
if (1 !== devices.length) return;
|
|
605
|
-
return devices[0]?.transportId;
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
async function getDeviceFeaturesByTransportId(client, transportId) {
|
|
609
|
-
const connection = await client.createConnection(adb_AdbServerClient.formatDeviceService({
|
|
610
|
-
transportId
|
|
611
|
-
}, 'features'));
|
|
612
|
-
try {
|
|
613
|
-
const featuresString = await connection.readString();
|
|
614
|
-
const features = featuresString ? featuresString.split(',') : [];
|
|
615
|
-
return {
|
|
616
|
-
transportId,
|
|
617
|
-
features
|
|
618
|
-
};
|
|
619
|
-
} finally{
|
|
620
|
-
await connection.dispose();
|
|
621
|
-
}
|
|
622
|
-
}
|
|
623
|
-
function installAdbServerClientFeaturesFallback(client) {
|
|
624
|
-
if (patchedClients.has(client)) return;
|
|
625
|
-
const getDeviceFeatures = client.getDeviceFeatures.bind(client);
|
|
626
|
-
client.getDeviceFeatures = async (device)=>{
|
|
627
|
-
try {
|
|
628
|
-
return await getDeviceFeatures(device);
|
|
629
|
-
} catch (error) {
|
|
630
|
-
if (!isMultiDeviceFeatureError(error)) throw error;
|
|
631
|
-
let transportId;
|
|
632
|
-
try {
|
|
633
|
-
transportId = await resolveTransportId(client, device);
|
|
634
|
-
} catch (resolveError) {
|
|
635
|
-
throw new Error(`Failed to resolve transport ID for ADB features fallback after "${getErrorMessage(error)}": ${getErrorMessage(resolveError)}`, {
|
|
636
|
-
cause: resolveError
|
|
637
|
-
});
|
|
638
|
-
}
|
|
639
|
-
if (void 0 === transportId) throw error;
|
|
640
|
-
return getDeviceFeaturesByTransportId(client, transportId);
|
|
641
|
-
}
|
|
642
|
-
};
|
|
643
|
-
patchedClients.add(client);
|
|
644
|
-
}
|
|
645
588
|
var scrcpy_manager = __webpack_require__("./src/scrcpy-manager.ts");
|
|
646
589
|
function _define_property(obj, key, value) {
|
|
647
590
|
if (key in obj) Object.defineProperty(obj, key, {
|
|
@@ -692,7 +635,6 @@ class ScrcpyDeviceAdapter {
|
|
|
692
635
|
host: '127.0.0.1',
|
|
693
636
|
port: 5037
|
|
694
637
|
}));
|
|
695
|
-
installAdbServerClientFeaturesFallback(adbClient);
|
|
696
638
|
const adb = new Adb(await adbClient.createTransport({
|
|
697
639
|
serial: this.deviceId
|
|
698
640
|
}));
|
|
@@ -2102,7 +2044,7 @@ class AndroidMidsceneTools extends BaseMidsceneTools {
|
|
|
2102
2044
|
const tools = new AndroidMidsceneTools();
|
|
2103
2045
|
runToolsCLI(tools, 'midscene-android', {
|
|
2104
2046
|
stripPrefix: 'android_',
|
|
2105
|
-
version: "1.9.6
|
|
2047
|
+
version: "1.9.6",
|
|
2106
2048
|
extraCommands: createReportCliCommands()
|
|
2107
2049
|
}).catch((e)=>{
|
|
2108
2050
|
process.exit(reportCLIError(e));
|
package/dist/es/index.mjs
CHANGED
|
@@ -11,7 +11,6 @@ import { MIDSCENE_ADB_PATH, MIDSCENE_ADB_REMOTE_HOST, MIDSCENE_ADB_REMOTE_PORT,
|
|
|
11
11
|
import { createImgBase64ByFormat, validateScreenshotBuffer } from "@midscene/shared/img";
|
|
12
12
|
import { mergeAndNormalizeAppNameMapping, normalizeForComparison, repeat } from "@midscene/shared/utils";
|
|
13
13
|
import { ADB } from "appium-adb";
|
|
14
|
-
import { AdbServerClient as adb_AdbServerClient } from "@yume-chan/adb";
|
|
15
14
|
import { Agent } from "@midscene/core/agent";
|
|
16
15
|
import { BaseMidsceneTools } from "@midscene/shared/mcp/base-tools";
|
|
17
16
|
var __webpack_modules__ = {
|
|
@@ -489,62 +488,6 @@ async function runAdbShellStdoutOrThrow(adb, command, options = {}) {
|
|
|
489
488
|
});
|
|
490
489
|
return getAdbShellStdoutOrThrow(command, output);
|
|
491
490
|
}
|
|
492
|
-
const patchedClients = new WeakSet();
|
|
493
|
-
function getErrorMessage(error) {
|
|
494
|
-
return error instanceof Error ? error.message : String(error);
|
|
495
|
-
}
|
|
496
|
-
function isMultiDeviceFeatureError(error) {
|
|
497
|
-
return getErrorMessage(error).includes('more than one device/emulator');
|
|
498
|
-
}
|
|
499
|
-
async function resolveTransportId(client, device) {
|
|
500
|
-
if (device && 'transportId' in device) return device.transportId;
|
|
501
|
-
if (device && 'serial' in device) {
|
|
502
|
-
const devices = await client.getDevices();
|
|
503
|
-
return devices.find((info)=>info.serial === device.serial)?.transportId;
|
|
504
|
-
}
|
|
505
|
-
if (!device) {
|
|
506
|
-
const devices = await client.getDevices();
|
|
507
|
-
if (1 !== devices.length) return;
|
|
508
|
-
return devices[0]?.transportId;
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
async function getDeviceFeaturesByTransportId(client, transportId) {
|
|
512
|
-
const connection = await client.createConnection(adb_AdbServerClient.formatDeviceService({
|
|
513
|
-
transportId
|
|
514
|
-
}, 'features'));
|
|
515
|
-
try {
|
|
516
|
-
const featuresString = await connection.readString();
|
|
517
|
-
const features = featuresString ? featuresString.split(',') : [];
|
|
518
|
-
return {
|
|
519
|
-
transportId,
|
|
520
|
-
features
|
|
521
|
-
};
|
|
522
|
-
} finally{
|
|
523
|
-
await connection.dispose();
|
|
524
|
-
}
|
|
525
|
-
}
|
|
526
|
-
function installAdbServerClientFeaturesFallback(client) {
|
|
527
|
-
if (patchedClients.has(client)) return;
|
|
528
|
-
const getDeviceFeatures = client.getDeviceFeatures.bind(client);
|
|
529
|
-
client.getDeviceFeatures = async (device)=>{
|
|
530
|
-
try {
|
|
531
|
-
return await getDeviceFeatures(device);
|
|
532
|
-
} catch (error) {
|
|
533
|
-
if (!isMultiDeviceFeatureError(error)) throw error;
|
|
534
|
-
let transportId;
|
|
535
|
-
try {
|
|
536
|
-
transportId = await resolveTransportId(client, device);
|
|
537
|
-
} catch (resolveError) {
|
|
538
|
-
throw new Error(`Failed to resolve transport ID for ADB features fallback after "${getErrorMessage(error)}": ${getErrorMessage(resolveError)}`, {
|
|
539
|
-
cause: resolveError
|
|
540
|
-
});
|
|
541
|
-
}
|
|
542
|
-
if (void 0 === transportId) throw error;
|
|
543
|
-
return getDeviceFeaturesByTransportId(client, transportId);
|
|
544
|
-
}
|
|
545
|
-
};
|
|
546
|
-
patchedClients.add(client);
|
|
547
|
-
}
|
|
548
491
|
var scrcpy_manager = __webpack_require__("./src/scrcpy-manager.ts");
|
|
549
492
|
function _define_property(obj, key, value) {
|
|
550
493
|
if (key in obj) Object.defineProperty(obj, key, {
|
|
@@ -595,7 +538,6 @@ class ScrcpyDeviceAdapter {
|
|
|
595
538
|
host: '127.0.0.1',
|
|
596
539
|
port: 5037
|
|
597
540
|
}));
|
|
598
|
-
installAdbServerClientFeaturesFallback(adbClient);
|
|
599
541
|
const adb = new Adb(await adbClient.createTransport({
|
|
600
542
|
serial: this.deviceId
|
|
601
543
|
}));
|
package/dist/es/mcp-server.mjs
CHANGED
|
@@ -13,7 +13,6 @@ import { getTmpFile, sleep } from "@midscene/core/utils";
|
|
|
13
13
|
import { MIDSCENE_ADB_PATH, MIDSCENE_ADB_REMOTE_HOST, MIDSCENE_ADB_REMOTE_PORT, MIDSCENE_ANDROID_IME_STRATEGY, globalConfigManager } from "@midscene/shared/env";
|
|
14
14
|
import { createImgBase64ByFormat, validateScreenshotBuffer } from "@midscene/shared/img";
|
|
15
15
|
import { ADB as external_appium_adb_ADB } from "appium-adb";
|
|
16
|
-
import { AdbServerClient as adb_AdbServerClient } from "@yume-chan/adb";
|
|
17
16
|
import { BaseMidsceneTools } from "@midscene/shared/mcp/base-tools";
|
|
18
17
|
var __webpack_modules__ = {
|
|
19
18
|
"./src/scrcpy-manager.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
@@ -586,62 +585,6 @@ const defaultAppNameMapping = {
|
|
|
586
585
|
var external_node_fs_ = __webpack_require__("node:fs");
|
|
587
586
|
var external_node_module_ = __webpack_require__("node:module");
|
|
588
587
|
var external_node_path_ = __webpack_require__("node:path");
|
|
589
|
-
const patchedClients = new WeakSet();
|
|
590
|
-
function getErrorMessage(error) {
|
|
591
|
-
return error instanceof Error ? error.message : String(error);
|
|
592
|
-
}
|
|
593
|
-
function isMultiDeviceFeatureError(error) {
|
|
594
|
-
return getErrorMessage(error).includes('more than one device/emulator');
|
|
595
|
-
}
|
|
596
|
-
async function resolveTransportId(client, device) {
|
|
597
|
-
if (device && 'transportId' in device) return device.transportId;
|
|
598
|
-
if (device && 'serial' in device) {
|
|
599
|
-
const devices = await client.getDevices();
|
|
600
|
-
return devices.find((info)=>info.serial === device.serial)?.transportId;
|
|
601
|
-
}
|
|
602
|
-
if (!device) {
|
|
603
|
-
const devices = await client.getDevices();
|
|
604
|
-
if (1 !== devices.length) return;
|
|
605
|
-
return devices[0]?.transportId;
|
|
606
|
-
}
|
|
607
|
-
}
|
|
608
|
-
async function getDeviceFeaturesByTransportId(client, transportId) {
|
|
609
|
-
const connection = await client.createConnection(adb_AdbServerClient.formatDeviceService({
|
|
610
|
-
transportId
|
|
611
|
-
}, 'features'));
|
|
612
|
-
try {
|
|
613
|
-
const featuresString = await connection.readString();
|
|
614
|
-
const features = featuresString ? featuresString.split(',') : [];
|
|
615
|
-
return {
|
|
616
|
-
transportId,
|
|
617
|
-
features
|
|
618
|
-
};
|
|
619
|
-
} finally{
|
|
620
|
-
await connection.dispose();
|
|
621
|
-
}
|
|
622
|
-
}
|
|
623
|
-
function installAdbServerClientFeaturesFallback(client) {
|
|
624
|
-
if (patchedClients.has(client)) return;
|
|
625
|
-
const getDeviceFeatures = client.getDeviceFeatures.bind(client);
|
|
626
|
-
client.getDeviceFeatures = async (device)=>{
|
|
627
|
-
try {
|
|
628
|
-
return await getDeviceFeatures(device);
|
|
629
|
-
} catch (error) {
|
|
630
|
-
if (!isMultiDeviceFeatureError(error)) throw error;
|
|
631
|
-
let transportId;
|
|
632
|
-
try {
|
|
633
|
-
transportId = await resolveTransportId(client, device);
|
|
634
|
-
} catch (resolveError) {
|
|
635
|
-
throw new Error(`Failed to resolve transport ID for ADB features fallback after "${getErrorMessage(error)}": ${getErrorMessage(resolveError)}`, {
|
|
636
|
-
cause: resolveError
|
|
637
|
-
});
|
|
638
|
-
}
|
|
639
|
-
if (void 0 === transportId) throw error;
|
|
640
|
-
return getDeviceFeaturesByTransportId(client, transportId);
|
|
641
|
-
}
|
|
642
|
-
};
|
|
643
|
-
patchedClients.add(client);
|
|
644
|
-
}
|
|
645
588
|
var scrcpy_manager = __webpack_require__("./src/scrcpy-manager.ts");
|
|
646
589
|
function _define_property(obj, key, value) {
|
|
647
590
|
if (key in obj) Object.defineProperty(obj, key, {
|
|
@@ -692,7 +635,6 @@ class ScrcpyDeviceAdapter {
|
|
|
692
635
|
host: '127.0.0.1',
|
|
693
636
|
port: 5037
|
|
694
637
|
}));
|
|
695
|
-
installAdbServerClientFeaturesFallback(adbClient);
|
|
696
638
|
const adb = new Adb(await adbClient.createTransport({
|
|
697
639
|
serial: this.deviceId
|
|
698
640
|
}));
|
|
@@ -2106,7 +2048,7 @@ class AndroidMCPServer extends BaseMCPServer {
|
|
|
2106
2048
|
constructor(toolsManager){
|
|
2107
2049
|
super({
|
|
2108
2050
|
name: '@midscene/android-mcp',
|
|
2109
|
-
version: "1.9.6
|
|
2051
|
+
version: "1.9.6",
|
|
2110
2052
|
description: 'Control the Android device using natural language commands'
|
|
2111
2053
|
}, toolsManager);
|
|
2112
2054
|
}
|
package/dist/lib/cli.js
CHANGED
|
@@ -3,68 +3,6 @@ const __rslib_import_meta_url__ = /*#__PURE__*/ function() {
|
|
|
3
3
|
return 'undefined' == typeof document ? new (require('url'.replace('', ''))).URL('file:' + __filename).href : document.currentScript && document.currentScript.src || new URL('main.js', document.baseURI).href;
|
|
4
4
|
}();
|
|
5
5
|
var __webpack_modules__ = {
|
|
6
|
-
"./src/internal/adb-server-client-features-fallback.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
7
|
-
__webpack_require__.d(__webpack_exports__, {
|
|
8
|
-
installAdbServerClientFeaturesFallback: ()=>installAdbServerClientFeaturesFallback
|
|
9
|
-
});
|
|
10
|
-
const adb_namespaceObject = require("@yume-chan/adb");
|
|
11
|
-
const patchedClients = new WeakSet();
|
|
12
|
-
function getErrorMessage(error) {
|
|
13
|
-
return error instanceof Error ? error.message : String(error);
|
|
14
|
-
}
|
|
15
|
-
function isMultiDeviceFeatureError(error) {
|
|
16
|
-
return getErrorMessage(error).includes('more than one device/emulator');
|
|
17
|
-
}
|
|
18
|
-
async function resolveTransportId(client, device) {
|
|
19
|
-
if (device && 'transportId' in device) return device.transportId;
|
|
20
|
-
if (device && 'serial' in device) {
|
|
21
|
-
const devices = await client.getDevices();
|
|
22
|
-
return devices.find((info)=>info.serial === device.serial)?.transportId;
|
|
23
|
-
}
|
|
24
|
-
if (!device) {
|
|
25
|
-
const devices = await client.getDevices();
|
|
26
|
-
if (1 !== devices.length) return;
|
|
27
|
-
return devices[0]?.transportId;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
async function getDeviceFeaturesByTransportId(client, transportId) {
|
|
31
|
-
const connection = await client.createConnection(adb_namespaceObject.AdbServerClient.formatDeviceService({
|
|
32
|
-
transportId
|
|
33
|
-
}, 'features'));
|
|
34
|
-
try {
|
|
35
|
-
const featuresString = await connection.readString();
|
|
36
|
-
const features = featuresString ? featuresString.split(',') : [];
|
|
37
|
-
return {
|
|
38
|
-
transportId,
|
|
39
|
-
features
|
|
40
|
-
};
|
|
41
|
-
} finally{
|
|
42
|
-
await connection.dispose();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
function installAdbServerClientFeaturesFallback(client) {
|
|
46
|
-
if (patchedClients.has(client)) return;
|
|
47
|
-
const getDeviceFeatures = client.getDeviceFeatures.bind(client);
|
|
48
|
-
client.getDeviceFeatures = async (device)=>{
|
|
49
|
-
try {
|
|
50
|
-
return await getDeviceFeatures(device);
|
|
51
|
-
} catch (error) {
|
|
52
|
-
if (!isMultiDeviceFeatureError(error)) throw error;
|
|
53
|
-
let transportId;
|
|
54
|
-
try {
|
|
55
|
-
transportId = await resolveTransportId(client, device);
|
|
56
|
-
} catch (resolveError) {
|
|
57
|
-
throw new Error(`Failed to resolve transport ID for ADB features fallback after "${getErrorMessage(error)}": ${getErrorMessage(resolveError)}`, {
|
|
58
|
-
cause: resolveError
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
if (void 0 === transportId) throw error;
|
|
62
|
-
return getDeviceFeaturesByTransportId(client, transportId);
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
patchedClients.add(client);
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
6
|
"./src/scrcpy-manager.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
69
7
|
__webpack_require__.d(__webpack_exports__, {
|
|
70
8
|
ScrcpyScreenshotManager: ()=>ScrcpyScreenshotManager,
|
|
@@ -662,7 +600,6 @@ ${stdout ? truncateAdbShellStream(stdout, 'stdout') : EMPTY_ADB_SHELL_STDOUT}`;
|
|
|
662
600
|
const env_namespaceObject = require("@midscene/shared/env");
|
|
663
601
|
const img_namespaceObject = require("@midscene/shared/img");
|
|
664
602
|
const external_appium_adb_namespaceObject = require("appium-adb");
|
|
665
|
-
var adb_server_client_features_fallback = __webpack_require__("./src/internal/adb-server-client-features-fallback.ts");
|
|
666
603
|
var scrcpy_manager = __webpack_require__("./src/scrcpy-manager.ts");
|
|
667
604
|
function _define_property(obj, key, value) {
|
|
668
605
|
if (key in obj) Object.defineProperty(obj, key, {
|
|
@@ -713,7 +650,6 @@ ${stdout ? truncateAdbShellStream(stdout, 'stdout') : EMPTY_ADB_SHELL_STDOUT}`;
|
|
|
713
650
|
host: '127.0.0.1',
|
|
714
651
|
port: 5037
|
|
715
652
|
}));
|
|
716
|
-
(0, adb_server_client_features_fallback.installAdbServerClientFeaturesFallback)(adbClient);
|
|
717
653
|
const adb = new Adb(await adbClient.createTransport({
|
|
718
654
|
serial: this.deviceId
|
|
719
655
|
}));
|
|
@@ -2123,7 +2059,7 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
2123
2059
|
const tools = new AndroidMidsceneTools();
|
|
2124
2060
|
(0, cli_namespaceObject.runToolsCLI)(tools, 'midscene-android', {
|
|
2125
2061
|
stripPrefix: 'android_',
|
|
2126
|
-
version: "1.9.6
|
|
2062
|
+
version: "1.9.6",
|
|
2127
2063
|
extraCommands: (0, core_namespaceObject.createReportCliCommands)()
|
|
2128
2064
|
}).catch((e)=>{
|
|
2129
2065
|
process.exit((0, cli_namespaceObject.reportCLIError)(e));
|
package/dist/lib/index.js
CHANGED
|
@@ -3,68 +3,6 @@ const __rslib_import_meta_url__ = /*#__PURE__*/ function() {
|
|
|
3
3
|
return 'undefined' == typeof document ? new (require('url'.replace('', ''))).URL('file:' + __filename).href : document.currentScript && document.currentScript.src || new URL('main.js', document.baseURI).href;
|
|
4
4
|
}();
|
|
5
5
|
var __webpack_modules__ = {
|
|
6
|
-
"./src/internal/adb-server-client-features-fallback.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
7
|
-
__webpack_require__.d(__webpack_exports__, {
|
|
8
|
-
installAdbServerClientFeaturesFallback: ()=>installAdbServerClientFeaturesFallback
|
|
9
|
-
});
|
|
10
|
-
const adb_namespaceObject = require("@yume-chan/adb");
|
|
11
|
-
const patchedClients = new WeakSet();
|
|
12
|
-
function getErrorMessage(error) {
|
|
13
|
-
return error instanceof Error ? error.message : String(error);
|
|
14
|
-
}
|
|
15
|
-
function isMultiDeviceFeatureError(error) {
|
|
16
|
-
return getErrorMessage(error).includes('more than one device/emulator');
|
|
17
|
-
}
|
|
18
|
-
async function resolveTransportId(client, device) {
|
|
19
|
-
if (device && 'transportId' in device) return device.transportId;
|
|
20
|
-
if (device && 'serial' in device) {
|
|
21
|
-
const devices = await client.getDevices();
|
|
22
|
-
return devices.find((info)=>info.serial === device.serial)?.transportId;
|
|
23
|
-
}
|
|
24
|
-
if (!device) {
|
|
25
|
-
const devices = await client.getDevices();
|
|
26
|
-
if (1 !== devices.length) return;
|
|
27
|
-
return devices[0]?.transportId;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
async function getDeviceFeaturesByTransportId(client, transportId) {
|
|
31
|
-
const connection = await client.createConnection(adb_namespaceObject.AdbServerClient.formatDeviceService({
|
|
32
|
-
transportId
|
|
33
|
-
}, 'features'));
|
|
34
|
-
try {
|
|
35
|
-
const featuresString = await connection.readString();
|
|
36
|
-
const features = featuresString ? featuresString.split(',') : [];
|
|
37
|
-
return {
|
|
38
|
-
transportId,
|
|
39
|
-
features
|
|
40
|
-
};
|
|
41
|
-
} finally{
|
|
42
|
-
await connection.dispose();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
function installAdbServerClientFeaturesFallback(client) {
|
|
46
|
-
if (patchedClients.has(client)) return;
|
|
47
|
-
const getDeviceFeatures = client.getDeviceFeatures.bind(client);
|
|
48
|
-
client.getDeviceFeatures = async (device)=>{
|
|
49
|
-
try {
|
|
50
|
-
return await getDeviceFeatures(device);
|
|
51
|
-
} catch (error) {
|
|
52
|
-
if (!isMultiDeviceFeatureError(error)) throw error;
|
|
53
|
-
let transportId;
|
|
54
|
-
try {
|
|
55
|
-
transportId = await resolveTransportId(client, device);
|
|
56
|
-
} catch (resolveError) {
|
|
57
|
-
throw new Error(`Failed to resolve transport ID for ADB features fallback after "${getErrorMessage(error)}": ${getErrorMessage(resolveError)}`, {
|
|
58
|
-
cause: resolveError
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
if (void 0 === transportId) throw error;
|
|
62
|
-
return getDeviceFeaturesByTransportId(client, transportId);
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
patchedClients.add(client);
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
6
|
"./src/scrcpy-manager.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
69
7
|
__webpack_require__.d(__webpack_exports__, {
|
|
70
8
|
ScrcpyScreenshotManager: ()=>ScrcpyScreenshotManager,
|
|
@@ -584,7 +522,6 @@ ${stdout ? truncateAdbShellStream(stdout, 'stdout') : EMPTY_ADB_SHELL_STDOUT}`;
|
|
|
584
522
|
});
|
|
585
523
|
return getAdbShellStdoutOrThrow(command, output);
|
|
586
524
|
}
|
|
587
|
-
var adb_server_client_features_fallback = __webpack_require__("./src/internal/adb-server-client-features-fallback.ts");
|
|
588
525
|
var scrcpy_manager = __webpack_require__("./src/scrcpy-manager.ts");
|
|
589
526
|
function _define_property(obj, key, value) {
|
|
590
527
|
if (key in obj) Object.defineProperty(obj, key, {
|
|
@@ -635,7 +572,6 @@ ${stdout ? truncateAdbShellStream(stdout, 'stdout') : EMPTY_ADB_SHELL_STDOUT}`;
|
|
|
635
572
|
host: '127.0.0.1',
|
|
636
573
|
port: 5037
|
|
637
574
|
}));
|
|
638
|
-
(0, adb_server_client_features_fallback.installAdbServerClientFeaturesFallback)(adbClient);
|
|
639
575
|
const adb = new Adb(await adbClient.createTransport({
|
|
640
576
|
serial: this.deviceId
|
|
641
577
|
}));
|
package/dist/lib/mcp-server.js
CHANGED
|
@@ -3,68 +3,6 @@ const __rslib_import_meta_url__ = /*#__PURE__*/ function() {
|
|
|
3
3
|
return 'undefined' == typeof document ? new (require('url'.replace('', ''))).URL('file:' + __filename).href : document.currentScript && document.currentScript.src || new URL('main.js', document.baseURI).href;
|
|
4
4
|
}();
|
|
5
5
|
var __webpack_modules__ = {
|
|
6
|
-
"./src/internal/adb-server-client-features-fallback.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
7
|
-
__webpack_require__.d(__webpack_exports__, {
|
|
8
|
-
installAdbServerClientFeaturesFallback: ()=>installAdbServerClientFeaturesFallback
|
|
9
|
-
});
|
|
10
|
-
const adb_namespaceObject = require("@yume-chan/adb");
|
|
11
|
-
const patchedClients = new WeakSet();
|
|
12
|
-
function getErrorMessage(error) {
|
|
13
|
-
return error instanceof Error ? error.message : String(error);
|
|
14
|
-
}
|
|
15
|
-
function isMultiDeviceFeatureError(error) {
|
|
16
|
-
return getErrorMessage(error).includes('more than one device/emulator');
|
|
17
|
-
}
|
|
18
|
-
async function resolveTransportId(client, device) {
|
|
19
|
-
if (device && 'transportId' in device) return device.transportId;
|
|
20
|
-
if (device && 'serial' in device) {
|
|
21
|
-
const devices = await client.getDevices();
|
|
22
|
-
return devices.find((info)=>info.serial === device.serial)?.transportId;
|
|
23
|
-
}
|
|
24
|
-
if (!device) {
|
|
25
|
-
const devices = await client.getDevices();
|
|
26
|
-
if (1 !== devices.length) return;
|
|
27
|
-
return devices[0]?.transportId;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
async function getDeviceFeaturesByTransportId(client, transportId) {
|
|
31
|
-
const connection = await client.createConnection(adb_namespaceObject.AdbServerClient.formatDeviceService({
|
|
32
|
-
transportId
|
|
33
|
-
}, 'features'));
|
|
34
|
-
try {
|
|
35
|
-
const featuresString = await connection.readString();
|
|
36
|
-
const features = featuresString ? featuresString.split(',') : [];
|
|
37
|
-
return {
|
|
38
|
-
transportId,
|
|
39
|
-
features
|
|
40
|
-
};
|
|
41
|
-
} finally{
|
|
42
|
-
await connection.dispose();
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
function installAdbServerClientFeaturesFallback(client) {
|
|
46
|
-
if (patchedClients.has(client)) return;
|
|
47
|
-
const getDeviceFeatures = client.getDeviceFeatures.bind(client);
|
|
48
|
-
client.getDeviceFeatures = async (device)=>{
|
|
49
|
-
try {
|
|
50
|
-
return await getDeviceFeatures(device);
|
|
51
|
-
} catch (error) {
|
|
52
|
-
if (!isMultiDeviceFeatureError(error)) throw error;
|
|
53
|
-
let transportId;
|
|
54
|
-
try {
|
|
55
|
-
transportId = await resolveTransportId(client, device);
|
|
56
|
-
} catch (resolveError) {
|
|
57
|
-
throw new Error(`Failed to resolve transport ID for ADB features fallback after "${getErrorMessage(error)}": ${getErrorMessage(resolveError)}`, {
|
|
58
|
-
cause: resolveError
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
if (void 0 === transportId) throw error;
|
|
62
|
-
return getDeviceFeaturesByTransportId(client, transportId);
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
patchedClients.add(client);
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
6
|
"./src/scrcpy-manager.ts" (__unused_rspack_module, __webpack_exports__, __webpack_require__) {
|
|
69
7
|
__webpack_require__.d(__webpack_exports__, {
|
|
70
8
|
ScrcpyScreenshotManager: ()=>ScrcpyScreenshotManager,
|
|
@@ -677,7 +615,6 @@ ${stdout ? truncateAdbShellStream(stdout, 'stdout') : EMPTY_ADB_SHELL_STDOUT}`;
|
|
|
677
615
|
const env_namespaceObject = require("@midscene/shared/env");
|
|
678
616
|
const img_namespaceObject = require("@midscene/shared/img");
|
|
679
617
|
const external_appium_adb_namespaceObject = require("appium-adb");
|
|
680
|
-
var adb_server_client_features_fallback = __webpack_require__("./src/internal/adb-server-client-features-fallback.ts");
|
|
681
618
|
var scrcpy_manager = __webpack_require__("./src/scrcpy-manager.ts");
|
|
682
619
|
function _define_property(obj, key, value) {
|
|
683
620
|
if (key in obj) Object.defineProperty(obj, key, {
|
|
@@ -728,7 +665,6 @@ ${stdout ? truncateAdbShellStream(stdout, 'stdout') : EMPTY_ADB_SHELL_STDOUT}`;
|
|
|
728
665
|
host: '127.0.0.1',
|
|
729
666
|
port: 5037
|
|
730
667
|
}));
|
|
731
|
-
(0, adb_server_client_features_fallback.installAdbServerClientFeaturesFallback)(adbClient);
|
|
732
668
|
const adb = new Adb(await adbClient.createTransport({
|
|
733
669
|
serial: this.deviceId
|
|
734
670
|
}));
|
|
@@ -2143,7 +2079,7 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
|
|
|
2143
2079
|
constructor(toolsManager){
|
|
2144
2080
|
super({
|
|
2145
2081
|
name: '@midscene/android-mcp',
|
|
2146
|
-
version: "1.9.6
|
|
2082
|
+
version: "1.9.6",
|
|
2147
2083
|
description: 'Control the Android device using natural language commands'
|
|
2148
2084
|
}, toolsManager);
|
|
2149
2085
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@midscene/android",
|
|
3
|
-
"version": "1.9.6
|
|
3
|
+
"version": "1.9.6",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/web-infra-dev/midscene.git",
|
|
@@ -36,11 +36,6 @@
|
|
|
36
36
|
"import": "./dist/es/mcp-server.mjs",
|
|
37
37
|
"require": "./dist/lib/mcp-server.js"
|
|
38
38
|
},
|
|
39
|
-
"./internal/adb-server-client-features-fallback": {
|
|
40
|
-
"types": "./dist/types/internal/adb-server-client-features-fallback.d.ts",
|
|
41
|
-
"import": "./dist/es/internal/adb-server-client-features-fallback.mjs",
|
|
42
|
-
"require": "./dist/lib/internal/adb-server-client-features-fallback.js"
|
|
43
|
-
},
|
|
44
39
|
"./package.json": "./package.json"
|
|
45
40
|
},
|
|
46
41
|
"dependencies": {
|
|
@@ -51,8 +46,8 @@
|
|
|
51
46
|
"@yume-chan/stream-extra": "2.1.0",
|
|
52
47
|
"appium-adb": "12.12.1",
|
|
53
48
|
"sharp": "^0.34.3",
|
|
54
|
-
"@midscene/core": "1.9.6
|
|
55
|
-
"@midscene/shared": "1.9.6
|
|
49
|
+
"@midscene/core": "1.9.6",
|
|
50
|
+
"@midscene/shared": "1.9.6"
|
|
56
51
|
},
|
|
57
52
|
"optionalDependencies": {
|
|
58
53
|
"@ffmpeg-installer/ffmpeg": "^1.1.0"
|
|
@@ -66,7 +61,7 @@
|
|
|
66
61
|
"undici": "^6.0.0",
|
|
67
62
|
"vitest": "3.0.5",
|
|
68
63
|
"zod": "^3.25.1",
|
|
69
|
-
"@midscene/playground": "1.9.6
|
|
64
|
+
"@midscene/playground": "1.9.6"
|
|
70
65
|
},
|
|
71
66
|
"license": "MIT",
|
|
72
67
|
"scripts": {
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
import { AdbServerClient } from "@yume-chan/adb";
|
|
2
|
-
const patchedClients = new WeakSet();
|
|
3
|
-
function getErrorMessage(error) {
|
|
4
|
-
return error instanceof Error ? error.message : String(error);
|
|
5
|
-
}
|
|
6
|
-
function isMultiDeviceFeatureError(error) {
|
|
7
|
-
return getErrorMessage(error).includes('more than one device/emulator');
|
|
8
|
-
}
|
|
9
|
-
async function resolveTransportId(client, device) {
|
|
10
|
-
if (device && 'transportId' in device) return device.transportId;
|
|
11
|
-
if (device && 'serial' in device) {
|
|
12
|
-
const devices = await client.getDevices();
|
|
13
|
-
return devices.find((info)=>info.serial === device.serial)?.transportId;
|
|
14
|
-
}
|
|
15
|
-
if (!device) {
|
|
16
|
-
const devices = await client.getDevices();
|
|
17
|
-
if (1 !== devices.length) return;
|
|
18
|
-
return devices[0]?.transportId;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
async function getDeviceFeaturesByTransportId(client, transportId) {
|
|
22
|
-
const connection = await client.createConnection(AdbServerClient.formatDeviceService({
|
|
23
|
-
transportId
|
|
24
|
-
}, 'features'));
|
|
25
|
-
try {
|
|
26
|
-
const featuresString = await connection.readString();
|
|
27
|
-
const features = featuresString ? featuresString.split(',') : [];
|
|
28
|
-
return {
|
|
29
|
-
transportId,
|
|
30
|
-
features
|
|
31
|
-
};
|
|
32
|
-
} finally{
|
|
33
|
-
await connection.dispose();
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
function installAdbServerClientFeaturesFallback(client) {
|
|
37
|
-
if (patchedClients.has(client)) return;
|
|
38
|
-
const getDeviceFeatures = client.getDeviceFeatures.bind(client);
|
|
39
|
-
client.getDeviceFeatures = async (device)=>{
|
|
40
|
-
try {
|
|
41
|
-
return await getDeviceFeatures(device);
|
|
42
|
-
} catch (error) {
|
|
43
|
-
if (!isMultiDeviceFeatureError(error)) throw error;
|
|
44
|
-
let transportId;
|
|
45
|
-
try {
|
|
46
|
-
transportId = await resolveTransportId(client, device);
|
|
47
|
-
} catch (resolveError) {
|
|
48
|
-
throw new Error(`Failed to resolve transport ID for ADB features fallback after "${getErrorMessage(error)}": ${getErrorMessage(resolveError)}`, {
|
|
49
|
-
cause: resolveError
|
|
50
|
-
});
|
|
51
|
-
}
|
|
52
|
-
if (void 0 === transportId) throw error;
|
|
53
|
-
return getDeviceFeaturesByTransportId(client, transportId);
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
patchedClients.add(client);
|
|
57
|
-
}
|
|
58
|
-
export { installAdbServerClientFeaturesFallback };
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __webpack_require__ = {};
|
|
3
|
-
(()=>{
|
|
4
|
-
__webpack_require__.d = (exports1, definition)=>{
|
|
5
|
-
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: definition[key]
|
|
8
|
-
});
|
|
9
|
-
};
|
|
10
|
-
})();
|
|
11
|
-
(()=>{
|
|
12
|
-
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
|
|
13
|
-
})();
|
|
14
|
-
(()=>{
|
|
15
|
-
__webpack_require__.r = (exports1)=>{
|
|
16
|
-
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
|
|
17
|
-
value: 'Module'
|
|
18
|
-
});
|
|
19
|
-
Object.defineProperty(exports1, '__esModule', {
|
|
20
|
-
value: true
|
|
21
|
-
});
|
|
22
|
-
};
|
|
23
|
-
})();
|
|
24
|
-
var __webpack_exports__ = {};
|
|
25
|
-
__webpack_require__.r(__webpack_exports__);
|
|
26
|
-
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
-
installAdbServerClientFeaturesFallback: ()=>installAdbServerClientFeaturesFallback
|
|
28
|
-
});
|
|
29
|
-
const adb_namespaceObject = require("@yume-chan/adb");
|
|
30
|
-
const patchedClients = new WeakSet();
|
|
31
|
-
function getErrorMessage(error) {
|
|
32
|
-
return error instanceof Error ? error.message : String(error);
|
|
33
|
-
}
|
|
34
|
-
function isMultiDeviceFeatureError(error) {
|
|
35
|
-
return getErrorMessage(error).includes('more than one device/emulator');
|
|
36
|
-
}
|
|
37
|
-
async function resolveTransportId(client, device) {
|
|
38
|
-
if (device && 'transportId' in device) return device.transportId;
|
|
39
|
-
if (device && 'serial' in device) {
|
|
40
|
-
const devices = await client.getDevices();
|
|
41
|
-
return devices.find((info)=>info.serial === device.serial)?.transportId;
|
|
42
|
-
}
|
|
43
|
-
if (!device) {
|
|
44
|
-
const devices = await client.getDevices();
|
|
45
|
-
if (1 !== devices.length) return;
|
|
46
|
-
return devices[0]?.transportId;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
async function getDeviceFeaturesByTransportId(client, transportId) {
|
|
50
|
-
const connection = await client.createConnection(adb_namespaceObject.AdbServerClient.formatDeviceService({
|
|
51
|
-
transportId
|
|
52
|
-
}, 'features'));
|
|
53
|
-
try {
|
|
54
|
-
const featuresString = await connection.readString();
|
|
55
|
-
const features = featuresString ? featuresString.split(',') : [];
|
|
56
|
-
return {
|
|
57
|
-
transportId,
|
|
58
|
-
features
|
|
59
|
-
};
|
|
60
|
-
} finally{
|
|
61
|
-
await connection.dispose();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
function installAdbServerClientFeaturesFallback(client) {
|
|
65
|
-
if (patchedClients.has(client)) return;
|
|
66
|
-
const getDeviceFeatures = client.getDeviceFeatures.bind(client);
|
|
67
|
-
client.getDeviceFeatures = async (device)=>{
|
|
68
|
-
try {
|
|
69
|
-
return await getDeviceFeatures(device);
|
|
70
|
-
} catch (error) {
|
|
71
|
-
if (!isMultiDeviceFeatureError(error)) throw error;
|
|
72
|
-
let transportId;
|
|
73
|
-
try {
|
|
74
|
-
transportId = await resolveTransportId(client, device);
|
|
75
|
-
} catch (resolveError) {
|
|
76
|
-
throw new Error(`Failed to resolve transport ID for ADB features fallback after "${getErrorMessage(error)}": ${getErrorMessage(resolveError)}`, {
|
|
77
|
-
cause: resolveError
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
if (void 0 === transportId) throw error;
|
|
81
|
-
return getDeviceFeaturesByTransportId(client, transportId);
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
patchedClients.add(client);
|
|
85
|
-
}
|
|
86
|
-
exports.installAdbServerClientFeaturesFallback = __webpack_exports__.installAdbServerClientFeaturesFallback;
|
|
87
|
-
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
88
|
-
"installAdbServerClientFeaturesFallback"
|
|
89
|
-
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
90
|
-
Object.defineProperty(exports, '__esModule', {
|
|
91
|
-
value: true
|
|
92
|
-
});
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { AdbServerClient } from '@yume-chan/adb';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* @internal Work around ADB server feature requests that ignore serial selectors
|
|
5
|
-
* before yume-chan/adb includes a transport-id qualified features request.
|
|
6
|
-
*/
|
|
7
|
-
export declare function installAdbServerClientFeaturesFallback(client: AdbServerClient): void;
|
|
8
|
-
|
|
9
|
-
export { }
|