appium-mcp 1.75.4 → 1.75.5

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/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [1.75.5](https://github.com/appium/appium-mcp/compare/v1.75.4...v1.75.5) (2026-05-23)
2
+
3
+ ### Bug Fixes
4
+
5
+ * **gestures:** clamp direction gestures to window for ai-element targets ([#350](https://github.com/appium/appium-mcp/issues/350)) ([6f8db0b](https://github.com/appium/appium-mcp/commit/6f8db0bfa1462b8e54757d154b951425b8e8fbdd))
6
+
1
7
  ## [1.75.4](https://github.com/appium/appium-mcp/compare/v1.75.3...v1.75.4) (2026-05-23)
2
8
 
3
9
  ### Miscellaneous Chores
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=swipe-scroll.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swipe-scroll.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/tools/gestures/swipe-scroll.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,55 @@
1
+ import { describe, test, expect, jest } from '@jest/globals';
2
+ jest.unstable_mockModule('../../../session-store', () => ({
3
+ getDriver: jest.fn(),
4
+ getPlatformName: jest.fn(),
5
+ PLATFORM: { ios: 'iOS', android: 'Android' },
6
+ }));
7
+ jest.unstable_mockModule('../../../command', () => ({
8
+ execute: jest.fn(),
9
+ getElementRect: jest.fn(),
10
+ getWindowRect: jest.fn(),
11
+ performActions: jest.fn(),
12
+ }));
13
+ jest.unstable_mockModule('../../../tools/ai/config', () => ({
14
+ isAIEnabled: jest.fn(() => false),
15
+ }));
16
+ const { parseAiElement } = await import('../../../tools/gestures/handlers/ai-element.js');
17
+ const { clampDirectionCoordsToWindow, rectVisibleWithinWindow } = await import('../../../tools/gestures/handlers/swipe-scroll.js');
18
+ const PHONE_WINDOW = { x: 0, y: 0, width: 400, height: 800 };
19
+ describe('rectVisibleWithinWindow', () => {
20
+ test('clips ai-element fallback rect that extends past the left edge', () => {
21
+ const parsed = parseAiElement('ai-element:42,84');
22
+ expect('error' in parsed).toBe(false);
23
+ if ('error' in parsed) {
24
+ return;
25
+ }
26
+ const visible = rectVisibleWithinWindow(parsed.rect, PHONE_WINDOW);
27
+ expect(visible.x).toBeGreaterThanOrEqual(0);
28
+ expect(visible.y).toBeGreaterThanOrEqual(0);
29
+ expect(visible.x + visible.width).toBeLessThanOrEqual(PHONE_WINDOW.width);
30
+ expect(visible.y + visible.height).toBeLessThanOrEqual(PHONE_WINDOW.height);
31
+ expect(visible.width).toBeGreaterThan(0);
32
+ expect(visible.height).toBeGreaterThan(0);
33
+ });
34
+ test('returns a 1x1 rect at clamped centre when fully outside the window', () => {
35
+ const offScreen = { x: 500, y: 900, width: 100, height: 100 };
36
+ const visible = rectVisibleWithinWindow(offScreen, PHONE_WINDOW);
37
+ expect(visible).toEqual({ x: 399, y: 799, width: 1, height: 1 });
38
+ });
39
+ });
40
+ describe('clampDirectionCoordsToWindow', () => {
41
+ test('clamps swipe endpoints into inclusive window pixel bounds', () => {
42
+ const clamped = clampDirectionCoordsToWindow({ startX: -20, startY: 900, endX: 500, endY: -10 }, PHONE_WINDOW);
43
+ expect(clamped).toEqual({
44
+ startX: 0,
45
+ startY: 799,
46
+ endX: 399,
47
+ endY: 0,
48
+ });
49
+ });
50
+ test('preserves in-bounds directional coords', () => {
51
+ const coords = { startX: 200, startY: 600, endX: 200, endY: 200 };
52
+ expect(clampDirectionCoordsToWindow(coords, PHONE_WINDOW)).toEqual(coords);
53
+ });
54
+ });
55
+ //# sourceMappingURL=swipe-scroll.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swipe-scroll.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/gestures/swipe-scroll.test.ts"],"names":[],"mappings":"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"}