@midscene/harmony 1.5.7 → 1.5.8-beta-20260324073120.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/bin.mjs +44 -20
- package/dist/es/cli.mjs +1 -1
- package/dist/es/index.mjs +61 -1
- package/dist/es/mcp-server.mjs +1 -1
- package/dist/lib/bin.js +44 -20
- package/dist/lib/cli.js +1 -1
- package/dist/lib/index.js +64 -0
- package/dist/lib/mcp-server.js +1 -1
- package/dist/types/index.d.ts +8 -0
- package/package.json +4 -4
- package/static/index.html +1 -1
- package/static/static/css/index.3b624810.css +2 -0
- package/static/static/css/index.3b624810.css.map +1 -0
- package/static/static/js/259.5d781a39.js +301 -0
- package/static/static/js/{148.23cd9828.js.LICENSE.txt → 259.5d781a39.js.LICENSE.txt} +27 -0
- package/static/static/js/259.5d781a39.js.map +1 -0
- package/static/static/js/async/236.a5d2c1b1.js +2 -0
- package/static/static/js/async/236.a5d2c1b1.js.map +1 -0
- package/static/static/js/{index.b2ea9324.js → index.9f28ff75.js} +10 -10
- package/static/static/js/index.9f28ff75.js.map +1 -0
- package/static/static/css/index.30e8a752.css +0 -2
- package/static/static/css/index.30e8a752.css.map +0 -1
- package/static/static/js/148.23cd9828.js +0 -271
- package/static/static/js/148.23cd9828.js.map +0 -1
- package/static/static/js/index.b2ea9324.js.map +0 -1
- /package/static/static/js/{index.b2ea9324.js.LICENSE.txt → index.9f28ff75.js.LICENSE.txt} +0 -0
package/dist/es/bin.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import node_path from "node:path";
|
|
2
|
+
import { createScreenshotPreviewDescriptor, definePlaygroundPlatform, launchPreparedPlaygroundPlatform } from "@midscene/playground";
|
|
2
3
|
import { select as prompts_select } from "@inquirer/prompts";
|
|
3
|
-
import { playgroundForAgentFactory } from "@midscene/playground";
|
|
4
4
|
import { PLAYGROUND_SERVER_PORT } from "@midscene/shared/constants";
|
|
5
5
|
import { findAvailablePort } from "@midscene/shared/node";
|
|
6
6
|
import { Agent } from "@midscene/core/agent";
|
|
@@ -902,34 +902,58 @@ async function selectDevice() {
|
|
|
902
902
|
console.log(`📱 Found device: ${devices[0].deviceId}`);
|
|
903
903
|
return devices[0].deviceId;
|
|
904
904
|
}
|
|
905
|
-
const choices = devices.map((d)=>({
|
|
906
|
-
name: d.deviceId,
|
|
907
|
-
value: d.deviceId
|
|
908
|
-
}));
|
|
909
905
|
return prompts_select({
|
|
910
906
|
message: '📱 Multiple devices found. Please select one:',
|
|
911
|
-
choices
|
|
907
|
+
choices: devices.map((device)=>({
|
|
908
|
+
name: device.deviceId,
|
|
909
|
+
value: device.deviceId
|
|
910
|
+
}))
|
|
912
911
|
});
|
|
913
912
|
}
|
|
914
|
-
const
|
|
913
|
+
const harmonyPlaygroundPlatform = definePlaygroundPlatform({
|
|
914
|
+
id: 'harmony',
|
|
915
|
+
title: 'Midscene HarmonyOS Playground',
|
|
916
|
+
description: "HarmonyOS playground platform descriptor",
|
|
917
|
+
async prepare (options) {
|
|
918
|
+
const selectedDeviceId = options?.deviceId || await selectDevice();
|
|
919
|
+
const staticDir = options?.staticDir || node_path.join(__dirname, '../../static');
|
|
920
|
+
const availablePort = await findAvailablePort(PLAYGROUND_SERVER_PORT);
|
|
921
|
+
if (availablePort !== PLAYGROUND_SERVER_PORT) console.log(`⚠️ Port ${PLAYGROUND_SERVER_PORT} is busy, using port ${availablePort} instead`);
|
|
922
|
+
return {
|
|
923
|
+
platformId: 'harmony',
|
|
924
|
+
title: 'Midscene HarmonyOS Playground',
|
|
925
|
+
agentFactory: async ()=>{
|
|
926
|
+
const device = new device_HarmonyDevice(selectedDeviceId);
|
|
927
|
+
await device.connect();
|
|
928
|
+
return new HarmonyAgent(device);
|
|
929
|
+
},
|
|
930
|
+
launchOptions: {
|
|
931
|
+
port: availablePort,
|
|
932
|
+
openBrowser: false,
|
|
933
|
+
verbose: false,
|
|
934
|
+
staticPath: staticDir
|
|
935
|
+
},
|
|
936
|
+
preview: createScreenshotPreviewDescriptor({
|
|
937
|
+
title: 'HarmonyOS device preview'
|
|
938
|
+
}),
|
|
939
|
+
metadata: {
|
|
940
|
+
deviceId: selectedDeviceId
|
|
941
|
+
}
|
|
942
|
+
};
|
|
943
|
+
}
|
|
944
|
+
});
|
|
945
|
+
const bin_staticDir = node_path.join(__dirname, '../../static');
|
|
915
946
|
const main = async ()=>{
|
|
916
947
|
const { default: open } = await import("open");
|
|
917
948
|
try {
|
|
918
|
-
const
|
|
949
|
+
const prepared = await harmonyPlaygroundPlatform.prepare({
|
|
950
|
+
staticDir: bin_staticDir
|
|
951
|
+
});
|
|
952
|
+
const selectedDeviceId = prepared.metadata?.deviceId;
|
|
953
|
+
if ('string' != typeof selectedDeviceId || !selectedDeviceId) throw new Error('Harmony playground prepared metadata is missing a deviceId');
|
|
919
954
|
console.log(`✅ Selected device: ${selectedDeviceId}`);
|
|
920
955
|
console.log('🚀 Starting server...');
|
|
921
|
-
const
|
|
922
|
-
if (availablePort !== PLAYGROUND_SERVER_PORT) console.log(`⚠️ Port ${PLAYGROUND_SERVER_PORT} is busy, using port ${availablePort} instead`);
|
|
923
|
-
const { server: playgroundServer } = await playgroundForAgentFactory(async ()=>{
|
|
924
|
-
const device = new device_HarmonyDevice(selectedDeviceId);
|
|
925
|
-
await device.connect();
|
|
926
|
-
return new HarmonyAgent(device);
|
|
927
|
-
}).launch({
|
|
928
|
-
port: availablePort,
|
|
929
|
-
openBrowser: false,
|
|
930
|
-
verbose: false,
|
|
931
|
-
staticPath: staticDir
|
|
932
|
-
});
|
|
956
|
+
const { server: playgroundServer } = await launchPreparedPlaygroundPlatform(prepared);
|
|
933
957
|
console.log('');
|
|
934
958
|
console.log('✨ Midscene HarmonyOS Playground is ready!');
|
|
935
959
|
console.log(`🎮 Playground: http://localhost:${playgroundServer.port}`);
|
package/dist/es/cli.mjs
CHANGED
|
@@ -952,7 +952,7 @@ class HarmonyMidsceneTools extends BaseMidsceneTools {
|
|
|
952
952
|
const tools = new HarmonyMidsceneTools();
|
|
953
953
|
runToolsCLI(tools, 'midscene-harmony', {
|
|
954
954
|
stripPrefix: 'harmony_',
|
|
955
|
-
version: "1.5.
|
|
955
|
+
version: "1.5.8-beta-20260324073120.0"
|
|
956
956
|
}).catch((e)=>{
|
|
957
957
|
if (!(e instanceof CLIError)) console.error(e);
|
|
958
958
|
process.exit(e instanceof CLIError ? e.exitCode : 1);
|
package/dist/es/index.mjs
CHANGED
|
@@ -11,6 +11,11 @@ import { promisify } from "node:util";
|
|
|
11
11
|
import { Agent } from "@midscene/core/agent";
|
|
12
12
|
import { BaseMidsceneTools } from "@midscene/shared/mcp";
|
|
13
13
|
import { overrideAIConfig } from "@midscene/shared/env";
|
|
14
|
+
import node_path from "node:path";
|
|
15
|
+
import { select as prompts_select } from "@inquirer/prompts";
|
|
16
|
+
import { createScreenshotPreviewDescriptor, definePlaygroundPlatform } from "@midscene/playground";
|
|
17
|
+
import { PLAYGROUND_SERVER_PORT } from "@midscene/shared/constants";
|
|
18
|
+
import { findAvailablePort } from "@midscene/shared/node";
|
|
14
19
|
function _define_property(obj, key, value) {
|
|
15
20
|
if (key in obj) Object.defineProperty(obj, key, {
|
|
16
21
|
value: value,
|
|
@@ -949,4 +954,59 @@ class HarmonyMidsceneTools extends BaseMidsceneTools {
|
|
|
949
954
|
];
|
|
950
955
|
}
|
|
951
956
|
}
|
|
952
|
-
|
|
957
|
+
async function selectDevice() {
|
|
958
|
+
console.log('🔍 Scanning for HarmonyOS devices...');
|
|
959
|
+
const devices = await getConnectedDevices();
|
|
960
|
+
if (0 === devices.length) {
|
|
961
|
+
console.error('❌ No HarmonyOS devices found!');
|
|
962
|
+
console.log('📱 Please ensure:');
|
|
963
|
+
console.log(' • Your device is connected via USB');
|
|
964
|
+
console.log(' • HDC is properly configured');
|
|
965
|
+
console.log(' • Run `hdc list targets` to verify');
|
|
966
|
+
process.exit(1);
|
|
967
|
+
}
|
|
968
|
+
if (1 === devices.length) {
|
|
969
|
+
console.log(`📱 Found device: ${devices[0].deviceId}`);
|
|
970
|
+
return devices[0].deviceId;
|
|
971
|
+
}
|
|
972
|
+
return prompts_select({
|
|
973
|
+
message: '📱 Multiple devices found. Please select one:',
|
|
974
|
+
choices: devices.map((device)=>({
|
|
975
|
+
name: device.deviceId,
|
|
976
|
+
value: device.deviceId
|
|
977
|
+
}))
|
|
978
|
+
});
|
|
979
|
+
}
|
|
980
|
+
const harmonyPlaygroundPlatform = definePlaygroundPlatform({
|
|
981
|
+
id: 'harmony',
|
|
982
|
+
title: 'Midscene HarmonyOS Playground',
|
|
983
|
+
description: "HarmonyOS playground platform descriptor",
|
|
984
|
+
async prepare (options) {
|
|
985
|
+
const selectedDeviceId = options?.deviceId || await selectDevice();
|
|
986
|
+
const staticDir = options?.staticDir || node_path.join(__dirname, '../../static');
|
|
987
|
+
const availablePort = await findAvailablePort(PLAYGROUND_SERVER_PORT);
|
|
988
|
+
if (availablePort !== PLAYGROUND_SERVER_PORT) console.log(`⚠️ Port ${PLAYGROUND_SERVER_PORT} is busy, using port ${availablePort} instead`);
|
|
989
|
+
return {
|
|
990
|
+
platformId: 'harmony',
|
|
991
|
+
title: 'Midscene HarmonyOS Playground',
|
|
992
|
+
agentFactory: async ()=>{
|
|
993
|
+
const device = new HarmonyDevice(selectedDeviceId);
|
|
994
|
+
await device.connect();
|
|
995
|
+
return new HarmonyAgent(device);
|
|
996
|
+
},
|
|
997
|
+
launchOptions: {
|
|
998
|
+
port: availablePort,
|
|
999
|
+
openBrowser: false,
|
|
1000
|
+
verbose: false,
|
|
1001
|
+
staticPath: staticDir
|
|
1002
|
+
},
|
|
1003
|
+
preview: createScreenshotPreviewDescriptor({
|
|
1004
|
+
title: 'HarmonyOS device preview'
|
|
1005
|
+
}),
|
|
1006
|
+
metadata: {
|
|
1007
|
+
deviceId: selectedDeviceId
|
|
1008
|
+
}
|
|
1009
|
+
};
|
|
1010
|
+
}
|
|
1011
|
+
});
|
|
1012
|
+
export { HarmonyAgent, HarmonyDevice, HarmonyMidsceneTools, agentFromHdcDevice, getConnectedDevices, harmonyPlaygroundPlatform, overrideAIConfig };
|
package/dist/es/mcp-server.mjs
CHANGED
|
@@ -955,7 +955,7 @@ class HarmonyMCPServer extends BaseMCPServer {
|
|
|
955
955
|
constructor(toolsManager){
|
|
956
956
|
super({
|
|
957
957
|
name: '@midscene/harmony-mcp',
|
|
958
|
-
version: "1.5.
|
|
958
|
+
version: "1.5.8-beta-20260324073120.0",
|
|
959
959
|
description: 'Control the HarmonyOS device using natural language commands'
|
|
960
960
|
}, toolsManager);
|
|
961
961
|
}
|
package/dist/lib/bin.js
CHANGED
|
@@ -23,8 +23,8 @@ var __webpack_require__ = {};
|
|
|
23
23
|
var __webpack_exports__ = {};
|
|
24
24
|
const external_node_path_namespaceObject = require("node:path");
|
|
25
25
|
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
26
|
-
const prompts_namespaceObject = require("@inquirer/prompts");
|
|
27
26
|
const playground_namespaceObject = require("@midscene/playground");
|
|
27
|
+
const prompts_namespaceObject = require("@inquirer/prompts");
|
|
28
28
|
const constants_namespaceObject = require("@midscene/shared/constants");
|
|
29
29
|
const node_namespaceObject = require("@midscene/shared/node");
|
|
30
30
|
const agent_namespaceObject = require("@midscene/core/agent");
|
|
@@ -928,34 +928,58 @@ async function selectDevice() {
|
|
|
928
928
|
console.log(`📱 Found device: ${devices[0].deviceId}`);
|
|
929
929
|
return devices[0].deviceId;
|
|
930
930
|
}
|
|
931
|
-
const choices = devices.map((d)=>({
|
|
932
|
-
name: d.deviceId,
|
|
933
|
-
value: d.deviceId
|
|
934
|
-
}));
|
|
935
931
|
return (0, prompts_namespaceObject.select)({
|
|
936
932
|
message: '📱 Multiple devices found. Please select one:',
|
|
937
|
-
choices
|
|
933
|
+
choices: devices.map((device)=>({
|
|
934
|
+
name: device.deviceId,
|
|
935
|
+
value: device.deviceId
|
|
936
|
+
}))
|
|
938
937
|
});
|
|
939
938
|
}
|
|
940
|
-
const
|
|
939
|
+
const harmonyPlaygroundPlatform = (0, playground_namespaceObject.definePlaygroundPlatform)({
|
|
940
|
+
id: 'harmony',
|
|
941
|
+
title: 'Midscene HarmonyOS Playground',
|
|
942
|
+
description: "HarmonyOS playground platform descriptor",
|
|
943
|
+
async prepare (options) {
|
|
944
|
+
const selectedDeviceId = options?.deviceId || await selectDevice();
|
|
945
|
+
const staticDir = options?.staticDir || external_node_path_default().join(__dirname, '../../static');
|
|
946
|
+
const availablePort = await (0, node_namespaceObject.findAvailablePort)(constants_namespaceObject.PLAYGROUND_SERVER_PORT);
|
|
947
|
+
if (availablePort !== constants_namespaceObject.PLAYGROUND_SERVER_PORT) console.log(`⚠️ Port ${constants_namespaceObject.PLAYGROUND_SERVER_PORT} is busy, using port ${availablePort} instead`);
|
|
948
|
+
return {
|
|
949
|
+
platformId: 'harmony',
|
|
950
|
+
title: 'Midscene HarmonyOS Playground',
|
|
951
|
+
agentFactory: async ()=>{
|
|
952
|
+
const device = new device_HarmonyDevice(selectedDeviceId);
|
|
953
|
+
await device.connect();
|
|
954
|
+
return new HarmonyAgent(device);
|
|
955
|
+
},
|
|
956
|
+
launchOptions: {
|
|
957
|
+
port: availablePort,
|
|
958
|
+
openBrowser: false,
|
|
959
|
+
verbose: false,
|
|
960
|
+
staticPath: staticDir
|
|
961
|
+
},
|
|
962
|
+
preview: (0, playground_namespaceObject.createScreenshotPreviewDescriptor)({
|
|
963
|
+
title: 'HarmonyOS device preview'
|
|
964
|
+
}),
|
|
965
|
+
metadata: {
|
|
966
|
+
deviceId: selectedDeviceId
|
|
967
|
+
}
|
|
968
|
+
};
|
|
969
|
+
}
|
|
970
|
+
});
|
|
971
|
+
const bin_staticDir = external_node_path_default().join(__dirname, '../../static');
|
|
941
972
|
const main = async ()=>{
|
|
942
973
|
const { default: open } = await import("open");
|
|
943
974
|
try {
|
|
944
|
-
const
|
|
975
|
+
const prepared = await harmonyPlaygroundPlatform.prepare({
|
|
976
|
+
staticDir: bin_staticDir
|
|
977
|
+
});
|
|
978
|
+
const selectedDeviceId = prepared.metadata?.deviceId;
|
|
979
|
+
if ('string' != typeof selectedDeviceId || !selectedDeviceId) throw new Error('Harmony playground prepared metadata is missing a deviceId');
|
|
945
980
|
console.log(`✅ Selected device: ${selectedDeviceId}`);
|
|
946
981
|
console.log('🚀 Starting server...');
|
|
947
|
-
const
|
|
948
|
-
if (availablePort !== constants_namespaceObject.PLAYGROUND_SERVER_PORT) console.log(`⚠️ Port ${constants_namespaceObject.PLAYGROUND_SERVER_PORT} is busy, using port ${availablePort} instead`);
|
|
949
|
-
const { server: playgroundServer } = await (0, playground_namespaceObject.playgroundForAgentFactory)(async ()=>{
|
|
950
|
-
const device = new device_HarmonyDevice(selectedDeviceId);
|
|
951
|
-
await device.connect();
|
|
952
|
-
return new HarmonyAgent(device);
|
|
953
|
-
}).launch({
|
|
954
|
-
port: availablePort,
|
|
955
|
-
openBrowser: false,
|
|
956
|
-
verbose: false,
|
|
957
|
-
staticPath: staticDir
|
|
958
|
-
});
|
|
982
|
+
const { server: playgroundServer } = await (0, playground_namespaceObject.launchPreparedPlaygroundPlatform)(prepared);
|
|
959
983
|
console.log('');
|
|
960
984
|
console.log('✨ Midscene HarmonyOS Playground is ready!');
|
|
961
985
|
console.log(`🎮 Playground: http://localhost:${playgroundServer.port}`);
|
package/dist/lib/cli.js
CHANGED
|
@@ -977,7 +977,7 @@ class HarmonyMidsceneTools extends mcp_namespaceObject.BaseMidsceneTools {
|
|
|
977
977
|
const tools = new HarmonyMidsceneTools();
|
|
978
978
|
(0, cli_namespaceObject.runToolsCLI)(tools, 'midscene-harmony', {
|
|
979
979
|
stripPrefix: 'harmony_',
|
|
980
|
-
version: "1.5.
|
|
980
|
+
version: "1.5.8-beta-20260324073120.0"
|
|
981
981
|
}).catch((e)=>{
|
|
982
982
|
if (!(e instanceof cli_namespaceObject.CLIError)) console.error(e);
|
|
983
983
|
process.exit(e instanceof cli_namespaceObject.CLIError ? e.exitCode : 1);
|
package/dist/lib/index.js
CHANGED
|
@@ -33,6 +33,7 @@ var __webpack_require__ = {};
|
|
|
33
33
|
var __webpack_exports__ = {};
|
|
34
34
|
__webpack_require__.r(__webpack_exports__);
|
|
35
35
|
__webpack_require__.d(__webpack_exports__, {
|
|
36
|
+
harmonyPlaygroundPlatform: ()=>harmonyPlaygroundPlatform,
|
|
36
37
|
overrideAIConfig: ()=>env_namespaceObject.overrideAIConfig,
|
|
37
38
|
HarmonyMidsceneTools: ()=>HarmonyMidsceneTools,
|
|
38
39
|
agentFromHdcDevice: ()=>agentFromHdcDevice,
|
|
@@ -993,11 +994,73 @@ class HarmonyMidsceneTools extends mcp_namespaceObject.BaseMidsceneTools {
|
|
|
993
994
|
}
|
|
994
995
|
}
|
|
995
996
|
const env_namespaceObject = require("@midscene/shared/env");
|
|
997
|
+
const external_node_path_namespaceObject = require("node:path");
|
|
998
|
+
var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
|
|
999
|
+
const prompts_namespaceObject = require("@inquirer/prompts");
|
|
1000
|
+
const playground_namespaceObject = require("@midscene/playground");
|
|
1001
|
+
const constants_namespaceObject = require("@midscene/shared/constants");
|
|
1002
|
+
const node_namespaceObject = require("@midscene/shared/node");
|
|
1003
|
+
async function selectDevice() {
|
|
1004
|
+
console.log('🔍 Scanning for HarmonyOS devices...');
|
|
1005
|
+
const devices = await getConnectedDevices();
|
|
1006
|
+
if (0 === devices.length) {
|
|
1007
|
+
console.error('❌ No HarmonyOS devices found!');
|
|
1008
|
+
console.log('📱 Please ensure:');
|
|
1009
|
+
console.log(' • Your device is connected via USB');
|
|
1010
|
+
console.log(' • HDC is properly configured');
|
|
1011
|
+
console.log(' • Run `hdc list targets` to verify');
|
|
1012
|
+
process.exit(1);
|
|
1013
|
+
}
|
|
1014
|
+
if (1 === devices.length) {
|
|
1015
|
+
console.log(`📱 Found device: ${devices[0].deviceId}`);
|
|
1016
|
+
return devices[0].deviceId;
|
|
1017
|
+
}
|
|
1018
|
+
return (0, prompts_namespaceObject.select)({
|
|
1019
|
+
message: '📱 Multiple devices found. Please select one:',
|
|
1020
|
+
choices: devices.map((device)=>({
|
|
1021
|
+
name: device.deviceId,
|
|
1022
|
+
value: device.deviceId
|
|
1023
|
+
}))
|
|
1024
|
+
});
|
|
1025
|
+
}
|
|
1026
|
+
const harmonyPlaygroundPlatform = (0, playground_namespaceObject.definePlaygroundPlatform)({
|
|
1027
|
+
id: 'harmony',
|
|
1028
|
+
title: 'Midscene HarmonyOS Playground',
|
|
1029
|
+
description: "HarmonyOS playground platform descriptor",
|
|
1030
|
+
async prepare (options) {
|
|
1031
|
+
const selectedDeviceId = options?.deviceId || await selectDevice();
|
|
1032
|
+
const staticDir = options?.staticDir || external_node_path_default().join(__dirname, '../../static');
|
|
1033
|
+
const availablePort = await (0, node_namespaceObject.findAvailablePort)(constants_namespaceObject.PLAYGROUND_SERVER_PORT);
|
|
1034
|
+
if (availablePort !== constants_namespaceObject.PLAYGROUND_SERVER_PORT) console.log(`⚠️ Port ${constants_namespaceObject.PLAYGROUND_SERVER_PORT} is busy, using port ${availablePort} instead`);
|
|
1035
|
+
return {
|
|
1036
|
+
platformId: 'harmony',
|
|
1037
|
+
title: 'Midscene HarmonyOS Playground',
|
|
1038
|
+
agentFactory: async ()=>{
|
|
1039
|
+
const device = new HarmonyDevice(selectedDeviceId);
|
|
1040
|
+
await device.connect();
|
|
1041
|
+
return new HarmonyAgent(device);
|
|
1042
|
+
},
|
|
1043
|
+
launchOptions: {
|
|
1044
|
+
port: availablePort,
|
|
1045
|
+
openBrowser: false,
|
|
1046
|
+
verbose: false,
|
|
1047
|
+
staticPath: staticDir
|
|
1048
|
+
},
|
|
1049
|
+
preview: (0, playground_namespaceObject.createScreenshotPreviewDescriptor)({
|
|
1050
|
+
title: 'HarmonyOS device preview'
|
|
1051
|
+
}),
|
|
1052
|
+
metadata: {
|
|
1053
|
+
deviceId: selectedDeviceId
|
|
1054
|
+
}
|
|
1055
|
+
};
|
|
1056
|
+
}
|
|
1057
|
+
});
|
|
996
1058
|
exports.HarmonyAgent = __webpack_exports__.HarmonyAgent;
|
|
997
1059
|
exports.HarmonyDevice = __webpack_exports__.HarmonyDevice;
|
|
998
1060
|
exports.HarmonyMidsceneTools = __webpack_exports__.HarmonyMidsceneTools;
|
|
999
1061
|
exports.agentFromHdcDevice = __webpack_exports__.agentFromHdcDevice;
|
|
1000
1062
|
exports.getConnectedDevices = __webpack_exports__.getConnectedDevices;
|
|
1063
|
+
exports.harmonyPlaygroundPlatform = __webpack_exports__.harmonyPlaygroundPlatform;
|
|
1001
1064
|
exports.overrideAIConfig = __webpack_exports__.overrideAIConfig;
|
|
1002
1065
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
1003
1066
|
"HarmonyAgent",
|
|
@@ -1005,6 +1068,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
|
|
|
1005
1068
|
"HarmonyMidsceneTools",
|
|
1006
1069
|
"agentFromHdcDevice",
|
|
1007
1070
|
"getConnectedDevices",
|
|
1071
|
+
"harmonyPlaygroundPlatform",
|
|
1008
1072
|
"overrideAIConfig"
|
|
1009
1073
|
].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
|
|
1010
1074
|
Object.defineProperty(exports, '__esModule', {
|
package/dist/lib/mcp-server.js
CHANGED
|
@@ -996,7 +996,7 @@ class HarmonyMCPServer extends mcp_namespaceObject.BaseMCPServer {
|
|
|
996
996
|
constructor(toolsManager){
|
|
997
997
|
super({
|
|
998
998
|
name: '@midscene/harmony-mcp',
|
|
999
|
-
version: "1.5.
|
|
999
|
+
version: "1.5.8-beta-20260324073120.0",
|
|
1000
1000
|
description: 'Control the HarmonyOS device using natural language commands'
|
|
1001
1001
|
}, toolsManager);
|
|
1002
1002
|
}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ import { HarmonyDeviceOpt } from '@midscene/core/device';
|
|
|
10
10
|
import { InterfaceType } from '@midscene/core';
|
|
11
11
|
import { LocateResultElement } from '@midscene/core';
|
|
12
12
|
import { overrideAIConfig } from '@midscene/shared/env';
|
|
13
|
+
import { PlaygroundPlatformDescriptor } from '@midscene/playground';
|
|
13
14
|
import { Point } from '@midscene/core';
|
|
14
15
|
import { Size } from '@midscene/core';
|
|
15
16
|
import { ToolDefinition } from '@midscene/shared/mcp';
|
|
@@ -109,6 +110,13 @@ export declare class HarmonyMidsceneTools extends BaseMidsceneTools<HarmonyAgent
|
|
|
109
110
|
protected preparePlatformTools(): ToolDefinition[];
|
|
110
111
|
}
|
|
111
112
|
|
|
113
|
+
declare interface HarmonyPlatformOptions {
|
|
114
|
+
deviceId?: string;
|
|
115
|
+
staticDir?: string;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
export declare const harmonyPlaygroundPlatform: PlaygroundPlatformDescriptor<HarmonyPlatformOptions | undefined>;
|
|
119
|
+
|
|
112
120
|
declare class HdcClient {
|
|
113
121
|
private hdcPath;
|
|
114
122
|
private deviceId;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@midscene/harmony",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.8-beta-20260324073120.0",
|
|
4
4
|
"description": "HarmonyOS automation library for Midscene",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"HarmonyOS UI automation",
|
|
@@ -41,9 +41,9 @@
|
|
|
41
41
|
"dependencies": {
|
|
42
42
|
"@inquirer/prompts": "^7.8.6",
|
|
43
43
|
"open": "10.1.0",
|
|
44
|
-
"@midscene/core": "1.5.
|
|
45
|
-
"@midscene/playground": "1.5.
|
|
46
|
-
"@midscene/shared": "1.5.
|
|
44
|
+
"@midscene/core": "1.5.8-beta-20260324073120.0",
|
|
45
|
+
"@midscene/playground": "1.5.8-beta-20260324073120.0",
|
|
46
|
+
"@midscene/shared": "1.5.8-beta-20260324073120.0"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@rslib/core": "^0.18.3",
|
package/static/index.html
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
<!doctype html><html><head><link rel="icon" href="/favicon.ico"><title>Midscene Playground</title><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script defer src="/static/js/lib-react.7b1abe58.js"></script><script defer src="/static/js/
|
|
1
|
+
<!doctype html><html><head><link rel="icon" href="/favicon.ico"><title>Midscene Playground</title><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script defer src="/static/js/lib-react.7b1abe58.js"></script><script defer src="/static/js/259.5d781a39.js"></script><script defer src="/static/js/index.9f28ff75.js"></script><link href="/static/css/index.3b624810.css" rel="stylesheet"></head><body><div id="root"></div></body></html>
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
.logo img{vertical-align:baseline;height:30px;vertical-align:-webkit-baseline-middle;line-height:30px}.logo-with-star-wrapper{flex-direction:row;justify-content:space-between;display:flex}.nav-actions{align-items:center;gap:8px;display:flex}.nav-actions .nav-icon{color:#000000a6;cursor:pointer;font-size:16px;transition:color .3s}.nav-actions .nav-icon:hover{color:#2b83ff}.nav-actions a{align-items:center;text-decoration:none;display:flex}.nav-actions a:hover .nav-icon{color:#2b83ff}[data-theme=dark] .nav-actions .nav-icon{color:#f8fafd}[data-theme=dark] .nav-actions .nav-icon:hover{color:#2b83ff}.blackboard .footer{color:#aaa}.blackboard ul{padding-left:0}.blackboard li{list-style:none}.blackboard .bottom-tip{height:30px}.blackboard .bottom-tip-item{color:#aaa;text-overflow:ellipsis;word-wrap:break-word;max-width:500px}.blackboard-main-content{position:relative;overflow:hidden}.blackboard-screenshot{box-sizing:border-box;border:1px solid #888;width:100%;display:block}.blackboard-overlay{pointer-events:none;width:100%;position:absolute;top:0;left:0}.blackboard-rect{box-sizing:content-box;pointer-events:none;position:absolute}.blackboard-rect-label{white-space:nowrap;padding:1px 4px;font-size:14px;font-weight:600;line-height:1.4;position:absolute;bottom:100%;left:0}.blackboard-rect-search{border:calc(1px*var(--ui-scale,1))solid #028391;background:#02839126}.blackboard-rect-search .blackboard-rect-label{color:#028391}.blackboard-rect-highlight{border:calc(1px*var(--ui-scale,1))solid #fd5907;background:#fd590726;animation:1.2s ease-in-out infinite blackboard-pulse}.blackboard-rect-highlight .blackboard-rect-label{color:#000}.blackboard-point{width:calc(20px*var(--ui-scale,1));height:calc(20px*var(--ui-scale,1));margin-left:calc(-10px*var(--ui-scale,1));margin-top:calc(-10px*var(--ui-scale,1));border:calc(2px*var(--ui-scale,1))solid #fd5907;box-shadow:0 0 calc(6px*var(--ui-scale,1))#fd590780;pointer-events:none;background:#fd590766;border-radius:50%;animation:1.2s ease-in-out infinite blackboard-pulse;position:absolute}@keyframes blackboard-pulse{0%,to{opacity:.4}50%{opacity:1;box-shadow:0 0 12px #fd590780}}[data-theme=dark] .blackboard .footer,[data-theme=dark] .blackboard .bottom-tip-item{color:#ffffff73}[data-theme=dark] .blackboard-screenshot{border-color:#ffffff1f}[data-theme=dark] .blackboard-rect-highlight .blackboard-rect-label{color:#fff}.shiny-text{color:#0000;letter-spacing:.5px;text-shadow:0 1px 2px #0000000d;background-image:linear-gradient(45deg,#2b83ff,#6a11cb,#2575fc,#4481eb);background-size:300%;-webkit-background-clip:text;background-clip:text;font-weight:600;animation:8s infinite textGradient;display:inline-block;position:relative;overflow:hidden}.shiny-text.theme-blue{background-image:linear-gradient(45deg,#2b83ff,#6a11cb,#2575fc,#4481eb)}.shiny-text.theme-purple{background-image:linear-gradient(45deg,#667eea,#764ba2,#b06ab3,#9d50bb)}.shiny-text.theme-green{background-image:linear-gradient(45deg,#11998e,#38ef7d,#2dd4bf,#10b981)}.shiny-text.theme-rainbow{background-image:linear-gradient(45deg,#ff0080,#ff8c00,#40e0d0,#9d50bb,#ff0080);background-size:400%}.shiny-text:after{content:"";width:120%;height:120%;animation:shine var(--animation-duration,5s)cubic-bezier(.25,.1,.25,1)infinite;z-index:1;pointer-events:none;background:linear-gradient(90deg,#fff0 0%,#ffffff1a 10%,#fff9 50%,#ffffff1a 90%,#fff0 100%);position:absolute;top:-10%;left:-150%;transform:skew(-20deg)translateY(0)}.shiny-text.disabled{color:#000;background:0 0;font-weight:400;animation:none}.shiny-text.disabled:after{animation:none;display:none}[data-theme=dark] .shiny-text{color:#0000;-webkit-text-fill-color:transparent;text-shadow:none;background-image:linear-gradient(45deg,#a78bfa,#c084fc,#e879f9,#c084fc);background-size:300%;-webkit-background-clip:text;background-clip:text;animation:8s infinite textGradient}[data-theme=dark] .shiny-text:after{background:linear-gradient(90deg,#c5b8ff00 0%,#c5b8ff0d 10%,#c5b8ff26 50%,#c5b8ff0d 90%,#c5b8ff00 100%)}@keyframes shine{0%{opacity:.7;left:-150%}20%{opacity:1}80%{opacity:1}to{opacity:.7;left:250%}}@keyframes textGradient{0%{background-position:0%}50%{background-position:100%}to{background-position:0%}}.env-config-reminder{background:#fff2e8;border-radius:12px;align-items:center;gap:12px;margin-bottom:12px;padding:12px 16px;display:flex}.env-config-reminder .reminder-icon{color:#fa541c;width:16px;height:16px}.env-config-reminder .reminder-text{color:#000;flex:1;font-size:14px}[data-theme=dark] .env-config-reminder{background:#5226074d}[data-theme=dark] .env-config-reminder .reminder-text{color:#f8fafd}.player-container{box-sizing:border-box;border:1px solid #f2f4f7;border-radius:8px;flex-direction:column;width:100%;max-width:100%;height:100%;min-height:300px;max-height:100%;margin:0 auto;padding:12px;line-height:normal;display:flex;position:relative;overflow:visible}.player-container[data-fit-mode=height]{background:#fff}.player-container[data-fit-mode=height] .canvas-container{background-color:#000}.player-container .canvas-container{background-color:#000;border-radius:4px;outline:none;flex:auto;justify-content:center;align-items:center;width:100%;min-height:200px;display:flex;position:relative;overflow:hidden}.player-container .canvas-container .player-wrapper{width:100%;max-width:100%;max-height:100%;position:relative}.player-container .canvas-container .player-wrapper[data-portrait]{width:auto;height:100%}.player-container .player-subtitle{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:3;pointer-events:none;background:#505050bf;border-radius:8px;align-items:center;gap:8px;max-width:calc(100% - 24px);height:32px;padding:0 14px;display:inline-flex;position:absolute;bottom:52px;left:50%;transform:translate(-50%)}.player-container .player-subtitle .player-subtitle-badge{color:#fff;background:#a34dff;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;height:22px;padding:0 6px;font-size:13px;font-weight:700;display:inline-flex}.player-container .player-subtitle .player-subtitle-text{color:#fff;white-space:nowrap;text-overflow:ellipsis;min-width:0;font-size:14px;font-weight:500;overflow:hidden}.player-container .control-bar{z-index:2;background:linear-gradient(#0000,#0009);align-items:center;gap:8px;padding:8px 12px;transition:opacity .3s;display:flex;position:absolute;bottom:0;left:0;right:0}.player-container .control-bar.hidden{opacity:0;pointer-events:none}.player-container .time-display{color:#fffc;font-variant-numeric:tabular-nums;white-space:nowrap;flex-shrink:0;font-size:14px}.player-container .seek-bar-track{cursor:pointer;touch-action:none;background:#ffffff4d;border-radius:2.5px;flex:1;height:5px;position:relative}.player-container .seek-bar-track .seek-bar-fill{pointer-events:none;background:#2b83ff;border-radius:2.5px;height:100%;position:absolute;top:0;left:0}.player-container .seek-bar-track .seek-bar-knob{pointer-events:none;background:#fff;border-radius:10px;width:8px;height:16px;position:absolute;top:50%;transform:translate(-50%,-50%)}.player-container .seek-bar-track .chapter-marker{pointer-events:auto;cursor:pointer;z-index:1;background:#fff;width:2px;height:100%;position:absolute;top:0;transform:translate(-50%)}.player-container .seek-bar-track .chapter-marker:before{content:"";position:absolute;top:-8px;bottom:-8px;left:-8px;right:-8px}.player-container .status-icon{color:#fff;cursor:pointer;opacity:.7;border-radius:4px;flex-shrink:0;justify-content:center;align-items:center;width:28px;height:28px;transition:all .2s;display:flex}.player-container .status-icon svg{color:#fff;font-size:16px}.player-container .status-icon:hover{opacity:1;background:#ffffff26}.player-container .player-custom-controls{flex-direction:row;align-items:center;gap:8px;margin-right:8px;display:flex}.player-container .player-custom-controls .ant-spin{color:#fff}.chapter-tooltip .ant-tooltip-inner{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#505050d9;border-radius:16px;max-width:360px;padding:6px 12px;font-size:12px}.chapter-tooltip .ant-tooltip-arrow:before{background:#505050d9}[data-theme=dark] .player-container{border-color:#292929}[data-theme=dark] .player-container[data-fit-mode=height]{background:#292929;border-color:#292929}[data-theme=dark] .player-container[data-fit-mode=height] .canvas-container,[data-theme=dark] .player-container .canvas-container{background-color:#000}.player-settings-dropdown{background-color:#fff;border:1px solid #00000014;border-radius:8px;padding:4px;overflow:hidden;box-shadow:0 2px 8px #00000014}.player-settings-divider{background:#0000000f;height:1px;margin:4px 0}.player-speed-option:hover,.player-settings-item:hover{background:#0000000a}.player-speed-option.active{color:#1677ff}[data-theme=dark] .player-settings-dropdown{color:#f8fafd;background-color:#1f1f1f;border-color:#ffffff14;box-shadow:0 2px 8px #0000004d}[data-theme=dark] .player-settings-divider,[data-theme=dark] .player-speed-option:hover,[data-theme=dark] .player-settings-item:hover{background:#ffffff14}.result-wrapper{justify-content:center;align-items:flex-start;height:100%;margin:4px 0;display:flex}.result-wrapper .player-container{width:100%;max-width:500px;height:auto;min-height:0;max-height:none}.result-wrapper .player-container .canvas-container{height:60vh;min-height:0;max-height:60vh}.result-wrapper .player-container .player-wrapper{max-width:100%;max-height:100%}.result-wrapper .loading-container{flex-direction:column;justify-content:center;align-items:center;width:100%;height:100%;display:flex}.result-wrapper .loading-container .loading-progress-text{color:#888;margin-top:8px;font-size:12px}.result-wrapper pre{white-space:pre-wrap;text-wrap:unset;word-wrap:break-word;overflow-wrap:break-word;background:#f2f4f7;border-radius:8px;margin:0;padding:14px;overflow:scroll}[data-theme=dark] .result-wrapper .loading-container .loading-progress-text{color:#ffffff73}[data-theme=dark] .result-wrapper pre{color:#f8fafd;background:#ffffff14;border:1px solid #ffffff1f}.playground-container{background:#fff;flex-direction:column;width:100%;height:100vh;display:flex;position:relative}.playground-container .command-form{flex-direction:column;width:100%;height:100%;display:flex}.playground-container .context-preview-section{border-bottom:1px solid #f0f0f0;flex-shrink:0;padding:16px}.playground-container .middle-dialog-area{flex-direction:column;flex:1;min-height:0;display:flex;position:relative;overflow:hidden}.playground-container .middle-dialog-area .clear-button-container{z-index:10;position:absolute;top:16px;right:0}.playground-container .middle-dialog-area .clear-button-container .clear-button{opacity:.7;transition:opacity .2s}.playground-container .middle-dialog-area .clear-button-container .clear-button:hover{opacity:1}.playground-container .middle-dialog-area .info-list-container{scrollbar-width:none;flex:1;padding-top:16px;padding-bottom:16px;overflow:hidden auto}.playground-container .middle-dialog-area .info-list-container .ant-list .ant-list-item{border-bottom:none;padding:0}.playground-container .middle-dialog-area .info-list-container .ant-list .ant-list-item .ant-card{border:1px solid #f0f0f0;border-radius:8px;box-shadow:0 1px 3px #0000001a}.playground-container .middle-dialog-area .info-list-container .ant-list .ant-list-item .ant-card:hover{box-shadow:0 2px 6px #00000026}.playground-container .middle-dialog-area .info-list-container .ant-list .ant-list-item .ant-card .ant-card-body{padding:12px}.playground-container .middle-dialog-area .info-list-container .ant-list .ant-list-empty-text{color:#999;font-style:italic}.playground-container .middle-dialog-area .info-list-container::-webkit-scrollbar{display:none}.playground-container .middle-dialog-area .info-list-container .list-item{background:0 0;border:none;padding:0}.playground-container .middle-dialog-area .scroll-to-bottom-button{z-index:10;background:#fff;border:1px solid #00000014;position:absolute;bottom:10px;right:0}.playground-container .middle-dialog-area .scroll-to-bottom-button:hover{background:#1890ff}.playground-container .middle-dialog-area .scroll-to-bottom-button:hover .anticon{color:#fff}.playground-container .middle-dialog-area .scroll-to-bottom-button .anticon{color:#333;font-size:16px}.playground-container .user-message-container{justify-content:flex-end;width:100%;margin:20px 0 30px;display:flex}.playground-container .user-message-container .user-message-bubble{color:#000000d9;text-align:left;background:#f2f4f7;border-radius:12px;max-width:80%;padding:12px 16px;font-size:14px;font-weight:400;display:inline-block}.playground-container .progress-action-item{color:#000;background:#f2f4f7;border-radius:8px;justify-content:space-between;height:36px;margin:4px 0;padding:0 12px;font-size:14px;line-height:36px;display:flex}.playground-container .progress-action-item .progress-status-icon{margin-left:4px}.playground-container .progress-action-item .progress-status-icon.loading{color:#1890ff}.playground-container .progress-action-item .progress-status-icon.completed{color:#52c41a}.playground-container .progress-action-item .progress-status-icon.error{color:#ff4d4f;font-weight:700}.playground-container .progress-description{padding:8px 0;font-size:14px;line-height:22px;display:inline-block}.playground-container .system-message-container{flex-direction:column;display:flex}.playground-container .system-message-container .system-message-header{align-items:center;gap:8px;margin:12px 0;display:flex}.playground-container .system-message-container .system-message-header .system-message-title{font-size:12px;font-weight:400;line-height:100%}.playground-container .system-message-container .system-message-content{color:#000000d9;font-size:14px}.playground-container .system-message-container .system-message-content .system-message-text{color:#000000d9;font-size:14px;line-height:25px}.playground-container .system-message-container .system-message-content .error-message{color:#e51723;word-break:break-word;background-color:#fff;border:none;border-radius:0;align-items:flex-start;margin-bottom:16px;padding:0;font-size:14px;display:flex}.playground-container .system-message-container .system-message-content .error-message .divider{background-color:#e6e8eb;flex-shrink:0;align-self:stretch;width:1px;min-height:20px;margin:0 8px 0 0}.playground-container .system-message-container .system-message-content .loading-progress-text{color:#666;background:#f6f8fa;border-left:3px solid #1890ff;border-radius:4px;margin-top:8px;padding:8px 12px;font-size:13px}.playground-container .new-conversation-separator{flex-shrink:0;justify-content:center;align-items:center;padding:20px 0;display:flex;position:relative}.playground-container .new-conversation-separator .separator-line{background-color:#e8e8e8;height:1px;position:absolute;top:50%;left:0;right:0}.playground-container .new-conversation-separator .separator-text-container{z-index:1;background-color:#fff;padding:0 16px;position:relative}.playground-container .new-conversation-separator .separator-text-container .separator-text{color:#999;background-color:#fff;font-size:12px}.playground-container .bottom-input-section{background-color:#fff;flex-shrink:0;padding:16px 0 0}.playground-container .version-info-section{flex-shrink:0;justify-content:center;align-items:center;height:38px;display:flex}.playground-container .version-text{color:#999;text-align:center;font-size:12px}.playground-container .hidden-result-ref{display:none}.playground-container .playground-description{margin-bottom:32px}.playground-container .playground-description .description-zh{color:#333;margin:0 0 8px;font-size:16px;line-height:1.5}.playground-container .playground-description .description-en{color:#666;margin:0;font-size:14px;line-height:1.5}.playground-container .config-section{margin-bottom:24px}.playground-container .config-section .config-title{color:#333;margin:0 0 16px;font-size:18px;font-weight:600}.playground-container .config-section .config-item{align-items:center;gap:8px;margin-bottom:12px;display:flex}.playground-container .config-section .config-item .config-check{color:#52c41a;font-size:16px}.playground-container .config-section .config-item .config-label{color:#333;font-size:14px}.playground-container .config-section .config-link{color:#1890ff;font-size:14px;text-decoration:none}.playground-container .config-section .config-link:hover{text-decoration:underline}[data-theme=dark] .universal-playground .error-hint{color:#ffffff73}[data-theme=dark] .universal-playground .status-indicator{color:#f8fafd}[data-theme=dark] .universal-playground .status-indicator.error{color:#ff4d4f}[data-theme=dark] .universal-playground .status-indicator.success{color:#52c41a}[data-theme=dark] .universal-playground .operation-label{color:#f8fafd}[data-theme=dark] .universal-playground .alert-message{color:#f8fafd;background-color:#5226074d}[data-theme=dark] .universal-playground .operation-item .operation-icon-wrapper{background-color:#ffffff14}[data-theme=dark] .universal-playground .operation-item .operation-content{background-color:#0000}[data-theme=dark] .universal-playground .operation-item .operation-content .operation-title{color:#ffffff73}[data-theme=dark] .universal-playground .playground-footer{background-color:#ffffff0a}[data-theme=dark] .universal-playground .playground-footer .status-text{color:#f8fafd}[data-theme=dark] .universal-playground .results-info{color:#ffffff73}[data-theme=dark] .universal-playground .result-section .result-title,[data-theme=dark] .universal-playground .result-section .result-details,[data-theme=dark] .universal-playground .result-section .result-value{color:#f8fafd}[data-theme=dark] .universal-playground .result-section .result-value.success{color:#52c41a}[data-theme=dark] .universal-playground .result-section .result-value.error{color:#ff4d4f}.prompt-input-wrapper{box-sizing:border-box;width:100%;padding:0 4px}.prompt-input-wrapper .mode-radio-group-wrapper{align-items:center;gap:8px;display:flex;position:relative}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group{scrollbar-width:thin;flex:1;align-items:center;gap:8px;min-width:0;height:100%;margin-right:60px;display:flex;overflow:auto hidden}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group::-webkit-scrollbar{height:6px}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group::-webkit-scrollbar-thumb:hover{background:#a8a8a8}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .ant-form-item{flex-shrink:0;margin:0!important}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .ant-form-item .ant-radio-group{flex-wrap:nowrap;gap:8px;display:flex}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .ant-radio-button-wrapper{height:24px;box-shadow:none;white-space:nowrap;background-color:#f7f7f7;border:none;border-radius:11px;flex-shrink:0;margin-right:0;padding:0 8px;font-size:12px;line-height:24px}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .ant-radio-button-wrapper:before{display:none}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .ant-radio-button-wrapper:focus-within{outline:none}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{color:#fff;background-color:#2b83ff;border-color:#2b83ff}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked:hover{color:#fff}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .ant-dropdown-trigger{flex-shrink:0}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .more-apis-button{height:24px;box-shadow:none;white-space:nowrap;background-color:#f7f7f7;border:none;border-radius:11px;flex-shrink:0;align-items:center;gap:2px;max-width:160px;padding:0 8px;font-size:12px;display:inline-flex}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .more-apis-button .ant-btn-content{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .more-apis-button:hover{background-color:#e6e6e6}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .more-apis-button.selected-from-dropdown{color:#fff;background-color:#2b83ff;font-weight:500}.prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .more-apis-button.selected-from-dropdown:hover{background-color:#2b83ff}.prompt-input-wrapper .mode-radio-group-wrapper .action-icons{z-index:10;pointer-events:none;background:linear-gradient(90deg,#0000 0%,#ffffff80 20%,#fffc 40%,#fffffff2 60%,#fff 70%);flex-shrink:0;justify-content:flex-end;align-items:center;gap:8px;width:80px;padding-left:20px;display:flex;position:absolute;top:50%;right:0;transform:translateY(-50%)}.prompt-input-wrapper .mode-radio-group-wrapper .action-icons>*{pointer-events:auto}.prompt-input-wrapper .main-side-console-input{z-index:1;background:linear-gradient(#fff,#fff) padding-box padding-box,linear-gradient(135deg,#4285f4 0%,#06f 25%,#7b02c5 50%,#ea4335 75%,#ff7043 100%) border-box;border:1px solid #0000;border-radius:12px;margin-top:10px;padding-bottom:48px;position:relative}@keyframes hue-shift{0%{filter:hue-rotate()}to{filter:hue-rotate(360deg)}}.prompt-input-wrapper .main-side-console-input:focus-within{z-index:10;box-shadow:0 0 0 3px #2b83ff29}.prompt-input-wrapper .main-side-console-input .main-side-console-input-textarea{resize:none;white-space:pre-wrap;scrollbar-width:thin;background:0 0;border:none;border-radius:0;outline:none;min-height:120px;padding:12px 16px;line-height:21px;transition:background-color .2s;position:relative;overflow-y:auto}.prompt-input-wrapper .main-side-console-input .main-side-console-input-textarea:focus{box-shadow:none;border:none;outline:none}.prompt-input-wrapper .main-side-console-input .main-side-console-input-textarea:focus-visible{box-shadow:none;border:none;outline:none}.prompt-input-wrapper .main-side-console-input .main-side-console-input-textarea:after{display:none}.prompt-input-wrapper .main-side-console-input .main-side-console-input-textarea::-webkit-scrollbar{width:6px}.prompt-input-wrapper .main-side-console-input .main-side-console-input-textarea::-webkit-scrollbar-thumb{background-color:#0003;border-radius:3px}.prompt-input-wrapper .main-side-console-input.loading{background:linear-gradient(#fff,#fff) padding-box padding-box,linear-gradient(135deg,#4285f4 0%,#06f 25%,#7b02c5 50%,#ea4335 75%,#ff7043 100%) border-box;border:1px solid #0000}.prompt-input-wrapper .main-side-console-input.loading:before{content:"";-webkit-mask-composite:xor;pointer-events:none;z-index:-1;-webkit-mask-composite:xor;-webkit-mask-source-type:auto,auto;-webkit-mask-composite:xor;-webkit-mask-source-type:auto,auto;background:linear-gradient(135deg,#4285f4 0%,#06f 25%,#7b02c5 50%,#ea4335 75%,#ff7043 100%);border-radius:12px;padding:1px;animation:5s linear infinite hue-shift;position:absolute;top:-1px;bottom:-1px;left:-1px;right:-1px;-webkit-mask-image:linear-gradient(#fff 0 0),linear-gradient(#fff 0 0);-webkit-mask-position:0 0,0 0;-webkit-mask-size:auto,auto;-webkit-mask-repeat:repeat,repeat;-webkit-mask-clip:content-box,border-box;-webkit-mask-origin:content-box,border-box;-webkit-mask-composite:xor;mask-composite:exclude;-webkit-mask-source-type:auto,auto;mask-mode:match-source,match-source}.prompt-input-wrapper .main-side-console-input.disabled .form-controller-wrapper{background-color:#0000}.prompt-input-wrapper .ant-form-item-with-help+.form-controller-wrapper{bottom:14px}.prompt-input-wrapper .ant-input{padding-bottom:40px}.prompt-input-wrapper .form-controller-wrapper{box-sizing:border-box;z-index:1000;pointer-events:none;background-color:#0000;flex-direction:row;justify-content:flex-end;align-items:flex-end;gap:8px;width:calc(100% - 32px);height:56px;padding:12px 0;line-height:32px;transition:background-color .2s;display:flex;position:absolute;bottom:0;left:16px}.prompt-input-wrapper .form-controller-wrapper>*{pointer-events:auto}.prompt-input-wrapper .settings-wrapper{color:#777;flex-flow:wrap;gap:2px;display:flex}.prompt-input-wrapper .settings-wrapper.settings-wrapper-hover{color:#3b3b3b}.prompt-input-wrapper .structured-params-container{box-sizing:border-box;padding:16px 16px 56px;overflow:hidden}.prompt-input-wrapper .structured-params-container .structured-params{width:100%;min-width:0}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item{flex-direction:column;display:flex}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item .ant-form-item-label{text-align:left;flex-basis:auto;padding-bottom:4px}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item .ant-form-item-label>label{color:#000000d9;height:auto;font-size:12px;font-weight:500;line-height:1.5}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item .ant-form-item-label>label:after{color:#ff4d4f;font-family:SimSun,sans-serif;font-size:12px;line-height:1;display:inline-block}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item .ant-form-item-label>label:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))):after{margin-left:4px}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item .ant-form-item-label>label:not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))):after{margin-left:4px}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item .ant-form-item-label>label:not(:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))):after{margin-left:4px}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item .ant-form-item-label>label:not(:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))):after{margin-left:4px}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item .ant-form-item-label>label:not(:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi))):after{margin-left:4px}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item .ant-form-item-label>label:-webkit-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)):after{margin-right:4px}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item .ant-form-item-label>label:-moz-any(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)):after{margin-right:4px}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item .ant-form-item-label>label:is(:lang(ae),:lang(ar),:lang(arc),:lang(bcc),:lang(bqi),:lang(ckb),:lang(dv),:lang(fa),:lang(glk),:lang(he),:lang(ku),:lang(mzn),:lang(nqo),:lang(pnb),:lang(ps),:lang(sd),:lang(ug),:lang(ur),:lang(yi)):after{margin-right:4px}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item .ant-form-item-control{flex:1;margin-top:0}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item .ant-form-item-row{flex-direction:column}.prompt-input-wrapper .structured-params-container .structured-params .ant-form-item .ant-form-item-control-input{min-height:auto}.prompt-input-wrapper .structured-params-container .structured-params .ant-input,.prompt-input-wrapper .structured-params-container .structured-params .ant-input-number,.prompt-input-wrapper .structured-params-container .structured-params .ant-select{border:1px solid #e1e5e9;border-radius:6px;width:100%}.prompt-input-wrapper .structured-params-container .structured-params .ant-input:hover,.prompt-input-wrapper .structured-params-container .structured-params .ant-input-number:hover,.prompt-input-wrapper .structured-params-container .structured-params .ant-select:hover{border-color:#40a9ff}.prompt-input-wrapper .structured-params-container .structured-params textarea.ant-input{padding-bottom:5px}.prompt-input-wrapper .structured-params-container .structured-params .ant-input-number .ant-input-number-input{box-shadow:none;border:none}.prompt-input-wrapper .structured-params-container .structured-params .ant-input-number:hover .ant-input-number-input{box-shadow:none}.prompt-input-wrapper .structured-params-container .structured-params .ant-select{min-width:120px}.prompt-input-wrapper .structured-params-container .structured-params .ant-select .ant-select-selector{box-shadow:none;border:none}.prompt-input-wrapper .structured-params-container .structured-params .ant-select:hover .ant-select-selector,.prompt-input-wrapper .structured-params-container .structured-params .ant-select.ant-select-focused .ant-select-selector{box-shadow:none}.prompt-input-wrapper .structured-params-container .structured-params .ant-radio-group{width:100%}.prompt-input-wrapper .structured-params-container .structured-params .ant-radio-group .ant-radio-button-wrapper{border:1px solid #e1e5e9;border-radius:6px;height:32px;margin-right:4px;font-size:12px;line-height:30px}.prompt-input-wrapper .structured-params-container .structured-params .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{color:#fff;background-color:#2b83ff;border-color:#2b83ff}.selector-trigger{cursor:pointer;width:24px;height:24px;transition:all .2s}.selector-trigger .action-icon{color:#000000d9;font-size:14px;transition:all .2s}.selector-trigger .action-icon:hover{color:#2b83ff}.more-apis-dropdown .ant-dropdown-menu{scrollbar-width:thin;max-height:400px;overflow-y:auto}.more-apis-dropdown .ant-dropdown-menu::-webkit-scrollbar{width:6px}.more-apis-dropdown .ant-dropdown-menu::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.more-apis-dropdown .ant-dropdown-menu::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.more-apis-dropdown .ant-dropdown-menu::-webkit-scrollbar-thumb:hover{background:#a8a8a8}[data-theme=dark] .prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .ant-radio-button-wrapper{color:#f8fafd!important;background-color:#ffffff14!important}[data-theme=dark] .prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{color:#fff!important;background-color:#2b83ff!important;border-color:#2b83ff!important}[data-theme=dark] .prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .more-apis-button{color:#f8fafd!important;background-color:#ffffff14!important}[data-theme=dark] .prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .more-apis-button:hover{background-color:#ffffff1f!important}[data-theme=dark] .prompt-input-wrapper .mode-radio-group-wrapper .mode-radio-group .more-apis-button.selected-from-dropdown{color:#fff!important;background-color:#2b83ff!important}[data-theme=dark] .prompt-input-wrapper .mode-radio-group-wrapper .action-icons{background:linear-gradient(90deg,#0000 0%,#1f1f1f80 20%,#1f1f1fcc 40%,#1f1f1ff2 60%,#1f1f1f 70%)!important}[data-theme=dark] .prompt-input-wrapper .main-side-console-input{background:#1f1f1f!important;border-color:#ffffff1f!important}[data-theme=dark] .prompt-input-wrapper .main-side-console-input:focus-within{background:linear-gradient(#1f1f1f,#1f1f1f) padding-box padding-box,linear-gradient(135deg,#4285f4 0%,#06f 25%,#7b02c5 50%,#ea4335 75%,#ff7043 100%) border-box!important;border:1px solid #0000!important}[data-theme=dark] .prompt-input-wrapper .main-side-console-input .main-side-console-input-textarea{color:#f8fafd!important}[data-theme=dark] .prompt-input-wrapper .main-side-console-input.loading{background:linear-gradient(#1f1f1f,#1f1f1f) padding-box padding-box,linear-gradient(135deg,#4285f4 0%,#06f 25%,#7b02c5 50%,#ea4335 75%,#ff7043 100%) border-box!important;border:1px solid #0000!important}[data-theme=dark] .prompt-input-wrapper .ant-form-item-control-input-content .ant-input,[data-theme=dark] .prompt-input-wrapper .ant-form-item-control-input-content textarea.ant-input{color:#f8fafd!important;background:#ffffff0a!important;border-color:#ffffff1f!important}[data-theme=dark] .prompt-input-wrapper .ant-form-item-control-input-content .ant-btn{color:#f8fafd!important;background-color:#ffffff14!important;border-color:#ffffff1f!important}[data-theme=dark] .prompt-input-wrapper .ant-form-item-control-input-content .ant-btn.ant-btn-primary{color:#fff!important;background-color:#2b83ff!important;border-color:#2b83ff!important}[data-theme=dark] .prompt-input-wrapper .form-controller-wrapper{background-color:#0000!important}[data-theme=dark] .prompt-input-wrapper .structured-params-container{background:linear-gradient(#1f1f1f,#1f1f1f) padding-box padding-box,linear-gradient(135deg,#4285f4 0%,#06f 25%,#7b02c5 50%,#ea4335 75%,#ff7043 100%) border-box!important}[data-theme=dark] .prompt-input-wrapper .structured-params-container .structured-params .ant-form-item-label>label{color:#f8fafd!important}[data-theme=dark] .prompt-input-wrapper .structured-params-container .structured-params .ant-input,[data-theme=dark] .prompt-input-wrapper .structured-params-container .structured-params .ant-input-number,[data-theme=dark] .prompt-input-wrapper .structured-params-container .structured-params .ant-select,[data-theme=dark] .prompt-input-wrapper .structured-params-container .structured-params .ant-radio-group .ant-radio-button-wrapper{color:#f8fafd!important;background-color:#ffffff0a!important;border-color:#ffffff1f!important}[data-theme=dark] .prompt-input-wrapper .structured-params-container .structured-params .ant-radio-group .ant-radio-button-wrapper.ant-radio-button-wrapper-checked{color:#fff!important;background-color:#2b83ff!important;border-color:#2b83ff!important}[data-theme=dark] .prompt-input .tip-button{background-color:#ffffff14}[data-theme=dark] .prompt-input .tip-button.active{color:#fff;background-color:#2b83ff}[data-theme=dark] .prompt-input .prompt-textarea-wrapper{background-color:#ffffff0a}[data-theme=dark] .prompt-input .prompt-textarea-wrapper:hover,[data-theme=dark] .prompt-input .prompt-textarea-wrapper.focused{background-color:#ffffff14}[data-theme=dark] .prompt-input .btn-wrapper .btn-item{color:#fff;background-color:#2b83ff}[data-theme=dark] .prompt-input .btn-wrapper .btn-item:hover{background-color:#2b83ff}[data-theme=dark] .prompt-input .dropdown-content{background-color:#1f1f1f;border-color:#ffffff1f}[data-theme=dark] .prompt-input .param-label{color:#f8fafd}[data-theme=dark] .prompt-input .error-message{color:#ff4d4f}[data-theme=dark] .prompt-input .send-button-text{color:#2b83ff}[data-theme=dark] .more-apis-dropdown .ant-dropdown-menu::-webkit-scrollbar-track{background:#ffffff14}[data-theme=dark] .more-apis-dropdown .ant-dropdown-menu::-webkit-scrollbar-thumb{background:#fff3}[data-theme=dark] .more-apis-dropdown .ant-dropdown-menu::-webkit-scrollbar-thumb:hover{background:#ffffff4d}.history-selector-wrapper{position:relative}.history-modal-overlay{z-index:9999;background:#fff;border:1px solid #00000014;border-radius:12px;width:320px;height:400px;position:fixed;top:auto;bottom:20px;right:20px;box-shadow:0 8px 24px #0000001f}.history-modal-container{border-radius:12px;flex-direction:column;width:100%;height:100%;display:flex;overflow:hidden}.history-modal-container .history-modal-header{justify-content:space-between;align-items:center;height:48px;padding:0 25px;line-height:48px;display:flex}.history-modal-container .history-modal-header .close-button{justify-content:center;align-items:center;margin-right:-4px;padding:4px;display:flex}.history-modal-container .history-modal-header .close-button .anticon{color:#999;font-size:18px}.history-modal-container .history-modal-header .close-button:hover .anticon{color:#666}.history-modal-container .history-search-section{background:#fff;padding:16px 20px}.history-modal-container .history-search-section .search-input-wrapper{color:#00000040;align-items:center;gap:12px;display:flex}.history-modal-container .history-search-section .search-input-wrapper .search-input{background:#f1f2f3;border:none;border-radius:16px;flex:1;height:36px}.history-modal-container .history-search-section .search-input-wrapper .search-input .ant-input{box-shadow:none;background:0 0;border:none}.history-modal-container .history-search-section .search-input-wrapper .search-input:hover,.history-modal-container .history-search-section .search-input-wrapper .search-input:focus-within{background:#fff;border-color:#d9d9d9}.history-modal-container .history-search-section .search-input-wrapper .clear-button{color:#1890ff;height:auto;padding:0}.history-modal-container .history-search-section .search-input-wrapper .clear-button:hover{color:#40a9ff}.history-modal-container .history-content{flex:1;padding:0 25px 25px;overflow-y:auto}.history-modal-container .history-content .history-group{margin-bottom:10px}.history-modal-container .history-content .history-group .history-group-title{color:#00000073;height:40px;font-size:12px;font-weight:400;line-height:40px}.history-modal-container .history-content .history-group .history-item{cursor:pointer;color:#000000d9;white-space:nowrap;text-overflow:ellipsis;height:40px;font-size:14px;line-height:40px;overflow:hidden}.history-modal-container .history-content .history-group .history-item:hover{background:#f2f4f7;margin:0 -8px;padding:0 8px}.history-modal-container .history-content .no-results{text-align:center;color:#999;padding:40px 20px}[data-theme=dark] .history-selector .history-timestamp,[data-theme=dark] .history-selector .history-path{color:#ffffff73}[data-theme=dark] .history-selector .history-description{color:#f8fafd}[data-theme=dark] .history-selector .history-no-items{color:#ffffff73}[data-theme=dark] .history-selector .history-item:hover{background:#ffffff14}[data-theme=dark] .history-selector .history-item .history-clear-icon{border-color:#ffffff1f}[data-theme=dark] .history-selector .history-item .history-clear-icon:hover{border-color:#40a9ff}[data-theme=dark] .history-selector .history-load-more{color:#1890ff}[data-theme=dark] .history-selector .history-load-more:hover{color:#40a9ff}.screenshot-viewer{flex-direction:column;height:100%;display:flex}.screenshot-viewer.offline,.screenshot-viewer.loading,.screenshot-viewer.error{text-align:center;color:#666;justify-content:center;align-items:center}.screenshot-viewer.offline .screenshot-placeholder h3,.screenshot-viewer.loading .screenshot-placeholder h3,.screenshot-viewer.error .screenshot-placeholder h3{color:#1890ff;text-transform:capitalize;margin-bottom:12px;font-size:18px}.screenshot-viewer.offline .screenshot-placeholder p,.screenshot-viewer.loading .screenshot-placeholder p,.screenshot-viewer.error .screenshot-placeholder p{color:#666;margin:0}.screenshot-viewer.offline .screenshot-placeholder p.error-message,.screenshot-viewer.loading .screenshot-placeholder p.error-message,.screenshot-viewer.error .screenshot-placeholder p.error-message{color:#ff4d4f}.screenshot-viewer .screenshot-header{justify-content:space-between;align-items:center;height:56px;display:flex}.screenshot-viewer .screenshot-header .screenshot-title{flex-direction:column;gap:4px;display:flex}.screenshot-viewer .screenshot-header .screenshot-title h3{color:#000;text-transform:capitalize;align-items:center;gap:8px;margin:0;font-size:14px;font-weight:600;display:flex}.screenshot-viewer .screenshot-header .screenshot-title .screenshot-subtitle{color:#999;margin:0;font-size:12px}.screenshot-viewer .screenshot-container{background:#f2f4f7;border-radius:16px;flex-direction:column;flex:1;padding:0 15px;display:flex;overflow:hidden}.screenshot-viewer .screenshot-container .screenshot-overlay{z-index:10;justify-content:space-between;align-items:flex-start;padding:12px 5px 8px;display:flex}.screenshot-viewer .screenshot-container .screenshot-overlay .device-name-overlay{color:#000000d9;text-transform:capitalize;align-items:center;gap:8px;font-size:12px;font-weight:500;display:flex}.screenshot-viewer .screenshot-container .screenshot-overlay .device-name-overlay .info-icon{opacity:.8;cursor:pointer;font-size:12px}.screenshot-viewer .screenshot-container .screenshot-overlay .device-name-overlay .info-icon:hover{opacity:1}.screenshot-viewer .screenshot-container .screenshot-overlay .screenshot-controls{opacity:1;box-sizing:border-box;border-radius:4px;align-items:center;gap:10px;height:18px;padding:4px 8px;display:flex}.screenshot-viewer .screenshot-container .screenshot-overlay .screenshot-controls .last-update-time{color:#666;white-space:nowrap;text-overflow:ellipsis;font-size:12px;overflow:hidden}.screenshot-viewer .screenshot-container .screenshot-overlay .screenshot-controls .operation-indicator{align-items:center;gap:4px;font-size:12px;display:flex}.screenshot-viewer .screenshot-container .screenshot-overlay .screenshot-controls .ant-btn{box-shadow:none;background:0 0;border:none;justify-content:center;align-items:center;width:16px;min-width:16px;height:16px;padding:0;display:flex}.screenshot-viewer .screenshot-container .screenshot-overlay .screenshot-controls .ant-btn:hover{background-color:#0000000f;border-radius:2px;transition:all .2s;transform:scale(1.1)}.screenshot-viewer .screenshot-container .screenshot-overlay .screenshot-controls .ant-btn .anticon{color:#666;font-size:12px;transition:color .2s}.screenshot-viewer .screenshot-container .screenshot-content{flex:1;justify-content:center;align-items:center;min-height:0;display:flex}.screenshot-viewer .screenshot-container .screenshot-content .screenshot-image{object-fit:contain;border-radius:12px;max-width:100%;height:auto;max-height:100%}.screenshot-viewer .screenshot-container .screenshot-content .screenshot-placeholder{text-align:center;color:#999}[data-theme=dark] .screenshot-viewer.offline,[data-theme=dark] .screenshot-viewer.loading,[data-theme=dark] .screenshot-viewer.error{color:#f8fafd}[data-theme=dark] .screenshot-viewer.offline .screenshot-placeholder h3,[data-theme=dark] .screenshot-viewer.loading .screenshot-placeholder h3,[data-theme=dark] .screenshot-viewer.error .screenshot-placeholder h3{color:#1890ff}[data-theme=dark] .screenshot-viewer.offline .screenshot-placeholder p,[data-theme=dark] .screenshot-viewer.loading .screenshot-placeholder p,[data-theme=dark] .screenshot-viewer.error .screenshot-placeholder p{color:#f8fafd}[data-theme=dark] .screenshot-viewer.offline .screenshot-placeholder p.error-message,[data-theme=dark] .screenshot-viewer.loading .screenshot-placeholder p.error-message,[data-theme=dark] .screenshot-viewer.error .screenshot-placeholder p.error-message{color:#ff4d4f}[data-theme=dark] .screenshot-viewer .screenshot-header .screenshot-title h3{color:#f8fafd}[data-theme=dark] .screenshot-viewer .screenshot-header .screenshot-title .screenshot-subtitle{color:#ffffff73}[data-theme=dark] .screenshot-viewer .screenshot-container{background:#141414}[data-theme=dark] .screenshot-viewer .screenshot-container .screenshot-overlay .device-name-overlay,[data-theme=dark] .screenshot-viewer .screenshot-container .screenshot-overlay .screenshot-controls .last-update-time{color:#f8fafd}[data-theme=dark] .screenshot-viewer .screenshot-container .screenshot-overlay .screenshot-controls .ant-btn:hover{background-color:#ffffff14}[data-theme=dark] .screenshot-viewer .screenshot-container .screenshot-overlay .screenshot-controls .ant-btn .anticon{color:#f8fafd}[data-theme=dark] .screenshot-viewer .screenshot-container .screenshot-content .screenshot-placeholder{color:#ffffff73}body{margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Noto Sans,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji;font-size:14px}h3{text-transform:capitalize}.app-container{background-color:#f5f5f5;flex-direction:column;width:100%;height:100vh;display:flex}.app-content{height:100vh;overflow:hidden}.app-panel{background-color:#fff;border-radius:0;height:100%;transition:box-shadow .3s;overflow:hidden;box-shadow:0 1px 2px #0000000d}.app-panel:hover{box-shadow:0 2px 8px #00000017}.app-panel.left-panel{flex-direction:column;height:100%;display:flex;overflow:hidden}.app-panel.right-panel{border-radius:0;flex:1;overflow:hidden;box-shadow:-4px 0 20px #0000000a}.panel-content{flex-direction:column;height:100%;display:flex;overflow:auto}.panel-content.left-panel-content{flex-direction:column;height:100%;display:flex;overflow:hidden}.panel-content.left-panel-content .playground-panel-header{border-bottom:1px solid #0000000f;flex-shrink:0;align-items:center;height:60px;padding:0 24px;display:flex}.panel-content.left-panel-content .playground-panel-header .header-row{justify-content:space-between;align-items:center;gap:10px;width:100%;display:flex}.panel-content.left-panel-content .playground-panel-playground{flex-direction:column;flex:1;min-height:0;padding:0 24px;display:flex}.panel-content.left-panel-content .playground-panel-playground .playground-container{background:#fff;border:none;border-radius:8px;flex:1;overflow:hidden}.panel-content.right-panel-content{border-radius:0;padding:0 24px 24px;overflow:hidden}.server-offline-container{background:#f5f5f5;justify-content:center;align-items:center;height:100vh;display:flex}.server-offline-container .server-offline-message{background:#f2f4f7;border-radius:8px;flex-direction:column;width:100%;height:100%;padding:14px 24px 0;display:flex;box-shadow:0 2px 8px #0000000f}.server-offline-container .server-offline-message .server-offline-content{text-align:center;flex-direction:column;flex:1;justify-content:flex-start;align-items:center;padding-top:20vh;display:flex}.server-offline-container .server-offline-message .server-offline-icon{width:300px;height:212px;display:inline-block;position:relative}.server-offline-container .server-offline-message .server-offline-icon .icon-background,.server-offline-container .server-offline-message .server-offline-icon .icon-foreground{display:block;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.server-offline-container .server-offline-message .server-offline-icon .icon-background{z-index:1;width:300px;height:212px}.server-offline-container .server-offline-message .server-offline-icon .icon-foreground{z-index:2;width:134px;height:101px}.server-offline-container .server-offline-message h1{color:#000;margin:0;font-size:18px;font-weight:600}.server-offline-container .server-offline-message .connection-status{text-align:center;margin-top:8px;font-size:12px}.panel-resize-handle{background-color:#f0f0f0;transition:background-color .2s;position:relative}.panel-resize-handle.horizontal{cursor:col-resize;width:1px}.panel-resize-handle.vertical{cursor:row-resize;height:1px}.panel-resize-handle:hover,.panel-resize-handle:active,.panel-resize-handle[data-resize-handle-active]{background-color:#1677ff}.clear-button-container{top:20px!important;right:-4px!important}
|
|
2
|
+
/*# sourceMappingURL=index.3b624810.css.map*/
|