appium-mcp 1.74.2 → 1.74.3
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 +6 -0
- package/dist/tests/tools/gestures/ai-element.test.d.ts +2 -0
- package/dist/tests/tools/gestures/ai-element.test.d.ts.map +1 -0
- package/dist/tests/tools/gestures/ai-element.test.js +93 -0
- package/dist/tests/tools/gestures/ai-element.test.js.map +1 -0
- package/dist/tools/documentation/uploads/embeddings-Xenova-bge-small-en-v1.5.json +1 -1
- package/dist/tools/gestures/handlers/ai-element.d.ts +56 -0
- package/dist/tools/gestures/handlers/ai-element.d.ts.map +1 -0
- package/dist/tools/gestures/handlers/ai-element.js +95 -0
- package/dist/tools/gestures/handlers/ai-element.js.map +1 -0
- package/dist/tools/gestures/handlers/pinch.d.ts.map +1 -1
- package/dist/tools/gestures/handlers/pinch.js +31 -13
- package/dist/tools/gestures/handlers/pinch.js.map +1 -1
- package/dist/tools/gestures/handlers/swipe-scroll.d.ts.map +1 -1
- package/dist/tools/gestures/handlers/swipe-scroll.js +16 -2
- package/dist/tools/gestures/handlers/swipe-scroll.js.map +1 -1
- package/dist/tools/gestures/handlers/tap.d.ts.map +1 -1
- package/dist/tools/gestures/handlers/tap.js +51 -41
- package/dist/tools/gestures/handlers/tap.js.map +1 -1
- package/package.json +1 -1
- package/server.json +2 -2
- package/src/resources/submodules.zip +0 -0
- package/src/tools/gestures/handlers/ai-element.ts +140 -0
- package/src/tools/gestures/handlers/pinch.ts +35 -18
- package/src/tools/gestures/handlers/swipe-scroll.ts +20 -7
- package/src/tools/gestures/handlers/tap.ts +56 -50
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helpers for the special "ai-element:" UUIDs produced by the appium_ai
|
|
3
|
+
* find_element handler.
|
|
4
|
+
*
|
|
5
|
+
* The format is:
|
|
6
|
+
*
|
|
7
|
+
* ai-element:<cx>,<cy>:<x0>,<y0>,<x1>,<y1>
|
|
8
|
+
*
|
|
9
|
+
* where (cx, cy) is the visual centre of the target and (x0,y0,x1,y1) is
|
|
10
|
+
* the bounding box returned by the vision model. Both are pixel
|
|
11
|
+
* coordinates in the screenshot's coordinate space, NOT real WebDriver
|
|
12
|
+
* element ids — so they MUST NOT be passed to driver.getElementRect or
|
|
13
|
+
* to platform-native commands like `mobile: doubleTap`, `mobile: pinch`,
|
|
14
|
+
* etc., which require a real element id.
|
|
15
|
+
*
|
|
16
|
+
* Centralising the prefix, the parser, and the rect-resolution helper
|
|
17
|
+
* here keeps every gesture handler honest: if it ever needs a rect for
|
|
18
|
+
* a UUID, it goes through `resolveTargetRect` and gets the right thing
|
|
19
|
+
* for both AI and traditional UUIDs.
|
|
20
|
+
*/
|
|
21
|
+
import type { ContentResult } from 'fastmcp';
|
|
22
|
+
import type { Rect } from '@appium/types';
|
|
23
|
+
import type { DriverInstance } from '../../../session-store.js';
|
|
24
|
+
export declare const AI_ELEMENT_PREFIX = "ai-element:";
|
|
25
|
+
export declare const AI_DISABLED_REJECTION: string;
|
|
26
|
+
export type ParsedAiElement = {
|
|
27
|
+
center: {
|
|
28
|
+
x: number;
|
|
29
|
+
y: number;
|
|
30
|
+
};
|
|
31
|
+
rect: Rect;
|
|
32
|
+
};
|
|
33
|
+
export declare function isAiElementUUID(uuid: string | undefined): uuid is string;
|
|
34
|
+
/**
|
|
35
|
+
* Parse an `ai-element:` UUID into a centre point and a synthetic rect.
|
|
36
|
+
*
|
|
37
|
+
* If the bbox segment is present and well-formed, the rect describes the
|
|
38
|
+
* full bounding box. Otherwise we fall back to a small rect centred on
|
|
39
|
+
* `(cx, cy)`, so directional swipe/scroll still has usable start/end deltas.
|
|
40
|
+
*/
|
|
41
|
+
export declare function parseAiElement(uuid: string): ParsedAiElement | {
|
|
42
|
+
error: string;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Single dispatcher for "give me a rect for this UUID":
|
|
46
|
+
* - ai-element UUID → rect synthesised from the bbox / centre fallback, no driver call
|
|
47
|
+
* - traditional UUID → `getElementRect` on the driver
|
|
48
|
+
*
|
|
49
|
+
* Returns `{ error }` for malformed AI UUIDs or for driver lookup failures (`getElementRect`
|
|
50
|
+
* rejects). Call sites avoid try/catch and handle both cases the same way.
|
|
51
|
+
*/
|
|
52
|
+
export declare function resolveTargetRect(driver: DriverInstance, elementUUID: string): Promise<Rect | {
|
|
53
|
+
error: string;
|
|
54
|
+
}>;
|
|
55
|
+
export declare function aiDisabledResult(): ContentResult;
|
|
56
|
+
//# sourceMappingURL=ai-element.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-element.d.ts","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/ai-element.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAGhE,eAAO,MAAM,iBAAiB,gBAAgB,CAAC;AAE/C,eAAO,MAAM,qBAAqB,QAGoD,CAAC;AAEvF,MAAM,MAAM,eAAe,GAAG;IAC5B,MAAM,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAaF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,IAAI,MAAM,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GACX,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAkCrC;AAED;;;;;;;GAOG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,cAAc,EACtB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,GAAG;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAenC;AAED,wBAAgB,gBAAgB,IAAI,aAAa,CAEhD"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { getElementRect } from '../../../command.js';
|
|
2
|
+
import { errorResult } from '../../tool-response.js';
|
|
3
|
+
export const AI_ELEMENT_PREFIX = 'ai-element:';
|
|
4
|
+
export const AI_DISABLED_REJECTION = `Received an ai-element: UUID, but the appium_ai tool is not registered ` +
|
|
5
|
+
`(AI_VISION_ENABLED is not set to true). Use appium_find_element to get a real ` +
|
|
6
|
+
`element UUID, or enable AI_VISION_ENABLED=true with the required AI_VISION_* keys.`;
|
|
7
|
+
/**
|
|
8
|
+
* When centre-only AI UUIDs have no bbox, direction-based swipe/scroll uses
|
|
9
|
+
* `rect.width` / `rect.height` with 0.2 / 0.8 edges; an effective 1x1 rect
|
|
10
|
+
* makes start/end identical after rounding. Keep a minimum inset area so those
|
|
11
|
+
* gestures still move visibly while staying centred on the parsed point.
|
|
12
|
+
*
|
|
13
|
+
* Values are screenshot pixels; callers can clamp against the window if needed.
|
|
14
|
+
*/
|
|
15
|
+
const AI_FALLBACK_RECT_WIDTH = 100;
|
|
16
|
+
const AI_FALLBACK_RECT_HEIGHT = 100;
|
|
17
|
+
export function isAiElementUUID(uuid) {
|
|
18
|
+
return typeof uuid === 'string' && uuid.startsWith(AI_ELEMENT_PREFIX);
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Parse an `ai-element:` UUID into a centre point and a synthetic rect.
|
|
22
|
+
*
|
|
23
|
+
* If the bbox segment is present and well-formed, the rect describes the
|
|
24
|
+
* full bounding box. Otherwise we fall back to a small rect centred on
|
|
25
|
+
* `(cx, cy)`, so directional swipe/scroll still has usable start/end deltas.
|
|
26
|
+
*/
|
|
27
|
+
export function parseAiElement(uuid) {
|
|
28
|
+
const parts = uuid.split(':');
|
|
29
|
+
if (parts.length < 2) {
|
|
30
|
+
return { error: 'Invalid ai-element UUID: missing coordinate segment.' };
|
|
31
|
+
}
|
|
32
|
+
const [cxStr, cyStr] = (parts[1] ?? '').split(',');
|
|
33
|
+
const cx = Number.parseInt(cxStr ?? '', 10);
|
|
34
|
+
const cy = Number.parseInt(cyStr ?? '', 10);
|
|
35
|
+
if (!Number.isFinite(cx) || !Number.isFinite(cy)) {
|
|
36
|
+
return {
|
|
37
|
+
error: `Invalid ai-element UUID: centre coordinates are not numbers ('${parts[1]}').`,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
let rect = rectAroundCenter(cx, cy);
|
|
41
|
+
if (parts[2]) {
|
|
42
|
+
const bbox = parts[2].split(',').map((v) => Number.parseInt(v, 10));
|
|
43
|
+
if (bbox.length === 4 &&
|
|
44
|
+
bbox.every((n) => Number.isFinite(n)) &&
|
|
45
|
+
bbox[2] > bbox[0] &&
|
|
46
|
+
bbox[3] > bbox[1]) {
|
|
47
|
+
rect = {
|
|
48
|
+
x: bbox[0],
|
|
49
|
+
y: bbox[1],
|
|
50
|
+
width: bbox[2] - bbox[0],
|
|
51
|
+
height: bbox[3] - bbox[1],
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return { center: { x: cx, y: cy }, rect };
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Single dispatcher for "give me a rect for this UUID":
|
|
59
|
+
* - ai-element UUID → rect synthesised from the bbox / centre fallback, no driver call
|
|
60
|
+
* - traditional UUID → `getElementRect` on the driver
|
|
61
|
+
*
|
|
62
|
+
* Returns `{ error }` for malformed AI UUIDs or for driver lookup failures (`getElementRect`
|
|
63
|
+
* rejects). Call sites avoid try/catch and handle both cases the same way.
|
|
64
|
+
*/
|
|
65
|
+
export async function resolveTargetRect(driver, elementUUID) {
|
|
66
|
+
if (isAiElementUUID(elementUUID)) {
|
|
67
|
+
const parsed = parseAiElement(elementUUID);
|
|
68
|
+
if ('error' in parsed) {
|
|
69
|
+
return parsed;
|
|
70
|
+
}
|
|
71
|
+
return parsed.rect;
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
return await getElementRect(driver, elementUUID);
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
return {
|
|
78
|
+
error: err instanceof Error ? err.message : String(err),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
export function aiDisabledResult() {
|
|
83
|
+
return errorResult(AI_DISABLED_REJECTION);
|
|
84
|
+
}
|
|
85
|
+
function rectAroundCenter(cx, cy) {
|
|
86
|
+
const w = AI_FALLBACK_RECT_WIDTH;
|
|
87
|
+
const h = AI_FALLBACK_RECT_HEIGHT;
|
|
88
|
+
return {
|
|
89
|
+
x: cx - Math.floor(w / 2),
|
|
90
|
+
y: cy - Math.floor(h / 2),
|
|
91
|
+
width: w,
|
|
92
|
+
height: h,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=ai-element.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-element.js","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/ai-element.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pinch.d.ts","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/pinch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"pinch.d.ts","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/pinch.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAchE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAMhD,KAAK,QAAQ,GAAG;IACd,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,yBAAyB,CACvC,WAAW,EAAE,QAAQ,EACrB,UAAU,EAAE,QAAQ,GACnB,WAAW,CAyCb;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,aAAa,CAAC,CA6KxB"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { getPlatformName, PLATFORM } from '../../../session-store.js';
|
|
2
|
-
import { execute,
|
|
2
|
+
import { execute, getWindowRect, performActions } from '../../../command.js';
|
|
3
3
|
import { errorResult, textResult, toolErrorMessage, } from '../../tool-response.js';
|
|
4
|
+
import { isAIEnabled } from '../../ai/config.js';
|
|
5
|
+
import { aiDisabledResult, isAiElementUUID, resolveTargetRect, } from './ai-element.js';
|
|
4
6
|
const DEFAULT_VELOCITY = 2.2;
|
|
5
7
|
const DEFAULT_PINCH_SPREAD_RATIO = 0.3;
|
|
6
8
|
const MIN_ELEMENT_PINCH_SPREAD_RATIO = 0.15;
|
|
@@ -41,6 +43,14 @@ export async function handlePinchZoom(driver, args) {
|
|
|
41
43
|
return errorResult('pinch_zoom requires both x and y when using custom coordinates.');
|
|
42
44
|
}
|
|
43
45
|
const useCustomCoords = !args.elementUUID && args.x !== undefined && args.y !== undefined;
|
|
46
|
+
// ai-element UUIDs are coordinate UUIDs, not real element ids: drive the
|
|
47
|
+
// gesture from the bbox and skip the iOS/Android native paths that need
|
|
48
|
+
// a real `elementId`.
|
|
49
|
+
const isAiUUID = isAiElementUUID(args.elementUUID);
|
|
50
|
+
if (isAiUUID && !isAIEnabled()) {
|
|
51
|
+
return aiDisabledResult();
|
|
52
|
+
}
|
|
53
|
+
const useCoordPath = useCustomCoords || isAiUUID;
|
|
44
54
|
try {
|
|
45
55
|
const platform = getPlatformName(driver);
|
|
46
56
|
let cx;
|
|
@@ -49,7 +59,10 @@ export async function handlePinchZoom(driver, args) {
|
|
|
49
59
|
let windowRect = null;
|
|
50
60
|
if (args.elementUUID) {
|
|
51
61
|
windowRect = await getWindowRect(driver);
|
|
52
|
-
const rect = await
|
|
62
|
+
const rect = await resolveTargetRect(driver, args.elementUUID);
|
|
63
|
+
if ('error' in rect) {
|
|
64
|
+
return errorResult(rect.error);
|
|
65
|
+
}
|
|
53
66
|
({ cx, cy, spread } = resolveElementPinchTarget(rect, windowRect));
|
|
54
67
|
}
|
|
55
68
|
else if (useCustomCoords) {
|
|
@@ -94,10 +107,11 @@ export async function handlePinchZoom(driver, args) {
|
|
|
94
107
|
},
|
|
95
108
|
]);
|
|
96
109
|
}
|
|
97
|
-
else if (
|
|
98
|
-
// Zoom in at a
|
|
99
|
-
// with a region centered at (cx, cy). spread is
|
|
100
|
-
// fits within the window.
|
|
110
|
+
else if (useCoordPath && platform === PLATFORM.android) {
|
|
111
|
+
// Zoom in at a coordinate-driven center on Android: use the native
|
|
112
|
+
// pinchOpenGesture with a region centered at (cx, cy). spread is
|
|
113
|
+
// pre-clamped so the region fits within the window. Also covers
|
|
114
|
+
// ai-element UUIDs, whose synthetic rect is used to pick the region.
|
|
101
115
|
const percent = Math.min(0.99, 1 - 1 / scale);
|
|
102
116
|
await execute(driver, 'mobile: pinchOpenGesture', {
|
|
103
117
|
left: cx - spread,
|
|
@@ -107,8 +121,10 @@ export async function handlePinchZoom(driver, args) {
|
|
|
107
121
|
percent,
|
|
108
122
|
});
|
|
109
123
|
}
|
|
110
|
-
else if (
|
|
111
|
-
// Zoom in at a
|
|
124
|
+
else if (useCoordPath) {
|
|
125
|
+
// Zoom in at a coordinate-driven center on iOS using W3C Actions.
|
|
126
|
+
// Same path is used for ai-element UUIDs because `mobile: pinch`
|
|
127
|
+
// requires a real elementId we don't have.
|
|
112
128
|
const startSpread = Math.max(1, Math.floor(spread / scale));
|
|
113
129
|
const endSpread = spread;
|
|
114
130
|
const duration = Math.floor((1 / Math.abs(velocity)) * 1000);
|
|
@@ -168,11 +184,13 @@ export async function handlePinchZoom(driver, args) {
|
|
|
168
184
|
return errorResult(`pinch_zoom is not supported on platform '${platform}'. Supported: iOS, Android.`);
|
|
169
185
|
}
|
|
170
186
|
const direction = scale < 1 ? 'out' : 'in';
|
|
171
|
-
const target =
|
|
172
|
-
? `element ${
|
|
173
|
-
:
|
|
174
|
-
? `
|
|
175
|
-
:
|
|
187
|
+
const target = isAiUUID
|
|
188
|
+
? `AI element coordinates (${cx}, ${cy})`
|
|
189
|
+
: args.elementUUID
|
|
190
|
+
? `element ${args.elementUUID}`
|
|
191
|
+
: useCustomCoords
|
|
192
|
+
? `coordinates (${cx}, ${cy})`
|
|
193
|
+
: 'screen';
|
|
176
194
|
return textResult(`Successfully pinched ${direction} (scale=${scale}) on ${target}.`);
|
|
177
195
|
}
|
|
178
196
|
catch (err) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pinch.js","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/pinch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,
|
|
1
|
+
{"version":3,"file":"pinch.js","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/pinch.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC7E,OAAO,EACL,WAAW,EACX,UAAU,EACV,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAGzB,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAC7B,MAAM,0BAA0B,GAAG,GAAG,CAAC;AACvC,MAAM,8BAA8B,GAAG,IAAI,CAAC;AAe5C,MAAM,UAAU,yBAAyB,CACvC,WAAqB,EACrB,UAAoB;IAEpB,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,WAAW,GAAG,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC;IAClD,MAAM,YAAY,GAAG,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC;IAEnD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;IACtD,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9E,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAC5B,YAAY,EACZ,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,CACnC,CAAC;IAEF,MAAM,KAAK,GACT,YAAY,GAAG,WAAW;QACxB,CAAC,CAAC,WAAW,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,CAAC;QAChD,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,KAAK,GAAG,CAAC,CAAC;IAC5C,MAAM,KAAK,GACT,aAAa,GAAG,UAAU;QACxB,CAAC,CAAC,UAAU,GAAG,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC;QAC/C,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;IAE7C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;IACjE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CACtB,IAAI,CAAC,KAAK,CAAC,WAAW,GAAG,0BAA0B,CAAC,EACpD,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,8BAA8B,CAAC,CACxD,CAAC;IACF,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAC5B,OAAO,EACP,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,0BAA0B,CAAC,CACpD,CAAC;IAEF,OAAO;QACL,EAAE;QACF,EAAE;QACF,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,kBAAkB,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,CAAC;KACxE,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAsB,EACtB,IAAiB;IAEjB,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,WAAW,CAChB,2EAA2E,CAC5E,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IAEnD,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;QAC3E,OAAO,WAAW,CAChB,iEAAiE,CAClE,CAAC;IACJ,CAAC;IACD,MAAM,eAAe,GACnB,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,KAAK,SAAS,CAAC;IACpE,yEAAyE;IACzE,wEAAwE;IACxE,sBAAsB;IACtB,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAC/B,OAAO,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,YAAY,GAAG,eAAe,IAAI,QAAQ,CAAC;IAEjD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;QAEzC,IAAI,EAAU,CAAC;QACf,IAAI,EAAU,CAAC;QACf,IAAI,MAAc,CAAC;QACnB,IAAI,UAAU,GAAqD,IAAI,CAAC;QAExE,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,UAAU,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC/D,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;gBACpB,OAAO,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;YACD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,yBAAyB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;QACrE,CAAC;aAAM,IAAI,eAAe,EAAE,CAAC;YAC3B,UAAU,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,4BAA4B,CAAC,IAAI,CAAC,CAAE,EAAE,IAAI,CAAC,CAAE,EAAE,UAAU,CAAC,CAAC;YAC1E,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;YAC7B,CAAC;YACD,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,UAAU,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;YACzC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,wBAAwB,CAAC,UAAU,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,iEAAiE;YACjE,MAAM,WAAW,GAAG,MAAM,CAAC;YAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAE7D,MAAM,cAAc,CAAC,MAAM,EAAE;gBAC3B;oBACE,IAAI,EAAE,SAAS;oBACf,EAAE,EAAE,SAAS;oBACb,UAAU,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE;oBACpC,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;wBAChE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE;wBAClC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE;wBAC3D,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE;qBACjC;iBACF;gBACD;oBACE,IAAI,EAAE,SAAS;oBACf,EAAE,EAAE,SAAS;oBACb,UAAU,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE;oBACpC,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;wBAChE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE;wBAClC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE;wBAC3D,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE;qBACjC;iBACF;aACF,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,YAAY,IAAI,QAAQ,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;YACzD,mEAAmE;YACnE,iEAAiE;YACjE,gEAAgE;YAChE,qEAAqE;YACrE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YAC9C,MAAM,OAAO,CAAC,MAAM,EAAE,0BAA0B,EAAE;gBAChD,IAAI,EAAE,EAAE,GAAG,MAAM;gBACjB,GAAG,EAAE,EAAE,GAAG,MAAM;gBAChB,KAAK,EAAE,CAAC,GAAG,MAAM;gBACjB,MAAM,EAAE,CAAC,GAAG,MAAM;gBAClB,OAAO;aACR,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,YAAY,EAAE,CAAC;YACxB,kEAAkE;YAClE,iEAAiE;YACjE,2CAA2C;YAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;YAC5D,MAAM,SAAS,GAAG,MAAM,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;YAE7D,MAAM,cAAc,CAAC,MAAM,EAAE;gBAC3B;oBACE,IAAI,EAAE,SAAS;oBACf,EAAE,EAAE,SAAS;oBACb,UAAU,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE;oBACpC,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;wBAChE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE;wBAClC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE;wBAC3D,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE;qBACjC;iBACF;gBACD;oBACE,IAAI,EAAE,SAAS;oBACf,EAAE,EAAE,SAAS;oBACb,UAAU,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE;oBACpC,OAAO,EAAE;wBACP,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;wBAChE,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,EAAE;wBAClC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE;wBAC3D,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE;qBACjC;iBACF;aACF,CAAC,CAAC;QACL,CAAC;aAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC,GAAG,EAAE,CAAC;YACrC,MAAM,MAAM,GAA4B;gBACtC,KAAK;gBACL,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;aAC7B,CAAC;YACF,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;YACtC,CAAC;YACD,MAAM,OAAO,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;QACjD,CAAC;aAAM,IAAI,QAAQ,KAAK,QAAQ,CAAC,OAAO,EAAE,CAAC;YACzC,8DAA8D;YAC9D,oEAAoE;YACpE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;YAC9C,MAAM,MAAM,GAA4B,EAAE,OAAO,EAAE,CAAC;YACpD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;gBACrB,MAAM,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC;YACtC,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,UAAW,CAAC;gBACzB,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC1B,MAAM,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;gBACzB,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC1B,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;YAC9B,CAAC;YACD,MAAM,OAAO,CAAC,MAAM,EAAE,0BAA0B,EAAE,MAAM,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,OAAO,WAAW,CAChB,4CAA4C,QAAQ,6BAA6B,CAClF,CAAC;QACJ,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3C,MAAM,MAAM,GAAG,QAAQ;YACrB,CAAC,CAAC,2BAA2B,EAAE,KAAK,EAAE,GAAG;YACzC,CAAC,CAAC,IAAI,CAAC,WAAW;gBAChB,CAAC,CAAC,WAAW,IAAI,CAAC,WAAW,EAAE;gBAC/B,CAAC,CAAC,eAAe;oBACf,CAAC,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAG;oBAC9B,CAAC,CAAC,QAAQ,CAAC;QACjB,OAAO,UAAU,CACf,wBAAwB,SAAS,WAAW,KAAK,QAAQ,MAAM,GAAG,CACnE,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,WAAW,CAChB,iCAAiC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CACzD,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,GAAW,EAAE,GAAW;IACpD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAS,kBAAkB,CACzB,EAAU,EACV,EAAU,EACV,UAAoB;IAEpB,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;IAE3C,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,SAAS,wBAAwB,CAAC,UAAoB;IACpD,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEnE,OAAO;QACL,EAAE;QACF,EAAE;QACF,MAAM,EAAE,IAAI,CAAC,KAAK,CAChB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,0BAA0B,CAC3E;KACF,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CACnC,CAAS,EACT,CAAS,EACT,UAAoB;IAEpB,MAAM,IAAI,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAG,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC;IACtC,MAAM,MAAM,GAAG,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;IAEvC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;QACrD,OAAO,2BAA2B,CAAC,KAAK,CAAC,gCAAgC,UAAU,CAAC,KAAK,IAAI,UAAU,CAAC,MAAM,IAAI,CAAC;IACrH,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CACxB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,0BAA0B,CAC3E,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,CAAC;QACL,EAAE,EAAE,CAAC;QACL,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;KAChE,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swipe-scroll.d.ts","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/swipe-scroll.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"swipe-scroll.d.ts","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/swipe-scroll.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAchE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAiBhD,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,EAAE,IAAI,GAAG,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,cAAc,EACtB,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CA2Cf;AAkCD,wBAAsB,YAAY,CAChC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,aAAa,CAAC,CAuCxB;AAED,wBAAsB,WAAW,CAC/B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,aAAa,CAAC,CAkDxB"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { getPlatformName, PLATFORM } from '../../../session-store.js';
|
|
2
|
-
import { execute,
|
|
2
|
+
import { execute, getWindowRect, performActions } from '../../../command.js';
|
|
3
3
|
import { errorResult, textResult, toolErrorMessage, } from '../../tool-response.js';
|
|
4
|
+
import { isAIEnabled } from '../../ai/config.js';
|
|
5
|
+
import { aiDisabledResult, isAiElementUUID, resolveTargetRect, } from './ai-element.js';
|
|
4
6
|
const SCROLL_DURATION_MS = 800;
|
|
5
7
|
const SCROLL_INITIAL_PAUSE_MS = 250;
|
|
6
8
|
/** Pointer move duration for programmatic vertical scroll (matches legacy appium_scroll). */
|
|
@@ -75,6 +77,9 @@ const FLIPPED_DIRECTION = {
|
|
|
75
77
|
};
|
|
76
78
|
export async function handleScroll(driver, args) {
|
|
77
79
|
try {
|
|
80
|
+
if (isAiElementUUID(args.elementUUID) && !isAIEnabled()) {
|
|
81
|
+
return aiDisabledResult();
|
|
82
|
+
}
|
|
78
83
|
const platform = getPlatformName(driver);
|
|
79
84
|
// Android scroll follows the scrollbar convention (down = reveal content below),
|
|
80
85
|
// so flip the user's direction before computing the W3C drag coords.
|
|
@@ -109,6 +114,9 @@ export async function handleScroll(driver, args) {
|
|
|
109
114
|
}
|
|
110
115
|
export async function handleSwipe(driver, args) {
|
|
111
116
|
try {
|
|
117
|
+
if (isAiElementUUID(args.elementUUID) && !isAIEnabled()) {
|
|
118
|
+
return aiDisabledResult();
|
|
119
|
+
}
|
|
112
120
|
const coordsResult = await resolveCoords(driver, args);
|
|
113
121
|
if ('error' in coordsResult) {
|
|
114
122
|
return errorResult(`swipe: ${coordsResult.error}`);
|
|
@@ -190,7 +198,13 @@ function coordsForDirection(direction, rect) {
|
|
|
190
198
|
async function resolveCoords(driver, args) {
|
|
191
199
|
if (args.direction) {
|
|
192
200
|
if (args.elementUUID) {
|
|
193
|
-
|
|
201
|
+
// ai-element UUIDs are coordinate UUIDs, not real element ids; their
|
|
202
|
+
// rect is synthesised from the bbox in the UUID itself rather than
|
|
203
|
+
// fetched from the driver.
|
|
204
|
+
const rect = await resolveTargetRect(driver, args.elementUUID);
|
|
205
|
+
if ('error' in rect) {
|
|
206
|
+
return rect;
|
|
207
|
+
}
|
|
194
208
|
return coordsForDirection(args.direction, {
|
|
195
209
|
x: rect.x,
|
|
196
210
|
y: rect.y,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swipe-scroll.js","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/swipe-scroll.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,
|
|
1
|
+
{"version":3,"file":"swipe-scroll.js","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/swipe-scroll.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/tap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/tap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAoBhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEhD,wBAAsB,SAAS,CAC7B,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,aAAa,CAAC,CAqCxB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,aAAa,CAAC,CAwDxB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,cAAc,EACtB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,aAAa,CAAC,CA0ExB"}
|
|
@@ -2,23 +2,21 @@ import { getPlatformName, PLATFORM } from '../../../session-store.js';
|
|
|
2
2
|
import { elementClick, execute, getElementRect, performActions, } from '../../../command.js';
|
|
3
3
|
import { errorResult, textResult, textResultWithPrimaryElementId, toolErrorMessage, } from '../../tool-response.js';
|
|
4
4
|
import { isAIEnabled } from '../../ai/config.js';
|
|
5
|
-
|
|
6
|
-
const AI_DISABLED_REJECTION = `Received an ai-element: UUID, but the appium_ai tool is not registered ` +
|
|
7
|
-
`(AI_VISION_ENABLED is not set to true). Use appium_find_element to get a real ` +
|
|
8
|
-
`element UUID, or enable AI_VISION_ENABLED=true with the required AI_VISION_* keys.`;
|
|
5
|
+
import { aiDisabledResult, isAiElementUUID, parseAiElement, } from './ai-element.js';
|
|
9
6
|
export async function handleTap(driver, args) {
|
|
10
7
|
try {
|
|
11
8
|
if (args.elementUUID) {
|
|
12
|
-
if (args.elementUUID
|
|
9
|
+
if (isAiElementUUID(args.elementUUID)) {
|
|
13
10
|
if (!isAIEnabled()) {
|
|
14
|
-
return
|
|
11
|
+
return aiDisabledResult();
|
|
15
12
|
}
|
|
16
|
-
const parsed =
|
|
13
|
+
const parsed = parseAiElement(args.elementUUID);
|
|
17
14
|
if ('error' in parsed) {
|
|
18
15
|
return errorResult(parsed.error);
|
|
19
16
|
}
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
const { x, y } = parsed.center;
|
|
18
|
+
await performActions(driver, w3cTapAt(x, y));
|
|
19
|
+
return textResultWithPrimaryElementId(args.elementUUID, `Successfully tapped at AI element coordinates (${x}, ${y}).`);
|
|
22
20
|
}
|
|
23
21
|
await elementClick(driver, args.elementUUID);
|
|
24
22
|
return textResultWithPrimaryElementId(args.elementUUID, `Successfully tapped element ${args.elementUUID}.`);
|
|
@@ -42,9 +40,23 @@ export async function handleDoubleTap(driver, args) {
|
|
|
42
40
|
// other JS-bridged) gesture handlers. Resolve elements to coordinates
|
|
43
41
|
// and use the same W3C sequence everywhere, verified against vodqa.
|
|
44
42
|
if (args.elementUUID) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
if (isAiElementUUID(args.elementUUID)) {
|
|
44
|
+
if (!isAIEnabled()) {
|
|
45
|
+
return aiDisabledResult();
|
|
46
|
+
}
|
|
47
|
+
const parsed = parseAiElement(args.elementUUID);
|
|
48
|
+
if ('error' in parsed) {
|
|
49
|
+
return errorResult(parsed.error);
|
|
50
|
+
}
|
|
51
|
+
// ai-element UUIDs are coordinates, not real element ids — use W3C
|
|
52
|
+
// double-tap at the parsed centre (same as main for real elements).
|
|
53
|
+
({ x, y } = parsed.center);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const coords = await resolveCoordsFromElement(driver, args.elementUUID);
|
|
57
|
+
x = coords.x;
|
|
58
|
+
y = coords.y;
|
|
59
|
+
}
|
|
48
60
|
}
|
|
49
61
|
else if (args.x !== undefined && args.y !== undefined) {
|
|
50
62
|
x = args.x;
|
|
@@ -83,22 +95,36 @@ export async function handleLongPress(driver, args) {
|
|
|
83
95
|
let x;
|
|
84
96
|
let y;
|
|
85
97
|
if (args.elementUUID) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
await execute(driver, 'mobile: touchAndHold', {
|
|
90
|
-
elementId: args.elementUUID,
|
|
91
|
-
duration: duration / 1000,
|
|
92
|
-
});
|
|
93
|
-
return textResultWithPrimaryElementId(args.elementUUID, `Successfully long pressed element ${args.elementUUID} for ${duration}ms.`);
|
|
98
|
+
if (isAiElementUUID(args.elementUUID)) {
|
|
99
|
+
if (!isAIEnabled()) {
|
|
100
|
+
return aiDisabledResult();
|
|
94
101
|
}
|
|
95
|
-
|
|
96
|
-
|
|
102
|
+
const parsed = parseAiElement(args.elementUUID);
|
|
103
|
+
if ('error' in parsed) {
|
|
104
|
+
return errorResult(parsed.error);
|
|
105
|
+
}
|
|
106
|
+
// ai-element UUIDs are coordinates, not real element ids — skip the
|
|
107
|
+
// iOS `mobile: touchAndHold` fast-path and long-press at the parsed centre.
|
|
108
|
+
({ x, y } = parsed.center);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
const platform = getPlatformName(driver);
|
|
112
|
+
if (platform === PLATFORM.ios) {
|
|
113
|
+
try {
|
|
114
|
+
await execute(driver, 'mobile: touchAndHold', {
|
|
115
|
+
elementId: args.elementUUID,
|
|
116
|
+
duration: duration / 1000,
|
|
117
|
+
});
|
|
118
|
+
return textResultWithPrimaryElementId(args.elementUUID, `Successfully long pressed element ${args.elementUUID} for ${duration}ms.`);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// fall through to W3C Actions fallback
|
|
122
|
+
}
|
|
97
123
|
}
|
|
124
|
+
const coords = await resolveCoordsFromElement(driver, args.elementUUID);
|
|
125
|
+
x = coords.x;
|
|
126
|
+
y = coords.y;
|
|
98
127
|
}
|
|
99
|
-
const coords = await resolveCoordsFromElement(driver, args.elementUUID);
|
|
100
|
-
x = coords.x;
|
|
101
|
-
y = coords.y;
|
|
102
128
|
}
|
|
103
129
|
else if (args.x !== undefined && args.y !== undefined) {
|
|
104
130
|
x = args.x;
|
|
@@ -126,22 +152,6 @@ export async function handleLongPress(driver, args) {
|
|
|
126
152
|
return errorResult(`Failed to perform long_press. ${toolErrorMessage(err)}`);
|
|
127
153
|
}
|
|
128
154
|
}
|
|
129
|
-
function parseAiElementCoords(uuid) {
|
|
130
|
-
const parts = uuid.split(':');
|
|
131
|
-
if (parts.length < 2) {
|
|
132
|
-
return { error: 'Invalid AI element UUID format.' };
|
|
133
|
-
}
|
|
134
|
-
const coords = parts[1].split(',');
|
|
135
|
-
if (coords.length < 2) {
|
|
136
|
-
return { error: 'Invalid AI element coordinates format.' };
|
|
137
|
-
}
|
|
138
|
-
const x = parseInt(coords[0], 10);
|
|
139
|
-
const y = parseInt(coords[1], 10);
|
|
140
|
-
if (isNaN(x) || isNaN(y)) {
|
|
141
|
-
return { error: 'Invalid AI element coordinates: not numbers.' };
|
|
142
|
-
}
|
|
143
|
-
return { x, y };
|
|
144
|
-
}
|
|
145
155
|
function w3cTapAt(x, y) {
|
|
146
156
|
return [
|
|
147
157
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tap.js","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/tap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EACL,YAAY,EACZ,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,UAAU,EACV,8BAA8B,EAC9B,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"tap.js","sourceRoot":"","sources":["../../../../src/tools/gestures/handlers/tap.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/server.json
CHANGED
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
"name": "io.github.appium/appium-mcp",
|
|
4
4
|
"title": "MCP Appium - Mobile Development and Automation Server",
|
|
5
5
|
"description": "MCP server for Appium mobile automation on iOS and Android devices with test creation tools.",
|
|
6
|
-
"version": "1.74.
|
|
6
|
+
"version": "1.74.3",
|
|
7
7
|
"packages": [
|
|
8
8
|
{
|
|
9
9
|
"registryType": "npm",
|
|
10
10
|
"identifier": "appium-mcp",
|
|
11
|
-
"version": "1.74.
|
|
11
|
+
"version": "1.74.3",
|
|
12
12
|
"transport": {
|
|
13
13
|
"type": "stdio"
|
|
14
14
|
}
|
|
Binary file
|