appium-desktop-driver 1.7.2 → 1.8.0-preview.1

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.
Files changed (111) hide show
  1. package/CHANGELOG.md +256 -0
  2. package/README.md +129 -2
  3. package/build/lib/commands/actions.d.ts +5 -3
  4. package/build/lib/commands/actions.d.ts.map +1 -1
  5. package/build/lib/commands/actions.js +83 -91
  6. package/build/lib/commands/actions.js.map +1 -1
  7. package/build/lib/commands/app.d.ts +53 -1
  8. package/build/lib/commands/app.d.ts.map +1 -1
  9. package/build/lib/commands/app.js +415 -147
  10. package/build/lib/commands/app.js.map +1 -1
  11. package/build/lib/commands/contexts.d.ts +64 -0
  12. package/build/lib/commands/contexts.d.ts.map +1 -0
  13. package/build/lib/commands/contexts.js +166 -0
  14. package/build/lib/commands/contexts.js.map +1 -0
  15. package/build/lib/commands/device.d.ts +0 -8
  16. package/build/lib/commands/device.d.ts.map +1 -1
  17. package/build/lib/commands/device.js +4 -229
  18. package/build/lib/commands/device.js.map +1 -1
  19. package/build/lib/commands/element.d.ts +0 -3
  20. package/build/lib/commands/element.d.ts.map +1 -1
  21. package/build/lib/commands/element.js +102 -53
  22. package/build/lib/commands/element.js.map +1 -1
  23. package/build/lib/commands/extension.d.ts +2 -0
  24. package/build/lib/commands/extension.d.ts.map +1 -1
  25. package/build/lib/commands/extension.js +111 -184
  26. package/build/lib/commands/extension.js.map +1 -1
  27. package/build/lib/commands/index.d.ts +28 -17
  28. package/build/lib/commands/index.d.ts.map +1 -1
  29. package/build/lib/commands/index.js +4 -2
  30. package/build/lib/commands/index.js.map +1 -1
  31. package/build/lib/commands/screen-recorder.d.ts +3 -3
  32. package/build/lib/commands/screen-recorder.d.ts.map +1 -1
  33. package/build/lib/commands/screen-recorder.js +33 -24
  34. package/build/lib/commands/screen-recorder.js.map +1 -1
  35. package/build/lib/commands/server-session.d.ts +9 -0
  36. package/build/lib/commands/server-session.d.ts.map +1 -0
  37. package/build/lib/commands/server-session.js +158 -0
  38. package/build/lib/commands/server-session.js.map +1 -0
  39. package/build/lib/constraints.d.ts +29 -7
  40. package/build/lib/constraints.d.ts.map +1 -1
  41. package/build/lib/constraints.js +28 -6
  42. package/build/lib/constraints.js.map +1 -1
  43. package/build/lib/driver.d.ts +22 -13
  44. package/build/lib/driver.d.ts.map +1 -1
  45. package/build/lib/driver.js +135 -49
  46. package/build/lib/driver.js.map +1 -1
  47. package/build/lib/log-file.d.ts +10 -0
  48. package/build/lib/log-file.d.ts.map +1 -0
  49. package/build/lib/log-file.js +86 -0
  50. package/build/lib/log-file.js.map +1 -0
  51. package/build/lib/mcp/tools/context.d.ts +4 -0
  52. package/build/lib/mcp/tools/context.d.ts.map +1 -0
  53. package/build/lib/mcp/tools/context.js +49 -0
  54. package/build/lib/mcp/tools/context.js.map +1 -0
  55. package/build/lib/mcp/tools/index.d.ts.map +1 -1
  56. package/build/lib/mcp/tools/index.js +2 -0
  57. package/build/lib/mcp/tools/index.js.map +1 -1
  58. package/build/lib/powershell/conditions.d.ts.map +1 -1
  59. package/build/lib/powershell/conditions.js +7 -0
  60. package/build/lib/powershell/conditions.js.map +1 -1
  61. package/build/lib/server/client.d.ts +15 -0
  62. package/build/lib/server/client.d.ts.map +1 -0
  63. package/build/lib/server/client.js +169 -0
  64. package/build/lib/server/client.js.map +1 -0
  65. package/build/lib/server/conditions.d.ts +13 -0
  66. package/build/lib/server/conditions.d.ts.map +1 -0
  67. package/build/lib/server/conditions.js +71 -0
  68. package/build/lib/server/conditions.js.map +1 -0
  69. package/build/lib/server/converter-bridge.d.ts +26 -0
  70. package/build/lib/server/converter-bridge.d.ts.map +1 -0
  71. package/build/lib/server/converter-bridge.js +171 -0
  72. package/build/lib/server/converter-bridge.js.map +1 -0
  73. package/build/lib/server/index.d.ts +5 -0
  74. package/build/lib/server/index.d.ts.map +1 -0
  75. package/build/lib/server/index.js +25 -0
  76. package/build/lib/server/index.js.map +1 -0
  77. package/build/lib/server/protocol.d.ts +40 -0
  78. package/build/lib/server/protocol.d.ts.map +1 -0
  79. package/build/lib/server/protocol.js +3 -0
  80. package/build/lib/server/protocol.js.map +1 -0
  81. package/build/lib/util.d.ts +11 -1
  82. package/build/lib/util.d.ts.map +1 -1
  83. package/build/lib/util.js +158 -7
  84. package/build/lib/util.js.map +1 -1
  85. package/build/lib/version.d.ts +2 -0
  86. package/build/lib/version.d.ts.map +1 -0
  87. package/build/lib/version.js +20 -0
  88. package/build/lib/version.js.map +1 -0
  89. package/build/lib/winapi/user32.d.ts +5 -6
  90. package/build/lib/winapi/user32.d.ts.map +1 -1
  91. package/build/lib/winapi/user32.js +131 -88
  92. package/build/lib/winapi/user32.js.map +1 -1
  93. package/build/lib/xpath/core.d.ts +10 -4
  94. package/build/lib/xpath/core.d.ts.map +1 -1
  95. package/build/lib/xpath/core.js +212 -224
  96. package/build/lib/xpath/core.js.map +1 -1
  97. package/build/lib/xpath/functions.d.ts +7 -2
  98. package/build/lib/xpath/functions.d.ts.map +1 -1
  99. package/build/lib/xpath/functions.js +49 -25
  100. package/build/lib/xpath/functions.js.map +1 -1
  101. package/package.json +18 -12
  102. package/scripts/postinstall.js +39 -0
  103. package/build/eslint.config.d.mts +0 -3
  104. package/build/eslint.config.d.mts.map +0 -1
  105. package/build/eslint.config.mjs +0 -22
  106. package/build/eslint.config.mjs.map +0 -1
  107. package/build/lib/commands/powershell.d.ts +0 -6
  108. package/build/lib/commands/powershell.d.ts.map +0 -1
  109. package/build/lib/commands/powershell.js +0 -202
  110. package/build/lib/commands/powershell.js.map +0 -1
  111. package/build/tsconfig.tsbuildinfo +0 -1
package/CHANGELOG.md ADDED
@@ -0,0 +1,256 @@
1
+ ## [1.8.0-preview.1](https://github.com/verisoft-ai/appium-desktop-driver/compare/v1.7.2-preview.1...v1.8.0-preview.1) (2026-06-07)
2
+
3
+ ### Features
4
+
5
+ * **jab:** add STA message-pump thread for Java Access Bridge ([4df8fe1](https://github.com/verisoft-ai/appium-desktop-driver/commit/4df8fe14911dc8d328349acca227537ef9b778e0))
6
+ * **javaswing:** first implementation ([2643e75](https://github.com/verisoft-ai/appium-desktop-driver/commit/2643e75012a74cdebfcc665f8f8c89b9ded4a5c2))
7
+
8
+ ## [1.7.2-preview.1](https://github.com/verisoft-ai/appium-desktop-driver/compare/v1.7.1...v1.7.2-preview.1) (2026-05-27)
9
+
10
+ ### Bug Fixes
11
+
12
+ * **webview:** Chrome CDP context switching and window attachment bugs ([8fafd5b](https://github.com/verisoft-ai/appium-desktop-driver/commit/8fafd5b8de7265b7cdb0a9455926f1e8a2948898))
13
+
14
+ ### Miscellaneous Chores
15
+
16
+ * trigger publish on develop ([2e0123f](https://github.com/verisoft-ai/appium-desktop-driver/commit/2e0123faf5de734874f62fe16280b4e86557d7ac))
17
+
18
+ ## [1.7.1](https://github.com/verisoft-ai/appium-desktop-driver/compare/v1.7.0...v1.7.1) (2026-05-23)
19
+
20
+ ### Miscellaneous Chores
21
+
22
+ * remove powershell insecure check - alway allow ([2225b79](https://github.com/verisoft-ai/appium-desktop-driver/commit/2225b79fc9972f0000ff6a3982b6f993506baca5))
23
+
24
+ ## [1.7.0](https://github.com/verisoft-ai/appium-desktop-driver/compare/v1.6.1...v1.7.0) (2026-05-04)
25
+
26
+ ### Features
27
+
28
+ * add analyze_screen mcp tool ([5c6b998](https://github.com/verisoft-ai/appium-desktop-driver/commit/5c6b998ebde79caa9f05261f252be3fcba847edd))
29
+ * lazy load mcp server ([16a1533](https://github.com/verisoft-ai/appium-desktop-driver/commit/16a15337daacf2a2088f9eb4ee548a5cb03dce71))
30
+
31
+ ### Bug Fixes
32
+
33
+ * remove last residuals of nova windows logs ([5b3627f](https://github.com/verisoft-ai/appium-desktop-driver/commit/5b3627fef8bb40d2cdb640f0956dfe5c254cfb57))
34
+
35
+ ## [1.6.1](https://github.com/verisoft-ai/appium-desktop-driver/compare/v1.6.0...v1.6.1) (2026-04-23)
36
+
37
+ ### Bug Fixes
38
+
39
+ * check amazon user and key ([4f45cf1](https://github.com/verisoft-ai/appium-desktop-driver/commit/4f45cf1ad1a16a6d2412902be1dcfd8a899b1493))
40
+ * **vision:** make model argument mandatory in find_by_vision and executeFindByVision ([2eee54c](https://github.com/verisoft-ai/appium-desktop-driver/commit/2eee54cfa7fec16975f7ad748fe3fa4462bc9709))
41
+
42
+ ## [1.6.0](https://github.com/verisoft-ai/appium-desktop-driver/compare/v1.5.1...v1.6.0) (2026-04-15)
43
+
44
+ ### Features
45
+
46
+ * **vision:** add extra llm support for vision command. ([4055904](https://github.com/verisoft-ai/appium-desktop-driver/commit/40559042ff5e730e84a155c925da71834c220dcd))
47
+
48
+ ### Bug Fixes
49
+
50
+ * **vision:** address multi-provider review findings ([9c8a8ff](https://github.com/verisoft-ai/appium-desktop-driver/commit/9c8a8ff366bff7b3d9a047d3e09298f044d62aaf))
51
+
52
+ ## [1.5.1](https://github.com/verisoft-ai/appium-desktop-driver/compare/v1.5.0...v1.5.1) (2026-04-13)
53
+
54
+ ### Bug Fixes
55
+
56
+ * **actions:** Action execution according to W3C definition. ([8c9019d](https://github.com/verisoft-ai/appium-desktop-driver/commit/8c9019dc39841ec7f61d8770042db72355975d5f))
57
+ * fix json element rect unexpected end error ([8d1498f](https://github.com/verisoft-ai/appium-desktop-driver/commit/8d1498f3dc667e017e3f8ed4d409ec60e3fea72a))
58
+ * fix release actions tracking pressed mouse buttons ([0309ab0](https://github.com/verisoft-ai/appium-desktop-driver/commit/0309ab0a06c33591bb1d36b23e2dcbdf688d1772))
59
+ * **mouse move:** fix silent fail calculating mouse move after scroll into view. ([9e755eb](https://github.com/verisoft-ai/appium-desktop-driver/commit/9e755eb8c5d1ee475d85a8630bab6b583b2a5a8d))
60
+ * **release key:** fix handle null key action not iterating over pressed keys ([db18fd8](https://github.com/verisoft-ai/appium-desktop-driver/commit/db18fd8b8884883dc241b2ce5ef104cde2bccf11))
61
+
62
+ ## [1.5.0](https://github.com/verisoft-ai/appium-desktop-driver/compare/v1.4.3...v1.5.0) (2026-04-04)
63
+
64
+ ### Features
65
+
66
+ * add new command 'windows: findByVision' ([26c69aa](https://github.com/verisoft-ai/appium-desktop-driver/commit/26c69aaeed15ff94f9f469b1594bd640772fcf51))
67
+ * **mcp:** add analyze_screen tool via agent loop ([0bcbf09](https://github.com/verisoft-ai/appium-desktop-driver/commit/0bcbf0952fbe267e1c2cdc4176dbb722e51cb591))
68
+
69
+ ### Bug Fixes
70
+
71
+ * account display scaling for precise pixel calculation in analyze_screenshot tool. ([611f345](https://github.com/verisoft-ai/appium-desktop-driver/commit/611f345c957de5361af0c06f0857352ab27ad5ed))
72
+ * coordinate mapping with offset calculation ([c68bb4e](https://github.com/verisoft-ai/appium-desktop-driver/commit/c68bb4e7c34b4d39b3472da5ec5f6b566f15cf57))
73
+ * correct stale error message in find_by_vision MCP tool ([c82e107](https://github.com/verisoft-ai/appium-desktop-driver/commit/c82e107f7e1b40297e84d34ca2f62ff7b117f669))
74
+ * fix mock path vision test ([39b9386](https://github.com/verisoft-ai/appium-desktop-driver/commit/39b9386c80ddcc7ab595317ace4b1f1b9384f519))
75
+ * ignore import/no-unresolved for @modelcontextprotocol/sdk subpaths ([688c68c](https://github.com/verisoft-ai/appium-desktop-driver/commit/688c68cdc6d7eb4bf3225dc29d01950b14f94e1d))
76
+
77
+ ### Code Refactoring
78
+
79
+ * **vision:** unify find_by_vision MCP tool and findByVision command ([276d86f](https://github.com/verisoft-ai/appium-desktop-driver/commit/276d86f68be5e501f4510617442968abcac4db87))
80
+
81
+ ## [1.4.3](https://github.com/verisoft-ai/appium-desktop-driver/compare/v1.4.2...v1.4.3) (2026-03-26)
82
+
83
+ ### Miscellaneous Chores
84
+
85
+ * update website hero and footer attribution [skip ci] ([3a67147](https://github.com/verisoft-ai/appium-desktop-driver/commit/3a67147f89bc5f5400092ee7bc4083c55708dc4a))
86
+
87
+ ### Code Refactoring
88
+
89
+ * rename driver class from NovaWindowsDriver to AppiumDesktopDriver ([8a1eb39](https://github.com/verisoft-ai/appium-desktop-driver/commit/8a1eb393f48c7ee2d9fc5a17d7f262fa7e8ae596))
90
+
91
+ ## [1.4.2](https://github.com/verisoft-ai/appium-desktop-driver/compare/v1.4.1...v1.4.2) (2026-03-24)
92
+
93
+ ### Bug Fixes
94
+
95
+ * lint ([9832a8e](https://github.com/verisoft-ai/appium-desktop-driver/commit/9832a8eaf025e96f619d4c1b342c3c0909dfb5fa))
96
+
97
+ ### Miscellaneous Chores
98
+
99
+ * **website:** create website with mcp and driver demos ([5e8e910](https://github.com/verisoft-ai/appium-desktop-driver/commit/5e8e910fc1e69de8a81ec18898b7f0dd28135af6))
100
+
101
+ ## [1.4.1](https://github.com/verisoft-ai/appium-desktop-driver/compare/v1.4.0...v1.4.1) (2026-03-23)
102
+
103
+ ### Bug Fixes
104
+
105
+ * **mcp:** change mcp naming to match new Desktop Driver convention ([e77a7b0](https://github.com/verisoft-ai/appium-desktop-driver/commit/e77a7b02d4ed8769d61697c96c239bb03e3aef61))
106
+
107
+ ## [1.4.0](https://github.com/verisoft-ai/appium-desktop-driver/compare/v1.3.1...v1.4.0) (2026-03-23)
108
+
109
+ ### Features
110
+
111
+ * **capability:** Add capabilities windowSwitchRetries and windowSwitchInterval ([a831b3a](https://github.com/verisoft-ai/appium-desktop-driver/commit/a831b3af5d8d531a41483f36391d631cd787c371))
112
+ * custom env variables capabilities ([6a98b5c](https://github.com/verisoft-ai/appium-desktop-driver/commit/6a98b5c76bdfecf1ef6a893ea9c37abdd5e47c33))
113
+ * **display:** add support for multi monitor testing ([1029aec](https://github.com/verisoft-ai/appium-desktop-driver/commit/1029aec97adb420e9525e1f325c64870dc51585c))
114
+ * Implemented missing commands ([4434b99](https://github.com/verisoft-ai/appium-desktop-driver/commit/4434b996fa33cd0214c7cd44073f34806cd1c99f))
115
+ * **mcp:** add MCP server with 39 tools and unit test suite ([cf3d464](https://github.com/verisoft-ai/appium-desktop-driver/commit/cf3d464d1b74efbdddb04aa16ff3a19e19564934))
116
+
117
+ ### Bug Fixes
118
+
119
+ * Add allowed tools to claude code reviewer ([c4c18e9](https://github.com/verisoft-ai/appium-desktop-driver/commit/c4c18e9f35915eb609e41572cb3c5ea15e3314a7))
120
+ * add tabbing ([c0cb0e8](https://github.com/verisoft-ai/appium-desktop-driver/commit/c0cb0e8bb4fb37c9f70b8e891c659c56142c1943))
121
+ * fix attaching to wrong application window ([8960843](https://github.com/verisoft-ai/appium-desktop-driver/commit/8960843d548c98728880c901b154215b6265b69e))
122
+ * fix code review comments ([d7bebd9](https://github.com/verisoft-ai/appium-desktop-driver/commit/d7bebd9ff1660fd065a92e7008344c3b1323bd27))
123
+ * **lint:** resolve lint errors ([5b72f12](https://github.com/verisoft-ai/appium-desktop-driver/commit/5b72f122472cdd4e563aa044b1baa2a52af7d10a))
124
+ * **mcp:** resolve bugs, add tool annotations, and new UIA tools ([fd73365](https://github.com/verisoft-ai/appium-desktop-driver/commit/fd7336552264a52ad2dda8c28bee2afcf44050a6))
125
+ * Remove claude code review workflow ([88f921d](https://github.com/verisoft-ai/appium-desktop-driver/commit/88f921d81ba9b81ff1578b2ac34c81d337670f30))
126
+ * Remove outerloops ([92eedfa](https://github.com/verisoft-ai/appium-desktop-driver/commit/92eedfa5decf6125c0f688da2d4c3bcf896491d5))
127
+ * replace NovaWindows automation name with DesktopDriver ([dd585b9](https://github.com/verisoft-ai/appium-desktop-driver/commit/dd585b9013fd5b128e10c42af86ca4e5f86f6934))
128
+ * **window:** narrow appProcessIds to the attached window's PID ([d281444](https://github.com/verisoft-ai/appium-desktop-driver/commit/d2814445ab5248483d451f1817fbff67d30d7654))
129
+ * **window:** track child processes spawned from launched apps. ([f1e6bff](https://github.com/verisoft-ai/appium-desktop-driver/commit/f1e6bfffe5bfcdebe884de207eabce8381c83a67))
130
+ * **window:** window handles access capability added ([eefb804](https://github.com/verisoft-ai/appium-desktop-driver/commit/eefb8040b2ec43795b4c985e42090dad2fa2e6ae))
131
+
132
+ ### Miscellaneous Chores
133
+
134
+ * bump version to 1.1.0 ([393bdae](https://github.com/verisoft-ai/appium-desktop-driver/commit/393bdaeaa0070385a15a61affe88c059c8967c6a))
135
+ * bump version to 1.2.0 ([94a4f04](https://github.com/verisoft-ai/appium-desktop-driver/commit/94a4f046be53c3b804497ad4e1d2782860e25070))
136
+ * **claude:** Add constraints and context for claude code review ([e95c6b2](https://github.com/verisoft-ai/appium-desktop-driver/commit/e95c6b219f436dd030f4e7dd840713e651af9cb4))
137
+ * **claude:** change constraints for claude code review ([3acee1c](https://github.com/verisoft-ai/appium-desktop-driver/commit/3acee1c1565b575e84f3b087aff6085b6b524229))
138
+ * **npm:** Ignore build artifacts and local mcp/claude config ([c9d3529](https://github.com/verisoft-ai/appium-desktop-driver/commit/c9d3529cf1c259d36eaf82e64702fdd080463195))
139
+ * prepare package for verisoft npm distribution ([5b35ff7](https://github.com/verisoft-ai/appium-desktop-driver/commit/5b35ff722d8254f24fea2bfe5112f4e0bddfc1e7))
140
+ * **release:** bump version and re-added the auto release workflow ([8555903](https://github.com/verisoft-ai/appium-desktop-driver/commit/8555903c4b3038d11fe24c038ef83964f71a1710))
141
+ * remove auto publish on push to main ([e940fd1](https://github.com/verisoft-ai/appium-desktop-driver/commit/e940fd1e4f20a505ea81dd668b4240abd2053d7f))
142
+
143
+ ### Code Refactoring
144
+
145
+ * **mcp:** remove auto-start, require Appium to be running externally ([8b76810](https://github.com/verisoft-ai/appium-desktop-driver/commit/8b76810041db68c960b3448173a8adca52679390))
146
+
147
+ ## [1.3.1](https://github.com/AutomateThePlanet/appium-novawindows-driver/compare/v1.3.0...v1.3.1) (2026-03-09)
148
+
149
+ ### Bug Fixes
150
+
151
+ * add stderr encoding for PowerShell session ([a233063](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/a233063b4509e41c047fcc3603b29b944c5ac374))
152
+ * fixed incorrect $pattern variable reference ([a0afceb](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/a0afceb7e682219b5e82759c52e20c59bff1225f))
153
+ * fixed not being able to attach to slow-starting classic apps on session creation ([f25b000](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/f25b000533be1ef2a7c0bc350bf62a3cd1b60a45))
154
+
155
+ ## [1.3.0](https://github.com/AutomateThePlanet/appium-novawindows-driver/compare/v1.2.0...v1.3.0) (2026-03-06)
156
+
157
+ ### Features
158
+
159
+ * **commands:** add extra W3C commands ([57c654a](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/57c654a1e1e43c8a5d31ed8103aba338883efaa9))
160
+ * **commands:** add support for close app and launch app ([26db919](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/26db919c17ce74ff3c5ef2776544affecb32e2fc))
161
+ * **commands:** implement waitForAppLaunch and forceQuit ([6cce956](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/6cce9565ce51b9f0e354b14819f41a6fc39ffc50))
162
+ * **tests:** add unit tests and missing commands - recording, deletion and click and drag ([a8989c0](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/a8989c06816b3f9b5b5de82d85895106ab062aca))
163
+
164
+ ### Bug Fixes
165
+
166
+ * Bind commands to this instance (not prototype) so each driver instance uses its own powershell session ([#56](https://github.com/AutomateThePlanet/appium-novawindows-driver/issues/56)) [skip ci] ([6dc2125](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/6dc2125c505b392f100036d532326202c0a9c8d4))
167
+ * **capability:** fix post run script ([97b57af](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/97b57af2fe05803ecb66548b8a32202fbe9a45e6))
168
+ * **commands:** add allow-insecure check for fs operations ([4662035](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/466203585796fe08fdb4b119991363246cb00dab))
169
+ * **commands:** match closeApp and launchApp implementation with appium windows driver ([073c566](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/073c566edb3528380196640eb33ee803b4fe2029))
170
+ * fix bugs and implemented end to end tests ([47efa4c](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/47efa4cf00fbac2e15e07e572cdf3e4453ec1020))
171
+ * lint ([fb6ebc8](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/fb6ebc83b1ed5c0fd0c5230d2948d4f5cb156b17))
172
+ * **lint:** lint ([acf7271](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/acf727179dfe1380d42a33a6d38f5175b22cb90d))
173
+ * **recorder:** fix screen recording ([9da1025](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/9da1025c994cb0c3221119690f01a0584b3cf333))
174
+ * **recorder:** validate outputPath before rimraf ([8aa49dd](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/8aa49dd27b2b9bb54329efa0555bb5ef21dc36b5))
175
+
176
+ ### Miscellaneous Chores
177
+
178
+ * **release:** 1.3.0 [skip ci] ([c29b822](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/c29b8223fc6f0435363d6207af0ab1185b811b60))
179
+
180
+ ## [1.3.0](https://github.com/AutomateThePlanet/appium-novawindows-driver/compare/v1.2.0...v1.3.0) (2026-03-06)
181
+
182
+ ### Features
183
+
184
+ * **commands:** add extra W3C commands ([57c654a](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/57c654a1e1e43c8a5d31ed8103aba338883efaa9))
185
+ * **commands:** add support for close app and launch app ([26db919](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/26db919c17ce74ff3c5ef2776544affecb32e2fc))
186
+ * **commands:** implement waitForAppLaunch and forceQuit ([6cce956](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/6cce9565ce51b9f0e354b14819f41a6fc39ffc50))
187
+ * **tests:** add unit tests and missing commands - recording, deletion and click and drag ([a8989c0](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/a8989c06816b3f9b5b5de82d85895106ab062aca))
188
+
189
+ ### Bug Fixes
190
+
191
+ * Bind commands to this instance (not prototype) so each driver instance uses its own powershell session ([#56](https://github.com/AutomateThePlanet/appium-novawindows-driver/issues/56)) [skip ci] ([6dc2125](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/6dc2125c505b392f100036d532326202c0a9c8d4))
192
+ * **capability:** fix post run script ([97b57af](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/97b57af2fe05803ecb66548b8a32202fbe9a45e6))
193
+ * **commands:** add allow-insecure check for fs operations ([4662035](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/466203585796fe08fdb4b119991363246cb00dab))
194
+ * **commands:** match closeApp and launchApp implementation with appium windows driver ([073c566](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/073c566edb3528380196640eb33ee803b4fe2029))
195
+ * fix bugs and implemented end to end tests ([47efa4c](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/47efa4cf00fbac2e15e07e572cdf3e4453ec1020))
196
+ * lint ([fb6ebc8](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/fb6ebc83b1ed5c0fd0c5230d2948d4f5cb156b17))
197
+ * **lint:** lint ([acf7271](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/acf727179dfe1380d42a33a6d38f5175b22cb90d))
198
+ * **recorder:** fix screen recording ([9da1025](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/9da1025c994cb0c3221119690f01a0584b3cf333))
199
+ * **recorder:** validate outputPath before rimraf ([8aa49dd](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/8aa49dd27b2b9bb54329efa0555bb5ef21dc36b5))
200
+
201
+ ## [1.2.0](https://github.com/AutomateThePlanet/appium-novawindows-driver/compare/v1.1.0...v1.2.0) (2026-01-09)
202
+
203
+ ### Features
204
+
205
+ * add "none" session option to start without attaching to any element ([22586a2](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/22586a237f20e975adee25c13fba8c649420574d))
206
+ * add appWorkingDir, prerun, postrun, and isolatedScriptExecution capabilities ([5a581ae](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/5a581ae7ae1e1a013cb8e332454f70762f8749c7))
207
+
208
+ ### Bug Fixes
209
+
210
+ * allow elementId with optional x/y offsets for click/hover ([2d01246](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/2d01246e009e2c7fd67165fc1d313446870021d3))
211
+ * **deps:** downgrade appium peer dependency to 3.0.0-rc.2 ([98262d2](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/98262d297268cf40259946e4a52038103618f3b4))
212
+ * make modifierKeys case-insensitive ([7a05300](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/7a05300ef4a0792a9c1160dfab55537c96967f08))
213
+ * update ESLint config ([2e08f8d](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/2e08f8d5a1df9bf277b2c521584dddb5b0935e72))
214
+ * version bump ([a872a23](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/a872a23fec5f10f692b9c61ba7f8d671f360211f))
215
+
216
+ ### Miscellaneous Chores
217
+
218
+ * add extra logging ([5da452f](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/5da452fa71608d3f52a92c7ea6f82a78ff3139a6))
219
+ * bump peerDependency appium to ^3.1.0 ([cdee0ca](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/cdee0ca44a1423312351449b3227035976ba396f))
220
+ * configure semantic-release branches for stable and preview releases ([a4a1fa2](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/a4a1fa2b0b20c4494919699e8d307793cf18dc04))
221
+ * remove unnecessary ESLint ignore comments ([4c70038](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/4c7003809c6b6668315ed7e036b5ee6cf3595e51))
222
+ * upgrade dependencies and devDependencies to latest versions ([4fd016c](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/4fd016c5adc091305974b3a41c22423cadf6e3ab))
223
+
224
+ ## [1.1.0](https://github.com/AutomateThePlanet/appium-novawindows-driver/compare/v1.0.1...v1.1.0) (2025-08-06)
225
+
226
+ ### Features
227
+
228
+ * adding appArguments option ([#26](https://github.com/AutomateThePlanet/appium-novawindows-driver/issues/26)) ([ded917b](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/ded917bdf2f8d224cc9cf917958177ed0e97078b))
229
+
230
+ ## [1.0.1](https://github.com/AutomateThePlanet/appium-novawindows-driver/compare/v1.0.0...v1.0.1) (2025-04-25)
231
+
232
+ ### Bug Fixes
233
+
234
+ * fixed crash in Node 22+ by using Buffer instead of {} with EnumDisplaySettingsA ([#17](https://github.com/AutomateThePlanet/appium-novawindows-driver/issues/17)) ([08e4907](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/08e49070020f071f3983fcb00c30e9a3ae16b9dc))
235
+ * set shouldCloseApp's default value to true ([#18](https://github.com/AutomateThePlanet/appium-novawindows-driver/issues/18)) ([28dc1d4](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/28dc1d443d416e9a44f4ddcd2fb31828e0b92bcb))
236
+
237
+ ### Code Refactoring
238
+
239
+ * remove unnecessary debug logging for name locator ([#19](https://github.com/AutomateThePlanet/appium-novawindows-driver/issues/19)) ([ad50be9](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/ad50be9f9b60145a2f203f294d326eb9499339fb))
240
+
241
+ ## 1.0.0 (2025-04-23)
242
+
243
+ ### Miscellaneous Chores
244
+
245
+ * add .gitignore ([631fa0a](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/631fa0a72f5cda861215ff4d98ccc41c44d357f6))
246
+ * adding eslint ([c05602d](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/c05602d1aaa7fa003394ec663302017a3027db82))
247
+ * **ci:** add semantic-release workflow ([a9c39fd](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/a9c39fdab2d361678445a523a2830ea9925c4f1f))
248
+ * **lint:** fix linting issue ([6c2cb42](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/6c2cb42388a7f51842a1a5bd11905a9fe0e86ce9))
249
+ * **npm:** disable package-lock generation ([5a648ac](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/5a648ac7f65fcfef66afd6bf76ce2188b10d4ce9))
250
+ * **package:** add keywords and repository info ([fa165d0](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/fa165d007f6a424c0f11340b59ac73e1185091d8))
251
+ * **release:** rollback version to 0.0.1 for testing ([#11](https://github.com/AutomateThePlanet/appium-novawindows-driver/issues/11)) ([c4dd2c2](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/c4dd2c21e3067f70a11d72206fbc7f5da79380b6))
252
+ * updated dependencies [skip ci] ([08528fb](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/08528fb06727df50c087940fe541730a2a13483f))
253
+
254
+ ### Code Refactoring
255
+
256
+ * adding enums for click and updating ([89dcebf](https://github.com/AutomateThePlanet/appium-novawindows-driver/commit/89dcebfd026f7a68b4052f33fa2c928ba42162bf))
package/README.md CHANGED
@@ -51,8 +51,6 @@ isolatedScriptExecution | Whether PowerShell scripts are executed in an isolated
51
51
  appEnvironment | Optional object of custom environment variables to inject into the PowerShell session. The variables are only available for the lifetime of the session and do not affect the system environment. Example: `{"MY_VAR": "hello", "API_URL": "http://localhost:3000"}`.
52
52
  returnAllWindowHandles | When `true`, `getWindowHandles()` returns all top-level windows on the desktop (UIA root children) instead of only the windows belonging to the launched app. Useful for switching to arbitrary system windows. Default is `false`.
53
53
  ms:waitForAppLaunch | Time in seconds to wait for the app window to appear after launch. Default is `0` (falls back to 10 000 ms internal timeout).
54
- ms:windowSwitchRetries | Maximum number of retry attempts in `setWindow()` when the target window is not yet visible. Must be a non-negative integer. Default is `20`.
55
- ms:windowSwitchInterval | Sleep duration in milliseconds between each retry in `setWindow()`. Must be a non-negative integer. Default is `500`.
56
54
 
57
55
  Please note that more capabilities will be added as the development of this driver progresses. Since it is still in its early stages, some features may be missing or subject to change. If you need a specific capability or encounter any issues, please feel free to open an issue.
58
56
 
@@ -710,6 +708,135 @@ driver.execute_script('windows: click', {
710
708
  })
711
709
  ```
712
710
 
711
+ ## WebView / Chrome CDP Support
712
+
713
+ The driver supports automating embedded web content (WebView2 controls, Electron apps, or standalone Chrome/Edge) by connecting to a Chrome DevTools Protocol (CDP) endpoint and proxying commands through Chromedriver.
714
+
715
+ ### How it works
716
+
717
+ 1. Your app (or browser) exposes a CDP endpoint via `--remote-debugging-port`
718
+ 2. The driver connects to that endpoint to discover available pages
719
+ 3. You call `mobile: getContexts` to list all contexts (native + web)
720
+ 4. You switch to a web context — the driver auto-downloads the matching Chromedriver/EdgeDriver and proxies all WebDriver commands to it
721
+ 5. You switch back to `NATIVE_APP` to resume UIA automation
722
+
723
+ ### Required capabilities
724
+
725
+ | Capability | Type | Required | Description |
726
+ |---|---|---|---|
727
+ | `appium:webviewEnabled` | boolean | yes | Enable CDP/WebView support |
728
+ | `appium:webviewDevtoolsPort` | number | no | CDP port. Auto-selected if omitted (WebView2 only) |
729
+ | `appium:chromedriverExecutablePath` | string | no | Path to local chromedriver binary (skips auto-download) |
730
+ | `appium:edgedriverExecutablePath` | string | no | Path to local msedgedriver binary (skips auto-download) |
731
+ | `appium:chromedriverCdnUrl` | string | no | Custom CDN base URL for Chromedriver downloads |
732
+ | `appium:edgedriverCdnUrl` | string | no | Custom CDN base URL for EdgeDriver downloads |
733
+
734
+ ### Automating a standalone Chrome or Edge browser
735
+
736
+ Launch the browser with `--remote-debugging-port` in `appium:appArguments` and set `appium:webviewDevtoolsPort` to the same port.
737
+
738
+ ```javascript
739
+ const driver = await remote({
740
+ hostname: '127.0.0.1',
741
+ port: 4723,
742
+ capabilities: {
743
+ platformName: 'Windows',
744
+ 'appium:automationName': 'DesktopDriver',
745
+ 'appium:app': 'C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe',
746
+ 'appium:appArguments': '--remote-debugging-port=9222 --user-data-dir=C:\\Temp\\chrome-test --no-first-run https://example.com',
747
+ 'appium:webviewEnabled': true,
748
+ 'appium:webviewDevtoolsPort': 9222,
749
+ },
750
+ });
751
+ ```
752
+
753
+ ### Automating a WebView2 app
754
+
755
+ For apps that embed a WebView2 control, omit `appArguments` — the driver injects the debug port automatically via the `WEBVIEW2_ADDITIONAL_BROWSER_ARGUMENTS` environment variable. You can also omit `webviewDevtoolsPort` and the driver will pick a free port automatically.
756
+
757
+ ```javascript
758
+ const driver = await remote({
759
+ hostname: '127.0.0.1',
760
+ port: 4723,
761
+ capabilities: {
762
+ platformName: 'Windows',
763
+ 'appium:automationName': 'DesktopDriver',
764
+ 'appium:app': 'C:\\Path\\To\\YourApp.exe',
765
+ 'appium:webviewEnabled': true,
766
+ // webviewDevtoolsPort is optional — auto-selected when omitted
767
+ },
768
+ });
769
+ ```
770
+
771
+ ### Listing available contexts
772
+
773
+ Use `mobile: getContexts` to get all available contexts with page metadata:
774
+
775
+ ```javascript
776
+ const contexts = await driver.execute('mobile: getContexts', [{}]);
777
+ // Returns:
778
+ // [
779
+ // { id: 'NATIVE_APP' },
780
+ // { id: 'WEBVIEW_4F81DBA83CD27B1868B4193151C76A92', title: 'Example Domain', url: 'https://example.com/', type: 'page', ... },
781
+ // ]
782
+ ```
783
+
784
+ To wait for the WebView to finish loading before querying, pass `waitForWebviewMs`:
785
+
786
+ ```javascript
787
+ const contexts = await driver.execute('mobile: getContexts', [{ waitForWebviewMs: 3000 }]);
788
+ ```
789
+
790
+ The standard `driver.getContexts()` command also works but returns only IDs without metadata.
791
+
792
+ ### Switching to a web context
793
+
794
+ ```javascript
795
+ const contexts = await driver.execute('mobile: getContexts', [{}]);
796
+ const webviewId = contexts.find(c => c.id.startsWith('WEBVIEW_')).id;
797
+
798
+ await driver.switchContext(webviewId);
799
+
800
+ // Now all commands are proxied through Chromedriver
801
+ const title = await driver.getTitle();
802
+ const url = await driver.getUrl();
803
+
804
+ const h1 = await driver.$('h1'); // CSS selector
805
+ const heading = await driver.$('//h1'); // XPath
806
+ console.log(await h1.getText());
807
+
808
+ const docTitle = await driver.execute('return document.title');
809
+ ```
810
+
811
+ ### Switching back to native UIA
812
+
813
+ ```javascript
814
+ await driver.switchContext('NATIVE_APP');
815
+
816
+ // UIA automation resumes — find native elements normally
817
+ const btn = await driver.$('~myButton');
818
+ await btn.click();
819
+ ```
820
+
821
+ ### Running UIA commands while in a web context
822
+
823
+ `windows:` extension commands and `powerShell` are always routed to the native UIA layer regardless of the active context:
824
+
825
+ ```javascript
826
+ await driver.switchContext(webviewId);
827
+
828
+ // These still hit UIA, not Chromedriver
829
+ const deviceTime = await driver.execute('windows: getDeviceTime', [{}]);
830
+ const result = await driver.execute('powerShell', [{ script: 'Get-Date' }]);
831
+ ```
832
+
833
+ ### Notes
834
+
835
+ - The driver auto-downloads the correct Chromedriver or EdgeDriver version to match the browser. Internet access is required unless you provide `chromedriverExecutablePath` / `edgedriverExecutablePath`.
836
+ - Only one web context can be active at a time. Switching to a second web context tears down the previous Chromedriver instance and starts a new one.
837
+ - Use `--user-data-dir` when launching Chrome/Edge to ensure the debug port is respected even if another Chrome instance is already running.
838
+ - Background pages, service workers, and extension pages appear in `mobile: getContexts` results. Filter by `type === 'page'` to target only real tab pages.
839
+
713
840
  ## Development
714
841
 
715
842
  it is recommended to use Matt Bierner's [Comment tagged templates](https://marketplace.visualstudio.com/items?itemName=bierner.comment-tagged-templates)
@@ -1,9 +1,11 @@
1
- import { ActionSequence, KeyAction, KeyActionSequence, PointerActionSequence, PointerMoveAction, ScrollAction, WheelActionSequence } from '@appium/types';
1
+ import { ActionSequence, KeyAction, KeyActionSequence, NullActionSequence, PointerActionSequence, PointerMoveAction, ScrollAction, WheelActionSequence } from '@appium/types';
2
2
  import { AppiumDesktopDriver } from '../driver';
3
3
  export declare function performActions(this: AppiumDesktopDriver, actionSequences: ActionSequence[]): Promise<void>;
4
4
  export declare function handleKeyActionSequence(this: AppiumDesktopDriver, actionSequence: KeyActionSequence): Promise<void>;
5
- export declare function handleSingleMousePointerAction(this: AppiumDesktopDriver, action: PointerActionSequence['actions'][number]): Promise<void>;
6
- export declare function handleSingleWheelAction(this: AppiumDesktopDriver, action: WheelActionSequence['actions'][number]): Promise<void>;
5
+ export declare function handlePointerActionSequence(this: AppiumDesktopDriver, actionSequence: PointerActionSequence): Promise<void>;
6
+ export declare function handleMousePointerActionSequence(this: AppiumDesktopDriver, actionSequence: PointerActionSequence): Promise<void>;
7
+ export declare function handleWheelActionSequence(this: AppiumDesktopDriver, actionSequence: WheelActionSequence): Promise<void>;
8
+ export declare function handleNullActionSequence(this: AppiumDesktopDriver, actionSequence: NullActionSequence): Promise<void>;
7
9
  export declare function handleMouseMoveAction(this: AppiumDesktopDriver, action: PointerMoveAction | ScrollAction): Promise<void>;
8
10
  export declare function handleKeyAction(this: AppiumDesktopDriver, action: KeyAction): Promise<void>;
9
11
  export declare function releaseActions(this: AppiumDesktopDriver): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../lib/commands/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,SAAS,EACT,iBAAiB,EAEjB,qBAAqB,EACrB,iBAAiB,EAEjB,YAAY,EACZ,mBAAmB,EACtB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAOhD,wBAAsB,cAAc,CAAC,IAAI,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAyChH;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,mBAAmB,EAAE,cAAc,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKzH;AAGD,wBAAsB,8BAA8B,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,qBAAqB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAqB/I;AAGD,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBtI;AAGD,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,iBAAiB,GAAG,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8B9H;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFjG;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B7E"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../lib/commands/actions.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACtB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAMhD,wBAAsB,cAAc,CAAC,IAAI,EAAE,mBAAmB,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhH;AAED,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,mBAAmB,EAAE,cAAc,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAKzH;AAED,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,mBAAmB,EAAE,cAAc,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CASjI;AAED,wBAAsB,gCAAgC,CAAC,IAAI,EAAE,mBAAmB,EAAE,cAAc,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBtI;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,mBAAmB,EAAE,cAAc,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAiB7H;AAED,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,EAAE,cAAc,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAO3H;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,iBAAiB,GAAG,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B9H;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE,mBAAmB,EAAE,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAuFjG;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4B7E"}