@midscene/android 1.5.4-beta-20260310084708.0 → 1.5.4

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 CHANGED
@@ -706,6 +706,12 @@ class AndroidDevice {
706
706
  ]).default('replace').optional().describe('Input mode: "replace" (default) - clear the field and input the value; "typeOnly" - type the value directly without clearing the field first; "clear" - clear the field without inputting new text.')),
707
707
  locate: getMidsceneLocationSchema().describe('The input field to be filled').optional()
708
708
  }),
709
+ sample: {
710
+ value: 'test@example.com',
711
+ locate: {
712
+ prompt: 'the email input field'
713
+ }
714
+ },
709
715
  call: async (param)=>{
710
716
  const element = param.locate;
711
717
  if ('typeOnly' !== param.mode) await this.clearInput(element);
@@ -773,6 +779,11 @@ class AndroidDevice {
773
779
  duration: z.number().optional().describe('The duration of the long press in milliseconds'),
774
780
  locate: getMidsceneLocationSchema().describe('The element to be long pressed')
775
781
  }),
782
+ sample: {
783
+ locate: {
784
+ prompt: 'the message bubble'
785
+ }
786
+ },
776
787
  call: async (param)=>{
777
788
  const element = param.locate;
778
789
  if (!element) throw new Error('LongPress requires an element to be located');
@@ -792,6 +803,12 @@ class AndroidDevice {
792
803
  duration: z.number().optional().describe('The duration of the pull (in milliseconds)'),
793
804
  locate: getMidsceneLocationSchema().optional().describe('The element to start the pull from (optional)')
794
805
  }),
806
+ sample: {
807
+ direction: 'down',
808
+ locate: {
809
+ prompt: 'the center of the content list area'
810
+ }
811
+ },
795
812
  call: async (param)=>{
796
813
  const element = param.locate;
797
814
  const startPoint = element ? {
@@ -1726,6 +1743,9 @@ const createPlatformActions = (device)=>({
1726
1743
  description: 'Execute ADB shell command on Android device',
1727
1744
  interfaceAlias: 'runAdbShell',
1728
1745
  paramSchema: runAdbShellParamSchema,
1746
+ sample: {
1747
+ command: 'dumpsys window displays | grep -E "mCurrentFocus"'
1748
+ },
1729
1749
  call: async (param)=>{
1730
1750
  if (!param.command || '' === param.command.trim()) throw new Error('RunAdbShell requires a non-empty command parameter');
1731
1751
  const adb = await device.getAdb();
@@ -1737,6 +1757,9 @@ const createPlatformActions = (device)=>({
1737
1757
  description: 'Launch an Android app or URL',
1738
1758
  interfaceAlias: 'launch',
1739
1759
  paramSchema: launchParamSchema,
1760
+ sample: {
1761
+ uri: 'com.example.app'
1762
+ },
1740
1763
  call: async (param)=>{
1741
1764
  if (!param.uri || '' === param.uri.trim()) throw new Error('Launch requires a non-empty uri parameter');
1742
1765
  await device.launch(param.uri);
@@ -1885,7 +1908,7 @@ class AndroidMidsceneTools extends BaseMidsceneTools {
1885
1908
  const tools = new AndroidMidsceneTools();
1886
1909
  runToolsCLI(tools, 'midscene-android', {
1887
1910
  stripPrefix: 'android_',
1888
- version: "1.5.4-beta-20260310084708.0"
1911
+ version: "1.5.4"
1889
1912
  }).catch((e)=>{
1890
1913
  if (!(e instanceof CLIError)) console.error(e);
1891
1914
  process.exit(e instanceof CLIError ? e.exitCode : 1);
package/dist/es/index.mjs CHANGED
@@ -609,6 +609,12 @@ class AndroidDevice {
609
609
  ]).default('replace').optional().describe('Input mode: "replace" (default) - clear the field and input the value; "typeOnly" - type the value directly without clearing the field first; "clear" - clear the field without inputting new text.')),
610
610
  locate: getMidsceneLocationSchema().describe('The input field to be filled').optional()
611
611
  }),
612
+ sample: {
613
+ value: 'test@example.com',
614
+ locate: {
615
+ prompt: 'the email input field'
616
+ }
617
+ },
612
618
  call: async (param)=>{
613
619
  const element = param.locate;
614
620
  if ('typeOnly' !== param.mode) await this.clearInput(element);
@@ -676,6 +682,11 @@ class AndroidDevice {
676
682
  duration: z.number().optional().describe('The duration of the long press in milliseconds'),
677
683
  locate: getMidsceneLocationSchema().describe('The element to be long pressed')
678
684
  }),
685
+ sample: {
686
+ locate: {
687
+ prompt: 'the message bubble'
688
+ }
689
+ },
679
690
  call: async (param)=>{
680
691
  const element = param.locate;
681
692
  if (!element) throw new Error('LongPress requires an element to be located');
@@ -695,6 +706,12 @@ class AndroidDevice {
695
706
  duration: z.number().optional().describe('The duration of the pull (in milliseconds)'),
696
707
  locate: getMidsceneLocationSchema().optional().describe('The element to start the pull from (optional)')
697
708
  }),
709
+ sample: {
710
+ direction: 'down',
711
+ locate: {
712
+ prompt: 'the center of the content list area'
713
+ }
714
+ },
698
715
  call: async (param)=>{
699
716
  const element = param.locate;
700
717
  const startPoint = element ? {
@@ -1629,6 +1646,9 @@ const createPlatformActions = (device)=>({
1629
1646
  description: 'Execute ADB shell command on Android device',
1630
1647
  interfaceAlias: 'runAdbShell',
1631
1648
  paramSchema: runAdbShellParamSchema,
1649
+ sample: {
1650
+ command: 'dumpsys window displays | grep -E "mCurrentFocus"'
1651
+ },
1632
1652
  call: async (param)=>{
1633
1653
  if (!param.command || '' === param.command.trim()) throw new Error('RunAdbShell requires a non-empty command parameter');
1634
1654
  const adb = await device.getAdb();
@@ -1640,6 +1660,9 @@ const createPlatformActions = (device)=>({
1640
1660
  description: 'Launch an Android app or URL',
1641
1661
  interfaceAlias: 'launch',
1642
1662
  paramSchema: launchParamSchema,
1663
+ sample: {
1664
+ uri: 'com.example.app'
1665
+ },
1643
1666
  call: async (param)=>{
1644
1667
  if (!param.uri || '' === param.uri.trim()) throw new Error('Launch requires a non-empty uri parameter');
1645
1668
  await device.launch(param.uri);
@@ -705,6 +705,12 @@ class AndroidDevice {
705
705
  ]).default('replace').optional().describe('Input mode: "replace" (default) - clear the field and input the value; "typeOnly" - type the value directly without clearing the field first; "clear" - clear the field without inputting new text.')),
706
706
  locate: getMidsceneLocationSchema().describe('The input field to be filled').optional()
707
707
  }),
708
+ sample: {
709
+ value: 'test@example.com',
710
+ locate: {
711
+ prompt: 'the email input field'
712
+ }
713
+ },
708
714
  call: async (param)=>{
709
715
  const element = param.locate;
710
716
  if ('typeOnly' !== param.mode) await this.clearInput(element);
@@ -772,6 +778,11 @@ class AndroidDevice {
772
778
  duration: z.number().optional().describe('The duration of the long press in milliseconds'),
773
779
  locate: getMidsceneLocationSchema().describe('The element to be long pressed')
774
780
  }),
781
+ sample: {
782
+ locate: {
783
+ prompt: 'the message bubble'
784
+ }
785
+ },
775
786
  call: async (param)=>{
776
787
  const element = param.locate;
777
788
  if (!element) throw new Error('LongPress requires an element to be located');
@@ -791,6 +802,12 @@ class AndroidDevice {
791
802
  duration: z.number().optional().describe('The duration of the pull (in milliseconds)'),
792
803
  locate: getMidsceneLocationSchema().optional().describe('The element to start the pull from (optional)')
793
804
  }),
805
+ sample: {
806
+ direction: 'down',
807
+ locate: {
808
+ prompt: 'the center of the content list area'
809
+ }
810
+ },
794
811
  call: async (param)=>{
795
812
  const element = param.locate;
796
813
  const startPoint = element ? {
@@ -1725,6 +1742,9 @@ const createPlatformActions = (device)=>({
1725
1742
  description: 'Execute ADB shell command on Android device',
1726
1743
  interfaceAlias: 'runAdbShell',
1727
1744
  paramSchema: runAdbShellParamSchema,
1745
+ sample: {
1746
+ command: 'dumpsys window displays | grep -E "mCurrentFocus"'
1747
+ },
1728
1748
  call: async (param)=>{
1729
1749
  if (!param.command || '' === param.command.trim()) throw new Error('RunAdbShell requires a non-empty command parameter');
1730
1750
  const adb = await device.getAdb();
@@ -1736,6 +1756,9 @@ const createPlatformActions = (device)=>({
1736
1756
  description: 'Launch an Android app or URL',
1737
1757
  interfaceAlias: 'launch',
1738
1758
  paramSchema: launchParamSchema,
1759
+ sample: {
1760
+ uri: 'com.example.app'
1761
+ },
1739
1762
  call: async (param)=>{
1740
1763
  if (!param.uri || '' === param.uri.trim()) throw new Error('Launch requires a non-empty uri parameter');
1741
1764
  await device.launch(param.uri);
@@ -1888,7 +1911,7 @@ class AndroidMCPServer extends BaseMCPServer {
1888
1911
  constructor(toolsManager){
1889
1912
  super({
1890
1913
  name: '@midscene/android-mcp',
1891
- version: "1.5.4-beta-20260310084708.0",
1914
+ version: "1.5.4",
1892
1915
  description: 'Control the Android device using natural language commands'
1893
1916
  }, toolsManager);
1894
1917
  }
package/dist/lib/cli.js CHANGED
@@ -721,6 +721,12 @@ var __webpack_exports__ = {};
721
721
  ]).default('replace').optional().describe('Input mode: "replace" (default) - clear the field and input the value; "typeOnly" - type the value directly without clearing the field first; "clear" - clear the field without inputting new text.')),
722
722
  locate: (0, core_namespaceObject.getMidsceneLocationSchema)().describe('The input field to be filled').optional()
723
723
  }),
724
+ sample: {
725
+ value: 'test@example.com',
726
+ locate: {
727
+ prompt: 'the email input field'
728
+ }
729
+ },
724
730
  call: async (param)=>{
725
731
  const element = param.locate;
726
732
  if ('typeOnly' !== param.mode) await this.clearInput(element);
@@ -788,6 +794,11 @@ var __webpack_exports__ = {};
788
794
  duration: core_namespaceObject.z.number().optional().describe('The duration of the long press in milliseconds'),
789
795
  locate: (0, core_namespaceObject.getMidsceneLocationSchema)().describe('The element to be long pressed')
790
796
  }),
797
+ sample: {
798
+ locate: {
799
+ prompt: 'the message bubble'
800
+ }
801
+ },
791
802
  call: async (param)=>{
792
803
  const element = param.locate;
793
804
  if (!element) throw new Error('LongPress requires an element to be located');
@@ -807,6 +818,12 @@ var __webpack_exports__ = {};
807
818
  duration: core_namespaceObject.z.number().optional().describe('The duration of the pull (in milliseconds)'),
808
819
  locate: (0, core_namespaceObject.getMidsceneLocationSchema)().optional().describe('The element to start the pull from (optional)')
809
820
  }),
821
+ sample: {
822
+ direction: 'down',
823
+ locate: {
824
+ prompt: 'the center of the content list area'
825
+ }
826
+ },
810
827
  call: async (param)=>{
811
828
  const element = param.locate;
812
829
  const startPoint = element ? {
@@ -1741,6 +1758,9 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
1741
1758
  description: 'Execute ADB shell command on Android device',
1742
1759
  interfaceAlias: 'runAdbShell',
1743
1760
  paramSchema: runAdbShellParamSchema,
1761
+ sample: {
1762
+ command: 'dumpsys window displays | grep -E "mCurrentFocus"'
1763
+ },
1744
1764
  call: async (param)=>{
1745
1765
  if (!param.command || '' === param.command.trim()) throw new Error('RunAdbShell requires a non-empty command parameter');
1746
1766
  const adb = await device.getAdb();
@@ -1752,6 +1772,9 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
1752
1772
  description: 'Launch an Android app or URL',
1753
1773
  interfaceAlias: 'launch',
1754
1774
  paramSchema: launchParamSchema,
1775
+ sample: {
1776
+ uri: 'com.example.app'
1777
+ },
1755
1778
  call: async (param)=>{
1756
1779
  if (!param.uri || '' === param.uri.trim()) throw new Error('Launch requires a non-empty uri parameter');
1757
1780
  await device.launch(param.uri);
@@ -1900,7 +1923,7 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
1900
1923
  const tools = new AndroidMidsceneTools();
1901
1924
  (0, cli_namespaceObject.runToolsCLI)(tools, 'midscene-android', {
1902
1925
  stripPrefix: 'android_',
1903
- version: "1.5.4-beta-20260310084708.0"
1926
+ version: "1.5.4"
1904
1927
  }).catch((e)=>{
1905
1928
  if (!(e instanceof cli_namespaceObject.CLIError)) console.error(e);
1906
1929
  process.exit(e instanceof cli_namespaceObject.CLIError ? e.exitCode : 1);
package/dist/lib/index.js CHANGED
@@ -642,6 +642,12 @@ var __webpack_exports__ = {};
642
642
  ]).default('replace').optional().describe('Input mode: "replace" (default) - clear the field and input the value; "typeOnly" - type the value directly without clearing the field first; "clear" - clear the field without inputting new text.')),
643
643
  locate: (0, core_namespaceObject.getMidsceneLocationSchema)().describe('The input field to be filled').optional()
644
644
  }),
645
+ sample: {
646
+ value: 'test@example.com',
647
+ locate: {
648
+ prompt: 'the email input field'
649
+ }
650
+ },
645
651
  call: async (param)=>{
646
652
  const element = param.locate;
647
653
  if ('typeOnly' !== param.mode) await this.clearInput(element);
@@ -709,6 +715,11 @@ var __webpack_exports__ = {};
709
715
  duration: core_namespaceObject.z.number().optional().describe('The duration of the long press in milliseconds'),
710
716
  locate: (0, core_namespaceObject.getMidsceneLocationSchema)().describe('The element to be long pressed')
711
717
  }),
718
+ sample: {
719
+ locate: {
720
+ prompt: 'the message bubble'
721
+ }
722
+ },
712
723
  call: async (param)=>{
713
724
  const element = param.locate;
714
725
  if (!element) throw new Error('LongPress requires an element to be located');
@@ -728,6 +739,12 @@ var __webpack_exports__ = {};
728
739
  duration: core_namespaceObject.z.number().optional().describe('The duration of the pull (in milliseconds)'),
729
740
  locate: (0, core_namespaceObject.getMidsceneLocationSchema)().optional().describe('The element to start the pull from (optional)')
730
741
  }),
742
+ sample: {
743
+ direction: 'down',
744
+ locate: {
745
+ prompt: 'the center of the content list area'
746
+ }
747
+ },
731
748
  call: async (param)=>{
732
749
  const element = param.locate;
733
750
  const startPoint = element ? {
@@ -1662,6 +1679,9 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
1662
1679
  description: 'Execute ADB shell command on Android device',
1663
1680
  interfaceAlias: 'runAdbShell',
1664
1681
  paramSchema: runAdbShellParamSchema,
1682
+ sample: {
1683
+ command: 'dumpsys window displays | grep -E "mCurrentFocus"'
1684
+ },
1665
1685
  call: async (param)=>{
1666
1686
  if (!param.command || '' === param.command.trim()) throw new Error('RunAdbShell requires a non-empty command parameter');
1667
1687
  const adb = await device.getAdb();
@@ -1673,6 +1693,9 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
1673
1693
  description: 'Launch an Android app or URL',
1674
1694
  interfaceAlias: 'launch',
1675
1695
  paramSchema: launchParamSchema,
1696
+ sample: {
1697
+ uri: 'com.example.app'
1698
+ },
1676
1699
  call: async (param)=>{
1677
1700
  if (!param.uri || '' === param.uri.trim()) throw new Error('Launch requires a non-empty uri parameter');
1678
1701
  await device.launch(param.uri);
@@ -736,6 +736,12 @@ var __webpack_exports__ = {};
736
736
  ]).default('replace').optional().describe('Input mode: "replace" (default) - clear the field and input the value; "typeOnly" - type the value directly without clearing the field first; "clear" - clear the field without inputting new text.')),
737
737
  locate: (0, core_namespaceObject.getMidsceneLocationSchema)().describe('The input field to be filled').optional()
738
738
  }),
739
+ sample: {
740
+ value: 'test@example.com',
741
+ locate: {
742
+ prompt: 'the email input field'
743
+ }
744
+ },
739
745
  call: async (param)=>{
740
746
  const element = param.locate;
741
747
  if ('typeOnly' !== param.mode) await this.clearInput(element);
@@ -803,6 +809,11 @@ var __webpack_exports__ = {};
803
809
  duration: core_namespaceObject.z.number().optional().describe('The duration of the long press in milliseconds'),
804
810
  locate: (0, core_namespaceObject.getMidsceneLocationSchema)().describe('The element to be long pressed')
805
811
  }),
812
+ sample: {
813
+ locate: {
814
+ prompt: 'the message bubble'
815
+ }
816
+ },
806
817
  call: async (param)=>{
807
818
  const element = param.locate;
808
819
  if (!element) throw new Error('LongPress requires an element to be located');
@@ -822,6 +833,12 @@ var __webpack_exports__ = {};
822
833
  duration: core_namespaceObject.z.number().optional().describe('The duration of the pull (in milliseconds)'),
823
834
  locate: (0, core_namespaceObject.getMidsceneLocationSchema)().optional().describe('The element to start the pull from (optional)')
824
835
  }),
836
+ sample: {
837
+ direction: 'down',
838
+ locate: {
839
+ prompt: 'the center of the content list area'
840
+ }
841
+ },
825
842
  call: async (param)=>{
826
843
  const element = param.locate;
827
844
  const startPoint = element ? {
@@ -1756,6 +1773,9 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
1756
1773
  description: 'Execute ADB shell command on Android device',
1757
1774
  interfaceAlias: 'runAdbShell',
1758
1775
  paramSchema: runAdbShellParamSchema,
1776
+ sample: {
1777
+ command: 'dumpsys window displays | grep -E "mCurrentFocus"'
1778
+ },
1759
1779
  call: async (param)=>{
1760
1780
  if (!param.command || '' === param.command.trim()) throw new Error('RunAdbShell requires a non-empty command parameter');
1761
1781
  const adb = await device.getAdb();
@@ -1767,6 +1787,9 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
1767
1787
  description: 'Launch an Android app or URL',
1768
1788
  interfaceAlias: 'launch',
1769
1789
  paramSchema: launchParamSchema,
1790
+ sample: {
1791
+ uri: 'com.example.app'
1792
+ },
1770
1793
  call: async (param)=>{
1771
1794
  if (!param.uri || '' === param.uri.trim()) throw new Error('Launch requires a non-empty uri parameter');
1772
1795
  await device.launch(param.uri);
@@ -1919,7 +1942,7 @@ ${Object.keys(size).filter((key)=>size[key]).map((key)=>` ${key} size: ${size[k
1919
1942
  constructor(toolsManager){
1920
1943
  super({
1921
1944
  name: '@midscene/android-mcp',
1922
- version: "1.5.4-beta-20260310084708.0",
1945
+ version: "1.5.4",
1923
1946
  description: 'Control the Android device using natural language commands'
1924
1947
  }, toolsManager);
1925
1948
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@midscene/android",
3
- "version": "1.5.4-beta-20260310084708.0",
3
+ "version": "1.5.4",
4
4
  "description": "Android automation library for Midscene",
5
5
  "keywords": [
6
6
  "Android UI automation",
@@ -41,8 +41,8 @@
41
41
  "@yume-chan/stream-extra": "^1.0.0",
42
42
  "appium-adb": "12.12.1",
43
43
  "sharp": "^0.34.3",
44
- "@midscene/core": "1.5.4-beta-20260310084708.0",
45
- "@midscene/shared": "1.5.4-beta-20260310084708.0"
44
+ "@midscene/core": "1.5.4",
45
+ "@midscene/shared": "1.5.4"
46
46
  },
47
47
  "optionalDependencies": {
48
48
  "@ffmpeg-installer/ffmpeg": "^1.1.0"
@@ -56,7 +56,7 @@
56
56
  "tsx": "^4.19.2",
57
57
  "vitest": "3.0.5",
58
58
  "zod": "3.24.3",
59
- "@midscene/playground": "1.5.4-beta-20260310084708.0"
59
+ "@midscene/playground": "1.5.4"
60
60
  },
61
61
  "license": "MIT",
62
62
  "scripts": {